In the early morning light, on the second day of February, the Guardians of the Stages and the Squires of the Registration gathered at the building known as Waterfront to aid the invited Norns of the order of Urd, Verdandi, and Skuld to, for the 20th time, tell the stories of the past, the present and the future.
They had obediently answered the call of the “gods”, Mattias, Helena, Jeanne and me, to once again make sure that Jfokus runs smoothly.
This is the story of the 20th Jfokus, as told by the bards.
Monday (University Day)
It started with a smaller gathering of those who really wanted to deep-dive into the well of knowledge. Monday presents workshops and deep dives, and after I had made sure that all the Guardians of the Stages, also known as Stage Hosts, knew what needed to be done, I could join many of the sessions.
Prompt Injection — Brian Vermeer
First out was Brian Vermeer who, for an hour and a half, showed us how to use different kinds of Prompt Injections to fool AIs. It builds a lot on the work of Johann Rehberger’s talk at Black Hat 2024 and NetworkChuck with Jason Haddix. Scary stuff delivered in a very entertaining way.
Did you really get better?
Eric Deandrea, Oleg Šelajev
The next session I got to see was with Eric and Oleg. They are both high-energy talkers and speed demo‑coders. My key takeaways from this talk are to focus on how we measure improvement (productivity vs. quality vs. DX) and that “stupidity will always find a way”.
After a really nice fish for lunch, the sessions continued in the afternoon. I popped in and out of several sessions, did some of the workshop tasks, and then went to see the last session in C1.
Building AI agents — James Ward, Josh Long
The two masters of live coding. You don’t even need to be into coding; you can just sit and enjoy the show. In 90 minutes, J&J built a working AI agent using Spring AI.
Tuesday (Main conference)
As has been my task over the last years, I am managing the A4 overflow room for the start of the main conference. I really would have liked to see this live, with an awesome fire show to kick everything off. You could almost feel the heat in the live stream, so it must have been even better live in A1.
Keynote: The Best Simple System for Now — Daniel Terhorst‑North
I have had the pleasure to know Dan for many years now, and I think he is the source of most of the smart things I say. This year, I got two good things that I will use really soon.
VESPA
- Visualize
- Eliminate
- Simplify
- Practice
- Automate
CUPID
- Composable
- Unix philosophy
- Predictable
- Idiomatic
- Domain-based
Java to infinity and beyond — Sharat Chander
Not a technical talk at all. Mostly about the community process and what you can do.
Tame your Llama, run AI in Java — Lutske De Leeuw
A new speaker for me who delivered a very good talk on how to run your models locally. We had several discussions during the Speakers Conference afterwards.
Agents, Tools, and MCP — Jennifer Reif
Another speaker I had not seen live, but on recordings and in podcasts. If you don’t know about the components that build up the AI world, this is a really good talk to start with.
We then had a 15‑minute quickie.
Help! I’m an Architect for an Open‑Source Project — Andrea Berglund
I have really looked forward to Andrea talking. Key takeaways on governance, stakeholder alignment, and sustainable architecture. Watch the talk and comment when you find what patch was made in production during the talk. ;)
Virtual Threads, Structured Concurrency — Balkrishna Rawool
Virtual threads are sort of new in Java. If you are new to them, watch this talk.
Do’s:
- Use virtual threads for I/O-bound workloads (network calls, database queries)
- Leverage structured concurrency for better error handling and cancellation
- Create many virtual threads without fear of resource exhaustion
- Migrate traditional thread-pool code to virtual threads
Don’ts:
- Don’t use virtual threads for CPU-bound tasks (they won’t help)
- Avoid pinning virtual threads to carrier threads with heavy synchronization
- Don’t mix legacy blocking code with structured concurrency carelessly
Where it shines:
- High-concurrency server applications (handling thousands of connections)
- Microservices with numerous downstream calls
- Classic blocking I/O workloads that previously required reactive programming
Writing GPU‑ready AI — Lize Raes, Ana Maria Mihalceanu
This was the opposite of Sharat’s talk. This was TECHNICAL. I was amazed at how Lize and Ana could explain really hard technical details about how the GPU works and how Project Babylon will enable the JVM to talk directly to the GPU.
And then it was time for the Jfokus party. Good food, nice drinks, and excellent talks a bit too late in the evening.
Dylan Beattie is not only a rock star talker; he really knows how to play the guitar and sing songs about software development.
Wednesday
The second conference day kicked off with
Full‑stack web apps, 100% Java — Marcus Hellberg
A bit of commercial information from our friends from Finland, Vaadin. I really like the way they make it possible to do nice UIs in pure Java and the way it makes difficult things, like authorization and authentication, easier. If I have a say when building the administrative parts of a system, I tend to use Vaadin.
Level up your Java Streams — Hinse ter Schuur
After making UI, it was time for streams. Hinse ter Schuur took us on a tour of how Stream Gatherers work. Take a look at https://www.youtube.com/watch?v=VbB3ZbtqMeY if you want a pedagogical overview on how Gatherers work in Java.
Best practices and readability tips for working with Java Streams:
- Use meaningful variable names in lambda expressions
- Avoid overly complex chains; break them into steps when readability suffers
- Prefer method references over lambdas when available
- Consider intermediate collection for debugging complex pipelines
- Use peek() sparingly for debugging, remove in production
Strangling the dragon — Daniel Raniz
Is Yggdrasil not an ash but in fact a Strangling Fig tree? I don’t know. Raniz showed us how to use this pattern to move from a legacy system to something new.
The psychology of code — Victor Rentea
This talk is hard to summarize. Just watch it. Victor ran on the stage for 50 minutes, delivering one smart thing after another, with sound effects.
What’s your favourite number of threads — Ryan Healey
A Quickie on how to think around threads. Spoiler: the answer is zero. :D
And by that, the 20th edition was almost over. Just the final words from Mattias and Jeanne, with all speakers, stage hosts and volunteers on stage, throwing out a lot of beanies and doing the Menti‑voting.
The closing keynote was delivered by Stephen and Cassandra Chin. There were some nice things that could be picked up from this talk.
AI‑First learning — Stephen and Cassandra Chin
Speakers Conference
On Thursday morning, we took about 30 of the speakers to Djurönäset for the Speakers Conference/Unconference. It is held in an Open Space fashion, but there is this agreement that what is being talked about at these gatherings stays in the group. I got highly energized by this and got to meet one of my long‑time idols, Cay Horstmann. His books Core Java, volumes 1 and 2, are still on my bookshelf and I use them from time to time.
Jfokus 2027
Next year, week 6 will be starting on February 8th, so that is when we kick off the 21st edition. Whether I will attend, speak or be in the program committee next year, or be replaced by an AI, who knows.
Links
- All recordings and slides: https://www.jfokus.se/schedule.html
The hero images are from the Jfokus site.

