Latest Posts (20 found)
Justin Duke 3 days ago

Levels of the Game

It seems fortuitous that my McPhee reading spree coincided with having watched Challengers . Like Challengers did sixty years after the fact, Levels of the Game uses tennis as an object of fascination in its own right—see also Infinite Jest and how much of that book, indeed all of DFW's worldview, was shaped by the relative weirdness of the tennis circuit compared to its team-based sport brethren. But even more than that, I'm interested in it as a canvas to explore systemic issues. Challengers touches on class nominally, but Guadagnino is at the end of the day much more interested in the love triangle that dominates the film, and in the idea of competition as a pure entity. McPhee has no problem dispensing with subtext and speaking plainly about the differences between his twin protagonists: one is white and comes from a solidly middle-class background; the other is black and comes from a solidly lower-class one. Side note: Arthur Ashe was born in Richmond, Virginia, and I live one block away from a boulevard named in his honor. You can credibly accuse Richmond of using Ashe as a bulwark against criticism, given how many of its other heroes are old white Confederates. But Ashe did in fact grow up here, and this book is not sparing in its description of how white Richmond rejected him. McPhee is not really interested in competition the way Guadagnino is; he describes Ashe and Graebner less like fierce competitors and more like two rival members of the same French New Wave. Part of this is truth—they were literal teammates playing in the Davis Cup together. That aspect of tennis, somewhat alien to me, is interesting in its own right. And while we know from the future that Ashe emerged as the superior and more exemplary player, McPhee is more interested in talking about form and style than raw prowess. This is a brief book—really just a snapshot of a single day—and as such it never outstays its welcome. By the last few passages, McPhee has perhaps run out of novel ways to describe a backhand. But it's a good read and a lot of fun. It speaks about style and grace and athletics, and it elevates the form of sport in such a way that sixty years after its original publication, it still feels not just prescient but modern.

0 views
Justin Duke 1 weeks ago

Eternity

Love isn't just one happy moment, right? It's a million. And it's bickering in the car, and supporting someone when they need it, and it's growing together, and looking after each other. It can't be denied that this movie isn't really, really funny. Some of the runners, such as the Korean War bit, or the pretzel bit, were just great laugh lines from a writing team — and I think the film's willingness and steadfastness not to engage in the minutia of the framing device and its acting mechanics was a very smart choice, because that's really not what the movie is interested in whatsoever. In general, I think this movie wa sa success and I attribute that success to the script's unwillingness to take the easy way out. I appreciated that all three vertices in our little love triangle are fairly flawed in different ways: The movie fades in quality in the few instances where it stoops to melodrama - mostly in the middle act, which any viewer is going to know beat by beat, and therefore goes on entirely too long and with way too few laugh lines. Given the audaciousness of the framing device, the movie did not quite take full advantage of its visual possibilities. The little sequence of Elizabeth Olsen gaping between eternities was legitimately cool, as long as you didn't think about it particularly hard — but the most beautiful and interesting parts of the film were in the junctions themselves, rather than the paradises. (Perhaps that is a deliberate metaphor.) The movie that comes most readily to mind, having watched Eternity, is Palm Springs : also a high-concept rom-com that never takes itself too seriously and has legitimately hilarious moments 1 And a bit of sloppiness. which, in a different world, probably could have been a massive box office success — if its goal was, at all, to land in the box office. This is a vehicle largely for Miles Teller and Elizabeth Olsen to be charming: and while they share almost zero chemistry, their individual charisma makes up for it, as does a great collection of complimentary performances from their surrounding cast. (The movie also owes a lot to The Good Place, of course, but Eternal Sunshine of the Spotless Mind which is perhaps winkingly echoed in the title.) This is not high art — nor is it pablum. I want more of these films! Elizabeth Olsen isn't given much to work with, but the text of her character has a little bit of scuminess, and she sells the pathos strongly enough. - Miles Teller's character is, for sure, guilty of everything that his rival accuses him of - in the same way that we all have a little self-interest burrowed deep in our heart. - And Callum Turner's character is clearly has some anger problems and a bit of subtextual one-dimensionality — the traits that you do ignore as a 25-year-old newlywed, but would grate on you after 65 years of marriage.

0 views
Justin Duke 2 weeks ago

Cameraperson

It seems fitting that, to close out the year I finally watched Koyaanisqatsi, I also got to watch Cameraperson — which is in many ways, and none of them dismissive or demeaning to either film, a funhouse mirror of its antecedent. Koyaanisqatsi is a film that's very interested in collage and rapidity, and at times felt like a sensory HIIT where you feel the push and the rest and the push and the rest, and the cavalcade of stock washes over you. Cameraperson is an antithesis — is collage, yes, assembled from around a dozen or so vignettes, all of them quiet, both literally and figuratively, but meticulously placed so that you, the viewer, are given the space and time to form the connections yourself. The dialogue in this film is spartan; the visuals are arresting and deliberate. Nothing feels wasteful. Kristen Johnson is very interested in relationships between storytelling and memory and between identity and witness. She is interested in the vastness and fragility of human existence. She does not have many answers; she wants you to help her find them. The best movies take you places: sometimes that is into someone's head, sometimes that is into a Nigerian NICU. She takes you there quietly, never flinching, never letting go of your hand. I don't know what else to say. I think it's somewhat disingenuous to call it an entertaining movie, but it's certainly an enchanting one, and I am different and better for having watched it.

0 views
Justin Duke 2 weeks ago

Avoid single-use variables

After all these years programming, it's fun to catch myself changing my style preferences in real-time. Here's a change I find myself getting very aggressive about: eliminating single-use variables (or functions, or what have you). A trivial example, of course. A slightly less trivial one: (Usual caveats apply: there are cases where you shouldn't do this, ie for performance or testing ergonomics, 1 I am, for the record, completely okay with shaping how you organize your code in service of testing as long as it's not gross — and everyone, deep down, knows when it's gross. , and also I don't think lines should be this short it's just hard to show a diff in a blog post.) But this slight tweak helps me in a few ways: Reveals complexity . A lot of seemingly-hairy methods can be unwound into a very straightforward sequence of nested transformations. 2. Improves readability . When reviewing code, I often find myself first understanding the surface-level logic of how things plug together and then diving into the details of how things work. This significantly ameliorates the effort involved in the first step.

0 views
Justin Duke 2 weeks ago

mise hooks

I've written before about having a standardized set of commands across all my projects. One of the things that helps with that is mise hooks. I've actually been migrating from justfiles to mise tasks over the past few months. mise already manages my tool versions, so consolidating task running into the same tool means one less thing to install and one less config file per project. The syntax is nearly identical—you're just writing shell commands with some metadata—and mise tasks have a few nice extras like file watching and automatic parallelization. mise has a handful of lifecycle hooks that you can use to run arbitrary scripts at various points: | Hook | When it runs | | --- | --- | | | Every time you change directories | | | When you first enter a project directory | | | When you leave a project directory | | | Before a tool is installed | | | After a tool is installed | I am not a fan of injecting scripts into things that you want to be as fast as humanly possible, but here's one exception: I use the hook to print a little welcome message when I into a project: This is a small thing, but it's a nice reminder of what commands are available when I'm jumping between projects. I'm always context-switching and I never remember what the right incantation is for any given project. This way, I get a little cheat sheet every time I enter a directory.

0 views
Justin Duke 3 weeks ago

Marcovaldo

Marcovaldo is a very fun and inconsequential collection of short stories. I struggle to recommend it to anyone who isn't a Calvino completionist. Not because it doesn't have inherent value, but because you can tell it's a little bit less refined than the works for which Calvino is rightfully better known, such as Invisible Cities and If on a winter's night a traveler. It's not to say that this is a bad collection. I had a lot of fun reading it and mulling over it. In a way, it's quite different than the style and subject that he became known for. His most famous works are simultaneously abstract and sharp, with a lot of glass-like ideas and passages. Conversely, this is a fairly shaggy collection. It's filled with textural work about what it was like to live and dream in post-war Italy. There's a lot of the overtly, as opposed to implicitly, political here, as well as a grappling with parenthood and adulthood that is still mixed with Calvino's trademark magical realism. At times, this felt like something like Run, Robert, Run mashed up with Marquez. If that's a combination that appeals to you and you've already read his more famous works, I highly encourage this. Perhaps an odd note to end on, given how inconsequential it is relative to the overall book, but Calvino writes a handful of times from the perspective of an animal—first, the inner life of a rabbit who knows he's about to die, and second, from that of a cat trying to escape the encroaching fog of urban growth. The animal perspective shtick is almost never successful and either ends up being too saccharine or too ridiculous to engage with on an earnest level. But, as with many rules that Calvino breaks, this one works.

0 views
Justin Duke 3 weeks ago

Dotfiles

Fernando convinced me to publish (and, therefore, clean up) my dotfiles : I’m interested in people who customize their experience of computing. This is often derided as “ricing”. But agency is interesting. People who remake their environment to suit them are interesting. And I am endlessly curious about how people do this. I like reading people’s init.el, their custom shell scripts, their NixOS config. It’s even better if they have some obscure hardware e.g. some keyboard layout I’ve never heard of and a trackball with custom gestures. I put my dotfiles up on GitHub because I imagine someone will find them interesting. My dotfiles are quite boring, but now they are public .

0 views
Justin Duke 3 weeks ago

Kiss Kiss Bang Bang

This was a really fun, silly movie—one I probably watched in high school and that very well might have become my entire personality. In a way, we're all better off that it didn't. About halfway through, I found myself thinking how deeply it reminded me of The Nice Guys , and felt quietly pleased with myself for realizing that Shane Black wrote and directed both films. They share the same strengths and the same flaws: a weak third act, where the obvious avenues of pastiche run dry and the movie retreats into generic, gratuitous action-movie spectacle. But at their best, these films are vividly alive. They pull off something that's genuinely difficult for pastiche: sustaining suspense about what's serious and what isn't. The jokes land, the timing holds up, and comedy—when it's done well—ages surprisingly gracefully. There are a few spots where this isn't quite true, and the occasional dip into melodrama cheapens the experience a bit. Still, that's a hard line for any film to walk, and this one does it better than most. Robert Downey Jr., playing a caricature of his pre–Iron Man self, is entertaining if not especially novel. The real standout, though, is Val Kilmer, who threads the needle perfectly, delivering his performance with exactly the right amount of irony. The bit parts remain just that—bit parts—and Michelle Monaghan does solid work, never tipping into manic-pixie-dream-girl territory or pick-me energy. Overall, it's just a really fun time—the kind of movie I'd happily rewatch in six months. My only substantive complaint is the same one I have with most of Black's filmography: the unnecessary thirty minutes of dull, overindulgent action scenes. They add nothing. Every moment not spent letting the three leads spar and riff off one another feels like a wasted opportunity.

0 views
Justin Duke 3 weeks ago

Wake Up Dead Man

There are three ways to evaluate Wake Up Dead Man: as a This was a very, very entertaining two and a half hours. I did not care for glass-onion , its predecessor, and I think this recovers from all of its missteps: the humor and plot are a little tighter, the script is a little less indicative of Rian Johnson spending too much time on Twitter, and the setting, production value, and aesthetic are all immaculate. But, moreover: Josh O'Connor's performance is not just good relative to this extremely accomplished bench of players in the background (Glenn Close! Andrew Scott!), but ascendant in its own right. Father Jud is probably the most interesting character in this entire series outside of Blanc himself, and O'Connor brings him to light with a nuance and warmth missing from even the sympathetic characters in this series. Between this and Challengers last week, I suddenly have a deep and great appreciation for this burgeoning young actor. 1 Not exactly a hot take, I'm aware. I think this movie's first goal is to entertain and delight, and its second goal is to seriously engage with its motifs on faith and doubt: where it succeeds in the second, it is on the back of Father Jud. (And in particular, the construction worker scene — you know the one — is Johnson at his finest, zagging from comedy to pathos and avoiding whiplash.) As a whodunit The contract between reader and writer of a whodunit is important . The joy in this medium, especially when executed well, is a real sense that you, as the reader or viewer, could have put the pieces together yourself — the joy in consumption is active because while you're enjoying the text of the work, you also get to try and be one or two steps ahead or behind the creator. This sounds obvious, but one of the reasons why Agatha Christie is, well, Agatha Christie, is that she knew how to balance this perfectly. The average Poirot mystery had you entering the final act with a handful of suspects who you all had reasons to believe were guilty, and were rich enough in their character that it wouldn't be completely out of left field if they ended up being the culprit. The best parlor scenes, accordingly, were less about filling in the gaps and more about drawing a through line between disparate clues that you had already picked up but had not connected. And here even more so than the previous two entries Rian Johnson fails. A bellwether of a bad parlor scene is length: it takes us around 20 minutes of flashbacks to go from the reveal of whom to the conclusion of why and how, much of it muddled and incoherent. What's worse, is that the Greek chorus of guilty suspects don't get crossed off so much as they simply fade into the background — don't get me wrong, it's fun to see Kerry Washington and Andrew Scott in these bit parts, but they are given tremendously little to do, are essentially miscast, and just like in Glass Onion , they do not feel like people so much as caricatures of people whom Rian Johnson wants to write a couple jokes around. Christie's novels work because you could see just enough introspection and motivation in all of the characters—not just the obvious one or two—to keep your mind racing. No such luck here: the ensemble never coheres. As a Knives Out sequel Much better than Glass Onion; arguably as good as the original film, though that had the relative freshness of its approach to buoy it. There are very few reasons not to watch this movie, and my quibbles are small: I would love to watch a new one of these every three or four years until I die. A couple other notes: film; 2. whodunit; 3. entry in the Knives Out canon. Josh Brolin's character was himself fairly flat and cartoonish, but Brolin delivers the performance with enough glee and menace that I didn't mind. I'm not sure when Brolin started shifting in my mind from a fairly generic actor to someone who knew exactly how to play against himself (Maybe it was Hail Caesar) but I'm almost never not excited to see him on screen. - Once again Johnson resorts to lampshading his influences (this time with an explicit syllabus!)

0 views
Justin Duke 2 months ago

October, 2025

How are you doing? Are you doing well? October's been very fun, as evinced by the length of things I am remiss in writing about: EntryThingy 2.0, Long Live The Post Horn, Spy Game, Poor Things, DuckDB, The War Room, The Straight Story, TypeID, Florida, Hex, Stainless, and more. The days are long; the nights are peaceful; Lucy is obsessed with brioche; Telly got a partial ACL tear and remembers to hobble around on three legs instead of four if my parents are over since they're liable to fall for it; my Schwinn got a tune-up; I wore my Albert slippers for the first time. Life accelerates; this year is a bullet train. I am free to wander from car to car but nothing changes our speed of one hundred and eighty miles per hour. This month lasted approximately three days; I would not trade those three days for anything in the world.

1 views
Justin Duke 2 months ago

Business as authorship

When Buttondown was a smaller company, the goal was to, quote unquote, stick around. That mostly meant making: for me to continue wanting to work on it. Now that all three of those things have proven themselves infinitely satisfiable, I'm sort of left with the existential crisis that comes from building a company without the explicit goal of world domination . The thing that I settled on as a North Star to justify continuing to work every day really hard on growing not just the product but the business itself is that I really want to show people this kind of alternate path for creating a software business: A business that is slightly more humane, much more sustainable, and provides substantial value and satisfaction to all involved without having to also bring Faust into the mix. I think any sort of ambition I have comes more from relative scale than absolute scale, if that makes sense. Leverage is a concept I think about a lot lately. It*'s way more interesting to me to work towards Buttondown becoming a 100-person company (in terms of scope, stability, repute, and polish) that happens to be staffed by 10 people than to have it become a 1,000-person company staffed by a thousand people. All of this is downstream of my own whims. It is not bluster for me to say that I constantly place my own ideals and idiosyncrasies ahead of Buttondown's objective financial success. Since Buttondown’s first year of existence, I have been awash in offers for capital, offers for acquisition, offers to do a completely unrelated job that happens to pay much, much more — all of which I turn down not even for moral reasons (there are lots of great uses for venture capital! I worked at two companies that would not exist without it!) nor for strategic reasons (it would be nice to throw five million dollars at solving MTAs!) but because, on many days, even the swampland ones where I'm spending a bunch of time digging through random SMTP logs while on hold with a random IP blocklist administrator based in Oslo, building a company feels like a form of authorship . I have spent the majority of the past five years trying to take how I feel about communication and technology and the social compact and put it into a little app that lets you email other people — this has been so successful that now, I find myself working with lovely people all around the world who agree with what I’m trying to say. There are three passages I’ve read that I think about almost every day: in order of my having read them, they are from East of Eden , Lincoln in the Bardo , and Working by Steinbeck, Saunders, and Caro respectively. Lee laughed. “I guess it’s funny,” he said. “I know I wouldn’t dare tell it to many people. Can you imagine four old gentlemen, the youngest is over ninety now, taking on the study of Hebrew? They engaged a learned rabbi. They took to the study as though they were children. Exercise books, grammar, vocabulary, simple sentences. You should see Hebrew written in Chinese ink with a brush! The right to left didn’t bother them as much as it would you, since we write up to down. Oh, they were perfectionists! They went to the root of the matter.” “And you?” said Samuel. “I went along with them, marveling at the beauty of their proud clean brains. I began to love my race, and for the first time I wanted to be Chinese. Every two weeks I went to a meeting with them, and in my room here I covered pages with writing. I bought every known Hebrew dictionary. But the old gentlemen were always ahead of me. It wasn’t long before they were ahead of our rabbi; he brought a colleague in. Mr. Hamilton, you should have sat through some of those nights of argument and discussion. The questions, the inspection, oh, the lovely thinking—the beautiful thinking. “After two years we felt that we could approach your sixteen verses of the fourth chapter of Genesis. My old gentlemen felt that these words were very important too—‘Thou shalt’ and ‘Do thou.’ And this was the gold from our mining: ‘Thou mayest.’ ‘Thou mayest rule over sin.’ The old gentlemen smiled and nodded and felt the years were well spent. It brought them out of their Chinese shells too, and right now they are studying Greek.” Samuel said, “It’s a fantastic story. And I’ve tried to follow and maybe I’ve missed somewhere. Why is this word so important?” Lee’s hand shook as he filled the delicate cups. He drank his down in one gulp. “Don’t you see?” he cried. “The American Standard translation orders men to triumph over sin, and you can call sin ignorance. The King James translation makes a promise in ‘Thou shalt,’ meaning that men will surely triumph over sin. But the Hebrew word, the word timshel—‘Thou mayest’— that gives a choice. It might be the most important word in the world. That says the way is open. That throws it right back on a man. For if ‘Thou mayest’—it is also true that ‘Thou mayest not.’ Don’t you see?” Please do not misunderstand. We had been mothers, fathers. Had been husbands of many years, men of import, who had come here, that first day, accompanied by crowds so vast and sorrowful that, surging forward to hear the oration, they had damaged fences beyond repair. Had been young wives, diverted here during childbirth, our gentle qualities stripped from us by the naked pain of that circumstance, who left behind husbands so enamored of us, so tormented by the horror of those last moments (the notion that we had gone down that awful black hole pain-sundered from ourselves) that they had never loved again. Had been bulky men, quietly content, who, in our first youth, had come to grasp our own unremarkableness and had, cheerfully (as if bemusedly accepting a heavy burden), shifted our life’s focus; if we would not be great, we would be useful; would be rich, and kind, and thereby able to effect good: smiling, hands in pockets, watching the world we had subtly improved walking past (this empty dowry filled; that education secretly funded). Had been affable, joking servants, of whom our masters had grown fond for the cheering words we managed as they launched forth on days full of import. Had been grandmothers, tolerant and frank, recipients of certain dark secrets,who, by the quality of their unjudging listening, granted tacit forgiveness, and thus let in the sun. What I mean to say is, we had been considerable. Had been loved. Not lonely, not lost, not freakish, but wise, each in his or her own way. Our departures caused pain. Those who had loved us sat upon their beds, heads in hand; lowered their faces to tabletops, making animal noises. We had been loved, I say, and remembering us, even many years later, people would smile, briefly gladdened at the memory. Caro (with apologies for the length): Because there was no electricity, there were no electric pumps, and water had to be hauled up—in most cases by the women on the farms and the ranches, because not only the men but the children, as soon as they were old enough to work, had to be out in the fields. The wells in the Hill Country were very deep because of the water table—in many places they had to be about seventy-five feet deep. And every bucket of water had to be hauled up from those deep wells. The Department of Agriculture tells us that the average farm family uses two hundred gallons of water a day. That’s seventy-three thousand gallons, or three hundred tons, a year. And it all had to be lifted by these women, one bucket at a time. I didn’t know what this meant. They had to show me. Those women would say to me, “You’re a city boy. You don't know how heavy a bucket of water is, do you?” So they would get out their old buckets, and they'd go out to the no-longer-used wells and wrestle off the heavy covers that were always on them to keep out the rats and squirrels, and they’d lower a bucket and fill it with water. Then they’d say, “Now feel how heavy it is.” I would haul it up, and it was heavy. And they’d say, “It was too heavy for me. After a few buckets I couldn't lift the rest with my arms anymore.” They'd show me how they had lifted each bucket of water. They would lean into the rope and throw the whole weight of their bodies into it every time, leaning so far that they were almost horizontal to the ground. And then they’d say, “Do you know how I carried the water?” They would bring out the yokes, which were like cattle yokes, so that they could carry one of the heavy buckets on each side. Sometimes these women told me something that was so sad I never forgot it. I heard it many times, but I’ll never forget the first woman who said it to me. She was a very old woman who lived on a very remote and isolated ranch—I had to drive hours just to get out there—up in the Hill Country near Burnet. She said, “Do you see how round-shouldered I am?” Well, indeed, I had noticed, without really seeing the significance, that many of these women, who were in their sixties or seventies, were much more stooped and bent than women, even elderly women, in New York. And she said: “I’m round-shouldered from hauling the water. I was round-shouldered like this well before my time, when I was still a young woman. My back got bent from hauling the water, and it got bent while I was still young.” Another woman said to me, “You know, I swore I would never be bent like my mother, and then I got married, and the first time I had to do the wash I knew I was going to look exactly like her by the time I was middle-aged.” To show me—the city boy—what washdays were like without electricity, these women would get out their old big “Number 3” zinc washtubs and line them up—three of them—on the lawn, as they had once every Monday. Next to them they’d build a fire, and they would put a huge vat of boiling water over it. A woman would put her clothes into the first washtub and wash them by bending over the washboard. Back in those days they couldn’t afford store-bought soap, so they would use soap made of lye. “Do you know what it's like to use lye soap all day?” they'd ask me. “Well, that soap would strip the skin off your hands like it was a glove.” Then they’d shift the clothes to the vat of boiling water and try to get out the rest of the dirt by “punching” the clothes with a broom handle—standing there and swirling them around like the agitator in a washing machine. Then they’d shift the clothes to the second zinc washtub—the rinsing tub—and finally to the bluing tub. The clothes would be shifted from tub to tub by lifting them out on the end of a broomstick. These old women would say to me, "You’re from the city—I bet you don't know how heavy a load of wet clothes on the end of a broomstick is. Here, feel it.” And I did—and in that moment I understood more about what electricity had meant to the Hill Country and why the people loved the man who brought it. A dripping load of soggy clothes on the end of a broomstick is heavy. Each load had to be moved on that broomstick from one washtub to the other. For the average Hill Country farm family, a week’s wash consisted of eight loads. For each load, of course, the woman had to go back to the well and haul more water on her yoke. And all this effort was in addition to bending all day over the scrubboards. Lyndon's cousin Ava, who still lives in Johnson City, told me one day, “By the time you got done washing, your back was broke. I’ll tell you—of the things in my life that I will never forget, I will never forget how my back hurt on washdays.” Hauling the water, scrubbing, punching the clothes, rinsing: a Hill Country wife did this for hours on end; a city wife did it by pressing the button on her electric washing machine. Tuesday was ironing day. Well, I don’t intend to take you through the entire week here, but I'll never forget the shock it was for me to learn how hard it was to iron in a kitchen over a woodstove, where you have to keep throwing the wood in to keep the temperature hot all day. The irons—heavy slabs of metal—weighed seven or eight pounds, and a Hill Country housewife would have four or five of them heating all day. In the Hill Country it’s nothing for the temperature to be 100 or even 105 degrees, and those kitchens would be like an oven. The women of the Hill Country called their irons the “sad irons.” I came to understand why. I came to realize that the man I was writing about had grown up in an area that was a century and more behind the rest of America, an area where life was mostly a brutal drudgery. When Lyndon Johnson became congressman he promised the people of the Hill Country that he would bring them electricity. They elected him congressman, but nobody really believed that he could do it. For one thing, there was no source of hydroelectric power within hundreds of miles. A dam had been begun on the lower Colorado River some years earlier, but the company that was building it had gone bankrupt in the Depression and its future was very uncertain. New federal financing was needed, and only the President could push that dam to completion. When Johnson got to Washington he became friends with Thomas Corcoran—“Tommy the Cork”—who was close to Roosevelt. Every time Johnson saw Corcoran he would say, “The next time you see the President, remind him about my dam.” And Corcoran reminded Roosevelt so often that finally one day Roosevelt said in exasperation, “Oh, give the kid the dam.” Once the dam was built, there was a source of electric power, but there still seemed no feasible way of getting this power out to the people. The Rural Electrification Administration had minimum density standards—about five persons per square mile, I think it was—and they said, “We're not going to lay thousands and thousands of miles of wire to connect one family here and another family over there.” The story of how Lyndon Johnson persuaded the REA to do this—how he circumvented through his ingenuity not only the REA but dozens of government agencies and regulations and brought the people electricity—is one of the most dramatic and noble examples of the use of government that I have ever heard. Actually it took more than ten years—it was 1948 before some of the people got electricity. But they did get it, and the men I talked to who had worked on the line-laying crews would tell me how they never had to bring lunch because the farm families were so grateful. When they saw the crews coming, stretching that precious wire toward them across the hills, they would set tables outside, with their best linen and dishes, to welcome the men. And all over the Hill Country, people began to name their children after Lyndon Johnson. This one man had changed the lives of more than one hundred thousand people—had brought them, practically by himself, into the twentieth century, and when Tommy Corcoran said to me, shortly before he died, “Lyndon Johnson was the best congressman for a district that ever was,” I knew exactly what he meant. Building anything of value requires tenacity that borders on mania; every good part of the built world in which we live is either natural providence or the life’s work of someone you’ll never get to meet. If you find yourself in the fortunate position to build one of these things — to improve the world and in so doing tell people things that you can’t phrase in words — I implore you to do it. It will not be easy; it will be worth it. enough money; providing enough value; and crucially, remaining interesting enough

1 views
Justin Duke 3 months ago

Adding imports to the Django shell

I was excited to finally remove from my file when 5.2 dropped because they added support for automatic model import. However, I found myself missing one other little escape hatch that exposed, which was the ability to import other arbitrary modules into the namespace. Django explains how to do bring in modules without a namespace , but I wanted to be able to inoculate my shell, since most of my modules follow a similar structure (exposing a single function). It took the bare minimum of sleuthing to figure out how to hack this in for myself, and now here I am to share that sleuthing with you. Behold, a code snippet that is hopefully self-explanatory:

0 views
Justin Duke 3 months ago

September, 2025

The last of summer's grip finally loosened its hold this September, and Richmond began its annual transformation into something gentler and more contemplative. This morning's walk with Telly required a dusting-off of the closet-buried Patagonia puffer jacket; it's perfect for walks with Lucy, who has graduated into the Big Kid stroller making it easier than ever for her to point at every dog ("dah!"), every bird (also "dah!"), every passing leaf that dared to flutter in her line of sight. As you will read below, the big corporate milestone for me this month was sponsoring Djangocon and having our first offsite over the course of a single week. Sadly, our Seattle trip was once again canceled. Haley and Lucy both got a little sick, and we had to abandon course. It's weird to think this will be the first year since 2011 that we have not stepped foot in the Pacific Northwest. More than anything though, I learned this month for the first time how impossibly difficult it is to be away from your daughter for six days. It is something I hope I have to go through again for a very long time.

1 views
Justin Duke 3 months ago

Hidden coupons

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. This manifests itself in a lot of ways: SMTP error codes, importing archives, et cetera. But one particularly pernicious way is straight. An author can come to ButtonDown having already set up a Stripe account, whether for some ad hoc use case or because they were using a separate paid subscriptions platform such as Substack or Ghost that also interfaces with Stripe. And one of the first things we do is slurp up all that data so we understand exactly what their prior history is, how many paid subscribers they have, et cetera. As you might imagine, this is very, very effective because the biggest perceived barrier for users is friction and how difficult it is for them to move from one place to another. And every time we can make it incrementally easier for them, it's worth our while. However, as you can also imagine, we deal with a lot of edge cases and idiosyncratic bits of behavior from Stripe. (And if anyone from Stripe is reading this essay, please don't interpret it as that large of a complaint because Connect is a pretty impressive bit of engineering, janky as it is.) One thing we have to do is pull in all coupon and discount data. So this is for a variety of reasons that are all uninteresting. The point of this essay is to talk about a divergence and where the abstract breaks down. You might think, as we once did, that the way to do this is pretty simple. You compile a list of all the available coupons, and then you iterate through every single subscription looking for said coupons. This is also the approach outlined in the docs and surfaced in the dashboard, so your naivete is excusable. However, this neglects to highlight an entirely different genre of discount, which is ad hoc discounts that are created and applied during the checkout session process, as well as probably a couple other places in which I'm unaware. To iterate through these, you must iterate through the subscriptions themselves: I'm sure there are a lot of interesting and nuanced reasons why these intangible coupons are not actually available through the core endpoint — I also don't care! It is a bad abstraction that I can get two different answers for "what are the coupons for this account?"; it is particularly bad because the "real" answer is by looking in the non-obvious place. At the same time, I am sympathetic. "I should not have to create a dedicated Coupon object just to apply a single discount to a single subscription" is a very reasonable papercut that I understand Stripe's desire to solve; in so doing, they created a different (and perhaps more esoteric) problem. This is why API design is a fun and interesting problem.

0 views
Justin Duke 3 months ago

Weeknotes 2.0

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 whether they belong there or on the blog (I cover that in the other post). In short: this won’t really affect the blog. Most of what will go into weeknotes are things I’ve been too much of a coward to blog about until now

0 views
Justin Duke 3 months ago

Pulumi

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 investment in quote-unquote infrastructure. We're sending a lot from our own machines and want to be able to scale that up in a way that is more observable, predictable, and legible. Second, external infrastructure is often a dark forest

0 views
Justin Duke 4 months ago

Another reason our pytest suite is slow

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 . This was true. But, like a one-year-old with a hammer, I found myself so gratified by the act of swinging that I found myself also trying to pinpoint another performance issue: why does it take so long to run a single smoke test

0 views
Justin Duke 4 months ago

Why our pytest suite is slow

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 you ask, it is (at around three minutes when parallelized on Blacksmith) either quite fast given its robustness or unfathomably slow

0 views
Justin Duke 4 months ago

63 postcards

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 actually manned a booth at — and we did so in a fashion that I would describe as idiosyncratic, ramshackle, and informed by a charming bootstrapper ethos — which is to say, deeply on brand

0 views
Justin Duke 4 months ago

Django forever

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 more as an act of circuitous open source sponsorship, and perhaps "sponsorship" is not quite the right word compared to gratuity in the most literal sense

0 views