I have written before about my Swedish Colemak hack, but I never explained what makes it so good. This is a better image what it looks like: If you’re struggling to find the difference against normal Colemak, look at the cluster of five keys next to the return key. This layout makes room for the three Swedish letters Å , Ä , and Ö , by only changing five keys in total, and they have changed very t
7 Oct 2026Latest posts
I have long struggled with predicting when peace will occur. Actually, I’m struggling with predicting anything relating to war, but let’s focus on when peace arrives for now. There are two such questions in the current ACX 2026 competition: Will there be a cease-fire in Ukraine in 2026? Will there be a cease-fire in Sudan in 2026? When I entered my forecast for these questions, I did it based on L
5 Oct 2026I have decided to start donating a small amount of my fun money to open source projects. After some research, the initial set of recipients are Magit Perl 5 Core Maintenance Fund XMonad These are important to me, they need more money, and I believe they can use donations well. If you disagree, I’d genuinely like to hear what mistakes I’ve made in the analysis below. I hope it shows that this is im
28 Sep 2026I have a weird setup for my laptop. In summary, I have been irrationally scared of running Fedora on bare, dual-GPU metal, so I run it in a virtual machine with Hyper-V on Windows as a hypervisor. The idea was to let Windows manage GPUs and power management stuff like hibernation, and then use Fedora as my main UI to the computer. This has worked surprisingly well, but that’s only because my expec
23 Sep 2026I have a small project where I needed to label commits as either “maintenance” or “new development”. The obvious way to do it is with a cheap but relatively capable LLM, like GPT 5.6 Luna. I tested it on a small set of commits and manually verified its labelling, and it emitted the same label as I would have for the entire test set. That was good enough for me to roll out on a wider scale. If we h
21 Sep 2026Since people keep asking how this blog is made, and I don’t want to share the awful, terrible code that it is taped together with, I’ve decided to start explaining parts of it piecewise. Generally, any time something breaks and I have to fix it, I write down what I did and what it connects to. The most recent issue was the stack limit being blown by a helper function involved in generating the tag
14 Sep 2026When I trained the previous AI comment classifier, I used partially personal private data to do it, and built it on a somewhat shaky foundation, so I couldn’t share the code or data. I rebuilt it on public data and a better foundation! First off, you might want to try it out. Nothing you paste into that web page leaves your browser, so you can safely try it with whatever you like. I have invited s
8 Sep 2026Here’s a comment I read in the code I was working on. Walk the entire collection to locate flagged clusters. Skip it altogether when the cached, dirty-tracked flag count says there are none (the usual case): nothing needs marking, so the walk is pure waste. When the count is stale (e.g. right after an edit) or non-zero, we fall through to the real lookup, so stale marks never show. Same eventually
31 Aug 2026I write code roughly the same way I did ten years ago: I make edits in my text editor, I switch over to a terminal window and I run a command to compile and execute the code. I look at the result, then switch back to my editor. If I am unsure of what happens, I either add tracer prints to the code and restart the program, or I restart the program in a debugger. If I hit an exception that crashes m
24 Aug 2026It is common for promotional pamphlets aimed at children to contain a themed variant of snakes and ladders . This is the “game” where the players toss a die, move as many places as the die says, and then some spots on the board have an event that send the player forward, or back, or give them an extra toss or whatever. The theme is typically related to whatever the promoter wants to promote, but s
17 Aug 2026I have never done any time–frequency transformations. I understand the general idea, but I have never worked with the details. Today I had a reason to use it, but that means learning the basics first. The following is three seconds of a single 5 Hz sine wave, recorded at a sample rate of 100 Hz. (Continue reading the full article on the web.)
10 Aug 2026I have a copy of SICP, or as it is also known, The Wizard Book . This book is widely praised, but I can’t take the time to work my way through all of it. Instead, I’m going to occasionally jump into the parts of it that look interesting. Since last week, are in the process of simulating a digital circuit. The reason this is interesting is the solution in SICP uses hidden mutable state and message-
4 Aug 2026I have a copy of SICP, or as it is also known, The Wizard Book . This book is widely praised, but I can’t take the time to work my way through all of it. Instead, I’m going to occasionally jump into the parts of it that look interesting. In the previous two installations of this series, we looked at ways of implementing generic functions. In the first one, by tagging values and dispatching operati
26 Jul 2026When we tried to get an intuition for the differences in distribution functions, we learned that children subjected to a treatment had greater variation in their score than the reference group. (Continue reading the full article on the web.)
20 Jul 2026Imagine every person in a country is assigned some sort of score, and a higher score is better. I can’t share the specifics around the score I’m investigating right now, but on the population level it is collected by a government agency. Here’s the distribution of these scores for the population in my country. (Continue reading the full article on the web.)
13 Jul 2026Alternative titles: … earns you a high-risk pregnancy … earns you an ascent of Matterhorn … earns you 10,000 km on a motorcycle … earns you two BASE jumps … earns you a day on the frontline in Ukraine These are all about equivalent to the risk of one year of smoking. (Continue reading the full article on the web.)
6 Jul 2026I have a copy of SICP, or as it is also known, The Wizard Book . This book is widely praised, but I can’t take the time to work my way through all of it. Instead, I’m going to occasionally jump into the parts of it that look interesting. Last week, we looked at tagged data in Haskell. The authors of SICP weren’t convinced that’s the best approach, so they move on to data-directed programming. We’l
29 Jun 2026I have a copy of SICP, or as it is also known, The Wizard Book . This book is widely praised, but I can’t take the time to work my way through all of it. However, sometimes I jump into parts of it that look interesting. Today, we’ll see how to support multiple representations of data through tagging. This article is written in Haskell throughout, but at the start it will look a lot like the Lisp c
22 Jun 2026I’ve heard some buzz around the new GLM 5.2 open-weights model. They say it’s very capable! I won’t run a full comparison benchmark, but I have some credits sloshing around on OpenRouter so I figured I might compare GLM 5.2 to the similarly-priced Gemini 3 Flash, and see where things land. This uses the same setup as the previous benchmark: each LLM gets a few attempts at playing the game, with ea
17 Jun 2026Lucas Costa has written a good article on how to build systems that can handle code-generating robots. Unfortunately, when calling it backpressure , he used the wrong metaphor. Backpressure is about signaling to upstream processes that they are running too fast and need to slow down. The suggestions presented by Costa are mostly about signaling to the upstream process that it needs to do things di
15 Jun 2026