Bugs Apple Loves & Apps Apple Hates

It’s been a while since I’ve seen such a pithy and accurate representation of what it’s like being an Apple Mac & iPhone user these days (well done Nick Hodulik!). The externalities cost estimates might be a little tongue-in-cheek, but honestly, are they all that wrong? One small irritation at the wrong moment can ricochet… Read more

Extracting embedded images from a PDF

Surprisingly, the best way (that I’ve found) to do this is to use The Unarchiver, a free app from MacPaw (the folks behind SetApp and many other things). It seems to faithfully extract the images as-is, including ICC profiles (which might technically be separate from the image within the PDF, but nonetheless are crucial to… Read more

Backblaze seemingly does not support files greater than 1 TB

Screenshot from Backblaze's website showing their claims about "Unlimited data, unlimited file sizes, unlimited drives", with an eyebrow-raised emoji overlaid.

For nearly a month now, Backblaze has been fixated on a particular file of mine, that happens to be over 1 TB in size. Backblaze seemingly uploads it completely, but then on the next backup it uploads it again, even though it has not changed (in eight years!). Ad infinitum. Using their Explainfile tool to… Read more

“Import from iPhone or iPad” doesn’t work when any view contains a SwiftUI Toggle

Screenshot of the File menu with the "Import from iPhone or iPad" submenu expanded, and all items therein are disabled.

This is a public reposting of FB14893699, in case it’s helpful to anyone else or especially in case someone else has seen this too and knows how to work around it. If any view in the [active] window contains a Toggle – even one that’s disabled or hidden – then Continuity Camera (re. ImportFromDevicesCommands and… Read more

NSPasteboard crashes due to unsafe, internal concurrent memory mutation when handling file promises

This is a public reposting of FB14885505, in case it’s helpful to anyone else or especially in case someone else has seen this too and knows how to work around it. NSPasteboard mutates itself simultaneously from the main thread and the global concurrent Dispatch pool, w.r.t. to its internal type cache. This is surprisingly trivial… Read more

Calling Swift Concurrency async code synchronously in Swift

Sometimes you just need to shove a round peg into a square hole. Sometimes that genuinely is the best option (or perhaps more accurately: the least bad option). I find my hand is often forced by APIs I don’t control (most often Apple’s APIs). e.g. data source or delegate callbacks that are synchronous and require… Read more

Red Light

Photo of the Canary Wharf traffic lights, a ridiculous, confusing mess of lights that looks like an AI-generated monstrosity but is apparently real

Famously, Google used to have a practice dubbed “20% time”: about one day a week, engineers were {expected ⊻ encouraged ⊻ permitted ⊻ tolerated ⊻ known} to work on something other than their nominal work; something they themselves chose. Circa 2011, not long after I joined Google, I pitched a 20% project idea to my… Read more