Transferred the pork butt to the Big Green Egg after 20 hours in Sous Vide. Time for the finish smoke at 280 for 2-2.5 hours. Reducing the liquid from Sous Vide bag to add back to pulled pork.

“A good newsletter is usually:

  1. Consistent in frequency
  2. Consistent in format
  3. Endlessly repeatable with new content.” — Austin Kleon

First Peloton FTP Test

I did my first Functional Threshold Power test today. This is a good way to measure my fitness progress over time. Peloton doesn’t advertise it much, but they have some great built-in capabilities for power. After you do an FTP test ride for example, the bike automatically prompts you to store your average wattage and then in all rides going forward you get a realtime power meter that is customized to you.

There is no good or bad for this. I did struggle with holding my power over the course of the 20 minute test. I felt pretty spent by the time it got to the last exertion level.

The heart rate graph is a little off. I’m using mPaceline for this and it has my Max HR a little higher than it should be. The main thing I took away from HR was that I was giving it my full effort. I also think my HR was higher than it should have been for the Zone 4 and 5 sections.

I’m going to do one of these tests every 6-12 weeks to check-in on progress.

First time doing a pork butt using Sous Vide. Pork will cook at 165 in the water bath for 20 hours and will finish with a 2 hour smoke on the Big Green Egg tomorrow. Following Serious Eats directions. 🔥

Unemployment from pandemic.

I am so excited to hear that Bundesliga is resuming the season! Tyler and I will be cheering for Bayern on May 17th! ⚽️

Tracking Pre-meal and Post-meal Hunger Level

I’ve been tracking my food using Ate. One of my favorite features in Ate is that you can setup questions to answer about the meals, and tracking pre-meal and post-meal hunger level is useful information to me. However, I didn’t like the options so I made this set of options combined with fun emoji that work really well for me. I have the same options for a pre-meal and post-meal question.

0 - Lost hunger 😶
1 - Irritable 😠
2 - Hungry 👍
3 - Satisfied 👍
4 - Full 👍
5 - Sluggish 😒
6 - Stuffed 😟

The goal is to stay in the 👍 values.

The Importance, Accessibility, and Inclusivity of Connecting Online

We have all shifted quickly to online platforms for many of our interactions. It is easy to see some of the challenges with this. Technical barriers. Cognitive confusion leading to “zoom fatigue”. There are also some powerful benefits online that were not as obvious before.

Work

For “knowledge workers,” most everyone is doing their work distributed, and I have noticed an equalizing aspect to it. The two dimensions that I see the most are geography differences being lessened, and more balance between those that are outgoing versus more introverted. When everyone you work with is in an equally sized video frame right in front of you, geography is only notable to the extent that it may be evening where they are and morning for you. I’ve had many team members share with me that they have never felt more connected with the members of our various offices. And perhaps more powerfully, our team members in other offices have felt like they can contribute and engage better with the rest of the teams.

This reinforces one of my beliefs about remote versus centralized teams that it is hardest to do both. Fully remote is a considerable leveler, and everyone will have to accommodate. Entirely local is the default that humans have used for millennia. The tricky part is doing both. My hope is that we can take the learnings developed during this pandemic and apply it to improvements and empathy going forward to keep these benefits in place.

Large group gatherings have also surprised me online. They work very well, as long as you keep the time short. And one of my favorite parts is that you can successfully engage in Q&A with the audience. I’ve held team all-hands meetings for decades, and I long ago decided to not open up time for Q&A because the chances of someone asking a question were near nil. The social dynamics of being that one person in a room of 250 that stands up with a question are just too challenging for most individuals to navigate. Online tools though by necessity must create a feature to do this. They have to enable it. And in doing so, they remove the barriers that inhibit people. I’ve found much more engagement than I’ve ever seen in in-person large group meetings.

mini minnebar

Last weekend was supposed to be the annual Minnebar unconference. Minnebar is one of my favorite events of the year. Over 1,000 technologists, collecting around community-led topics with about 70 sessions throughout the day. Minnestar, the non-profit behind the Minnebar, pivoted online and held mini Minnebar and I thought it was great!

The event was hosted on Crowdcast, and it was impressive. The event had a single track, versus multiple parallel sessions as it usually has. That was just fine to me, and it made me think that there could be five or six events like this throughout the year and get the same quantity of content to an even broader audience.

However, the big win to me was opening the event to a broader geography. One of the sessions I realized my brother would like. He lives three hours away and would usually never be able to attend Minnebar. But since it was online, I sent him the link, and he was on in 5 minutes. The event drew people from around the state. Minnestar has debated for years about how to reach people outside of the metro area. I know from dozens of board conversations. We considered for years bringing our events to other cities, but getting them online and opening up globally brought the program there. There was even a person from Turkey who attended Minnebar!

I also felt a lot of energy from the event. It hit me how important it was that the event happen, in some form. I needed the connection to the technology community to still be there. It was so great to see comments in the stream from friends and give a 👋 to them. It filled my day with energy to connect and so what if we couldn’t do it in person with happy hour, we still did it. It reminded me how vital these connections are, and we all must forge ahead.

A New Way to Mourn

My last observation on this topic is from an episode of the Daily called A New Way to Mourn. I highly recommend listening to this. It is a touching story with a powerful message. In short, this highlights that many funerals are being queued into the future. “We will get together to remember Bob when we can connect as a community.” There is a massive problem with this. These are essential rituals and are vital to loved ones and friends going through the mourning process. Deferring them to some unknown future date is going to cause significant problems.

This story about mourning and celebrating a departed loved one online is incredible. And again, I note the accessibility component. Some people can’t travel for various reasons and may be unable to attend a traditional funeral ceremony. Typically they would be excluded from this critical aspect of the mourning process. Hosting a visitation and funeral over Zoom opens up new avenues and accessibility for loved ones to be part of the process.

Playing with mPaceline to see longer term trends in my Peloton bike work. Love this graph showing that I’m generating more power for same heart rate. 🚴🏼‍♂️ #FitByFifty

Lemon Drop Martinis for Cinco de Mayo! 🇲🇽 🍋 🍸

The graphs that mPaceline makes from your Peloton bike rides are pretty impressive. I am looking for ways to track progress over longer time periods. #FitByFifty

The Tetris Shower that we did over a decade ago is still one of my favorite home projects we’ve done. 🤓

Lucky and I on the pontoon.

Boat Day! Beautiful morning to get the pontoon from storage. Heading up Cannon River to Wells Lake and finally to Cannon Lake! 🙌

Importing Jekyll site to micro.blog

I successfully migrated my blog archive from Jekyll to micro.blog. I haven’t seen much written about this, so let me share how I did it. This definitely requires a bit of hacking but the result worked very well. I followed the general pattern that Manton Reece shared in his Timetable migration to micro.blog post.

You can grab the code and use it as a starting point. The script won’t win any prizes for elegance, but it only needed to work once. Here is the Python code as well as the Jekyll template for JSONFeed that I used.

Get Content Ready

Technically Jekyll is just a collection of Markdown files and image assets. it seems like it should be easy. However, Jekyll markdown files all have a variety of Front Matter metadata that is only meaningful to Jekyll. You almost certainly have Liquid Tags in the content as well. So, let’s make Jekyll do the work of helping us out of its issues.

I already had a JSON Feed endpoint. I removed the post limit from it so it would generate a JSON Feed with all blog posts instead of just the most recent 10. I then told Jekyll to generate the site jekyll build and I was pretty much ready. I now had a full JSON Feed file with every blog post with no Liquid Tags either.

I didn’t want to bring categories or tags over, but if you did you could easily add that to the JSON Feed export and catch it in the import.

Content is in HTML

The JSON Feed file is great, but the content is in HTML and I need Markdown to give to micro.blog. Pandoc and pypandoc did an awesome job at this. I created a Python 3 script to open the JSON Feed file as a JSON object and then iterate through the posts. I used Pandoc to convert each content_html element into Markdown. Note I for sure would use Python 3 for the sensible handling of UTF-8.

This one line of code just made me gleeful.

md = pypandoc.convert_text(i['content_html'], 'md', format='html')

Images

Now that I had Markdown I was getting really close but I have thousands of linked images to import as well. I need to get the images uploaded to micro.blog, and then I need to update the URLs.

I created a regular expression (magic!) match to all image links that pointed to my own website. I could key this off a well defined path, /assets/. Since I was working out of a generated static site those images were all on the local file system so I parsed out the path from the URL, checked to make sure the file was found and uploaded it to micro.blog. I then used the generated URL returned from micro.blog to update the old one in the Markdown. Markdown made this a lot easier without all the HTML cruft.

urls = re.findall(r'(?:https://www.thingelstad.com)?(/assets/[\.\w\d\/\_\-]+)', md)

Testing if the file exists was a good validator. I found a few issues with my regular expression and a couple of badly formatted blog posts that failed and was able to fix the formatting before importing. Also, since I only needed to run this once for some of the issues it was easier to fix the JSON Feed source instead of coding around it.

Import!

With all posts successfully converting via Pandoc, and all images matching on the file system, I ran the script with a polite sleep(2) wait in the loop to make things easier for micro.blog servers and it all worked like a charm. Imported over 1,600 posts and 800MB of images.

I still have broken links internally. I don’t think there would be any way for me to fix internal links between posts because everything is changing for those, but I’ll use Integrity to scan for broken internal links and fix them manually.

Pandemic backyard barbershop tonight. Tammy did the honors. Number 1 plus. High and tight. USMC certified. Semper Fi! 💈

Tammy and the kids are so awesome — May Day baskets queued up for delivery to friends and family! 💐

Numskull Ms. PAC-MAN

Tammy loves Ms. PAC-MAN so we got her this Quarter Arcade version for her birthday. It is a perfect replica, small and light but very well built. It even has a battery so you can play it anywhere. The joystick is surprisingly good with solid feedback. The whole family has been having fun playing a quick game. 🕹

My Defiant One Fat Bike still puts a big smile on my face.

I was explaining TV dinners to my kids and the whole concept made no sense to them. I told them my favorite was Hungry-Man Dinners Turkey Dinner, the potatoes, and the cherry stuff. Related, I’ve figured out what I’m serving the next time it’s my turn to cook dinner! 😁