My private board now feeds my public Workbench
A Promote button on my private FOCUS board copies a card into a Workbench draft on this blog. Sharing a note now costs an edit instead of a deploy, and nothing goes public until I publish it.
Field Notes
Notes on event-driven Java, Spring Boot, Kafka, and secure systems for regulated banking.
A Promote button on my private FOCUS board copies a card into a Workbench draft on this blog. Sharing a note now costs an edit instead of a deploy, and nothing goes public until I publish it.
Traces, Tempo and the LGTM stack
I added Grafana's all-in-one otel-lgtm image next to this site's Scala/Play backend: an OpenTelemetry Java agent and Traefik send OTLP to it, Keycloak gates Grafana to one email, and the collector strips query strings. Here is the setup, the guardrails, and what the first traces showed.
Scala and the JVM · Part 19
A sealed trait removes impossible states from a model, but five details decide whether it holds: constructors, exhaustivity warnings, wildcards, Scala 2 inference and secrets in toString. I compiled each one on Scala 2.13.18.
Learning enumeratum · Part 3
CirceEnum and IntCirceEnum give every enum a JSON codec that follows entryName or value. Decoding is strict by default, and here's how the failures look and how to relax them on purpose.
Learning enumeratum · Part 2
Overriding entryName for legacy strings, naming mixins, enum entries that carry data, and IntEnum/StringEnum, where duplicate codes fail to compile.
Learning enumeratum · Part 1
Three ways to model an enum in Scala 2.13 (Enumeration, sealed traits, and enumeratum), with runnable code, and why my team settled on enumeratum.
I ran Anthropic's code-modernization plugin for Claude Code headless on a 2006-style billing batch I had booby-trapped. It caught every trap, found four problems I hadn't planted, and still only called its own proof "partly proven".
Cats Core · Part 7
In Part 4 I wrote map[A, B](fa: Quote[A])(f: A => B) and moved on, but the letters kept slowing me down. A short break from new type classes: two rules that decode most Cats signatures, and the one name that breaks them.
The second release of my free CV builder adds several CVs per browser, a CV review, job-ad tailoring, fit-to-one-page, Word export, LinkedIn import and share links. All of it runs in the browser, with no account and no server-side data.
On a Claude Code subscription the main conversation caches for an hour, but subagents get five minutes. Here is when that costs you a full prefix rewrite, and how to raise it.