http://www.cs.duke.edu/courses/spring14/compsci356/labs/lab1/lab1.htm