9/26/2013  600 hours 
7.27 kloc  6 people  


Satsy is a search engine for java source code snippets. Users provide input-output pairs and Satsy produces satisfying snippets.

  • z3
  • smt lib2
  • tomcat
  • mysql
  • javascript
  • json
  • search
  • java
  • concurrency
  • cpu bound
  • aws
5/15/2013  400 hours 
6.1 kloc   2 people  

Quiz Generator

This tool generates quizzes and exams as formatted MS Word documents from an editable database of questions.

  • java swing
  • ms word
  • sqlite
  • education
9/1/2013   190 hours 
2.25 kloc  2 people  

Cluster Analysis

Analyzes 10 semesters of log data, clustering behavior based on time spent online, frequency of access, etc.

  • web behavior
  • Dr. Manu
  • Agronomy
  • Statistics
  • sqlite
  • Weka
3/1/2012   200 hours 
6.32 kloc  4 people  

iPref-R Prototype

Prototype GUI for creating a preference network. Developed to support Ganesh Santhanam's research on preference networks.

  • java
  • java swing
  • graph
  • preference network
2/1/2012   500 hours 
10.81 kloc 3 people  


Insect-themed tower defense game on Android platform with anonymous or registered play and purchasable items.

  • android
  • game
  • group project
  • schoolwork
  • ComS 309
  • management
12/3/2010  90 hours  
0.19 kloc  1 people  

Matrix Multiplier

The first really interesting programming project I did - got me hooked. It has a terribly tedious user input system, can multiply 50x50 matrices.

  • vb
  • schoolwork
  • Engr 160
11/15/2013 70 hours  
0.17 kloc  1 people  

Max Flow Finder

Algorithms to find the max flow and related problems, striving for tight bounds in the implementations.

  • flow
  • algorithms
  • schoolwork
  • ComS 311
8/20/2012  180 hours 
6.67 kloc  2 people  

Catalog Editor Demo

A demo of Dr. Gadia's concept: a collaberation tool for editing the University Catalog. Became the basis for a Graduate Student's thesis project.

  • java swing
  • workflow
  • xml
  • xpath
12/1/2011  200 hours 
2.01 kloc  1 people  

Convex Hull

Given some random points, find the points that contain all other points, animate the result using OpenGL.

  • ComS 229
  • C++
  • schoolwork
  • openGL
8/1/2011   40 hours  
1.27 kloc  1 people  

Chess Move Lister

Given a starting chess position, enumerate all possible moves for the current player. You can select a move and continue playing.

  • java
  • java swing
  • game
  • rule model
  • Forsyth–Edwards Notation
11/1/2012  65 hours  
5.72 kloc  3 people  

Github Study

Data mining github java projects, finding the correlation between imported packages and the number of bugs for each file.

  • data mining
  • java
  • java swing
  • jchart2d
3/1/2011   50 hours  
5.22 kloc  1 people  

Text RPG

In this text game, you begin at a hotel and interact with various characters to obtain more keys to rooms and floors.

  • ComS 227
  • game
  • java
  • schoolwork
10/1/2011  45 hours  
0.74 kloc  1 people  

A-Star 8-Puzzle

Given an 8-puzzle, use various heuristics to find the shortest path to a solution. The point was to play with heurisitcs and A-Star.

  • ComS 229
  • C++
  • schoolwork
  • algorithms
2/1/2011   30 hours  
0.46 kloc  1 people  

Particle Animation

Fun with java swing graphics, atoms with electrons spinning around them, bouncing off the walls and each other.

  • java
  • java swing
  • ComS 227
  • schoolwork
  • graphics
5/26/2014  650 hours 
2.26 kloc  2 people  


Data mining python regular expressions, clustering into families, enabling smt-based filtering for input-output based search.

  • sqlite
  • antlr
  • z3
  • smt lib2
  • java
  • python
  • Jython
  • Astroid
  • regex
  • data mining
  • github
  • bitbucket
3/15/2013  40 hours  
1.72 kloc  1 people  

Jaccard Similarity

Given some large set of documents, cluster them by percent similarity.

  • mapreduce
  • hadoop
  • schoolwork
  • ComS 419


This website is intended for employers, friends, colleagues, etc. who might want to know more about my work.


I chose google app engine because it provides free hosting and I've wanted to learn about it for a while.

I'm striving for a minimalist design that is easy to maintain and update over the years. My previous two attempts at a portfolio page were cumbersome to update, so the pages stagnated. This portfolio page is fed from a google sheets document, which is easy to update. So I end up with a free, roll-your-own content management system. It turns out other people have done something similar. Here is a conceptual diagram of my system:

The whole website is actually just one page with three tabs. Jinja2 is very helpful in keeping template code clean. I also use selectize.js for tab selection, tinysort.js for sorting and the popular bootstrap framework.

You can use the filter bar to view only widgets that contain or exclude up to 3 tags. You can also sort the currently visible list of widgets by any of the 4 metrics located on the upper left of each widget, or randomize the list. The four metrics are:

  1. begin date
  2. hours spent on the project
  3. thousands of lines of code (determined using Code Analyzer, subtracting whitespace from total lines).
  4. number of people involved in the project

Here is an image of the filter bar with the 'order by' options displayed:

Each widget can expand or contract by clicking on the wedge button, and you can expand all widgets or collapse all widgets using the two rightmost buttons of the filter bar. Here is a diagram explaining the content of one widget:

And here is the row of the google sheets document corresponding to that example widget:

The purpose of all this functionality is to make it easy for you to find projects that interest you. Once you find a project you want more information about, you can go to that project's homepage for more details by clicking on the large blue project title ('Example Widget' in the above example).