Tales from the jar side: Spring AI training, Claude App and Claude Code, the Hagler-Leonard fight, and the usual silly skeets
What happens when a castle performs poorly at work? It gets demoated (rimshot)
Welcome, fellow jarheads, to Tales from the jar side, the Kousen IT newsletter, for the week of May 4 - 11, 2025. This week I taught a Spring AI course on the O’Reilly Learning Platform, and gave a final exam at Trinity College (Hartford).
Spring AI
On Monday, I taught my latest Spring AI course on the O’Reilly Learning Platform, as mentioned above. I’ve been giving that course periodically since January of 2024, or about 16 months ago. I foolishly thought that Spring AI 1.0 was going to be released by that first date. Instead, it’s been constant delays and updates. I’ve had to update all my code every time since then.
Honestly, the person I really feel sorry for is my friend Craig Walls, who is nearly finished with his upcoming Spring AI in Action book from Manning. I can’t imagine how many times he’s had to rewrite chapters because the team changed the API so fundamentally. I’ll bet he’s written that entire book at least three times, though.
This particular run of the course went quite well, however. Most everything worked exactly as expected, and the material is well enough organized by now to make a coherent story. What I didn’t have yet was a written set of exercises for the students to do. I have that in all my most successful courses. I try to maintain an HTML-based set of labs from which the students and I can copy and paste the code into a project. In my most recent classes, I’ve taken to creating the labs in a Markdown file, because then I can store it in the root of my project, and GitHub will render it as HTML without any effort from me.
After my course was over, therefore, I considered how I could do that conversion this time. The goal would be to take the test cases I created during the lab and turn them into exercises in a Markdown file. That seemed like an awful amount of work, though, especially given that Spring AI still isn’t scheduled to move to 1.0.0 until May 20.
(Hey, it could happen, I guess. We’ll see.)
But that’s was AI tools are for. I took the labs.md
file from one of my other courses and added it to the root of my Spring AI project. Then I started up Claude Code at the command line (my AI agent of choice these days) and told it to use that as an example, and to convert my current JUnit test cases into a similar set of exercises. The initial results were very good.
It still makes errors. Occasionally it makes up classes and packages in the API that don’t exist, but that’s not an issue if I’m already supplying the code. It also leaves out the explanations, or writes explanations that are far too detailed or pedantic to be useful. Still, I can fix all that, and it is able to save me a ton of time in the conversion, and it has an easy time updating everything as I make changes.
I’ve been adding more exercises since that initial flurry, and part of the job has been easy and part has not. Before doing this, I was worried about the costs, since Claude Code charges by API tokens and I’ve seen how quickly they can add up. Anthropic announced this week that if you are willing to upgrade to the Max level, now you can use Claude Code as part of your monthly subscription, along with much higher usage rates and frequencies. I decided to give it a try, at least for a month or two, because I have a lot of similar small projects like this in mind.
I know this is their way of locking me in, but it’s a good product and it’s working. We’ll see how OpenAI and/or Gemini respond.
Claude App, MCP, and Claude Code
I’ve been using Claude as my primary AI of choice, even though GPT-4.1 and Gemini 2.5 are both very good. This week Anthropic announced that you can integrate the Claude app on the Mac with your own files.
That image shows the new tool support inside the app. The web search capability got most of the press, and it’s nice, but I really was happy to integrate Claude into my Google apps. I can now reference my existing Google docs (that’s the Drive search), and the Calendar support is nice, but the real win is the Gmail search. It still shocks me how appallingly bad Google’s search capability is inside Gmail, even though I’ve got Gemini access. Whenever I use that Gemini feature to try to find something in my email, I wind up getting really angry at how bad the results are. I mean, if there’s one thing Google ought to do well, it’s search, right? Yet anything that isn’t obviously in a simple message from the last few days is hopeless. I’m really hoping the Claude ability to access my email will make things much better. We’ll see.
The apps listed below that divider (sqlite, tavily-mcp, filesystem, and github) are all available through the configured MCP (Model-Context-Protocol) support. I still find MCP too complicated in general, but it’s relatively easy to add existing MCP servers to the Claude app. Tavily is the tool I provided so the AI could search the web before Anthropic’s own web search was enabled. I enabled the GitHub support today, and used it to find a feature I’d implemented in a repository but couldn’t remember which one.
I haven’t had a need for the Extended Thinking capability yet. For things like that, I usually go with OpenAI’s o3 model, or o4-mini if I’m in a hurry and the problem isn’t too hard.
The Profound Lesson of the Hagler-Leonard Fight
I’ve never been much of a boxing fan, but a few related events have had a big impact on my life. Someday I’ll talk here about the original Rocky movie (and Rocky III, the other pretty good one), which was a true classic long before the series degenerated into farce and self-parody. I remember watching Muhammad Ali, though not in his prime. I saw all of Mike Tyson’s career, from meteoric rise to equally meteoric crash and burn.
One fight in particular made a difference to me, in the sense that it taught me a lesson I still try to live by even now. That fight was between Marvelous Marvin Hagler and Sugar Ray Leonard, on April 6, 1987, which was both Hagler’s final fight and one of the most dramatic of his long, complicated career.
(We’re only a couple of years shy of the 40th anniversary of that fight. Whoa.)
I’d love to get into the details, but let’s keep this newsletter to a reasonable length. I’ll just say that Hagler had been a middleweight champion for years, but had retired twice (in 1982 and 1984) and come back twice (in 1984 and 1986) to defend his belt. After the last defense, Sugar Ray Leonard saw that Hagler had lost some speed and thought he could beat him, even though Leonard was also retired. Leonard announced in 1986 that he would come out of retirement, but only to fight Hagler.
Hagler was a tough bruiser with incredible power. Leonard was the media darling, from his days as Olympic champion to his frequent TV appearances. The public loved Leonard. The sportwriters almost all picked Hagler.
As the linked article says, the fight would go down to be among the most controversial fights in boxing history. Hagler started with a traditional stance instead of his normal southpaw approach, but switched back after a few rounds.
Here’s the key part:
Hagler would spend most of the fight as the aggressor, while Leonard would pepper Hagler with combinations before retreating away. During the last 30 seconds of each round, Leonard would attack Hagler with a flurry of punches in an effort to "steal" the rounds on the scorecards.
That attempt ultimately worked. Two of the judges had the fight close, but one overwhelmingly favored Leonard, who won by split decision. When I got to watch the fight a week later (because we didn’t pay for it live), it was clear to me at least that those late flurries by Leonard were deliberate and successful.
In fact, that’s the real lesson I learned from that fight, and one I told my students about before the end of our semester. If you finish strong, that’s what everyone will remember. How you finish matters way more than how you start. If you do a great job at the end, you can win even with a rough beginning.
My tendency has always been to start strong, then fade as I got tired. That fight taught me I needed to put on a late kick at the end of every project, because people will then assume I was fine all along, regardless of how I was really doing. Honestly, I don’t know that the general principle this is true. Please let me know what you think, especially if your experience is different from mine.
Hagler went on to a movie career in Italy, mostly playing the sorts of macho parts in the kind of low-budget movies you’d expect, and Leonard eventually became the broadcaster everybody knew he would be. I thought the decision in the fight was a bad one, but so be it.
Toots and Skeets
Mother’s Day
Hah. I didn’t expect a Mother’s Day gag to transform into a Bull in a China Shop gag. Nicely done.
Pope Bob (pronounced Bahb)
The new Pope, Leo XIV, is the former Robert Francis Prevost from Chicago. The Chicago references were inevitable. This was one of my favorites:
The Chicago Pope references were good, too, but I never watched Chicago Hope. I happily remember both the Blues Brothers and the Chicago guys on Saturday Night Live rooting for Da Bears. Or, instead:
Everything I’ve seen about the new Pope so far looks great, not that I’m directly impacted or anything. He seems like a good and decent man who genuinely cares for the less fortunate, and I wish him all the best. Sorry about the whole White Sox fan thing, though. I’m not sure even divine intervention can help that.
Penguin islands FTW
In case you didn’t remember, Heard Island is one of those countries that are populated entirely by penguins, yet hit by those idiotic tariffs.
I also saw that a fourth (!) plane has been lost off a carrier this week. Must be all those DEI hires.
Obscure music reference of the week
I vaguely remember Juice Newton. Her cross-over hit was It’s a Heartache, and about the only song I know from her. Still, a good pun is worth the memory trip.
May the 4th be with you
Rimshot, definitely.
Keeping with the Star Wars theme
Kind of a reach, but I’ll allow it.
Cat joke
That’s got to be an old joke, but I don’t remember seeing it before.
Both cats and religion, together
Yeah, I totally imagine that, too.
Finally, let’s go with a Dad joke
Have a great week everybody! I should also note that if you’re anywhere near Glastonbury, CT, next Saturday, my wife and I are both performing:
Hope to see (any of) you there.
Last week:
Spring AI on the O’Reilly Learning Platform
This week:
No classes, but lots of rehearsals for that musical event on Saturday.