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

Tech companies are shifting more towards machine learning or AI-first strategy. What does that mean to them? What does that mean to us? Growing number of aging population and shrinking funding are putting enormous pressure to the overall healthcare system for keeping up with the desired quality of care with limited resources. Thus, there is an increasing focus on machine learning capabilities for just-in-time alerts to predict various future events so that undesirable incidents can be reduced by giving attention to the right people at the right time. This talk explores the underlying framework behind such capabilities, various strategies for a resilient system, and the role of a machine learning platform. 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

The goal of a video analytics system or application is to generate insights from an observed video stream. In a video analytics system, a continuous stream of video frames is the input which might be originated from various sources, e.g., web cam, mobile camera, Kinect sensor, security camera, video file etc. The output could be one or more video frames per input frame or some data representing insights or perception of the observed scene. Depending on the application, the output video frames might be annotated. For instance, in a face detection application (typically available in cameras), detected faces are highlighted with rectangle; in an object detection system (surveillance applications), moving objects are highlighted and might be annotated with object class such as person, group, car etc.  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.



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.




Ground truth images are essential for the evaluation of object detection or background subtraction techniques. Now what is a ground truth image? Let’s consider a video frame captured using a fixed camera where some objects are static while some are moving. A ground truth image corresponding to this image labels the static and moving parts with two different labels. Usually, white pixels are used for moving objects and black pixels for static pixels. The goal of an object detection technique is to produce detection image close to the ground truth image. To compare the performance of two or more object detection techniques, detection images are compared with the corresponding ground truth images. Most standard datasets come with ground truth images for the test sequences. However, the availability of ground truth images is not uniform across all datasets. For example, some datasets provide ground truth image for just one test frame only while some other datasets provide for all video frames. On the other hand, if you want to want to evaluate performance on your own datasets, there would be no ground truth images at all. A technique to manually generate the ground truth image for a video frame is explained below. Continue reading

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.