• UseCases: Injectable Functions

    If you’ve spent any time in modern Android development—or really any ecosystem that leans on clean architecture—you’ve probably bumped into the concept of “use cases.” Maybe you’ve seen them praised as a cornerstone of separation of concerns (SoC), or maybe you’ve rolled your eyes at yet another layer of abstraction. There’s a lot of confusion…

    Read More

  • Android Parcelable: There’s a better way

    TL;DR Introducing the new parcelable library which enables using kotlinx.serialization to serialize data into Android Parcels to be passed between different Android Components. Android Parcelable Android’s Parcelable is an object whose values can be written and read from a Parcel. An Android Parcel is a container of values that can be sent between different Android…

    Read More

  • Encapsulate your @Composable functions

    TL;DR Encapsulate your composable functions and associated types with a surrounding object and use the operator fun invoke of that object as your composable function. This is a convenient convention for complex components. Details Complex Composable functions often require numerous associated types for their implementation: state holders, UI models, default values, etc. While it does…

    Read More

  • Publishing KMP Libraries in Kotlin 1.4.0

    With the release of Kotlin 1.4.0, comes a new approach to authoring and using Kotlin Multi-platform (KMP) Libraries. For instance, a library User is now only required to declare a dependency in the common source set for a Kotlin Multi-platform Library and all of the platform implementations will automatically be added. But library Authors need…

    Read More

  • Jetpack Compose Multiplatform!?

    Jetpack Compose, the new UI toolkit for Android, that is currently in an Alpha stage, has made it’s way over to Desktop App development. The same UI toolkit used for Android application development can now be used for Desktop applications. Though both Jetpack Compose and Compose for Desktop are in early development stages, I’m excited…

    Read More

  • Executing commands from Gradle

    Recently, I setup a system to automate the process of taking screenshots of an Android application. The system consisted of instrumentation tests, Gradle tasks, and a Fastlane command. The instrumentation tests were responsible for loading the different screens and capturing the screenshots. The Gradle tasks were responsible for running these tests, toggling Demo Mode for…

    Read More

  • From GraphQL to Kotlin

    That’s one small step for [a] man, one giant leap for mankind. — Neil Armstrong GraphQL has redefined the way of writing APIs by providing an elegant way to declare and query data. Structuring models and their relationships, and querying those models for specific data can be done using a simple Schema Definition Language (SDL).…

    Read More

  • It’s about time

    People like us, who believe in physics, know that the distinction between past, present, and future is only a stubbornly persistent illusion. — Albert Einstein Time representation is a necessity for nearly all applications. The ability to display, reference, track, and manipulate moments of time plays an important role in the development of applications. But…

    Read More

  • Constructing Kotlin Friendly Code

    Kotlin is often lauded for it’s conciseness and eloquent syntax, but often suffers from being confined to more limited Java coding conventions. This may be welcoming to Java developers looking to adopt Kotlin in their projects, but could be off-putting for others working in different environments, as well as, somewhat limiting Kotlin’s full linguistic potential.…

    Read More

  • Kotlin Inject

    TL;DR Inject is a new Kotlin multi-platform library that is a wrapper around the javax.inject annotations so that they can be used in Kotlin common code. I recently created a new Kotlin Multi-platform library called inject which is a simple wrapper around the javax.inject annotations. The reason for creating this library was to allow Kotlin…

    Read More