Blog
I occasionally write things
- · 6 min read
How to Deal With an Email Bomb Attack
I’ve been hit by a couple of email bomb attacks recently. The first sign wasn’t one suspicious message. It was hundreds of perfectly ordinary signup emails arriving almost at once. The August 2 attack produced 350 unique messages. Of those, 204 arrived in the first 30 minutes, and the flood peaked a…

- · 4 min read
Downloading photos and videos from Procare
A step-by-step guide to downloading the original media from your authorized Procare parent gallery and keeping it up to date.

- · 5 min read
Generating Open Graph Images with Astro, Satori, and Sharp
Until recently, every page on this site shared the same Open Graph image. It worked, but sharing a post titled Hello World with a generic site logo was not especially exciting. I wanted each post to have its own social card without opening an image editor every time I published something. I asked Co…

- · 4 min read
I Asked AI to Port MilkDrop to the Web. It Didn’t.
I thought I had used AI to port MilkDrop3 to the web. I had not. The realization came embarrassingly late. The app was already built and deployed, and I was thinking about writing a post called Working with AI to Port MilkDrop to the Web. Before I started, I asked one basic question: what part of Ch…

- · 4 min read
Migrating Medium Posts to Astro
I had 11 old posts sitting on Medium. Since I already had a blog built with Astro, I decided to move them here so the Markdown and images could live with the rest of my site. I expected this to be mostly copy and paste. The text was easy. Images were not. I used ChatGPT Work with Codex to do the mig…

- · 7 min read
Exporting photos from the 1Core Family app
A step-by-step guide to capturing your own 1Core gallery requests, downloading the original media, restoring dates, and cleaning up safely.

- · 1 min read
Building with Astro
It feels like just yesterday, I started a blog with Next.js. I thought that was overkill for what I wanted in a blog, and decided to migrate to Astro instead. This feels lighter and also is a good excuse to learn the latest framework for SSGs. I was considering trying out 11ty as well, but there wer…

- · 1 min read
2024 Resolutions
Happy new year! 2024 is the 22nd tetrahedral number. I miss the days of taking the AMC or AIME, where the tests would find a way to include the year in problems, making it useful to know the prime factorization of the years, e.g. 2024 = 2^3 * 11 * 23. I’ve always been conservative with New Year’s re…

- · 3 min read
Hello World
First blog post for my new blog! Motivation for blogging As Chris Coyier said, let’s Bring Back Blogging! I really miss the days of Google Reader. It was nice to be able to control what content you consume using RSS, rather than being fed from an algorithm that optimizes engagement. Twitter sort of …

- · 2 min read
How to Reset React Context
Use React's useRef hook to reset a context value when its provider component unmounts.

- · 2 min read
How to format USB drives for Honda audio systems
Prepare a USB drive for a Honda audio system by removing macOS dotfiles and sorting its FAT directory entries.

- · 3 min read
How I got hacked and lost thousands of dollars through Coinbase
A timeline of a 2021 account takeover, the resulting Coinbase losses, and security lessons from the incident.

- · 5 min read
Building Pixel-Perfect Minesweeper in React
How I recreated Windows XP Minesweeper in React with TypeScript, Emotion, Gatsby, and mobile gestures.

- · 1 min read
Aligning git log into columns
Use terminal control sequences and regular-expression captures to format git log output into aligned columns.

- · 3 min read
How to convert an Amex or Visa gift card to your Amazon gift card balance in only 10 days
A historical workaround for transferring prepaid Amex or Visa gift-card balances to Amazon.

- · 3 min read
How to move one git repository into a subdirectory of another with rebase
A historical rebase-based method for moving one Git repository into a subdirectory of another while preserving its commit history.
- · 5 min read
How to Set Up Your New iPhone
A historical seven-step guide to moving data from an iPhone 6s to an iPhone 7 using iTunes and watchOS 3.

- · 4 min read
Credit Card Workflow
A 2016 workflow for activating a new credit card, setting up payments, and monitoring transactions.

- · 2 min read
Useless UI
A critique of an attractive Apple Watch animation that failed to explain how to use Apple Pay.

- · 4 min read
Apple Watch Watch Faces Review
A 2015 review of the ten watch faces available on the first-generation Apple Watch.
