Reviews of M1 Macs for Development

So far, the key interest for me have been the potential drastic improvement in battery life. I’m almost willing to sacrifice a bit of short term productivity to get there. I don’t know that the experiences sound any worse that trying to get my favorite development environments productive on Windows or a non-Debian flavor of Linux:

JetBrains and Xcode-centric perspective (11/23/2020):

Rubyist perspective (11/25/2020):

macOS 11 Big Sur compatibility on Apple Silicon · Issue #7857 · Homebrew/brew · GitHub (closed as of 12/26/2020):

TypeScript/JavaScript/Rust (12/3/2020):

Rails’ DHH’s own experience (12/28/2020):

DriftingRuby tweet:

How to Cancel Humble Choice

I tried to cancel Humble Choice a couple of months ago, after getting sucked in to a membership a few months ago, but either I didn’t complete the cancellation, or I didn’t have enough time to completely follow-through. I had a little bit of a challenge finding the cancellation link this time, so I wrote it up here just in case anyone else experienced the frustration. No idea if it works on mobile, I went to the desktop this time to make sure that I could see the entire menu.

  • Manage Your Plan
  • Scroll down to [Cancel Your Subscription] button
  • Scroll down to [Cancel My Membership]
  • Select a reason and [Cancel My Membership]
  • Click [Cancel My Membership] on the popup.

Fuji EnviroMAX AA vs. Sunbeam Batteries

So we have a battery hungry front door lock that requires 4-AA batteries to power. I noticed that the Sunbeam batteries purchased from Dollar Tree (3 pack for $1, or $1.33 per replacement) were getting replaced every month or so, so I was curious if that was normal as well as how much I was really paying for them.

Tracking in a spreadsheet, the Sunbeam batteries lasted from 23 to 36 days, with an average of 28.8 days. At $1.33 per replacement / 28.8 days… that door cost 4.61¢ per day with the Sunbeam batteries.

Thinking maybe I could do better, I bought a 96 pack of EnviroMAX Batteries (affiliate link) on Woot (but for 25¢ each instead of being similar in price to the Sunbeam… so it was $1 per replacement instead of the $1.42 at the current moment for that link.) The batteries lasted 13-25 days, with a generous average of 21 days, or about 4.7¢ per day… The last replacements were more like 2 weeks and I stopped tracking them, but there were sets in the middle that made it 3 weeks or better, but it was horribly inconsistent.

I just bought a large pack of Kirkland batteries, so I’ll be sure to track the performance of those and see how it lines up with the other batteries.

Sylvania vs. Amazon Basics LED bulbs

I’ve been tracking the Sylvania 60W 2700K Equivalent A29 (affiliate link) vs. the AmazonBasics 60W Soft White Non-Dimmable (affiliate link) over the past year and a half after noticing that I was replacing bulbs a lot. With 40+ bulbs in the house, it’s not as uncommon as I would have initially expected to be replacing a bulb on any given day.

I have a limited amount of data so far, but definitely have an apples to apples (same socket in same fixture) comparison, and it looks like the Amazon Basics bulb lasted 242 days vs. the Sylvania’s 308. While I have no other apples-to-apples comparisons, the remaining Sylvania bulbs have lasted at least ten months.

The above links have a 24-pack of AmazonBasics at $27.99, or 0.48¢ per day vs. the Sylvania at $22.88, or 0.31¢ per day.

ASCII/Punycode TLDs for Internationalized Domains

IANA has a list of TLDs alphabetically by domain. One thing notable are domains of in the following format:


These are internationalized TLDs, specified in a Punycode encoding for the unicode domain name. Some of these representations are just for non-ascii characters:

XN--VERMGENSBERATER-CTB,vermögensberater,wealth consultant

Others are representing fully non-Latin alphabets:


Most of these non-Latin representations are either country designations, brand names, or a telecom-centric term.

If you want to experiment on your own, install simpleidn gem and sign up for a Rapid API key and the Microsoft Translator API (it’s a little simpler interface than navigate individual vendor APIs)

require 'net/http'
require 'uri'
require 'simpleidn'
require 'openssl'
require 'json'

def translate(source)
  return source if source =~ /^[A-Za-z]+$/
  # using rapidapi for somewhat uniform API access (via a single key!)
  url = URI("")
  http =, url.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  request =
  request["content-type"] = 'application/json'
  request["x-rapidapi-key"] = ENV['RAPIDAPIKEY']
  request["x-rapidapi-host"] = ''
  request.body = "[
          \"Text\": \"#{source}\"

  response = http.request(request)
  read_body = JSON.parse(response.read_body)

puts 'ascii/punycode TLD,Unicode version,language,translation''tlds.txt'))
#Net::HTTP.get(URI('')) # I saved this locally
  .map { |a| a.strip }
  .reject {|n| n =~ /^#/ }
  .map { |a| [a, SimpleIDN.to_unicode(a), translate(SimpleIDN.to_unicode(a))].flatten }
  .reject {|n| n[1] =~ /^[A-Za-z]/ }
  .sort { |a, b| a[1].length <=> b[1].length }
  .each { |l| puts l.join(',') }

AWS Certified Solutions Architect Associate (SAA-C02) Experience


Online Exam

  • PearsonVue browserlock kept detecting itself on Catalina on my MacBook Air and exiting, so I ended up using a Windows laptop instead.
  • OnVue app on Windows kept detecting “gamebar”, which I had to disable (and reboot Windows to fully take effect)
  • Make sure the laptop that you’re using can be maneuvered to show all the workspace within reach.
  • Have a phone handy for check-in, but a convenient place to stash out of sight/sound range.
  • Make sure anything with any print or writing is out of view and out of reach of the workspace area before check-in.

Contents That I Could’ve Been More Prepared For

  • SQS vs. Kinesis use cases
  • Priority queueing – I think this requires either AmazonMQ or a separate SQS queues (depending on priority levels)
  • ECS launch types. ECS vs. Fargate vs. EKS
  • Amazon RDS Read Replicas vs Aurora Global Database