A number of people have generously offered feedback, code and suggested improvements to this tutorial. In no particular order: Daniel Veillard, Marcus Labib Iskander, Christopher R. Harris, Igor Zlatkovic, Niraj Tolia, David Turover