See blog post for details. Lots of fun!