Scala, Java, Unix, MacOS tutorials (page 1)

In this article I show how to write a WebSocket server using the Play Framework and Scala. My goal is to create the simplest possible WebSocket server so you can see how the basics work.

To demonstrate the WebSocket server I also created an HTML/JavaScript client. It isn’t quite as simple as the server, but I decided to keep some extra code in the client in case you have problems and need some debugging help.

I’m not a big fan of how Bill Gates made his money, but I applaud his call for a nationwide shutdown of the United States to deal with the coronavirus.

As I’ve written before, the President of the United States needs to order a nationwide shutdown. Anything else is just going to prolong how long and how hard we have to deal with the coronavirus, and how many deaths there will be. As I posted before, dealing with this on a state-by-state basis is like having a “peeing section” in a swimming pool. We are, after all, “One Nation Under God.”

You can read more of Mr. Gates’ comments at this Business Insider short story, which has a link to his paywall-blocked op-ed on the Washington Post.

Bill Gates says the U.S. needs a nationwide coronavirus shutdown

As a brief note to self, I currently have a situation where I have about ten shell scripts, and each script uses the same jar file, but I keep changing the version number of that jar file each time I have a new release of my Static Drupal application. For example, my current jar file has this name:


So to keep all of those shell scripts using the correct, current version of my jar file, I created a file named VERSION that has this version variable:


Then in my other shell script files, the first thing I do is “source” that file to get the version variable into those other shell scripts. One of the first lines in my ten shell scripts looks like this:


By doing this, I now only have to change the version number in that first file, and it’s automatically picked up in all of my other shell scripts.

After my previous post about electing people who don’t believe in science, I came across this post about having a “peeing section” in a swimming pool that sums up my feelings about not having a nationwide lockdown.

We are, after all, “One nation under God.”

Not having a nationwide lockdown, and a “peeing section” in a swimming pool

I don’t even know who the My Pillow guy is, but when I saw this image I thought, the United States picked a horrible time to elect people who don’t believe in science.

That the entire nation isn’t under lockdown at the same time is one of the dumbest things I can imagine at a time like this. Not locking everyone down means the coronavirus is going to go on longer, and more people will get sick and die.

The U.S. picked a horrible time to elect people who don’t believe in science

I never met Carl Quinn in person, but I knew of his work. I just read that he passed away from the Coronavirus/Covid-19.

Carl Quinn, software developer, passes away from the Coronavirus

The following is a definition of equanimity, and how equanimity differs from indifference or apathy. The entire quote comes from Shinzen Young:

“Many people get confused about what equanimity is and what it isn’t. Here are some examples that may help clarify.

Equanimity can be deepened by relaxing tension around pain, such as the pain of a broken leg. But equanimity does not mean that you don’t care about getting proper medical attention, such as getting a cast.

Equanimity means opening up to angry sensations that may arise during an argument. But equanimity does not mean that you should stay in a bad relationship.

Ugh, afternoon naps are the worst. I was feeling pretty out of it today, so I decided to lay down, and quickly fell asleep.

When I wake up I hear some children playing outside. I listen to them talk and laugh for a little while, and a thought comes to me that there are more children living here than there used to be. But I like hearing their voices; I'm glad it’s sunny out, and that they’re happy and playing.

The nap seems to be over, so I try to get out of bed — but I can’t move anything. Something is wrong. Very wrong. I’m groggy, and feel extremely heavy. My left arm won’t move. I panic. A woman comes over and I ask her to help me, reaching up weakly with my right arm. I black out or fall back to sleep.

I wake up again, but as I try to move I realize I still can’t move much. My head moves, maybe my right arm, too. Have I been drugged? Am I paralyzed? This time I’m determined to get up, and then manage to fall out of bed and onto the floor. I lay there, face down, with my left arm pinned under my body. I really can’t move ... what’s going on?

Here’s another view of that bright star that’s due west over the Rocky Mountains, as seen from my tiny apartment in Broomfield, Colorado.

The west star over the Rocky Mountains

A great thing about living in this area of Colorado is that there’s a bright star that shines due west over the Rocky Mountains. Every night I open up the shades so I can see it. The only thing that’s on my bucket list is to spend as much time as possible in the mountains to see all of stars up close.

The star is the white dot in the center and bottom one-third of the image, above the roof. It looks more impressive in person. The big white blob in the upper-left is the Moon.

The bright star due west over the Rocky Mountains

“I wish it need not have happened in my time,” said Frodo.

“So do I,” said Gandalf, “and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us.”

“To be a programmer is to develop a carefully managed relationship with error. There’s no getting around it. You either make your accommodations with failure, or the work will become intolerable.”

~ Ellen Ullman (via this tweet)

This quote makes me think of all those years of exception-handling with Java. I never knew there was a better way to handle errors, so I developed a strategy of letting my exceptions bubble up to the controller level (as in model/view/controller), where I would deal with them. These days I know I can use Option/Some/None in Scala, as well as Try/Success/Failure.

I was writing some Scala code like this today:

val sb = new StringBuilder
for (b: Byte <- mdOut.digest) {
    val hexString: String = String.format("%02x", b)

and encountered this error message:

Under Your Scars by Godsmack is today’s song of the day:

And everything feels broken
When you’re not next to me
Would you still be you
If we weren’t we

Remember all those people having a good time on the beach in Ft. Lauderdale a few weeks ago? According to their cellphones, this is where they went when they left the beach.

~ image comes from this video

Where the spring breakers went after Ft. Lauderdale (Coronavirus 2020)

I can’t find the original source of this image and product, but I have always liked the “Live Brave” saying, which I first heard on the excellent Eli Stone tv series (which stars Johnny Lee Miller, who may be more well known for the movie Hackers and of course, Elementary).

Live Brave bracelet

While this photo looks like a sunset, it was actually a sunrise. I took it in Virginia Beach on April 17, 2017.

Dark sunrise, Virginia Beach

Last week I finished writing some Scala code to convert this website from using Drupal 8 to using static web pages. Technically what happens is that I use Drupal at a different location, and then my Scala code reads the Drupal database and uses to the Twirl template system — that comes with the Play Framework — to convert that data into the static HTML pages you see here.

Along the way I learned a lot about the 2020 version of Twirl templates, so I thought I’d share some tips and examples about how to do things with Twirl. If you ever want to use Twirl in standalone mode like I did, or inside the Play Framework, I hope this is helpful.

If karma is defined as “cause and effect,” here’s a little karma of the last 4-5 months:

  • In early November, 2019, I suddenly started having severe chest pain.
  • I happened to be standing next to my computer, so I quickly disabled comments on In case this was something I couldn’t come back from, I didn’t want other people to have to worry about dealing with those.
  • (At the hospital I would find out this was pericarditis, i.e., inflammation around the heart.)
  • Over time I realized that “no comments” meant less stress and less work, so I kept them turned off.
  • One day I realized that if I was going to keep comments turned off, there was no reason to serve pages dynamically with Drupal 8 any more.
  • I took a week to write some Scala scripts to convert Drupal 8 blog content to static web pages.
  • My server CPU use has dropped significantly, so I can reduce my server costs by about $400/year.

Dr. Foreman: The kid was just taking his calculus exam when all of a sudden he got nauseous and disoriented.

Dr. House: That’s the way calculus presents.