RSSAmplifier

Blog

leah blogs

a weblog by leah neukirchen

leahneukirchen.orgRSS feed ↗10 posts

Latest posts

Merry Christmas!

Frohe Weihnachten, ein schönes Fest, und einen guten Rutsch ins neue Jahr wünscht euch Leah Neukirchen Merry Christmas and a Happy New Year! NP: Pearl Jam Quick Escape

Advent of Swift

This year, I decided to use Advent of Code to learn the language Swift . Since there were only 12 days of tasks for 2025, here is my summary of experiences. Also check out my solutions . Tooling I used Swift 6.2 on Void Linux, which I compiled from scratch since there were no prebuilt binaries that worked with a Python 3.13 system (needed for lldb). It’s possible to bootstrap Swift from just a…

Comparing nitro to runit

Yesterday I announced a first public release of nitro, a tiny init system and process supervisor . This got a fair bit of attention, and to my delight was even boosted on the fediverse by both Laurent Bercot (of s6 fame) and djb himself. One of the most requested things was a comparison to other init systems. Since I’m most familiar with runit , I shall compare nitro and runit here. Comparison to…

Remembering the work of Kevin S. Braunsdorf and the pundits tool-chain

You may perhaps not recognize the name of Kevin S. Braunsdorf, or “ksb” ( kay ess bee ) as he was called, but you certainly used one tool he wrote, together with Matthew Bradburn, namely the implementation of test(1) in GNU coreutils. Kevin S. Braunsdorf died last year, on July 24, 2024, after a long illness. In this post, I try to remember his work and legacy. ⁂ He studied at Purdue University…

Merry Christmas!

Frohe Weihnachten, ein schönes Fest, und einen guten Rutsch ins neue Jahr wünscht euch Leah Neukirchen Merry Christmas and a Happy New Year! NP: Trembling Bells Willows Of Carbeth

How to properly shut down a Linux system

In a previous post, I discussed how you can determine that you are pid 1 , the init process, when the system is booting. Today, we’ll consider the end of the init process: system shutdown. If you look into a book on Unix system administration, the classic way to manually turn off a Unix system contains a few steps: Bring the system to single-user mode ( init 1 or shutdown ). Unmount all…

Time series based monitoring in very heterogeneous environments

For the last few years, I have built a centralized monitoring system based on Prometheus that gathers various metrics across my whole private fleet of servers. Since writing Prometheus exporters is rather simple, I have written some of them myself: lywsd03mmc-exporter , a Prometheus exporter for the LYWSD03MMC BLE thermometer which monitors my flat’s temperature and air humidity (as well as when…

Problem Solving with Answer Set Programming

A few months ago I found an article on how to organize your training plan using logic programming , which used Haskell to implement a logic language. At first, I thought this is a good problem to solve in Prolog, but there’s a difficulty: Prolog makes it quite hard to specify models that have multiple possible outcomes (yes, you can work with backtracking, but it gets tricky when you start to…

What autoconf got right

Thanks to the xz backdoor , many people are now talking about the state of Linux packaging tools, and in particular build systems. As a maintainer of Void Linux and packager of many things, I have my five cents to add, so today I ll be the contrarian and argue what autoconf got right . This is not an apology for GNU autotools; we are all well familiar with the issues they bring yet some…

Definitions with shared hidden variables in Gerbil Scheme

It is well known that a Scheme function definition is merely defining a lambda function to a variable: (define (hypot a b) (sqrt (+ (* a a) (* b b)))) This function could be written just as well: (define hypot (lambda (a b) (sqrt (+ (* a a) (* b b))))) Occasionally, we need this explicit style when a function needs to keep around some internal state: (define generate-id (let ((i 0)) (lambda ()…