Developed for Cornell CS 4154. Read more on my blog.