Ole Begemann

Swift, squirrels, cycling, cities for people not cars. My book: Advanced Swift. Berlin. Languages: de/en.

Invisible characters: When posting code, I sometimes insert a zero-width space (U+2060) to prevent things from turning into hashtags or mentions. Example: `@⁠escaping #⁠line`. Beware when copy-pasting such code into your editor.

Ole Begemannole@chaos.social
2026-02-26

@cocoaphony Yeah, I saw your crashing code snippet. I only wanted to comment on the “since June 2023” question. I don’t think the AppKit updates page says this, so you aren’t years behind.

Ole Begemannole@chaos.social
2026-02-26

@cocoaphony I don’t think so. The bullet point I think(!) you’re quoting only talks about NSImage being Transferable and some other types being Sendable, doesn’t it? I can’t find any other relevant NSImage reference in that document.

“AppKit more fully integrates with Swift and SwiftUI with Sendable (NSColor, NSColorSpace, NSGradient, NSShadow, NSTouch) and Transferable (NSImage, NSColor, NSSound) types.”

Ole Begemannole@chaos.social
2026-02-25

@dale_price Good idea!

Ole Begemannole@chaos.social
2026-02-24

How you can tell no LG webOS developer lives in an apartment building: LG TVs are always discoverable via Bluetooth, and there's no way to turn this off (or is there?). I constantly have to block neighbors trying to connect their phone to my TV.

Ole Begemannole@chaos.social
2026-02-24

@joe I use SingleFile (browser extension) for archiving web pages. It also has a CLI (github.com/gildas-lormeau/sing). The default config is designed for archiving and modifies the original HTML, e.g. by rewriting img elements to data URLs. But it's very flexible, so it might work for your use case. I've used the CLI successfully through the provided Docker image (run with Apple's container tool). I don't know about running it natively on macOS.

Ole Begemann boosted:
James Thomsonjamesthomson
2026-02-16

Writers: Generative AI models were built on our stolen works, are deeply unethical, and risk devaluing our entire profession.

Artists: Generative AI models were built on our stolen works, are deeply unethical, and risk devaluing our entire profession.

Developers: Wheeeeeeeeee!

Ole Begemannole@chaos.social
2026-02-16

@cocoaphony There is `swift inspect dump-concurrency`, but I don’t know anything about it beside these two forum posts from @ktoso and Johannes Weiss. I have no idea if this can inspect iOS apps in the simulator or even on device.

forums.swift.org/t/task-debugg
forums.swift.org/t/asyncthrowi

Ole Begemannole@chaos.social
2026-02-16

@mattiem I like “knowledge debt”. Reminds me of Peter Naur’s Programming as Theory Building paper (1985). I came across it a few months ago (not coincidentally, in the context of LLM/vibe coding criticism). PDF: pages.cs.wisc.edu/~remzi/Naur. One of the main theses is that the primary outcome of the software development process is not the piece of software, but the team’s shared understanding of the problem domain and how they modeled it in the code.

Ole Begemann boosted:
Matt Massicottemattiem
2026-02-16

Oh, just some light Friday afternoon thinking about the existence, meaning, and value of knowledge debt.

massicotte.org/blog/the-journe

Ole Begemannole@chaos.social
2026-02-12

@vrutberg @mattiem Re: AsyncSequence.share(), also note this recent forum thread: forums.swift.org/t/new-subscri. tl;dr: share() is more like PassthroughSubject than CurrentValueSubject.

Ole Begemannole@chaos.social
2026-02-11

@tuparev Yeah, this is a reason why libraries generally shouldn’t spawn hidden unstructured tasks without exposing them to the caller IMO. But that’s impossible to enforce, of course.

I doubt monitoring the thread count will work because the concurrency runtime keeps idle threads around in its thread pool. It’d have to be an API that lists active tasks.

Ole Begemannole@chaos.social
2026-02-10

@dgoldsmith No, sorry. I don't participate in Apple's feedback process.

Ole Begemannole@chaos.social
2026-02-10

Another data loss opportunity in Apple’s Passwords.app: the Notes field only accepts ~4 KB of text (why?). If you keep typing at the end of the text, the app won’t let you. But if you paste something at the beginning of the text, the app allows it and just deletes the same number of characters from the end. WTF! Also observed on macOS 26.2.

Ole Begemannole@chaos.social
2026-02-10

Apple Passwords.app data loss PSA: If you edit an entry in Passwords.app and then quit the app without clicking the Save button first, your edits are lost. The app will just quit without popping up a confirmation dialog. Observed on macOS 26.2.

Ole Begemannole@chaos.social
2026-02-10

I came across the My Perfect Console podcast a few months ago and it has quickly become one of my favorites. Highly recommended if you’re interested in interviews with video game designers/developers/actors and their life stories. myperfectconsole.com/ Great episodes:

• Ep. 2 Ashly Burch (plays Aloy in Horizon)
• Ep. 6 Phil Fish (Fez)
• Ep. 96 Jordan Mechner (Prince of Persia)
• Ep. 142 Mark Cerny (PlayStation 4+5)

Ole Begemannole@chaos.social
2026-02-10

@jmechner Really sad news for the team. I’ve never played the original and was excited about getting to play the remake.

PS: I just listened to your appearance on the My Perfect Console podcast (myperfectconsole.com/episode/97) and greatly enjoyed it. Thanks!

Ole Begemannole@chaos.social
2026-02-09

@ctietze Which one? RegexBuilder?

Ole Begemannole@chaos.social
2026-02-09

@ctietze For what it’s worth, there is a relatively new parsing library from Apple for parsing binary data: github.com/apple/swift-binary-

Ole Begemannole@chaos.social
2026-02-09

@ctietze Despite the “experimental” in the name, I believe this *is* the actual implementation of Regex and related APIs in the standard library. The development began as “experimental-string-processing” and the name stuck into production.

Ole Begemannole@chaos.social
2026-02-09

@tuparev There’s no API to wait for all running tasks, but IMO that’s not so different from normal program exit. E.g. it’s not guaranteed that all deinits of live objects will run on program exit, either.

For concurrency, the easiest strategy is to have your async main() function await everything you need to complete. Use structured concurrency where possible. And if you absolutely need a Task { … }, make sure to store it in a let and await its value.

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst