Blog

Open vs Closed Loop: A Benchmarking Crime

Feb 26, 2026

Before running benchmarks for DeMon, an experimental distributed data store, I read Gernot Heiser's amazing list of benchmarking crimes and best practices. What it didn't tell me is that I needed to use open loop clients. Let me tell you why.

Love in the Terminal: Kitty and (Neo)Vim

Dec 31, 2025

How to integrate Kitty and Neovim navigation, even over ssh;
Or the tragic love story of a terminal emulator and a text editor.

Full Text Search Shenanigans

Sep 15, 2025

A great blog post from 2013 describes using bloom filters to build a space-efficient full text search index for small numbers of documents. The algorithm is simple: Per document, create a bloom filter of all its words. To query, simply check each document's bloom filter for the query terms.

With a query time complexity of O(number-of-documents), we can forget about using this on big corpuses, right? In this blog post I propose a way of scaling the technique to large document corpuses (e.g. the web) and discuss why that is a bad idea.

Spex: Swedish Student Theatre

Apr 1, 2024

Oh hey, what is this?! A post about theatre? Why yes it is!

On April fools, but totally serious.

The World's best Snake AI

Jan 4, 2024

Battlesnake is a competitive AI programming platform for a multiplayer variant of the classic game snake. It looks like this.

A random game of Battlesnake

Sweden's most realtime public transit map

Dec 23, 2023

Edit: the transitmap.io domain is not longer under my control and I do not recommend a visit.

Transitmap lets you watch thousands of buses, metros, commuter trains, and even ferries move across a map in real time. Try it on your phone next time you are waiting for a bus in Sweden. In most cases, the vehicle on transitmap will move only a few seconds behind the real one.