Final project for CSCI E-15, Fall 2013.