TechTip: Moving a Project Between Git Repositories

I tend to write these so that I do not forget them, and possibly to help others who may be face similar challenges. The question is why would somebody want to do this, well usually its because of a change in Git hosting providers or probably change in project ownership.

The process is as follows:

  1. Check the configuration of the remote repository
    local-box:change-url ssmusoke$ git remote -v
    origin (fetch)
    origin (push)
  2. Rename the url of the current remote repository from origin:
    local-box:change-url ssmusoke$ git remote rename origin oldrepo
    local-box:change-url ssmusoke$ git remote -v
    oldrepo (fetch)
    oldrepo (push)
  3. Create a new origin pointing to the new remote repository
    local-box:change-url ssmusoke$ git remote add origin
    local-box:change-url ssmusoke$ git remote -v
    oldrepo (fetch)
    oldrepo (push)
    origin (fetch)
    origin (push)
  4. Sync the project to the new remote repository (if any issues occur the old url is still available)
  5. Delete the old url (only after confirming that everything works fine with the new url)
    git remote rm oldrepo

OpenMRS Module Development Learnings – 102

My team mates and I are completing a number of OpenMRS workshops focused on improving our module development capability. This blog post captures the unwritten lessons that we have picked up as a way of giving back our lessons to help others in the community (and will be moved to the OpenMRS Wiki once the lessons have been internalized and consolidated, as that is its natural home).
The approach is based on the following OpenMRS community articles:
  1. Creating Modules –
  2. Creating your First Module –
As you develop the module it is important to keep testing and verifying whatever you do especially when the module involves user interface components, extending the OpenMRS UI. The process we ended up using was as follows:
  1. Setup a module using the module creation command line utility
  2. Downloaded Spring Loaded from its maven repository
  3. Downloaded and setup OpenMRS standalone from picking a version greater than 1.11.x which supports debugging options
  4. Once the standalone version is installed, open the and add the following variables to the vm_arguments: (should all be one line – separated here for clarity)
    • -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
    •{absolute path to root folder of the module}
    • -javaagent:{absolute path to spring loaded jar}
    • -noverify -Dspringloaded=inclusions=org.openmrs.module.modulepackage..* (note the two trailing dots before the *)
  5. Setup newly the module into an IDE (tested with IntelliJ & Eclipse)
  6. Installed a FileSync utility, RemoteSynchronizer for IntelliJ & FileSync ( for Eclipse
  7. Setup sync for the omod webapp folder into the standalone webapp folder located at WEB-INF/view/module/{modulename}
Our development workflow is smoothened out since any changes to Java classes & JSPs are automatically applied & reflected in the standalone app.
Additional Tips and Tricks
  1. Tomcat – Change the following init params in web.xml:
    • modificationTestInterval from 4 to 0, so that JSPs are automatically recompiled
    • development is true (this is the default)
  2. Intellij – the Java classes are not automatically recompiled on saving changes so there is need to run mvn package -DskipTests
  3. Follow the OpenMRS conventions as much as possible by cloning openmrs-core to see how the design of the interfaces, service layers is done. This will help get access to lots of the magic that happens behind the scenes.
  4. Java 8 will give you trouble, stick to 1. 7 as we did not try 1.6 anywhere.

Bringing Security to the heart of Uganda Consumer Applications 

A very welcome addition to Uganda technology scene are the multiple consumer facing apps, from banks, to telecommunication companies to support mobile money services, to parastatals getting closer to their customers. The newest apps that I am aware of include (in no particular order):
  1. Airtel Money
  2. My MTN
  3. NWSC Mobile
  4. NSSF Go
  5. Stanbic Bank Mobile Banking
  6. DFCU Mobile Banking
  7. Bank of Africa Mobile Wallet (BMW)
  8. Ask URA
On one hand, this is a very welcome addition to address the increasing sophistication of the Ugandan urban consumer who demands more from the corporations. However a worrying trend which needs to be addressed is the security of these applications, in collecting and managing user information. I have taken to social media to ask for more information on the security setup for these apps, but have never gotten a response.
This is hoping to the regulators, Bank of Uganda, Uganda Communications Commission and NITAU (at the moment) to provide a united front to ensure that the following areas are addressed:
  1. Excess permissions, one app wanted to access my contacts, SMS messages, WIFI, phone identity yet was not a banking app
  2. Encryption of data stored on the phone to ensure that if the phone is separated from the owner the data is safe
  3. Secure connections for communication with external servers – via HTTPS and SSL
  4. Security audits of back end infrastructure following ISO and COBIT standards (
  5. Penetration, stress and load testing to ensure that aside from
  6. Software development practices that include OWASP top 10 Proactive Controls for software developers
What else do you see being done to improve the security of our consumer facing applications

Fundi Bots – A Relevant Alternate Approach to Science and Vocational Training in Uganda 

Today I am a proud father, when my two daughters aged 8 and 10 show me their robots, after 8 weeks with the Fundibots Robotics for Kids training program – Season II . What makes me proud is the fact that the children have gotten their hands dirty, gluing, soldering, learning and implementing mechanics to put together a walking robot and more importantly the students are having so much fun that they are not aware that they’re actually learning a lot.

With the transition of vocational colleges into universities, and the dying out of certain vocations like carpentry, car & machine repair, bricklaying, there is a general drop in the quality of core skills needed to build and maintain infrastructure such as processing plants, cottage industries, as well as factories.

Why do I think the Fundi Bots program is a necessary & relevant approach to core vocational skills building in Uganda, but Africa as a whole:

  1. The program brings together theory in multiple separate areas of mechanical engineering, electronics, software development producing firm foundation
  2. The blend of hardware and software provides a foundation for expansion into leveraging technology for other sectors like agriculture, medicine
  3. Majority of the materials used can be obtained locally, or manufactured using localized technology with a low barrier to entry
  4. The program can be run along existing education structures so can be easily adopted by different schools
  5. The technical aspects can be tailored to different levels, from upper primary school through secondary school to university level
  6. Going through the class provides a mindset change – and a new look into science through a different lens
  7. The program can be tailored to suit special interest groups, like girls, less advantaged, and even in resource constrained environments
  8. The skills are marketable globally, and can be grown to support both local and global needs

Last but not least, is the vision that Solomon King provides for growing the program, based on his own personal journey and experiences, you can see the glint in his eye as he watched over the technology seed planted in the youths through the program

The million dollar question, is what can I do?

  1. Fundibots is a non-profit organization, any support in its different activities such as supporting STEM for Girls, Science education in Uganda including 35K by 2020
  2. Do you want to develop hardware based technologies for use in Uganda/Africa – leverage Fundibots by using and grow our research & innovations lab
Fundibots Cake - Stylish and Classy

Fundibots Cake – Stylish and Classy

The troops are ready for command

The troops are ready for command

Beginner Class Platoon Ready for Inspection

Beginner Class Platoon Ready for Inspection

Arachnid Robots - Alien or Not?

Arachnid Robots – Alien or Not?

Showcase time - getting those robots ready

Showcase time – getting those robots ready

My brood #IamFundi

My brood #IamFundi

Solomon King Addressing the Season II Graduating Class

Solomon King Addressing the Season II Graduating Class

Fundibots Season II Class

Fundibots Season II Class

Robots, Cake and Drinks

Robots, Cake and Drinks

Certificates and Supplementary Materials

Certificates and Supplementary Materials

Future of Software Development Industry In Uganda – 2015 Edition

These are my thoughts on the future of the software development industry in Uganda, after the official announcement of ThoughtWorks closure of the Kampala office (

I would like to approach this first of all by analyzing the contribution of ThoughtWorks to the Ugandan technology space, then what I see the future as.

ThoughtWorks contribution in two aspects – showing that its possible to run a pure-play software development business operation out of Kampala using Ugandan based talent, and the second providing an injection of new DNA into the local technology community. The exposure to international level processes, practices and projects have helped grow the experience of the local software development talent.

Local communities have been started & supported, included but not limited to Agile Uganda, Geek Night, Girl Geek Dinners (yay! Women in Tech), Rails Girls and Ruby Fridays. The OpenMRS community run a number of events to help grow its reach, while the Technology Radar discussions provided a continuous look into the present and future of computing. The contributions leave the local technology space different from three years ago.

What does the future look like? A tough question, and my answer is biased by over 15 years experience writing software in Uganda, my overbearing optimism, and my newly rekindled foray back into software development.

The future is bright, but can only be harnessed if the business and technology communities work hand in hand to grow the local technology capability. In this, a concerted effort to build a local technology practice with buyers pushing for a local component on all contracts leveraging open source. A good example is the Ministry of Health selection of OpenMRS ( as the EMR of choice for electronic medical records throughout the country with aggregate reporting done in DHIS2. There are lots of opportunities in leveraging technology in the agriculture and education sectors which remain new frontiers to be conquered.

I would further call upon the government entities and parastatals KCCA, URA, UMEME, NWSC to leverage OpenData approaches to provide the infrastructure for young innovators to build and monetize customer centric products and services.

Like Ghandi said, be the change you want to be in the world in this case “Coding in Uganda, for Ugandans, by Ugandans”.

Gakyali Mabaga (it is just the beginning)

Trunk or Branch based development

An interesting discussion that I had with my team mates over the last few days, whether we should create branches then merge later or keep working on the trunk within our Git based version control process. As the team is small, we are in the same premises but different locations, we agreed to move to work exclusively on the mainline for the following reasons:

  1. Reduce the amount of work having to remember which branches are active, so branches are an exception rather than the rule
  2. Adding practices like a CI pipeline (that’s additional work for all of us to setup) will provide a needed stability in the long-run as some of the projects are expected to be long running
  3. Working on the main line forces us to talk to each other, rather than IM away, so design decisions are shared across the team
  4. Branches discourage refactoring mostly due to the pain of merging refactored changes, and the fact that not everyone can benefit from the refactoring as soon as its completed – thanks to Twitter – Chris Ford

We used the following resources as research:

1. Martin Fowler – Feature Branch – also talking about Feature Toggles –

2. Apologists Defense of Trunk based development –

3. What is Trunk Based Development

4. Shades of Trunk based development –

What do you use with your team and why?

Launching Syzygy – Uganda Focused Utility Calculator

Just as Google has rebranded into Alphabet, on behalf of Styx Technology Group I would like to officially announce the launching of Syzygy which is a platform for a comprehensive utility calculator for Uganda based on PAYE Calculator ( which was released by myself in 2012.

There are many calculators and utility apps out there, but there are none focused on Uganda specific computations and tools required within the country today. This initial launch is an upgrade of the look and feel of PAYE Calculator to the Android material design, refactoring of the back end to provide the necessary modularity for expansion.

Need any specific features or computation for consideration please contact us at styxtechgroup at gmail dot com

Looking forward to hearing from you

The link to the Syzygy app is

Update 3:

Just had a little techie moment there so I thought I would add some more meat on the technology thinking and approach used for this new platform:

  1. App Compat Library – which provides material design features for pre-Lollipop devices, and this app should load on Ice Cream Sandwich (Android 4.0) devices
  2. Model-View-Presenter (MVP) design pattern akin to Model-View-Controller for web applications. The models will be POJOs (Plain Old Data Objects)
  3. Theme and other functional customizations are being kept as minimal as possible to speed up development and reduce the quantity of testing
  4. Layouts will be as fluid as possible to handle multiple screen sizes, however more focus will be placed on functionality to make this app useful after all Material design is already beautiful.
  5. As few permissions as possible will be requested of you during installation, after all the app does not need them.

Update 2:
There have been quite a number of questions on the inspiration behind the names, so here goes:

  1. Syzygy – In astronomy this is when there are three (3) celestial bodies in a straight line usually the earth, sun and moon. At this point once could argue that the bodies are either in conjunction (working together) or in opposition. In reference to this utility all the tools are meant to work together so that the sum of the parts is greater than the whole.
  2. Styx – In Greek mythology this is the river in between this world and the underworld, with the power to make one invincible. We at Styx Technology Group seek to bridge the divide between those who understand and those who do not understand technology, its impact to society and how to leverage it for growth.

Update 1:
Screen Shots

Home Screen

Home Screen

Navigation Bar

Navigation Bar

PAYE Calculator

PAYE Calculator


Get every new post delivered to your Inbox.

Join 4,666 other followers

%d bloggers like this: