Below are some of my recent projects; they are open source, with the hope that they’ll be useful to others. It’s also a great way to continue to make improvements. Maybe I’ll even dig up some older projects sitting patiently on spinning platters.

The projects below are all in online source code repositories, either using Google Code or GitHub. Please see their corresponding project pages for more detailed info. Below are brief summaries of each project as well as some background.


A set of tools, written in C++, for building and querying inverted indices for large document collections (a.k.a. search engine). This implements a variety of rank safe query optimization algorithms.

This has been developed as part of my Masters Thesis under advisement of Professor Torsten Suel. I plan to continue improving this project going forward, as I find it very enjoyable hacking on algorithms and code at a lower level, where performance is crucial.

You might also be interested in perusing the wiki on how to use the PolyIRTK.

Résumé Generator

Generates a PDF version of a résumé given an XML template as input. Written after getting irritated at Microsoft Word and; on second thought, perhaps I should have looked into LaTeX first… I use this to make my résumé and keep track of changes in SVN.

This is written in Java and makes use of the iText library for PDF generation.

Please check out the wiki for more information.

Running Mate Web App

Running Mate Screenshot
A multiuser web application that can be used to track your running progress. Uses the Google Web Toolkit and designed to run on the Google App Engine. Although written in Java, the frontend and backend mostly communicate via JSON (some portions related to logging in are using GWT-RPC), so it should be easy to port to another backend platform if so desired. I’m actually interested in using Python, since App Engine supports it, and the code looks concise and way prettier; the App Engine Datastore abstraction, especially, is a very thin layer, and looks very elegant (as opposed to the big ugly mess of abstraction in Java, which seems to suffer from the law of leaky abstractions). This project is using the low level Java datastore API for maximum flexibility, and the fact that use of the JDO/JPA interfaces adds a lot of overhead to the cold startup of App Engine applications.

The initial version of this actually used PHP and MySQL, running on this very server (and only supported one user — me!); but App Engine was just too tempting not to try out (running your app on Google’s infrastructure — how cool is that?). The App Engine Datastore is especially interesting since its constraints force you to think about the problem differently from a RDBMS (see this talk on building scalable web applications and this talk for a great look into the inner workings of the App Engine Datastore; and also the BigTable paper for an even lower level look).

The project is hosted at You can log in with your Google account, but you won’t see anything too interesting unless you used the corresponding Android app to record some of your runs. So, in the meanwhile, you can check out my running page here. This is just a special unique URL you can use if you want to share your runs without having to log in.

I also have a running widget on my blog, which looks like it’s hosted locally, but really there is a one line PHP script that proxies the data requests to Google App Engine (the HTML/JavaScript is hosted here on; the PHP proxy is necessary to get around the Same Origin Request Policy for AJAX requests.

Running Mate Android App

Running Mate Android Screenshot

I had to make good use of my Nexus One and scratch that itch I had for developing an Android app. The N1 also happened to be one of the official Android development phones.

The idea came about when I started running in the Summer of 2010. In order to keep myself motivated to keep running, help setting goals, and just not slacking off, I thought it’d be useful to have my Android phone track my runs, upload the data to my web server (where it’s more easily accessible than just on my phone), and make some charts, maps, and aggregated run stats.

This app started out being extremely simple, but I couldn’t help adding more features (and it’s far from done). Basically, it turns on the GPS and records your position every n seconds. It periodically dumps the coordinates into an SQLite database. Finally, when you’re done, it’ll record how long you ran and the as the crow flies distance can be calculated from the coordinates. Then, you have the option to synchronize your runs with the cloud (using the Running Mate Web App).

Post a Comment

Your email is never published nor shared. Required fields are marked *


You may use these HTML tags and attributes <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>