profile picture

Michael Stapelberg

All Blog Posts

Filter by tag:
Go to page:

2017 › December

  • Background Ever since I first used a MacBook Pro with Retina display back in 2013, I’ve been madly in love with hi-DPI displays. I had seen the device before, and marvelled at brilliant font quality with which scientific papers would be rendered. Read more →

2017 › November

  • 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 RGB2Rv17. This article describes the network setup I created for this year’s event. The intention is not so much to provide a fully working setup (even though the setup did work fine for us as-is), but rather inspire to you to create your own network, based vaguely on what’s provided here. Read more →

2017 › October

  • In the pkg-go team, we are currently discussing which workflows we should standardize on. One of the considerations is what goes into the “upstream” Git branch of our repositories: should it track the upstream Git repository, or should it contain orig tarball imports? Read more →

  • Because I found it frustratingly hard to make GitLab and dex talk to each other, this article walks you through what I did step-by-step. Let’s establish some terminology: dex is our OpenID Connect (OIDC) “Provider (OP)” in other words: the component which verifies usernames and passwords. Read more →

  • UNIX distributions used to come with the system source code in /usr/src. This is a concept which fascinates me: if you want to change something in any part of your system, just make your change in the corresponding directory, recomile, reinstall, and you can immediately see your changes in action. Read more →

  • I previously wrote about my Debian stretch preview image for the Raspberry Pi 3. Now, I’m publishing an updated version, containing the following changes: SSH host keys are generated on first boot. Old kernel versions are now removed from /boot/firmware when purged. Read more →

2017 › August

  • I strive to respect everybody’s personal preferences, so I usually steer clear of debates about which is the best programming language, text editor or operating system. However, recently I was asked a couple of times why I like and use a lot of Go, so here is a coherent article to fill in the blanks of my ad-hoc in-person ramblings :-). Read more →

2017 › May

  • Modern desktop environments like GNOME offer UI for this, but if you’re using a more bare-bones window manager, you’re on your own. This article outlines how to get a login page opened in your browser when you’re behind a portal. Read more →

2017 › April

  • A while ago, I got myself a bunch of HomeMatic home automation gear (valve drives, temperature and humidity sensors, power switches). The gear itself works reasonably well, but I found the management software painfully lacking. Hence, I re-implemented my own management software. Read more →

  • On 2017-01-18, I announced that had been modernized. Let me catch you up on a few things which happened in the meantime: Debian experimental was added to I was surprised to learn that adding experimental only required 52MB of disk usage. Read more →

2017 › March

  • The Turris Omnia is an open source (an OpenWrt fork) open hardware internet router created and supported by, the registry for the Czech Republic. It’s the successor to their Project Turris, but with better specs. I was made aware of the Turris Omnia while it was being crowd-funded on Indiegogo and decided to support the cause. Read more →

  • I previously wrote about my Debian stretch preview image for the Raspberry Pi 3. Now, I’m publishing an updated version, containing the following changes: A new version of the upstream firmware makes the Ethernet MAC address persist across reboots. Updated initramfs files (without updating the kernel) are now correctly copied to the VFAT boot partition. Read more →

2017 › January

  • NOTE that the documented assumptions about fsync skipping are incorrect in the code below. Prefer using the renameio package. Writing files is simple, but correctly writing files atomically in a performant way might not be as trivial as one might think. Read more →

  • For, I looked at loading webfonts. I considered the following scenarios: # local? cached? Network Expected Observed 1 Yes / / perfect render perfect render 2 No Yes / perfect render perfect render 3 No No Fast FOUT FOIT 4 No No Slow FOUT some FOUT, some FOIT Scenario #1 and #2 are easy: the font is available, so if we inline the CSS into the HTML page, the browser should be able to render the page perfectly on the first try. Read more →

  • has been modernized! We have just launched a major update to our manpage repository. What used to be served via a CGI script is now a statically generated website, and therefore blazingly fast. While we were at it, we have restructured the paths so that we can serve all manpages, even those whose name conflicts with other binary packages (e. Read more →

2016 › November

  • Personally, I find the packaging tools which are available in Debian far too complex. To better understand the options we have, I created a diagram of tools which are frequently used, only covering the build step (i.e. no post-build quality assurance checks or packaging-time helpers): When I was first introduced to Debian packaging, people recommended I use pbuilder. Read more →

  • The last couple of days, I worked on getting Debian to run on the Raspberry Pi 3. Thanks to the work of many talented people, the Linux kernel in version 4.8 is _almost_ ready to run on the Raspberry Pi 3. Read more →

  • tl;dr: I upgraded from a qnap TS-119P to a custom HTPC-like network storage solution. This article outlines what my original reasoning was for the qnap TS-119P, what I learnt, and with what solution precisely I replaced the qnap. A little over two years ago, I gave a (German) presentation about my network storage setup (see video or slides). Read more →

2016 › August

  • A while ago, it occurred to me that querying Debian Code Search seemed slow, which surprised me because I previously spent quite some effort on making it faster, see Debian Code Search Instant and Taming the latency tail for the most recent substantial architecture overhaul and related optimizations. Read more →

2016 › July

  • Recently, I was wondering why I was pushing off accepting contributions in Debian for longer than in other projects. It occurred to me that the effort to accept a contribution in Debian is way higher than in other FOSS projects. Read more →

2016 › June

  • Whereas most of the networks I regularly use (home, work, hackerspace, events, …) provide native IPv6 connectivity, sometimes I’m in a legacy-only network, e.g. when tethering via my phone on some mobile providers. By far the most common IPv6-only service I use these days is SSH to my computer(s) at home. Read more →

2016 › May

  • Context For the last 3 years I’ve used the hardware described in my 2012 article. In order to drive a hi-dpi display, I needed to install an nVidia graphics card, since only the nVidia hardware/software supported multi-tile displays requiring MST (Multiple Stream Transport) such as the Dell UP2414Q. Read more →

2016 › March

  • Like many other open source projects, the i3 window manager is using Travis CI for continuous integration (CI). In our specific case, we not only verify that every pull request compiles and the test suite still passes, but we also ensure the code is auto-formatted using clang-format, does not contain detectable spelling errors and does not accidentally use C functions like sprintf() without error checking. Read more →

2016 › January

  • Up until recently, I used to use kanla, a simple alerting program that I wrote 4 years ago. Back then, delivering alerts via XMPP (Jabber) to mobile devices like Android smartphones seemed like the best course of action. About a year ago, I’ve started using Prometheus for collecting monitoring data and alerting based on that data. Read more →

2015 › December

  • Note: the postings on this site are my own and do not necessarily represent the postings, strategies or opinions of my employer. Background For the last couple of years, was running on a dedicated server I rented. I partitioned that server into multiple virtual machines using KVM, and one of these VMs contained the faq. Read more →

  • While modern desktop environments that are used on Linux set up the locale with support for UTF-8, users who prefer not to run a desktop environment or users who use SSH to work on remote computers occasionally face trouble setting up their locale correctly. Read more →

  • I’m happily using Prometheus for monitoring and alerting since about a year. Regardless of the monitoring system, one problem that I was uncertain of how to solve it in a good way used to be meta-monitoring: if you have a monitoring system, how do you know that the monitoring system itself is running? Read more →

2015 › October

  • When uploading a new library package which changes its API/behavior in a subtle way, typically you will only hear about the downstream breakage after you’ve uploaded the new library package (via bug reports telling you that your package FTBFS, fails to build from source). Read more →

2015 › July

  • Recently, the pkg-go team has been quite busy, uploading dozens of Go library packages in order to be able to package gcsfuse (a user-space file system for interacting with Google Cloud Storage) and InfluxDB (an open-source distributed time series database). Read more →

  • I have been using a Dell UP2414Q monitor for a little over a year now. The Dell UP2414Q was the first commercially available display that qualified as what Apple calls a Retina Display, meaning it has such a high resolution that you cannot see the individual pixels in normal viewing distance. Read more →

Go to page: