This is a selection of the things I work on. Some are more active than others, and some are related to my academic research.
Additional projects can be found on my Github and Bitbucket profiles. We use mercurial in the ODK group (for reasons I can get into if you’d like), so I end up hosting most of my ODK-related projects there.
Useful examples at the command line.
eg is a command line tool that aims to be a companion to man pages.
is famously difficult to understand for the basic use cases.
eg tar to the
Chrome extension for manipulating DNA/RNA sequences.
Biologists often deal with sequences, and this is often cumbersome. For example, you often have a sequence and want a reverse complement (the same string backwards, with bases/letters substituted. Normally, you would copy the sequence, google a site permitting sequence manipulation, click a link, select reverse complement from a dropdown, paste, hit the run button, select the output, and then copy it. If you’re really good, maybe you’ve bookmarked a page that only does reverse complementing, meaning you remove a couple steps. Still way too much work for something so common.
Enter Biotool! It is a Chrome extension that lets you paste the reverse, complement, and reverse complement without any extra steps. And it does so efficiently! It is also accepting with its inputs, allowing users to paste sequence formats that include numbers without needing to first clean or otherwise manipulate them.
Enter today’s date on Android with two clicks.
Momentary is an Android keyboard with one function: entering today’s date. I find myself entering today’s date multiple times a day when I’m using my phone. Under normal circumstances this is a pain to type. 2016-05-25, for examle, is at least 10 clicks, and this is even worse if you’re relying on long presses.
Momentary to the rescue!
When you select Momentary as the input method, it enters today’s date and immediately returns to the previous input method. It takes just a moment.
A fantasy sports betting app for Android.
Let it Ride is an app that allows you to place imaginary bets on sporting events. It manages your bookkeeping and tracks your progress over the course of the season. Using Let it Ride, you can see how you would fare if you were betting with real money, and you can track your progress against the cagiest bettors on the leader board.
I am the lead developer of the Android and server components of the app. Let it Ride is the product of GetLo LLC, of which I am a cofounder, and is the result of my efforts and the rest of the team. We let it run for two years but have currently taken it down as we grew too busy to support it. Perhaps one day it will make a glorious return.
ODK Tables is a database visualization and app creation platform for Android.
Many organizations working in emerging countries need to collect data, view this data, push it to the cloud, and synchronize it between devices. ODK Tables aims to make this process easier. App designers define a basic table structure and import this information into Tables. The app then handles persistence and synchronization (to an ODK Aggregate instance), giving you sync functionality for free.
At one point I was the lead developer of Tables, but that isn’t currently the code is still being actively maintained by the ODK team. It is operating as the main entrypoint to data collection as part of a longitudinal HIV study in Kenya. Subject records are tracked and updated over the period of a year, and the study has been operating successfully for over two years.
Sending SMS messages with and without user confirmation.
The ODK SMS Bridge lets you send SMS messages with an Intent. It was written to integrate with ODK, but works perfectly well in non-ODK contexts. Sending SMS messages via Intents is supported by default in Android. Unfortunately, doing so always launches a messaging app and requires user confirmation.
Android 4.4 introduced the SmsManager, which lets you send messages without triggering an external app. However! There is no way to trigger it using an Intent. This app is a small wrapper around both methods that lets you use either technique via an Intent. A require_confirmation boolean variable selects which method is used.
This approach is an example of “unbundling”–rather than bulk up a single monolithic app that does everything, keep things modular and have multiple apps do specific things well. Companies like Facebook are now taking this approach with their own apps, breaking off messaging into a separate Messenger app. This has been the direction of ODK 2.0 for years, and this app is a great example of how it works.
While not currently on the Play Store, you can download the latest snapshot build here.
‘Defanged’ Android unit testing framework.
I am a vocal believer in the value of testing. When I write Android tests I like to use Roboletric. I am very modest contributor to the project, adding support for testing PreferenceFragments and improving resource resolution.