• Making ADB a little bit dynamic 📱

    Android has a lot of tools for developers and one that has been around for as long as I can remember is Android Debug Bridge (adb). It allows you to issue commands to an attached device, such as installing an app or starting an Activity. If I want to test deeplinks, for example, I can…

    Read More

  • Extending an Interactive ADB 🔀

    A few weeks ago, I wrote about a script for making adb a little bit more interactive. The script makes the process of running an adb command much smoother if there are multiple devices attached by presenting a chooser. For example, when sending a deeplink: ➜ ~ deeplink https://zarah.dev Multiple devices found: 1 – R5CR7039LBJ…

    Read More

  • Extended ADB: En Vogue 💃

    Last year, I wrote about an extended adb script. The idea of the script is to make it really easy to issue an adb command even if there are multiple devices attached by presenting a chooser. For example, if I have two physical devices and an emulator and I want to use my deeplink alias,…

    Read More

  • I Dub Thee… Marginally better at RegEx

    Being a perpetual RegEx n00b, one thing I keep on forgetting is that it is easy to get tripped up when extracting information from an input. I always forget that looking for a match does not really just give back just the matching values – they are instead contained in Groups. Matches and Groups and…

    Read More

  • Lint Revisit: TODO Detector v2

    A few years ago, I wrote about writing a Lint rule to validate the format of TODO comments. Whilst I find that Lint is still difficult to grok, I have since learnt a little bit more that I feel a revisit of this rule is warranted. To recap, the rule enforces that all TODOs must…

    Read More

  • Lint Revisit: Providing Alternatives 🧙‍♀️

    In my previous post, we updated our TODO Detector to be more flexible. It is also easily extensible so that if we want to include more parameters or perhaps add more checks, we can follow the existing pattern and modify it. For example, what if instead of the date being in parentheses, we want a…

    Read More

  • Lint Me: Test Sources 🖇️

    It has been a year, which means it is once again time to re-examine our TODO Lint rule. TL;DR: The rule checks if a TODO includes mandatory information – an assignee and a date. We have also explored providing alternatives when suggesting quick fixes: A Lint rule with alternative fixes Today we will add another…

    Read More

  • Debugging App Links in Android 12 🔗

    I have been working with deeplinks lately and I noticed that quite a few things have changed since I last worked with them. The most important change is quoted in the list of Android 12 behaviour changes: Starting in Android 12 (API level 31), a generic web intent resolves to an activity in your app…

    Read More

  • Introducing Kempt

    kempt is a little hobby project I’ve put together to get away from Spotless/Gradle and simplify setting up commit hooks across my projects. 💡 TL;DR: kempt is a single-entry point CLI that delegates to language-specific formatters with easy installation, automatic binary management, git hook integration, license headers, whitespace handling, and simple configuration. Spotless (and other…

    Read More

  • How to Take an 11 Month Sabbatical

    A sequel to the last one, but a bit longer. On Leaving Slack After nearly 6 years, I left Slack in August of 2025. It was for a combination of reasons that added up to “it’s time”. The biggest reason was that Salesforce (who acquired Slack while I was there) would not grant tenured/high level…

    Read More