Can confirm. When I donβt cut mine for an extended period of time bc Iβm lazy it looks pretty bad.
17.02.2026 00:29 β π 2 π 0 π¬ 0 π 0@will-lumley.bsky.social
Mainly a senior iOS engineer, but love to dabble in web development and robotics/embedded-systems in my spare time. Father to four amazing children, and husband to a beautiful wife. Checkout my stuff: https://lumley.io http://github.com/will-lumley/
Can confirm. When I donβt cut mine for an extended period of time bc Iβm lazy it looks pretty bad.
17.02.2026 00:29 β π 2 π 0 π¬ 0 π 0
I went down a couple of dead ends before finally arriving on the ESP32, so all in all it took about 3 weeks.
But only just taking into account the current approach on the blog, it took me about about 1 week.
My old garage remote died, so instead of replacing it I turned the whole thing into a HomeKit-powered smart garage opener using an ESP32, a relay, and about $20 of parts.
Itβs fast, fully local (no cloud), and way more fun than buying a new remote.
How I built it π
lumley.io/blogs/smart-...
let's express gratitude to the amazing people who selflessly shared their priceless wisdom with us: @danielchooper.bsky.social, Jinkai, @useyourloaf.com, Tjeerd in 't Veen, @jacobstechtavern.com, Bruno Valente Pimentel, Alfonso Tarallo, @massicotte.org and @will-lumley.bsky.social
20.10.2025 12:19 β π 5 π 2 π¬ 0 π 0Hard agree. Combine deserved a graceful evolution, not quiet abandonment. Even a small set of first-party bridging tools or async-friendly operators wouldβve gone a long way toward easing the transition.
14.10.2025 13:10 β π 2 π 0 π¬ 1 π 0My talk from ServerSide is up!
13.10.2025 13:23 β π 36 π 10 π¬ 1 π 3
Fair question! And a common gotcha I've had with AsyncStream.
In this case itβs fine, as each call to stream() creates its own independent AsyncStream/Continuation pair, and the actor fans out values to all registered continuations when send(_:) is called.
So yeah itβs multi-subscriber safe :)
Why make this?
Because observing an @Observable class from a SwiftUI view is easy, but doing the same from another ViewModel got messy fast. Without @Published, youβre left juggling Tasks and AsyncStreams just to stay in sync.
π New blog post!
AsyncCombine: Because Async Code Shouldnβt Be Ugly
I brought back Combineβs sink, assign, and CombineLatest - but built powered by Swift Concurrency.
Observing @Observable from another ViewModel shouldnβt be painful.
Hereβs how I fixed it π lumley.io/blogs/async-...
so i wrote a thing about stubbing URLSession based on a 'trick' i discovered the other day jellystyle.com/2025/09/stub...
24.09.2025 09:17 β π 1 π 1 π¬ 0 π 0
iOS Dev Tip π‘
Easily monitor the deviceβs thermal state to optimize performance during overheating.
β learnandcodewithenid.com
Making this argument and then hanging the entire load on TRY is fucking hilarious:
10.04.2025 22:29 β π 484 π 40 π¬ 11 π 4
π‘Starting with iOS 18.0, you can create mesh gradients in SwiftUI using MeshGradient.
β learnandcodewithenid.com
FaviconFinder by @will-lumley.bsky.social is awesome!
github.com/will-lumley/...
Thank you for the shoutout @weijianduan.bsky.social! Iβm really glad itβs managed to help you :)
10.01.2025 23:37 β π 3 π 0 π¬ 1 π 0
There is a convenient brightness(_:) modifier in #SwiftUI that can be used to adjust the intensity of colors in our views. We can lighten the colors by passing it values from 0 to 1 or darken them using negative values:
nilcoalescing.com/blog/AdjustT...
1517, Martin Luther
28.12.2024 18:37 β π 22 π 2 π¬ 1 π 0itβs forbidden in their culture but a vacuum cleaner wants nothing more than to eat itβs own cord
26.12.2024 17:13 β π 1341 π 139 π¬ 19 π 2
Why I π the web.
#macOS menu bar app that shows how full the ISS urine tank is in real time. π°οΈπ½
Yurnining to check this out.
github.com/Jaennaet/pIS... #Swift
*click* React Native. *click* Flutter. *click* .....SwiftUI. *click* GTK. Easy. *click* ......Qt6.
23.12.2024 01:19 β π 8 π 2 π¬ 0 π 0How embarrassing! Maybe itβs just an issue on my machine then π
15.12.2024 06:36 β π 0 π 0 π¬ 0 π 0CMD+Space doesn't bring up Spotlight anymore and this has ruined my opinion on macOS and life.
15.12.2024 05:07 β π 0 π 0 π¬ 1 π 0How so?
15.12.2024 03:20 β π 0 π 0 π¬ 0 π 0Completion > perfection
13.12.2024 04:51 β π 1 π 1 π¬ 0 π 0
With #swiftlang It's easy to forget that the diff between a point-free and pointed styles of function argument passing is not just syntactic but semantic. It's normal to consider these to be equivalent:
1. [1, 2].map(String.init)
2. [1, 2].map { String($0) }
But we shouldn't forget that: 1/4
Do you know about the take function for the Optional type? It takes the value if it is not nil and toggles the variable to nil.
https://buff.ly/3Zin2Wv
I've always just used GPT-4o, but will give o1 a try after this. Keen to see the difference.
09.12.2024 03:32 β π 1 π 0 π¬ 0 π 0A problematic little #swiftlang pattern I often see is "unwrap-then-nullify" for optional values that hold some temp state. This oft comes up when dealing with local caches or scrollOffsets or in-flight tasks, etc. Forgetting to nullify a value to "reset" state is a common mistake. Use take method.
06.12.2024 12:28 β π 27 π 2 π¬ 3 π 0