http://www.cs.cornell.edu/courses/cs3110/