Jackson 3 Is the Migration Inside Your Spring Boot 4 Migration

You migrated to Spring Boot 4. The app boots. Then a RestClient call starts blowing up on payloads that carry explicit nulls for primitive fields — even though your ObjectMapper config disables FAIL_ON_NULL_FOR_PRIMITIVES (your clients send those nulls; Jackson 2 let them through). You stare at the config bean. It’s right there. It’s also completely ignored — and Jackson 3 flips that feature to fail-by-default, so the new default silently takes over. ...

2026-10-10 · 7 min · Ramesh

Replace Rocket Money: Self-Host Wallos and Audit Every Subscription for $0

Quick audit: Netflix, Spotify, iCloud, GitHub Copilot, that domain you meant to cancel, the streaming service you opened twice. Plenty of households report losing $200+/year to subscriptions they forgot about — and the apps that promise to find them want your bank login and $4–12/month for the privilege. Wallos (ellite/wallos, GPL-3.0) is the self-hosted answer: a subscription tracker in one Docker container. Manual entry instead of bank scraping — which is a feature, not a limitation: nothing leaves your hardware, and typing in each subscription is exactly the spending-awareness exercise. Dashboard, statistics, renewal notifications, multi-currency, household members. Let’s put it on the NAS. ...

2026-10-10 · 5 min · Ramesh

The Two-Pointer Playbook: 5 Patterns, One Technique, Almost Zero Extra Space

Two pointers is the highest-ROI technique in coding interviews. The entire playbook is one idea: two indices walk through the data, and at each step a decision rule tells you which one moves. No extra arrays — O(1) extra space in nearly every pattern, usually O(n) time. Interviewers love it because it tests whether you can discard search space, not just whether you can code. Five patterns cover nearly every two-pointer question you’ll meet. Learn the decision rule for each, not just the code. (One honest exception up front: the sliding-window pattern trades O(alphabet) space for its single pass — the cheat sheet says so. Everything else is O(1).) ...

2026-10-09 · 7 min · Ramesh

Structured Concurrency in Java: What Virtual Threads Didn't Fix (JEP 533, JDK 27)

Virtual threads (final since JDK 21) made blocking I/O cheap. But cheap threads didn’t fix the hard part: when you fan out to five subtasks and one fails, who cancels the other four? With ExecutorService + Future, the answer is “you, manually, and you’ll get it wrong.” That failure mode — leaked threads, swallowed errors, unobserved work — is what structured concurrency exists to kill. One warning before the code: this API is still moving. Everything below is verified against JEP 533, the seventh preview, targeting JDK 27 — and most blog examples you’ll find online show the obsolete API. Get the status table right first, then the code. ...

2026-10-08 · 8 min · Ramesh

Externalized Configuration in Spring Boot 4: Change a Property Without Restarting the Service

It’s 3 AM and the payment provider is timing out. The fix is one property: raise payments.timeout from 5s to 15s until their incident clears. But that property lives in application.yml, baked into the jar, deployed to twelve instances. So you rebuild, push, and roll twelve restarts — for a value that isn’t code. Externalized configuration is the pattern that ends this ritual: configuration lives outside the deployable artifact, in one versioned place, and services pick it up at startup — or at runtime, without restarting. Spring Cloud Config is the canonical Spring implementation, and it pairs with the config-data import that replaced the old bootstrap.yml setup back in Boot 2.4. ...

2026-10-07 · 10 min · Ramesh