Projects


Projects and Open Source Contributions

This is a selection of the things I work on. Some are more active than others, and some are related to my academic research.

Projects are things I maintain or on which I consider myself a principal contributor. Open Source Contributions are things that I contribute to but that I don’t consider to be my projects.

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.

Github: srsudar Bitbucket: sudars

Projects

eg

Useful examples at the command line.

eg is a command line tool that aims to be a companion to man pages. man tar is famously difficult to understand for the basic use cases. eg tar to the rescue!

Biotool

biotool snapshot

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.

Momentary

Momentary Icon

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.

Let it Ride

Let it Ride icon

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

ODK Tables icon

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.

The native app provides basic viewing and browsing functionality. The real power of Tables, however, is that it allows builders to define a skin for the app using HTML and JavaScript. Tables then renders this, providing an API to access the database. Using Tables, you can thus write a completely customized app, with back-end support, with a few web files. To see the power of this in action, please take a look at some of the links below.

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.

Tables includes an app builder framework that lets builders view and debug their apps in Chrome. This greatly simplifies the development cycle, as all of Chrome’s web development and debugging can be leveraged. The framework is written in JavaScript and I set it up to use Grunt and Node. This provides live reloading, as well as a number of specific tasks for doing things like pushing files to the phone. This lowers the barrier of entry for app builders. It also had the added benefit of bringing the development cycles into alignment between other ODK teams.

ODK SMS Bridge

ODK SMS Bridge icon

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.

Open Source Contributions

Robolectric

‘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.