3 min read

Issue #70

Hi there! Hope you missed the newsletter at least a little bit 😁 A short break turned into a long summer break, but we're back!

I started a new full time job as an engineering manager in a small startup in climate space called Lun. I'm still coding, alas not as much as before. The project is heavy on iOS specific tech in AR space which I feel is rare in startups nowadays, and I'm loving it! Loved it so much that after consulting with them for a few months, I accepted their offer to join full-time.

It's wasn't an easy decision to let go of the "indie dream" (at least for now), but I'm actually very happy with it - turns out I thrive around other people 😀

Now that I've adjusted to the 9-5x5 again, I feel energised to bring the newsletter back in. Having said that, I'm looking for a partner to get the project going full steam. If that sparks curiosity, write me 👀

Now, let me share a few articles that grabbed my interest:

Typesafe identifiers, my favourite way

On my favourite topic of type-safe identifiers in Swift, Jacob wrote up exactly the way I prefer to manage them by defining a struct for each, but making it a one-liner to do so, no macros involved.

Humans write code, and humans make mistakes. | Jacob Zivan Design
One thing I’ve learned is to **just freaking** let the compiler prevent me from making mistakes. Sometimes that’s hard to do, then I learned about something called a Domain Primitive and I decided to give it a try in Swift.

Concurrency in detail

Two articles that are a perfect for each other. Diving into Swift Concurrency, a guide I didn't know I needed when starting with it a while back. And some things to watch out for to avoid subtle bugs when introducing Swift Concurrency into existing large codebases.

Concurrency Step-by-Step: A Network Request
When I was first learning to program I had absolutely no idea what I was doing. I was using C, and I remember desperately putting in * and & characters until things compiled. But, this was pre-Mac OS X. Upon running my horrifically incorrect programs, half the time the screen would become corrupted and the mouse would stop moving. I’d then have to reboot the whole machine via a physical switch. This was … frustrating.
How to shoot yourself in the foot with Swift Concurrency - Too Many Tasks
Adopting async/await and Swift Concurrency in a large codebase can cause subtle bugs to creep in your code. Here are some things to watch out for.

Format styles in excruciating detail

Along with closure syntax and if-case-let syntax, format styles warrant their own guiding website of this sort. While I could find logical mnemonics for closures in Objective-C and for if-case let, SwiftUI's format styles still break my brain every time. Bookmarking this!

Format Styles In Excruciating Detail

Beautiful async buttons

Spotlighting a library I found myself enjoying oddly much. ButtonKit offers a button component that supports async actions - with beautiful out-of-the-box progress styles and a whole bunch of customisations.

GitHub - Dean151/ButtonKit: Asynchronous and Throwable button implementation for SwiftUI, with animations and progress tracking
Asynchronous and Throwable button implementation for SwiftUI, with animations and progress tracking - Dean151/ButtonKit
Setapp offers a collection of 240+ trustworthy, advanced apps under one simple subscription. You will find apps such as Ulysses, Paste, Asset Catalog Creator Pro, DevUtils, Craft, Structured, and many more.
Try Setapp for free

✌️
Alright, that's it for today! Let's spread the good code vibes ✨🧘🌈☀️
I'm curious if you found any of the tips particularly interesting - let me know by replying to this email!