With Canon, you can't. A story of horrible customer support

I present to you a tragedy in 11 parts, about me trying to report a bug against the software of a large hardware company. Unsurprisingly, to these people, software doesn’t exist, other than to support some physical, touchable device. Having cut my developer teeth in the device maker cradle of... (read)

The Ultimate Guide to Modern CMake

CMake is a great tool for managing a C++ system’s build. It builds quickly, supports the major use cases, and is quite flexible. The problem is, it’s too flexible, and for people used to writing Makefiles themselves, it’s not always obvious what CMake commands and properties you should be using.... (read)


There always seems to be a lot of confusion about Model-View-… umm… and-then-something-more architectures. Everybody seems to get the Model and the View parts. The Model is where your data lives, and the View is where your visualization is. The question is, how should they be linked? There are a... (read)

How I would design palm rejection

“Palm rejection” is the name for a cool technological trick which comes in very handy if you like drawing or writing on your fancy capacitive touch tablet. It allows your drawing application to distinguish between touches made by your hand and by the pen. In pen and paper writing (and... (read)

Conway's Game of Life in the Lambda Calculus

(The code of this blog post is available on GitHub) Last year, I participated in the Global Day of Code Retreat. On this day, developers all over the world take implement Conway’s Game of Life under various constraints (such as “TDD as if you meant it”, pair programming without talking,... (read)

The downside of being a generalist

I think of myself as being a “generalist.” For me, this means I do not limit myself to a single problem or solution domain. I do web development, but also GUI development and microcontroller development. I use JavaScript, but also Delphi and C, Python, Java and C#. I do straight-up... (read)

Turning 3 pallets into a table

A friend of mine had some old pallets lying around, and I was aching for another DIY project. As it turns out, he didn’t have a garden table so I decided I would make a table out of the pallet wood! My colleague Robbert-Jan, who also turned out to be... (read)

Lunch Boot Camp: Algorithmics

It seems most of the development work I do these days mainly consists of finding appropriate libraries and duct taping them together, or schlepping strings around from place A to place B. Algorithms and Data Structures, the foundations of “getting our computer to do something useful”, seems to have fallen... (read)

Language Workbench Challenge 2013: Clojure

I particated in the Language Workbench Challenge recently, which is held every year as part of the Code Generation conference in Cambridge. In this challenge, participants are asked to implement a case study in a variety of Language Workbenches (tools for developing Domain Specific Languages), with the goal to compare... (read)

Writing Tips

Update: Simon Peyton-Jones has basically made every point I’d like to make, and done so more entertainingly.. Check it out! I’ve recently had the opportunity to mentor a student during his graduation project. He was a great coder, but had a lot of trouble writing up his report in a... (read)