Open vs Closed Loop: A Benchmarking Crime
Feb 26, 2026Before 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, 2025How 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, 2025A 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, 2024Oh 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, 2024Battlesnake is a competitive AI programming platform for a multiplayer variant of the classic game snake. It looks like this.

Sweden's most realtime public transit map
Dec 23, 2023Edit: 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.