FastAPI for Spring developers: the boilerplate that isn't there
I opened a FastAPI file as a Spring engineer and kept noticing what wasn't there: no MapStruct mapper, no @Valid, no springdoc. The type signature had already done the work.
Tag
I opened a FastAPI file as a Spring engineer and kept noticing what wasn't there: no MapStruct mapper, no @Valid, no springdoc. The type signature had already done the work.
The second half of RAG: retrieve the right chunks, ground the prompt in them, and let DeepSeek answer - or honestly say 'I don't know' when the context is silent.
RAG has two halves, and only one uses a language model. A walkthrough of the other one - read, chunk, embed, index - built with Spring AI, pgvector and Ollama.
Security and privacy, in practice
I froze the redirect Spring sends you through and read it parameter by parameter. Three lookalike strings turned out to close three different attacks, and PKCE was already on without me asking for it.
Putting a self-hosted identity server in front of LinkedIn deleted 240 lines of workaround and turned PKCE back on. It also handed out a privilege escalation — because the claim never changed, but the trust underneath it did.
What @TransactionalEventListener actually fires on commit, on rollback, and on neither -- plus a write inside AFTER_COMMIT that survives or vanishes depending on your connection pool. Measured in a playground, not quoted from the Javadoc.
Spring's plain @EventListener runs on your thread, inside your transaction, before your next line — and a chained event is fully handled before the original finishes. Everything here was verified by running it, not by reading the reference page.
A fire-and-forget @Async listener turns every SMTP hiccup into a lost message. Here is how @TransactionalEventListener plus an event publication table makes it durable — and the four ways that setup silently does nothing.
Building agents on the JVM with Embabel · Part 10
When an Embabel action needs two objects of the same type, binding becomes two declarations that must agree — and nothing cross-checks them. Get them out of step and you get a startup exception, an unreachable goal, or a confident wrong answer, depending on which half you forgot.
Building agents on the JVM with Embabel · Part 9
Ask the same question twice in one session and the planner drops a step. Not a cache — a consequence of A* refusing to schedule an action whose output is already on the blackboard, for better and for worse.