Applied Cartography logo

Applied Cartography

Subscribe
Archives
What Gives
February 14, 2025
Matthieu asks: Since you do a lot of things (investor, dad, owner of a "small" business, blog writer) I was wondering what you don't do to keep up with this...
Shipping is capturing value
November 26, 2024
This great essay from Sean Goedecke went viral two weeks ago, drawing fury and fervor alike for a Moral Mazes -esque analysis of how engineers at large...
Adding imports to the Django shell
October 11, 2025
I was excited to finally remove django-extensions from my pyproject.toml file when 5.2 dropped because they added support for automatic model import....
September 2025
October 2, 2025
The last of summer's grip finally loosened its hold this September, and Richmond began its annual transformation into something gentler and more...
September, 2025
October 2, 2025
The last of summer's grip finally loosened its hold this September, and Richmond began its annual transformation into something gentler and more...
Hidden coupons
September 29, 2025
Much of our work at Buttondown revolves around resolving amorphous bits of state and cleaning it up to our ends, particularly state from exogenous sources....
Weeknotes 2.0
September 22, 2025
Once upon a time, I wrote weeknotes for Buttondown. I’ve started them up again—the first edition is linked below. I’ll spare you the navel-gazing about...
Pulumi
September 17, 2025
I'm spending a lot more time lately using Pulumi. This is for a handful of reasons. The two biggest ones are as follows. First, we're ramping up our...
Another reason our pytest suite is slow
September 17, 2025
I wrote two days ago about how our pytest suite was slow, and how we could speed it up by blessing a suite-wide fixture that was scoped to session. This was...
Why our pytest suite is slow
September 15, 2025
The speed of Buttondown's pytest suite (which I've written about here, here, and here) is a bit of a scissor for my friends and colleagues: depending on who...
63 postcards
September 12, 2025
We have wrapped up the formal portion of DjangoCon. DjangoCon is not Buttondown's first conference that we've sponsored, but it is the first one that we've...
Django forever
September 8, 2025
Tomorrow, I am taking a very early morning flight to Chicago to attend DjangoCon US. Buttondown is sponsoring, less as an exercise in lead generation and...
Onboarding survey, one week in
September 7, 2025
One extremely compelling form of blogging, both for the reader and the writer, is the admission of defeat. Seriously: whenever you find yourself faced with...
Goodwill
September 5, 2025
One of the amazing things about Morrowind is that it's a combat-rich game in which you can feasibly go through much of the game without ever fighting;...
August, 2025
September 4, 2025
The summer heat in Richmond clung to everything this August like a second skin, broken only by afternoon thunderstorms that sent Telemachus scurrying to his...
August, 2025
September 4, 2025
The summer heat in Richmond clung to everything this August like a second skin, broken only by afternoon thunderstorms that sent Telemachus scurrying to his...
What follows GitHub?
September 2, 2025
It seems fairly clear that, as far as product lifecycle goes, GitHub is in its “Azure metered billing” stage. I don’t mean this as a negative value judgment...
Ashland, 2025
August 24, 2025
Trundle is not quite the right word. When I hear trundle, I think of layers, of wool and dampness, of hitting the road before the sun does, wrapped in a...
Three apps that will not change your life
August 19, 2025
After what has felt like a long winter of habitual reliance on my existing tools, I’m finally playing around with some new ones. This is a healthy habit—so...
July 2025
August 3, 2025
Telemachus turned five, two weeks ago. He did not have a great July; Richmond's been roiled by storms (ten nights in the past two weeks have ended with him...
July, 2025
August 2, 2025
Telemachus turned five, two weeks ago. He did not have a great July; Richmond's been roiled by storms (ten nights in the past two weeks have ended with him...
Have you at least tried asking?
July 21, 2025
My wife got sick this past weekend, and as a result we had to cancel or at least postpone a trip to Seattle that we had been looking forward to. She's...
Bodies Bodies Bodies
July 17, 2025
More than anything else, Bodies Bodies Bodies is a perfectly reasonable and delightful way to spend 90 minutes. It is beautiful, well-acted, and consistently...
Post-Watch
July 11, 2025
There was a point in my life where I was excited about the Apple Watch. I think in no small part because it represented a new frontier in consumer...
The year of mint chimichurri
July 7, 2025
This is the fifth summer that we've stayed in Richmond since moving back east, and therefore also the fifth soilday of our backyard garden. Our garden is not...
VC-subsidized tokens
July 5, 2025
Simon Willison writes about the recent Cursor changes: Firstly, the era of VC-subsidized tokens may be coming to an end, especially for products like Cursor...
June, 2025
July 4, 2025
We are officially in H2, gang. I published fewer posts than I had hoped, as much of my quilling energy was reserved for things that fall under Buttondown's...
June, 2025
July 3, 2025
We are officially in H2, gang. I published fewer posts than I had hoped: Post Date Genre Black Bag June 18 Thriller Replacing screenshots and videos with...
Clerks
July 3, 2025
Jesus, nobody twisted your arm to be here today. You're here of your own volition. You like to think the weight of the world rests on your shoulders. Like...
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 =...
January 2025
January 9, 2025
Hello, 2025! (As always, Death Cab remains the soundtrack by which you should read this.) Headlining this month was my annual review; everything else is...
 
Older archives   
Powered by Buttondown, the easiest way to start and grow your newsletter.