As the Stripe website
says, when I started the Open-Source Retreat, I thought I had a good idea of what
accepted by the OpenMRS community as the go-to tool for building applications using
the OpenMRS API.
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
Development Environment Setup
It seemed to make sense to put some work into addressing these two issues first.
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.
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)
build using swagger-js. It will
also be possible to generate API clients in many other languages using swagger-codegen.
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).
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!
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
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.
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
“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.
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
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.
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
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
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.
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.
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 :).
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.
I’ve used Thesethreesites 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 :).
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.