Tales from the jar side: More theme song variants, Veo 3 Fast videos, Gradle 9, my WNBA team is leaving, and the usual social media silliness
What do you call a retired miner? Doug. (rimshot)
Welcome, fellow jarheads, to Tales from the jar side, the Kousen IT newsletter, for the week of July 27 - August 2, 2025. This week I taught Week 3 of my Spring in 3 Weeks course and my Managing Your Manager course, both on the O’Reilly Learning Platform.
Welcome to JVM Weekly fans
A lot of jarheads (our term of affection for the subscribers to this newsletter, Tftjs) come here because they were recommended by the awesome JVM Weekly. It’s been a while since I praised that newsletter, which is clearly a labor of love by Artur Skowroński. He knows far more about the internals of Java than I ever will, and I’m a big fan of his weekly newsletter.
If you’re here from there, welcome! I do talk about Java-related topics (and, to a lesser extent, Kotlin, Groovy, Spring, and — these days — lots of AI), but I approach them much more from a user point of view rather than as someone whose goal is to improve the language. I also talk about whatever other topics I spend time on during the week. I also always have a section at the bottom on interesting social media posts. Most of my non-technical friends go directly there, and that’s fine.
Seriously, any way you want to read this newsletter is fine, or even not at all. Hey, if you don’t read it, you don’t find any errors and you don’t find anything to disagree with. It’s all good. :)
Theme Song Video
Last week I shared the newly generated Tales from the jar side theme song in this newsletter, in the style of 1960’s British Invasion pop music, as created by Suno AI. This week I thought upload the result to YouTube as a short. Suno AI already creates shorts you can download for each song. This one is just under 3 minutes, and that used to be too long for shorts (hah), but now it fits somehow.
I added a whole series of text comments to it that look like they’re lyrics, but are actually commentary. Here is the result:
The “commentary track” is in the cyan font with a black background. Sadly, I don’t think it worked as well as I intended. Most people just ignored the added comments. Still, it was an excuse to play with Descript’s AI tool (called, of all things, Underlord — seriously, AI companies should never be allowed to name anything ever), which was mostly frustrating but got the job done eventually.
Here’s the analytics chart for the week:
As you can see, the views took off right away, leveled off at about 1200, jumped again to 1300, and have been sitting around there ever since. From what I understand, this is normal behavior for shorts. I don’t really know. I don’t create shorts very often.
Since all of that was not silly enough, I went back to Suno AI, entered in the same lyrics, and tried generating a few more songs in different styles. Here’s the Modern Country version:
Seriously, if my wife found me listening to country music on purpose, she’d think I’d woken up next to a pod. Still, this bouncy version is fun.
This version has Middle Eastern overtones:
Finally, I tried to get it to generate a Bach Chorale, but I ran into issues. First, there’s a button on the form that says, “Give your prompt a creative boost (beta)”. I entered the words Bach chorale and clicked the button. This is what it gave me:
The piece features four-part SATB choir supported by subtle continuo. Each voice moves independently with clear harmonic structure and fluid, intertwining lines. The texture remains transparent, with measured phrasing and cadences lending breath to the solemn polyphony.
When I tried to generate the music from that, I got an error which said something like, “I can’t generate that, because it has an artist name in it.”
What artist, you ask? After all, the revised prompt doesn’t say anything about JS Bach. No, it’s — wait for it — SATB, which it specified in lowercase (satb).
I’m well aware that I’m out of touch as far as music written this century goes (and probably long before that), but I’d never heard of a musician called satb. I asked both Claude and Perplexity about it, and neither of them had heard of anyone with that name. I have to admit, as a musician, picking that name is a pretty clever idea. Maybe somebody will choose it in the future. But for the moment, I have no idea what Suno’s problem was.
Nevertheless, I deleted the word SATB, and the AI was happy to generate music for me. Here’s the better result (of the two Choral Cantatas — Suno always gives me a pair of options):
Maybe I’ll make more next week, or I’ll find something (anything) more productive to do.
Veo 3 Fast
I noticed that this week, Google made the “fast” version of their Veo 3 video generator available in their API. That means the quality is lower, but the cost is also lower. The price for the fast version is $0.40/second, rather than $0.75/second for the full one, so 8 seconds of video now cost $3.20.
I updated my VeoJava repository to use the new system, and entered the following prompt:
An alien and a predator are playing chess in the jungle.
The predator makes a move, and the alien roars in anger.
Here’s the result:
It’s a bit grainier than the full version, and doesn’t quite follow the prompt (I’m not sure what they’re playing, but it doesn’t look much like chess), but I’ll take it.
I also updated all the code to Java 24, even with preview features, so I can use it as an example of those features. That took some playing around to get it all to run properly, but that was a learning experience as well.
The build now includes Gradle’s application
plugin, which means I can use
> ./gradlew run
at the command line to run it, which should work on any platform. You select one of the polling options (I normally use virtual threads), and it will walk you through the process. I updated the scanner so that it reads multi-line prompts as well.
Or, rather, Claude Code did most of that. I just told it what to do and iterated when I didn’t agree or like the results. Everything is in the GitHub repository, and Claude Code even helped me create a v1.0 release for it.
Gradle 9.0.0
For much of my career, a new major Gradle release was a big event. This time, I just happened to notice an announcement on social media that Gradle 9.0.0 was released.
For the uninitiated, Gradle is a build tool, which means it automates the process of compiling all your code, running tests, creating a deployable artifact, and even deploying it.
The big new feature is something called a configuration cache. When I used to teach Gradle training classes, I made sure to explain how every Gradle build went through three lifecycle phases:
Initialization
Configuration
Execution
Understanding how Gradle works depends on knowing what happens in each stage. Apparently, the new Gradle 9 uses a cache for the configuration info. Honestly, I don’t really care. It’s rare that I work on projects — other than Android ones — where the build time is a huge issue. Android is the exception. One of the reasons I gave up on Android development is that I got tired of dealing with their massive, bloated Gradle builds, which broke within weeks of being updated.
I took my “latest Java” repository, which demonstrates all the latest features of Java, currently on Java 24, and moved it to Gradle 9 to see what happened. I’ll admit, the new build was really fast, even without the configuration cache. I enabled that cache globally (by setting the org.gradle.configuration-cache
property in my global ~/.gradle/gradle.properties
file), so now I’ll use it everywhere, at least until it gives me any trouble.
(Yeah, about that. Keep reading.)
In version 9, Gradle also upgraded its internal Kotlin version to 2.2.0 (actually current) and Groovy 4.0.27 (4.0.28 is current, and 5.0 is coming soon). Neither of those directly affect me, though I’m glad there’s progress. The platform requires Java 17, but so do most of the Java tools I use, so that’s not an issue either.
But then there’s this, as part of a thread on Bluesky by Andres Almiray:
Andres used to be one of the biggest supporters of Gradle I know, but that was a long time ago. He maintains a ton of Gradle plugins, and this thread started with a lament that every major update to Gradle breaks them.
I just had the same experience, and I wish I could say it was unusual. While my build worked locally, I have a GitHub action that uses the SonarQube Gradle plugin to do code quality checks. As it happens, the latest version of the plugin is incompatible with Gradle 9, because of course it is. So when I deployed to GitHub, the build failed. Here we go again.
Andres is right. Gradle is a VC-backed company, and presumably that’s why Gradle follows the money, though maybe they would anyway. Most of their funds come from large Silicon Valley companies, and large companies that do thousands of builds a day care way more about improving performance than user experience. This is the result. Again.
I’m still committed to Gradle, mostly because the alternative is Maven. I’ve never really understood Maven, partly because it requires me to code in XML and partly because I don’t really “get” their approach. I can’t fix the build when it breaks. But at least when they get something working, it tends to continue to work indefinitely. That’s totally not the case with Gradle.
Gradle can say all they want about caring about the developer experience, even going a far as naming their training site Developer Productivity Engineering University (shudder), but one thing I know for sure is that the developer they claim to care about isn’t me.
Really. DPE University. I used to teach their Intro Gradle training course for them every other month, and I was let go just as they were transitioning everything to that horrible name. Even at the time I was glad to get out.
Social Media Posts
Goodbye CT Sun?
This morning I heard that the Connecticut Sun, our WNBA team, is being sold to a minority owner of the Boston Celtics. Apparently that person lost on the sale of the Celtics themselves, so this was his consolation prize. The result is that our team may be moving to Boston next year.
Or not. The league pushed back, probably because they want money, but wealthy people like that often get what they want even if it’s delayed a bit.
If you look at a map of Connecticut, you’ll see that we are pretty evenly split east and west:
See that highway that runs through the middle of the state? That Route 91, which follows the Connecticut river. To the west of the river, you get New York’s influence, which means lots of Yankees, Giants, Rangers, and Knicks fans. To the east, you get more from Boston, which means Red Sox, Patriots, Bruins, and Celtics fans.
(Mets and Jets fans are scattered around randomly, but nobody cares about them.)
The only team everybody in the state cares about is UConn basketball, and that’s for the women even more than the men. The men are good randomly and win an occasional unexpected NCAA title. The women are good always, and sometimes are great, going undefeated for entire seasons. It’s easy to root for a juggernaut.
The Connecticut Sun play at the Mohegan Sun casino, thus the name, which is about 45 minutes away from me. We’ve gone to see them a couple of times. Most recently, we went last year to see them when Caitlin Clark and the Indiana Fever came to town, before she really came into her own. We might have gone this year, but she’s been injured, and the Sun traded away pretty much everybody good they had for some reason.
Oh well. If they leave, it won’t be as big a deal as when the Hartford Whalers left, which also wasn’t a huge deal, but it’ll be sad.
Where, indeed?
Yeah, I could see that.
Bat Pun Alert
Pow! Bang! Oof!
You know it’s true
Brilliant.
Costumes or not?
Totally works.
Awesome math joke
Next time I have an excuse to put something on the complex plane, I’m going to draw that hypotenuse and just laugh. Good to see the Pythagorean theorem still holds.
Vlad the …
I got it.
I wish that I had
How can I find a grill like that?
Have a great week, everybody. :)
Last week:
Week 3 of Spring in 3 Weeks, on the O’Reilly Learning Platform
This week:
Spring AI, on the O’Reilly Learning Platform
Intro Java, private class