• 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.…

    Read More

  • 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() print(“4 alpha=(button.alpha)”)…

    Read More

  • 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 =…

    Read More

  • 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…

    Read More

  • 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…

    Read More

  • Writing For Me

    I’ve been posting on this website throughout my career. Many posts are motivated by my own suffering! These go like this: I learned a thing. The hard way. It sucked. Please avoid making the same mistake. In other posts, there’s a discussion on something and I feel compelled to broadcast my opinion! Here’s a 2008…

    Read More

  • From Permissions to Sessions: Rethinking Location Access in Android 17

    Image generated using Gemini In this article, we will learn how to implement the new 📍Location button introduced in Android 17 in Jetpack Compose-based Android applications. Android 17 adds a system-rendered 📍Location Button that we can drop into the layout via a Jetpack library, and tapping it gives the app precise location for that session only,…

    Read More

  • Forget the “Setup Tax”: A Production-Ready Multi-Module Android Template

    How to streamline your development workflow with pre-configured Kotlin Convention Plugins, custom Lint rules, and unified design system tokens. Creating a new Android application from scratch in modern engineering is rarely as simple as clicking File → New → New Project in Android Studio. Before writing a single line of business logic, developers face hours — or even days — of…

    Read More

  • Koko, KMP Starter Kit — Part 2: Integrations

    Part 2 of 4: the second phase of the KMP contest starter kit. Firebase, sign in and a AI backend proxy, added only when your app needs them. New here? Part 1 introduces the kit and gets your app running on your machine. Your app runs on your phone and works offline. That was phase 1’s…

    Read More