See the blog post: Processing: Square City