https://sites.google.com/site/ecs165afall2013/assignments/assignment-4