Lauri Koskela

Blog posts

Loopback UDP broadcasts and multiple listeners

October 19, 2025 - 707 words - 4 mins

I ran into a situation where multiple processes needed to receive all UDP datagrams sent from a service running on the same host. The sender already set SO_BROADCAST, and I thought setting the target host to 127.255.255.255 should be enough to make things work. And of course, the clients must use the same host and specify SO_REUSEADDR so that they receive the packets. But the reason why this works is more interesting.

read more

Enable Jetpack Compose Accessibility When Collecting Baseline Profiles

May 01, 2025 - 718 words - 4 mins

Here's a small workaround that can be used to make Android Baseline Profile collection work better with Jetpack Compose apps. For some reason, Compose apps (at least with Compose version 1.8.0) don't emit accessibility events when running Macrobenchmarks (for example, when generating baseline profiles). With this workaround, they can be forced to be enabled, which makes a bunch of UI Automator functions work.

read more

Why is Bitwarden returning 503s to my Windows app?

September 02, 2023 - 3581 words - 18 mins

For a few years now, I've been developing a TUI Bitwarden client app called Wden. While Bitwarden does not have a stable API for writing alternative clients, the APIs for the official clients have been pretty well documented by third parties. It's not too difficult to write a client against those, but it will occasionally break when Bitwarden makes changes to their servers.

Recently, I ran against a peculiar issue where Bitwarden started to consistently return errors to Wden, but only when running on Windows. There seemed to be no good explanation for this - the functionality is completely identical between platforms. I found the whole thing quite intriguing and I decided to write something about how I debugged the issue and worked around it.

read more