November 22, 2019

Kyiv Photowalk

I spent the week in Kyiv, Ukraine visiting the SPS team there. I got to travel with three colleagues, including two that had never been there. We went for a long walk on Sunday night and I decided to treat it a bit like a photowalk.

Saint Sophia Cathedral Entrance

Saint Sophia Cathedral

Opera House

Golden Gate

St. Michael’s Cathedral

Russia Friend

People’s Friendship Arch


New and Old Walking Bridges

Purple Bridge

Giant Ferris wheel

Everything Is Same

October 5, 2019

We made a quick stop today at a fairly busy store in South Minneapolis and when we got out I decided it would be fun to try the new Come to me” feature that Tesla shipped in v10. I found a spot on the sidewalk where I could clearly see my car. There were a lot of people walking around and three cars backing out with others coming into their spots. I waited a moment for things to calm down and then press and held the Come to me” button on my phone.

The Tesla Model 3 lit up and then backed out of it’s parking spot. It then stopped, turned the wheels, and started down the parking lot headed towards me. Then a couple were walking through the lane and I lifted up on the button which stopped the car immediately. Then two cars came down the lane and were behind my now driverless car. Then more people came, and I tried to start the car back toward me but it wasn’t real sure what to do with all the people around.

Now here I am about 70 feet from my car, with it blocking everyone else, and nobody in it. So I quick ran down to the car to rescue it from it’s confusion. Lesson learned, only do this in a pretty calm parking lot.

June 29, 2019

Automatic Git Pushes with Gitwatch

I’ve been using to publish my websites for a while. Originally Blot only used Dropbox to manage content for your website, but it now supports git and that is my preference. One of the things I haven’t liked though is having to do git commands all the time as I do things on my blog. Then I found gitwatch and it is perfect for this use case.

Gitwatch watches a folder and anytime something changes it automatically commits it and optional pushes it to a remote. Using gitwatch I can set it running in the background and then do whatever I want with my website and it updates automatically in the background. Pretty great!

February 6, 2019

Book: Scale

Scale Book Cover

My book club just finished reading Scale: The Universal Laws of Growth, Innovation, Sustainability, and the Pace of Life in Organisms, Cities, Economies, and Companies by Geoffrey B. West. This was a dense book focused on the concept of scaling, in the abstract. The author did a lot of research and shows some surprising scaling views to look at different animals, cities, and even companies. He identifies some amazing correlations that show how entities scale.

I felt like this book was profound, and important. However I wasn’t sure how I would action any of it. 🤔

February 5, 2019

JSONFeed on Blot

I’ve been enjoying Blot a lot. I’ve enjoyed its approach to blogging. There is plenty of power there, and it’s dead simple to add new content. I’ve now moved most of my websites to Blot, and it supports RSS automatically, but I also wanted to support JSONFeed. When I tried to set that up I could not make it work. I hit a brick wall 🧱 with the Mustache templates that Blot provides, with no ability to safely encode HTML into JSON. I sent an email to David who runs Blot. He replied right away that he was going to add something to make this work. He sent me an email today to let me know he added a {{#encodeJSON}} capability. I plugged it into my view and it worked like a charm.

I’ve spent a bit of time making sure this template works as it should and I think I got it. If you would like to add support for JSONFeed to your Blot site, you can create a new view in a custom template, I used the name jsonfeed.json. Beware that you cannot use the same basename for two different views, so you cannot make feed.xml and feed.json for no good reason. For now, use a different name.

{ {{! First build the header for the feed. }}
  "version": "",
  "title": "{{#encodeJSON}}{{{title}}}{{/encodeJSON}}",
  "description": "{{#encodeJSON}}Feed for {{{title}}}{{/encodeJSON}}",
  "home_page_url": "{{{blogURL}}}",
  "feed_url": "{{{blogURL}}}/jsonfeed.json",
  "items": [
    { {{! Now create an entry for each post }}
      "id": "{{{blogURL}}}{{{url}}}",
      "title": "{{#encodeJSON}}{{{title}}}{{/encodeJSON}}",
      {{#summary}}"summary": "{{#encodeJSON}}{{{summary}}}{{/encodeJSON}}",{{/summary}}
      {{#thumbnail.large.url}}"image": "{{{blogURL}}}{{{thumbnail.large.url}}}",{{/thumbnail.large.url}}
      "content_html": "{{#encodeJSON}}{{#absoluteURLs}}{{{body}}}{{/absoluteURLs}}{{/encodeJSON}}",
      "date_published": "{{#formatDate}}YYYY-MM-DDTHH:mm:ssZ{{/formatDate}}",
      {{#metadata.externalurl}}"external_url": "{{{metadata.externalurl}}}",{{/metadata.externalurl}}
      "url": "{{{blogURL}}}{{{url}}}"

Once I got this setup Feedbin, which supports JSONFeed, was able to once again see my feeds and pulled in new content right away. It works great! Thanks to David for such a great service as Blot, and for adding this capability to support JSONFeed! 👏

February 2, 2019

Minnesota Kubb 2019 Winter Tournament

The Kubbchucks played our 8th annual Minnesota Kubb Winter Tournament this weekend. After a week of record cold temperatures we were treated to a fabulous day in the mid-30’s, nice sunshine and no wind. Perfect for winter Kubb!

Round Robin

We opened the round robin versus Team Dondante. This was their first tournament and we helped them with tournament rules. They were good players, but needed to work on their drilling technique. We took the match 2-0 and it went on way too long because we were able to close it out. We went very cold on our 8m and that makes for a long game, if you don’t lose.

We played the Free Agents next, serious Kubb talent here. We had an epic fail in our first game and left a field Kubb on our very first turn, throwing 4 batons at 2 Kubbs. The Free Agents then kindly put us out of our misery. We drug out the 2nd game for a good long time. We got to 8 Kubbs in play and went back and forth for about 20 minutes. Sadly we broke first and left a line, which resulted in the expected immediate loss. 0-2 on that match.

We finished the round robin versus The Four Old Guys, however there were only three of them. They had a good game, just lacked some consistency. We were never really at risk in these games, and closed out the match 0-2.


With a 2-1 record out of the round robin we went into the difficult end of the Round of 16.

We had to play Skol in the round of 16. Three monster Kubb players including Evan Fitzgerald. We didn’t stand a chance. On top of that, we played horribly. I don’t mind to lose, but our play was really sub-par. It took about 10 mins for them to put us away.

Free Agents, the team that we lost to in the round robin ended up winning the whole tournament.

We had a great day of Winter Kubb! 👍🏻

IMG 4552

IMG 4555

IMG 4562

IMG 4573

IMG 4575

IMG 4579

IMG 4581

IMG 4585

IMG 4565

IMG 4572

IMG 4591

January 27, 2019

Hack the Gap 2019

Hack the Gap hosted their 5th annual Hackathon for women and non-binary individuals this weekend. I was able to attend the demo event today where each team showcased what they created. There were cool ideas, with a lot of progress in such a short period of time.

Hack the Gap Voting Coin

The organizers kicked the demos off.

Hack the Gap Organizers


Securiosity Presenting

Security education for non-technical people. Built with React. They worked as a group to get the initial things running, then split into feature teams. Design friendly focus. Humaaans free and inclusive image library. Accessibility focused.

🏆 I put my voting coin in for this team. I liked their design and approach to security education.


whenIneedU Presenting

Helping people break out of episodes of anxiety or depression. Used JavaScript, Java, Android, Twilio. Sends personalized affirmations, relaxing activities, and helps you connect with friends and family. Watches your location and detect if you haven’t gone anywhere for a long time. Uses text messages to reach out and request connections on your behalf.

Ready Play

Ready Play Presenting

Help navigate family daycare, activities and camps for kids, focused on summer activities. Complexity around logistics, themes, and costs. Built using React.js and Elastic Search backend. Framework provided fast mocking, and allowed easy acquisition of real data.

Hack the Bra

Hack the Bra Presenting

Help with sizing and determining best fit for bras. Focusing on measurement for fit. Built with React.js. The BRA-culator” with video walk-through to guide you through measurement. Discovery, rapid prototyping and co-creation were the focus for the team. Not focusing on e-commerce, but instead education.

Make Friends Minnesota

Make Friends Minnesota Presenting

Connect the 5.6 million people in Minnesota. Meet people, make friends, and have fun. Recommends friends. Focused on starting connections safe and easy. Uses Facebook for login. Builds a profile using an interest survey. Built using Node and Express with EJS templating engine.

Seshat Swap

Seshat Swap Presenting

Making access to books written by people of color more accessible, focusing on very long hold times at the library. Try to get more access without having to purchase the book. Allow users to exchange, or indicate wish lists of books, in marginalized communities. Built with React with Firebase. Non-profit effort to pay for shipping costs. Sort of a virtual, crowd funded library.

Cat Flat

Cat Flat Presenting

Small, connected DIY cat shelter that detects health of the cat and provides shelter, warmth and a place for stray cats to stay safe. React app with Express server and SQL database. Particle Photon and Particle Cloud in cat shelter to run sensors. Node server to send data to the server. Revenue by selling the flats pre-made.

A bit to my surprise, I almost voted for this team. I really liked how they used the IoT stuff to make this a smart device.

Little Free Library

Little Free Library Presenting

Leveraging the existing library of micro-libraries. Largest predictor of kids reading levels is the quantity of books in the home. Goal is to make it possible to get 100 books in every home. Card catalog of free libraries close to you, with inventory capabilities to check out or indicate that you are going to keep it. Allow steward to manage their inventory.

Sweat Connect

Sweat Connect Presenting

Need a workout friend? Increase frequency and help friends with anxiety about going to the gym. Create profile and facilitate connecting with others to workout. Built with Angular 7, to allow for desktop and mobile. Gather specific data around your gym, time preferences and goals.

I think this team could have put a go-to-market strategy of partnering with gyms and offering a white-label version of their service.


Planet Presenting

Planning tools for coordinating gatherings. Event planning templates, collaborate on tasks, and good for discovery. Built React and Node. Google Maps for location.

Give Back

It makes me happy that we at SPS Commerce have been able to support Hack the Gap for a number of years now!

Hack the Gap 2019 Sponsor Board

January 22, 2019

Using API Credentials in Shortcuts

Shortcuts on iOS can do incredibly powerful things, and with a little bit of extra magic you can connect to most APIs as well. Pulling data from APIs, manipulating it, and extending your shortcuts is really powerful. However, you need to have a good way to manage the authentication tokens and secrets for those APIs.

Most Shortcuts I have seen use a Text variable and put the token in that variable. It’s then used throughout the Shortcut. This works, but it exposes problems if you share that Shortcut. It also has issues if you use the same API in multiple Shortcuts. You are now copying that token in numerous places.

Another approach that I prefer is to create Shortcuts that do nothing but return those tokens. You can then call those Shortcuts from another Shortcut to get the token. I prefix these Shortcuts with the prefix Secret”.

Then when I need to use an token for an API I call the Shortcut and then reference the magic variable returned from it. You can even hide the execution of that second Shortcut.

In addition to reuse, you also get other benefits from this approach. Your Secret Shortcut can have some logic. For example, I access Working Copy from Shortcuts and it does so with a local URL call, protected with a random key. That key is specific to each iOS device. So, rather than try to synchronize the keys I have the Secret shortcut return whatever key is right for the device that is running.

I do a similar thing with MailChimp’s API token that requires some encoding be applied to it.

I find this a better way to manage these secret tokens, get reuse, and make it easier to change them. 👍

January 11, 2019

Moving Day

Today the movers will be showing up to move all the big things to our new house! It’s been nearly 9 years since we last moved. It is the first time that our kids are part of the moving process, making it a completely new experience for them.

We have really loved this house and the neighborhood. It’s been a great 9 years, without any reservations.

Tammy and I have watched a couple of episodes of Tidying Up on Netflix. Marie Kondo takes a moment in the beginning of each episode to introduce herself to the house. It’s humorous to see the homeowners in each episode react to her meditatively sitting on the floor doing this. It seems both odd and entirely fitting to communicate with the house.

In my own way, I would like to send a message to our home for the last nine years on Morgan Ave. Thank you. You have been a great place for our family to grow, have fun, and be happy together.”

January 9, 2019

UGears Locomotive

Over the holidays I assembled the UGears Steam Locomotive moving model. It was my second UGears project. I assembled the Chronograph a couple years ago. UGears models are very intricate and the working gears, mostly driven my rubber bands, add a fun aspect to them.

The Chronograph was 107 parts and the Locomotive is four times more at 443. I found the Chronograph directions confusing numerous times. The Locomotive was much more complex, but UGears has vastly improved their manuals.

I made one mistake with the side panels, putting them on the wrong side and reversing the text. I realized too late and didn’t want to try and disassemble it to fix it.

The Locomotive has an impressive set of gears. I haven’t had great luck getting the rubber bad engine” to smoothly move the gears. You use a lot of candle wax as lubricant for the wooden gears, but mine catches too much to work reliably.

The coal car has doors that rise up when you move the lever on the side.

The doors that open and even a retractable ladder are nice details.

Here is the Locomotive sitting next to the Chronograph.