<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Ashish Choudhary</title><description>Ashish Choudhary is a software engineer in Pune who writes code in Java and builds AI-powered applications. He writes books and articles about Java and AI, and makes short films about how software works.</description><link>https://ashish-choudhary.pages.dev/</link><language>en</language><item><title>Notes on this site</title><link>https://ashish-choudhary.pages.dev/writing/notes-on-this-site/</link><guid isPermaLink="true">https://ashish-choudhary.pages.dev/writing/notes-on-this-site/</guid><description>What this site is for, how the cluster at the top works, and where the writing lives.</description><pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate></item><item><title>WebMCP: Give AI Agents Real Tools on Your Website</title><link>https://levelup.gitconnected.com/webmcp-give-ai-agents-real-tools-on-your-website-b98e58c4fbef</link><guid isPermaLink="true">https://levelup.gitconnected.com/webmcp-give-ai-agents-real-tools-on-your-website-b98e58c4fbef</guid><description>What WebMCP is, how it differs from MCP, the API, and what to watch for when you add it to a site.</description><pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Prompt Injection Defense for Java Devs (Part 2): RAG, Egress, and What Comes Next</title><link>https://medium.com/javarevisited/prompt-injection-defense-for-java-devs-part-2-rag-egress-and-what-comes-next-7718e8c40d5a</link><guid isPermaLink="true">https://medium.com/javarevisited/prompt-injection-defense-for-java-devs-part-2-rag-egress-and-what-comes-next-7718e8c40d5a</guid><description>Layers four to six of the defence, for retrieved RAG content and data egress, and where Dual-LLM, CaMeL and Llama Guard fit.</description><pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Value Objects in Java 28: Integer Finally Behaves Like int</title><link>https://medium.com/javarevisited/value-objects-in-java-28-integer-finally-behaves-like-int-2f3562e0a08a</link><guid isPermaLink="true">https://medium.com/javarevisited/value-objects-in-java-28-integer-finally-behaves-like-int-2f3562e0a08a</guid><description>JEP 401 lets classes opt out of identity, so == compares values and the JVM can flatten your objects like primitives.</description><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Prompt Injection Defense for Java Devs (Part 1): Locking Down Inputs, Outputs, and Tools</title><link>https://medium.com/javarevisited/prompt-injection-defense-for-java-devs-part-1-locking-down-inputs-outputs-and-tools-518e22654648</link><guid isPermaLink="true">https://medium.com/javarevisited/prompt-injection-defense-for-java-devs-part-1-locking-down-inputs-outputs-and-tools-518e22654648</guid><description>The threat model and the first three layers of defence for a Spring Boot LLM app: input boundaries, output validation and tool-use guardrails.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Spring AI + pgvector: A Beginner’s Guide to RAG</title><link>https://medium.com/javarevisited/spring-ai-pgvector-a-beginners-guide-to-rag-62b5044635e7</link><guid isPermaLink="true">https://medium.com/javarevisited/spring-ai-pgvector-a-beginners-guide-to-rag-62b5044635e7</guid><description>Build your first Retrieval-Augmented Generation app in Spring Boot with Docker, OpenAI, and a vector database that lives inside Postgres.</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate></item><item><title>Why Coding Agents Love Git Worktrees</title><link>https://levelup.gitconnected.com/why-coding-agents-love-git-worktrees-056d8a21b83e</link><guid isPermaLink="true">https://levelup.gitconnected.com/why-coding-agents-love-git-worktrees-056d8a21b83e</guid><description>One repo, many working directories, and how AI coding agents use them to run tasks in parallel without stepping on each other.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate></item><item><title>Building an MCP Server in Spring Boot: The Definitive Java Guide</title><link>https://medium.com/javarevisited/building-an-mcp-server-in-spring-boot-the-definitive-java-guide-3071af9cbcf4</link><guid isPermaLink="true">https://medium.com/javarevisited/building-an-mcp-server-in-spring-boot-the-definitive-java-guide-3071af9cbcf4</guid><description>MCP is becoming the USB-C of AI tooling, but most tutorials are in Python or TypeScript. This is the production-ready Java guide, with LLM integration.</description><pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate></item><item><title>Why Most AI Agents Fail in Production</title><link>https://aiadvances.org/why-most-ai-agents-fail-in-production-0baab427e501</link><guid isPermaLink="true">https://aiadvances.org/why-most-ai-agents-fail-in-production-0baab427e501</guid><description>Hallucinations, black-box pipelines and missing guardrails, and how to build agents that still work on day two.</description><pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Write Java, Run on GPUs: How Project Babylon Changes Everything</title><link>https://medium.com/javarevisited/write-java-run-on-gpus-how-project-babylon-changes-everything-8f38092a57a1</link><guid isPermaLink="true">https://medium.com/javarevisited/write-java-run-on-gpus-how-project-babylon-changes-everything-8f38092a57a1</guid><description>Project Babylon lets Java code run on GPUs without CUDA or OpenCL, extending Write Once, Run Anywhere to AI workloads.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Why Your Spring Data Queries Break After Every Refactor</title><link>https://medium.com/javarevisited/why-your-spring-data-queries-break-after-every-refactor-af30d987e3b2</link><guid isPermaLink="true">https://medium.com/javarevisited/why-your-spring-data-queries-break-after-every-refactor-af30d987e3b2</guid><description>Spring Data introduces type-safe property paths, replacing fragile string references with method references the compiler understands.</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Java Streams Were Missing One Thing. Java 22 Finally Fixed It.</title><link>https://medium.com/javarevisited/java-streams-were-missing-one-thing-java-22-finally-fixed-it-242e52d7bbbb</link><guid isPermaLink="true">https://medium.com/javarevisited/java-streams-were-missing-one-thing-java-22-finally-fixed-it-242e52d7bbbb</guid><description>Collectors always forced your stream to stop. Gatherers in Java 22 let it keep going, with state, windows and full control.</description><pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Your Coding Instincts Are Broken. AI Agents Just Exposed That.</title><link>https://levelup.gitconnected.com/your-coding-instincts-are-broken-ai-agents-just-exposed-that-ce0f2ab4ab88</link><guid isPermaLink="true">https://levelup.gitconnected.com/your-coding-instincts-are-broken-ai-agents-just-exposed-that-ce0f2ab4ab88</guid><description>Everything you know about software trade-offs was calibrated for a world where writing code was expensive. That world is gone.</description><pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Java Already Ships a Logger. Almost Nobody Uses It.</title><link>https://medium.com/javarevisited/java-already-ships-a-logger-almost-nobody-uses-it-ab5c7239f8c0</link><guid isPermaLink="true">https://medium.com/javarevisited/java-already-ships-a-logger-almost-nobody-uses-it-ab5c7239f8c0</guid><description>System.Logger, the quiet API added in Java 9, removes a whole class of logging dependencies.</description><pubDate>Sat, 21 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Your Retry Logic Is Probably Broken. Spring Boot 4 Just Fixed That For You</title><link>https://medium.com/javarevisited/your-retry-logic-is-probably-broken-spring-boot-4-just-fixed-that-for-you-dffe582fe6c9</link><guid isPermaLink="true">https://medium.com/javarevisited/your-retry-logic-is-probably-broken-spring-boot-4-just-fixed-that-for-you-dffe582fe6c9</guid><description>Spring Boot 4 ships native retry in org.springframework.resilience, and the API has nuances most articles get wrong.</description><pubDate>Sat, 21 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Java Runs Out of Memory, Yet This Code Still Executes</title><link>https://medium.com/javarevisited/java-runs-out-of-memory-yet-this-code-still-executes-8079a40eba05</link><guid isPermaLink="true">https://medium.com/javarevisited/java-runs-out-of-memory-yet-this-code-still-executes-8079a40eba05</guid><description>How the JVM plans for memory failure long before your heap fills, and why code still runs after an OutOfMemoryError.</description><pubDate>Sat, 17 Jan 2026 00:00:00 GMT</pubDate></item><item><title>AI Writes Code Faster. Humans Still Ship Better Software</title><link>https://levelup.gitconnected.com/ai-writes-code-faster-humans-still-ship-better-software-bfe5e60a7deb</link><guid isPermaLink="true">https://levelup.gitconnected.com/ai-writes-code-faster-humans-still-ship-better-software-bfe5e60a7deb</guid><description>An analysis of hundreds of GitHub pull requests shows AI-generated code has more bugs in logic, security and performance.</description><pubDate>Thu, 01 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Why Senior Engineers Stop Trusting Spring Boot Defaults</title><link>https://medium.com/javarevisited/why-senior-engineers-stop-trusting-spring-boot-defaults-fe40da801e6a</link><guid isPermaLink="true">https://medium.com/javarevisited/why-senior-engineers-stop-trusting-spring-boot-defaults-fe40da801e6a</guid><description>Connection pools, transactions, async calls, and the hidden costs of Spring Boot&apos;s defaults as a system grows.</description><pubDate>Wed, 17 Dec 2025 00:00:00 GMT</pubDate></item><item><title>How Java Keeps Winning in 2025: Loom, Valhalla, Panama, and What That Means for Your Career</title><link>https://medium.com/javarevisited/java-is-not-slowing-down-java-is-growing-973e8c3498bf</link><guid isPermaLink="true">https://medium.com/javarevisited/java-is-not-slowing-down-java-is-growing-973e8c3498bf</guid><description>Industry data on Java&apos;s growth, and what Loom, Valhalla and Panama mean for your career.</description><pubDate>Wed, 03 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Five Kubernetes Static Analysis Tools That Improve Your Manifest Quality</title><link>https://levelup.gitconnected.com/five-kubernetes-static-analysis-tools-that-improve-your-manifest-quality-ee8bd933b2a3</link><guid isPermaLink="true">https://levelup.gitconnected.com/five-kubernetes-static-analysis-tools-that-improve-your-manifest-quality-ee8bd933b2a3</guid><description>Five tools that review Kubernetes YAML manifests and catch misconfigurations before rollout.</description><pubDate>Fri, 14 Nov 2025 00:00:00 GMT</pubDate></item><item><title>How To Execute Commands In A Docker Container</title><link>https://levelup.gitconnected.com/how-to-execute-commands-in-a-docker-container-f68247d72e1c</link><guid isPermaLink="true">https://levelup.gitconnected.com/how-to-execute-commands-in-a-docker-container-f68247d72e1c</guid><description>How to run one or more commands in a running or stopped Docker container.</description><pubDate>Fri, 14 Nov 2025 00:00:00 GMT</pubDate></item><item><title>Structured Concurrency in Java</title><link>https://medium.com/javarevisited/structured-concurrency-in-java-0a948abac2cf</link><guid isPermaLink="true">https://medium.com/javarevisited/structured-concurrency-in-java-0a948abac2cf</guid><description>How structured concurrency ties threads to a scope, so failures, cancellation and cleanup stop leaking.</description><pubDate>Thu, 30 Oct 2025 00:00:00 GMT</pubDate></item><item><title>OpenAI Cofounder Brutal take on LLMs, Agents and Why AGI is Still Decade Away</title><link>https://levelup.gitconnected.com/openai-cofounder-brutal-take-on-llms-agents-and-why-agi-is-still-decade-away-561703ca4731</link><guid isPermaLink="true">https://levelup.gitconnected.com/openai-cofounder-brutal-take-on-llms-agents-and-why-agi-is-still-decade-away-561703ca4731</guid><description>Andrej Karpathy on why large language models and agents are further from AGI than the hype suggests.</description><pubDate>Sun, 26 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Checked Exceptions Have No Place in Modern Java</title><link>https://medium.com/javarevisited/checked-exceptions-have-no-place-in-modern-java-c0f16f0e147b</link><guid isPermaLink="true">https://medium.com/javarevisited/checked-exceptions-have-no-place-in-modern-java-c0f16f0e147b</guid><description>Lambdas, streams and frameworks already moved past checked exceptions. The language should too.</description><pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Stop Being Polite to ChatGPT. It Works Better When You’re Rude.</title><link>https://medium.com/swlh/stop-being-polite-to-chatgpt-it-works-better-when-youre-rude-eab6e7a3339b</link><guid isPermaLink="true">https://medium.com/swlh/stop-being-polite-to-chatgpt-it-works-better-when-youre-rude-eab6e7a3339b</guid><description>A Penn State study found ChatGPT gave more correct answers to rude prompts than to polite ones.</description><pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate></item><item><title>System Scaling Techniques Senior Engineers Must Master: Part 2</title><link>https://levelup.gitconnected.com/system-scaling-techniques-senior-engineers-must-master-part-2-debbc2bbeda6</link><guid isPermaLink="true">https://levelup.gitconnected.com/system-scaling-techniques-senior-engineers-must-master-part-2-debbc2bbeda6</guid><description>How to scale connections, sessions and threads once rate limiting and caching are not enough.</description><pubDate>Thu, 09 Oct 2025 00:00:00 GMT</pubDate></item><item><title>System Scaling Techniques Senior Engineers Must Master: Part 1</title><link>https://levelup.gitconnected.com/system-scaling-techniques-senior-engineers-must-master-part-1-12c992d284ae</link><guid isPermaLink="true">https://levelup.gitconnected.com/system-scaling-techniques-senior-engineers-must-master-part-1-12c992d284ae</guid><description>The patterns that keep a system up under load: rate limiting, throttling, CDN caching, eventual consistency, edge computing and hot-partition mitigation.</description><pubDate>Mon, 06 Oct 2025 00:00:00 GMT</pubDate></item><item><title>How Java Virtual Threads Broke Netflix</title><link>https://medium.com/javarevisited/how-java-virtual-threads-broke-netflix-5f7b491435cc</link><guid isPermaLink="true">https://medium.com/javarevisited/how-java-virtual-threads-broke-netflix-5f7b491435cc</guid><description>Netflix ran Java 21 virtual threads in production and hit thread pinning.</description><pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Architecture Design Patterns Every Senior Developer Must Know Part 2</title><link>https://levelup.gitconnected.com/architecture-design-patterns-every-senior-developer-must-know-part-2-0409ec13f8c2</link><guid isPermaLink="true">https://levelup.gitconnected.com/architecture-design-patterns-every-senior-developer-must-know-part-2-0409ec13f8c2</guid><description>More architecture patterns for large systems, starting with Staged Event-Driven Architecture.</description><pubDate>Sun, 28 Sep 2025 00:00:00 GMT</pubDate></item><item><title>Architecture Design Patterns Every Senior Developer Must Know Part 1</title><link>https://levelup.gitconnected.com/architecture-design-patterns-every-senior-developer-must-know-part-1-38b636c3b746</link><guid isPermaLink="true">https://levelup.gitconnected.com/architecture-design-patterns-every-senior-developer-must-know-part-1-38b636c3b746</guid><description>Architecture patterns for large-scale systems, starting with CQRS and Event Sourcing.</description><pubDate>Fri, 26 Sep 2025 00:00:00 GMT</pubDate></item><item><title>Monitoring Spring Boot Applications: Part 2</title><link>https://levelup.gitconnected.com/monitoring-spring-boot-applications-part-2-9bcae4a56b07</link><guid isPermaLink="true">https://levelup.gitconnected.com/monitoring-spring-boot-applications-part-2-9bcae4a56b07</guid><description>Monitoring Spring Boot startup events with JDK Flight Recorder.</description><pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate></item><item><title>Spring Boot Under the Hoods</title><link>https://medium.com/javarevisited/spring-boot-under-the-hoods-719677022cdb</link><guid isPermaLink="true">https://medium.com/javarevisited/spring-boot-under-the-hoods-719677022cdb</guid><description>What happens when a client calls your Spring Boot API: the request lifecycle, step by step.</description><pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate></item><item><title>Fast Local Development of Spring Boot Apps on k8s With Skaffold &amp; Telepresence</title><link>https://medium.com/ambassador-api-gateway/fast-local-development-of-spring-boot-apps-on-k8s-with-skaffold-telepresence-385b6e0dcd0c</link><guid isPermaLink="true">https://medium.com/ambassador-api-gateway/fast-local-development-of-spring-boot-apps-on-k8s-with-skaffold-telepresence-385b6e0dcd0c</guid><description>Using Skaffold and Telepresence for fast local development of Spring Boot apps that run on Kubernetes.</description><pubDate>Fri, 14 Apr 2023 00:00:00 GMT</pubDate></item><item><title>Java Functional Interfaces for the Impatient: Part 1</title><link>https://levelup.gitconnected.com/java-functional-interfaces-for-the-impatient-part-1-686acf9442c8</link><guid isPermaLink="true">https://levelup.gitconnected.com/java-functional-interfaces-for-the-impatient-part-1-686acf9442c8</guid><description>The functional interfaces in java.util.function, with code examples. Part one of a series.</description><pubDate>Tue, 21 Feb 2023 00:00:00 GMT</pubDate></item><item><title>Monitoring Spring Boot Applications: Part 1</title><link>https://levelup.gitconnected.com/monitoring-spring-boot-applications-part-1-b3fc6d14cedc</link><guid isPermaLink="true">https://levelup.gitconnected.com/monitoring-spring-boot-applications-part-1-b3fc6d14cedc</guid><description>Using JDK Flight Recorder, which ships with the JDK, to monitor a Spring Boot application.</description><pubDate>Fri, 31 Dec 2021 00:00:00 GMT</pubDate></item><item><title>Spring Boot and Java 16 Records</title><link>https://levelup.gitconnected.com/spring-boot-and-java-16-records-3b3356345ac8</link><guid isPermaLink="true">https://levelup.gitconnected.com/spring-boot-and-java-16-records-3b3356345ac8</guid><description>Java 16 records, delivered in JEP 395, and how to use them in a Spring Boot application.</description><pubDate>Sun, 21 Mar 2021 00:00:00 GMT</pubDate></item><item><title>Demystifying Google Container Tool Jib: Java Image Builder</title><link>https://medium.com/javarevisited/demystifying-google-container-tool-jib-java-image-builder-583badfe1ba</link><guid isPermaLink="true">https://medium.com/javarevisited/demystifying-google-container-tool-jib-java-image-builder-583badfe1ba</guid><description>Inside Jib&apos;s image layering, and the benefits of the distroless images it uses by default.</description><pubDate>Thu, 21 Jan 2021 00:00:00 GMT</pubDate></item><item><title>10 Books Every Java Developer Must Read</title><link>https://medium.com/javarevisited/10-books-every-java-developer-must-read-fdc424f4b91e</link><guid isPermaLink="true">https://medium.com/javarevisited/10-books-every-java-developer-must-read-fdc424f4b91e</guid><description>Books for experienced Java developers on concurrency, microservices, new language features and best practices.</description><pubDate>Sun, 03 Jan 2021 00:00:00 GMT</pubDate></item><item><title>Declare var, not war</title><link>https://medium.com/javarevisited/declare-var-not-war-5bfb7a1a399e</link><guid isPermaLink="true">https://medium.com/javarevisited/declare-var-not-war-5bfb7a1a399e</guid><description>Local-variable type inference with var, added in Java 10 to cut boilerplate.</description><pubDate>Thu, 31 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Deploying Spring Boot Application on Kubernetes</title><link>https://medium.com/javarevisited/running-kubernetes-on-docker-desktop-for-mac-ec9bae049311</link><guid isPermaLink="true">https://medium.com/javarevisited/running-kubernetes-on-docker-desktop-for-mac-ec9bae049311</guid><description>How to create a pod and deploy a Spring Boot application on Kubernetes.</description><pubDate>Tue, 22 Dec 2020 00:00:00 GMT</pubDate></item><item><title>CI/CD Workflow for Spring Boot Applications on Kubernetes via Skaffold</title><link>https://medium.com/javarevisited/skaffolding-springboot-application-dbfbc463e558</link><guid isPermaLink="true">https://medium.com/javarevisited/skaffolding-springboot-application-dbfbc463e558</guid><description>A CI/CD workflow for a Spring Boot application on Kubernetes, built with Skaffold.</description><pubDate>Mon, 07 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Containerizing Spring Boot Application with Jib</title><link>https://medium.com/javarevisited/containerizing-springboot-application-with-jib-716daa3e0850</link><guid isPermaLink="true">https://medium.com/javarevisited/containerizing-springboot-application-with-jib-716daa3e0850</guid><description>Build Docker or OCI images for a Spring Boot application with Jib, without a Docker client or a Dockerfile.</description><pubDate>Sun, 15 Nov 2020 00:00:00 GMT</pubDate></item><item><title>Connecting Simple Java Client with Apache Geode Docker Container</title><link>https://ashish-choudhary.medium.com/connecting-simple-java-client-with-apache-geode-docker-container-fca32a4c9946</link><guid isPermaLink="true">https://ashish-choudhary.medium.com/connecting-simple-java-client-with-apache-geode-docker-container-fca32a4c9946</guid><description>Starting a locator and a server in an Apache Geode container and connecting to the cluster from a simple Java client.</description><pubDate>Wed, 11 Nov 2020 00:00:00 GMT</pubDate></item><item><title>Openshift Github Integration</title><link>https://ashish-choudhary.medium.com/openshift-webhook-github-1e2df303167b</link><guid isPermaLink="true">https://ashish-choudhary.medium.com/openshift-webhook-github-1e2df303167b</guid><description>Triggering OpenShift builds on Minishift when you push changes to a GitHub repository.</description><pubDate>Wed, 11 Nov 2020 00:00:00 GMT</pubDate></item><item><title>Running Apache Geode With Docker</title><link>https://ashish-choudhary.medium.com/running-apache-geode-with-docker-187d3a3dac27</link><guid isPermaLink="true">https://ashish-choudhary.medium.com/running-apache-geode-with-docker-187d3a3dac27</guid><description>How to run Apache Geode, a distributed in-memory data grid, inside a Docker container.</description><pubDate>Wed, 11 Nov 2020 00:00:00 GMT</pubDate></item><item><title>Running Simple Spring Boot Application on Openshift(Minishift)</title><link>https://medium.com/javarevisited/running-simple-springboot-app-on-minishift-84f51894bdf6</link><guid isPermaLink="true">https://medium.com/javarevisited/running-simple-springboot-app-on-minishift-84f51894bdf6</guid><description>Deploying a simple Spring Boot application to OpenShift with Minishift.</description><pubDate>Sat, 02 May 2020 00:00:00 GMT</pubDate></item></channel></rss>