Anton Sviridov
indoorvivants.com
Anton Sviridov
@indoorvivants.com
I keep a detailed account of my various projects over at https://blog.indoorvivants.com/ and specifically the summary page: https://blog.indoorvivants.com/projects
All the annotations are optional :P You can have a super terse definition.

In my current experience it helps me throw a CLI config into an existing service in ~0 time (e.g. set number of workers, modify port/host, etc.), so I try to minimise the LoC-to-result metric.

Good luck with your macros :)
November 14, 2025 at 11:22 AM
I'm a big fan of Decline, but I still think that leaving macro-derived CLIs off the table is incorrect – you can get quite far with enums, case classes, and annotations in small to medium apps. In my projects I use both the raw Decline API and my own derivation mechanism for it.
November 14, 2025 at 9:26 AM
Ugh, I was hoping to avoid learning any new kubernetes concepts for my server
November 13, 2025 at 11:56 AM
There are limits to this of course, but long term committment to a behaviour that is no longer correct/doesn't align with the vision of the interface and its contracts doesn't serve the maintainers or the majority (sic!) of users
November 3, 2025 at 2:02 PM
I think it depends what you define as compatibility (and IMO it shouldn't be an all encompassing "this will never change promise"). In my area where compatibility is defined by binary and syntactic vectors, a prominent maintainer responded to exactly such a question: github.com/typelevel/ca...
isn't 3.5.0 `async` a breaking API change? · typelevel cats-effect · Discussion #3621
@djspiewak, please help us to understand, why async changes didn't lead to major version bump? If I understood correctly, now we have to be very careful with any library upgrade as our application ...
github.com
November 3, 2025 at 2:02 PM
But the good thing is that once it works (after trial and error) it continues to work in different environments, and you have a single file with a blueprint of what it takes to build the app on a clean machine.

Using a slightly more portable DSL than GH workflows
October 14, 2025 at 9:29 AM
Probably the most horrific application of this approach is in sn-bindgen-web: github.com/indoorvivant...

Copying individual linux and llvm files, publishing 6 different forks into local cache, installing system AND vcpkg dependencies... It used to build NGINX Unit from source!
sn-bindgen-web/Worker.Dockerfile at main · indoorvivants/sn-bindgen-web
Web interface to sn-bindgen (https://sn-bindgen.indoorvivants.com/) to generate Scala 3 Native bindings to C header files - indoorvivants/sn-bindgen-web
github.com
October 14, 2025 at 9:29 AM
It makes each platform infinitely more boring, thus reducing the desire to check it again and again in doom scrolling death spiral, but after gigabytes of rage bait and O-faced thumbnails I've given up.
June 23, 2025 at 8:57 PM
It's probably the wrong thing to do, but after the horrors of For You page on Twitter I've sworn off any algorithmic timelines.

On Twitter I use addons.mozilla.org/en-GB/firefo..., on Bluesky I just don't open Discover, on Youtube I live on my Subscriptions page.
Control Panel for Twitter – Get this Extension for 🦊 Firefox (en-GB)
Download Control Panel for Twitter for Firefox. Gives you more control over Twitter and adds missing features and UI improvements
addons.mozilla.org
June 23, 2025 at 8:57 PM
Because they had licorice in them, yes.
May 31, 2025 at 7:35 PM
I respect you Noel but honestly, fuck licorice. Fuck it straight to hell.
May 31, 2025 at 6:32 PM
I didn't know anything about Electron or any of its tooling prior to this, and the journey wasn't particularly smooth.

Electron bindings were really the only Scala-specific hurdle, the rest was JS tooling/Electron related.

Very satisfying to get something that finally works!
May 27, 2025 at 2:44 PM