Using a Digital Ocean Droplet to backup Google Takeout to Backblaze B2


Notes on using a Digital Ocean Droplet to copy Google Takeout data to Backblaze B2, for my own reference and in case they are useful to others. This uses rclone to perform the sync. Google Takeout allows exporting all your Google data, but requires a modern browser, with GUI and JS. The total data can be huge (~36GB for my last export), so downloading it to my local machine and uploading it can be slow (even on a Gigabit connection).…
Read more ⟶

Tracking the Books I've Read Using Svelte, XState and Quagga


I read a fair amount of books, but I’ve never kept track of them except in my brain because the friction to track books is just too high. Recently, I wondered how easy it would be if I could just use my phone to scan the barcode on the back of the book, and that would automagically insert the book into a list. The theory Each book is identified by a ISBN, a 13-digit number that is usually printed on the back of the book using a barcode.…
Read more ⟶

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