2020
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! π
Wasnβt expecting or trying, but surprised myself with a new 20-min spinning PR this morning on Peloton. ππ΄πΌββοΈ #FitByFifty
Our new office space in Kyiv, Ukraine is coming along nicely and will be ready for #TeamSPS when we are able to return to the office! The pandemic posed logistical issues but the project team managed through it.






We all watched Strike tonight. Fun and a little odd movie. Reminded us a little bit of Fantastic Mr. Fox.
We got takeout from Zettaβs tonight and thoroughly enjoyed the βsomewhat original flatbread sandwichesβ. I recommend checking this place out. The food is very tasty, very portable, and well suited to take out during social distancing. π
Extreme Sandbox Heavy Metal Drive-Thru
We joined my sister and her family for the Extreme Sandbox Heavy Metal Drive-Thru tonight. We had a fun time watching all the heavy equipment play. There were a lot of very excited little kids in attendance honking horns. π
Anderson Center Sculpture Garden
We visited the Anderson Center Sculpture Garden today in Red Wing. First time we had been there and it was a fun way to enjoy such a nice day.
We had a nice easy hike along the Cannon River by Red Wing today. We also got delicious pizza at Red Wing Brewing and pie at Stockholm Pie in Red Wing. Fun day trip to Red Wing.
Another great Peloton spin class with fellow #TeamSPS members this morning β 30 min 80s Rock Ride! #FitByFifty π΄ββοΈ
It turns out micro.blog is a pretty excellent live blogging solution. If you use the website you can append repeatedly to a post and just hit publish whenever you want to update. Open another tab for uploading photos and you can do that as well. The post is updated within a few seconds of hitting update. π
I wonder if you could pop a little Javascript into the post to automatically reload the post page every couple of minutes. π€
(mini) Minnebar
Attending (mini) Minnebar this morning, the very first online Minnebar! It is awesome to see minnestar pivoting to further its mission during the Covid-19 pandemic. π
Dan Lew’s opening session on “What Tech Can Do About Climate Change” was a great way to get started.
Of course very proud that SPS Commerce is a terabyte supporter! π
This is my first time using Crowdcast and the experience is very good. π
Joe Karlsson with “An Introduction To IoT (Internet of Toilets π½); Or How I Built an IoT Kitty Litter Box Using JavaScript”. Fun to see the interesting projects he’s doing. Predicts we will see this continuing to grow. For sure! π
Having Minnebar online is an interesting tradeoff. Something I could never do that I just did, was send the link to a number of friends, none in the Twin Cities, and suggest they sign on. There is a big inclusivity win with events moving online. π€
Kisha Delain with “Pair programming: Supporting Your Jr Devs Right”. It is so great to see #TeamSPS presenting at Minnebar! Kisha brought some great observations on what works to make pairing work well, which is one of the most critical ways that developers learn. π»
It is interesting to me that online events tend to have a structured method for facilitating Q&A from the audience. This is one of the things that seems to work way better in online events. Asking questions in an auditorium with 500 people is almost always a bust.
β¦ due to other commitments I had to cut out after the first three talks. I really enjoyed this Minnebar and can’t wait to see the next iterations of events from minnestar like this! They even made the playlist available if you dug the tunes! πΆ
See also Minnebar collection.