Here's a list of personal projects that I thought might be worth mentioning. If you have any questions about them, please feel free to contact me! Unless otherwise noted, any source code you might find here is available for your use under the MIT license.

  • WordsWithRobots - An A.I. for Words With Friends

    Implements a generic Scrabble AI using a GADDAG. It's capable of generating every play possible and choosing one based on an arbitrary evaluation function.

    I was also able to reverse-engineer most of the API used by Zynga's popular variant on Scrabble, Words With Friends. Game state is regenerated using an initial random seed and replaying each of the moves made. As such, any player with the appropriate tools is able to determine which tiles their opponent has and which order the remaining tiles will be drawn in. I put the work for this effort in a project called wwf_api.

    Assuming the perfect information case provided by the WWF implementation, one can use minimax to choose something close to the best possible move. However, since the branching factor is enormous (often on the order of 1,000s), this is infeasible. WordsWithRobots uses some tricks to limit the branching factor and avoids re-generating all possible moves whenever it can.

    This project was done in Java, and uses Apache Thrift and some other commons libraries provided by Google and Apache.

  • Song Recognition

    This project accomplishes something like the popular mobile application Shazam. In fact, its design is inspired by a whitepaper published by the authors of said application.

    It provides means for training on a list of songs. This stores signatures based on the spectrogram of each song in a database, which are made available for later use. It also provides an interface for querying the database. A small sample of a song stored in the database is passed to the application, which identifies it using its collection of signatures. Due to the technique that is used, heavy distortion due to background noise and poor encoding quality are easily subverted. However, it is only useful for identifying clips that come from exactly the same recording as the corresponding signature in the database.

    A technical paper detailing the implementation and experiment results can be found here.

  • jQuery.venn – jQuery Venn Diagram Plugin

    The jQuery.venn plugin implements an interactive Venn diagram canvas for 2, 3, and 4 set Venn diagrams using jQuery and Raphael. Users can click on regions to active them, and programmers can query an instance for a list of active regions.

    You can view a live demo here.

Contact Me

Here are some of my Internet hiding places.