Posts List

The Testing Pyramid Has a Deeper Foundation

The Testing Pyramid Has a Deeper Foundation

Kotlin allows us to structure our code around compile-time tests. This post explains how.

Further Reading for Ethical Programming

Further Reading for Ethical Programming

This post contains further reading for my recent talk on the Slippery Slope of Unethical Programming

Add Overlays to Your Launcher Icon Using Layer-List

Add Overlays to Your Launcher Icon Using Layer-List

You can use a drawable to easily differentiate between flavors and variants. This will show you how.

Getting arbitrary properties from unknown classes with KProperty

Getting arbitrary properties from unknown classes with KProperty

The Kproperty class is powerful and useful.

Coroutines Introduction Video

Coroutines Introduction Video

A video presentation on coroutines, a talk I gave at GDG Cape Town

Escaping Callback Hell with Generic SuspendCoroutine Infix Extension Functions

Escaping Callback Hell with Generic SuspendCoroutine Infix Extension Functions

Callback hell happens all the time in Android. Luckily, with coroutines, there's an easy way out.

The Problem with Kotlin Kfunction Receiver Functions

The Problem with Kotlin Kfunction Receiver Functions

KFunction can be written in more than one way. Here's a list of analogues, plus some criticism of the Receiver Function.

Creating and Deploying an Android Library via CircleCI

Creating and Deploying an Android Library via CircleCI

This is the template I use to create new Android libraries with CircleCI support for Continuous Deployment.

Generics + Reflection + Type Inference + Reified Type = Kotlin Magic

Generics + Reflection + Type Inference + Reified Type = Kotlin Magic

With Kotlin, it's easier than ever to code with reflection and generics. This post attempts to give one example.

Don't Pass Around Your Room/Database Entity

Don't Pass Around Your Room/Database Entity

If you're thinking of modularizing your Android App and you use Android Room, you should not pass around your Room Entity.