Final project for Harvard's CS109.