Weeknotes 2025 W12: Vile
Quick bits:
-
I have gotten so good at spotting AI-generated images that I can tell from the thumbnail.
-
Almost all the public spaces around where I live are shared between pedestrians and cyclists — no dedicated cycle lanes — which means that pedestrians end up playing a game of “dodge the cyclists” far too often. The other day, I got nearly hit and got called an Affe1 by a cyclist coming straight at me. Vile behavior. I really wish I had a place to take a relaxing walk, but… it is nigh impossible around here. Ugh.
-
The Berlin trash collectors’ strike is over, but the trash bins have not all been emptied yet. There is still a mountain of trash in the basement. Vile.
-
I’ve started using Scrivener to draft letters. It is an amazing tool for any kind of writing, really. The actual formatting I did in Pages,2 but Scrivener is just plain excellent for researching, brainstorming, organizing, and drafting.
-
The local REWE supermarket ran out of my usual oat milk, and I tried the REWE almond milk. Good lord, it was vile.
-
This weekend I’m taking an acting workshop: an introduction to the Meisner technique. I’m halfway through and will share my thoughts next week.
Shower thoughts:
-
Sometimes I feel like I haven’t grown enough in the last few years, but that’s wrong. In 2023, I was still using - (U+002D HYPHEN-MINUS) to specify ranges rather than – (U+2013 EN DASH).
-
The term “living room” is no longer accurate. These days, living rooms are not living at all, and are not even constructed with organic material!
-
Something can be both used and unused at the same time — like shoes that you don’t wear anymore.
Regarding Nanoc 5, one of the first orders of business is to figure out the implementation language. My must-haves are as follows:
-
It needs to be highly performant. (This rules out Ruby.)
-
It needs to have good support for parallelism. (This rules out Ruby and Crystal.)
-
Because I want this to be a long-lived project, it needs to be stable. (This makes Zig and Swift difficult choices to justify.)
-
It needs to be cross-platform. (This makes Swift an unattractive choice.)
This leaves primarily Rust and Go in the running.3
There still is the open question about how to implement plug-ins, which will primarily4 be used for filters5 to transform markup languages and templating languages. As I see it, there are two ways of implementing plug-ins:
-
Dynamically loaded plugins using the C ABI. This would yield very fast plugins, but would be harder to implement and decrease overall stability. This would rule out Go, too. Also, it would rule out running Ruby plugins in parallel, because there can only be one Ruby VM per process.
-
IPC over pipes or local sockets using something like protocol buffers. This would be safer to implement and open up support for more languages, but might be slow, and the implementation complexity would be higher.
Supporting both approaches (and perhaps other approaches that I haven’t thought of yet) could be possible.
Another problem that needs to be addressed is how plugins are distributed. I would like people to easily create plugins locally and distribute them. I specifically don’t want Nanoc 5 to be limited to whatever filters are provided by default; one of the strengths of Nanoc is its flexibility in creating filters for new languages, like my own D★Mark or TomatenMark.6
For a while, I was toying with the idea of rewriting the core parts of Nanoc in Rust, but it’s a tough path that I am not keen on. Ruby–C interop is brittle, and I’d like to steer clear of it. The same applies to Ruby–Rust interop, even with tools like Rutie.
No — I think I want Nanoc 5 to be a green-field project, free from the constraints of the past. This way, and only this way, I’ll be able to experiment and innovate.
Perhaps, for now, I will implement an ultra-minimal static-site generator that can roughly do what I need it to for denisdefreyne.com, hyper-focused and feature-incomplete, but enough to get an understanding of which ideas work, and which ones do not.
Nanoc 4, in the mean time, will remain supported, of course; I am using it for multiple sites myself, after all. Besides, Nanoc 4 is quite stable anyway.
Entertainment:
- Black Narcissus7 is one weird film. I tried watching it last year but got distracted — it sure has a slow start — but I’m glad I took the time to watch it properly this time.
Links:
-
Can You Fool A Self Driving Car? (Mark Rober): I had until now assumed that Tesla cars used LIDAR tech, but no — it’s just optical cameras?!
-
Astronomers discover 128 new moons orbiting Saturn (Hannah Devlin for The Guardian): So many moons!!!
-
Indiana Jones and the Objective Existence of God (Jacob Geller)
Tech links:
-
The Great Tech Heist - How “Disruption” Became a Euphemism for Theft: YES!
-
Undergraduate Disproves 40-Year-Old Conjecture, Invents New Kind of Hash Table: Amazing! Ahh, the things we take for granted in computer science.
-
Please stop externalizing your costs directly into my face (Drew DeVault)
-
A Society That Lost Focus (Ploum/Lionel Dricot, 2024)
-
German for “ape.” Quite the insult. ↩︎
-
I’ve got a copy of Affinity Publisher and I was tempted to use that, but figured that learning how to use Publisher wasn’t worth it for a single-page letter. Maybe next time! ↩︎
-
There are some other languages that could be interesting, like D, Ocaml, Dart, Java, and Kotlin, but none of capture my interest as much as Go and Rust do. ↩︎
-
Nanoc 5, as I see it, will have significantly fewer plugin types. Checking and deploying will most likely not make it into Nanoc 5, as those are independent concerns. I’m even thinking of removing the concept of pluggable data sources. This would leave only filters as plugins. ↩︎
-
The term “filter” is confusing and Nanoc 5 would be a good opportunity to fix that naming problem. I don’t know why I chose the term “filter,” but I’m not the only one who has done that in their SSG. ↩︎
-
For the latter I still need to work on getting a Ruby gem released, but it’s not a priority at the moment. ↩︎
-
Black Narcissus, directed by Michael Powell and Emeric Pressburger, written by Rumer Godden, Michael Powell and Emeric Pressburger (The Archers, Independent Producers, 1947). ↩︎