subscribe to updates via Atom or RSS

Tech Blog

November 14, 2024

Not a Bicyclist's Guide to Bicycles

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.

January 26, 2024

Some Thoughts on Malazan Book of the Fallen

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...

November 20, 2023

Book Review: The Lost Cause

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!

March 24, 2023

Give the Gift of Reading

This season, give the gift of reading.

March 22, 2023

Review: Babel, or the Necessity of Violence: an Arcane History of Oxford Translator's Revolution

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!

March 08, 2023

Review: Sony Xperia XZ1 Compact

I recently switched to a "new" smartphone. This post explains why and how.

February 03, 2023

Review: Onyx Boox Nova 3

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.

November 10, 2022

Disable the Firefox Tab Manager

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?

October 21, 2022

Optimizing a Jekyll Blog Containing Lots of Images

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:

  • I moved images out of my Jekyll GitHub Pages blog, and purged the blob files from the repo's history.
  • I created a new repo, images, with one purpose: hosting blob files.
  • I set up a GitHub Action that automatically generates thumbnails of all image files uploaded to the image repo.
  • I overhauled my blog site to download only those thumbnails on page load.
  • So users can still view images in full resolution, I set up the thumbnails to directly link to GitHub's raw user content API... to show the full image.

If you:

  • would like to set up thumbnails for your own GitHub Pages-hosted Jekyll blog
  • are just morbidly curious about the kinds of Rube Goldberg machines I assemble when I should be Halloween party planning

read on.

September 13, 2022

You Don't Have to be a Developer

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.

September 12, 2022

Natopia

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:

  • remove myself from Facebook and Instagram
  • migrate my personal email from Gmail to Protonmail (update: now trialing Purelymail)
  • reduce subscriptions to music and video streaming services across the board
  • start a blog where I can shamelessly rant and rave about cool things I've done

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.

September 11, 2022

IDID-3210

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.

January 28, 2022

Make a Bootable USB in macOS

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.

December 11, 2020

The Hitchhiker's Guide to Kotlin

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.

November 30, 2020

Site Redesign!

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!

March 14, 2018

Five Months with the 15-inch 2017 MacBook Pro

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.

January 24, 2018

Peter Kovak's Flash Boys: Not So Fast

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.

January 18, 2018

Michael Lewis' Flash Boys

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".

January 03, 2018

Looking Forward to 2018

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.

December 18, 2017

Reflecting on Six Months at Bloomberg

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.

February 25, 2017

Why "Lambda Latitudinarians?"

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.