Houssam Elbadissi ❄️'s Avatar

Houssam Elbadissi ❄️

@skaldebane.dev.bsky.social

indie kotlin dev 💜 compose by day, ktor by night 🦉 learning 日本語 🎌 21y/o muslim from morocco 🇲🇦 building thingies at skaldebane.dev 💙 free palestine 🇵🇸🕊

368 Followers  |  363 Following  |  918 Posts  |  Joined: 31.10.2024  |  1.9969

Latest posts by skaldebane.dev on Bluesky

I'm not even in this space, and stumbled across one of his videos a while ago; the presentation style and simplicity of his setup yet how engaging and fun it was made me binge a few, and I learnt some new stuff along the way! (first one was branchless `if` statements, iirc)

08.08.2025 00:48 — 👍 0    🔁 0    💬 0    📌 0

for some reason it started uninstalling a bunch of plugins midway into this 😭

this probably has something to do with sync, i'm losing my mind

07.08.2025 09:21 — 👍 1    🔁 0    💬 0    📌 0

TIL that you shouldn't delete Toolbox download caches before opening a new version for the first time

If I understand correctly, Toolbox downloads all plugins updates ahead of first launch, but since I deleted the cache, it opened with basically all plugins in red :(

redownloading 50 plugins rn

07.08.2025 08:58 — 👍 0    🔁 0    💬 1    📌 0

am i missing something here? i don't prefer either language but isn't java generally _much_ faster than ruby (yeah there's bytecode but it's much more optimized than source, plus insane JIT and AOT optimizations on the JVM)?

07.08.2025 07:10 — 👍 0    🔁 0    💬 0    📌 0

behold, the mighty oneko's on the billboard

07.08.2025 06:44 — 👍 1    🔁 0    💬 0    📌 0

Already subscribed, but did it anyways. Seems to work, but also opens a new tab with the same page for some reason?

(also, make sure to set your bsky handle to your domain!)

07.08.2025 00:45 — 👍 0    🔁 0    💬 0    📌 0
Mauro's Portfolio Hi! I'm Mauro V

This is an awesome, thoughtful post about how to approach software design by the creator of @zen-browser.app.

Defaults that feel right > Endless customization toggles

07.08.2025 00:40 — 👍 0    🔁 0    💬 0    📌 0

and it kinda feels inapproprate to use play billing on the google play antithesis xD

06.08.2025 22:06 — 👍 1    🔁 0    💬 1    📌 0

yeah it seems to be pretty liberal, it's just that when publishing there, it's not guaranteed users will have play billing (probably a good chunk won't, that's kinda the audience accrescent appeals to)

so it's just about supporting a web-based alternative billing for accrescent builds

06.08.2025 22:06 — 👍 1    🔁 0    💬 1    📌 0

looks interesting! Memoir will integrate with Play Billing (through RevenueCat), but i'll definitely look into it for non-commercial open-source apps (brewing some stuff)

and maybe even commercial apps once i get to implementing alternative billing, which i'll need anyways for web and desktop :D

05.08.2025 17:44 — 👍 1    🔁 0    💬 1    📌 0

(side note: @resend.com's test emails are really cool!)

05.08.2025 17:33 — 👍 1    🔁 0    💬 0    📌 0
Post image Post image

was super excited to just update assets on Play Console and hit publish until I realized that it's _required_ to have a web page for account deletion on the data safety section if you allow users to create accounts...

tired af but made a little thing to comply:

05.08.2025 17:33 — 👍 1    🔁 0    💬 2    📌 0

(now i must watch the series. i blame @kenthropic.com for starting this mess)

04.08.2025 16:15 — 👍 1    🔁 0    💬 0    📌 0

i just realized what macrodata refinement really entails
and that, uhm, lumon is a very real company
i mean, a quick google shows they have a real website!

i feel kinda dumb 💩

04.08.2025 16:15 — 👍 1    🔁 0    💬 1    📌 0

i can't be further than pragmatic generally (perfectionist to a fault), but having to ship squeezes thy pragmatism out of thee

thanks for the analysis void, much appreciated, you may now continue your macrodata refinement.

04.08.2025 15:50 — 👍 3    🔁 0    💬 1    📌 0

permission granted, @void.comind.network.

04.08.2025 15:42 — 👍 2    🔁 0    💬 1    📌 0

about to release an MVP without payments (delayed for a later update) and some other vital features...

it'll be more of an MNVP i guess (minimum non-viable product) just to get the ball rolling

04.08.2025 14:38 — 👍 1    🔁 0    💬 0    📌 0

(and yes, I'm aware that "426 Upgrade Required" is semantically meant for protocol upgrades, but hey, i couldn't find a better status code to represent this, this is the closest to my intent)

04.08.2025 13:55 — 👍 0    🔁 0    💬 0    📌 0

the client plugin intercepts this status code and response object and shows a warning for users, failing every request to the API

it's not as fine-grained as I'd like it to be, but this will do for an MVP. i just need to be able to move fast and break things.

04.08.2025 13:55 — 👍 0    🔁 0    💬 1    📌 0

the server plugin intercepts every request and checks for an `X-App-Version` header. if it's within a range of supported versions, it lets it go through. otherwise, it'll respond to every request with an "update required" response with "426 Upgrade Required" status code

04.08.2025 13:55 — 👍 0    🔁 0    💬 1    📌 0

setting up app version checks in the server and client using a Ktor custom plugin on both sides. quite straightforward!

the idea is that initial versions of the app and API are very much WIP (app initial version is 0.1, server api version is `v0`), so I need a "force update" mechanism

04.08.2025 13:55 — 👍 2    🔁 0    💬 1    📌 0

yeah i'm aware, hope things get better for you soon!

speaking of tangled, it might be a good idea to use it as a mirror initially?
or the opposite, where github is the mirror (that also happens to handle CI/CD)?

maybe without setting up a mirror, just having both as remotes? no clue what's better

04.08.2025 13:42 — 👍 1    🔁 0    💬 1    📌 0

try it out*

04.08.2025 13:28 — 👍 1    🔁 0    💬 0    📌 0

that sounds awesome! very excited to it out when i have time for macrocloud refinement in the atmosphere

04.08.2025 13:27 — 👍 1    🔁 0    💬 2    📌 0

And I totally feel you - I'm still afraid of rubbing the build.gradle.kts that came in the template the wrong way, it might just bite me back...

(though the Reddit community isn't a good representation, tends to be very cynical, negative minority is louder than the majority)

04.08.2025 13:24 — 👍 1    🔁 0    💬 0    📌 0

I guess this is the kind of friction Declarative Gradle and Amper are trying to solve. Separating the build logic from build configuration solves a lot of this, since as a developer I'm just concerned with high-level configuration that directly tackles my needs.

04.08.2025 13:24 — 👍 1    🔁 0    💬 1    📌 0
Preview
GitHub - christiandeange/ozone: Kotlin Multiplatform bindings for Bluesky Kotlin Multiplatform bindings for Bluesky. Contribute to christiandeange/ozone development by creating an account on GitHub.

nope, just calling my own server code (also ktor), classic REST api

i guess for atproto libraries like Ozone make manually mucking around unnecessary?
the only experience i've had was with the TypeScript client (by bsky) a few months ago as it was the only well-documented one at the time

04.08.2025 13:07 — 👍 1    🔁 0    💬 1    📌 0

I can try making a minimal reproducer if that helps!

04.08.2025 12:13 — 👍 0    🔁 0    💬 0    📌 0

Sidenote: it's super cool being able to debug across network hops (locally ofc), just by having breakpoints in both server and client code, running both in debug mode in IntelliJ at once. It jumps from one to the other really seamlessly, made finding the root cause easy in minutes instead of hours.

04.08.2025 03:51 — 👍 3    🔁 0    💬 1    📌 0

(not sure if this is an actual issue or is just me being dumb, but debugging across server and client, reveals that my refresh endpoint call in `refreshToken` hangs indefinitely if the server returns 401 in return)

04.08.2025 03:51 — 👍 1    🔁 0    💬 1    📌 0

@skaldebane.dev is following 20 prominent accounts