Final Project for CSE 145A/B at UC Irvine Winter 2012, by Scott Gettinger and Ashwin Amit