First Month At Stripe


In case you don’t know, I’ve been participating in the Stripe Open-Source Retreat for about a month now. This post is a small brain dump of what I’ve been up to in addition to my usual participation in the OpenMRS commmunity.

As the Stripe website says, when I started the Open-Source Retreat, I thought I had a good idea of what needed to be done. I wanted to build a JavaScript library that would be accepted by the OpenMRS community as the go-to tool for building applications using the OpenMRS API.

Reality Check

When I took a step back and decided what I really wanted to achieve during the retreat, I settled on the following goal.

Improve the development experience for developers working to build applications on top of the OpenMRS platform.

It was evident that at least two things needed to be addressed before I could even start thinking about the technical details of building a JavaScript library.

  1. Development Environment Setup
  2. Documentation

It seemed to make sense to put some work into addressing these two issues first.

Development Environment

There have been a few new developers joining eSaude (our Mozambican implementer community) recently, so I started there. I wanted to make it as easy as possible for them to get set up with the custom eSaude OpenMRS distribution and Point of Care application.

I created the following two sets of Docker containers (using docker-compose) to achieve this.

Once I’d completed the implementation-specific Docker container compositions, I did the same for the OpenMRS core platform and Reference Application.

Docker Compositions


OpenMRS had a GSoC student, Zakaria Amine, work on the initial revision of our Swagger documentation generation, but it has not actually been officially released yet. The current mechanism is that the docs are generated dynamically inside the OpenMRS application via a link on the admin page. I wanted the docs available to anyone - even if they aren’t running a copy of OpenMRS locally, so I made a script to build a static site from the Swagger specification.

GitHub is now hosting static versions of the Platform and Reference Application API docs built using the first version of the Swagger specification.

When I took a more detailed look at our Swagger specification, I realised that there were a number of issues, so I created tickets for these and have been working on making sure the Swagger spec we generate is complete, accurate and conforms to the OpenAPI Specification.

I’ve opened (and then subsequently closed without merging) a few PRs for this, but since the scope of the changes has grown, the strategy now is to submit a bunch of improvements in a single PR which will happen in the next few days.

Generating a good Swagger spec is probably the most important thing I’ve been working on, since if this is done correctly it will be possible to (dynamically) auto-generate the basic CRUD functionality of the JavaScript library I want to build using swagger-js. It will also be possible to generate API clients in many other languages using swagger-codegen.

Docs Repos


Online Docs


Open Web Apps

OpenMRS recently landed support for Open Web Apps (OWAs), again thanks to the great work done by a GSoC student. OWAs are a really easy way for developers to build front-end apps and upload them to OpenMRS. I wanted to make getting up and running for OWA developers even easier, so I created a Yeoman generator to scaffold OWAs for OpenMRS (including a basic build and deploy pipeline).

In addition I created some development workflow documentation and a screencast that demonstrates the workflow.

Some issues came up while building the generator, so I submitted some PRs to the OpenMRS OWA Module too. Thanks to @sunbiz for reviewing and landing the PRs!

OWA Repos



I got this idea into my head that OpenMRS should have badges for its repos that show the current build status as well as latest module and required OpenMRS version if relevant. So, I spent a few hours and built a tool that generates OpenMRS badges using

Now we have badges for build status like: . We can also get the latest version of a module () or the required version of OpenMRS for a module ().

This work definitely wasn’t on the critical path for anything, but we’re using the shields in the dev category on Talk now, so it’s quick to spot if any important repos are failing to build.

Total Repos Updated



A while ago I started using RescueTime to track my productivity. It’s tool that continually runs in the background and monitors what applications you’re using and what websites you visit. You categorize various activities as productive or distracting and it generates a nice dashboard for you.

I grabbed the data for my first month here at Stripe and plotted the following graph.

Time is logged as Very Productive if I am doing things like actively typing into my IDE or the terminal, using email, or if I’m on GitHub or testing an application in the browser. Very Distracting time is logged when I’m chatting in IM or watching a movie or similar.

Total Productive

Total Time


It hasn’t all been work. I’ve done some active stuff and exploring too.


Luckily many Stripes seem to be pretty active, so I’ve managed to do a few runs.

Night run up Bernal with @nikgraf and a couple of Stripes #city #night #sanfrancisco

A photo posted by Pascal Brandt (@psbrandt) on

Going back down … such a beautiful place these woods.

A photo posted by Nik Graf (@nikgraf) on

With the Stripe Running Group @ the Mt. Tam East Peak during our 17km trail run ⛰👌

A photo posted by Nik Graf (@nikgraf) on

Run Count


Run Distance


Run Time



My friend and fellow Open-Source Retreat grantee @nikgraf also climbs, so we’ve been trying to do one or two sessions a week at our local climbing gym, Mission Cliffs.

With the gym just around the corner & a motivated buddy (@psbrandt) I'm back to climbing for the next couple months ⛰👌

A photo posted by Nik Graf (@nikgraf) on

Gym Sessions



I was fortunate enough to have my wife Jodi come and visit for a few days from the 13th of February, so we did a bunch of touristy things.

Reunited in San Francisco 😍

A photo posted by Jodi Allemeier (@urbanjodi) on

A photo posted by Jodi Allemeier (@urbanjodi) on

Haight Ashbury

A photo posted by Jodi Allemeier (@urbanjodi) on

#lookup #goldengatebridge

A photo posted by Jodi Allemeier (@urbanjodi) on

China town SF

A photo posted by Jodi Allemeier (@urbanjodi) on

#sanfrancisco #latergram

A photo posted by Jodi Allemeier (@urbanjodi) on

Fun Times Had


Thoughts & Feelings

“Real men don’t cry… for more than three days”
- Charles Boyle, Brooklyn Nine-Nine

Surrounded By Geniuses

During my time here at Stripe, I’ve been experiencing a feeling that people have tried to make me believe is imposter syndrome. The people that work here, and the other Open-Source Retreat grantees, are overwhelmingly exceptional. I can barely look around the office without seeing someone who:

  • Is the author of a project on GitHub with 1000+ stars
  • Has written multiple technology books
  • Has invented a framework or tool used by other exceptional people
  • Is an ultra-marathon runner
  • Sold multiple internet companies before the age of 18
  • Is a pilot (including someone who is currently building their own plane)
  • Previously worked at a famous tech company that makes something you use every day
  • Has a PhD from a top 10 university
  • Speaks 5 or more languages
  • Consistently writes blog posts that make it to the front page of HN

I could go on, but I won’t. Also, most people here are in their 20s. It’s been really great to meet these people and observe them doing amazing things, but it’s sometimes been daunting and a challenge to see my value in this context.

On the plus side, people here are very interesting in diverse ways, and are generally well traveled. This has resulted in many great conversations and I even got to meet a long time geek hero of mine, @b0rk!

The Cost Of Benefits

Working at Stripe is great. Stripe offers a lot of benefits and three fantastic meals a day at the office. No really, the food is incredible.

As a result, people spend a lot of time at the office doing amazing things and socializing with colleagues. Possibly more time than they otherwise would.

Next Steps

I need to introduce OpenMRS to the people at Stripe and harvest some time from the geniuses and polymaths to help improve OpenMRS. This needs to happen sooner rather than later, so that I’m still around to show people the ways in which they can contribute.

The Swagger specification improvement task is my main technical task at the moment, since it’s the first step towards creating both useful API documentation and a useful JavaScript library.


Although I may not have made a lot of progress yet on what I originally thought I was going to do, I think I’ve definitely taken some steps in the right direction.

Thanks to Stripe for hosting me so far!

OpenMRS Worldwide Summit 2015

Singapore Skyline

In December last year I was lucky enough to attend the very first annual OpenMRS World Summit in Singapore. The summit was held at Singapore Management University (SMU), which has some of the best conference facilities I’ve experienced and is situated in an incredibly convenient location.

There were two days of tutorials before the main conference started, some of which I lead. Tutorial topics included Health IT & OpenMRS: An Introduction, AngularJS & REST Web Services 101, Extending & Customizing OpenMRS, Concept Management and Getting Data Out. I was in Singapore as an OpenMRS volunteer, so I also helped with various logistical issues such as participant registration and setup and tear down of the meeting rooms.

The summit was run in the typical unconference style, in which particpants set the session topics. There was a mixture of session types such as birds of a feather, fishbowl, lightning talks and plenary.

There was a strong focus on governance at this meeting, which really is necessary for building an effective and sustainable community. Some of the sessions that dealt with governance and strategy related topics were Governance for the Future, OpenMRS Strategy 2016 and individual strategy session for each strategic objective defined in the governance document.

I really enjoyed Joaquín and Jordan’s session on cloud computing for OpenMRS data analytics, my session on OpenMRS Local Communtities (it’s always great to get feedback and new input) and the session on Clinical Decision Support.

Apart from all the great sessions, there were also activities planned for every evening such as visits to Chinatown, Little India, Gardens By The Bay, Labrador Nature Reserve and Clark Quay. During these activities it was great to meet lots of community members I had never met in person before and to catch up with some I hadn’t seen in a while.

Overall it was an amazing experience and I would like to say a huge thank you to Michael for planning and running an exceptional event and to the OpenMRS leadership for providing the funding that enabled me to attend.

How To Get Netflix (and more) In South Africa

My friend @rgcrichton recently told me about a pretty cool service called UnoDNS™. This service allows you to access sites like Netflix (full channel list) by using DNS hacks to trick sites into thinking you’re based in the relevant county (more details here).

To set up the service, simply sign up here (you get a week of service for free), then set up your computer using the appropriate tutorial here (it doesn’t really matter which DNS servers you choose). If you’re a bit more tech savvy, I recommend configuring the DHCP server on your LAN to hand out your chosen DNS servers along with the IP addresses. The banner at the top of the quickstart page will tell you if your setup is correct and what to do if it isn’t.

Once you’re set up with UnoDNS™, go to Netflix, sign up (you get a month free) and start streaming :).

I have a 4mbps ADSL line and I’ve only seen the video buffer once in (many) hours of watching. I think this was due to a recent Netflix outage though.


Cape Town Vinyl

Since a couple of people have asked me questions related to vinyl in Cape Town now, I thought I’d write up the things that I think Cape Town collectors should know.

Hi-fi Setup

If money is no object, then The Listening Room in Cape Quarter is definitely your best option. If, however, you’re working on a budget, then my recommendation would be to keep your eye on Gumtree for people selling vintage audiophile equipment. That’s how I picked up my Technics SL-1300. Just read some reviews before you buy your turntable.

You may need to refurbish your newly acquired turntable (like I did) before it’s able to produce good sound. I have the phone number for two people who apparently do this well, although I haven’t used them. I got one of these numbers from someone at Radio Discotheque, so I can recommend taking your turntable there if it’s totally busted. After taking apart my turntable and doing some simple continuity tests with a good friend of mine who is an electrical engineer, we determined that it was simply the cartridge that needed to be replaced.

The Listening Room stocks great audiophile carts and also offer an installation and alignment service, so I decided to take my turntable there. Once the cart was installed, we realized that there was something else wrong. Anyway, after leaving my turntable with Rodney from The Listening Room overnight, he managed to figure out that there was a continuity issue in the headstock (the one place I didn’t look). Luckily I had a spare one, so he swapped it out for me and now it works perfectly!

If Gumtree doesn’t work out, you can always check second hand shops, although it’s much more labour intensive. The one shop that I have seen that sells already refurbished vintage hardware is Revolution Records. They have some really cool turntables, amps and speakers right there in the shop (not to mention a massive record collection).

Of course, any turntable is going to need it’s cartridge replaced at some point. Radio Discotheque offer some decent cost effective options, but if you’re looking for an audiophile cart, The Listening Room is where you want to look.

I was fortunate enough to receive a hand-me-down amplifier with a phono input (Sansui RZ-2300). It has an awesome 90’s look and feel and sounds fantastic. I’ve seen some great amps for sale on Gumtree and at Revolution Records. Remember, if you’re going to buy an amp without a phono input, you’ll need to get yourself a phono stage to convert the signal from your turntable to one that your amplifier can accept. The Listening Room sells phono stages, but they’re not cheap. I recommend getting a vintage audiophile amp from Gumtree or at least buying your phono stage from Gumtree.

I’ve yet to purchase a decent set of speakers, but they aren’t too tricky to find. Since I’m into vintage equipment at the moment I’ll probably buy from Gumtree or Revolution Records, but The Listening Room has some great entry level sets. Rodney has played me some albums through the speakers he’s got set up in the shop and I’m very close to being convinced to fork out for some new speakers :).

New Records

Brick and mortar shops that sell new vinyl in Cape Town are few and far between. I’ve been told that astoreisgood has a few records for sale, but I’ve never been there. Mabu Vinyl has a small collection of new records mounted on the wall behind the counter. The Listening Room has a modest collection in the shop, but they have a great mail order catalogue (September 2012 Edition) from which you can order all sorts of cool stuff and collect from the shop. What’s really awesome though is the vinyl catalogue (September 2012 Edition) which has 100s of albums to choose from.

Unfortunately you’re probably still not going to be able to find what you’re looking for in a shop. I’ve heard that people have successfully ordered from Insound, although I haven’t tried them. Apparently their shipping to South Africa is expensive. I’ve used WOW HD who offer free delivery (yes, even to South Africa) and my order arrived in great condition. It did take almost a month to arrive but the email support I received was fantastic.

Previously Owned Records

As mentioned above, Revolution Records has a great collection of second hand vinyl. Mabu also has an awesome selection. Those are pretty much the only two shops that I’m aware of that’ll give you a decent crate digging experience. UPDATE: I haven’t checked them out yet, but I’ve recently heard about Roots Vinyl, Recreation Records and Roastin’ Records.

I’ve heard that some markets, particularly Milnerton market have vinyl on sale. The best way that I’ve found to find second hand vinyl at a good price is to find people selling their (or their relatives’) collections on Gumtree. I’ve been into a few houses and had some fun crate digging and have even found some cool albums. I’ve also bought a whole collection and it actually had some really cool stuff in it.

Online Resources

I’ve used These three sites before to get some info I was looking for. This is a pretty cool site for info on general audio topics. My favourite vinyl-related site has got to be Vinyle Engine - I even downloaded the manuals for my turntable there. Lastly, Reddit’s vinyl subreddit is a fantastic source of information on anything vinyl.

Disclaimer: I am extremely new to collecting vinyl, so some of this information might be erroneous. If you’d like to correct me, or just give me some more info to share on this page, please leave a comment or tweet at me or something.

I hope some of this is useful to one or two of you :).

Creating Short URLs

I was looking for a URL shortener which I could host, which allowed for private access (for creating new short URLs) and which kept decent statistics about each URL. YOURLS does the trick. Just download the PHP scripts, create a MySQL database, edit config.php and visit the admin page and you’re done.