When I last updated this page, I was at Local-First Conf in Berlin. That was back in May 2025. Since then, life turned upside down. I caught COVID at the conference and had to skip the last day and head home early. It felt like a normal cold and cleared up in a few days. But over the following weeks, I developed long-COVID symptoms like fatigue, brain fog, and headaches. For quite some time I was…
Today I learned about isolated deinit from SE-0371, which allows actor types to have a synchronous deinit that runs on the actor’s executor. Especially useful for @MainActor types that need to perform clean-up work by accessing their own isolated state.
Today, while working on a major refactor of InterposeKit, I learned that KVO in Objective-C works by dynamically creating a subclass at runtime. It’s called NSKVONotifying_OriginalClass and it overrides the getter and setter of the observed property to include the observation logic. When removing the observation, the runtime even restores the original class and cleans up after itself.
Today I learned how to convert YAML to JSON directly from the command line using yq (not to be confused with the Python implementation): yq eval data.yaml -o json -P > data.json
This one took me longer than I’d have liked! We’re already well into 2025 and only now have I found the time to reflect on the past year. The reason? We’re on a nomad trip, once again spending the entire winter season in Bansko, Bulgaria. This time, we arrived before Christmas, and since then, we’ve been splitting our time between work, skiing and social activities, leaving little room for much…
Today I learned that Group and ForEach have public support for accessing their subviews starting in iOS 18 and macOS 15 using the Group.init(subviews:transform:) and ForEach.init(subviews:content:) initializers, respectively.
Today I learned that wrapping a Swift string literal in pound signs removes the need to escape quotes. Instead of "{\"key\": \"value\"}" you can write #"{"key": "value"}"#.
Today I learned that submenus on iOS display a bold chevron on the left when presented on an iPhone and a more subtle chevron on the right when presented on an iPad.
Today I learned that when moving items in a list on iOS, UIKit uses target indices as they are after deletion, while SwiftUI uses them as they were before deleting the moved item.
The year is slowly coming to a close, and so, just like last year, I’m pausing to put together a blog post to reflect on it. Join me as I dive into the highlights and lessons from 2023 from both a personal and business perspective. If you’re here only for particular topics, you can directly navigate to sections about my nomad trip, freelancing, new iOS app, relocation from Berlin to Dresden, more…
At the end of each year, I usually take some time to reflect on all that has happened. In the past, these thoughts were mainly focused on my work. I would write up a summary of the year’s events at Diagrams, post it to our internal Basecamp, and share it with the team on New Year’s Eve. Starting with this year, I’m completely changing that format as I’m beginning to post my reflections publicly on…
During my computer science studies, I switched from Windows to Mac and was amazed by all the high-quality native apps from independent developers. Their gorgeous designs and well-crafted user experiences attracted me to the point where I started thinking of building one myself. At that time, I lacked a proper tool for sketching software architecture diagrams. And so the idea for building a native…
Here’s an overview of my work and areas of expertise, spanning my Mac app Diagrams, freelance client projects, and open-source libraries. Skills AppKit: My entry point into Apple development and still my go-to framework for building Mac apps. SwiftUI: Adopted from the start, comfortable with the declarative model, advanced concepts, and bridging to older frameworks. UIKit: A mature framework I…