My Two Month Internship at Ona Kenya


The Application Process

My journey towards working with Ona was a systematic. It began with wise counsel from a former lecturer. His advice was quite simple: “If you trust your programming skills, you can apply for the jobs at Ona. Female candidates are encouraged to apply”. It was both thrilling and unnerving considering the global promotion of gender equality.

Take it or Leave it!

After much deliberation, I decided to take up the challenge. I sent my application with the required information and crossed my fingers hoping HR would take notice it. Fortunately, I got a response from the Peter, the CTO, to set up a time meet. That was a cause to celebrate! Count yourself lucky when you are invited for an interview before you finish your final undergraduate exams lest you get into the job of “looking for a job” when you are done with campus. The interview was conducted and then there was the “real interview” — software tests. This is a task that separates the men from the boys (well, in this case women from girls :)). It may not be as hard as it sounds, but it is the main gateway to working with Ona as a developer. I had 4 days to write a clean, logical code snippet that achieved a task! The final step of the application process involved a thorough code review with a group panel. They liked my thought process and code structure and I managed to join the team as an intern. The rest is history.

 Continue reading My Two Month Internship at Ona Kenya...

The Perfect Kenyan Chapo


The Ona team convenes at Dickson’s home to learn the art of making chapo. Recipe and photos below.

The Golden Ticket

Since my first lunch in Nairobi, Dickson has insisted that all restaurant chapatis pale in comparison to his mother’s recipe. Here’s how every lunch would go when I’m in town:

“This is great!” I’d say, devouring a chapati.

“Not really,” he’d respond, ordering rice.

So a few weeks ago, when Dickson invited Peter and I to his house to try good chapo, we jumped at the chance. On a typical pleasant Nairobi Saturday, Moses (Dickson’s neighbor), Peter and myself joined Dickson and his sister Annette at their home. We took a taxi to west of Nairobi and when we arrived we learned something miraculous: we wouldn’t just be trying the greatest chapo in the world — we’d be making it from scratch.

 Continue reading The Perfect Kenyan Chapo...

Next Up Roadmap


Since it’s always good to know what’s coming up, here are a few new features you should look out for on in the next few weeks.

 Continue reading Next Up Roadmap...

Ona Beta: New Features Roundup


On our quest to allow anyone to collect, understand, and use data for humanitarian purposes, we’ve been introducing new features on Ona Beta for months. We’ve rebuilt the service from the ground up with new code and a new look, added features for collaboration and improved data management, and built a support team to help our users when they run into problems. Here’s a summary of what’s new in Ona Beta.

 Continue reading Ona Beta: New Features Roundup...

Introducing three open source libraries for working with Ona and data


We are proud to announce preview releases for three Clojure/ClojureScript open source software libraries: Hatti, Milia, and Zebra Lite. We are actively working on and improving these libraries for use in our own software and by others. In alphabetical order the contributors to these libraries are geoffreymuchai, pld, prabhasp, royrutto, ukanga, and wilo99. We will followup on this post with additional tutorials and introductions to the individual libraries.


Hatti is set of Om components for viewing structured data in tables, charts and — if it’s geocoded — maps. Hatti is a ClojureScript library built using Om, a ClojureScript interface to Facebook’s React. This example connects Hatti to an Ona dataset storing information on stolen Nepalese art. This snippet of code handles most of the functionality:

 (let [data-chan (raw-get (ona-urls/data-url "data" dataset-id))
       form-chan (http/get (ona-urls/formjson-url dataset-id))
       info-chan (http/get (ona-urls/data-url "forms" dataset-id))
       data (-> (<! data-chan) :body json->cljs)
       form (-> (<! form-chan) :body flatten-form)
       info (-> (<! info-chan) :body)]
   (shared/update-app-data! shared/app-state data :rerank? true)
   (shared/transact-app-state! shared/app-state [:dataset-info] (fn [_] info))
   (integrate-attachments! shared/app-state form)
   (om/root views/tabbed-dataview
            {:target (. js/document (getElementById "map"))
             :shared {:flat-form form
                      :map-config {:mapbox-tiles mapbox-tiles}}
             :opts {:chart-get chart-getter}})))

You can see the complete code here. We use Hatti as the data visualization library in the new version of Ona, but it will work with any dataset and schema in a compatible format.


Milia is a Clojure and ClojureScript client for the Ona API. Milia uses the clj-http and cljs-http libraries to make both server-side and client-side requests to an Ona compatible application server. Milia is built using the specifications in the Ona API and will work with any server that is compatible with the Ona API.

Currently all API endpoints are accessible using Clojure, however only the dataset endpoints are available in ClojureScript. As of this writing we are using cljx, but we plan to transition to Reader Conditionals after Clojure 1.7 is released.

Zebra Lite

Zebra Lite is a light-weight version of Ona, that aims to replicate the core features necessary for a mobile data collection and analysis tool: a login/account, form listing, and a data view. It is built using Milia to fetch data from Ona (or any Ona compatible API) and Hatti to display data. It is written in both Clojure using the ring HTTP library and the Compojure routing library, as well as in ClojureScript using Om and Secretary.