Write

Code review comments are the rules you forgot to write down

How to automatically keep AGENTS.md and AI instructions in shape, using PR review history

From messy inbox to actionable board, with one AI skill

Automating the unglamorous half of building a project

How to import multiple iOS signing certificates to CI

Exporting two iOS signing certificates together stopped working and broke a CI setup. How to fix importing multiple signing certificates.

Sliding Doors: ten years of RSS-Parser

Ten years since the first commit of RSS-Parser: a reflection on the library's journey and the sliding-doors moments that shaped a career.

Building Shellporter: From Idea to Production in a Week

Building Shellporter, a macOS menu bar app that opens a terminal in the project directory of the active IDE window, from idea to production in a week.

Sunsetting spoton: Android 16 killed the hotspot toggle trick

Sunsetting spoton, a Wear OS app to toggle the phone hotspot from the wrist, after Android 16 made its core trick impossible.

Accessing native macOS API in Compose Multiplatform

Accessing native macOS APIs like iCloud from a Compose Multiplatform desktop app through a native dylib and JNI, with a FeedFlow example.

Testing a Gradle Plugin that interacts with Git

How to test a Gradle plugin that interacts with a Git repository, using the KMP Framework Bundler plugin as a real-world example.

The curious case of a weird VerifyError crash

Hunting down a nasty runtime VerifyError crash that appeared with R8 enabled after updating the Android Gradle Plugin to 8.7.

From an Android to a Kotlin Multiplatform library

Migrating an existing Android library, RSS-Parser, to Kotlin Multiplatform: the challenges involved and the solutions applied.

Watch out for transitive dependencies: an “obvious” rant

A short rant sparked by a weird crash: always double-check what changes when updating a library, since hidden bugs might be lurking.

Don’t let Maven block you!

CI build failures often come from a Maven repository failing to serve a dependency. How to avoid getting blocked when that happens.