Useful Hammerspoon Tips


Hammerspoon is a macOS automation framework that allows you to hook into all sort of OS interfaces using Lua scripts. People use it for all sorts of automations, with key remappings and quick window switchers being the most common applications. There are some crazier applications like using voice to control scroll bars! I’m going to describe some ways I use it that are uncommon. Reducing procrastination I often run build steps or unit tests that are slow enough that I can’t just twiddle my thumbs at the terminal, but fast enough that I can’t get into another cognitive task.…
Read more ⟶

Improving the Credit Freeze user experience


I have credit freezes put on my credit records with all 3 US credit reporting companies. These are supposed to help a little with identity theft, but the UI surrounding them makes for a very bad experience. The way it works, one places a freeze at each company, but then one is expected to know in advance when a credit check is going to happen and temporarily lift the freeze! This almost always causes friction.…
Read more ⟶

Experiencing Smalltalk


In late August 2020 I read The Dream Machine and it is my favorite book of 2020. It is an incredible overview of a sliver of computer pioneers in the 1960s-1980s and how one man was instrumental in tying all their narratives together. One of the strands the book follows is the group at PARC (and other places) that firmly believed in the notion of interactive computing. Over the last year, I’ve repeatedly been introduced to this strand of thinking.…
Read more ⟶

Return on Data: When governments fail to make surveillance useful


There is this common refrain about how companies have data about you and could do bad things. Yet governments often pass surveillance laws that are much worse, and by definition, you can’t “vote with your wallet” for them. So in a world where I’m already giving data to third parties, it is useful to ask what I get in return. If we are talking about corporations, we get ads! Yes, but we also get:…
Read more ⟶

Mystery Knowledge and Useful Tools


Hillel Wayne has a great newsletter, and one recent post had this observation: The abstract concept here is knowledge or skills that You are unlikely to discover on your own, neither through practice and reflection nor by observing others apply it. Once somebody tells you about it, you can easily learn and apply it. Once you can use it, it immediately gives you significant benefits, possibly to the point of raising your expertise level.…
Read more ⟶

Rust 2021


This is a contribution to the Rust 2021 Roadmap Blogs request. As a developer using Rust in a proprietary, polyglot code base, I want Rust to improve non-Cargo builds My story comes from spending the better part of a year migrating a roughly 700,000 line code base (and several hundred upstream dependencies) to build using Bazel circa 2019. As Rust becomes more popular, a large chunk of developers will want to use it as a complement to existing code in other languages.…
Read more ⟶

A Bazel Persistent Worker for Rust


Bazel persistent workers are a cool feature that allow Bazel to start up “compiler” instances that can accept multiple build requests. This brings benefits like saving startup time, saving the time to parse a standard library or share some cache across compiler invocations. This allows slight speedups in rebuilds, which can be valuable in speeding up the developer iteration cycle. This is best exemplified in the existing persistent workers: The Java and Scala rules benefit from paying the cost of process startup only once (warming up the JVM and so on.…
Read more ⟶

A Future is a Suspending Scheduler


Introduction This is another blog post related to the Build Systems à la Carte paper. See Using type-classes to model the expressivity of build systems for the first one. The paper proposes splitting build systems into two components: Rebuilders decide when to rebuild a particular key (file). Schedulers decide how to rebuild multiple keys - handling dependencies while maintaining correctness and efficiency. Schedulers come in 3 flavors (see Section 4):…
Read more ⟶

Getting to Deterministic Builds on Windows


(Disclaimer: Some of this post discusses projects from my job. All opinions and mistakes here are my own.) This is a set of notes on getting to deterministic builds in C, C++ and Rust on Windows. The primary motivation for this is not the lofty goal of a Reproducible Build, but simply improving our Bazel cache hit rates. A Quick primer on Bazel caching At Dropbox, much of our build is powered by Bazel and I was involved in making that a reality.…
Read more ⟶

Ankle Fracture and Recovery


I suffered a right ankle fracture on March 16, 2020. This post chronicles the accident and recovery steps and will be updated periodically over the next few months. The Accident I was at the Bill Putnam (Fairy Meadows) Hut in British Columbia, Canada on a guided ski trip. On Day 3 of our trip, we traversed the Granite Glacier and did a couple of runs below the SW face of Mt.…
Read more ⟶