Reading List

The most recent articles from a list of feeds I subscribe to.

Flash an AirGradient ONE from the Command Line

I’ve purchased two AirGradient ONE indoor quality monitors to measure air quality in my home. AirGradient devices are open-source, so you can flash your own custom firmware and collect your air data locally rather than sending it to AirGradient’s proprietary cloud dashboard.

I keep an AirGradient ONE air quality monitor in my office to measure CO2 and pollution.

The existing documentation for flashing firmware requires you to use the Arduino IDE, a clunky GUI program:

Refactoring English: Month 8

New here?

Hi, I’m Michael. I’m a software developer and founder of small, indie tech businesses. I’m currently working on a book called Refactoring English: Effective Writing for Software Developers.

Every month, I publish a retrospective like this one to share how things are going with my book and my professional life overall.

Highlights

  • I find that not every reader who purchases early access to my book wants to give me feedback about rough drafts.
  • I figure out where all my time is going and think of ways to minimize time drains.
  • I spend 10 hours reimplementing a web app from scratch that originally took me 300 hours to build.
  • I continue to learn functional programming with Gleam, but I might be cheating.

Goal grades

At the start of each month, I declare what I’d like to accomplish. Here’s how I did against those goals:

Migrating a ZFS pool from RAIDZ1 to RAIDZ2

I recently upgraded my home TrueNAS server and migrated 18 TB of data from a 4-disk RAIDZ1 ZFS pool to a new RAIDZ2 pool.

The neat part is that I did it with only three additional 8 TB disks and never transferred my data to external storage.

Upgrading from RAIDZ1 to RAIDZ2 without moving data to external storage is tricky because:

Refactoring English: Month 7

Highlights

  • I look for ways to limit the number of half-complete tasks I’m juggling.
  • I brainstorm ways to talk with more of my early readers.
  • I have trouble accepting a design decision in the Gleam language.

Goal grades

At the start of each month, I declare what I’d like to accomplish. Here’s how I did against those goals:

Offer a lower-friction way for users to pre-order my book

  • Result: Switched from Kickstarter pre-orders to Stripe payment links.
  • Grade: A

I ran the initial pre-sale through Kickstarter, so I decided to just stick with it for subsequent pre-orders. After a couple of months, I realized Kickstarter requires customers to create an account to buy the book, which adds a lot of friction and discourages people from buying.

goHardDrive Leaked Personal Data for Thousands of Customers

I recently returned a product to goHardDrive, a merchant that specializes in selling used hard drives. During the return process, I discovered that they were accidentally publishing details about thousands of their customers, including their full names, mailing addresses, email addresses, and order details.

The leak

When I requested a return from goHardDrive, they assigned me a return merchandise authorization (RMA) number ending in five numeric digits. I’m not publishing my actual RMA number, but you can imagine that it was a number like this: