Rob Peck Observations on technology, leadership and life.

Some Thoughts On COVID-19

If you ask people over a certain age, they can always tell you where they were when they found out about 9/11.

I was a sophomore at Auburn, and my first class that day was at like 1pm, so I enjoyed the great collegiate tradition of sleeping in. Usually when I wake up the first thing I do is check my email. It’s still the first thing I do. That morning my inbox was full with messages on the fraternity mailing list, with things like “pray, a lot of people are dying today.” I turned on the TV just minutes before the first tower collapsed.

Stayed glued to the TV the rest of the day. News coverage was on every channel, even Discovery Channel. Class was cancelled. I went and filled up my car in case I needed to drive the 250 miles back home to Tennessee.

That evening I was in the SGA office in Foy Student Union folding thousands of little yellow ribbons for a very hastily organized memorial service on Samford lawn a few days later. We listened to President Bush’s speech on a small boombox in the office.

I feel like I have been living that day over and over again for the last two weeks.

Some Work From Home Tips For Your COVID-19 Isolation

I’ve been working from home occasionally for probably close to ten years now, and full-time for the last few months. Thanks to the COVID-19 pandemic, many more people are now getting to enjoy (I guess?) the privilege of working from their homes during the crisis.

If there is one thing that I hope comes out of this whole miserable period it is the understanding that there are a lot of people out there have jobs that really don’t need physical presence in an office building. And if they don’t need to be in an office, maybe they don’t need to live in an expensive city either. This could be the beginning of a whole new boom for small and mid-sized cities with affordable costs of living. Maybe you can afford a house after all! And maybe companies don’t need to lease out an expensive building in an expensive city, fill it to the brim with people in open floor plans or (even worse) hot-desking to do the work they need to do.

It’s an even bigger win for disabled and non-neurotypical people who often struggle to work in the modern knowledge workforce despite their skills. For people with autism, ADHD, and other related conditions, modern open offices or cubicles are a difficult work environment whereas the home environment may offer much more safety and control.

If this is your first time doing this, it may seem a bit odd, even naughty, to be working without commuting to an office building. With that in mind, I’ve put together a list of things I have observed over the years of working from home to help you get a feel for what this is like.

Migrating from SmartThings to Home Assistant

    I have been a SmartThings user for many years. The orginal reason was that, when we bought our current house in 2012, I wanted to turn the eave lights on at sunset and off a few hours later. After a short attempt to use Wifi-based Wemo switches, I settled on SmartThings and GE Z-Wave switches.

    I was so happy with it that I started putting them in more places. I added Kwikset SmartCode keypad locks and door sensors. I added more switches, like to turn on the garage overhead lights when the doors opened. I added sensors to monitor the temperature in the closet where I keep my server. And for many years this setup worked great.

    But over the last year, and especially since Samsung acquired SmartThings, I have become increasingly disillusioned with the SmartThings ecosystem. This last week, my disillusionment and frustration finally boiled over, and I migrated to a new platform.

    So why did I abandon SmartThings?

    Using Phinx Programmatically

    Phinx is a really cool database migration package that allows you to write changes to your database as code. It keeps track of which changes have been applied and allows you the option of rolling back if you hit an issue.

    All the documentation on Phinx describes a typical setup where you would run the phinx command to do your migrations. And that is all fine and good in most projects. But what happens if you are integrating Phinx into an existing project that already has a lot of the usual scaffolding in place?

    Archiving A Yahoo Group

    I’ve been on the Internet a long time, since the early to mid 1990s. And when you are on the Internet that long, you tend to leave a pretty long trail behind you. But over the years that trail gets overgrown as sites close, lists vanish, and machines crash. There is precious little left from those early years.

    One thing that has persisted to this time, despite being pretty heavily neglected over the years, is Yahoo Groups. Those who remember the first dot-com boom may remember that Yahoo Groups was not originally Yahoo Groups. It was eGroups, which Yahoo bought and merged into their own sprawling empire. eGroups basically made it possible for anyone to set up a mailing list without needing access to a listserv service.

    Well, it looks like the end has finally come for Yahoo Groups. Verizon, the new owner of the rotting corpse of Yahoo, has announced that all groups will disappear on December 14th. I was on tons of mailing lists during my early Internet years, and I would really like to archive and preserve those messages if I could. But how could I get them out of Yahoo?

    Solving CSSMERR_TP_CERT_EXPIRED error on OS X Installation

    I have an old iMac that has been sitting unused upstairs for awhile, that I decided to finally get rid of. Before putting it on Craigslist, like any good computer owner, I wiped the drives and went to reinstall the most recent version of OS X/macOS that this old machine would support. In this case, this was El Capitan.

    But when I went to install, I kept getting an error about the OS not being able to install. Popping the log window open, I found an entry called CSSMERR_TP_CERT_EXPIRED. This would seem to be a prime suspect.

    Better Sparkle Appcasts With Jekyll

    If you have done and OS X/macOS development, especially any that predated the Mac App Store, you are probably aware of Sparkle. Even if you haven’t done any development, you have probably used Sparkle because it was basically the de facto method of providing update functionality in Mac Apps, and even to this day is still widely used on many apps distributed outside the official App Store.

    Updates are distributed to applications by means of an “appcast”, an extension of the RSS specification containing information about updates. RSS itself is based on XML, which means you can build them just like you would build any other published document.

    The problem comes when you start having a lot of updates in an appcast. Maintaining a large file can become difficult. But fortunately, using Jekyll collections, we can generate a single appcast using multiple files that are much easier to maintain. And, as an added bonus, we can use that same data to generate a download and changelog page from the same data.

    Internal Auto-Renewing LetsEncrypt Certificates

    I have a well-documented obsession with pretty URLs, and this extends even to my internal home network. I have way too much stuff bouncing around in my head to have to remember IP addresses when a domain name is much easier to remember.

    LetsEncrypt launched to offer free SSL certificates to anyone, but the most crucial feature of their infrastructure, and one someone should have figured out before then, was scriptable automatically renewing certificates. Basically they validate you do in fact own the domain using automated methods, then issue you the new certificate. Thus, your certificates can be renewed on a schedule with no interaction from you.

    Traditionally, they have done this by placing a file in the webroot and looking for that file before issuing the certificate (see my earlier blog post about Zero Downtime nginx Letsencrypt Certificate Renewals Without the nginx Plugin for more detail about this.)

    But what happens when you want to issue an internal certificate? One for a service that is not accessible to the outside world, and thus, not visible using the webroot method? Well, it turns out there is a solution for that too!