Wednesday, May 28, 2025

That's My Nephew! Ethan Orates, Graduates and Celebrates

I'm composing this as a very proud uncle. Last week we celebrated as our nephew Ethan graduated from the University of Maryland. He didn't just graduate with a degree in public policy, and minors in Law and Society and Geographic Information Science, he was elected to give the undergraduate student address at the Public Policy School's graduation.

You can watch him give his speech below. I'd say he knocked it out of the park. Shira and I couldn't have been more impressed.

We also cheered him on at the main commencement ceremony. The university made the, let's call it, bold decision to have Kermit the Frog as their main speaker. Yes, you read that right: the plan was to have a puppet address a football stadium full of grads, families and friends. Jim Henson was a UMD graduate, so a love for Kermit runs deep in the school.

I personally had my doubts that this was a wise decision. But, to Kermit and the school administrator's credit, it totally worked. Here's what we saw as Kermit gave his speech:

With Kermit's spot on voice, gesticulations and outfit, as well as our inability to see the puppeteer, the immersive experience truly held. Here's the stadium singing Rainbow Connection. You can see at the end, even my Dad was singing along.

We closed out the festivities on Sunday with a graduation party in the park. We ate cake, savored seeing family and friends and even had a little 2 on 2 basketball with my brothers and Ethan. I'm proud to say that nobody left the game with anything torn or sprained, so that was a nice bonus.

Ethan, we're so impressed with your accomplishments and are excited to cheer you on as you start your next chapter. As a wise frog once said, life's like a movie. write your own ending.

Tuesday, May 20, 2025

A Triple Crown Attempt and the YouTube API - Making Great Content Easier to Watch

Stella, of @StellaHikes, is attempting to complete a US long-distance hiking Calendar Year Triple Crown. That is, she's trying to hike the AT, PCT, and CDT--7,875 miles of trail--in one year. And she's bringing us along for the ride on her YouTube channel.

I'm only on day 8 of her attempt, but I'm really enjoying her video-a-day format. Stella's superpower is her honesty: she's willing to give us a behind-the-scenes look at her undertaking, warts and all.

The countless challenges she is facing on this adventure are classic. She needs to push for miles, but she also needs to give her body rest to avoid injury. She needs to carry as little as possible, but she also needs to have the gear to stay warm and the food to stay fueled. She needs to stay focused on the trail, but she also needs to capture and share her effort online. And the list goes on.

There are plenty of videos on the web that talk about how to solve these challenges. But in Stella's case, we get something far more rare: we learn by her example. She's showing, not telling, and to me that makes her video stream not just entertaining, but also an immensely valuable learning tool.

Easy to Enjoy, Hard to Watch

So I'm in! As long as Stella is on the trail, I want to follow along. Unfortunately, YouTube is far from the ideal platform for watching episodic content like Stella's daily videos.

For one thing, YouTube prioritizes new content, so it's pushing me to watch Day 65 when I'm still on Day 8.

And related to this, navigating YouTube to get to Day 8 is a minefield of distractions. On my way there, it's easy to get sucked into any number of other videos.

Ideally, YouTube would recognize that content like this is best consumed not as a traditional channel, but as a podcast. Podcast Addict, for example, seamlessly resumes where I left off, and is set up for distraction-free access. Whether I consume a podcast in days, months, or years, Podcast Addict will patiently queue up future content and wait for me to consume it at my own pace.

A bit of Googling turned up Podsync, an open-source platform for podcastifying YouTube content. Perfect, right? Unfortunately, tools like Podsync rely on extracting raw video from YouTube, before processing it and republishing it as a podcast. This is against YouTube's policies and not officially supported. Even if I could get Podsync running, it would remain a fragile solution that could stop working at any time.

An API, DIY Solution

All hope isn't lost. Using YouTube's API, I was able to rig up my own version of a watch queue that offers distraction-free access. Here's how I did it.

First, I created a new playlist called StellaHikes CYTC Watch Queue. I added the current video I was watching; Day 5 at the time.

Next, using youtubeassist (introduced here), I figured out Stella's uploads playlist.

$ youtubeassist -a channel -n StellaHikes -v |
  jq -r '.items[] |
  .contentDetails.relatedPlaylists.uploads'
UU_xoSErGgqXfYzpTFE1JDbg

The 'uploads' playlist is a bit of magic on YouTube. On one hand, it's a playlist like any other, so you can view it in the standard playlist player. On the other hand, it can't be manually maintained. YouTube automatically adds to it when a user uploads a video to their channel. While I have plenty to quibble about with YouTube, this implementation is pretty genius.

Next, I added a new option to youtubeassist: -a playlist-populate. This option grabs videos from a source playlist and adds them to a destination playlist. The command tries to be smart, taking the newest video in the destination playlist as a reference point. Only videos that are newer than this in the source playlist will be added.

This bit of logic ensures that new videos on @StellaHikes will be added to my watch queue, while those that I've already watched will be skipped.

Every so often I run this command to pull in more videos from Stella's channel to my watch queue:

$ youtubeassist -a playlist-populate -s UU_xoSErGgqXfYzpTFE1JDbg -d PLBuxEPZOHHKYytW39ZPXDRR6fan7ygCL9
UExCdXhFUFpPSEhLWXl0VzM5WlBYRFJSNmZhbjd5Z0NMOS42MjYzMTMyQjA0QURCN0JF|I wanted breakfast so bad! AT Day 66 CYTC
UExCdXhFUFpPSEhLWXl0VzM5WlBYRFJSNmZhbjd5Z0NMOS40MDNEMzA0QTBFRThFMzBE|Big climb in Massachusetts! AT Day 65 CYTC
UExCdXhFUFpPSEhLWXl0VzM5WlBYRFJSNmZhbjd5Z0NMOS42RTNCOEMxREI3Q0VDMjU2|It happened suddenly ⛈️ AT Day 64 CYTC

I've now solved half the dilemma: I have a playlist with the next video to watch at the top and new videos auto-added below.

This leaves the question of how to avoid distraction within YouTube. To address this, I visited the watch queue playlist in Chrome on my mobile phone:

Clicking on the three dots menu, I selected Add to Home Screen.

This put an icon on my phone's home screen that, when clicked, will launch YouTube's playlist viewer. At the top will be the video I'm currently watching.

This isn't as streamlined as a proper podcasting app, but it gives me a temptation-free way to jump right to where I left off watching.

Now all I have to do is sit back, watch, and root for Stella. C'mon girl, 136 miles down, 7,739 more miles to go! You got this!

Friday, May 09, 2025

G's Baltimore Adventure - Choo Choo! - Visiting the B & O Railroad Museum

[Composed 9/21/2024]

After a morning on the water, we made our way in-land to the B&O Railroad Museum. Between memories of admiring freight trains passing behind my grandparent's home in Chicago to a crude, but beloved model train setup in our basement when I was a kid, I've got more than a soft spot for trains. Fortunately, G shares the same love.

We visited the museum in the afternoon and didn't have a ton of time. But still, we climbed aboard and 'drove' every train we could. We marveled at engines of every size and time period, from decorative horse drawn affairs to towering diesel-electric monsters.

Touring the #C-2222 Bobber Caboose, aka, a little red caboose was a special treat. Inside we found a tiny house on wheels, serving as the crew's bathroom, bedroom, kitchen and office. G climbed up to the elevated bench seats and for the 1000th time that day, announced 'all aboard!' He's a natural! The little space was a study in efficiency and functionality.

Stepping into a C&O #725 Pullman passenger car, once lauded as "the most luxurious coach type cars that have ever been operated on the railroad," we were met with a most impressive sight: an HO scale model of the first B&O mainline. You can get a preview of model in action here. We loved admiring the details of the model, from the paths the different trains took, to the little vignettes of life along the tracks.

The grounds of the museum are so large, that we barely had time to put our eyes on most of the collection. In what felt like no time, the museum's 4pm closing time was upon us and we had to call it a day.

I'm definitely ready to go back and explore the museum in more detail. Next time I go, I'll have the museum's searchable catalog queued up on my phone, ready to go. I've been impressed that with just a few details, I'm able to pull up a whole story about an item in the museum's collection.

For example, consider this photo of us in front of this epic yellow engine:

Searching for 490 in the museum's catalog quickly brought me to this page, describing the C&O #490 Hudson. Despite its new age look, this bad boy is a steam engine built in 1926! It hauled passenger trains until 1953. So cool.

I'm pretty sure Shira's not going to have the patience for this level of Train Geekery, but a guy can dream.

Leaving the museum we headed back to DC where we dropped off a very, very tired G to his parents. We'd had an amazing adventure these last two days. I'm not quite sure how we're going to top this, but we're certainly going to try!