I’m currently sitting here with Intellij IDEA IDE open with 3 workspaces (different clones of the Trailblaze project ). In each one of them I’m using Firebender with the Claude Sonnet 4.5 model. As I’m writing this I just toggled back over to IDE and made sure all my agents are still running. I’ve been hesitant to write this post because things keep changing so fast. But I’m doing it now to try to
7 Jan 2026Sam Edwards - Handstands, Travel, Android & Web
Latest posts
There is documentation on the Android Developer website sharing tips to run Android UI tests via the command-line which I’ve found super useful. It provides examples on how to run specific tests (instead of running them all) including running by package, class or method. This documentation is fantastic, but it doesn’t include the tests_regex argument that is also available in the AndroidJUnitRunne
15 Jan 2025What Do We Know About “Journeys With Gemini”? “Journeys with Gemini” was first (to my knowledge) discussed publicly at Droidcon London during a segment of #TheAndroidShow by Tor Norbye of the Android Studio team . We saw a sneak peek of a new way to write UI tests for Android using Google’s Gemini (AI Model) that takes a text based set of human readable steps and programmatically executes a UI tes
9 Dec 2024I first heard about Maestro when it was released in 2022, but I haven’t played with it until now. I’m doing some work with Espresso and UiAutomator for Android testing and was curious how Maestro worked under the hood, so I cloned their git repo and dove into the code. This quick post shares what I learned about the inner workings of the library with TONS of links to their open source implementati
18 Nov 2024Parameterized tests allow you to write a test once, but allow it to be called with multiple parameters. This means it is creating more methods than you’ve written, but without you having to write and maintain each one individually. Here is a trivial example of writing a single test with TestParameterInjector , but having it run twice with true and false . @RunWith(TestParameterInjector::class) cla
31 Oct 2024I wrote this Kotlin K2 FIR guide because I was not able to find any guides or examples to get started with FIR for static analysis. K2 is now finally stable in Kotlin 2.0.0 and future versions, so FIR will be the recommended way of doing static analysis. Background Starting Kotlin 1.x you could only use PSI (Program Structure Interface) to create an AST (Abstract Syntax Tree) to run static analysi
31 May 2024I wanted to embed the contents of my GitHub project on another website, but the path to get there wasn’t straightforward. Here are the roadblocks I hit, and how I got around them. Skip to the end if you just want the final solution. Idea 1: Render in an iframe I’d love to just create an iframe to show everything in my GitHub project on another website. An iframe seemed like a beautiful solution, b
2 May 2024As a former web-developer myself, I still gravitate back to browser-based UIs. They are so easy to access from anywhere, and are globally available. It’s hard to argue the utility of the amazing web platform. Compose for Web (WASM) is the latest technology in Kotlin Multiplatform and I’m pretty bullish about it. In this post I’ll take you through what it is and why I think it’s going to be pretty
6 Sep 2023As the documentation says, you can combine both Espresso and Compose in an Android instrumentation test . In order to interact with Compose in an instrumentation test you need a ComposeTestRule . Problem Typically you would create a ComposeTestRule with createComposeRule() in a part of your app that is compose only, but that will create a blank ComponentActivity and launch it showing a blank scree
12 Apr 2023Kotlin companion objects allow you to add static data and methods associated with a class. This is similar to how Java has static fields and methods. The problem is that Java doesn’t really know what a companion object it, so trying to access one using standard Java reflection might make you go crazy. package com.handstandsam /** This is contrived example of a companion object */ class SpecialFeat
1 Feb 2023