Tales from the jar side: DALL-E 3 jumping robots, Misleading titles, an NFJS event, Gradle providers, My blog is back, and the usual toots and skeets
My son: "Dad, I'm cold." Me: "Go stand in the corner. There it's 90 degrees." (rimshot)
Welcome, fellow jarheads, to Tales from the jar side, the Kousen IT newsletter, for the week of October 8 - 15, 2023. This week I taught my Practical AI Tools for Java Developers course as an NFJS Virtual Workshop, and gave several talks at the NFJS event in Reston, VA (a suburb of Washington, DC).
Regular readers of (and listeners to, and now video viewers of) this newsletter are affectionately known as jarheads, and are far more intelligent, sophisticated, and attractive than the average newsletter reader or listener or viewer. If you wish to become a jarhead, please subscribe using this button:
As a reminder, when this message is truncated in email, click on the title to open it in a browser tab formatted properly for both the web and mobile.
DALL-E 3 Now Available
In my most recent videos on generating images from Java, I’ve been using either the OpenAI API (in this video) or the Stable Diffusion API (in this one). The best generator from Stable Diffusion, known as SDXL, is really nice. Here, for example, is an example:
I rather like this one a bit better, even though it’s not actually much of a jump:
Those look good, and are comparable to what you can make from Midjourney, which is generally acknowledged as the market leader. I mean, look at this one:
Maybe that’s more scary than happy, but it’s still good.
The down side to Midjourney is that’s it’s only formally available by using a Discord server, though that’s not too difficult to do. I say “formally,” by the way, because I’ve been able to access it via an alternative API provided by a site called Picogen, but that’s a story for another time.
By contrast, the OpenAI generator, as you probably know, is called DALL-E, and the version we have access to via the programming interface is DALL-E 2. While DALL-E 2 was the first of the modern image generators to make a big impact on the industry, it’s really not all that great. Here’s a similar example:
It’s not awful, but it’s not great, either. It’s also the best of several tries.
Recently OpenAI announced the release of version 3 of DALL-E, which is supposed to be as good as the others. My problem is that it was only available via Bing Chat, and I’m not really interested in going to Bing just for that. To be honest, I’m not exactly sure how to get to Bing Chat anyway, given that I’m on a Mac. I do have a Microsoft account, but I’m not interested in using that more than strictly necessary.
This week, however, DALL-E 3 became available inside the main ChatGPT website. It’s only available for “plus” users (the users who pay for a subscription to GPT-4), but it’s a start. Here’s my new attempt there:
That’s quite an improvement. The springs, incidentally, are there because I planned to use robots on springs for my videos involving the Spring framework (ha, and I repeat, ha).
All I need now is for DALL-E 3 to be available via the programmatic API. I don’t know when that will happen, but OpenAI DevDay is November 6, so that would be a good day for announcements.
Practical AI Tools for Java Developers
This week I taught my first NFJS Virtual Workshop on this subject. Unlike my previous talk at UberConf, this time I really focused on the actual code. I did the same thing in my talk of the same name at this weekend’s NFJS event in Reston, VA.
Unfortunately, while I thought developers would be far more interested in the code than the tools, my title was too misleading. Nobody during the workshop on Tuesday complained, but I didn’t see any evals, either. Either nobody bothered to complete one, or the site just hasn’t updated yet. We’ll see.
At the event on Saturday, I was scheduled for two back-to-back sessions on the same topic. My updated description on the virtual workshop was close to what I did, but I just realized that I hadn’t updated the description on the conference talk. I now realize the attendees were expecting more about tools like GitHub Copilot, or IntelliJ’s AI Assistant, and GPT-4, Bard, etc, than the code.
The first talk was packed, and while nobody said anything negative, I wondered why the second session was much smaller. I get it now, of course. During that talk, I realized based on the questions that they cared more about the tools and adjusted to talk about them, but I feel bad I missed that in the first talk. I’m surprised that the developers were more interested in the tools than the programmatic APIs, but so be it. I’ll adjust for that in the future.
I have one other major regret about that first talk. I noticed a few attendees were really distracted during it, and asked them about it. It turned out that the heavy rain (it rained practically all day) caused the roof to leak, and not only were there drops of water falling on the second row, you could even see the big ceiling tiles beginning to bow inwards, looking like they might fail.
We adjusted to that, too, but when I told my friend Venkat about that situation later, he asked if I made a joke about waterfall development, and I still can’t believe I missed that opportunity. I mean, it was just sitting there, waiting for me to say something.
Yeah, no. GPT-4 may be state-of-the-art, but humor isn’t its strong suit. Even something as simple as, “Despite the obvious cue from Mother Nature, I still don’t suggest we switch to waterfall development,” would probably be better.
(Please suggest better jokes in the comments. For some reason I’m not coming up with anything good.)
The event overall went quite well. It’s just been a long time since I’ve misjudged an audience like that, so I’m a bit chagrined about it. Oh well. I’ll do better next year.
I supposed the other lesson for me is that there’s a big audience out there for a talk about those tools. I’ll have to think about how to make one and maybe make a video about it, too.
Gradle
This week I also ran a private training course on the Gradle build tool. I provided some of the materials, but I also leveraged a lot of the public materials that Gradle, Inc. uses in their training courses. The biggest update they made is everything is done in the Kotlin DSL now, which I can do, but is still not one of my strengths. I much prefer Groovy, for lots of reasons.
Also, Gradle keeps evolving at a steady pace. I know that’s a good thing, but it means keeping up is a never-ending struggle. Some of the interesting features have been there a while but I hadn’t really had to understand, like providers and properties. The Gradle documentation has a page called Lazy Configuration that goes into detail about them. In the Groovy DSL I hadn’t worried much about them, but in the Kotlin DSL things are not so simple, and I really need to go through all that material again before my next class teaching Gradle.
As an aside, I knew this was going to be an issue eventually. Back in July I did a video called Gradle zip, unzip, hooray! Zip, unzip and jar in Gradle. That video shows how to create archives like zips and jars, and then how to unzip them using the Gradle Copy
task. When I used the Groovy DSL for that, it was easy. When I used Kotlin, I got feedback from one of the Gradle experts that I was doing it wrong — or, more to the point, my code was more complicated than necessary — and my issues were all about providers and properties. I should have fixed my issues back then, and I thought I had and the code in the GitHub repository is fine, but now I believe I’ll need to go over it all again.
Again, this is a good thing. But still, I’ve been using Gradle for over a decade, and I taught the official Introduction to Gradle course for Gradle, Inc. every other month for about five years. Yet the technology still makes me feel like I don’t really understand it at all on a regular basis.
Nobody in class seemed to mind. Still, I’ll do it better next time.
My Blog, Resurrected
For several years I wrote regularly on my blog, hosted at kousenit.org. Then it mostly died, mostly by a combination of social media posts, this newsletter, and my attempts to post on Medium.
The blog has a custom domain, but it’s hosted on Wordpress.com. I was seriously considering not renewing my subscription. In fact, I thought I had canceled the auto-renew, only to be surprised when I received an email thanking me for renewing it.
I almost contacted them to formally cancel, but I figured, what the heck, let’s bring that thing back to life. The other reason to do so is that now they integrate with Mastodon (and the rest of the Fediverse), so I connected my new foojay.social account to it.
To try it out, I added a post called Spring with ChatGPT, talking about my video on using ChatGPT programmatically with the Spring Framework. That wound up being sent to Mastodon, as I expected, but it also had another effect. If you’re on Mastodon, you can subscribe to my blog feed there, and you’ll get all my new blog posts.
It looks like the way to use that is to keep the posts short and sweet, because the feed shows the entire text. It also appears code doesn’t display well there. Anyway, I’m going to try to keep that going, at least more than I have the last few years.
Tweets / Toots / Skeets / Etc
Cay Horstmann on Java char
and codepoints
The indefatigable Cay Horstmann published a new blog post this week, entitled Stop Using char in Java. And Code Points. That post was entirely in keeping with the theme this week, which apparently is showing me novel aspects of technologies I thought I already knew. I read through that post and got almost nothing out of it, so I read it again. Better that time, but it’s going to take more than that. Again, this is a subject I thought I knew, but clearly I don’t know it to that depth.
It’s good stuff, but I must admit I hope I don’t hear the term grapheme clusters again any time soon.
Really bad Dad joke
I thought the joke I added to the subtitle in this newsletter was as bad a Dad joke as I would ever tell, but check out this one:
OMG, indeed.
Time zone troubles
Yup, story of my life.
Best ChatGPT Joke So Far
That’s the best ChatGPT joke I’ve seen so far. It’s funny because it’s true.
Take On Me
Wow, an a-ha, Take On Me joke. By that I mean this:
Remember that multiple award winner from (checks notes) 1986? Wow, that’s a long time ago. Still, I have a feeling a lot of my audience will get that gag immediately.
If you check, you’ll see that video has nearly 1.8 BILLION views. That’s billion with a B. Whoa. No harm in adding a few more, I guess.
Are you going?
What the heck, let’s get even older. Are they referring to the Simon and Garfunkel song from 1965, or maybe the original song from (at least) 1670? Or maybe the fair itself, which is even older?
Now try getting that out of your head. At least it replaced Take On Me.
Finally, Cats
I had to stare at it for a while. Have fun.
Have a great week everybody!
The video version of this newsletter will be on the Tales from the jar side YouTube channel tomorrow.
Last week:
Practical AI Tools for Java Developers, an NFJS virtual workshop
Gradle, private class
Software Design, my course for undergrads at Trinity College
Northern Virginia Software Symposium (NFJS)
This week:
Latest Features in Java, an NFJS Virtual Workshop. I’ll be updating that for Java 21.
Software Design, my course for undergrads at Trinity College