# Costa Fotiadis

Android, most of the time.

https://www.costafotiadis.com/ · every post is also at /<slug>.md · [RSS](https://www.costafotiadis.com/rss.xml)

## Most beers

1. [Exercises in futility: Jetpack Compose Recomposition](https://www.costafotiadis.com/exercises-in-futility-jetpack-compose-recomposition.md) — 84 beers
2. [👏 ViewModel Saved State Review 👏](https://www.costafotiadis.com/viewmodel-saved-state-review.md) — 78 beers
3. [Going edge-to-edge with Compose without losing it](https://www.costafotiadis.com/going-edge-to-edge-with-compose-without-losing-it.md) — 74 beers
4. [At the Mountains of Madness with Jetpack Compose](https://www.costafotiadis.com/at-the-mountains-of-madness-with-jetpack-compose.md) — 70 beers
5. [👏👏 Kotlin Coroutines Review 👏👏](https://www.costafotiadis.com/kotlin-coroutines-review.md) — 63 beers

## 2026

- [At the mountains of madness: Interviews](https://www.costafotiadis.com/at-the-mountains-of-madness-interviews.md): After being part of countless tech interviews, on both sides of the aisle, here's a few things that my much younger, stupider self, would probably refuse to listen to.
- [Remote Compose looks promising](https://www.costafotiadis.com/remote-compose-looks-promising.md): Just Eat Takeaway (JET) is a global food delivery network handling millions of active users across numerous markets. Operating at this scale requires flexibility on the client…
- [It looks like you're trying to: Build an Extension for Command Palette](https://www.costafotiadis.com/it-looks-like-youre-trying-to-build-an-extension-for-command-palette.md): It took more than a decade, but I finally got tired of running the same five ADB commands. You know the drill: open the terminal, hit the "up" arrow key seventeen times, get…
- [At the Mountains of Madness: Rewriting a 100-Line PowerShell Script as a KMP Desktop App](https://www.costafotiadis.com/at-the-mountains-of-madness-rewriting-a-100-line-powershell-script-as-a-kmp-desktop-app.md): Not sure when it happened, but at some point I contracted this strange illness that compels someone to tinker with their OS on their spare time.
- [Mogged into building a Chrome extension (Replacing 'Search with Google' with Claude)](https://www.costafotiadis.com/mogged-into-building-a-chrome-extension.md): Scrolling the fever dream called Twitter, I came across this sentence:
- [Using a GitHub file as a database cause why not](https://www.costafotiadis.com/using-a-github-file-as-a-database-cause-why-not.md): I needed some type of like/clap counter for my blog. But then again, likes are lame. What I really needed was a beer 🍺 counter.
- [Things](https://www.costafotiadis.com/building-things.md): I’ve always wanted one of these pages. You know the type — “things I find interesting”, “reading list” yada yada. Basically a dumping ground for interesting stuff I come across…
- [ViewModel is deprecated*](https://www.costafotiadis.com/viewmodel-is-deprecated.md): *not really

## 2025

- [Live Updates and Progress notifications for Android 16 at JET](https://www.costafotiadis.com/live-updates-and-progress-notifications-for-android-16-at-jet.md): Android 16 introduced a new notification template specifically designed to help users seamlessly track user-initiated start-to-end journeys.
- [At the Mountains of Madness with Jetpack Compose](https://www.costafotiadis.com/at-the-mountains-of-madness-with-jetpack-compose.md): As part of my daily attempt to pay the bills, I had to implement some pull-to-refresh action.

## 2024

- [Extending detekt for Android at JET](https://www.costafotiadis.com/extending-detekt-for-android-at-jet.md): For some time now, the JET Android Consumer App has been heavily relying on detekt for static code analysis.
- [Injecting Composables with Dagger without losing it](https://www.costafotiadis.com/injecting-composables-with-dagger-without-losing-it.md): Everyone is using Hilt/Koin or some other fancy DI framework that just works™.
- [Going edge-to-edge with Compose without losing it](https://www.costafotiadis.com/going-edge-to-edge-with-compose-without-losing-it.md): A practical guide to edge-to-edge layouts in Compose: handling Window Insets, transparent status/navigation bars, and icon tints — recreating YouTube's Ambient Mode effect.

## 2023

- [Exercises in futility: One-time events in Android](https://www.costafotiadis.com/exercises-in-futility-one-time-events-in-android.md): Sometimes, I get the impression one needs 42 hours of research and a PhD dissertation to figure out how to send a one-time event from the ViewModel layer to the UI safely these…
- [Exercises in futility: Jetpack Compose Recomposition](https://www.costafotiadis.com/exercises-in-futility-jetpack-compose-recomposition.md): Compose is fun. I do get the feeling that there are quite a few “gotchas” when working with it, though.
- [Working with Compose Navigation, Dagger2, ViewModels.. oh my 🩻](https://www.costafotiadis.com/working-with-compose-navigation-dagger2-viewmodels-oh-my.md): Dagger-Hilt is fine and all.
- [Gotchas in Per-App Language Preferences and Android Locale](https://www.costafotiadis.com/gotchas-in-per-app-language-preferences-and-android-locale.md): These are not the droids you are looking for
- [Android Shorts 🩳: Testing Toasts with Espresso](https://www.costafotiadis.com/android-shorts-testing-toasts-with-espresso.md): On a long enough timeline, every test is a flaky test
- [Android Shorts 🩳: Custom lint rules](https://www.costafotiadis.com/android-shorts-custom-lint-rules.md): Wot I think
- [Android Shorts 🩳: WorkManager — Observing a WorkRequest (level paranoid)](https://www.costafotiadis.com/android-shorts-workmanager-observing-a-workrequest-level-paranoid.md): (see how-to-hilt+workmanager in the previous episode)
- [Android Shorts (🩳): WorkManager + Hilt](https://www.costafotiadis.com/android-shorts-workmanager-hilt.md): Make it easy to inject the singleton WorkManager instance anywhere.

## 2020

- [StateFlow, SharedFlow and the secret bus 🚌](https://www.costafotiadis.com/stateflow-sharedflow-and-the-secret-bus.md): Kotlin Coroutines 1.4 is here, as is another chance to stave off boredom.
- [👏Kotlin (over) Flow review 👏](https://www.costafotiadis.com/kotlin-over-flow-review.md): We are hitting flow levels that shouldn’t be possible
- [👏 ViewModel Saved State Review 👏](https://www.costafotiadis.com/viewmodel-saved-state-review.md): 🤖::execute order process death::🤖
- [Exercises in futility: Unit-testing LiveData, ViewModels and Coroutines](https://www.costafotiadis.com/exercises-in-futility-unit-testing-livedata-viewmodels-and-coroutines.md): This is part of a series head-scratching my way into coroutines. It can be read as a standalone although you might be missing out on some spicy memes here and here.
- [On testing — Kotlin Coroutines](https://www.costafotiadis.com/on-testing-kotlin-coroutines.md): Or how to pretend you know what you are doing on pull requests
- [👏👏 Kotlin Coroutines Review 👏👏](https://www.costafotiadis.com/kotlin-coroutines-review.md): A callback story

## 2019

- [Retrofit review : The sequel](https://www.costafotiadis.com/retrofit-re-review-the-clappening.md): Or how to use MVVM to get some cats so your code is not all over the place
- [👏👏 Glide review 👏👏](https://www.costafotiadis.com/glide-review.md): Or how to load images from the internets when you don’t know what you are doing
- [👏👏 Retrofit review 👏👏](https://www.costafotiadis.com/retrofit-review.md): Or how to use Kotlin + RxJava to get some cats
- [Using Android RecyclerView in 2019](https://www.costafotiadis.com/using-android-recyclerview-in-2019.md): This is a kind-of a sequel of the “Android RxJava in 5 minutes” article I wrote a while back and has stuff that you might find useful for…
- [Android RxJava in 5 minutes](https://www.costafotiadis.com/android-rxjava-in-5-minutes.md): These go(o)gles do noffing!

## Pages

- [Elsewhere](https://www.costafotiadis.com/elsewhere.md)
- [Projects](https://www.costafotiadis.com/projects.md)
- [Resume](https://www.costafotiadis.com/resume.md)
- [Me](https://www.costafotiadis.com/me.md)

## Things

- [Things](https://www.costafotiadis.com/things.md): Links, ideas, notes, photos and videos I send myself from my phone. Newest first.

## Board

- [Board](https://www.costafotiadis.com/board.md): stuff im working on. The Markdown is as of the last deploy; the page itself is live.

## Lab

Small web experiments. Some of them are strangely addictive. https://www.costafotiadis.com/lab/

- [Black Hole](https://www.costafotiadis.com/lab/blackhole/): A black hole and its accretion disk, ray-traced in a shader. Light bends around it, so the far side of the disk shows above and below the hole. Drag to orbit, scroll or pinch to zoom.
- [Theremin](https://www.costafotiadis.com/lab/theremin/): Wave your cursor to play. Left–right is pitch, up–down is volume.
- [Nebula](https://www.costafotiadis.com/lab/nebula/): A swirling particle galaxy. Move to stir it, hold to pull it in.
- [Inappropriate Clippy](https://www.costafotiadis.com/lab/clippy/): The Omarchy bar plugin, in a browser. He walks, mouths off, and you can slap him, drag him around or fling him off the end of the bar.
- [Harmonograph](https://www.costafotiadis.com/lab/harmonograph/): Pendulum drawings from four decaying sine waves. Click for a new one.
- [Murmuration](https://www.costafotiadis.com/lab/murmuration/): A flock of boids. Hover to draw them in, hold to scatter.
- [Sandbox](https://www.costafotiadis.com/lab/sandbox/): Falling-sand toy. Draw elements and let them interact — water flows, plants grow, fire burns.
- [Bounce](https://www.costafotiadis.com/lab/bounce/): Canvas balls with lazy physics. Click to add more.
- [Infinite Drive](https://www.costafotiadis.com/lab/drive/): Endless synthwave road trip. Arrow keys or A/D to steer.
- [Flyover](https://www.costafotiadis.com/lab/flyover/): Endless low-poly terrain through day and night. Steer with the cursor, hold to speed up.
