For the longest time, I was a proud member of the “no idea how Modifier ordering works, just try it one way and flip it around if it doesn’t work” club. I’ve read and watched a bunch of content explaining how constraints are propagated up and down the chain of modifiers and the tree of […]
This article documents how I created my own custom screen saver for macOS, built almost entirely in Kotlin, using the powers of Kotlin Multiplatform to target macOS. The inspiration for this project was the KotlinConf 2023 idle video, which had Kotlin’s logos through the ages bouncing around the screen, in the style of classic DVD […]
StateFlow has a bit of a wave–particle duality. On one hand, it’s a data holder which holds a current value. On the other hand, it’s also a Flow, emitting the values it holds over time to its collectors. Importantly, as the type’s documentation states: Updates to the value are always conflated. So a slow collector […]
Another year over, a new one’s almost begun. Here’s a brief summary of what I’ve done in this one. Just like in previous years, this will be a personal ramble. You’ve been warned. For the usual technical content, please tune in next year. Jobby job I spent this calendar year working for Stream full-time. I […]
The opt-in mechanism in Kotlin allows you to mark APIs that should be used carefully – or perhaps not at all. If you mark a declaration (a class, a function, a property, anything really) as opt-in required, using it will produce a warning or error in the code, prompting the user to explicitly opt in […]
While cleaning is traditionally a spring activity, let me invite you to do it at the end of summer this time around. Note: Yes, I’m still using Groovy because I never found a compelling reason to upgrade to Kotlin DSL 🤷 Something I’m quite enthusiastic about is having the simplest and most default Gradle configuration […]
2021-06-17 • Márton Braun So, I got tired of writing code like this. requireArguments().getString(“user_id”)!! And seeing others have to write code like this: val channelType: String = inputData.getString(DATA_CHANNEL_TYPE)!! val channelId: String = inputData.getString(DATA_CHANNEL_ID)!! val messageId: String = inputData.getString(DATA_MESSAGE_ID)!! So I created requireKTX. What does it do? It adds extensions so that the code above becomes […]
This article was originally planned for 🥧 Pi Day, and it clearly ran more than a month late. However, it’s finally complete! Concept This project is once again one of my older projects revived with Jetpack Compose. A couple years ago, I wrote an app that lets you practice and learn the digits of pi […]
It’s been more than 6 years since I wrote an original version of this prime table generator. That was back at the very beginning of my coding career, after learning C and SDL in the first semester of university. An archived version of that original project is available here, including the sources, 120 lines of […]
I’ve seen this fancy clock on Reddit a few days ago. Seeing how I took this week to get started with Jetpack Compose, I figured it would be fun to attempt re-implementing that clock with our new Android UI toolkit. A couple hours ago, I’ve seen that Aurimas Liutikas already created a Compose implementation of […]