Tales from the jar side: Going viral, USB-C connectors FTW, More about async streaming, and the usual tweets and toots
What kind of car does a Jedi youngling play with? A Toy-Yoda. (rimshot, and a wince. You have my most profound apologies for that one)
Welcome, fellow jarheads, to Tales from the jar side, the Kousen IT newsletter, for the week of July 14, 2024. This week I taught my Integrating AI into Java course on the O’Reilly Learning Platform and my Functional Java course as an NFJS Virtual Workshop.
Regular readers of, listeners to, and 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.
Going Viral
My friend Jonathan Johnson also lives in Connecticut. (I’d link to him, but there are about 2 billion Jonathan Johnson’s online and I don’t know which one he is.) That’s pretty cool, as it feels like I have lots of friends who I only know online or see at conferences when I travel. Jonathan is a fellow speaker on the NFJS tour, which is even more unusual since there aren’t that many of us left. I suppose he might say he’s a former speaker on the tour, given how much he scaled back once he joined the faculty at Trinity College in Hartford.
As I’ve mentioned here before, his joining Trinity ultimately led to me joining as well, which I announced on LinkedIn this week.
Jonathan invited me to visit one of his classes in the Spring of 2023, and one thing led to another after that. I wound up teaching there last Fall (2023) and this Spring (2024), and starting this month now I’m on the faculty full time.
That’s not why I’m bringing all this up, however. Jonathan has a knack for finding interesting places for us to meet. He lives down in the New Haven area, and I’m in the thriving metropolis of Marlborough, CT (not to be confused with the almost-like-a-real-city Marlborough, MA), and that puts us about an hour apart. That means we try to find places somewhere in the middle to meet every now and then.
Last year he recommended Two Wrasslin’ Cats, basically a coffeehouse in tiny East Haddam, CT. Even their website refers to East Haddam as “the bucolic community of,” and that’s about right. The kitties (as we refer to it) is a very welcoming place, where they have taken the cat theme and run with it to ridiculous extremes. There are cat pictures and cat paraphernalia everywhere. Take a look at their photo gallery for a sense of the place.
I only have this one picture I took, which I sent to my wife because I knew she’d love the place:
My photos app says I took this last August. I brought my wife there soon after, and we’ve gone several times since. When we go, she takes time to watch the free range (my term) kitties in their own room while we have lunch.
Jonathan and I met for lunch there on Friday this week, and the owner, Mark, had a story. It turns out that while the place is reasonably well known, early this week it appeared on a TikTok video that went viral:
I know TikTok videos are short, but this one is only 7 seconds long. The surprising thing, however, is that it has 1.1 million views.
That’s a lot. The creator, @graceandbalance, has only 594 followers, and most of the rest of her videos have a few hundred views. This one, however, went nuts.
Why? I imagine she’s probably wondering that herself. I have no idea. All I can say is that after it hit, the coffeehouse became a lot more crowded as tons of people wanted to see and experience it. Nobody was more surprised at the influx of new people than Mark, who suddenly was flooded with customers.
I experienced a very tiny sense of going viral like that this week. My Tales from the jar side YouTube channel passed 2000 subscribers:
That was pretty cool, but again not the real story. Last Sunday, after I sent out the newsletter, I completed a new video for the channel entitled Ranking Java Features Added from Versions 8 to 21.
Tier list videos tend to do well, which is partly why I decided to do one. I also have, shall we say, opinions about the various Java features, and this was a convenient way to express them. Finally, next week I’m headed to UberConf, where I’m teaching a whole-day workshop in upgrading to the last Java features, so I really wanted to get this particular video out before that.
Imagine my surprise when the video started getting views right away. Nothing like those 1 million+ on the TikTok video, but for me, it got a lot, as today’s analytics show:
I have some videos with more views than that, but they took the better part of a year to get there. This video hasn’t even been up a week yet. See that light grey band along the bottom of that figure? That’s labeled “Typical performance,” and it’s pretty much noise. You can see that out of the almost 1200 views the video has gotten, that number is about 1000 more than one of my videos normally gets in the same time frame.
Well, okay then. I’m happy about it, though it’s such an outlier I’m not sure what to think. I assume it’s the combination of a good topic and a good thumbnail. I may never hit on that again. But still, it’s been fun to watch the view numbers go up. Sure, it’s only about a thousand, but for me, that’s what going viral looks like.
It’ll be tough when my next video goes back to 50 views in a week.
Making Connections
A couple weeks ago I ordered a new toy: an Elgato Prompter.
I didn’t really need a teleprompter, but this one acts also as an additional monitor as well. I was able to put my webcam in the back of it, meaning I can drag Zoom calls onto it, so when I look at the people in the call, I’m also looking at the camera. That’s really nice, and for a combination monitor / prompter, the price was reasonable. Several people who evaluate products really liked it, so I went and ordered it.
Unfortunately, it didn’t work. I tried everything. I watched all the videos made by people who had connection problems, especially on a Mac, and no matter what I did, the prompter would connect and then shut down. It never showed up as a display on my laptop. I went back and forth with support several times and got nowhere.
I suspected what the problem might be. The prompter ships with a cable for attaching to your machine, and that cable is USB-C on the prompter end and USB-A on the other side. I don’t know if you’re aware, but Macbook Pros haven’t had USB-A connections for years. I attached it through a tiny adapter, and while I figured that was probably the source of the problem, I wanted to use the cable they sent me. They kept emphasizing how important it was to do that.
I was one step away from giving up and sending it back when I decided to try something else. I removed their cable and found one of my own, USB-C on both ends, that was currently plugged into a power supply. I attached one end to the prompter and plugged it into my MBP, and voilá! It came up immediately, and it has worked perfectly ever since.
I did express my frustration to Elgato support that if they want to support Macs, they really needed to ship cables that work with Macs. I also added that suggestion as a feature request. But the bottom line is that it’s all working, and I’ll be using it from now on.
Async Requests, Revisited
The last two newsletters have included sections about how I accessed an AI service in its streaming mode, meaning you get back responses a few words at a time.
It always reminds me of how movie makers in the 70s thought computers would be like:
What is that, 400 baud? If figures the computer in Logan’s Run would be on a slow dial-up line. Of course, the best part is that when it can’t get an answer it can accept, it destroys itself.
(Insert your own, “You can’t handle the truth!” joke from A Few Good Men here.)
As we now know, AI tools are more than happy to accept contradictions and are just as happy to introduce them. After all, they’re trained on the internet.
(Oh, the horror. I just checked, and Peter Ustinov, who plays the “Old Man” (seriously, that’s his character’s name) in the movie, was born in 1921. Logan’s Run was released in 1976. That means he was 55 years old when the movie came out. That ANCIENT OLD MAN was significantly younger in the movie than I am now. Whoa. I guess compared to a population in their 20s made him look old, but come on. I just took a job that will make me interact with kids in their 20s all the time, and I suppose that will make me feel old, too, but not “the Old Man in Logan’s Run” old. At least I hope not. Of course, Michael York (who played a 26 year old Logan in the movie, even though he was 33) is way older now than the Old Man was, too, but I never hear him complaining about it, so I guess I should move on.)
Getting back to my point, this week I added an example of how to manage streaming output from an AI tool, but I knew it wasn’t quite right. So I went at it again, and wound up dealing with Flux
and Mono
from Project Reactor, which I know from reactive Spring. Then I played with Flow.Publisher
and Flow.Subscriber
in the Java libraries and finally had a reason to make my own subscriber. In all cases, that involved conversations with Anthropic’s Claude AI tool, and while you have to watch that thing like a hawk, the end result was very productive.
I’ll spare you the details, but let’s say I learned a lot about about publishers and subscribers and completable futures and all that, which I’ll probably make a video about at some point.
(I just told GPT-4o that “There is no sanctuary!” and it responded: “It sounds like you're referencing a famous line from the movie *Logan's Run*, which captures the dystopian theme of the story where a futuristic society strictly controls its population. The phrase suggests that there's no place to hide or escape from the system's oppressive control. Is there a specific context or topic you'd like to discuss in relation to this quote?”)
No, the world these days is quite dystopian enough, thank you very much. Let’s go to the tweets and toots.
Tweets and Toots
Null Pointers
Here’s the direct link to that post, in case you want to see the pictures. They’re from our performance at Devnexus back in April, which was really fun.
Bad Takes are the Mind Killer
Very clever.
Paywalled
I can’t believe that never occurred to me.
Picard Album
I’d listen to that.
Take the blue toy
Remember: I’m only promising the squeak. Nothing more.
Non-compliant
I have a few cool friends like that.
The meme continues
These aren’t the AIs you’re looking for. Move along.
Stonehenge
Reminds me of one of my favorite XKCD cartoons, whose caption went something like:
And the 92nd pig built his house out of depleted Uranium, and the wolf was like, “Dude!”
Roomba names
It’s almost worth getting a Roomba just to name it one of those.
Can you tell me?
I asked GPT-4o, but the answer was about as unhelpful as you’d expect.
Are you calling me?
Long way to go for that Dad joke, but it was worth it.
Have a great week, everybody!
Last week:
Integrating AI in Java Projects, on the O’Reilly Learning Platform
Modern Java Functional Programming, an NFJS Virtual Workshop
This week:
UberConf, in Denver. I have several talks, and it will be fun to see my friends again.