Archive for the ‘tips and tricks’ Category

Syzygy – Release 2 – Uganda Mobile Money Cost Estimator

Syzygy is a Uganda focused utility calculator (launched by this post https://ssmusoke.com/2015/08/11/launching-syzygy-uganda-focused-utility-calculator/), this new release adds a tool not available anywhere else allowing you to estimate the costs of a mobile money transaction. Are you sending to a registered number, unregistered or trying to withdraw from an agent or ATM?

Hope this app saves you the hassle of searching for the transaction chart which is usually hanging in the agent’s booth.

Do let us know what you think of the new release.

The link to the app is http://bit.ly/syzygy-ug

A screenshot of the new calculator is below

Mobile Money Cost Estimator

Mobile Money Cost Estimator

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 https://github.com/ssmusoke/project-repo.git (fetch)
    origin https://github.com/ssmusoke/project-repo.git (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 https://github.com/ssmusoke/project-repo.git (fetch)
    oldrepo https://github.com/ssmusoke/project-repo.git (push)
  3. Create a new origin pointing to the new remote repository
    local-box:change-url ssmusoke$ git remote add origin https://github.com/ssmusoke/newproject-repo.git
    local-box:change-url ssmusoke$ git remote -v
    oldrepo https://github.com/ssmusoke/project-repo.git (fetch)
    oldrepo https://github.com/ssmusoke/project-repo.git (push)
    origin https://github.com/ssmusoke/newproject-repo.git (fetch)
    origin https://github.com/ssmusoke/newproject-repo.git (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 – https://wiki.openmrs.org/display/docs/Creating+Modules
  2. Creating your First Module – https://wiki.openmrs.org/display/docs/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 http://mvnrepository.com/artifact/org.springframework/springloaded
  3. Downloaded and setup OpenMRS standalone from http://openmrs.org/download/ picking a version greater than 1.11.x which supports debugging options
  4. Once the standalone version is installed, open the openmrs-standalone-runtime.properties 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
    • -Dmodule.development.directory={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 (http://andrei.gmxhome.de/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.

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 – http://martinfowler.com/bliki/FeatureBranch.html also talking about Feature Toggles – http://martinfowler.com/bliki/FeatureToggle.html

2. Apologists Defense of Trunk based development – http://www.tuesdaydeveloper.com/2015/05/an-apologists-defense-of-trunk-based-development/

3. What is Trunk Based Development http://paulhammant.com/2013/04/05/what-is-trunk-based-development/

4. Shades of Trunk based development – http://paulhammant.com/2014/09/29/shades-of-trunk-based-development/

What do you use with your team and why?

GeekDIY – Manually Upgrading Samsung S4 to Stock Android Lollipop 5.0.1

I would not consider myself an early adopter, neither am I a laggard, but somewhere in the middle for software upgrades. So when I heard that my Samsung Galaxy S4 would be getting Android Lollipop in December 2014, I was over the moon. What made me envious was that my colleagues with LG, Nexus and Sony devices were getting this update over the holidays.

So patiently I waited stalking the net for news on when my S4 would get an OTA update but no avail, 4 months later I am still feeling left out till, I found this post S4 Stock Lollipop came up in my Google+ feed (yes I use that) which led me to look for options of manually updating my phone to an official stock android for Samsung phones.

This led me to a guide How to get Android 5.0.1 Lollipop on the Galaxy S4  which walked me through the process.

75 minutes later, I had Lollipop 5.0.1 installed on my S4, now to understand how the new notifications & other enhancements can be leveraged for my day to day use most especially the battery life improvements.

My biggest worry was bricking the phone, so I followed the instructions to the letter, and ensured the laptop running Odin was on UPS just in case of power outage.

Tech Tip: Fixing Camera Troubles on Mac

When you use your Mac camera across multiple applications, Go-To-Meeting, Skype, Fuse, Facetime etc, you will find that it tends to not work at times and only a reboot can fix that. Well it happens because probably one of the applications did not release the camera. To fix follow the steps below:

1. Open a Terminal  (yes that black window where you can type magic commands). You can go to the Search in the top-right hand corner and type Terminal

2. Type the command below: sudo killall VDCAssistant

3. You will need to enter your password

Obviously you will ask, do I have to remember this command all the time, not really. Next time you open the terminal, click the up arrow on your keyboard and the command will appear.

Hope this helps somebody else as it does me everyday

Service Provider Dilema – How to Choose and Live with Your Choice

The dilema and rants of “Service Provider” quality of support and services is one we go through day by day. This morning I awoke to a rant by a Tweep on the costs of certain bank services, in this case US$2.5 (UGX 6,500) for an over the counter withdrawal. I smiled because I has been hit with a similar charge for a statement on my account at US$4.7 (UGX 12,000) per month (irrespective) of the number of transactions.

So then I started thinking, yes its going to get me into trouble, how does a consumer (non-technical) but who knows what they want live with service providers. Personally I follow a couple of rules of thumb:

  1. Serenity Prayer: God grant me the serenity to accept the things I cannot change; courage to change the things I can; and wisdom to know the difference.
    • I cannot change the service provider however, though I can get them to listen to me
    • The service is mass market so is not optimized for my particular convenience and usage, so I may need to modify some of my behavior to suit my needs
    • If the service is not working for me I can change it, but I must be willing to pay the price for the change
  2. If you make your bed, you need to sleep in it
    • Once you select a service provider, you may need to adjust to their shortcomings in order to make the best usage of their style of service delivery
    • The cost of changing service providers is usually high, so either stick to the one you have or pay it and move on
  3. Research your service providers before committing to them
    • The reality is you never have enough time, but if you do focus on the basic service you need and your special needs (those on which you cannot compromise)
    • Most times the service provider you choose will be based on a referral or positive feedback so accept that you will not know enough when you jump in
    • Read social media on experiences (spend the time now, and you will know better later)
  4. Use multiple service providers
    • This may not always be possible hence  #1, #2 and #3 above
    • If its possible however, you need to determine what each provider is best at focus on that, and mitigate where they are weak. I use 3 different Telecom providers for mobile phone & data services, because over the three plans I am totally covered for voice and data needs.
  5. All service providers cost the same
    • Even with different service offerings, always check the exceptions which is where you will get hit the most (#3 – Research)
    • Henry Ford recommended creating a product or service that caters for 80% of the populations basic needs, leaving 5-10% who have special needs and are willing to pay extra to get it…. Pick a service where you fall in the 80% and it will work for you most of the time
  6. The best tool for the job is the one you know how to use well
    • In the new consumer driven information age, this is true, learn to use your service providers as tools, at times they change to you, other times you change to suit them

How do you manage the relationships with your service providers? How do you deal with their shortcomings?

%d bloggers like this: