Applied Cartography
Archives
Search
Subscribe
Nine months in
July 3, 2025
Many people have asked me what the biggest surprise has been, now that the dust has settled: I politely inform them that the dust has never been more...
Justfiles are great
July 1, 2025
One of the first things I did when setting up Whisperglass was to create a justfile. I have grown older. I've either gotten worse at context switching or...
Whisperglass
June 30, 2025
I spent a couple hours this weekend resuming work on Whisperglass, born from some of the internal functionality within Buttondown. Resuming is perhaps a...
The Thomas Crown Affair
June 27, 2025
Thomas Crown: [smirking] I trust myself implicitly. The Psychiatrist: But can other people trust you? Thomas Crown: Oh, you mean society at large? The...
Colocating your pytest fixtures
June 26, 2025
pytest is, in many ways, the Age of Adz of the broader Python ecosystem: a rewarding idiosyncratic departure from convention whose quirks and foibles are...
Replacing screenshots and videos with iframes
June 22, 2025
Scattered throughout the Buttondown docs site, you'll see the fruits of the latest experiment I'm running: getting rid of outdated screenshots and videos by...
September, 2024
June 21, 2025
In descending order of importance: I had a daughter, Lucy, the light of my life. I launched a tiny side project, handbook.directory. I cautioned against...
Spring, 2025
June 5, 2025
Hello! I have so much to catch up with you about. The time has flown. Reading (and watching) As you might have surmised from the radio silence, less to share...
Performance improvements can be obvious and silly in retrospect
March 28, 2025
One of the most useful and janky internal tools we have in Buttondown’s codebase is a codegen pipeline called “autogen”. There is nothing “auto” about...
Smoke test your Django admin site
March 12, 2025
Here is a confession: I am a very strong proponent of a robust test suite being perhaps the single most important asset of a codebase, but when it comes to...
Recursive filter schema
March 6, 2025
When we added support for complex filtering in Buttondown, I spent a long time trying to come up with a schema for filters that felt sufficiently ergonomic...
Does that dependency spark joy?
March 1, 2025
If there's been one through line in changes to Buttondown's architecture over the past six months or so, it's been the removal and consolidation of...
HQ1
February 27, 2025
After many wonderful years of working out of my home office (see Workspaces), I've now "expanded" [1] into an office of my own. 406 W Franklin St #201 is now...
Naughty vs. nice
February 23, 2025
I love this bit from Paul Graham on pattern-matching founders: Though the most successful founders are usually good people, they tend to have a piratical...
YOLO-squashing our Django repository
February 19, 2025
Buttondown's core application is a Django app, and a fairly long-lived one at that — it was, until recently, sporting around seven hundred migration files...
Humane Inc.
February 19, 2025
Humane Inc. started in 2018; it raised around $250M over five years before coming out of stealth mode with an AI pin that people did not like very much, and...
Becoming Trader Joe
February 9, 2025
(Shout out to Red Queen Podcast for introducing me to this book.) Becoming Trader Joe is, more than any other business book (certainly any other business...
February, 2025
February 9, 2025
What a start to the year! January was a bit more flat-packed than I think Haley and I would have otherwise liked, but all with great things. (Highlights...
What's in a name
January 31, 2025
Guillermo posted this recently: What you name your product matters more than people give it credit. It's your first and most universal UI to the world....
Truncating timedeltas in Django
January 14, 2025
Consider a fan-out-ish model that you want to aggregate a bunch of: likes on a post, for instance. class Post(models.Model): created_at =...
Newer archives
Older archives