More About Me
- My /now page shows what I am doing.
- Résumé/CV shows what I have been doing.
- Work with me on your projects!

Writing
- Introduction to my most important articles.
- Wiki with important concepts.
- All About TextKit: I deal with text, and here's a collection of everything I figured out so far.
- Ultimate FastSpring Guide for Selling macOS Apps: I sell my macOS apps in my own store. Resources and tips to get you started.
Latest Blog Posts
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.
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.
More blog posts in the archive