Over time core business logic of an application becomes tightly coupled with various libraries, frameworks and technologies making it harder to evolve and test. It becomes challenging for long lasting product that needs to keep up with changing customer needs and evolution of technology.  Ports and Adapters Architecture (Alistair Cockburn), also known as Hexagonal and Plug-in architecture, can help by Continue reading

This code snippet introduces 10 basic AngularJS  concepts for beginners by building a very simple application. The application enables users to maintain a to do list with basic add, edit, and remove features. Additional features include sorting, ability to mark each item as complete etc. In this application, following concepts are introduced:

  1. angular.module, ng-app, and ng-controller: setting up the bare-bone structure of an AngularJS application
  2. ng-model: two-way data binding
  3. {{  }}: data binding expression
  4. ng-disabled: enabling/disabling widgets
  5. ng-show: controlling the visibility of widgets
  6. ng-class: controlling the appearance of widgets
  7. ng-click and ng-keypress: handling click and key press events
  8. JSON: woking with JSON objects and collections
  9. ng-repeat: rendering collections
  10. ui-sortable: enabling sorting by dragging

Here is the final result of the application followed by the source code. You can play with the code and create your own version of the app @ jsfiddle.net.

Continue reading

Test Driven Development (TDD) and Behaviour Driven Development (BDD) are the most widely used technical practices in agile software development. These two automated testing approaches are not alternative to each other but complement each other by addressing software quality from a different angle.

To understand the unique strengths of these two practices, let’s think of the journey a user story that is ready for development and has the required acceptance criteria. The acceptance criteria of a story tells about the expected behaviours from customers’ perspective. Continue reading

This Android app was developed as an example to show how hybrid apps can be developed using web technologies. The app was developed using HTML5 and various Java Script libraries based on the PhoneGAP shell for Android. This single screen app shows the current weather condition with five-day forecast. Several APIs were used to make this app functional: Cordova to obtain the current location from the device, Google API to obtain current address based on location, jQuery AJAX for retrieving weather JSON from a web service, jQuery mobile for the UI framework, and RGraph for drawing the HTML5 chart to display the weather trend.

Complete source code of the app is available on GitHub under MIT license.

 

app-weather-trend

Hybrid is an app development approach where only a bare minimum shell of the app is developed using native programming language and most of the app logic is implemented using web technologies (HTML5, CSS3, and various Java Script libraries). Basically, the native shell provides an embedded web browser or container to  load the HTML-based app UI. Hybrid approach is becoming a popular and faster way to reach mobile users across various platforms as most of the app code can be shared across platforms. Although the user experience of hybrid apps is not as intuitive as native, this approach is the only economically sensible option for existing web development organizations to reach the mobile users without significant investment on different mobile platforms.

The most widely used framework for hybrid app development is PhoneGAP which provides the native shell for most of the mobile platforms available now. The key component of the PhoneGAP framework is the Apache Cordova interface – a java script library for accessing various device features: location, local storage etc. PhoneGAP provides a uniform Cordova java script interface for all supported platforms; therefore, HTML based apps can use the same code for all platforms.  Following figure shows how the code of a hybrid app is shared across two different platforms.

 

hybrid_app

 

DZone Refcardz series has 6 reference cards relating to various agile methodologies and practices. These might be useful for high-level overview and quick reference:

  • Agile Adoption: Improving Software Quality (link)
  • Agile Adoption: Reducing Cost (link)
  • Agile Adoption: Decreasing time to market (link)
  • Scrum (link)
  • Getting Started with Lean Software Development (link)
  • Getting Started with Kanban for Software Development (link)

There are also few online agile glossaries which are very comprehensive:

Visual Agile Language or Visual AGILExicon© is a collection of icons and pictures that represents most of the Agile/Scrum concepts and activities. Each of these images explains the relevant concept or activity in great clarity. This collection is a great resource for preparing training and process related presentations for both new and experienced teams. Visual AGILExicon© is developed by Kenny Rubin from Innolution. The license to use this collection can be obtained at no cost from Innolution site for using in training and forum presentations. As part of the license agreement, it’s a requirement to include one slide in the presentation that provides appropriate attribution. The collection can be browsed from here.

The availability of canvas in HTML5 enabled the development of visualisation libraries for rendering charts/graphs in native html without any plug-in dependencies (e.g., Flash, Silverlight, Java Applet etc.). Among the freely available libraries, both jqPlot and RGraph are very comprehensive and intuitive to use. jqPlot is basically a jQuery plug-in that renders charts based on JSON data and has support for most of the basic charts. On the other hand, RGraph has support for some planning and management charts including Funnel charts, Gantt charts, Waterfall charts, Rose charts etc.