Posts from 2025
December 2025
How a (Wooden) Wood Plane Planes Wood
An old German instructional film for woodworkers shows in great detail what goes wrong (and right) when you plane wood in different configurations of a hand plane.
Join the All-Virtual EmacsConf December 6 and 7 and Check out My Zettelkasten Talk
Announcing my EmacsConf talk for Sunday, and reminding you that EmacsConf is in four days!
November 2025
Rsync File Copying from Dired with Transient Menu
Instead of async dired file copies, try rsync file copies with a bit of transient menu convenience.
What’s a Zettelkasten Good for in the Age of Affordable LLM’s?
Why spend time on your own knowledge and do so much manual labor when you could, you know, let the robots dance instead? I believe the answer lies in deep work and expertise.
Be Honest When Claude Code Writes Your Software
Change the commit author to your LLM/coding agent to make your git log history more honest and tell a story about collaboration.
Learning About Swift Concurrency (from Matt Massicotte’s Blog) with a Zettelkasten
Live video performance: Reading a post by Matthew Massicotte, and then integrating what I learned into my Zettelkasten. Suprises presented themselves, so as usual, it took a while!
October 2025
Moving my computing needs into Emacs has this weird effect that spending maintenance time in Emacs, I can improve both how I do stuff with the computer, and also what stuff I work on itself.
Zettelkasten for Programmers: Pick a Title. It’s Okay to Change Later
Look over my shoulder and find out why my note title is suspiciously generous, maybe even vague, in a context where it’s obvious that this surely won’t be a good title forever.
Redirect Output to Buffers from Emacs Eshell
In Eshell, you can call Emacs functions, and redirect output to buffers instead of files. Here is a particularly convenient way.
Protesilaos Stavrou Asks (Me) About Indie Development, Art, Philosophy, Zettelkasten
Do you desperately want to hear my voice? Then watch this recording of a conversation with Protesilaos for 2.5 hours about a wide range of topics.
September 2025
Zettelkasten for Programmers: Processing Swift Actor Usage Advice in Depth
Let us read an article by Matt Massicotte about Swift actor use and abuse, and extract from it as much as we can learn.
You Don’t Need to Remember Anything Meets LLM Fans
The Scam Called “You Don’t Have to Remember Anything” – That post from Zettelkasten.de blew up on Hacker News yesterday to my surprise. We will discuss this in a couple of days and let the dust settle.
August 2025
Clickable Swift Testing Failure Messages in Emacs compile-mode
The swift test command-line invokation does not print unambiguous filenames for test failures, so we need to attempt to patch this from the console output ourselves like true hackers.
Infinite Canvas – iOS and macOS Whiteboarding and Sketching App, Now Available
Announcing my latest app, Infinite Canvas, an app for quick sketches, handwritten notes, with a canvas as wide and deep as your imagination. Available for all platforms as a free download.
Emacs Elevator Pitch (August Blog Carnival)
This month’s entry for the Emacs Carnival is how I’d talk someone into using Emacs at the workplace I do not have.
Adapt Unidirectional Flow Virtues to Your Plain SwiftUI App
To get started, you can require authentication for actions on buttons anywhere in your SwiftUI app produce a change up the scene, e.g. a log-in overlay or dialog, by injecting a closure into the environment to handle that.
July 2025
SwiftUI DocumentGroups Are Terribly Limited
Document-based apps with SwiftUI are easy to write, but hard to customize apart from a couple visual tweaks. Say if you want to introduce in-app purchases.
My latest app project is ready for testing: a delightfully simple drawing app for all Apple platforms.
TextIndex: a Markdown Pre-Processor and Syntax Extension for End-of-Book Indexes
Matt Gemmell makes use of his new Mac to create another tool for a Markdown publishing pipeline.
Can You Really Put on Blinders If You Know There May Be Adverse Effects of Your Actions?
Is it possible to claim that you’re off the hook when it comes to questions of whether usage of GenAI should be allowed, focus on practical usage, and then that’s that? I believe that is a bit too cheap a cop-out.
Migrating from asdf to mise (en place)
Managing dev environments with mise is really rather nice.
I had a ten-year break from Emacs as a terminal-based text editor until I learned about what you could really do with this program. Then it stuck.
June 2025
Getting Over Frustratingly New Topics (Swift Concurrency) with a Zettelkasten
I am learning to speak a new language: Swift Concurrency. It is densely packed with familiar-sounding concepts and details I am not aware of (yet). This is how I tackle it.
How Many Zettelkästen Should You Have?
The Zettelkasten is a tool for personal productivity and writing, first and foremost. So the answer is almost always …
Emacs Carnival 2025-06: Take Two
I’m hosting this month’s Emacs Carnival. Submit your blog posts on the topic “Take Two” in June to participate!
My Procedure to Create New Zettelkasten Notes Inline
Apply wishful programming to reserve things you want to research or write about later, so that you can keep up the writing flow now.
May 2025
No Open Office Hour On May 27th
Tuesday, May 27th I am out of office.
Microsoft Recall and Signal: When You Don’t Worry About 3rd But 1st Party Spy Software
Signal Desktop for Windows blocks screenshots by default, using DRM protection tools, to not have the screen-scraping tool Recall silently record your conversations. At least that’s the effect that is promised.
Insert Cc and Bcc Mail Headers Conditionally in Emacs message-mode
Using a function to insert some mail composition headers only if they don’t already exist, because some mail servers won’t accept the email otherwise.
New Era of Small Software Shops
Big Tech is here to stay, but if they go full-LLM, full factory production, you will find care and craft and innovation elsewhere.
The Inlined Agile Software Craftsmanship Manifesto
What happens when you resolve the references in the four values of the Software Craftsmanship Manifesto to the corresponding values from the Agile Manifesto? You end up with this.
Xogot, Godot 4.4 for iPad, Just Dropped
Xogot is available on the App Store
Variadic Types in Swift and How to Count Them
Exploring parameter packs (the repeat-each stuff) in Swift to count how many types are in the generic argument clause, or if that’s empty.
Creating a new Cloudflared tunnel with DNS settings that allow you to map subdomains to Docker containers on your Unraid NAS using SWAG.
My Current Compilation Window Display Settings in Emacs via display-buffer-alist
My current display-buffer-alist settings for compilation output.
Start of a Zettel: Modern UICollectionView
A Zettelkasten is a tool for learning. How do I learn a new piece of a familiar API at the very start?
April 2025
Master Software Crafters Let the Workpiece Be
It’s easy for coders to code, but master software craftspeople also need to take responsibility for non-programming tasks.
Introducing Markdown Babel: a Universal Tool to Make Markdown Files Executable
Execute code blocks in any Markdown document with your favorite editors using md-babel
Calling Swift Library Functions from C
A quick recipe on how to emit a binary from Swift that you can use from a C program.
Keep .org File Outline Items Sorted Alphabetically
Use org-sort and before-save-hook to keep a file sorted at all times.
Test, Save, and Execute HTTP Requests with Hurl (or restclient.el)
Impersonate your browser to send HTTP requests directly from your text editor, or executable documentation!
Andy Bell wants to make his web design studio support movements for the betterment of the world, and share in the open, partly to pay off a community debt.
Each Failed Project Has Failed in Its Own Way – Anna Karenina Principle of Software Failure
Wherein I present to you the Anna Karenina Principle of software failure.
The Limits of swift-markdown Customization
So I’ve tried to create a processing pipeline with the Markdown package published by the Swift Team. It does a couple of really nice things, but it is also very locked-down in its functionality.
March 2025
Open Office Hours (Daylight Saving Time): Tuesdays, 18:30 CEST (That’s 1 Hour Late)
Every Tuesday is Open Office day: hop on a (video) chat and ask question or just hang out. During DST, it’ll be 1 hour later than before.
Working with Process Pipe and Its 64KiB Limit
Piping data from your Swift program to another program, or receiving large amounts of data from standard input, can be prone to errors, freezing your program. Here is how to do it safely.
NSPopover in NSTextView With Links Is Broken: Accessibility Hierarchy Slowdown
Showing a popover relative to a text view will compute the accessibility hierarchy 3 times per clickable link in the text view; that can get slow real quick.
NSFileWrapper Sometimes Changes Modification Date to the Past
Beware when overwriting files with the same content using NSFileWrapper: the modification date can mess up.
February 2025
NSTextView Bypasses performKeyEquivalent Check for Backspace and Option-Backspace
Shortcuts, aka “key equivalents”, are usually handled by views in your vier hierarchy in the same, predicatable way. Except deleting a character or word with backspace in a text view. These two, apparently, short-circuit this mechanism.
Comparing Use of AI vs Learning to Code Has Nothing to Do With Knowledge
LLM code output is faster, yes, but it’s incommensurable with gaining knowledge.
Preview Mass Text Replacements with Emacs 30.1 replace-regexp-as-diff
Performing text replacements on large documents or multiple files is annoying: you get false-positive results all too quickly; stepping through each and every match interactively is cumbersome, too. What about previewing changes as a diff, though?
Ethan Marcotte, the Luxury of Job Choice, and Principles
Resigning from a job associated with the government that is exciting and pays well requires strong principles. The tipping point for Ethan wasn’t what I was expecting, though.
Important Things Are Never Just Done
The paradoxes of activism: Individual action seems pointless, yet individuals is all we are. You alone cannot change the world, but if you don’t try to, it certainly won’t. Defending against very rational and even well-meaning criticism.
Following Matt Massicotte’s example, the real leverage to influence Apple’s political course of action at all is through organized protest, and boycott.
Atkinson Hyperlegible Font Next and Mono
The Atkinson Hyperlegible free font has been updated, and now comes with more weights and a monospace variant!
Guilt-Free for the First Time. Burkeman’s “Meditations for Mortals”
Burkeman’s book “Meditations for Mortals” is 0% new-age and 100% productivity tips. It is just structured in a way that encoes taking it in slowly, and at least a couple of months into it, it changed my life for the better.
Staring In My Face, But I Ain’t Looking: Simplifying RxSwift Subscriptions
The ultimate manifestation of a simplification is replacing N>1 things with 1 thing. If each of these things in turn are non-trivial, you can really feel how much complexity of behavior you cut away.
January 2025
Sins of Carthage: RxSwift Re-Entrancy, Undetected
Where I realize that building dependencies in DEBUG mode can offer insights.
Using 2 Editors Because Xcode Is Dumb
Xcode 16 doesn’t support working on a Package and a Demo app at the same time. But other editors do.
Responsive, Scalable Hamburger Menu in Accessible CSS
Draw a hamburger menu in pure CSS, then control the menu’s visibility with pure CSS and HTML. It’s a beaut.
Free SwiftUI University Course fro -Boston College Professor
If you need a free resource to make apps with SwiftUI in 2025, this one might be for you.
Open Office Hours: Tuesdays, 17:30 CET
Every Tuesday now is Open Office day: hop on a (video) chat and ask question or just hang out.
Announcing the Swift Package separation of Omnibar and RxOmnibar.