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:…
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 ⟶

Food for Thought: January - March 2020


Books, podcasts and articles that had a strong impact this quarter, grouped into themes. Amazon links are affiliate links. Feelings and free speech I finally worked my way through The Coddling of the American Mind (Lukianoff and Haidt) in January. This is a really fantastic book. It gives names and reasoning to things that have been floating around the American cultural landscape for years now. Particularly concerning to me is the fact that just as we have more vitriolic and far-reaching media – Twitter – we are lowering the bounds of offense and diluting the scope of safety.…
Read more ⟶

Using type-classes to model the expressivity of build systems


I first came across the paper Build Systems à la Carte by Mokhov, Mitchell and Peyton Jones over an year ago. I’ve recently been re-reading it, this time working through all the details and trying to really understand it. I love that it is an extremely readable paper analyzing a practical aspect of software engineering. The twist: it uses Haskell, using its properties to impose strong proofs on certain aspects of the build.…
Read more ⟶

Using 1Password with ssh-agent on Linux


I run the dev channel of ChromeOS. This crashes occasionally. While my chrome tabs are generally recovered, it also resets the crostini containers. Every time this happens, I’ve to launch 1Password (the android app), unlock it, search for my SSH key, copy the password and finally paste it in the terminal. This was starting to get old. A couple of days ago I spent about an hour short circuiting this.…
Read more ⟶