New article!
Did you know #Kotlin has mandatory varargs?
ivan.canet.dev/blog/2026/03...
@ivcanet
Kotlin developer & teacher @ 4SH, learn more about me: ivan.canet.dev Open source at https://opensavvy.dev • @opensavvy.techhub.social.ap.brid.gy Organizing the Kotlin Bordeaux User Group at https://bordeauxkt.io
New article!
Did you know #Kotlin has mandatory varargs?
ivan.canet.dev/blog/2026/03...
Having talked to a few teachers, the secret seems to be ‘have all the grades be based on oral exams’.
Maybe they can't write the code, but if they can understand what the LLM wrote, that's still a skill.
Technically not, but it's very useful as ‘recursive navigate to usage’
My favorite is ‘data flow to here’ which isn't even in this popup
(note also that in the Kotlin version, the argument to the lambda is implicit for these methods, this is another language feature: these are extension lambdas, not regular ones, which implicitly expose the instance they're called on)
Together, these features allow very expressive and concise DSLs
In Rust, this would look like
let retry = pipeline.job(build, |job| {
job.script(|script| {
script.shell("...");
});
job.retry(2, |reason| {
reason.onExitCode(127);
});
});
(Sorry if it's not exact, I haven't written Rust in a while)
// Retry with when type val retryWithWhen by job(stage = build) { script { shell("echo 'Retry with when type test'") } retry(2) { on(RetryCause.RunnerSystemFailure) } } // Retry with multiple when types val retryWithMultipleWhen by job(stage = build) { script { shell("echo 'Retry with multiple when types test'") } retry(2) { on(RetryCause.RunnerSystemFailure) on(RetryCause.ApiFailure) } }
Other people have already answered the questions, but I wanted to share an example of how it looks like in practice
Each call is a function + the lambda it receives, it's very convenient to concisely describe complex structures (here, GitLab CI config instead of YAML)
Like, Git isn't a blockchain, but it's decentralized and there's an append-only ledger, so if I were mandated to use blockchain tools just because it's the hype, then I'd claim Git counts
I wish we had nice well-defined terms to talk about stuff, but I also much prefer branding a feature that works as the buzzword-of-the-moment than actually having it be rewritten as a worse version using an unrelated tech just because it's in the hyper circle
It is also a way of riding the hype. If rebranding an existing feature as ‘AI’ even though it's just a basic predictive algorithm makes it sell more and makes the clients happy...
NextCloud notification with 3 quick actions: cancel, cancel & cancel.
Okayyy, I get it
Challenge for people who believe Claude *is* conscious and use it anyway: Explain how you’re not a slaver.
I'm nominated in ‘online presence’, vote for me!
Un mail de la BNP Paribas dont le sujet est "Ivan Canet, je vous aime… et votre argent encore plus"
Ils ont pété un câble…
(oui c'est un mail officiel)
again? :/
Yes, 100%
Oh yes you could. Have random ‘I'm adult’ paper tokens that you can buy at liquor stores or other places that already age-check.
Protection for children. Full anonymity. It can be done.
...I *hope* they would find a better name
I'm sure with hindsight they wouldn't name them this way 😅
Are you confused by Gradle terminology? What's a module, a configuration, a build, a project? Unless you're deep into Gradle, they probably aren't what you think.
I wrote an article to organize all of that → ivan.canet.dev/blog/2026/03...
Idea: halfway through your integration tests, switch to the new version, see what happens.
Just a heuristic, not as powerful as what the article describes, but it could be quite simple to set up?
This is a *very* interesting read on managing new versions of existing deployments.
www.iankduncan.com/engineering/...
Though, it won't be a big change on behavior, since value classes are moving towards doing what we use data classes for.
The Kotlin team is asking for your thoughts on what will probably become the roadmap for the next few years → github.com/Kotlin/KEEP/...
This may look like a small feature on the outside, but it will radically change how we write #Kotlin code.
Once this is implemented fully, almost all existing data classes will be replaced by value classes. This may be the most impactful change in overall code style in a while!
This is a screenshot from the Cucumber test framework titled "Sharing state between scenarios", with the content "Don't do it."
Nice xD
I'm curious, how are people positioned? Is it mainly based on follows?
Have you used KtMongo? Are you planning to?
I'd love your thoughts → gitlab.com/opensavvy/kt...
It's not even fully rolled out yet!