Exploring Uncut - March 10th, 2025
A bit of a social life
Not much happened this week in terms of exploration.
Being an introvert, I try to space out social events so I have time to recharge in between. This week was a bit of a failure on that front, with one concert, two family dinners, lunch with a friend, and a GeekClub meeting.
You might be wondering—what exactly is GeekClub?
I’ve been a CoderDojo coach for several years now. We meet about once a month to help kids between 7 and 17 years discover programming.
Watching kids tackle exciting programming projects at CoderDojo is always inspiring. But as coaches, we started to feel like spectators and were longing for more.
Some of the coachs and I invited a few friends and started meeting once a month to discuss tech (and more) over drinks. This month’s topics included full stack development in Swift or Python, Software Defined Radios and antenna shapes, Home Assistant and Modus, 3D printing filaments and more.
Round display follow-up
Last week, I built a quick prototype of a spaceship orbiting the edge of a round display. The next step is to control the ship using buttons or an old joystick.
The Seeed Studio Round Display integrates seamlessly with the XIAO chips, such as the nRF 52840. Solder header pins on the XIAO module, plug it into the display and voilà!

A XIAO nRF52840 board on the Seeed Studio Round Display.
But there’s a catch: the XIAO plugs directly into the display, using up all its GPIO pins—leaving no room for extra controls, which I need for game input.
I’ve identified two options to overcome this:
- use the recently released Plus version of the XIAO chip, that exposes 9 more pins
- or make custom connections to a different board

Pinout for the XIAO nRF52840 Sense Plus.
I explored the second option with a nRF52840 DK and ran some preliminary tests, but without much success. The backlight turns on, but nothing gets drawn on the screen.
Unwrap live
This past Saturday, Paul Hudson hosted his Unwrap Live event. This year, the theme was Apple Intelligence, with a big focus on using App Intents in your apps.
They allow an app to expose actions and content, making it part of the Apple Intelligence mechanism. At least, that’s the promise. For now, it’s mostly exposed to shortcuts and Siri. But that’s already a big deal and it revived some ideas I had for existing and future apps.
As usual, it was a very interesting (and intense) session offered by Paul where I learned not only about the main topic but picked up a few additional tidbits along the way.
For instance, I always forget how to initialize @State
variables using an initializer and the _
notation to initiliaze the wrapped value. The following example demonstrates using that technique for safely initializing a SwiftData container.
@main
struct MyApp: App {
@State private var modelContainer: ModelContainer
…
init() {
let modelContainer: ModelContainer
do {
modelContainer = try ModelContainer(for: MyModel.self)
} catch {
print("Error loading ModelContainer, switching to in-memory storage.")
let config = ModelConfiguration(isStoredInMemoryOnly: true)
modelContainer = try! ModelContainer(for: MyModel.self, configurations: config)
}
self._modelContainer = .init(initialValue: modelContainer)
}
}
Or that I can use the shorter, key path based, notation to access a property with a function that takes in a closure, such as in a map operation, using
items.map(\.name)
instead of
items.map { $0.name }
That’s it for this week, as always, feel free to get in touch on Mastodon, I’d love to hear your thoughts.