Tales from the jar side: A Groovy Podcast about Grails and Micronaut, versioning in Mockito, and unexpectedly profound tweets
I ordered my new M1 Max Mac laptop, but won't receive it until mid-December. Oh well. At least this machine is still working.
Welcome, jarheads, to Tales from the jar side, the Kousen IT newsletter, for the week of November 7 - 14, 2021. This week I taught the first day of my Spring in 3 Weeks course on the O’Reilly Learning Platform, and two NFJS Virtual Workshops: one on the Latest Features in Java and one on Java Testing with JUnit 5 and Mockito 3. I also managed to host another Groovy Podcast, this time with Puneet Behl and Sergio del Amo.
My book Help Your Boss Help You is available as an ebook at Pragmatic Programmers (use the coupon code kkmanage35 for a 35% discount) and in print form at Amazon.
(Feel free to try kkmanage85 and let me know if that gives you an 85% discount. If you really think it through, though, you’ll try kkmanage105 and see if they’ll pay you to take it away.)
If you wish to become a jarhead by actually subscribing to this (free!) newsletter, use this button:
Groovy Podcast on Grails and Micronaut
Long-time listeners of the Groovy Podcast (the few, the proud, etc) know that Sergio del Amo has taken it upon himself to give me a hard time about the, shall we say, sporadic publication schedule. To wit:
Also:
No doubt that refers to Steph Curry, the brilliant guard for the Golden State Warriors and both my son’s and my favorite player, so to be honest I’m okay with that. Watching Steph play basketball like he did on Friday evening always makes me happy.
Surprising everyone (but especially Sergio), we managed to do another Groovy Podcast this week. Here’s the YouTube version:
(Say what you will about our technical abilities, but I think it’s indisputable that I’m the cute one, and not just because I picked the thumbnail image.)
Puneet Behl is Grails Development Lead at Object Computing, Inc, and Sergio is now a Developer Advocate for 2GM (Groovy / Grails / Micronaut) at the same company.
To be honest, we’ve been trying to arrange this podcast for a few weeks now, but as difficult as it is to schedule two busy people, finding a convenient time for the three of us spanning 9 1/2 time zones (I’m in Connecticut, Sergio is in Spain, and Puneet is in India) is always an adventure. The purpose was to talk about the release of Grails version 5.0.0 (now 5.0.1, but such is life in the software world). We covered that and talked about Sergio’s new role. He’s been pretty active already, starting his own Micronaut podcast as well as a dedicated Micronaut YouTube channel.
(He promises a new podcast episode every two weeks. LOL. Odds I’ll give him a hard time if he falls behind: only about 50/50, actually. Unlike some people, I’m forgiving about such things, and I understand the challenge of meeting a schedule like that. The temptation will be enormous, however.)
The show notes for this episode are here, in case you want to see the collected links.
Software Versioning
This week I got to teach my virtual workshop on Latest Features in Java. I always enjoy that, because there are so many interesting topics to talk about, like records, sealed classes, local variable type inference, collection factory methods, pattern matching, and more.
I used a Gradle build file for my demo project at GitHub, as I usually do. One issue that came up is that the version of Gradle I used was 7.2, and officially that doesn’t support Java 17 (the subject of the course). I don’t normally go for beta releases, but I tried one of the release candidates for 7.3 in my project, and explained that the final release of 7.3 was coming soon.
Coming soon was right. About an hour after the course ended, I saw this tweet:
I updated my project right away, of course.
Speaking of new versions of software, my JUnit/Mockito course the next day discussed the last couple of major version changes in Mockito. Usually when a software product changes major versions, there are significant issues with backward compatibility. The most common versioning scheme is called semantic versioning, and as described on the semver web site:
Given a version number MAJOR.MINOR.PATCH, increment the:
MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards compatible manner, and
PATCH version when you make backwards compatible bug fixes.
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
That’s a bit of a mouthful, but mostly means that when the first number of a version changes, it’s a big deal. That’s often not true (see the last few Java releases, for example), but Mockito is almost silly about it. For Mockito:
“Mockito 3.x requires Java 8, but otherwise doesn’t introduce any breaking changes compared to the 2.x series” (from the Mockito home page)
Mockito 4.0.0 removed the deprecated APIs (as described in the release tag on GitHub). Seriously, that’s all it did:
Heck, the Mockito home page doesn’t even mention the release of 4.0.0, though they do have links to the GitHub repository.
That means the last two major versions of Mockito have changed essentially nothing. I guess that’s good and the sign of a mature framework, but it does make you wonder. I’ve never seen a major version change with less significance, and now they’ve got two of them.
I’ve been spending a lot of time with Mockito recently, for reasons that I’ll get into in a future newsletter.
Tweets 'n Stuff
This gives me nostalgia, for a non-obvious reason:
Back when I was a Research Scientist at United Technologies Research Center, my technical area was the aeroacoustics of axial turbomachinery, which meant I worked on mathematical and computation models of the noise generated by air flowing through jet engines.
(That sounds way more impressive than it was, but that’s part of why I chose it.)
Lord Rayleigh, in addition to the accomplishments listed in that tweet, was also the father of acoustics. As his wikipedia page says, “Rayleigh's textbook The Theory of Sound (1877) is still used today by acousticians and engineers.”
I never read his book (it’s a bit dated by now), but I did name my workstation (an old IBM AIX machine, for those who want to know) in his honor. That meant my old email address ended in rayleigh.res.utc.com, which I used throughout much of the 90s.
Wow, that takes me back. Lots of math, lots of Fortran, and lots of begging for funding, all while working for a small division of a giant conglomerate. The nightmares have ended, but it took a while.
This may look like a nightmare, but it’s actually one of the sweeter animations I’ve seen in a long time:
Seriously, check it out. A lot of work went into that.
This was unexpectedly profound:
That also ties into a lot of discussions about company culture. The culture of a company are the unspoken assumptions that the founders believe are responsible for their success. It’s part of why it’s so difficult to change things in a fundamental way, especially if they believe their success was due to their own efforts and abilities rather than a healthy dose of luck.
I’m reluctant to give career advice to young professionals, partly because the world now is so different from when I was younger, and partly because I got very, very lucky. The right opportunities came along at the right time for me to have this career, which didn’t exist when I was in college. I get some credit too, of course, because when those opportunities came along I went after them as hard as I could, but I’ve always liked this formulation:
Success = (the ability to convert opportunities) * opportunities
That “ability to convert” includes talent, drive, persistence, and all the other assets you bring to the table, including your support network and whatever privileges you enjoy. You still need those opportunities, though. You can try to increase the frequency of those opportunities, but there’s no guarantee they’ll be available. I used to say to my son, “in order to be in the right place at the right time, you need to be in the wrong place at the wrong time a lot,” and I still believe that.
(I imagine that advice would have been more appreciated by my son if it had come from anyone other than his father. That’s why these days I mostly stick with Dad Jokes.)
(Speaking of which: I bought some shoes from a drug dealer. I have no idea what he laced them with, but I’ve been tripping all day. Ha!)
On another unrelated topic, I’ve been watching old Columbo episodes recently, and they hold up much better than I expected (or at least Peter Falk does — the treatment of women and underrepresented minorities in the show sometimes makes me wince). A wonderful meme showed up this week about the show, however:
Says is all, pretty much. They found a formula that worked and ran it over and over again, to my great joy.
Here are a couple of good NFT tweets:
Yes, exactly.
This is supposedly about the new Twitter subscription service, Twitter Blue, but gets dark quickly:
That’s tempting, actually.
Finally (or should I say, one more thing), there’s this:
Sound advice.
As a reminder, you can see all my upcoming training courses on the O’Reilly Learning Platform here and all the upcoming NFJS Virtual Workshops here.
Last week:
Week 1 of Spring in 3 Weeks, on the O’Reilly Learning Platform
Latest Features in Java, an NFJS Virtual Workshop
Java Testing with JUnit 5 and Mockito, an NFJS Virtual Workshop
This week:
Week 2 of Spring in 3 Weeks, on the O’Reilly Learning Platform
Introduction to the Gradle Build Tool, for Gradle, Inc.
semver actually addresses the "is removing deprecated code a major release" issue: https://github.com/semver/semver/issues/508
That said, I'm in favor of it. I'm fine with sticking to the rules of whatever system you ascribe to, rather than the "romantic" notion of a major release number indicating something handwavey known only to Marketing folks. But, maybe normal humans want their feelz more than predictability; this would not be the first time I fell on the offside of that fence.