Tales from the jar side: My review of the new Taylor Swift album, and similar hard-hitting content you've come to expect from old software instructors
At my age, nobody cares about my opinions on popular music, and I respect that.
Welcome to Tales from the jar side, the Kousen IT newsletter, for the week of July 19 - 26, 2020. This week I was extremely busy, as I taught courses in Java Testing with JUnit 5, Basic Android, and Functional Java, all on the O’Reilly Learning Platform.
I also listened to folklore, the new Taylor Swift album. More about that below.
Android: When is emulator not emulator?
(NOTE: People not interested in Android development might want to skip this section.)
Most of my classes this week completed normally. The JUnit 5 course is always fun to teach, because I think the developers of the latest version did a great job and I like talking about it. It’s well documented and easy to understand. The only complication I had was that I’d included a single example of using JUnit 5 with the Mockito mocking framework, and that generated a ton of questions right at the end of the course. That’s fine, but was a bit of a distraction. I should have mentioned that I’m teaching an actual Mockito class this week, but I forgot. Hopefully the students who want it will discover that on their own.
The Functional Java course also went well, with the caveat that when the number of students goes above a certain threshold it becomes difficult to keep up with all the questions. The questions were good ones, and I don’t mind answering them, but that takes time and I have to remember not all the questions need to be addressed during the class. Sometimes they’re too much of a distraction, and I have to structure the response time.
The only real problem I had this week was with Android. I’ve talked in previous newsletters about my difficulties teaching Android these days, mostly related to the facts that:
The preferred language for Android development is now Kotlin, but almost all the students in the class only know Java.
Android is moving to a component model, known as Jetpack, and while that seems like a good idea, every change they make seems to add more code.
The Android SDK keeps changing at a rapid pace, so examples I worked out as recently as a few months ago start breaking when I update to the latest versions and I have to track down why.
That makes it tough to explain the basics of activities, intents, fragments, and so on in the time available, much less teach everybody a completely new language. My compromise is to stick to Java for the basics and then redo some of the simpler classes in Kotlin, and I barely get to any of the components before the end. (I did manage to use the new view binding this time, though I still prefer the Android extensions). It’s not a great solution, but it’s what I have at the moment.
The changing nature of Android caught me this time. I usually build an app that accesses a restful web service online and parses the result. Sometimes I use the excellent retrofit library. Sometimes I use just a simple GET request in Kotlin with the readText extension function on URL and wrap the call in a coroutine, which triggers another big discussion.
But this time, when I started up an emulator on my laptop, for some reason it refused to access the internet at all. That was weird. I’ve never had that problem before. Normally the emulator uses the same internet connection as the host environment, but this time it didn’t work.
A few months ago, at the beginning of the pandemic lock down, I had to replace my existing router (see this newsletter for the entertaining details). I got a much more powerful one, which works very well. I also invested in a long CAT6 ethernet cable which I stretched all the way around my office so my laptop could have a wired connection. That meant that I now don’t use a wifi connection on my laptop, and I eventually realized that may have been the problem.
Googling suggested that the difficulty was that I needed to go into my laptop settings and change my DNS entries. I was very reluctant to do that. Another answer was to start the emulator from the command line and provide an IP address this way:
> emulator -avd Pixel_XL_API_29 -dns-server 8.8.8.8
That seemed like a good idea, but when I did it I got the error:
PANIC: Missing emulator engine program for 'x86' CPU.
Wait, what? I’ve been teaching Android for many years and I’ve never seen that issue. It turns out that I was using the wrong emulator command, believe it or not. Sometime recently, the emulator command in the ~/Library/Android/sdk/tools directory was replaced with the same command in ~/Library/Android/sdk/emulator, and since the tools directory was in my path, I ran the wrong one. By switching to the other one, I was able to start an emulator and get online, though it made the fan on my laptop run constantly.
After the class I did some digging, and apparently this change happened a couple of years ago. I missed it, because I don’t normally run from the command line; I use Android Studio like everybody else. I still don’t know why the emulator I started from the IDE didn’t work, so I’m still puzzled, but at least now I have a work-around.
Such are the joys of Android development. It’s getting time for me to spend a couple weeks going through Mark Murphy’s latest books at commonsware again, which I happily subscribe to. I don’t know that there’s anything about my issue in there, but I didn’t even know I had an issue until this class, and I still don’t know what changed in Android Studio.
The students were kind enough about my difficulties, but I hate when that happens.
Interesting Tweets
Here are some of the interesting tweets, videos, and other resources I encountered this week.
On the anniversary of the Apollo 11 landing on the Moon:
Maybe they should have done another take when Neil Armstrong messed up his line.
I’m sure this tweet will come up again when my Managing Your Manager book is released (hopefully later this year):
From the “Yes, I’m still thinking about Hamilton” category:
The full “updated for 2020” verse was more like:
I’m never gonna take my (coronavirus vaccine) shot!
I’m never gonna take my shot!
I’m just like my country
I’m old, slow, and dumpty
I’m never gonna take my shot!
That got too depressing, so I let it go.
As a side-effect of watching Hamilton, I’ve been reading about the history of the American Revolution, and now I realize the Hamilton movie/musical bears about as much resemblance to actual events as the movie Amadeus does to the real life of Mozart. It’s way closer to reality than the movie 300, though, because anything would be.
That’s fine, of course. I’m still enjoying the music. Some day, and that day may never come, I’ll go an hour without one of the songs from the show playing in my head.
Speaking of real Hamilton history, this YouTube video was quite informative:
If you’re into Pi Day, this week included Pi Approximation Day:
“Failure is just success rounded down.” That’s both deep and deeply confusing, which is perfect for Dinosaur Comics.
(If you’ve never seen Dinosaur Comics, check it out. Every day has the exact same panels with only the dialog changed. It’s awesome.)
Finally, in the “You’re special for subscribing to my newsletter” category:
I followed up with:
That is, and always will be, true.
Upcoming User Group Talks
I saw recently on LinkedIn that my upcoming presentation Functional Programming in Java, Groovy, and Kotlin at the London Java Community group has been formally announced:
Get your (free) tickets here. I wish I could actually go to London for this, but I’ll settle for appearing there virtually.
I should mention I’ve made arrangements to speak on the same topic at the Utah Java Users Group in August (so I’ll have to switch up the examples and some of the topics) and I’m working out the details about speaking on JUnit 5 testing at the Nairobi JVM group soon. I’ll supply details on those as we get closer to them.
Taylor Swift’s pandemic album
I know what you’re all waiting for: the opinions of an old white male about current trends in popular music. So here at last is my review of folklore, the Taylor Swift album released this week. Yeah, I went there.
Title: folklore (lowercase apparently intentional)
Artist: Taylor Swift
Release date: July 24, 2020
Label: Republic Records
I intended to listen to it on Google Music, but since my account has already been migrated over to Yahoo Music, I had to switch over there. Sigh.
I found the songs to be calm, thoughtful, and relaxing, with nice harmonies. Not what I expected, because I only know Taylor Swift from her hits. The lyrics seemed solid as well, but I grew up a Paul McCartney fan, so I’m only vaguely aware of lyrics in general. All I ask is that the words more-or-less fit the music, and these did.
To be a bit more direct about the subjects she wrote about, at my age my concerns are different from those of most people in their twenties and thirties. I’ve already been through the challenges of finding a life partner (Hi Sweetie!), raising a family, finding the career I was meant to do, achieving a modicum of success, and dealing with failures along the way. I’ve been deeply in debt and I’ve been quite well off. I’ve been very happy and I’ve been seriously, even clinically, depressed. I’ve dealt with family issues that got resolved and some that never did. I’ve lost friends, both over “issues” and because they passed away. I am at a very good place in my life right now, but I’ve had enough bad times to make me appreciate the good ones.
So I don’t really expect a 30-year-old like Taylor Swift to have much to say to someone like me, but that’s fine. In fact, speaking of Paul McCartney, my biggest disappointment with his latest album (Egypt Station, released in 2018) is that he apparently had nothing to say. That made me sad. Swift, on the other hand, is clearly in a thoughtful mood these days, and I think she did a good job expressing herself.
I don’t mean to imply that young people can’t express universal truths. It’s just that most artists understandably talk about what they are going through at the moment, and a lot of that for me falls in the “been there, done that, got the T-shirt” category. I’ll have to listen again to see whether I missed a lot of depth in my first couple plays, and that’s very likely.
Grade: Seriously, you want me to assign a letter grade to music? I don’t even like grading school work, which is partly why I teach training classes rather than academic ones.
For the record (no pun intended), when I used to be an Adjunct Professor at Rensselaer at Hartford, my grading policy was very simple. I taught a course on “enterprise” software development about once a year. There were no tests, quizzes, or homework. Student came to class or not as they chose, though I tried to keep things interesting enough that they would benefit from being there.
Each student had to do a final project, however, for which they presented a written report and did a brief presentation during the last class. I brought the donuts and coffee. The minimum requirements were something like:
Talk to me about your project ahead of time, so I can keep you from trying to complete an entire thesis in a single semester.
Show you did something relevant to the class.
Demonstrate at least one use case that worked.
Show at least one use case that didn’t work, where you tried various approaches and learned a lot even if you couldn’t ultimately achieve what you wanted.
If you demonstrated that you learned something and you put in the hours, you got an A. If it was obvious you didn’t put in much effort, even if everything worked, you got a B, because it was important to me that you tried to do something you didn’t know how to do when you started. If it was obvious you didn’t do any work, you failed (and it mystified me that a couple people failed every year). That’s it. I gave out lots of A’s, since that was the default anyway, and the class was reasonably popular.
Conclusions (about the album — remember this is supposed to be a music review?): I liked it. I’ll probably keep playing it in the background while I’m working. It’s time to admit, however, that the only reason I’m talking about it here is as naked clickbait to get people to read my newsletter. If you read this far, I’m deeply sorry and promise not to do it again. Probably.
Actually, there’s one other reason: I thought it would be funny. The biggest laugh I ever got in a training course was when I was teaching Introduction to Java to a group of new hires. I was talking about the fact that Java separates primitives, like int, long, and double, from classes. “Java does include wrapper classes for each one,” I said, “like Integer, Long, Double, Tupac, Biggie…”
A couple of the millenials in the front row cracked up, which made the whole gag worthwhile. :) So enjoy this quasi-non-review, and for all you young people, get off my lawn!
(Unless you’re Taylor Swift, who is always welcome, especially if she feels like singing.)
Last week:
Java Testing with JUnit 5, on the O’Reilly Learning Platform
Basic Android, same
Functional Java, again same
This week (which is going to be nuts — I can’t believe I agreed to this):
Kotlin and Spring, on the O’Reilly Learning Platform
Managing Your Manager, same
What’s New In Java, same again
Mockito and the Hamcrest Matchers, same one more time
Four afternoons — help out with bootcamp for new developers; my sections involves Spring and Spring MVC