UPDATE:
On 16 January 2024, my phone downloaded the update and prompted me to install it via a notification, despite disabling automatic update checks in Developer Options. As far as I know, there is no way to disable checks (and automatic downloads!) for this update. Without an option to disable the automatic update in the OS settings, you're stuck with the following options:
- install a custom ROM, like GrapheneOS or LineageOS
- continue using the stock software, but block the update at the DNS level with a pi.hole, nextDNS, or similar
To block the updates, block the entire
googlezip.net
domain. Technically you can just blockota.googlezip.net
,ota-cache1.googlezip.net
, andota-cache2.googlezip.net
, but if you use nextDNS or pi.hole you can only block the whole domain.When your phone inevitably decides to install the update anyway (because VPNs on Android leak traffic), go to Settings > Apps > All Apps > Google Play Services > Storage and cache > Manage Space and click the Clear all data button to delete all data, including the update file. Fortunately, it seems that you at least have to click the notification to actually install the update!
Many of us use phones that are a couple of years out of date. As the phone industry insists on removing useful features while at the same time inflating new phones to a seeming minimum of $500, older phones have become increasingly attractive. Using an older phone is good for your wallet and good for the environment (the most environmentally-friendly phone purchase is no new phone purchase), but not good for security, since you likely miss out on OS security updates.
In 2023, Google abandoned the Pixel 4a, deciding to no longer publish security updates for the still-popular phone (as originally announced, in all fairness). Many of us kept using the 4a because it ticks a lot of boxes that no modern phone ticks (the 4a is smaller than any Pixel phone since, has a very fast rear-mounted fingerprint reader, and has a headphone jack), and it still works quite well.
In 2024, Google left us alone. Many people explored custom ROMs like LineageOS and GrapheneOS to keep the security updates flowing, despite the fact that those custom ROMS have no way to fix firmware vulnerabilities. It was sad to see a great phone slowly sink into obsolescence. But through the community efforts of a lot of volunteers, custom ROMs have kept the phone alive. Of course, only a small subset of people are comfortable or even able to install custom ROMs, so plenty of people -- the vast majority, in fact -- kept using the stock firmware. Sure, we don't get OS security updates. But we can update our browsers, our apps, Google Play Services, and just about anything else on the device, so it's not like we're walking around completely exposed. Life was good.
In 2025, Google killed the Pixel 4a.
All bicyclists ride bikes. But not all bike riders are bicyclists. I'm a bicycle enthusiast: someone who spends enough time riding and repairing bikes to know a thing or two about them. But I'm not a bicyclist, because I don't race my bike, or care about power meters or pacing or compete in events.
I wrote this article to help non-bicyclists better understand bikes: which to buy, what features truly matter to the average rider, and what features only exist for the benefit of Olympians.
If you race bikes, you can safely ignore all of this advice. I'm speaking to people who just want to get around on their bikes, not people who want to min/max stats. Think of what I'm describing as the "Honda Civic of bikes". If you know what drafting is and you want to do it, ignore me.
I just finished a very, very, very long read of Steven Erikson's Malazan Book of the Fallen series. This is the second-longest series I have every read, second only to The Wheel of Time. But Malazan stands out as perhapas the most unusual, most unique, and most impactful series I have ever read. It has been a long time since a piece of writing made me think this much. Allow me to explain...
I recently finished reading The Lost Cause, by Cory Doctorow, which asks (and answers) the question: Do some people seriously want to watch the world burn?. Here are my thoughts on the book.
Warning: This post contains (minor) spoilers!
I recently finished reading Babel, or the Necessity of Violence: an Arcane History of Oxford Translator's Revolution, by RF Kuang. Here are my thoughts on the book.
Warning: This post contains spoilers!
I recently switched to a "new" smartphone. This post explains why and how.
Technology alone is not enough β itβs technology married with liberal arts, married with the humanities, that yields us the results that make our heart sing.
When I was young, I read books.
When I was slightly less young, I read books off of a Kindle Touch.
I replaced my Kindle with an Android e-ink tablet. This article explains why.
Did you recently update to Firefox (or Librewolf) 106?
Do you use Tree Style Tabs, and hide the normal tab bar?
Did you notice an inverted caret (Λ
) that restored the height pixels of the hidden tab bar?
(alt text for this caret labels it "list all tabs")
Did it annoy you that you can't remove that button, even in the "customize toolbar" view?
This website features blog posts with many images -- often more than 20 per post!
Meg and I take a lot of these pictures on bike trips. Frequently with a fancy mirrorless Sony camera. They can be pretty large. But they're also frequently very pretty. Neither of us wants to shrink the images into oblivion.
I used to host those chonky images directly in my Jekyll blog, via the _images
subfolder.
Eventually my site's GitHub repo ballooned to over a gigabyte in size. I know you shouldn't host blobs in source control, but... GitHub doesn't seem to care if your repo is a little big. And it's the cheapest blob storage out there, at a grand total of $0 for a half decade of usage.
But all good things must come to an end, and I started to get worried about the long-term scalability of my blog. Deployments for GitHub pages, which I use to host my site, crept above 10 minutes.
Even worse, I knew my pages weren't respectful of user data connections. Opening one of my blog posts with 20+ images in it resulted in a 200MB download. That's $2 on my Google Fi metered data plan! For one page!
So I decided to solve the problem. I attacked it from multiple angles:
If you:
read on.
I originally wrote this post a short time into my first tech writing job on MongoDB's Server Docs team. I never ended up sharing it because, for a while, I wasn't sure if I would end up staying in the docs world or switching back into software development.
Less than a month ago, I got a new job running documentation at Gradle. My experience as a Developer Educator for MongoDB Realm Docs convinced me that documentation can scratch all of my developer itches -- building automation, infrastructure, and writing tutorials and code snippets.
I've added some thoughts at the end of the post and tightened up some language. But this post largely reflects my thoughts on working as a documentarian very early in my transition from software development. If you're currently pursuing a computer science degree, or attending a coding boot camp, or working as a developer, and it's not completely satisfying... maybe this will help.
Over the past few years, I've slowly tried to reduce my dependence on big tech. I know this is popular in some circles right now, and I've made all the standard moves:
But why did I do this? Not (just) because I love to chase the latest technocrat trends. Honestly it's mostly because I hate feeling dirty when I use these services:
When I used Spotify, I was constantly frustrated by regressions and podcasts shoved in my face (despite the fact that I cannot stand Spotify's approach to podcasts, where they buy up exclusive distribution rights to a family of podcasts and turn them into... Spodcasts, which aren't really podcasts because they aren't distributed the way all other podcasts circulate: RSS). And their offline playback support is laughable.
Google services constantly misbehave when you use Firefox or Librewolf, my browsers of choice.
Newsletters constantly send spam mail, and are often much harder to fully unsubscribe from than an RSS feed.
iOS still doesn't support ad blocking anywhere near the level of uBlock Origin, or allow me to use real add-ons in a browser... prompting me to find alternative methods to block ads on my phone.
And every tech company I've ever bought any product from seems to abuse dark patterns to manipulate users out the wazoo. All in the name of getting you to buy one more thing, or look at one more not-really-notification. Weak.
This post talks about how I freed myself from a myriad of big tech services, all with the support of a small investment in hardware, electricity, and personal time. I call my open source confederation of services Natopia, because, well, narcissism.
NOTE: Literally all of this is a work in progress. Open source projects continually develop. Standards change. This all works right now, but there are many pieces I'd like to improve. Expect updates to this page over time.
Recently I made the mistake of attempting to log in to my Spectrum account. As a conscious human being with not-so-fond memories of Time Warner Cable, I'm aware that using Spectrum for internet is a fool's errand. But I have no choice in the small New England town that I now live in. Thanks, FCC.
This post explains how to make a bootable USB drive for installing Linux, macOS, Windows, or... whatever else you want. From macOS. Using the command line, mostly. And unlike every other article on the internet that explains this concept on the internet, it's not blogspam, it's not filled with ads, and it's not written in broken English or with so much fluff you give up halfway through.
Lately I've been doing a lot of work in a relatively new programming language: Kotlin. From my experience, I've concluded that Kotlin is pretty rad. If you've considered learning Kotlin, or just using it in a personal project, this post might help you with your decision. Below, I hope I'll (attempt) to tell you a little bit about my experience with Kotlin, and describe what I liked about Kotlin and what I didn't like.
When I originally created this site, I had no clue what I was doing. Some friends told me I should think about creating a personal website, and I thought it would be fun to write a few blog posts. So I threw together a few basic styles with GitHub's static site generator, broke Jekyll a few times, and eventually figured out how to get things working!
I have now spent about five months with a work-supplied Macbook Pro 2017, complete with discrete GPU and the infamous TouchBar.
So far, my experience has been... well, I'll get to that eventually.
Last week, I read Michael Lewis' Flash Boys. I was unimpressed. I had quite a few complaints, all of which you can read about in my post from last week. If you're looking for a summary, however, it boils down to this: Flash Boys was bad enough that I decided to read a book that is literally just a rebuttal to Flash Boys from the perspective of a former high frequency trader -- one of the many that Michael Lewis didn't bother to interview for his book.
Just last week, I finished reading Flash Boys, written by Michael Lewis. This book can be summarized pretty easily by a single statement: "High Frequency Trading".
It is now 2018, and I've been thinking about what I intend to accomplish this year. I've never been one to embrace New Years resolutions or anything like that, but I do appreciate the value of outlining some goals for the year, however inconsequential.
I'm an adult now -- at least, that's what they tell me. I've been working as a ssoftware developer here at Bloomberg for almost 6 months now - I started June 19th, so it's actually 5 months 29 days today. Since it's the end of the day and programmers start counting at zero, let's just call it 6 months and be done with it.
Since I created this site, I've received many questions about the name. As a result, I've created this blog post to try to address the issue. In short, the name of this site stems from Alonzo Church's Lambda Calculus. Lambda Calculus was a highly influential mode of computation invented in the 1930s that eventually influenced a great deal of programming. This is most obvious in the form of the Lisp family of languages, where lambda functions have been present from day one, and where the very structure of code is based off of lambda calculus. However, the Lambda Calculus has now managed to seep into other programming styles-- most famously, C++ and Java have variants of lambda functions.