Articles
- Protobuf has no null: evolving a schema without breaking old messages
Adding a field, making it optional, making it required, removing it, adding a sealed subclass... each of these is a decision about bytes that were written months ago. How k2pb makes those decisions explicit.
- k2pb: Protobuf for Kotlin Multiplatform, without the surprises
Why I wrote my own Protobuf library when kotlinx.serialization already has one, and why it now runs the whole serialization layer of a point of sale.
- An audio visualization with Jetpack Compose
Yet another Jetpack Compose article, this time with a bit of Audio, to make your animations a bit more dynamic!
- Ktlint: a great 1st experience
Code generation is often perceived as a compile-time security. We're ready to pay it by increasing the build time. But what if a linter was a replacement for compile-time safety while delivering a better code.
- Should I use Jetpack ViewModel?
All new shiny libraries are not good for all projects, it has to responds to a real problem first. Let's see if you should pick Jetpack ViewModel.
- RxJava2 subscribeOn: How to use it
subscribeOn is an operator that can be easily used in the wrong place and lead to subtle bugs and even ANR. Some tips to avoid the pitfalls.
- RxJava2 puzzle: Do you understand subscribeOn?
In my experience, the operator that has the lowest degree of understanding, and could definitely backfire at you in unexpected ways.
- RxJava2 puzzle: Subscription threading
Understanding subscribeOn is required, but that's not always enough.
- RxJava2 puzzle: Scheduler as 3rd parameter
Should we use the scheduler as 3rd parameter for methods like timer/interval?
- Minimalist Dagger for multi-modules
How to make Dagger as simple as Koin, even with multiple modules.
- Minimalist Dagger
How to make Dagger as simple as Koin
- TDD failures?
Discovered old videos about TDD and understood why I failed at it... til now!
- Android ImageSpan autosizing
Story: How we use Java reflection to achieve autosizing text & images while aligning multiple lines.