Shawn Rainbow's Avatar

Shawn Rainbow

@shawnrainbow

Android Dev, Kotlin Multiplatform Enthusiast, Math PhD

22
Followers
122
Following
48
Posts
22.11.2024
Joined
Posts Following

Latest posts by Shawn Rainbow @shawnrainbow

For gesture navigation, if not testing with it, there might be interactive components that interfere with the gestures - for example, a slider or range slider, or a component with swipe-to-dismiss actions.

#AndroidDev #Android #AndroidAccessibility

11.12.2025 06:23 πŸ‘ 2 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0

Compose (or Android) tip: Test your app with both button and gesture navigation to avoid breaking the user experience.

When not testing with button navigation, it's easy to forget to leave enough padding for the buttons, which, in turn, can make some elements unusable at the bottom of the screen.

11.12.2025 06:23 πŸ‘ 4 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0
Video thumbnail

Maybe I'm missing something, but does anybody actually still use the standard text UI feature of "click & drag selected text to cut & paste it somewhere else"?
I've done it thousands of times and literally every single one has been accidental.

09.12.2025 01:55 πŸ‘ 53 πŸ” 1 πŸ’¬ 9 πŸ“Œ 0
Post image

You shared that androidx libraries are constantly in alphas and we listened. In the past two years while adding a ton of new libraries we actually increased the percentage of libraries that are complete or actively developed.
The combo of these two groups went from 64% to 76%.
#androidx #androiddev

08.12.2025 22:50 πŸ‘ 23 πŸ” 4 πŸ’¬ 1 πŸ“Œ 0

It's so satisfying to kick the tires on Metro and see that it is, in fact, what I wanted and dreamed of: Anvil with the sucky parts removed

21.11.2025 17:37 πŸ‘ 15 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0

There are a lot of benefits of building for local-first offline-only. Offline apps are severely underrated. You don't need a server for most things (terms might vary; we're building different things, too).

30.10.2025 21:22 πŸ‘ 8 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Preview
Release 2.3.0 Β· google/ksp What's Changed KSP1 has been deprecated #2657 KSP is now independent of Kotlin Versions #2658 Full Changelog: 2.2.20-2.0.4...2.3.0

KSP is now independent of Kotlin versioning!

github.com/google/ksp/r...

25.10.2025 18:45 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Geodesics on spheres are always arcs of great circles. Geodesics on a cylinder can be segments of spirals, though.

Geodesics are (in one definition, at least) the shortest distance paths between two points on a surface.

23.10.2025 07:34 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I personally keep all my app modules together in an app folder (so technically they are submodules of :app), and also stick a kmp :app:shared module in there as the entry point for all of the platforms. Then everything else is just pure kmp modules (no "shared" prefix needed)

22.10.2025 18:08 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

😒

11.10.2025 16:48 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
a checkbox on a website that says "keep me logged in"

a checkbox on a website that says "keep me logged in"

There are three kinds of lies: lies, damned lies, and

29.09.2025 14:42 πŸ‘ 43 πŸ” 8 πŸ’¬ 3 πŸ“Œ 0

Y'all gotta stop buying smart TVs, so they stop making them. There is literally nothing appealing about them.

My TV doesn't show me ads when I'm just turning it on. It can't be ruined by a software update. It turns on and off when I want it to. It immediately responds to all inputs.

24.09.2025 03:56 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I wonder if "Accessibility" would be less of an afterthought, and more people would be interested in it, if we renamed it "Best Practices"

20.09.2025 22:26 πŸ‘ 22 πŸ” 5 πŸ’¬ 3 πŸ“Œ 1
Magic the Gathering card with text "Exquisite Blood. Whenever an opponent loses life, you gain that much life"

Magic the Gathering card with text "Exquisite Blood. Whenever an opponent loses life, you gain that much life"

Magic the Gathering card with text "Sanguine Bond. Whenever you gain life, target opponent loses that much life."

Magic the Gathering card with text "Sanguine Bond. Whenever you gain life, target opponent loses that much life."

The very first infinite combo I discovered on my own while building decks in Magic the Gathering

19.09.2025 20:47 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Which is all to say that @johnoreilly.dev is right here, but it applies 100x more when someone raises an issue about clarity and confusion.

If someone says they don't understand a process, then the documentation of that process needs to be created or updated, etc.

19.09.2025 16:19 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

After thinking about it for another minute or two, I realized he couldn't be wrong. A piece of code is confusing if someone reads it and is confused, which was the case here. Objectively, he had to be right to at least some degree.

19.09.2025 15:57 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Early in my career, I wrote a piece of code that I thought was the most beautiful idiomatic piece of Kotlin code one could write. My manager commented in the code review that it was confusing.

My gut reaction was that he was wrong and probably too entrenched into Java idioms still...

19.09.2025 15:52 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

It always seemed insane to me that I was in the minority in grad school for preferring whiteboards. When I asked people why they preferred chalk, they would often tell me that whiteboards are messy? Like... messier than chalk?

08.09.2025 18:01 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Neat. What defines a "valid" location? Not within a distance of r from any other point?

05.09.2025 19:26 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Model holding a concept version of the Project Ara phone. It features a number of modules in colored plastic or metal, a camera, and a simple display screen for the back.

Model holding a concept version of the Project Ara phone. It features a number of modules in colored plastic or metal, a camera, and a simple display screen for the back.

I'm sad that Project Ara never came to be. The idea of modularity for a phone was a cool idea. Definitely get why it never went anywhere, but dang it would have been cool.

The idea was you buy a phone chassis and then modules that give features, storage, extra battery, etc.

31.08.2025 15:01 πŸ‘ 125 πŸ” 9 πŸ’¬ 13 πŸ“Œ 0

Birth cerificate: born Jan 01, 1970 at midnight on null island to parents "" and "".

29.08.2025 15:54 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Arguments and return values of your service methods should be models and not services.

Constructor injected objects should be services (most of the time).

The "glue" in this article is going to include the things that do actually take services as arguments/return values (like your DI framework).

23.08.2025 09:12 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Services/injectables should have their own unit tests.

Models/newables are tested implicitly by the unit tests of the services they're used in, and thus shouldn't need their own unit tests.

23.08.2025 09:09 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Knowing this difference is important if you are trying to write clean testable code w/ dependency injection:

Services/injectables should always be injected as a dependency where they are used and you should use test doubles where they are injected.

Models/newables should never use test doubles

23.08.2025 09:04 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

To add to the nomenclature of this short article:

I have also seen "value classes" defined as "models", "entities", and "newables"

"Service objects" would equivalently be "services" or "injectables"

23.08.2025 09:01 πŸ‘ 0 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

Lol, it's me at a punk show.

23.08.2025 08:54 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

That's a really interesting bug. I don't think I fully understand why the objects aren't instantiated when the companion object is instantiated, though. Seems like a language bug rather than a dev-side bug to me.

21.08.2025 17:16 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

The biggest trick the devil ever pulled is to call LLMs β€œartificial intelligence.”

19.08.2025 15:43 πŸ‘ 1186 πŸ” 199 πŸ’¬ 37 πŸ“Œ 8
Preview
Email is Easy Everyone knows what an email address is, right?

Email addresses are very simple, and you will score highly in this quiz.

e-mail.wtf

17.08.2025 17:15 πŸ‘ 278 πŸ” 129 πŸ’¬ 40 πŸ“Œ 52