
Cubist artwork with the help of a GPU
I wanted to come up with a shattered glass effect for my game. That didn’t quite work as intended, but I was nonetheless happy with

An unpleasant visit from the refactoring demon
In the middle of a major change to the Leaf type system I encountered the refactoring demon. It reared it’s ugly little head chanting, “you’re

What a compiler does: symbol resolution
A key activity of a compiler is to translate named symbols into memory locations. The process typically involves a few stages: identifying the symbols, segmenting

A secure and private browser sandbox
A patchwork set of standards and rules is creating an unsafe web. Cross-site attacks are too common and privacy leaks have become the norm. There’s

Blocking JavaScript seems like a good idea
My fancy new website is broken due to a script blocking extension. I found this out when I showed a friend the Radial Blitz website.

Using macros to simplify type visitors and enums
I like using enums and type hierarchies. What I don’t like is writing verbose switch statements to use them. In C++ I use macros to
What is an idempotent function?
Idempotence is an essential tool in programming. It has many uses, from improving fault tolerance, clarifying code, to writing declarative deployment scripts. It’s important to
What is amortized time?
Amortized time is often used when stating algorithm complexity. Instead of giving values for worst-case performance it provides an average performance. This is appropriate in
Visiting nodes in a recursive data type with traversal contexts
Iterating over the elements of a recursive data structure can be difficult. Given a set of objects, where each object could potentially link to any
The false abstraction antipattern
Useless interfaces, factories, and other abstractions are everywhere. They are the result of trying to prematurely generalize code. In a recent article I wrote about
Counterargument: Don’t put logic in tests
I consider test suites to be first class code. They need to be clean, adaptable, and frequently refactored just like the primary code. Thus I
Why more eyes are helpful: time wasted on a simple bug
I spent several hours trying to fix a defect that didn’t exist. I’m working on template methods in Leaf and one of my overloads wasn’t