Make Things Easy
I’ve been using feature gates for a long time. For all of their benefits, making sure that they get cleaned up and the old code is removed after roll-out is complete can be a challenge. By looking at some examples that I’ve come across recently I’ll share my strategy for making this boring work more likely to get done: just make it easier.
Extending Coil
Many open source libraries allow you to extend them to work with your own custom data sources and data types. In this post we explore how Coil can be extended to allow you to use industry standard libraries in your own codebases.
Screenshot Tests Are Manual Tests
Screenshot tests are a powerful tool, but come with some hidden costs. While they can help us quickly add test coverage to our UI code, for most of our behavioral tests they often test the wrong thing.
Simple APIs are elegant APIs
I recently gave a presentation about how Dagger works under the hood, and I was once again struck by the elegance of the
javax.inject.Provider
interface. The interface is so simple it almost seems useless, but it’s also incredibly flexible, and forms the basis of much of the code generated by Dagger.
Rounded Corners
Someone raised an interested question about how Android and iOS handle rounded corners in UI elemnets differently, so I used Jetpack Compose and Geometry to try to figure out why.
Building Plugable Features on Android
Modularization of Gradle projects can ease a team’s growing pains, but can also introduce challenges when architecting features that require knowledge of the specific modules used in an app. This post looks at approaches for dynamically aggregating dependencies in a project for reusable, extensible features.
Make a Prototype
Solving problems in programming often includes unknowns. Before I commit to lots of work I like to try to shed some light on those questions as quickly as I can, usually with working prototypes.
Handling Dates & Times in SQLite
SQLite may not have dedicated datetime data types, but that doesn’t mean we have to restort to queries filled with meaningless numbers and post-processing datasets in application code. Here we’ll take a look at a real world use case for SQLite’s datetime functions and see how they can make working with dates easier.
SQLDelight on the Server
Cashapp’s SQLDelight, a great ORM-like library for Android apps and SQLite, recently extracted it’s database driver to support other types of databases, opening it up to other use cases. Here are some tips from my recent experience deploying SQLDelight in a web app.
Server Side Analytics with GoAccess
While simplifying and modernizing my website I realized that I don’t need anything as invasive as Google Analytics, so switched to server side analytics. Here I detail what I tried, and the docker container I ended up building to support automatic, robust, server side analytics.