-
I Finally Understand What MCP Is For
If you’re a developer, you’ve probably heard about MCP — the Model Context Protocol. It’s the hottest thing in AI, and posts and videos about it are appearing everywhere. Maybe you’ve even looked at the documentation, nodded along with the technical explanations (“it’s a protocol for connecting AI models to tools”), and thought, “But why…
-
Sure, I’ll sign your ebook
Between 2013 and 2023, I wrote a series of books for Manning, O’Reilly, and the Pragmatic Bookshelf: Every once in a while, someone would come up to me at a conference with a copy of one and ask me to sign it. I’d make some gag about that ruining the resale value, but would do…
-
Waiting for Spring AI Streaming Responses in JUnit Tests

See three different ways to wait for asynchronous responses from inside JUnit tests
-
AI vs Cthulhu: How to Bypass Guardrails
As someone who’s spent their entire career working with computers and the last couple of years diving deep into AI, I’m quite familiar with the concept of Evil. However, I never intended to summon an Elder God to destroy the world. Yet, here we are. (Note: this blog post is based on the following video:…
-
Perplexity AI API: Real-Time Search and AI Summation

In the rapidly evolving landscape of AI APIs, Perplexity AI has emerged with a compelling proposition: real-time web search capabilities combined with AI-powered summation, all accessible through OpenAI-compatible endpoints. Even better? It comes at a fraction of the cost of traditional AI APIs. Why Perplexity API Matters While many developers are familiar with Perplexity’s consumer-facing…
-
Creating an AI-Generated Opera with LangChain4j

They say the plot of every opera is that the soprano wants to sleep with the tenor, but the baritone won’t let her. See, for example, Rigoletto, or La Traviata, or even Carmen. My idea, and I’ll ask — nay, even beg — for forgiveness later, was to use AI tools to generate the rough…
-
Conversations with LangChain4j
Chat requests in AI tools are stateless by default, but you can fix that in LangChain4j by using Chat Memory.
-
A Really Easy Way to Add AI to Java

My latest video is about accessing the Claude AI API in a Spring Boot application: The title is a little click-baity for my taste, especially because the LangChain4J project is even easier. Still, the input and output request types for Claude AI are so incredibly simple, that this really did make the resulting Spring and…
-
When custom GPT’s don’t cooperate
My latest video is about the challenges of creating custom GPT’s: Like so many people, I was intrigued by the possibility of creating custom GPT’s when they were announced at the OpenAI DevDays conference. The web interface walks you through the process, asking questions as you go along, though on the video you can see…
-
The Magic of AI Services with LangChain4J

My latest video is called The Magic of AI Services with LangChain4J: The LangChain4J project lets you define Java interfaces that get implemented automatically by the framework. It’s about the easiest way I’ve ever seen to interact with AI tools. The logo in the thumbnail comes from the LangChain4J project. It’s a parrot sitting on…