Iterating on an HTML resume with GPT-4o via cURL

My resume is written with vanilla HTML and CSS and compiled to PDF using headless chrome… The design and build are fun to hack on but writing is still hard so I wrote a script that helps me iterate on it quickly with GPT-4o.

Which grid cells does an ellipse overlap?

This week I needed to figure out which grid cells an ellipse overlaps with…

Haskell monads and the nest of lies

The IO monad in Haskell works by assuming our universe is in a simulation and that your tiny computer can capture the entire state of the universe and play it forwards in real time.

Passing through the advice and getting to the actual user experiences

When a user gives me advice on a product, I ask them what experience they had that prompted them to give that advice.

Answering questions with accounting: Expenses in Quicken vs Ledger

Answering the question "How much money did I spend eating out versus buying groceries this month?" is trickier than Quicken would have you believe…

Answering questions with accounting: Shared reimbursements

This is a sequel to my last post "Answering questions with accounting: Reimbursements". In this post, we'll take things one step farther and I'll talk about how I'm tracking reimbursable expenses that I share with my partner.

Answering questions with accounting: Reimbursements

I love accounting and to me it's a tool that lets me get answers to my financial questions… In this post I'm going to talk about how I found answers to variations of the question "Have I been reimbursed for this therapist visit?"

The Seesaw - A D&D 5E Encounter

I've been DMing a Dungeons and Dragons (fifth edition) game every other week for awhile. During this last session on Monday they found themselves in the center of a room with a rectangular floor.

A very practical piece of pure CS

If an interviewer asked me to find the last item in a linked list, I might write some code like this:

Principles of Building a Simple Site

I've made a bunch of simple websites over the years, and from my endless failures I've built up some principles I now follow.

Solving a wooden puzzle

Last week a mysterious double-sided puzzle appeared next to the kitchen at Khan Academy.

Local Storage Today

I'd like to write to `localStorage` often. I'd also like to write to it synchronously in response to user interaction. Past wisdom says this is a bad idea and will give me Angry Users Syndrome very quickly.

Typos in search queries at Khan Academy

One year ago, searching for polinomials on Khan Academy's search page would give you no results. If you typed the same thing into Google you'd be efficiently and politely corrected.

Intelligently Shortening Text

Our search page at Khan Academy displays highlighting information to provide context for our results. Our full-text search engine gives us the highlighting text, but it doesn't provide a way to reliably control the length of the text. The end result can be undesirable.

The Python Import System

I made a presentation at Khan Academy on a few good things to know about Python's import system. Here's a writeup of that presentation (this is written mostly as a reference, sorry for the dryness).

Transactions with Python's sqlite3 Package

Python's sqlite3 package tries to take care of the tricky business of properly executing BEGIN and COMMIT statements. The rules of when and how this automatic transactioning is done has confounded a number of developers, many of whom have jumped ship and chosen to use the aspw package or similar.