Boring in Pursuit of Fulfillment

Happy New Year folks, its been a while since I last wrote, but well the year is still young. Its just a week to Valentine’s day and I am contemplating what to do this year for my dear loved one, which got me thinking of how I should approach it… With all the flash and pomp that comes with the day, maybe I should change the game to bring more fulfilment given we met over 19 years ago.

This morning during my 1 hour commute to town in the quiet of the car, snores of the kids in the background, bright headlights blinding me so I could not see the road, that maybe I should just be boring. Slow down, be boring, do something regular – go back to my younger days. I am buying a writing pad, and will pen words just like Solomon in the bible, tiny acts which have probably been lost in the hustle, bustle and grind of life…

On getting to my desk, I suddenly realized that boring was not for relationships and family only, but also my work in tech should be boring, unseen, invisible but always there. I should be solving boring problems, with boring tech tools that just work!! And I am going to do just that…

To a boring, but ultimately fulfilling year ahead…

Advertisements

My 2018 Uganda Independence Pledge

Uganda, my motherland, my homeland where I was bred, born and raised
While I may not like what you have become
I am not going anywhere
Age ain’t nothing but a number
Now it is my turn – It is not about what you can do for me, but what I can do for you

I pledge to learn new skills and gain new knowledge everyday
I pledge to gain mastery of the crafts that I practice
I pledge to use those gifts
To grow, guide, mentor
To clear and prepare a path
Starting from my own sire
On the journey into the unknown future

I will not forget my culture and norms of my forefathers
An unseen pulse through my veins
A perspective
A foothold to step on
A ledge to hoist myself
These too I add to my arsenal

I pledge to stand upon the shoulders of giants
To grow strong
So I can provide strong shoulders for others
Despite all my failings
To err is human
I will stand strong

As I make this pledge I am of sound mind and thought

For God and my country

An Opinionated Approach to OpenMRS Customization

This is my opinionated guide to OpenMRS (http://openmrs.org) customization for multiple sites, may work for a single site if developer resources are available. This guide is based on 3 years working with the UgandaEMR distribution (https://wiki.openmrs.org/display/docs/UgandaEMR+Distribution) for the Ministry of Health of Uganda, currently in 650 sites across the country (December 2017).

Background to OpenMRS 

OpenMRS is a electronic medical records solution, which runs on Java 8, Apache Tomcat 7 and MySQL 5.x (we are using 5.5 and 5.6). The solution is based on openmrs-core (the platform) and modules which extend the platform providing key functionality such as look and feel, REST API, data collection tools, dashboards, patient management workflows.

OpenMRS releases the Reference Application (RefApp) a collection of modules that showcases how the EMR can be setup for clinical workflows, and which is usually the starting point for implementations. The RefApp is released twice a year, April and October, with enhancements that are prioritized by the community and developed leveraging available resources.

I may be somwhat biased due to my role as Reference Application Lead from January 2017.

UgandaEMR

This is one of the nationally approved EMR solutions, which is being actively developed from August 2015, currently supporting HIV Treatment and Care including HIV Exposed Infants (babies born to HIV positive mothers), Safe Male Circumcision, Tuberculosis treatment, Maternal and Child Health (antenatal, maternity and post-natal care), Outpatient services among others.

Guiding Principles

This approach follows the list of principles below:

  1. Any distribution should only customize workflows, look and feel and provide metadata to the underlying EMR – any custom functionality belongs in the underlying core platform and modules. This rule means that the underlying code grows and evolves with time to meet needs of different implementations, may not be adhered to 100% but even 80% is sufficient
  2. “If you need to change the core, then you are probably doing something wrong” ~Daniel Kayiwa OpenMRS Core Contributor, which is probably true. There are multiple ways to skin a cat so skin it the “openmrs” way
  3. Use the OpenMRS SDK – this tool is what an SDK should be, allows you to create, run and test multiple variations and approaches using the openmrs-distro.properties file that allows the distribution to define and build its own war file and docker containers for shipping
  4. Leverage the new openweb apps (OWAs) approach to provide user interfaces with the REST APIs
  5. For concepts always refer to the CIEL dictionary (http://openconceptlab.org/) as your primary reference
  6. Contribute changes back to the platform and modules you are using rather than build your own – stand on the shoulders of giants, but feed them too so that they can grow stronger and carry others. This is a core opensource ethos
  7. Keep your distribution code public – share with others never know where the knowledge will come from. My personal technology experience has been that at some point in time, you will have to come out and find you missed alot of the magic
  8. Ask quesitons on design, approaches, best practices and collaborate with the community to grow your knowledge and others – Don’t build a wall fence around your house, raise your neighbors so that you do not need a wall fence

How to setup a Customization

  1. Setup OpenMRS SDK in your developer environment – by now you have figured that I love this tool
  2. Use the SDK to create a reference application module usually named openmrs-module-mydistribution using

    mvn openmrs-sdk:create-project -Dtype=referenceapplication-module

  3. Create a new OpenMRS SDK server following the steps at https://wiki.openmrs.org/display/docs/OpenMRS+SDK#OpenMRSSDK-Settingupservers
  4. Copy openmrs-distro.properties file from the server to api/src/resources for your module
  5. Add a build plugin in the omod/pom.xml folder such as below extracted from UgandaEMR
  6. <build>

    <finalName>${project.parent.artifactId}-${project.parent.version}</finalName>
    <plugins>
    <plugin>
    <groupId>org.openmrs.maven.plugins</groupId>
    <artifactId>maven-openmrs-plugin</artifactId>
    </plugin>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    </plugin>
    <plugin>
    <groupId>org.openmrs.maven.plugins</groupId>
    <artifactId>openmrs-sdk-maven-plugin</artifactId>
    <version>3.13.1</version>
    <executions>
    <execution>
    <id>build-distro</id>
    <phase>install</phase>
    <goals>
    <goal>build-distro</goal>
    </goals>
    <configuration>
    <dir>${project.build.directory}/docker</dir>
    <bundled>true</bundled>
    <distro>${project.build.directory}/classes/openmrs-distro.properties</distro>
    <batchAnswers>
    <param>n</param>
    </batchAnswers>
    </configuration>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </build>
  7. Set your custom module to be watched by the server, so each time the server is started the latest version of the module is built and deployed also makes live reload of controllers and styling possible
  8. mvn openmrs-sdk:watch

  9. Add a .travis.yml file to provide integration to Travis CI a sample below
  10. language: java
    jdk:
    - oraclejdk8
  11. Traditional OpenMRS development approaches now follow 😉

More examples from UgandaEMR can be found at http://bit.ly/ugandaemr-technicalguide

In closing, these are my thoughts on how such customizations should be done, while they may need a developer available, they are bound to start the test of time.

Do share your thoughts and learnings from this and let me know how to improve, I may not be able to change though

Crowdsourcing Validation Rules for Uganda National ID

I am curious about the ability to validate that the Uganda National Identification Number (NIN) is well formed. However this does not validate that the NIN actually belongs to the person presenting it or that it is correct.

The rules that I have been able to gleam are:

  1. Must be 14 characters long
  2. First character is a letter of the alphabet. C seems to be a common letter – does it stand for citizen?
  3. Second letter is either M or F – male or female
  4. Characters 3 and 4 are numbers, which are the year of birth. Cannot be after 00 since that would make a person below 18
  5. Characters 5, 6, 7 are numbers

How can you help? Which of these rules do not match your NIN? Share any additional patters to build a repository of rules that can later be mapped to programming language validations – Regular expressions and validation frameworks

Harvest Money Expo – What Next for Agribusiness in Uganda?

harvest_moneyOver the weekend, I took time to go to the Harvest Money Expo (https://www.newvision.co.ug/tag/harvest-money-expo/) with the aim of getting some ideas to stimulate my mind with agribusiness opportunities. I awas fortunate to also meet with Robert Kabushenga, Dr Kisamba Mugerwa and Hon. Rosemary Sseninde.

I did some personal introspection on why agribusiness for a technology slanted and entrenched character like myself? My reasons are wide and varied, but include:

  1. The healthy eating challenge – with the rampant industrialization of the food industry, we are eating more and more hormone driven chemically enhanced meat and vegetables, sugar induced juices. This is an opportunity to start taking charge of my eating, in a small but significant way just like my friend James Wire Lunghabo (https://www.instagram.com/wire_james/)
  2. The investment challenge a long play – agribusiness is the next business frontier. Every one has to eat – you can skip for a day or two, but you must eat! So this is the best place to invest, however carefully & gradually growing a portifolio with focused investment.
  3. Retirement plans – oh yes, in about 15 years I will be knocking on retirement from the daily technology grind as I am not sure if my body will still be able to take the beating. So now is the time for me to start planning on what I will do then
  4. Family bonding activities – with all the technology drivers, concrete streets, walled homes, hustle and bustle, simple farm activities provide a chance for the family to bond, learning and teaching from each other. Let us mis-educate each other
  5. Learning platform – agriculture provides a different learning dimension and perspective, how to play well with mother nature at the same time trying to beat her at her game. GMO vs indeginous, do I need to make that capital investment or structure working capital, unskilled vs semi-skilled vs skilled human resources, business processes, organic or commerical business models, what kind of inputs to use, market approach and segmentation, to-do or not-to-do value addition, local vs foreign, and a hybrid to mix all of them together in one pot.

So did the expo deliver, oh yes, I had no expectations, walked around with an open mind, and obviously the depth and breadth of solutions and distributors was immense and varied.

Given all that, what next?

  1. Focused Agricultural Information provision in specific areas for farmers is truly a missing gap – this is what National Agricultural Advisory Services (NAADS) was meant to be. Not just extension workers going to farmers, but experience, exposure and eduction with the aim of improving productivity. The value chains exist, but how to bring all the players in line without exploiting the farmer
  2. Alternate Financing options are necessary – BOU Agricultural Credit Facility (ACF) is only in name, but not available to the farmers in the $5,000 to $50,000 range who are the main drivers of the sector. The commerical banks pay lip service to farmers treating them like lepers without taking time to create specialized vehicles for success.
  3. The need to coordinate players into “assembly lines” from seed/baby animal to plate. This is illustrated by the expo organization, which attracted government, public and private sector players, local and foreign, as well as across the value chains.
  4. In addition to knowledge, quality inputs are a missing link – seeds, fertilizers, chemicals (yes a necessary evil), practices and processes to improve production.
  5. Agribusiness education – the marriage between agriculture and business practices, which is a paradigm shift that is required to drive the sector to new heights. This will lead to the realization that there are multiple models that can be adopted, there is no single right way to approach agribusiness, but its all based on context, location and complimentary advantage.
  6. A need for a sprinkling of relevant appropriate technology (not only IT), but even tools, to spur growth in the new area. The soil stabilized bricks, hyroponics and natural shea butter based beauty & health products, are areas that really caught my eye.

The million dollar question for me is “How to drive agribusiness from subsistence to semi-intensive at a national scale?”

 

Boda boda registration – An approach for KCCA

There are job advertisements going all around social media for enumerators to support an exercise to register boda-boda drivers in Kampala city. These are thoughts on how the implementation can be done in a cost-effective manner, getting a reasonable return for the investment.

  1. Stakeholder engagement and management – outline the benefits of the registration to the different stakeholders, the motorcycle owners, riders, general public, law enforcement
  2. Digitize the process – in the era of cheap $100 – $150 tablets, this can manage the costs by combining both the data collection and data entry steps of process. This can also help provide immediate metrics of survey progress
  3. Leverage the social organization that is boda boda stages – these are the defacto locations where the riders congregate and organize themselves. At the stages is also a social circle and hierarchy with savings schemes, rules of behavior that is enforced.
  4. Leverage other databases – URA TIN and Vehicle Registration, National Identification Regulatory Authority (NIRA) for National ID verification to help verify the accuracy of the collected data
  5. Tag the boda bodas that have been registered – you can use passive RFID tags which can be checked quickly
  6. Use a local company to build the platform – rather than a foreign owned entity
  7. Plan for motorcycles that may be missed in the different verification waves, so that the exercise remains up to date

Additions and feedback are welcome

Software Delivery Skills Plan 2018

If you fail to plan, you are planning to fail! ~Benjamin Franklin

A new year is upon me, and looking over the horizon I am looking to do the following work streams to help better my development skills

1. Work with a new age Javascript framework – vue.js seems the rage, this is also working with webpack and new Javascript build tools

2. Make docker part of my development workflow – this will be project based

3. Distributed ledger proof of concept – the distributed ledger is the rage now, but what can be achieved to prove its capability

4. API First project – this is a separatation of the backend REST APIs from the front end, may be combined with the vue.js to deliver a working project. I will also look to leverage the OpenAPI

5. Write a paper for a scientific journal leveraging the health informatics work I have been doing over the last 3 years and present it at a conference.

%d bloggers like this: