FOSS based Mobile Solutions : Deliver Medical Facilities to Remote Areas

Following is the article that I wrote for Linux For You (July, 2012 Edition) . This article is released under CC by SA by Linux for You.

Foss based Mobile Solutions : Deliver Medical Facilities to Remote Areas

Sometime back mobile were considered only a device used for making/receiving call’s or sms. In the last several year the number of people using mobile phone have exploded. Now, mobile is a very well connected network which now connect people all across the globe. In the last few years healthcare industry has realized untapped potential that lies in beneath these mobiles. Things like crowdsorcing and crowdmapping using mobile for working out plan for healthcare support after disaster is used frequently.

Its is something that is becoming more and more important in public health. Earlier Google and Frontline SMS had collaborated during the Haiti post earthquake disaster relief efforts and used mobile technology to make health care workers aware of public health issues on the ground – Ushahidi was there, helping translate text messages and tweets to data on a map.

This article is intended for Doctors / Service providers in healthcare systems / people interested in leveraging benefit of open source application for public healthcare infrastructure.

In this article we will explore around SMS for Life, Ushahidi and SwiftRiver .

Before going into these lets first see what crowdmapping actually is. After an event – whether it be post disaster relief, or for any public health crisis – anyone can send a message related to public health to a SMS short code, or send a tweet. The message needs to contain the relevant public health info, along with a location. It can then be translated to data on a map, allowing public health workers to efficiently allocate resources in real time. These real time online interactive maps are called Crowdmapping. Once this information is collected, volunteers collaborate over the internet to put each post onto a map, which is updated second by second. This lets on-the-ground officials locate people with the most critical needs and deliver medical and humanitarian relief more quickly and efficiently.

SMS for Life

First-line malaria medication is needed within the first 24 to 48 hours after symptoms to save the lives of children under 5, and stock-outs are such a common problem, up-to-date information on supply levels is critical. SMS for Life is a project to track the supply levels of malaria medication in hospitals and clinics in Africa. Health workers send weekly text messages to report on their supply levels, and the data is collected and displayed on a map. District medical officers can then view up-to-date status of facilities in their district, and use the information to make forecasts and plan shipments.
The SMS for Life Map Viewer is open source, under the Apache 2.0 license.
It is a solution to the longstanding problem of stock-outs at the remote health facility level.
Maintaining adequate supplies of anti-malarial medicines at the health facility level in rural sub-Saharan Africa is a major barrier to effective management of the disease. Lack of visibility of anti-malarial stock levels at the health facility level is an important contributor to this problem.
The SMS for Life pilot provided visibility of anti-malarial stock levels to support more efficient stock management using simple and widely available SMS technology, via a public-private partnership model that worked highly effectively. The SMS for Life system has the potential to alleviate restricted availability of anti-malarial drugs or other medicines in rural or under-resourced areas.
Overall, the SMS for Life system was built to be a generic and highly scalable solution that can be leveraged to support any medicine or product, and can be implemented in any country with minimal tailoring. Additionally the system could also be utilized for disease surveillance.
The data captured through the SMS stock count messages was available through a secure reporting website. The website was then accessed via the internet on a computer or a Blackberry or other smart mobile phone. Access to the website was granted through a unique User ID and password allocated at the group level .

How does SMS for life work

“SMS for Life” will automatically send text messages to all health facilities on a weekly basis asking for their current stock of medicines. The responses will be collected and stored centrally on a website and will generate the following types of reporting:
Display of the stock situation by health facility at country and district levels
Alerts sent to the district or central stores will provide immediately information on stock-outs
Query and reporting of stocks by health facility, district, region, zone and calculate average weekly usage by health facility etc.
Early warning of malaria outbreaks, e.g. highlight when there is a sharp rise in weekly usage in a number of closely located health facilities.
The ‘SMS for Life’ Pilot was launched on 21 September 2009, in Tanzania. The project is piloted in the 3 districts of Lindi Rural, Ulanga and Kigoma, at a total of 155 public health facilities. The pilot was ran for five months and terminated in February 2010.
What is Ushahidi

Ushahidi is an open-source crowd-sourcing platform that can be used to collate and map information gathered from the public via email, SMS, twitter, etc. It has been used around the world to map or monitor incidents such as election violence, earthquakes in several crisis situations around the world from.

The Ushahidi platform is built on the Kohana web framework. It includes built-in support for Nexmo wholesale SMS API and Clickatell SMS gateways. Ushahidi provides the option of using OpenStreetMap maps in its user interface, but requires the Google Maps API for geocoding.

Ushahidi currently has an Android and Windows Mobile App, and plans on releasing an iPhone app later this year. Although apps aren’t required for Crowdmapping (SMS makes most sense in places such as Haiti) – smartphones make the use of Ushahidi significantly more powerful. Allowing automatic GPS and pictures to be loaded. The use of smartphone technology for Ushahidi in a public health setting would be something health care workers might be suited for – by being given Android phones to provide rich data.

How does Ushahidi work
Once and Ushahidi instance is setup, messages can be sent in via email, SMS, twitter or directly on the instances website. The messages are verified by an administrator and once a message is approved it is published and the location of the incident is displayed on a map. Incidents can be categorized. In this way, a visual display of incidents and categories can be built.

Ushahidi enables information to be gathered from the public through a variety of channels. It can be setup relatively quickly and supports several languages.

SwiftRiver (platform consisting of APIs) for data gathering of extracting useful information.

SwiftRiver is a platform that helps people make sense of a lot of information in a short amount of time. In practice, SwiftRiver enables the filtering and verification of real-time data from channels like Twitter, SMS, Email and RSS feeds. Its is an API ecosystem.

1. It helps to curate real-time data and analysis on any topic or interest relevant to you or your organization.

2. It helps users discover nascent relationships and trends in data sets that may appear to be unrelated.

3. It can be used to setup streams that search for mentions of your brand or product online and manage social media campaigns after disasters (e.g. Twitter, SMS, email) from one dashboard.

4. SwiftRiver adds context to content using semantic analysis. Auto-categorize and classify email, twitter, text messages or news articles based on keywords.


1. SMS for Life :
2. Ushahidi :
3. SwiftRiver :

Write Modules, Save Lives – Part 1

Following is the article on OpenMRS module development that I wrote for Linux For You (July, 2012 Edition) . This article is released under CC by SA by Linux for You.

OpenMRS, a widely used Electronic Medical Record system, is a community-developed, open-source, and enterprise-grade platform. Its core is very thin, and almost every functionality is provided through pluggable modules. It’s robust enough for a nationwide health-care system, and nimble enough for a field-based clinic. This article series will cover how to do OpenMRS module development, and is aimed at J2EE developers, and people who want to contribute to OpenMRS.

A lot of OpenMRS modules exist, and the list is constantly increasing. A detailed list is available at OpenMRS offers functionality to directly install/update modules through a Web interface—on the fly, without restarting Tomcat.

This first article in this series will cover the basics of the OpenMRS architecture and how to install, update, stop and start a module in OpenMRS. The OpenMRS is built on the Spring and Hibernate Stack and uses MySQL as the database.

Basic architecture

Figure 1: Typical architecture of the OpenMRS stack

The components are:

  • Spring: An application development framework for developing MVC architecture applications.

  • POJO: Plain Old Java Object.

  • Hibernate: The Java persistence framework project, performs powerful object-relational mapping, and queries databases using HQL and SQL.

  • DAO: Direct Access Object

  • Liquibase: Database-independent library for tracking, managing and applying database changes.

An interesting fact about OpenMRS modules is that they are like mini subsystems that can not only communicate with OpenMRS core services, but can also have their own services and schema that can be used by other modules. This makes modules flexible enough to be independent of the system, and robust enough to be dependent on each other, if required.

Module installation

Note: Installing modules through the Web interface is disabled by default (for security purposes). To enable it, set the ‘module.allow_web_admin‘ runtime property to true and restart the application.

  1. Download the module to the local filesystem.

  2. Go to the Manage Module page on the administration page, then click Add or Upgrade Module.

  3. After this, select the .omod module file you downloaded, and click Upload.

  4. The module will be installed without restarting the server. Note that each time an action is taken on a module, the OpenMRS context is restarted. When a module is loaded, database changes in Liquibase that will be required by the module (if any) are applied to the database.

The module is now accessible to everyone privileged to use it. Modules can have granular privileges i.e. any specific set of roles as required by the module.

Note: There are other ways of installing modules, like directly searching the OpenMRS modules repository and installing directly from the repository—or dropping the .omod file in the defined module repository folder.

Module start/stop

Go to the OpenMRS module management page and click the red button to stop it, or the green button to start it. During this, no database changes made by the module are lost; only the OpenMRS context is restarted, and the module is started or stopped.

Module updates

You can check for updates to modules by clicking the Check For Update button on the Manage Modules page. You can also upload a newer version of the module through the Web interface, or directly dump the module file to the OpenMRS module repository.

On an update, first the old module is removed. After that, database changes from the previous version to the newer version (i.e. with different IDs) are applied to the database. Then the module is loaded.

Module deletion

To delete a module, in the module management page, click the grey icon next to the module you want to delete. Any database changes done by the module are not deleted. The OpenMRS context will be restarted after removal of the module from the module repository folder.


  • List of OpenMRS sites:

  • OpenMRS module repository:

  • Most downloaded modules:

Lets Present

Following is the article “Lets Present” that I wrote for Linux for You , this article is now in CC by SA license.

Presentation” : The word which whenever comes to our mind, the very next thought that comes after this is that “Oh, hell again a odp or ppt” . All of us are preparing presentation when we are in school, we used to create presentation for assignments and summer project, when we came in college, we prepared presentation for projects, assignments, arranging fests funding through sponsors and off-course for impressing companies during the placement, after that start the client presentations, project status presentations etc. Although the content of presentation always changes but the way you showcase your presentation never , it almost always remain PPT or ODP . But there are many interesting ways you can present your presentation except those. In this article we will be discussing about the using impress.js ( to create cool presentations. This uses the power of CSS3 to give a very fresh feel to the way we used to give presentation.

impress.js is a javascript library created by developer Bartek Szopka, which takes the power of CSS3 transforms and transition and gives you a rock solid platform over which you can built impressive presentations. The javascript library is licensed under the MIT License. The project can be forked from the project page that is : . This library is only compatible with Google Chrome or Safari (or Firefox 10 or IE10).

Using impress.js for creating presentations is quite straight forward. In the next few steps you will see how to create very basic presentation using this library.

  1. First of all you need to download the impress.js library from the github.For this first go to the and then save it a folder.

  2. Now, create the html page, which will contain your slides. Also include the impress.js file in the html page.For this use the following code :


<!doctype html>



<title>my first presentation using impress.js</title>

<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>



<script type=”text/javascript” src=”impress.js”></script>




Note : The javascript library impress.js must be included just before the closing body tag.

  1. The source in the script tag is the place where you have downloaded the impress.js library in the first step. If it is the same directory where your html page is located then src=”impress.js” is fine, else made the adjustment based on the location where you have saved the impress.js library.

  2. Now, inside the body tag, create a division with id “impress” which will contain all the slides.

  3. Now, the body tag will look something like this :



<div id=”impress”>




  1. Now, inside that impress division, you can have multiple slide, each slide inside the separate division with class step slide. After this you body tag will contain following code.



<div id=”impress”>

<div class=”step slide” >

This is my first slide.


<div class=”step slide” data-x=”500″ data-y=”0″>

This is my second slide.





  1. Yes, you are down, open the html page in Google Chrome or Safari (or Firefox 10 or IE10), any see the magic.Use the arrow key to move back and forth.

If you want to check inform user if his/her browser does not support impress.js, then you can create a division with class=”no-support-message” whose content will be shown, if users browser does not support the impress.js library. You can also play around with each and every slides orientation (when slide is not active) by changing any of the following properties of the slides ( i.e. division with class “step slide” , inside the division with id “impress” ) : (taken from the tutorial )

1. data-y = the y co-ordinate of the slide

2. data-x = the x co-ordinate of the slide

3. data-z = the z co-ordinate of the slide

data-scale = scales your slide by a factor of this value. A data-scale of 5 would be 5 times the original size of your slide

4. data-rotate = rotates your slide by the specified number of degrees

5. data-rotate-x = This is the number of degrees it should be rotated about the x-axis in 3D slides.

6. data-rotate-y = This is the number of degrees it should be rotated about the y-axis in 3D slide

7. data-rotate-z = This is the number of degrees it should be rotated about the z-axis in 3D slide

Some cool presentation as based on impress.js as claimed by are following : from meet.js summit by @bartaz by John Polacek @johnpolacek by Stephen Fulljames @fulljames by Andreas Kieckens @Metallion98