Advertisement · 728 × 90

Posts by Paul Samuels

Hacking with Ktor · paul-samuels.com

I built a tiny Ktor reverse proxy that forwards Snowplow events and pushes real-time updates over WebSockets to a debug UI.
All the best side projects start with “this should be easy… right?” 😅

paul-samuels.com/blog/2026/02...

#kotlin #ktor

2 months ago 0 0 0 0
Call Once · paul-samuels.com

Exploring a Call Once property wrapper in Swift using parameter packs.

paul-samuels.com/blog/2026/01...

#swift #propertyWrapper #parameterPacks

2 months ago 3 3 0 0
Make nice tools · paul-samuels.com

Finally wrote up the story of a local dev tool I’ve been poking at for ~4.5 years. Lots of lessons about DX, removing friction, support pain and why “just works” matters more than features.

paul-samuels.com/blog/2026/01...

#compose #kotlin #docker #swift #swiftui

3 months ago 2 0 1 0
From Runtime Explosions to Compiler Checked Simplicity · paul-samuels.com

Sometimes solving a problem isn't about more code, it's about asking the right question.
Step back, reframe and you might find a simpler solution.

Here's a recent example exploring KSP generated Kotlin code and Kotlinx.Serialization: paul-samuels.com/blog/2025/12...

#kotlin #ksp

4 months ago 2 0 0 0
Kotlin Gotchas: Why Your ?.let Sometimes Fails to Compile · paul-samuels.com

💡 Kotlin devs: ever had `?.let` mysteriously fail to compile?

I dug into a subtle Kotlin mistake I commonly see in pull requests, explain the issue and how best to fix it.

📝 New post: Kotlin Gotchas: Why Your ?.let Sometimes Fails to Compile

🔗 paul-samuels.com/blog/2025/11...

#Kotlin

5 months ago 2 0 0 0
Generic Algorithms Without Constraints · paul-samuels.com

We often reach for interfaces or base classes when we see duplicated code.

But what if you can’t change the types?

You can still make the algorithm generic - just teach it how to read and build data.

📝 Generic Algorithms Without Constraints

🔗 paul-samuels.com/blog/2025/11...

#swift #kotlin

5 months ago 1 0 0 0
Do Ya Still Need It · paul-samuels.com

🧹 DYSNI — Do Ya Still Need It?

We deleted >800 lines of old Objective-C by asking one simple question: Do Ya Still Need It?

Simpler code. Less confusion. More clarity.

👉 paul-samuels.com/blog/2025/10...

#CleanCode #Refactoring #DYSNI #Swift #ObjC

5 months ago 1 0 0 0
Git Rebase Tips and Tricks · paul-samuels.com

New post: Git Rebase Tips and Tricks

Habits and commands that make rebasing smoother - from keeping merge bubbles to verifying results and fixing mistakes.

paul-samuels.com/blog/2025/10...

#git #rebase #devtools #programming

5 months ago 2 0 0 0
Sometimes a Great DX Is Just a Horrible Pop Up · paul-samuels.com

Great DX isn’t always a slick UI - sometimes it’s a horrible popup that saves you hours.

I built a pop up that yells when local OAuth tokens expire and I love it.

paul-samuels.com/blog/2025/10...

#DevExperience #Kotlin

5 months ago 0 0 0 0
Advertisement
Chill Out with the Defaults · paul-samuels.com

Default arguments in Swift and Kotlin can make code cleaner - but at what cost? I explore how overusing them can weaken compiler checks, obscure intent, and blur boundaries between layers. Sometimes, being explicit is better.

paul-samuels.com/blog/2025/10...

#Swift #Kotlin

5 months ago 0 0 0 0
Self-hosting a Vapor app on a Raspberry Pi · paul-samuels.com

Might be more server side adjacent but I wrote this paul-samuels.com/blog/2025/08...

6 months ago 1 0 1 0
Explaining Regex Locally with Xcode · paul-samuels.com

The only Xcode refactoring tool I actually use? Explaining regex - no sketchy web tools required.

paul-samuels.com/blog/2025/09...

6 months ago 0 0 0 0

I had a similar issue years ago - if I used AirPods Max when developing the audio bitrate was as if it was a cheap Bluetooth headset for phone calls. Got no help when reached out to Apple (disappointing as it was a brand new M1 and their flagship headphones). Solution was just use phone for music

7 months ago 0 0 0 0
Turning CI Logs into Actions · paul-samuels.com

I wrote a post on turning CI logs into actions

The general idea is to wrap your existing build scripts with a tool that can parse the logs for specific JSON payloads and then perform actions like comment on GitHub PRs, ping slack channels etc.

paul-samuels.com/blog/2025/09...

#swift

7 months ago 1 0 0 0
Self-hosting a Vapor app on a Raspberry Pi · paul-samuels.com

I wrote a post on self hosting a Vapor app on a Raspberry Pi

paul-samuels.com/blog/2025/08...

#swift #vapor

8 months ago 4 1 0 0
Subtle retain cycle is subtle · paul-samuels.com

I wrote a post on a crafty little retain cycle in Swift, finding it and breaking it

paul-samuels.com/blog/2025/06...

#swift

10 months ago 2 0 0 0
KSP and Me · paul-samuels.com

I wrote a post on my experience of using Kotlin Symbol Processing in various ways over multiple years.
I cover how I like to structure my code and give example use cases for how we utilise KSP in our projects.

paul-samuels.com/blog/2025/06...

#kotlin #ksp

10 months ago 2 0 0 0
Advertisement

This is the current sweet spot we use it for. We have several bits of sharing like backend code generated for JVM and JS so we can run in webviews on the clients and native JVM in the backend. We also share types/serialisation between backend, Android and iOS to create a compile time contract

11 months ago 2 0 0 0

It’s situational but I work on a team ~10 iOS ~10 Android and we all work on our core platform and backends so tooling keep things consistent and avoiding pointless discussions on PRs or people causing churn reformatting stuff constantly is worth not having my own personal style

1 year ago 2 0 0 0
CustomTestStringConvertible · paul-samuels.com

Here's a post on making sure your SwiftTesting parameterised tests show up in the test navigator with nice names using `CustomTestStringConvertible`

paul-samuels.com/blog/2025/03...

#swifttesting #swift

1 year ago 1 0 0 0
Building Complex Things · paul-samuels.com

I wrote a post on "Building Complex Things" talking about virtualising macOS machines for iOS CI paul-samuels.com/blog/2025/03...
#iOS #macOS

1 year ago 1 0 0 0

It generates library files with ObjC interfaces that you can import into Swift. They are currently working towards native swift interop I believe. There are also libraries that help bridge things like coroutines to async/await and flows to AsyncSequences etc

1 year ago 0 0 1 0

“Best” is very situational in what you need and how your team is structured. We have had really good success with Kotlin Multiplatform - all our Android devs obviously know Kotlin and Swift/Kotlin are syntactically pretty similar and have fairly equal language features.

1 year ago 3 0 2 0