iPX Directory

Directory Technology

Public Object

Listed, no subscribers yet

Paste it into any podcast app or feed reader to subscribe.

Jesse Wilson on programming.

Latest posts

Applebee’s

You are a restaurant owner-operator. You’ve been running your restaurant, Sam’s Pub, for almost ten years now, and you’re so proud of what you’ve built. You’ve hired a great staff, and you pay them fairly. You’ve developed a menu with items that use local fresh ingredients, that can be prepared quickly, and that customers enjoy. But hell, running a restaurant is exhausting. You got into this busin

14 Sep 2026
Test & Set

Working with threads always feels hazardous to me. Non-determinism limits how much we can exercise with simple tests. Stress tests can shake out some bugs, but they’re slow and potentially flaky. I don’t like flaky tests . So I have a few concurrency patterns that I trust, and I use ’em a lot. AtomicReference is one of them. It’s got a lot of concurrency power and a easy-enough API. I can make sen

13 Jul 2026
Deconstructing OkHttp

I presented this at KotlinConf on May 22, 2026. Also available on slides , YouTube , and Speaker Deck . OkHttp is a popular library for making network calls. You might use it directly, or with Ktor, Retrofit, Coil, or gRPC. But this is not a talk on how to use OkHttp. Instead, we’ll open up the code and look at its weird and clever implementation details. We’ll see connection lifecycles, cache sta

22 May 2026
‘Humans use Energy and Water too’

An engineer I admire was lamenting about AI. He said that his new programming agent is excellent at fixing bugs! And all that it costs is a bunch of energy and many litres of water. He said that he could also have fixed those same bugs, and that he also consumes a bunch of energy and many litres of water. Wait, What What are we doing here? Like in the most philosophical, why exist? Is it to love?

7 Mar 2026
Keep Android Open

Google is building a digital lock into Android. It's a very bad idea and I hate it. The excellent organizers at keepandroidopen.org encouraged me to complain to the Competition Bureau of Canada. What I sent wasn't well edited but it captures my anger. Please send your own! I found this website on the Keep Android Open petition site. https://keepandroidopen.org/ Google built Android as an open plat

21 Feb 2026
Flattening my Dependency Graph

Rounds has a Kotlin server that integrates a few things: PostgreSQL persistence via SQLDelight (hosted on PlanetScale !) WebAuthn4J for Passkeys kotlinx.html for dynamic web pages Ktor for HTTP binding The service uses six database tables. The business domain tables are Game and GameEvent . Support for auth, sessions, and collaborative editing adds Account , Cookie , Passkey , and GameAccess . How

3 Feb 2026
Dynamic Tints with CSS and Kotlin/JS

I’ve been trying to build a remarkable UI for Rounds.app . One feature that turned out quite well is tinting the game name & menu bar icons when the winner changes. In this recording you can see colors change when I toggle the win condition: The title color changes when the winner changes I’ve got a two CSS classes, tinted and tintedDefault for the game name. I’m using a CSS transition to animate

30 Jan 2026
Don’t Block Suspend Functions

Here’s a program that launches 3 jobs. The first runs forever and the other two exchange a value. @Test fun test() = runTest { val channel = Channel<String>() val deferredA = async { while (isActive) { delay(1_000) } } val deferredB = async { channel.send("hello") } val deferredC = async { channel.receive() } deferredB.await() deferredC.await() deferredA.cancel() } Once the useful jobs B and C fin

22 Jan 2026
Rounds.app

In 2012 , I published an Android score pad app named Rounds to the Play Store. I was quite proud of it! It used an iPod click wheel-style score entry UI and balanced capability with simplicity. Rounds’ animated action bar in 2012 I joined Square, did a bunch of open source, had a bunch of kids, and got generally busy. Rounds wasn’t broken and I neglected it. But eventually Google kicked it out of

15 Jan 2026
Inside Burst’s Test Interceptors

I recently posted on the Cash Code Blog announcing Burst’s new test interceptors feature. They are similar to JUnit rules in API and capability. A Small API A typical use case is connecting some lifecycle to a test’s execution. Perhaps we want a chess engine to be available while a test is running: class ChessEngineTest { @InterceptTest val chessEngineInterceptor = ChessEngineInterceptor() val che

6 Sep 2025
Coroutines Party Tricks

I presented this at Droidcon NYC on June 25, 2025. Available as code , video , slides , Droidtube , & Speaker Deck . Coroutines are an important tool in the Android developer’s toolbox. We use 'em to background our tasks, to parallelize our work, and to gracefully cancel operations. This is not a talk about that reasonable coroutines use. Instead, we’ll do unreasonable, forbidden things. We’ll stu

25 Jun 2025
UIViewPropertyAnimator is Too Cute

I was using the old UIView APIs when I found some code that broke my brain. Here’s Swift code to animates a UIButton from opaque to transparent over one second. let button = ... let animateOut = UIViewPropertyAnimator(duration: 1.0, curve: .easeInOut) { print("2 alpha=\(button.alpha)") button.alpha = 0.0 print("3 alpha=\(button.alpha)") } print("1 alpha=\(button.alpha)") animateOut.startAnimation(

26 Jan 2025
Try Something Simpler

The late Joe Armstrong had a great rule for error handling that stuck with me. ‘If you can’t do what you want to do try to do something simpler’ I was thinking about this recently. I was writing code to embed resource files in an iOS application binary. Here’s my first draft: let embeddedDir = OkioPath.companion.toPath( Bundle.pizzaResources.resourcePath!, normalize: false ) The ! in this sample a

5 Jan 2025
Testing safe area insets on iOS

I’m adding edge-to-edge UI support in Redwood. My code asks the host platform how much of the screen is consumed by system bars and notches and things, and it returns us a measurement like ‘40 pixels at the top + 10 pixels at the bottom’. The iOS code to handle this is simple: class RedwoodUIView : UIStackView(cValue { CGRectZero }) { init { this.setInsetsLayoutMarginsFromSafeArea(false) // Handle

20 Nov 2024
Bad Luck Tickets

My son’s swim meet is coming up. If he’s healthy, he’ll compete. My daughter’s hockey team has a game coming up. League rules say they must forfeit if they have fewer than 10 players. There’s only 10 girls on the roster so they need everyone to be healthy to compete. In either situation, a single failure will fail the lot. With swimming there’s just one chance to get unlucky, whereas with hockey t

13 Nov 2024