profile picture

Michael Stapelberg

All Blog Posts

Filter by tag:
Go to page:

2020 › November

2020 › September

2020 › August

  • Motivation Despite using a FTTH internet connection since 2014, aside from the one fiber uplink, I had always used network gear with 1 Gbit/s links over regular old rj45 cat5(e) cables. I liked the simplicity and uniformity of that setup, but decided it’s time to add at least one fiber connection, to get rid of a temporary ethernet cable that connected my kitchen with the rest of my network that is largely in the living room and office. Read more →

2020 › July

  • Back in 2013, I published a replacement controller for the Kinesis Advantage ergonomic keyboard. In the community, it is often referred to simply as the “stapelberg”, and became quite popular. Many people like to use the feature-rich QMK firmware, which supports my replacement controller out of the box. Read more →

2020 › June

2020 › May

  • I generally enjoy reading the uses this blog, and recently people have been talking about desk setups in my bubble (and on my Twitch stream), so I figured I’d write a post about my current setup! Desk setup I’m using a desk I bought at IKEA well over 10 years ago. Read more →

  • I just released a new version of distri. The focus of this release lies on: a better developer experience, allowing users to debug any installed package without extra setup steps performance improvements in all areas (starting programs, building distri packages, generating distri images) Read more →

  • In distri, packages (e.g. emacs) are hermetic. By hermetic, I mean that the dependencies a package uses (e.g. libusb) don’t change, even when newer versions are installed. For example, if package libusb-amd64-1.0.22-7 is available at build time, the package will always use that same version, even after the newer libusb-amd64-1. Read more →

2020 › February

  • When spawning a child program, for example in an integration test, it is often helpful to know when the child program is ready to receive requests. Delaying A brittle strategy is to just add a delay (say, time.Sleep(2 * time.Second)) and hope the child program finishes initialization in that time. Read more →

2020 › January

  • In case you are not yet familiar with why an initramfs (or initrd, or initial ramdisk) is typically used when starting Linux, let me quote the wikipedia definition: “[…] initrd is a scheme for loading a temporary root file system into memory, which may be used as part of the Linux startup process […] to make preparations before the real root file system can be mounted. Read more →

2019 › October

  • One of my two NAS builds recently died, so I bought a new one until I find some time to debug the old one. Since a couple of people have been asking me what I would recommend nowadays based on my November 2016 article “Gigabit NAS (running CoreOS)”, I figured I would share the new hardware listing: Read more →

2019 › September

2019 › August

2019 › July

  • Hooks are an extension feature provided by all package managers that are used in larger Linux distributions. For example, Debian uses apt, which has various maintainer scripts. Fedora uses rpm, which has scriptlets. Different package managers use different names for the concept, but all of them offer package maintainers the ability to run arbitrary code during package installation and upgrades. Read more →

2019 › May

  • In the i3 projects, we have always tried hard to avoid optional dependencies. There are a number of reasons behind it, and as I have recently encountered some of the downsides of optional dependencies firsthand, I summarized my thoughts in this article. Read more →

2019 › March

  • This post is hard to write, both in the emotional sense but also in the “I would have written a shorter letter, but I didn’t have the time” sense. Hence, please assume the best of intentions when reading it—it is not my intention to make anyone feel bad about their contributions, but rather to provide some insight into why my frustration level ultimately exceeded the threshold. Read more →

2019 › February

  • Recently, a user reported that they don’t see window titles in i3 when running i3 on a Raspberry Pi with Debian. I copied the latest Raspberry Pi Debian image onto an SD card, booted it, and was able to reproduce the issue. Read more →

  • Motivation I have recently been looking into speeding up Debian Code Search. As a quick reminder, search engines answer queries by consulting an inverted index: a map from term to documents containing that term (called a “posting list”). See the Debian Code Search Bachelor Thesis (PDF) for a lot more details. Read more →

2018 › December

  • My use-case is seemingly very simple: I want to run a webserver in a Docker container, and it should be reachable via IPv4 and IPv6. The webserver has multiple virtual hosts, some of which just serve static files, while others proxy to, say, a Grafana instance, which is also running in a Docker container. Read more →

2018 › October

  • Our computer association NoName e.V. organizes a retro computing event called RGB2R every year, located in Heidelberg, Germany. This year’s version is called RGB2Rv18. This article describes the network setup I created for this year’s event. If you haven’t read it, the article about last year’s RGB2Rv17 network is also available. Read more →

2018 › June

  • This is taken care of: Gunnar Wolf has taken on maintenance of the Raspberry Pi image. Thank you! (Cross-posting this message I sent to pkg-raspi-maintainers for broader visibility.) I started building Raspberry Pi images because I thought there should be an easy, official way to install Debian on the Raspberry Pi. Read more →

2018 › May

  • Update (2021) Update (2021): After Dell didn’t update their Linux version for a while, I concluded it would be best to just install a standard Ubuntu Linux. All required drivers are upstreamed, and I never needed the Dell tools that come with their version. Read more →

2018 › April

  • This post is part of a series of posts about the kinX project. Latency measurement End-to-end latency consists of 3 parts: input latency (keyboard) processing latency (computer) output latency (monitor) During the development of the kinX keyboard controller, I realized that measuring processing latency was quite simple with my hardware: I could start a timer when sending a key press HID report to the computer and measure the elapsed time when I would receive a reply from the computer. Read more →

  • This post is part of a series of posts about the kinX project. Motivation The Kinesis Advantage comes with a built-in 2-port USB hub. That hub uses a proprietary connector to interface with a PS/2 keyboard controller, so it cannot be used with a USB keyboard controller. Read more →

  • This post is part of a series of posts about the kinX project. Background 10 years ago I got a Kinesis Advantage keyboard. I wrote about the experience of learning to touch-type using the ergonomic NEO layout in my (German) post “Neo-Layout auf einer Kinesis-Tastatur”. Read more →

  • The kinX project is described in a series of blog posts: While not strictly a part of this series, “Hacking your own Kinesis keyboard controller” describes the first controller I built in 2013 (maybe interesting for context). The first post introduces the kinX, a keyboard controller with merely 0. Read more →

2018 › March

  • I have heard a number of times that sbuild is too hard to get started with, and hence people don’t use it. To reduce hurdles from using/contributing to Debian, I wanted to make sbuild easier to set up. sbuild ≥ 0. Read more →

  • motivation To run the tests of my i3 Go package, I use the following command: go test -v go.i3wm.org/... To run the tests of my i3 Go package on a different architecture, the only thing I should need to change is to declare the architecture by setting GOARCH=arm64: Read more →

Go to page:

I run a blog since 2005, spreading knowledge and experience for almost 20 years! :)

If you want to support my work, you can buy me a coffee.

Thank you for your support! ❤️