Where my thoughts end up if they stay inside my head for too long.


Zero-cost abstractions

Rust claims to enable abstraction without overhead. How does that claim hold up in practice? Read full post

Working on a virtualenv without magic

The standard way of activating a Python virtualenv has a number of issues. Here is a simpler, understandable method. Read full post

Git’s push url

Here’s a little-known feature of Git that allows you to fetch over https but push with SSH. Read full post


Neither necessary nor sufficient

A garbage collector is neither necessary nor sufficient for quality software because it does not solve the problem of resource management. Read full post

Exceptional results: error handling with C# and Rust

Monadic error handling is an alternative to exception-based systems that can prevent many programming errors at compile time. Read full post

Global Game Jam 2015

This year’s Global Game Jam we built our most beautiful gam jam game yet. Read full post

Encryption by default

You should encrypt all of your internet traffic. I am helping by making my site available over https. Read full post


Writing a path tracer in Rust, part 7: conclusion

After porting a reasonably-sized application to Rust, I still like the language a lot. C++ has a worthy opponent here. Read full post

Writing a path tracer in Rust, part 6: multithreading

Instead of doing proper algorithmic optimisation, I made my path tracer faster the lazy way. Read full post

Writing a path tracer in Rust, part 5: tonemapping

Rust’s advanced type can express a rendering pipeline in a safer way than C++. Read full post

Writing a path tracer in Rust, part 4: tracing rays

Tracing rays is at the core of a path tracer. Implementing the algorithm in Rust is a great way to get a feel for the language. Read full post

Writing a path tracer in Rust, part 3: operators

Operator overloading can do wonders to make vector math readable. How does Rust compare to C++ here? Read full post

Writing a path tracer in Rust, part 2: first impressions

After setting my first baby steps in the Rust programming language, these are my initial impressions. Read full post

Writing a path tracer in Rust, part 1

As a learning exercise, I am going to port my spectral path tracer Luculentus from C++ to Rust. Read full post

One year with Colemak

After typing in Colemak for a year I am still convinced that it was worth the switch. Read full post

Fibonacci numbers in finite fields

With a bit of algebra, Fibonacci numbers can be computed efficiently using only integer arithmetic. Read full post

Global Game Jam 2014

During the Global Game Jam 2014 I used Unity to build a game in 48 hours. Read full post


C# await is the Haskell do notation

When writing asynchronous code in C# with the await keyword, the emerging structure resembles the Haskell do notation. Read full post

Continuations revisited

Observables are a different take on asynchronous programming that can be more powerful than tasks for some scenarios. Read full post

Git music

I cross-referenced my Git commit history with my Last.fm scrobbles. Read full post

The task monad in C#

When you are composing asynchronous code, you are using monads. This posts reveals the form the task monad takes in C#. Read full post

The Small Bang Theory in San Francisco

A game that I worked on will be on display during the Game Developers Conference next week. Read full post


Geomancer at Indigo

One of the games that I worked on will be presented at Indigo 2012. Read full post

Passphrase entropy

Using longer encryption keys does not improve security unless you increase the length of your password too. Read full post

Global Game Jam 2012

During the Global Game Jam 2012 I made an award-winning game about a particle accelerator. Read full post


Yaose is now free software

I made my editor for Ogre script files available as free software. Read full post