For many years, I sometimes discovered that commands I was sure I had run were
no longer present in my Z shell history
file ( ~/.zsh_history ). In this article, I will show you how I tracked down the
bug. Spoiler: ultimately, patching Zsh to make it crash loudly and analyzing the
crash’s core dump was the winning strategy! 
 The good news first 
 Zsh 5.9.2 (released July…
Back in January 2025, multiple different security researchers published a total
of 6 security vulnerabilities in
rsync , some of which
allow arbitrary code execution and file leaks, so naturally I was wondering
whether/how my gokrazy/rsync implementation
was affected. Did implementing my own (compatible, but minimal) rsync in Go, a
modern and memory-safe programming…
Setting Stage 
 Last year I finally decided to tackle one of the larger items on my todo list. I finally got around to organize my paperwork digitally. It is one of those tasks that probably everybody dreads but will make itself noticeable
every so often when you need to dig out some document, or new ones arrive and a decision needs to made if it is worth keeping or belongs in the…
Recently, during a production incident response, I guessed the root cause of an
outage correctly within less than an hour (cool!) and submitted a fix just to
rule it out, only to then spend many hours fumbling in the dark because we
lacked visibility into version numbers and rollouts… 😞 
 This experience made me think about software versioning again, or more
specifically about…
I have come to appreciate coding
agents to be
valuable tools for working with computer program code in any capacity, such as
learning about any program’s architecture, diagnosing bugs or developing proofs
of concept. Depending on the use-case, reviewing each command the agent wants to
run can get tedious and time-consuming very quickly. To safely run a coding
agent without…
Wayland is the successor to the X server (X11, Xorg) to implement the graphics
stack on Linux. The Wayland 
project was actually started in 2008, a year before I created the i3 tiling
window manager for X11 in 2009 — but for the last 18 years
(!), Wayland was never usable on my computers. I don’t want to be stuck on
deprecated software, so I try to start using Wayland each…
For every cloud service I use, I want to have a local copy of my data for backup
purposes and independence. Unfortunately, the gphotos-sync tool stopped
working in March
2025 when
Google restricted the OAuth scopes, so I needed an alternative for my existing
Google Photos setup. In this post, I describe how I have set up
 Immich , a self-hostable photo manager. 
 Here…
I have been using a MacBook Pro M4 as my portable computer for the last half a
year and wanted to share a few short impressions. As always, I am not a
professional laptop reviewer, so in this article you won’t find benchmarks, just
subjective thoughts! 
 Back in 2021, I wrote about the MacBook Air
M1 , which was the first computer I used that
contained Apple’s own ARM-based…
I liked the NixOS meetup earlier this year, and at the end of the meetup they
told everyone about NixCon 2025, which would be happening in Switzerland this
year, at the very same location, the University Of Applied Sciences
OST in Rapperswil, so I decided to go! In this trip
report, I want to give you a rough impression of how I experienced this awesome
conference :) 
 The…
The Intel 285K CPU in my high-end 2025 Linux
PC died again ! 😡 Notably,
this was the replacement CPU for the original 285K that died in
March , and
after reading through the reviews of Intel CPUs on my electronics store of
choice, many of which (!) mention CPU replacements, I am getting the impression
that Intel’s current CPUs just are not stable 😞. Therefore, I am giving…
Passwords and secrets like cryptographic key files are everywhere in
computing. When configuring a Linux system, sooner or later you will need to put
a password somewhere — for example, when I migrated my existing Linux Network
Storage (NAS) setup to
NixOS , I needed to specify
the desired Samba passwords in my NixOS config (or manage them manually, outside
of NixOS). For…
I wanted to use GoCV for one of my projects (to find and
extract paper documents from within a larger scan), without permanently having
OpenCV on my system. 
 This seemed like a good example use-case to demonstrate a couple of Nix commands
I like to use, covering quick interactive one-off dev shells to fully
declarative, hermetic, reproducible, shareable dev shells. 
…
In this Blog post I will explore the process of setting up a minimal rust project for embedded baremetal development. The focus is on getting up and running including setting up a debugging flow for instruction stepping fully integrated into my editor of choice (emacs). 
 As of 2025 many popular microcontrollers such as the esp32 already have a big rust community and some easy templates to get…
In this article, I want to show how to migrate an existing Linux server to NixOS
— in my case the CoreOS/Flatcar Linux installation on my Network Attached
Storage (NAS) PC. 
 I will show in detail how the previous CoreOS setup looked like (lots of systemd
units starting Docker containers), how I migrated it into an intermediate state
(using Docker on NixOS) just to get things…
Ich hatte viele Jahre eine kleine Nextcloud Instanz in meinem Heimnetzwerk im Einsatz. Insgesamt war ich damit glücklich, leider gab es über die letzten zwei Jahre hinweg immer wieder Probleme mit dem Notizen Plugin. Eine Funktionalität, die mir sehr wichtig ist. 
 Vor einem Jahr kam dann die Erinnerung hoch, dass …
For one of my network storage PC
builds ,
I was looking for an alternative to Flatcar Container
Linux and tried out NixOS again
(after an almost 10 year break). There are many ways to install NixOS, and in
this article I will outline how I like to install NixOS on physical hardware or
virtual machines: over the network and fully declaratively. 
 Introduction:…

 
 
 
 
 
 
 
 

 
 Update (2025-09-07): The replacement CPU also died and I have given up on
Intel. See Bye Intel, hi AMD! for
more details on the AMD 9950X3D. 
 
 

 Turns out my previous attempt at this build had a faulty
CPU! With
the CPU replaced, the machine now is stable and fast! 🚀 In this article, I’ll
go…
I have recently started using the grobi program by Alexander
Neumann again and was delighted to discover that
it makes using my fiddly (but wonderful) Dell 32-inch 8K monitor
(UP3218K) monitor much more convenient — I get
a signal more quickly than with my previous, sleep-based approach. 
 Previously, when my PC woke up from suspend-to-RAM, there were two scenarios: 
 
…
Sometimes, you need to be able to constrain a type-parameter with a method, but
that method should be defined on the pointer type. For example, say you want to
parse some bytes using JSON and pass the result to a handler. You might try
to write this as 
 func Handle [ M json . Unmarshaler ]( b [] byte , handler func ( M ) error ) error { 
 	 var m M 
 	 if err := m…

 [2024-01-13: I added a section with an option I forgot to put into my talk and thus elided from the initial post as well.] 
 I gave a talk at GopherConAU 2023 about a particular problem we encountered when designing generics for Go and what we might do about it. 
 This blog post is meant as a supplement to that talk.
It mostly reproduces its content, while giving some…
With the team surrounding our previous paper on
reduced-basis methods for quantum spin systems ,
Matteo Rizzi, Benjamin Stamm and Stefan Wessel and myself,
we recently worked on a follow-up, extending our approach to tensor-network methods.
Most of the work was done by Paul Brehmer,
a master student in Stefan's group …
In the past month I have renovated my appartment. Because of this I had to redo my entire desk setup. If you know me that means spending a lot time managing cables 😅.
But I am really happy with the result. See for yourself … 
 
 

 I always wanted to be flexible in how I use the devices on my desk. I want to switch between using my laptop and desktop without having to replug…
Similar to most people in their second PostDoc a considerable chunk of time in the past year
has been devoted to job hunting, i.e. writing applications, preparing and attending interviews
for junior research group positions. As the year is closing I am finally able to make a positive
announcement …
Note: If you don’t want to read the exposition and explanations and just want
to know the steps I did, scroll to the summary at the bottom. 
 For a couple of years I have (with varying degrees of commitment) participated
in Advent of Code , a yearly programming
competition. It consists of fun little daily challenges. It is great to
exercise your coding muscles and can provide…
This post serves as a summary for a live code I did at our local hacker space. For the full experience please refer to the recording .
Though I probably should warn that the live coding was done in German (and next time I should make sure to increase the font size everywhere for the recording 🙈). 
 From zero to a working rust project for the raspberry pi. These are the required steps:…
The goal of quantum-chemical calculations is the simulation
of materials and molecules. In density-functional theory (DFT) the first step
along this line is obtaining the electron density minimising an energy functional.
However, since energies and the density are usually not very tractable quantities
in an experimental setup, comparison to experiment …
(Cross-post from our report published in the Psi-k blog ) 
 From 20th until 24th June 2022 I co-organised a workshop on the theme of
 Error control in first-principles modelling 
at the CECAM Headquarters in Lausanne
( workshop website ).
For one week the workshop unified like-minded researchers from a range of communities,
including …
Let’s say you want to implement a sorting function in Go. Or perhaps a data
structure like a
 binary search tree ,
providing ordered access to its elements. Because you want your code to be
re-usable and type safe, you want to use type parameters. So you need a way to
order user-provided types. 
 There are multiple methods of doing that, with different trade-offs. Let’s…

 Go 1.18 added the biggest and probably one of the most requested features of
all time to the language: Generics . If
you want a comprehensive introduction to the topic, there are many out there
and I would personally recommend this talk I gave at the Frankfurt Gopher
Meetup . 
 This blog post is not an introduction to generics, though. It is about this
sentence from…