Tag: Invent And Simplify

Tools Of The Trade

Tools Of The Trade

I’ve been working primarily from home since early 2019, and over time have carefully crafted a space that suits my needs pretty well. Here’s what I’ve put together, roughly from left to right as pictured:

Tuft and Needle California King mattress: Sleep is critical to success at work (and life in general). Upgrading to a big bed was a game changer, I can’t believe it took 21 years of marriage to take that plunge. Worth every penny.

Washburn 12 string acoustic guitar: My wife bought this for me for our first Christmas together in 1998. I’m not much of an acoustic player, but I can strum a few chords now and then.

Carvin Bunny Brunel signature 5 string bass: I’ve been playing bass for about 8 years, first on a Gretsch Junior Jet small scale, and then on this considerable upgrade.

Gallien-Krueger MB 112 combo amp: For a couple years I played through a hand-made German tube amp paired with a classic Ampeg 8×10 refrigerator-sized speaker cabinet that I refurbished myself. It was loud as heck and cool to look at, but weighed over 200 pounds and barely fit in my largest car. The tube amp was also finicky and I once shocked myself on its 220V power input (not fun). I’ve never regretted selling it and picking up this lightweight combo and its companion extension cab (not pictured). Just as powerful, better sounding, 20% the weight and volume, and more reliable. A no-brainer.

Casio Privia PX-130 digital piano: In 2010 I was on a short-term assignment 2500 miles from home, and needed something productive to do during my downtime. Bought this instrument and had it shipped to my extended stay hotel; it was just what the doctor ordered. The assignment ended up becoming a full-time gig, the one that led me to relocate from Ohio to San Diego. One of my better life decisions.

Picasso’s The Old Guitarist (not pictured): The art in the photo is some generic thing we bought when relocated, I don’t even remember where from. So I’d rather talk about the artwork you can’t see here, but will see in the background if you’re on a video call with me. It’s a print of my wife’s favorite painting. Also in the room are a pencil drawing of a character from the Wingfeather Saga that I commissioned the author’s son to make, and handwritten lyrics from one of my favorite Andy Gullahorn songs.

Jarvis Standing Desk from Fully: I’ll never willingly go back to a regular desk after enjoying the benefits of an adjustable height desk. I stand about 80% of the time now. And this desk was the perfect size, don’t really need a lot of space beyond what’s needed for my computer workstation.

Varier Variable Balens kneeling chair: Definitely overpriced given I stand most of the time, but given how unhealthy sitting is, when I’m not standing, I quite like kneeling. It also functions well on carpet, and tucks away nicely, both of which matter in a bedroom-based workspace.

Macbook Pro 16″ 2019: Haven’t used a Windows PC since 2012, and won’t ever go back. Would prefer native Linux, but I can still do enough terminal-based things to make it feel Unix-like. Upgrading to 32GB of RAM and going back to physical function keys would be nice but I’m fine for now.

Dell UltraSharp 34 Curved USB-C Monitor: Absolutely love only needing to plug in a single cable into my laptop for data and power, and the integrated USB ports mean no additional docking station is needing. Five years ago I would have wished for more resolution (and likely a second monitor), but training myself to organize my active work across multiple desktops obviated that need, and the screen itself is plenty wide for two windows side-by-side. As an aside, anyone who still insists on 80 character limits for code line length needs to be sent back to 1998; silliest linter default setting ever.

Logitech MX Mechanical Mini keyboard: The loud clickity-clack would get annoying in an office, but I’m by myself all day, so I’m loving it. The layout isn’t quite the same as the keyboard on the laptop itself, which is a tiny bit annoying, but I’ve adjusted.

Logitech MX Master 3S mouse: Lots of buttons and scroll doohickeys, fully programmable, feels great in the hand. Especially love that I can activate mission control with one press; really helps keep my windows organized.

Razer Kiyo Pro webcam: I spend a good portion of my day on video calls, including ones with customers with whom I need to earn trust. Every bit of quality matters when trying to communicate, thus a high-quality webcam that works in a variety of lighting conditions (I’m often on calls early in the morning before the sun is up). Sadly their software doesn’t work on Mac, but I can still tweak the settings with CameraController.

Blue Yeti X microphone: Audio quality probably matters even more than video quality when it comes to projecting trustworthiness and authority, thus I didn’t scrimp. With the boom arm I’m able to position the mic so it’s just out of the frame of the webcam. I’m not going for streamer or podcast vibes, I want the focus on my message, not the gear.

Shokz OpenRun Pro mini headphones (not pictured): Having a mic like the Yeti X means I can’t play call audio through speakers or listeners will hear feedback. That means using headphones. But I don’t want something bulky or that draws attention to itself. These are barely visible, sound sufficiently good for voice, have a battery that lasts darn near forever, and the open design means I can go between taking calls and hearing what’s going on around me at will. As the name implies, they’re also great for exercise. For music, and when I need isolation, my Sony WH1000XM4 headphones are vastly better, but they’re not nearly as convenient for every day wear.

Timbuk2 San Francisco backpack: I’m due for an upgrade here, but for now this gets the job done. What’s more important is what I keep in it at all times:

  • One each of a black, blue, and red pen, a 0.5mm mechanical pencil, and a small tablet of paper
  • Dual-ended whiteboard markers (blue, red, black, and orange)
  • USB-C to video adapter (includes HDMI, DVI, and VGA because you never know)
  • Nekteck 107W USB-C Charger with a 10 ft power cord (love this thing and its 4 ports)
  • Anker portable battery, and various USB power cables, enough to adapt between C, A, and micro-B as needed
  • USB-A to Apple lightning cord (I don’t have an iPhone, but I want to be helpful if others need one)
  • Extra charging cable for my watch and my headset (both of which are proprietary)
  • Toothbrush, toothpaste, floss, breath mints, deodorant, moist hand wipes, napkins, and a couple masks
  • Advil, Aleve, cold medicine of some kind, sunscreen, chapstick, and earplugs
  • Small stack of business cards
  • Travel umbrella

Thanks for reading all the way to the end of this monster post. Happy New Year to ya!

We’re All Coders Now

We’re All Coders Now

I work in the intersection of technology and government. Which is why stumbling on Catala was such a delight. “Deriving faithful-by-construction algorithms from legislative texts” you say? Uh yeah, pretty sure my customers could benefit from that kind of rigor.

And could it count for my currently unmet resolution if I can pick up the basics before year-end? I get to decide the answer to that, and the answer is yes. Time to get reading.

Zeros And Ones

Zeros And Ones

If you’ve never heard of Benford’s Law, it’s worth reading about this nifty statistical fact. The gist is that for certain types of data sets, the frequency of the leading digit follows a predictable pattern (with 1 being the most frequent by far). I decided to put it to the test by analyzing the total view counts for each post on this blog.

Leading DigitActual RatePredicted Rate
131.3%30.1%
227.7%17.6%
317.5%12.5%
47.8%9.7%
55.4%7.9%
62.4%6.7%
71.2%5.8%
84.2%5.1%
92.4%4.6%

I guess that’s why they call it a law, because the actual digit rates match up pretty well.

Speaking of which, apparently I also have a thing for named laws. If you do too, the article is worth it for this side note:

The fact that things are often named for someone who didn’t discover it first is common. In fact, there is a name for this, Stigler’s Law of Eponymy. It was proposed by the American statistics professor Stephen Stigler in 1980 when he wrote that no scientific discovery is named after its original discoverer. In an ironic twist, Stigler acknowledged that the American sociologist Robert Merton had previously discovered “Stigler’s Law”.

End Of An Era

End Of An Era

Frederick Brooks died last week. He was a giant of the software industry, and deserves wider recognition for his contributions. Start by reading the New York Times article linked above, then grab a copy of The Mythical Man-Month. Few works have moved me so profoundly, at least if you measure by number of times I reference them (which, incidentally, is roughly how Google’s PageRank works).

Rest in peace, Mr Brooks. I’m thankful for you, and I’m sure you won’t be forgotten by those who build our castles in the air.

Meta Post

Meta Post

Really enjoyed Two Heads Are Better Than One, a discussion of the various ways technology has allowed humans to have “second brains.” I realized in some ways this blog is one such implementation; it’s a place I can capture thoughts and stories so that I can recall them later without keeping them in working memory.

As a bonus, via the article I discovered Obsidian, which I’m now dying to try out. I’m a sucker for Markdown and the power of plain text processing tools.

Into The Sunset

Into The Sunset

I’ve mentioned before my penchant for minimalism, which is why for the past 8 years my code editor of choice has been Atom (in fact, I may have been a beta tester for it, my memory’s a bit fuzzy on that point). Which is why it bummed me out a bit to read it’s being shut down at the end of this year. Technology marches on, I suppose. I can’t blame GitHub Microsoft for wanting to consolidate development effort in their fully-featured IDEs, especially integrated cloud-based solutions like Codespaces.

Still, I’m going to miss Atom’s simplicity and customizability (I’d even contributed to a few plugins). It was robust enough to be a complete development environment (for my coding style, at least), yet snappy enough for quick one-off text file editor. For the former case I’ll probably get back into VSCode, and Sublime Text ought to do the trick latter. Though maybe I can use it for both?

My Kingdom For A Streak

My Kingdom For A Streak

Because I’m a LeBron fan, when it comes to Wordle, I care more about longevity of sustained greatness (i.e. my perfect streak of winning games) than I do about having epic individual performances (i.e. having a lot games where I’ve won in 2 or 3 guesses). That means I need a way to keep my statistics even if I move between devices or need to replace one.

Almost to quadruple 100!

It turns out (at least as of this writing, who knows if the NYT will change it) that statistics are stored in a simple JSON object in browser local storage. On a laptop this storage is easily manipulated using DevTools, and on mobile it’s a bit tougher but still not too bad, at least on Android.

Both of the above, however, rely on GUIs. It got me thinking if there was a scriptable approach. First, I found a Python library (natch) that can speak the Chrome DevTools protocol. Then I had to figure out how to use it to read and write to local storage. That wasn’t too hard (even though the example here is in Node, the technique was portable). Finally I needed to make the library connect to both a laptop-based browser (easy), and my Android phone via adb (not so easy). Luckily I stumbled on the correct magical incantation in this post. Put it all together, and boom, I can now backup my Wordle streak, and easily transfer it between devices, using a script:

import chrome_local_storage

laptop_storage = chrome_local_storage.ChromeLocalStorage(port=9222)
phone_storage = chrome_local_storage.ChromeLocalStorage(port=9223)

wordle_stats = laptop_storage.get('games/wordle', 'nyt-wordle-statistics')
phone_storage.set('games/wordle', 'nyt-wordle-statistics', wordle_stats)

Want to see how I did it? Well, you’re in luck, because I packaged up my implementation and published it on PyPI. The source code is also on Github. Enjoy!

Put A Bow On It

Put A Bow On It

Despite writing a bit about CDK nearly two years ago, it’s taken me some time to get a chance to really lean into it. Having now built out a couple real projects, I can confidently say that like it has its rough edges, like any technology, but overall it’s both powerful and fun.

If you’re so inclined, feel free to check out my most recent creation, a construct for deploying a Hyperledger Fabric network on Amazon Managed Blockchain.

# Easy as pie!
HyperledgerFabricNetwork(
    self, 'MyNetwork',
    network_name='MyNetwork',
    member_name='MyMember',
)

For my next trick post I’ll go through one of the aforementioned rough edges I discovered, and how it can hopefully be fixed.

A Number Of Numbers

A Number Of Numbers

Back in my math major days in college, I was introduced to the Online Journal of Integer Sequences. It’s exactly what it says on the tin. As part of a class we were encouraged to contribute, which I did.

A few weeks ago I had another idea for a submission, and to my surprise no one else had added it, so once again I had opportunity to contribute a little piece of Internet history.

Here’s a complete list of the sequences I’ve authored over the years:

If the above isn’t enough online notoriety, check out my only published mathematical work, A Probabilistic View of Certain Weighted Fibonacci Sums. I was only a mild contributor, but still got an authorial credit, which is pretty cool.