Back in June, I wrote about vibe-coding a Philosophy Bac prep app to help my daughter revise her handwritten flashcards before her high school exams.
She passed, and she is now in her first year of medical school.
Med school comes with a new set of study habits.
In several of her courses (cell biology, biochemistry, histology), professors project dense slides packed with Western blots, fluorescence microscopy, and molecular structures, but do not share the slide decks with students.
Seated in a large amphitheater, she does what every student does: she snaps quick photos of the projector screen with her phone, hoping to print them out later as clean study handouts.
Recently, I read Alex Abashev’s article on Foojay.io, My love-hate relationship with Java formatters.
Unlike Go with gofmt or Rust with rustfmt, Java has never shipped a built-in source code formatter in the JDK, leaving teams to argue in pull requests over Checkstyle rules, IntelliJ XML exports, or where the dot goes in a stream pipeline.
In his post, Alex made two points that immediately resonated with me:
Once you experience an opinionated, zero-configuration formatter as a CI gate, you never want to go back to bikeshedding over indentation in code reviews.
AI coding agents make deterministic formatters matter more than ever. Every model and every session has its own idea of code style, regardless of what you write in your AGENTS.md or GEMINI.md files. One agent puts every method parameter on its own line, another crams a whole stream pipeline into a 200-character line, and a third reformats untouched methods, turning a two-line bug fix into a 400-line whitespace diff.
In his article, Alex also introduced open-java-format (GitHub), an open-source fork of palantir-java-format that he created to fix long-standing bugs, modernize the build and IDE tooling, and keep pace with recent JDK releases.
Both upstream targets move fast.
The Gemini Interactions API updates its public OpenAPI specification (interactions.openapi.json) whenever new agent capabilities, voice synthesis options, or webhook parameters land.
Meanwhile, the official Antigravity Python SDK publishes new wheels to PyPI containing updated native Go localharness binaries, compiled Protobuf descriptors, and new Python classes.
Back in March 2025, I added llms.txt and llms-full.txt support to this blog.
The goal was to give Large Language Models a structured index of all my articles, plus a single consolidated file (llms-full.txt) that I could drop into Gemini’s large context window to ask questions across everything I had ever written.
Since then, the way developers and AI tools interact with web content has evolved quite a bit.
Instead of manually uploading a 700k-token file into a chat prompt, we now rely on autonomous coding agents (like Antigravity, Claude Code, GitHub Copilot, Cursor, or OpenCode) that browse the web and fetch individual documentation pages or blog posts on the fly.
Today, I took another step to make this blog friendlier to those agents: every article now has a clean Markdown twin (.md), linked from the HTML header and from llms.txt.
With Devoxx Belgium 2026 just around the corner (October 5–9 at Kinepolis Antwerp), I started looking through the schedule to decide which sessions to attend.
With more than 200 talks spread across 5 days, multiple session formats (Deep Dives, Hands-on Labs, Conference sessions, Tools-in-Action, and BOFs), and up to 8 parallel tracks running at any given time, putting together a cohesive, conflict-free agenda by hand takes quite a bit of clicking back and forth.
Most of our conversations around Large Language Models focus on generative chat: you give the model a prompt, and it outputs a sequence of tokens autoregressively.
Recently, Typesafe AI introduced a different paradigm called System 1 models, embodied by Jev. Rather than generating free-form prose token by token, a Jev-style model acts as a high-speed, deterministic decision maker. Given an input state and a series of discrete questions, it runs in a single forward pass and outputs calibrated probability distributions for each question:
In this post, I will explain what these models offer, what was added to the SDK, and show you a complete, practical example of how to design a custom voice and synthesize speech with it.
A few months ago, I introduced the unofficial Antigravity SDK for Java.
My goal was simple: enable enterprise Java developers to build and run autonomous AI agents in Java, backed by the same engine that powers Google Antigravity.
The ability to run models locally on-device without cloud API dependencies, and without paying token costs for high-frequency tasks, sounded very appealing, right? 😃
I rely on Obsidian daily to capture ideas, interesting links & articles, and research clippings.
Because I alternate between different machines (my work computer and my personal laptop) I need my vault synchronized everywhere.
Instead of third-party cloud folders or paying for cloud sync tiers, I back my vault with a private Git repository (hosted on GitHub) and use the community obsidian-git plugin.
Git gives you full ownership, complete version history, granular diffs, and zero vendor lock-in. But if you simply git init your vault and call it a day, you will quickly run into some issues: