University of Canterbury Seminar

Hi, I’m Chris and I teach people to teach machines. But I am a reluctant computer scientist. Sometimes I get concerned that the thing I know the most about is not directly linked to my survival. My father knew how to keep machines running. My wife grows vegetables. In a post-apocalyptic world, they would be […]


Twoville serves two purposes: to create SVG images that can be used as input to laser and vinyl cutters to create animations To support the second of these, I have been using time blocks to define geometric properties at particular keyframes, and then letting the animation system interpolate between the keyframes. Like this: Here we […]

Polar Graph

A year ago I decided to see if fifth graders could create shapes using polar coordinates. I bet myself that they could if we spent some time first traversing a polar grid, identifying the labels of the rings and the spokes. We didn’t think of them as angles and radii, because those semantics weren’t important […]

Phone Programming

Twoville now supports masking, which means we can subtract shapes from other shapes. Since I’m teaching a course on mobile app programming this semester, phones have been on my mind. Accordingly, here’s one of the first runs of the masking feature: In this code, hole is a container of other shapes that will be subtracted […]


A year ago some students and I started designing programming languages for generating 2D vector art. I called my language Twoville, which pays homage to Seymour Papert’s metaphor of learning math in Mathland just as we learn French in France. The language is a place to learn about and forge 2D shapes. After the semester […]

Multiple Assignment in Twoville

As I dream up animations in Twoville, I find myself generating a lot of shapes that share properties with other shapes. For instance, these two circles have the same radius and color: a = circle() b = circle() a.radius = 10 b.radius = 10 a.rgb = [1, 1, 0] b.rgb = [1, 1, 0] I […]

With Blocks in Twoville

In my software engineering class in college, Dr. Drake dropped on us a half-written piece of software that managed a database of movies. Our challenge was to improve it. It was the first and only time I’ve touched Visual Basic, and I remember only one thing about the project and the language: with-statements. Suppose you’re […]

Twoville Inching Along

Thanks to a snow day yesterday, I can now export animated GIFs from Twoville, my 2D drawing language. Gif.js made this possible. However, Jeremy, I think naming your project with .js suffix was a big mistake. When one clones the project, one ends up with a directory with a .js extension, which messes everything up. […]

Introducing Twoville

Some students and I are building a programming language for generating animated SVG images. Rather, each of us is building our own language, because each of us wanted 100% of the learning experience. By the end of the semester, we’ll have four different takes on how to build such a language. My take is called […]