Thanks to Ethan Bolker and his cs680 class for this excellent project.