Final project for the Advanced Programming course at UCSC