<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: jacob-kaplan-moss</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/jacob-kaplan-moss.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-07-13T18:47:13+00:00</updated><author><name>Simon Willison</name></author><entry><title>Happy 20th birthday Django! Here's my talk on Django Origins from Django's 10th</title><link href="https://simonwillison.net/2025/Jul/13/django-birthday/#atom-tag" rel="alternate"/><published>2025-07-13T18:47:13+00:00</published><updated>2025-07-13T18:47:13+00:00</updated><id>https://simonwillison.net/2025/Jul/13/django-birthday/#atom-tag</id><summary type="html">
    &lt;p&gt;Today is the &lt;a href="https://www.djangoproject.com/weblog/2025/jul/13/happy-20th-birthday-django/"&gt;20th anniversary&lt;/a&gt; of &lt;a href="https://github.com/django/django/commit/d6ded0e91bcdd2a8f7a221f6a5552a33fe545359"&gt;the first commit&lt;/a&gt; to the public Django repository!&lt;/p&gt;
&lt;p&gt;Ten years ago we threw a multi-day 10th birthday party for Django back in its birthtown of Lawrence, Kansas. As a personal celebration of the 20th, I'm revisiting the talk I gave at &lt;em&gt;that&lt;/em&gt; event and writing it up here.&lt;/p&gt;
&lt;p&gt;Here's &lt;a href="https://www.youtube.com/watch?v=wqii_iX0RTs"&gt;the YouTube video&lt;/a&gt;. Below is a full transcript, plus my slides and some present-day annotations.&lt;/p&gt;

&lt;p&gt;&lt;lite-youtube videoid="wqii_iX0RTs" js-api="js-api"
  title="Django Origins"
  playlabel="Play: Django Origins"
&gt; &lt;/lite-youtube&gt;&lt;/p&gt;

&lt;h4&gt;Django Origins (and some things I have built with Django)&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Presented 11th July 2015 at Django Birthday in Lawrence, Kansas&lt;/em&gt;&lt;/p&gt;

  &lt;p&gt;My original talk title, as you'll see on your programs, was "Some Things I've Built with Django." But then I realized that we're here in the birthplace of Django, celebrating the 10th birthday of the framework, and nobody's told the origin story yet. So, I've switched things around a little bit. I'm going to talk about the origin story of Django, and then if I have time, I'll do the self-indulgent bit and talk about some of the projects I've shipped since then.&lt;/p&gt;
&lt;p&gt;I think Jacob's introduction hit on something I've never really realized about myself. I do love shipping things. The follow-up and the long-term thing I'm not quite so strong on. And that came to focus when I was putting together this talk and realized that basically every project I'm going to show you, I had to dig out of the Internet Archive.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ten years on from writing this talk I'm proud that I've managed to overcome my weakness in following-up - I'm now actively maintaining a bewildering array of projects, having finally figured out how to &lt;a href="https://simonwillison.net/2022/Nov/26/productivity/"&gt;maintain things&lt;/a&gt; in addition to creating them!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But that said, I will tell you the origin story of Django.&lt;/p&gt;

&lt;div class="slide" id="django-birthday02.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday02.jpg" alt="adrian holovaty blog post

May 31, 2003, 11:49 AM ET
Job opportunity: Web programmer/developer

I interrupt this blogging hiatus to announce a job opportunity.

World Online, my employer here in beautiful Lawrence, Kansas, is looking for another Web programmer to help build cool stuff for our three sites, ljworld.com, lawrence.com and kusports.com ...
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday02.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;For me, the story starts very much like Jacob's. I was reading RSS feeds back in 2003, and I saw &lt;a href="https://www.holovaty.com/writing/211/"&gt;this entry on Adrian's blog&lt;/a&gt;, talking about a job opportunity for a web programmer or developer in Lawrence, Kansas.&lt;/p&gt;
&lt;p&gt;Now, I was in England. I was at university. But my university had just given me the opportunity to take a year abroad, to take a year out to do an internship year in industry. My girlfriend at the time was off to Germany to do her year in industry. So I was like, well, you know, do I stay at university? And then this comes along.&lt;/p&gt;
&lt;p&gt;So I got in touch with Adrian and said, you know, could this work as a year-long internship instead? And he was reading my blog and I was reading his blog, and we knew that we aligned on a bunch of things. So we thought we'd give it a go.&lt;/p&gt;
&lt;p&gt;Now, if you look through this job ad, you'll see that this is all about expert knowledge of PHP and experience designing and maintaining databases, particularly MySQL. So this was a PHP and MySQL gig.&lt;/p&gt;
&lt;p&gt;But when I arrived in Kansas, we quickly realized that we were both kind of over PHP. You know, we'd both built substantial systems in PHP, and we were running up against the limits of what you can do in PHP and have your code still be clean and maintainable.&lt;/p&gt;
&lt;p&gt;And at the same time, we were both reading &lt;a href="https://web.archive.org/web/20020324174618/http://diveintomark.org/"&gt;Mark Pilgrim's blog&lt;/a&gt; (archive link). Mark Pilgrim had been publishing Dive into Python and making a really strong case for why Python was a great web language.&lt;/p&gt;
&lt;p&gt;So we decided that this was the thing we wanted to do. But we both had very strong opinions about how you should build websites. Things like URL design matters, and we care about the difference between get and post, and we want to use this new thing called CSS to lay out our web pages. And none of the existing Python web frameworks really seemed to let us do what we wanted to do.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday03.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday03.jpg" alt="Lawrence JOURNAL-WORLD
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday03.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;Now, before I talk more about that, I'll back up and talk about the organization we're working for, the &lt;a href="https://en.wikipedia.org/wiki/Lawrence_Journal-World"&gt;Lawrence Journal World&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;David &lt;a href="https://www.youtube.com/watch?v=FDsqFD4pDy4"&gt;gave a great introduction&lt;/a&gt; to why this is an interesting organization. Now, we're talking about a newspaper with a circulation of about 10,000, like a tiny newspaper, but with a world-class newsroom, huge amounts of money being funneled into it, and like employing full-time software developers to work at a local newspaper in Kansas.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday04.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday04.jpg" alt="Rob Curley (and a photo of Rob)" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday04.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And part of what was going on here was this guy. This is Rob Curley. He's been mentioned a few times before already.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday05.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday05.jpg" alt="Unofficial mission statement: “build cool shit”
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday05.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And yeah, Rob Curley set this unofficial mission statement that we "build cool shit". This is something that Adrian would certainly never say. It's not really something I'd say. But this is Rob through and through. He was a fantastic showman.&lt;/p&gt;
&lt;p&gt;And this was really the appeal of coming out to Lawrence, seeing the stuff they'd already built and the ambitions they had.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday06.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday06.jpg" alt="Screenshot of Lawrence.com - Focus on Kansas. Community blogs, calendars, merch, links to movies, video games, eating out and more." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday06.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;This is Lawrence.com. This is actually the Lawrence.com written in PHP that Adrian had built as the sole programmer at the Lawrence Journal World. And you should check this out. Like, even today, this is the best local entertainment website I have ever seen. This has everything that is happening in the town of Lawrence, Kansas population, 150,000 people. Every gig, every venue, all of the stuff that's going on.&lt;/p&gt;
&lt;p&gt;And it was all written in PHP. And it was a very clean PHP code base, but it was really stretching the limits of what it's sensible to do using PHP 4 back in 2003.&lt;/p&gt;
&lt;p&gt;So we had this goal when we started using Python. We wanted to eventually rebuild Lawrence.com using Python. But in order to get there, we had to first build -- we didn't even know it was a web framework. We called it the CMS.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday07.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday07.jpg" alt="6 Weather Lawrence. An image shows the Lawrence skyline with different conditions for the next 6 days." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday07.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And so when we started working on Django, the first thing that we shipped was actually this website. We had a lot of the six-news Lawrence. This is the six-news Lawrence -- six-news is the TV channel here -- six-news Lawrence weather page.&lt;/p&gt;
&lt;p&gt;And I think this is pretty cool. So Dan Cox, the designer, was a fantastic illustrator. We actually have this illustration of the famous Lawrence skyline with each panel could be displayed with different weather conditions depending on the weather.&lt;/p&gt;
&lt;p&gt;And in case you're not from Kansas, you might not have realized that the weather is a big deal here. You know, you have never seen more excited weathermen than when there's a tornado warning and they get to go on local news 24 hours a day giving people updates.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday08.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday08.jpg" alt="6 News Lawrence - 6 TV news anchor portrait photos in the heading." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday08.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So we put the site live first. This was the first ever Django website. We then did the rest of the 6 News Lawrence website.&lt;/p&gt;
&lt;p&gt;And this -- Adrian reminded me this morning -- the launch of this was actually delayed by a week because the most important feature on the website, which is clearly the photograph of the news people who are on TV, they didn't like their hairdos. They literally told us we couldn't launch the website until they'd had their hair redone, had the headshots retaken, had a new image put together. But, you know, image is important for these things.&lt;/p&gt;
&lt;p&gt;So anyway, we did that. We did six-news Lawrence. And by the end of my year in Kansas, Adrian had rewritten all of Lawrence.com as well.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday09.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday09.jpg" alt="Lawrence.com with a new design, it looks very cool." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday09.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So this is the Lawrence.com powered by Django. And one thing I think is interesting about this is when you talk to like David Heinemeier Hansson about Rails, he'll tell you that Rails is a framework that was extracted from Basecamp. They built Basecamp and then they pulled out the framework that they used and open sourced it.&lt;/p&gt;
&lt;p&gt;I see Django the other way around. Django is a framework that was built up to create Lawrence.com. Lawrence.com already existed. So we knew what the web framework needed to be able to do. And we just kept on iterating on Django or the CMS until it was ready to produce this site here.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday10.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday10.jpg" alt="LJWorld.com Game 2006 - photos of kids playing sports, stories about kid sports, links to photo galleries and playing locations and schedules and more." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday10.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And for me, the moment I realized that we were onto something special was actually when we built this thing. This is a classic Rob Curley project. So Rob was the boss. He had the crazy ideas and he didn't care how you implemented them. He just wanted this thing done.&lt;/p&gt;
&lt;p&gt;And he came to us one day and said, you know, the kids' little league season is about to start. Like kids playing softball or baseball. Whatever the American kids with bats thing is. So he said, kids' little league season is about to start. And we are going to go all out.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday11.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday11.jpg" alt="A Game page showing DCABA 10K Blue - a local team plus their schedule." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday11.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;I want to treat these kids like they're the New York Yankees. We're going to have player profiles and schedules and photos and results.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday12.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday12.jpg" alt="A form to sign up for cell phone updates for that team." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday12.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And, you know, we're going to have the ability for parents to get SMS notifications whenever their kid scores.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday13.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday13.jpg" alt="An index page showing 360 degree field photos for 12 different venues around town." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday13.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And we're going to have 360 degree, like, interactive photos of all of the pitches in Lawrence, Kansas, that these kids are playing games on.&lt;/p&gt;
&lt;p&gt;They actually did send a couple of interns out with a rig to take 360 degree virtual panoramas of Fenway Park and Lawrence High School and all of these different places.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday14.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday14.jpg" alt="... in three days
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday14.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And he said -- and it starts in three days. You've got three days to put this all together.&lt;/p&gt;
&lt;p&gt;And we pulled it off because Django, even at that very early stage, had all of the primitives you needed to build 360 degree interactives. That was all down to the interns. But we had all of the pieces we needed to pull this together.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday15.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday15.jpg" alt="&amp;quot;The CMS&amp;quot;" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday15.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So when we were working on it back then, we called it the CMS.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday16.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday16.jpg" alt="brazos
webbing
physique
anson
The Tornado Publishing System
private dancer
fizgig
lavalier
pythy

https://jacobian.org/writing/private_dancer/
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday16.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;A few years ago, &lt;a href="https://jacobian.org/2005/sep/9/private_dancer/"&gt;Jacob found a wiki page&lt;/a&gt; with some of the names that were being brainstormed for the open source release. And some of these are great. There's Brazos -- I don't know where that came from -- Webbing, Physique, Anson.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday17.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday17.jpg" alt="Highlighted: The Tornado Publishing System" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday17.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;This is my favorite name. I think this is what I proposed -- is the Tornado Publishing System.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday18.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday18.jpg" alt="Screenshot from Office Space. Lumbergh says &amp;quot;Yeah, if you could go ahead and get those TPS reprots to me as soon as possible... that&amp;#39;d be great&amp;quot;." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday18.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And the reason is that I was a really big fan of &lt;a href="https://en.wikipedia.org/wiki/Office_Space"&gt;Office Space&lt;/a&gt;. And if we had the Tornado, we could produce TPS reports, which I thought would be amazing.&lt;/p&gt;
&lt;p&gt;But unfortunately, this being Kansas, the association of Tornadoes isn't actually a positive one.&lt;/p&gt;
&lt;p&gt;Private Dancer, Physgig, Lavalia, Pithy -- yeah. I'm very, very pleased that they picked the name that they did.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday19.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday19.jpg" alt="“Wouldn&amp;#39;t It be cool If...”
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday19.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So one of our philosophies was build cool shit. The other philosophy we had was what we called "Wouldn't it be cool if?"&lt;/p&gt;
&lt;p&gt;So there were no user stories or careful specs or anything. We'd all sit around in the basement and then somebody would go "Wouldn't it be cool if...", and they'd say something. And if we thought it was a cool idea, we'd build it and we'd ship it that day.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday20.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday20.jpg" alt="Lawrence.com featured audio page - a list of bands each with links to their music and information about where they are playing in town this week." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday20.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And my favorite example of "Wouldn't it be cool if?" -- this is a classic Adrian one -- is "Wouldn't it be cool if the downloads page on Lawrence.com featured MP3s you could download of local bands?" And seeing as we've also got the schedule of when the bands are playing, why don't we feature the audio from bands who you can go and see that week?&lt;/p&gt;
&lt;p&gt;So this page will say, "OK Jones are playing on Thursday at the Bottleneck. Get their MP3. Listen to the radio station." We had a little MP3 widget in there. Go and look at their band profile. All of this stuff.&lt;/p&gt;
&lt;p&gt;Really, these kinds of features are what you get when you take 1970s relational database technology and use it to power websites, which -- back in 2003, in the news industry -- still felt incredibly cutting edge. But, you know, it worked.&lt;/p&gt;
&lt;p&gt;And that philosophy followed me through the rest of my career, which is sometimes a good idea and often means that you're left maintaining features that seemed like a good idea at the time and quickly become a massive pain!&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday21.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday21.jpg" alt="YAHOO!
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday21.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;After I finished my internship, I finished my degree in England and then ended up joining up with Yahoo. I was actually working out of the Yahoo UK office but for a R&amp;amp;D team in the States. I was there for about a year and a half.&lt;/p&gt;
&lt;p&gt;One of the things I learned is that you should never go and work for an R&amp;amp;D team, because the problem with R&amp;amp;D teams is you never ship. I was there for a year and a half and I basically have nothing to show for it in terms of actual shipped features.&lt;/p&gt;
&lt;p&gt;We built some very cool prototypes. And actually, after I left, one of the projects I worked on, &lt;a href="https://en.wikipedia.org/wiki/Fire_Eagle"&gt;Yahoo FireEagle&lt;/a&gt;, did end up getting spun out and turned into a real product.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday22.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday22.jpg" alt="YAHOO! ASTRONEWSOLOGY

Dick Cheneey (age 65)

Compare their horoscope with our recent news stories!

A very close friend or a member of your current peer group -- who means a great deal to you -- has recently found it necessary to go out of their way to tick you off. At least, that&amp;#39;s the way it seems. It&amp;#39;s worked, too -- better than it should have. You&amp;#39;re not just angry, you&amp;#39;re furious. Before you let go and let them have it, be sure you&amp;#39;re right. Feeling righteous is far better than feeling guilty

Fox News wins battle for Cheney interview (Reuters) - 16th February, 12:13
Cheney Says He Has Power to Declassify Info (AP) - 16th February, 09:56
Cheney Mishap Takes Focus Off CIA Leak (AP) - 16th February, 09:13
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday22.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;But there is one project -- the first project I built at Yahoo using Django that I wanted to demonstrate. This was for Yahoo's internal hack day. And so Tom Coates and myself, who were working together, we decided that we were going to build a mashup, because it was 2005 and mashups were the cutting edge of computer science.&lt;/p&gt;
&lt;p&gt;So we figured, OK, let's take the two most unlikely Yahoo products and combine them together and see what happens. My original suggestion was that we take Yahoo Dating and Yahoo Pets. But I was told that actually there was this thing called Dogster and this other thing called Catster, which already existed and did exactly that.&lt;/p&gt;
&lt;p&gt;So the next best thing, we went for Yahoo News and Yahoo Horoscopes. And what we ended up building -- and again, this is the first Django application within Yahoo -- was Yahoo Astronewsology.&lt;/p&gt;
&lt;p&gt;And the idea was you take the news feed from Yahoo News, you pull out anything that looks like it's a celebrity's name, look up their birth date, use that to look up their horoscope, and then combine them on the page.
And in a massive stroke of luck, we built this the week that Dick Cheney &lt;a href="https://en.wikipedia.org/wiki/Dick_Cheney_hunting_accident"&gt;shot his friend in the face&lt;/a&gt; while out hunting.&lt;/p&gt;
&lt;p&gt;Dick Cheney's horoscope for that week says, "A very close friend who means a great deal to you has found it necessary to go out of their way to tick you off. You're not just angry, you're furious. Before you let go and let them have it, be sure you're right. Feeling righteous is far better than feeling guilty."&lt;/p&gt;
&lt;p&gt;And so if Dick Cheney had only had only been reading his horoscopes, maybe that whole situation would have ended very differently.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday23.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday23.jpg" alt="The Guardian" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday23.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So after Yahoo, I spent a while doing consulting and things, mainly &lt;a href="https://simonwillison.net/tags/openid/"&gt;around OpenID&lt;/a&gt; because I was determined to make OpenID work. I was absolutely convinced that if OpenID didn't take off, just one company would end up owning single sign-on for the entire internet, and that would be a total disaster.&lt;/p&gt;
&lt;p&gt;And with hindsight, it didn't quite happen. Facebook login looked like it was going to do that a few years ago, but these days there's enough variety out there that I don't feel like we all have to submit to our Facebook masters.&lt;/p&gt;
&lt;p&gt;But, you know, I was enjoying freelancing and consulting and so on. And then I ended up going for coffee with somebody who worked for &lt;a href="https://www.theguardian.com/"&gt;The Guardian&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'm sure you've all heard of The Guardian. It's one of England's most internationally focused newspapers. It's a very fine publication. And I realized that I really missed working in a newsroom environment. And I was incredibly jealous of people like Adrian, who'd gone off to the Washington Post and was doing data journalism there, and Derek Willis as well, who bounced from the Post and The New York Times. There was all of this cool data journalism stuff going on.&lt;/p&gt;
&lt;p&gt;And The Guardian's pitch was basically, we've been building a CMS from scratch in Java with a giant team of engineers, and we've built it and it's really cool, but we're not shipping things quickly. We want to start exploring this idea of building things much faster to fit in with the news cycle.&lt;/p&gt;
&lt;p&gt;And that was a very, very tempting thing for me to get involved with. So I went to work for The Guardian.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday24.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday24.jpg" alt="Photo of Simon Rogers, looking like a man who can find you the right data." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday24.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And The Guardian have a really interesting way of doing onboarding of new staff. The way they do it is they set you up on coffee dates with people from all over the organization. So one day you'll be having coffee with somebody who sells ads, and the next day it'll be the deputy editor of the newsroom, and the next day it'll be a journalist somewhere. And each of these people will talk to you and then they'll suggest other people for you to meet up with. So over the first few weeks that you're there, you meet a huge variety of people.&lt;/p&gt;
&lt;p&gt;And time and time again, as I was talking to people, they were saying, "You know what? You should go and talk to Simon Rogers, this journalist in the newsroom."&lt;/p&gt;
&lt;p&gt;This is Simon Rogers. I went down to talk to him, and we had this fascinating conversation. So Simon is a journalist. He worked in the newsroom, and his speciality was gathering data for The Guardian's infographics. Because they are in the paper. They post, they have graphs and charts and all sorts of things like that that they publish.&lt;/p&gt;
&lt;p&gt;It turns out that Simon was the journalist who knew how to get that data out of basically any source you can imagine. If you wanted data, he would make some phone calls, dig into some government contacts and things, and he'd get those raw numbers. And all of the other journalists thought he was a bit weird, because he liked hanging out and editing Excel spreadsheets and stuff.&lt;/p&gt;
&lt;p&gt;So I said to him halfway through this conversation, "Just out of interest, what do you do with those Excel spreadsheets?" And he's like, "Oh, I keep them all on my hard drive." And showed me this folder with hundreds and hundreds of meticulously researched, properly citable news quality spreadsheets full of data about everything you could imagine. And they lived on his hard drive and nowhere else.&lt;/p&gt;
&lt;p&gt;And I was like, "Have you ever talked to anyone in the engineering department upstairs?" And we made this connection.&lt;/p&gt;
&lt;p&gt;And so from then on, we had this collaboration going where he would get data and he'd funnel it to me and see if we could, see if I or someone else in the engineering department at Guardian could do something fun with it.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday25.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday25.jpg" alt="Guardian website screenshot.

BNP members: the far right map of Britain

A court injunction prevents the distribution of the names on the
BNP membership leaked online. This map shows you which
constituencies have the most BNP members

Then a BNP membership by constituency colourful map.
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday25.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And so that was some of the most rewarding work of my career, because it's journalism, you know, it's news, it's stuff that matters. The deadlines are ridiculous. If a news story breaks and it takes you three weeks to turn around a piece of data journalism around it, why did you even bother? And it's perfect for applying Django to.&lt;/p&gt;
&lt;p&gt;So the first story I got to work on at the Guardian was actually one of the early WikiLeaks things. This is before WikiLeaks was like massively high profile. But quite early on, WikiLeaks leaked a list of all of the members of the British National Party, basically the British Nazis. They leaked a list of all of their names and addresses.&lt;/p&gt;
&lt;p&gt;And the Guardian is an ethical newspaper, so we're not going to just publish 18,000 people's names and addresses. But we wanted to figure out if there was something we could do that would make use of that data but wouldn't be violating anyone's individual privacy.&lt;/p&gt;
&lt;p&gt;And so what we did is we took all of the addresses, geocoded them, figured out which parliamentary constituency they lived in, and used that to generate a heat map that's actually called a choropleth map, I think, of the UK showing where the hotspots of BNP activity were.&lt;/p&gt;
&lt;p&gt;And this works because in the UK a parliamentary constituency is, they're designed to all have around about the same population. So if you just like make the color denser for the larger numbers of BNP members, you get this really interesting heat map of the country.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday26.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday26.jpg" alt="A photo of that same map shown in a paper newspaper" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday26.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And what was really cool about this is that I did this using SVG, because we have an infographics department with Illustrator who are good at working with SVG. And it's very easy with an SVG file with the right class names on things to set colors on different regions.&lt;/p&gt;
&lt;p&gt;And because we produced it in SVG, we could then hand it over to the print department, and the next day it was out in the paper. It was like a printed thing on paper, on like dead trees distributed all over the country, which I thought was super cool.&lt;/p&gt;
&lt;p&gt;So that was the first data journalism project that we did at The Guardian. And it really helped prove that given the right data sets and like the right tools and a bit of freedom, you can do some really cool things.&lt;/p&gt;
&lt;p&gt;The first few times I did this, I did it by hand. Then we had The Guardian's first hack day and I was like, well okay, I'm going to build a little self-service tool for our infographics journalists to like dump in a bunch of CSV numbers and get one of these maps out of it.&lt;/p&gt;
&lt;p&gt;So I built this tool. I didn't have anywhere official to deploy it, so I just ran it on my Linux desktop underneath my desk. And they started using it and putting things in the paper and I kind of forgot about it. And every now and then I get a little feature request.&lt;/p&gt;
&lt;p&gt;A few years after I left The Guardian, I ran into someone who worked there. And he was like, yeah, you know that thing that you built? So we had to keep your desktop running for six months after you left. And then we had to like convert it into a VMware instance. And as far as I know, my desktop is still running as a VMware instance somewhere in The Guardian.&lt;/p&gt;
&lt;p&gt;Which ties into the Simon database, I guess. The hard thing is building stuff is easy. Keeping it going it turns out is surprisingly difficult.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday27.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday27.jpg" alt="Website:  Investigate your MP&amp;#39;s expenses
mps-expenses.guaraian.co.uk

Join us in digging through the documents of MPs&amp;#39; expenses to identify individual claims, or documents that you think merit further investigation. You can work through your own MP&amp;#39;s expenses, or just hit the button below to start reviewing. 

A progress bar shows 28,801 of you have reviewed 221,220 of them, only 237o612 to go..." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday27.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;This was my favorite project at The Guardian. There was &lt;a href="https://en.wikipedia.org/wiki/United_Kingdom_parliamentary_expenses_scandal"&gt;a scandal in the UK a few years ago&lt;/a&gt; where it turned out that UK members of parliament had all been fiddling their expenses.&lt;/p&gt;
&lt;p&gt;And actually the background on this is that they're the lowest paid MPs anywhere in Europe. And it seems like the culture had become that you become an MP and on your first day somebody takes you aside and goes, look, I know the salary is terrible. But here's how to fill your expenses and make up for it.&lt;/p&gt;
&lt;p&gt;This was a scandal that was brewing for several years. The Guardian had actually filed freedom of information requests to try and get these expense reports. Because they were pretty sure something dodgy was going on. The government had dragged their heels in releasing the documents.&lt;/p&gt;
&lt;p&gt;And then just when they were a month before they finally released the documents, a rival newspaper, the Telegraph, managed to get hold of a leaked copy of all of these expenses. And so the Telegraph had 30 days lead on all of the other newspapers to dig through and try and find the dirt.&lt;/p&gt;
&lt;p&gt;So when they did release the expenses 30 days later, we had a race on our hands because we needed to analyze 20,000 odd pages of documents. Actually, here it says 450,000 pages of documents in order to try and find anything left that was newsworthy.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday28.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday28.jpg" alt="Page 34 of Janet Dean&amp;#39;s Incidental Expenses Provision 2007/08

Much of the page is redacted. 

What kind of page is this? Buttons for:
Claim, Proof, Blank, Other

Is this page interesting? Should we investigate it further?" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday28.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And so we tackled this with crowdsourcing. We stuck up a website. We told people, we told Guardian readers, come to this website, hit the button, we'll show you a random page from someone's expenses. And then you can tell us if you think it's not interesting, interesting, or we should seek an investigative reporter on it.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday29.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday29.jpg" alt="Hywel Francis MP&amp;#39;s expenses

Labour MP for Aberavon. A photo of him smiling. Below is a table of documents each showing progress through reviewing each one." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday29.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And one of the smartest things we did with this is we added a feature where you could put in your postcode, we'd figure out who your MP was, and then we would show you their smug press photo. You know, their smug face next to all of their expense claims that they'd filed.&lt;/p&gt;
&lt;p&gt;And this was incredibly effective. People were like, "Ooh, you look so smug. I'm going to get you." And once we put this up, and within 18 hours, our community had burned through hundreds of thousands of pages of expense documents trying to find this stuff.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday30.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday30.jpg" alt="Screenshot showing thumbnails of a document that is being processed." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday30.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And again, this was built in Django. We had, I think, five days warning that these documents are coming out. And so it was a total, like, I think I built a proof of concept on day one. That was enough to show that it was possible. So I got a team with a designer and a couple of other people to help out. And we had it ready to go when the document dump came out on that Friday.&lt;/p&gt;
&lt;p&gt;And it was pretty successful. We dug up some pretty interesting stories from it. And it was also just a fantastic interactive way of engaging our community. And, you know, the whole crowdsourcing side of it was super fun.&lt;/p&gt;
&lt;p&gt;So I guess the thing I've learned from that is that, oh, my goodness, it's fun working for newspapers. And actually, if you -- the Lawrence Journal world, sadly, no longer has its own technology team. But there was a period a few years ago where they were doing some cracking data journalism work. Things like tracking what the University of Kansas had been using its private jet for, and letting people explore the data around that and so on.&lt;/p&gt;
&lt;p&gt;The other thing we did at the Guardian, this is going back to Simon Rogers, is he had all of these spreadsheets on his hard drive. And we're like, okay, we should really try and publish this stuff as raw data. Because living on your hard drive under your head is a crying shame.&lt;/p&gt;
&lt;p&gt;And the idea we came up with was essentially to start something we called &lt;a href="https://www.theguardian.com/news/datablog/2009/mar/10/blogpost1"&gt;the Data blog&lt;/a&gt; and publish them as Google spreadsheets. You know, we spent a while thinking, well, you know, what's the best format to publish these things in? And we're like, well, they're in Excel. Google spreadsheets exists and it's pretty good. Let's just put a few of them up as Google sheets and see what people do with them.&lt;/p&gt;
&lt;p&gt;And it turns out that was enough to build this really fun community of data nerds around the Guardian's data blog who would build their own visualizations. They'd dig into the data. And it meant that we could get all sorts of -- like, we could get so much extra value from the work that we were already doing to gather these numbers for the newspaper. That stuff was super fun.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday31.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday31.jpg" alt="Side projects
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday31.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;Now, while I was working at the Guardian, I also got into the habit of building some projects with my girlfriend at the time, now my wife Natalie. So Natalie and I have skill sets that fit together very nicely. She's a front-end web developer. I do back-end Django stuff. I do just enough ops to be dangerous. And so between the two of us, we can build websites.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday32.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday32.jpg" alt="Django People

A map of the world with green markers, plus a table of the countries with the most registered Django community members." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday32.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;The first things we worked on together is a site which I think some people here should be familiar with, called Django People. The idea was just, you know, the Django community appears to be quite big now. Let's try and get people to stick a pin on a map and tell us where they are.&lt;/p&gt;
&lt;p&gt;Django People still exists today. It's online thanks to a large number of people constantly bugging me at Django Cons and saying, look, just give us the code and the data and we'll get it set up somewhere so it can continue to work. And that's great. I'm really glad I did that because this is the one project that I'm showing you today which is still available on the web somewhere. (&lt;em&gt;2025 update: the site is no longer online.&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;But Django People was really fun. And the thing we learned from this, my wife and I, is that we can work together really well on things.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday33.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday33.jpg" alt="/dev/fort

A photo of a very cool looking sea fortress." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday33.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;The other side project we did was much more of a collaborative effort. Again, this no longer exists, or at least it's no longer up on the web. And I'm deeply sad about this because it's my favorite thing I'm going to show you.&lt;/p&gt;
&lt;p&gt;But before I show you the project, I'll show you how we built it. We were at a BarCamp in London with a bunch of our new friends and somebody was showing photographs of this Napoleonic sea fortress that they had rented out for the weekend from an organization in the UK called &lt;a href="https://www.landmarktrust.org.uk/"&gt;the Landmark Trust&lt;/a&gt;, who basically take historic buildings and turn them into vacation rentals as part of the work to restore them.&lt;/p&gt;
&lt;p&gt;And we were like, "Oh, wouldn't it be funny if we rented a castle for a week and all of us went out there and we built stuff together?" And then we were like, "That wouldn't be funny. That would be freaking amazing."&lt;/p&gt;
&lt;p&gt;So we rented this place. This is called &lt;a href="https://en.wikipedia.org/wiki/Fort_Clonque"&gt;Fort Clonque&lt;/a&gt;. It's in the Channel Islands, halfway between England and France. And I think it cost something like $2,000 for the week, but you split that between a dozen people and it's like youth hostel prices to stay in a freaking fortress.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday34.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday34.jpg" alt="Group photos of people hanging out on the fort with their laptops." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday34.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So we got a bunch of people together and we went out there and we just spent a week. We called it &lt;a href="https://devfort.com/"&gt;/dev/fort&lt;/a&gt;. We spent a week just building something together.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday35.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday35.jpg" alt="Where&amp;#39;s my nearest llama?" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday35.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And the thing we ended up building was called Wildlife Near You. And what Wildlife Near You does is it solves the eternal question, "Where is my nearest llama?"&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday36.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday36.jpg" alt="WildlifeNearYou.com

Seen any more animals? Why not add another trip 
or import some photos from Flickr. Or you could
help people identify the animals in their photos!" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday36.jpg"&gt;#&lt;/a&gt;
  
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday37.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday37.jpg" alt="My family trip to Gigrin Farm r-ed Kite Feeding station on 15th April 2008 

Sightings: Common Raven, Common Buzzard, Red Kite" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday37.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;Once again, this is a crowdsourcing system. The idea is that you go to wildlifenearyou.com and you've just been on a trip to like a nature park or a zoo or something. And so you create a trip report saying, "I went to the Red Kite feeding station and I saw a common raven and a common buzzard and a red kite." And you import any of your photos from Flickr and so forth.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday38.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday38.jpg" alt="WildlifeNearYou: cookieyum - list of recent trips for this user" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday38.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And you build up this profile saying, "Here are all the places I've been and my favorite animals and things I've seen."&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday39.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday39.jpg" alt="Search &amp;quot;llamas&amp;quot; near &amp;quot;brighton&amp;quot; - shows Ashdown Forest Llama Farm." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday39.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And then once we've got that data set, we can solve the problem. You can say, "Search for llamas near Brighton." And it'll say, "Your nearest llama is 18 miles away and it'll show you pictures of llamas and all of the llama things."&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday40.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday40.jpg" alt="Red Panda: 17 people love this animal. Link to Wikipedia. Your nearest Red Panda is at Marwell Zoo, 51 miles away from Brighton and Hove UK." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday40.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And we have species pages. So here's the red panda page. 17 people love red pandas. You can see them at Taronga Zoo.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday41.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday41.jpg" alt="Which Marmot photo is better?

Two marmot photos - you can select one or the other or click &amp;quot;skip&amp;quot;." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday41.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And then our most viral feature was we had all of these photos of red pandas, but how do we know which is the best photo of a red panda that we should highlight on the red panda page? So we basically built Hot or Not for photographs of wildlife.&lt;/p&gt;
&lt;p&gt;So it's like, "Which marmot photo is better?" And you say, "Well, clearly the one on the right." And it's like, "Okay, which skunk photo is better?"&lt;/p&gt;
&lt;p&gt;I was looking at the logs and people would go through hundreds and hundreds of photos. And you'd get scores and you can see, "Oh, wow, my marmot photo is the second best marmot photo on the whole website."&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday42.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday42.jpg" alt="Find owls near you!
owlsnearyou.com
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday42.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So that was really fun. And then we eventually took it a step further and said, "Okay, well, this is really fun, but this is a website that you have to type on, right?" And meanwhile, mobile phones are now getting HTML5 geolocation and stuff. So can we go a step further?&lt;/p&gt;
&lt;p&gt;So we built owlsnearyou.com. And what owlsnearyou.com does is you type in the location, and it says, "Your nearest owl is 49 miles away." It's a spectacle owl at London Zoo. It was spotted one year ago by Natalie.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday43.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday43.jpg" alt="Owls near 2-3 Kensington St,
Brighton, Brighton and Hove

49.1 miles away
We think your nearest owl is a Spectacled Owl at London Zoo! Spotted
twice, most recently by natbat 1 year ago.
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday43.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And if you went here on a mobile phone-- If you went here on a device that supported geolocation, it doesn't even ask you where you live. It's just like, "Oh, okay, here's your nearest owl."&lt;/p&gt;
&lt;p&gt;And I think we shipped lions near you and monkeys near you and a couple of other domains, but owlsnearyou.com was always my favorite.&lt;/p&gt;
&lt;p&gt;So looking at this now, we should really get this stuff up and running again. It was freaking amazing. Like, this for me is the killer app of all killer apps.&lt;/p&gt;
&lt;p&gt;(&lt;em&gt;We did eventually bring this idea back as &lt;a href="https://www.owlsnearme.com/"&gt;www.owlsnearme.com&lt;/a&gt;, using data from &lt;a href="https://www.inaturalist.org/"&gt;iNaturalist&lt;/a&gt; - that's online today.&lt;/em&gt;)&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday44.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday44.jpg" alt="‘Bugle is a Twitter-like
application for groups of
hackers collaborating in a
castle (or fort, or other
defensive structure) with no
internet connection”
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday44.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So there have actually been a bunch of Devforts since then. One of the things we learned from Devfort is that building applications-- If you want to do a side project, doing one with user accounts and logins and so on, it's a freaking nightmare. It actually took us almost a year after we finished on the fort to finally ship Wildlife Near You because there were so many complexities. And then we had to moderate it and keep an eye on it and so on.&lt;/p&gt;
&lt;p&gt;So if you look at the more recent Devforts, they've taken that to heart. And now they try and ship things which just work and don't require ongoing users logging in and all of that kind of rubbish.&lt;/p&gt;
&lt;p&gt;But one of the other projects I wanted to show you that came out of a Devfort was something called Bugle. And the idea of Bugle is Bugle is a Twitter-like application for groups of hackers collaborating in a castle, fort, or other defensive structure who don't have an internet connection.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday45.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday45.jpg" alt="Screenshot of Bugle - it looks like Twitter, has a &amp;quot;blast! button, various messages include todo list items and git commits and messages and at-mentions" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday45.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;This was basically to deal with Twitter withdrawal when we were all on the fort together and we had an internal network. So Bugle, looking at it now, we could have been Slack! We could have been valued at $2 billion.&lt;/p&gt;
&lt;p&gt;Yeah, Bugle is like an internal Twitter clone with a bunch of extra features like it's got a paste bin and to-do lists and all sorts of stuff like that.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday46.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday46.jpg" alt="So I said to Ben Firshman...
“Wouldn&amp;#39;t it be cool if Twitter
apps on the network could
talk to Bugle instead?”
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday46.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And does anyone here know Ben Firshman? I think quite a few people do. Excellent. So Ben Firshman was out on a Devfort and I did a "Wouldn't it be cool if" on him. I said, "Wouldn't it be cool if all of our Twitter apps and our phones talked to Bugle instead on the network?"&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday47.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday47.jpg" alt="Magic Twitter support

To make Twitter clients magically work with Bugle on a network, we need to mess with BIND.

Shows BIND settings" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday47.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And so if you &lt;a href="https://github.com/simonw/bugle_project/blob/master/README.md#magic-twitter-support"&gt;go and look on GitHub&lt;/a&gt;, I bet this doesn't work anymore. But he did add magic Twitter support where you could run a local DNS server, redirect Twitter to Bugle and we cloned, he cloned enough of the Twitter API that like Twitter apps would work and it would be able to Bugle instead.&lt;/p&gt;
&lt;p&gt;We wanted to do a Devfort in America. You don't really have castles and forts that you can rent for the most part. If anyone knows of one, please come and talk to me because there's a distinct lack of defensible structures at least of the kind that we are used to back in Europe.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday48.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday48.jpg" alt="Lanyrd.com
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday48.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So I'm running out of time, but that's OK because the most recent project, Lanyrd, is something which most people here have probably encountered.&lt;/p&gt;
&lt;p&gt;I will tell a little bit of the backstory of Lanyrd because it's kind of fun.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday49.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday49.jpg" alt="A photo of Natalie and myself in wedding attire with a Golden Eagle perched on a glove on my hand." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday49.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;Lanyrd was a honeymoon project. &lt;/p&gt;
&lt;p&gt;Natalie and I got married.  The wildlife near you influence affected our wedding - it was a freaking awesome wedding! You know, in England, you can get a man with a golden eagle and a barn owl and various other birds to show up for about $400 for the day. And then you get to take photos like this.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday50.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday50.jpg" alt="Natalie and I riding a camel on a beach" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday50.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So anyway, we got married, we quit our jobs, I had to leave the Guardian because we wanted to spend the next year or two of our lives just traveling around the world, doing freelancing work on our laptops and so on.&lt;/p&gt;
&lt;p&gt;We got as far as Morocco, we were six months in, when we contracted food poisoning in Casablanca and we were too sick to keep on travelling, so we figured we needed to like, you know, and it was also Ramadan, so it was really hard to get food and stuff. So we rented an apartment for two weeks and said, "Okay, well, since we're stuck for two weeks, let's like finish that side project we've been talking about and ship it and see if anyone's interested."&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday51.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday51.jpg" alt="Lanyrd screenshot: Your contacts&amp;#39; calendar. Shows 303 conferences your Twitter contacts are interested in." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday51.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So we shipped Lanyrd, which was built around the idea of helping people who use Twitter find conferences and events to go to. What we hadn't realised is that if you build something around Twitter, especially back in 2010, it instantly goes viral amongst people who use Twitter.&lt;/p&gt;
&lt;p&gt;So that ended up cutting our honeymoon short, and we actually applied for Y Combinator from Egypt and ended up spending three years building a startup and like hiring people and doing that whole thing.&lt;/p&gt;
&lt;p&gt;(&lt;em&gt;Natalie wrote more about our startup in &lt;a href="https://blog.natbat.net/post/61658401806/lanyrd-from-idea-to-exit-the-story-of-our"&gt;Lanyrd: from idea to exit - the story of our startup&lt;/a&gt;.&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;The only thing I'll say about that is everything in the... Startups have to give the impression that everything's super easy and fun and cool all the time, because people say, "How's your startup going?" And the only correct answer is, "Oh man, it's amazing. It's doing so well." Because everyone has to lie about the misery, pain, anguish and stress that's happening behind the scenes.&lt;/p&gt;
&lt;p&gt;So it was a very interesting three years, and we built some cool stuff and we learnt a lot, and I don't regret it, but do not take startups lightly.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday52.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday52.jpg" alt="Eventbrite
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday52.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;So a year and a half ago, we ended up selling Lanyrd to Eventbrite and moving out to San Francisco. And at Eventbrite, I've been mostly on the management team building side of things, but occasionally managing to sneak some code out as well.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday53.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday53.jpg" alt="Screenshot of the My Events page on Eventbrite - at the top is an orange bar showing SQL render time and number of templates and log lines and requests." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday53.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;The one thing I want to show you from Eventbrite, because I really want to open source this thing, is again at Hack Day, we built a tool called the Tikibar, which is essentially like the Django debug toolbar, but it's designed to be run in production. Because the really tough things to debug don't happen in your dev environment. They happen in production when you're hitting a hundred million row database or whatever.&lt;/p&gt;
&lt;p&gt;And so the Tikibar is designed to add as little overhead as possible, but to still give you detailed timelines of SQL queries that are executing and service calls and all of that kind of stuff. It's called the Tikibar because I really like Tikibars.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday54.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday54.jpg" alt="The orange bar is now expanded, it shows a line for each SQL query with a timeline indicating how long each one took." style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday54.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;And the best feature is if a page takes over 500 milliseconds to load, the eyes on the Tiki God glow red in disapproval at you.&lt;/p&gt;
&lt;p&gt;If anyone wants a demo of that, come and talk to me. I would love to get a few more instrumentation hooks into Django to make this stuff easier.&lt;/p&gt;
&lt;p&gt;(&lt;em&gt;The Tikibar was eventually open sourced as &lt;a href="https://github.com/eventbrite/tikibar"&gt;eventbrite/tikibar&lt;/a&gt; on GitHub.&lt;/em&gt;)&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="django-birthday55.jpg"&gt;
  &lt;img loading="lazy" src="https://static.simonwillison.net/static/2025/django-birthday/django-birthday55.jpg" alt="“build cool shit”
(thanks, Rob)
" style="max-width: 100%" /&gt;
  &lt;div&gt;&lt;a style="float: right; text-decoration: none; border-bottom: none; padding-left: 1em;" href="https://simonwillison.net/2025/Jul/13/django-birthday/#django-birthday55.jpg"&gt;#&lt;/a&gt;
  &lt;p&gt;This has been a whistle-stop tour of the highlights of my career working with Django.&lt;/p&gt;
&lt;p&gt;And actually, in putting this presentation together, I realized that really it's that Rob Curley influence from all the way back in 2003. The reason I love Django is it makes it really easy to build cool shit and to ship it. And, you know, swearing aside, I think that's a reasonable moral to take away from this.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 id="colophon"&gt;Colophon&lt;/h4&gt;
&lt;p&gt;I put this annotated version of my 10 year old talk together using a few different tools.&lt;/p&gt;
&lt;p&gt;I fetched the audio from YouTube using &lt;a href="https://github.com/yt-dlp/yt-dlp"&gt;yt-dlp&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yt-dlp -x --audio-format mp3 \
  "https://youtube.com/watch?v=wqii_iX0RTs"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I then ran &lt;a href="https://static.simonwillison.net/static/2025/django-birthday.mp3"&gt;the mp3&lt;/a&gt; through &lt;a href="https://goodsnooze.gumroad.com/l/macwhisper"&gt;MacWhisper&lt;/a&gt; to generate an initial transcript. I cleaned that up by &lt;a href="https://claude.ai/share/5fc8a371-7000-4373-afd6-91f1347680cc"&gt;pasting it into Claude Opus 4&lt;/a&gt; with this prompt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Take this audio transcript of a talk and clean it up very slightly - I want paragraph breaks and tiny edits like removing ums or "sort of" or things like that, but other than that the content should be exactly as presented.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I converted &lt;a href="https://static.simonwillison.net/static/2025/django-birthday.pdf"&gt;a PDF of the slides&lt;/a&gt; into a JPEG per page using this command (found with the &lt;a href="https://github.com/simonw/llm-cmd"&gt;llm-cmd&lt;/a&gt; plugin):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pdftoppm -jpeg -jpegopt quality=70 django-birthday.pdf django-birthday
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then I used my &lt;a href="https://tools.simonwillison.net/annotated-presentations"&gt;annotated presentations tool&lt;/a&gt; (&lt;a href="https://simonwillison.net/2023/Aug/6/annotated-presentations/"&gt;described here&lt;/a&gt;) to combine the slides and transcript, making minor edits and adding links using Markdown in that interface.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/adrian-holovaty"&gt;adrian-holovaty&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/devfort"&gt;devfort&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/history"&gt;history&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lawrence"&gt;lawrence&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lawrence-com"&gt;lawrence-com&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lawrence-journal-world"&gt;lawrence-journal-world&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/my-talks"&gt;my-talks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/the-guardian"&gt;the-guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/annotated-talks"&gt;annotated-talks&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="adrian-holovaty"/><category term="devfort"/><category term="django"/><category term="history"/><category term="jacob-kaplan-moss"/><category term="lawrence"/><category term="lawrence-com"/><category term="lawrence-journal-world"/><category term="python"/><category term="my-talks"/><category term="the-guardian"/><category term="annotated-talks"/></entry><entry><title>Quoting Jacob Kaplan-Moss</title><link href="https://simonwillison.net/2025/Mar/23/jacob-kaplan-moss/#atom-tag" rel="alternate"/><published>2025-03-23T00:32:10+00:00</published><updated>2025-03-23T00:32:10+00:00</updated><id>https://simonwillison.net/2025/Mar/23/jacob-kaplan-moss/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://jacobian.org/2025/mar/13/beware-advice-from-old-heads/"&gt;&lt;p&gt;If you’re new to tech, taking [career] advice on what works for someone with a 20-year career is likely to be about as effective as taking career advice from a stockbroker or firefighter or nurse. There’ll be a few things that generalize, but most advice won’t.&lt;/p&gt;
&lt;p&gt;Further, even advice people with long careers on what worked for them when &lt;em&gt;they&lt;/em&gt; were getting started is unlikely to be advice that works today. The tech industry of 15 or 20 years ago was, again, &lt;strong&gt;dramatically&lt;/strong&gt; different from tech today.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://jacobian.org/2025/mar/13/beware-advice-from-old-heads/"&gt;Jacob Kaplan-Moss&lt;/a&gt;, Beware tech career advice from old heads&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/careers"&gt;careers&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="careers"/></entry><entry><title>Quoting Jacob Kaplan-Moss</title><link href="https://simonwillison.net/2024/Oct/20/jacob-kaplan-moss/#atom-tag" rel="alternate"/><published>2024-10-20T16:34:28+00:00</published><updated>2024-10-20T16:34:28+00:00</updated><id>https://simonwillison.net/2024/Oct/20/jacob-kaplan-moss/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://jacobian.org/2024/oct/18/dsf-board-2025/"&gt;&lt;p&gt;It feels like we’re at a bit of an inflection point for the Django community. [...] One of the places someone could have the most impact is by serving on the DSF Board. Like the community at large, the DSF is at a transition point: we’re outgrowing the “small nonprofit” status, and have the opportunity to really expand our ambition and reach. In all likelihood, the decisions the Board makes over the next year or two will define our direction and strategy for the next decade.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://jacobian.org/2024/oct/18/dsf-board-2025/"&gt;Jacob Kaplan-Moss&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dsf"&gt;dsf&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="django"/><category term="dsf"/></entry><entry><title>2025 DSF Board Nominations</title><link href="https://simonwillison.net/2024/Oct/16/2025-dsf-board-nominations/#atom-tag" rel="alternate"/><published>2024-10-16T23:01:22+00:00</published><updated>2024-10-16T23:01:22+00:00</updated><id>https://simonwillison.net/2024/Oct/16/2025-dsf-board-nominations/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.djangoproject.com/weblog/2024/sep/25/2025-dsf-board-nominations/"&gt;2025 DSF Board Nominations&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The Django Software Foundation board elections are coming up. There are four positions open, seven directors total. Terms last two years, and the deadline for submitting a nomination is October 25th (the date of the election has not yet been decided).&lt;/p&gt;
&lt;p&gt;Several community members have shared "DSF initiatives I'd like to see" documents to inspire people who may be considering running for the board:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/sarahboyce/68ffaaeae24d2501cf27a914f77fb97c"&gt;Sarah Boyce&lt;/a&gt; (current Django Fellow) wants a marketing strategy, better community docs, more automation and a refresh of the Django survey.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.better-simple.com/django/2024/10/13/dsf-initiatives-i-would-like-to-see/"&gt;Tim Schilling&lt;/a&gt; wants one big sponsor, more community recognition and a focus on working groups.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://noumenal.es/posts/dsf-board-election/N8W/"&gt;Carlton Gibson&lt;/a&gt; wants an Executive Director, an updated website and better integration of the community into that website.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jacobian.org/2024/oct/18/dsf-board-2025/"&gt;Jacob Kaplan-Moss&lt;/a&gt; wants effectively all of the above.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There's also a useful FAQ &lt;a href="https://forum.djangoproject.com/t/2025-dsf-board-elections/35253/7"&gt;on the Django forum&lt;/a&gt; by Thibaud Colas.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dsf"&gt;dsf&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/carlton-gibson"&gt;carlton-gibson&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="jacob-kaplan-moss"/><category term="dsf"/><category term="carlton-gibson"/></entry><entry><title>If we had $1,000,000…</title><link href="https://simonwillison.net/2024/Oct/8/if-we-had-a-million-dollars/#atom-tag" rel="alternate"/><published>2024-10-08T19:59:39+00:00</published><updated>2024-10-08T19:59:39+00:00</updated><id>https://simonwillison.net/2024/Oct/8/if-we-had-a-million-dollars/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jacobian.org/2024/oct/8/dsf-one-million/"&gt;If we had $1,000,000…&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob Kaplan-Moss gave my favorite talk at DjangoCon this year, imagining what the Django Software Foundation could do if it quadrupled its annual income to $1 million and laying out a realistic path for getting there. Jacob suggests leaning more into large donors than increasing our small donor base:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It’s far easier for me to picture convincing eight or ten or fifteen large companies to make large donations than it is to picture increasing our small donor base tenfold. So I think a major donor strategy is probably the most realistic one for us.&lt;/p&gt;
&lt;p&gt;So when I talk about major donors, who am I talking about? I’m talking about four major categories: large corporations, high net worth individuals (very wealthy people), grants from governments (e.g. the Sovereign Tech Fund run out of Germany), and private foundations (e.g. the Chan Zuckerberg Initiative, who’s given grants to the PSF in the past).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Also included: a TIL on &lt;a href="https://jacobian.org/til/talk-to-writeup-workflow/"&gt;Turning a conference talk into an annotated presentation&lt;/a&gt;. Jacob used &lt;a href="https://til.simonwillison.net/tools/annotated-presentations"&gt;my annotated presentation tool&lt;/a&gt; to OCR text from images of keynote slides, extracted a Whisper transcript from the YouTube livestream audio and then cleaned that up a little with &lt;a href="https://llm.datasette.io"&gt;LLM&lt;/a&gt; and Claude 3.5 Sonnet (&lt;code&gt;"Split the content of this transcript up into paragraphs with logical breaks. Add newlines between each paragraph."&lt;/code&gt;) before editing and re-writing it all into the final post.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/whisper"&gt;whisper&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm"&gt;llm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-3-5-sonnet"&gt;claude-3-5-sonnet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dsf"&gt;dsf&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="jacob-kaplan-moss"/><category term="whisper"/><category term="llm"/><category term="claude-3-5-sonnet"/><category term="dsf"/></entry><entry><title>Ethical Applications of AI to Public Sector Problems</title><link href="https://simonwillison.net/2024/Oct/2/ethical-applications-of-ai-to-public-sector-problems/#atom-tag" rel="alternate"/><published>2024-10-02T17:42:21+00:00</published><updated>2024-10-02T17:42:21+00:00</updated><id>https://simonwillison.net/2024/Oct/2/ethical-applications-of-ai-to-public-sector-problems/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jacobian.org/2024/oct/1/ethical-public-sector-ai/"&gt;Ethical Applications of AI to Public Sector Problems&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob Kaplan-Moss developed this model a few years ago (before the generative AI rush) while working with public-sector startups and is publishing it now. He starts by outright dismissing the snake-oil infested field of “predictive” models:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It’s not ethical to predict social outcomes — and it’s probably not possible. Nearly everyone claiming to be able to do this is lying: their algorithms do not, in fact, make predictions that are any better than guesswork. […] Organizations acting in the public good should avoid this area like the plague, and call bullshit on anyone making claims of an ability to predict social behavior.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jacob then differentiates assistive AI and automated AI. Assistive AI helps human operators process and consume information, while leaving the human to take action on it. Automated AI acts upon that information without human oversight.&lt;/p&gt;
&lt;p&gt;His conclusion: yes to assistive AI, and no to automated AI:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;All too often, &lt;strong&gt;AI algorithms encode human bias&lt;/strong&gt;. And in the public sector, failure carries real life or death consequences. In the private sector, companies can decide that a certain failure rate is OK and let the algorithm do its thing. But when citizens interact with their governments, they have an expectation of fairness, which, because AI judgement will always be available, it cannot offer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On Mastodon &lt;a href="https://fedi.simonwillison.net/@simon/113235310036566202"&gt;I said to Jacob&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’m heavily opposed to anything where decisions with consequences are outsourced to AI, which I think fits your model very well&lt;/p&gt;
&lt;p&gt;(somewhat ironic that I wrote this message from the passenger seat of my first ever Waymo trip, and this weird car is making extremely consequential decisions dozens of times a second!)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Which sparked an interesting conversation about why life-or-death decisions made by self-driving cars feel different from decisions about social services. My take on that:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I think it’s about judgement: the decisions I care about are far more deep and non-deterministic than “should I drive forward or stop”.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://social.jacobian.org/@jacob/113235551869890541"&gt;Jacob&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Where there’s moral ambiguity, I want a human to own the decision both so there’s a chance for empathy, and also for someone to own the accountability for the choice.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That idea of ownership and accountability for decision making feels critical to me. A giant black box of matrix multiplication cannot take accountability for “decisions” that it makes.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ethics"&gt;ethics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-ethics"&gt;ai-ethics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-bias"&gt;ai-bias&lt;/a&gt;&lt;/p&gt;



</summary><category term="ethics"/><category term="jacob-kaplan-moss"/><category term="ai"/><category term="ai-ethics"/><category term="ai-bias"/></entry><entry><title>Themes from DjangoCon US 2024</title><link href="https://simonwillison.net/2024/Sep/27/themes-from-djangocon-us-2024/#atom-tag" rel="alternate"/><published>2024-09-27T23:36:02+00:00</published><updated>2024-09-27T23:36:02+00:00</updated><id>https://simonwillison.net/2024/Sep/27/themes-from-djangocon-us-2024/#atom-tag</id><summary type="html">
    &lt;p&gt;I just arrived home from a trip to Durham, North Carolina for DjangoCon US 2024. I’ve already written &lt;a href="https://simonwillison.net/2024/Sep/25/djp-a-plugin-system-for-django/"&gt;about my talk where I announced a new plugin system for Django&lt;/a&gt;; here are my notes on some of the other themes that resonated with me during the conference.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="https://simonwillison.net/2024/Sep/27/themes-from-djangocon-us-2014/#growing-the-django-software-foundation-dsf-"&gt;Growing the Django Software Foundation (DSF)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://simonwillison.net/2024/Sep/27/themes-from-djangocon-us-2014/#could-we-fund-a-django-lts-accessibility-audit-"&gt;Could we fund a Django LTS accessibility audit?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://simonwillison.net/2024/Sep/27/themes-from-djangocon-us-2014/#django-fellows-continue-to-provide-outstanding-value"&gt;Django fellows continue to provide outstanding value&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://simonwillison.net/2024/Sep/27/themes-from-djangocon-us-2014/#django-needs-feature-champions"&gt;Django needs feature champions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://simonwillison.net/2024/Sep/27/themes-from-djangocon-us-2014/#htmx-fits-django-really-well"&gt;htmx fits Django really well&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://simonwillison.net/2024/Sep/27/themes-from-djangocon-us-2014/#django-ninja-has-positive-buzz"&gt;Django Ninja has positive buzz&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://simonwillison.net/2024/Sep/27/themes-from-djangocon-us-2014/#valkey-as-a-last-minute-sponsor"&gt;Valkey as a last-minute sponsor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://simonwillison.net/2024/Sep/27/themes-from-djangocon-us-2014/#durham-has-a-world-class-collection-of-tubas"&gt;Durham has a world-class collection of tubas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id="growing-the-django-software-foundation-dsf-"&gt;Growing the Django Software Foundation (DSF)&lt;/h4&gt;
&lt;p&gt;Jacob Kaplan-Moss gave &lt;a href="https://2024.djangocon.us/talks/if-we-had-1000000-what-could-the-dsf-do-with-4x-its-budget/"&gt;my favorite talk&lt;/a&gt; of the conference, asking what the Django Software Foundation could do if it quadrupled its annual income from $250,000 to $1 million dollars, and then mapping out a convincing path to get there.&lt;/p&gt;
&lt;p&gt;I really liked this diagram Jacob provided summarizing the foundation’s current income and expenditures. It’s pretty cool that $90,000 of annual income comes from individual donors, over a third of the total since corporate donors provide $160,000.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2024/dsf-diagram.jpg" alt="Financial breakdown diagram with the following numbers:  PLATINUM &amp;amp; GOLD: $125,000 CORPORATE DONORS: $160,000 BUDGET: $255,000 SILVER &amp;amp; BELOW: $35,000 INDIVIDUAL DONORS: $90,000  Spending:  WAGES (FELLOWS): $200,000 GRANTS: $35,000 OTHER: $5,000 FEES/HOSTING: $10,000 SURPLUS: $10,000​​​​​​​​​​​​​​​​" style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;Top priority would be hiring an Executive Director for the foundation, which is currently lead entirely by an elected, volunteer board. I’ve seen how useful a professional ED is from my own experiences &lt;a href="https://simonwillison.net/2024/Sep/18/board-of-the-python-software-foundation/"&gt;on the Python Software Foundation board&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Having someone working full time on the foundation outside of our current fellows - who have more than enough on their plates already - would enable the foundation to both take on more ambitious goals and also raise more money with which to tackle them.&lt;/p&gt;
&lt;p&gt;A line that Jacob used repeatedly in his talk about funding the foundation was this: if you or your organization &lt;em&gt;wouldn’t&lt;/em&gt; want to sponsor Django, he’d love to know why that is - understanding those blockers right now is almost as valuable as receiving actual cash. You can reach out to him at &lt;code&gt;jacob at djangoproject.com&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id="could-we-fund-a-django-lts-accessibility-audit-"&gt;Could we fund a Django LTS accessibility audit?&lt;/h4&gt;
&lt;p&gt;Django fellows and the &lt;a href="https://github.com/django/deps/blob/main/final/0011-accessibility-team.rst"&gt;Django Accessibility Team&lt;/a&gt; have been focusing significant effort on the accessibility of the Django admin. I found this very inspiring, and in combination with the talk of more funding for the foundation it put an idea in my head: what if every Django LTS release (once every two years) was backed by a full, professional accessibility audit, run by an agency staffed with developers who use screen readers?&lt;/p&gt;
&lt;p&gt;Imagine how much impact it would have if the default Django admin interface had excellent, documented accessibility out of the box. It could improve things for hundreds of thousands of users, and set an excellent precedent for projects (and foundations) in the wider open source community.&lt;/p&gt;
&lt;p&gt;This also feels to me like something that should be inherently attractive to sponsors. A lot of agencies use Django for government work, where accessibility is a requirement with teeth. Would one of those agencies like to be the “accessibility sponsor” for a major Django release?&lt;/p&gt;
&lt;h4 id="django-fellows-continue-to-provide-outstanding-value"&gt;Django fellows continue to provide outstanding value&lt;/h4&gt;
&lt;p&gt;The &lt;a href="https://www.djangoproject.com/fundraising/#fellowship-program"&gt;DSF’s fellowship program&lt;/a&gt; remains one of the most impactful initiatives I’ve seen anywhere for ensuring the ongoing sustainability of a community-driven open source project.&lt;/p&gt;
&lt;p&gt;Both of the current fellows, Natalia Bidart and Sarah Boyce, were in attendance and gave talks. It was great getting to meet them in person.&lt;/p&gt;
&lt;p&gt;If you’re not familiar with the program, the fellows are contractors who are paid by the DSF to keep the Django project ticking over - handling many of the somewhat less glamorous tasks of responsible open source maintenance such as ticket triage, release management, security fixes and code review.&lt;/p&gt;
&lt;p&gt;The fellows program is in its tenth year, and is a key reason that Django continues to release new versions &lt;a href="https://www.djangoproject.com/download/#supported-versions"&gt;on a regular schedule&lt;/a&gt; despite having no single corporate parent with paid developers.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2024/django-roadmap.png" alt="Software release timeline: 4.2 LTS (April 2023), 5.0 (August 2024), 5.1 (2025), 5.2 LTS (2026), 6.0 (2027), 6.1 (2027), 6.2 LTS (2028), 7.0 (2029). LTS versions have extended support periods." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;Unsurprisingly there is always more work than fellow capacity, hence Jacob’s desire to further expand the existing program.&lt;/p&gt;
&lt;p&gt;The fellows program launched with a policy that fellows should not work on new feature development. I believe this was partly related to interpretation of IRS nonprofit guidelines which have since been reconsidered, and there is a growing consensus now that this policy should be dropped.&lt;/p&gt;
&lt;h4 id="django-needs-feature-champions"&gt;Django needs feature champions&lt;/h4&gt;
&lt;p&gt;Django has a well deserved reputation for stability, reliability and a dependable release process. It has less of a reputation for constantly turning out ground-breaking new features.&lt;/p&gt;
&lt;p&gt;Long-time Django contributors who I talked to all had a similar position on this: the challenge here is that big new features need dedicated champions to both lead design and development on them and to push them through to completion.&lt;/p&gt;
&lt;p&gt;The pool of community members who are both willing and able to take on these larger projects is currently too small.&lt;/p&gt;
&lt;p&gt;There are a number of ways we could address this - most notably through investing financial resources in sponsoring feature development. This has worked well for Django in the past - Django’s migrations work was funded by &lt;a href="https://www.kickstarter.com/projects/andrewgodwin/schema-migrations-for-django"&gt;a Kickstarter campaign&lt;/a&gt; back in 2013.&lt;/p&gt;
&lt;p&gt;The Django Software Foundation will shortly be announcing details of elections for both the DSF board and the Django Steering Council. These are extremely influential positions for people who want to help solve some of these larger problems.&lt;/p&gt;
&lt;h4 id="htmx-fits-django-really-well"&gt;htmx fits Django really well&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://htmx.org/"&gt;htmx&lt;/a&gt; is an incredibly good fit for the uncodified Django community philosophy of building for the web. It came up in multiple talks. It feels like it may be a solution that the Django community has been seeking for years, as a very compelling alternative to writing everything in SPA JavaScript and using Django purely as a backend via something like Django REST Framework.&lt;/p&gt;
&lt;p&gt;I've been slightly resistant to embracing htmx myself purely because it's such a critical dependency and in the past I wasn't convinced of its staying power. It's now mature, stable and widely-enough used that I'm ready to consider it for my own long-term projects.&lt;/p&gt;
&lt;h4 id="django-ninja-has-positive-buzz"&gt;Django Ninja has positive buzz&lt;/h4&gt;
&lt;p&gt;I haven’t paid much attention to &lt;a href="https://django-ninja.dev/"&gt;Django Ninja&lt;/a&gt; but it had a lot of very positive buzz at the conference as well, as a tool for quickly building full-featured, performative API endpoints (thanks to Rust-backed &lt;a href="https://docs.pydantic.dev/"&gt;Pydantic&lt;/a&gt; for serialization) with &lt;a href="https://django-ninja.dev/#interactive-api-docs"&gt;interactive API docs&lt;/a&gt; powered by OpenAPI.&lt;/p&gt;
&lt;p&gt;I respect Django REST Framework a lot, but my personal programming style leans away from Class Based Views, which it uses quite a bit. Django Ninja looks like it might fit my function-view biases better.&lt;/p&gt;
&lt;p&gt;I wrote about Richard Terry’s excellent &lt;a href="https://github.com/radiac/nanodjango"&gt;nanodjango&lt;/a&gt; single-file Django application tool &lt;a href="https://simonwillison.net/2024/Sep/24/nanodjango/"&gt;the other day&lt;/a&gt; - Django Ninja comes baked into that project as well.&lt;/p&gt;
&lt;h4 id="valkey-as-a-last-minute-sponsor"&gt;Valkey as a last-minute sponsor&lt;/h4&gt;
&lt;p&gt;The three platinum sponsors for DjangoCon this year were &lt;a href="https://www.revsys.com/"&gt;REVSYS&lt;/a&gt;, &lt;a href="https://www.caktusgroup.com/"&gt;Caktus Group&lt;/a&gt; and &lt;a href="https://valkey.io/"&gt;Valkey&lt;/a&gt;. Valkey were a late and somewhat surprising addition to the sponsorship lineup.&lt;/p&gt;
&lt;p&gt;Valkey is the &lt;a href="https://www.linuxfoundation.org/press/linux-foundation-launches-open-source-valkey-community"&gt;Linux Foundation backed&lt;/a&gt; fork of Redis, created in response to Redis &lt;a href="https://redis.io/blog/redis-adopts-dual-source-available-licensing/"&gt;ditching their Open Source license&lt;/a&gt; (which I took quite personally, having contributed my own free effort to promoting and improving Redis in the past).&lt;/p&gt;
&lt;p&gt;Aside from expressing thanks to them, I usually don’t pay sponsors that much attention. For some reason this one hit differently - the fact that Valkey were ready to step in as a major sponsor despite being only a few months old has caused me to take that project a whole lot more seriously than I did before. I’ll certainly consider them next time I come across a Redis-shaped problem.&lt;/p&gt;
&lt;h4 id="durham-has-a-world-class-collection-of-tubas"&gt;Durham has a world-class collection of tubas&lt;/h4&gt;
&lt;p&gt;My favorite category of &lt;a href="https://www.niche-museums.com/"&gt;Niche Museum&lt;/a&gt; is one that's available by appointment only where the person who collected everything is available to show you around.&lt;/p&gt;
&lt;p&gt;I always check &lt;a href="https://www.atlasobscura.com/"&gt;Atlas Obscura&lt;/a&gt; any time I visit a new city, and this time I was delighted to learn about The Vincent and Ethel Simonetti Historic Tuba Collection!&lt;/p&gt;
&lt;p&gt;I promoted it in the DjangoCon US #outings Slack channel and got together a group of five conference attendees for a visit on Thursday, shortly before my flight.&lt;/p&gt;
&lt;p&gt;It was &lt;em&gt;peak&lt;/em&gt; Niche Museum. I’ve posted photos and notes over &lt;a href="https://www.niche-museums.com/112"&gt;on my Niche Museums&lt;/a&gt; website, the first new article there in quite a while.&lt;/p&gt;

&lt;p&gt;&lt;img alt="More than a dozen varied and beautiful tubas, each with a neat attached label." src="https://static.simonwillison.net/static/2024/tuba-collection-card.jpeg" /&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/accessibility"&gt;accessibility&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/conferences"&gt;conferences&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/djangocon"&gt;djangocon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/redis"&gt;redis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dsf"&gt;dsf&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pydantic"&gt;pydantic&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/htmx"&gt;htmx&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="accessibility"/><category term="conferences"/><category term="django"/><category term="djangocon"/><category term="jacob-kaplan-moss"/><category term="python"/><category term="redis"/><category term="dsf"/><category term="pydantic"/><category term="htmx"/></entry><entry><title>uv under discussion on Mastodon</title><link href="https://simonwillison.net/2024/Sep/8/uv-under-discussion-on-mastodon/#atom-tag" rel="alternate"/><published>2024-09-08T16:23:31+00:00</published><updated>2024-09-08T16:23:31+00:00</updated><id>https://simonwillison.net/2024/Sep/8/uv-under-discussion-on-mastodon/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://social.jacobian.org/@jacob/113091418140504394"&gt;uv under discussion on Mastodon&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob Kaplan-Moss kicked off this fascinating conversation about &lt;a href="https://docs.astral.sh/uv/"&gt;uv&lt;/a&gt; on Mastodon recently. It's worth reading the whole thing, which includes input from a whole range of influential Python community members such as Jeff Triplett, Glyph Lefkowitz, Russell Keith-Magee, Seth Michael Larson, Hynek Schlawack, James Bennett and others. (Mastodon is a pretty great place for keeping up with the Python community these days.)&lt;/p&gt;
&lt;p&gt;The key theme of the conversation is that, while &lt;code&gt;uv&lt;/code&gt; represents a huge set of potential improvements to the Python ecosystem, it comes with additional risks due its attachment to a VC-backed company - and its reliance on Rust rather than Python.&lt;/p&gt;
&lt;p&gt;Here are a few comments that stood out to me.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cloudisland.nz/@freakboy3742/113093889194737339"&gt;Russell&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As enthusiastic as I am about the direction uv is going, I &lt;em&gt;haven't&lt;/em&gt; adopted them anywhere - because I want very much to understand Astral’s intended business model before I hook my wagon to their tools. It's definitely not clear to me how they're going to stay liquid once the VC money runs out. They could get me onboard in a hot second if they published a "This is what we're planning to charge for" blog post.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://mastodon.social/@hynek/113094437303343866"&gt;Hynek&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As much as I hate VC, [...] FOSS projects flame out all the time too. If Frost loses interest, there’s no PDM anymore. Same for Ofek and Hatch(ling).&lt;/p&gt;
&lt;p&gt;I fully expect Astral to flame out and us having to fork/take over—it’s the circle of FOSS. To me uv looks like a genius sting to trick VCs into paying to fix packaging. We’ll be better off either way.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://mastodon.social/@glyph/113094489295782200"&gt;Glyph&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Even in the best case, Rust is more expensive and difficult to maintain, not to mention "non-native" to the average customer here. [...] And the difficulty with VC money here is that it can burn out &lt;em&gt;all&lt;/em&gt; the other projects in the ecosystem simultaneously, creating a risk of monoculture, where previously, I think we can say that "monoculture" was the &lt;em&gt;least&lt;/em&gt; of Python's packaging concerns.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://mastodon.social/@hynek/113094547139925962"&gt;Hynek on Rust&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I don’t think y’all quite grok what uv makes so special due to your seniority. The speed is really cool, but the reason Rust is elemental is that it’s one compiled blob that can be used to bootstrap and maintain a Python development. A blob that will never break because someone upgraded Homebrew, ran pip install or any other creative way people found to fuck up their installations. Python has shown to be a terrible tech to maintain Python.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://social.coop/@chrisjrn/113094511860843571"&gt;Christopher Neugebauer&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Just dropping in here to say that corporate capture of the Python ecosystem is the #1 keeps-me-up-at-night subject in my community work, so I watch Astral with interest, even if I'm not yet too worried.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm reminded of &lt;a href="https://lucumr.pocoo.org/2024/8/21/harvest-season/"&gt;this note from Armin Ronacher&lt;/a&gt;, who created Rye and later donated it to uv maintainers Astral:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;However having seen the code and what uv is doing, even in the worst possible future this is a very forkable and maintainable thing. I believe that even in case Astral shuts down or were to do something incredibly dodgy licensing wise, the community would be better off than before uv existed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm currently inclined to agree with Armin and Hynek: while the risk of corporate capture for a crucial aspect of the Python packaging and onboarding ecosystem is a legitimate concern, the amount of progress that has been made here in a relatively short time combined with the open license and quality of the underlying code keeps me optimistic that &lt;code&gt;uv&lt;/code&gt; will be a net positive for Python overall.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: &lt;code&gt;uv&lt;/code&gt; creator Charlie Marsh &lt;a href="https://hachyderm.io/@charliermarsh/113103564055291456"&gt;joined the conversation&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I don't want to charge people money to use our tools, and I don't want to create an incentive structure whereby our open source offerings are competing with any commercial offerings (which is what you see with a lost of hosted-open-source-SaaS business models).&lt;/p&gt;
&lt;p&gt;What I want to do is build software that vertically integrates with our open source tools, and sell that software to companies that are already using Ruff, uv, etc. Alternatives to things that companies already pay for today.&lt;/p&gt;
&lt;p&gt;An example of what this might look like (we may not do this, but it's helpful to have a concrete example of the strategy) would be something like an enterprise-focused private package registry. A lot of big companies use uv. We spend time talking to them. They all spend money on private package registries, and have issues with them. We could build a private registry that integrates well with uv, and sell it to those companies. [...]&lt;/p&gt;
&lt;p&gt;But the core of what I want to do is this: build great tools, hopefully people like them, hopefully they grow, hopefully companies adopt them; then sell software to those companies that represents the natural next thing they need when building with Python. Hopefully we can build something better than the alternatives by playing well with our OSS, and hopefully we are the natural choice if they're already using our OSS.&lt;/p&gt;
&lt;/blockquote&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/armin-ronacher"&gt;armin-ronacher&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/packaging"&gt;packaging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/russell-keith-magee"&gt;russell-keith-magee&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hynek-schlawack"&gt;hynek-schlawack&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mastodon"&gt;mastodon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/glyph"&gt;glyph&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/astral"&gt;astral&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/charlie-marsh"&gt;charlie-marsh&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/seth-michael-larson"&gt;seth-michael-larson&lt;/a&gt;&lt;/p&gt;



</summary><category term="armin-ronacher"/><category term="jacob-kaplan-moss"/><category term="open-source"/><category term="packaging"/><category term="python"/><category term="russell-keith-magee"/><category term="rust"/><category term="hynek-schlawack"/><category term="mastodon"/><category term="glyph"/><category term="uv"/><category term="astral"/><category term="charlie-marsh"/><category term="seth-michael-larson"/></entry><entry><title>Quoting Jacob Kaplan-Moss</title><link href="https://simonwillison.net/2024/Jul/13/jacob-kaplan-moss/#atom-tag" rel="alternate"/><published>2024-07-13T14:12:38+00:00</published><updated>2024-07-13T14:12:38+00:00</updated><id>https://simonwillison.net/2024/Jul/13/jacob-kaplan-moss/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://jacobian.org/2024/jul/12/lnt-for-engineering-leadership/"&gt;&lt;p&gt;We respect wildlife in the wilderness because we’re in &lt;em&gt;their&lt;/em&gt; house. We don’t fully understand the complexity of most ecosystems, so we seek to minimize our impact on those ecosystems since we can’t always predict what outcomes our interactions with nature might have.&lt;/p&gt;
&lt;p&gt;In software, many disastrous mistakes stem from not understanding why a system was built the way it was, but changing it anyway. It’s super common for a new leader to come in, see something they see as “useless”, and get rid of it – without understanding the implications. Good leaders make sure they understand before they mess around.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://jacobian.org/2024/jul/12/lnt-for-engineering-leadership/"&gt;Jacob Kaplan-Moss&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software-engineering"&gt;software-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/management"&gt;management&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="software-engineering"/><category term="management"/></entry><entry><title>Quoting Jacob Kaplan-Moss</title><link href="https://simonwillison.net/2024/Mar/21/jacob-kaplan-moss/#atom-tag" rel="alternate"/><published>2024-03-21T00:45:47+00:00</published><updated>2024-03-21T00:45:47+00:00</updated><id>https://simonwillison.net/2024/Mar/21/jacob-kaplan-moss/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://jacobian.org/2024/mar/20/django-chat/"&gt;&lt;p&gt;I think most people have this naive idea of consensus meaning “everyone agrees”. That’s not what consensus means, as practiced by organizations that truly have a mature and well developed consensus driven process.&lt;/p&gt;
&lt;p&gt;Consensus is not “everyone agrees”, but [a model where] people are more aligned with the process than they are with any particular outcome, and they’ve all agreed on how decisions will be made.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://jacobian.org/2024/mar/20/django-chat/"&gt;Jacob Kaplan-Moss&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/management"&gt;management&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="management"/></entry><entry><title>Talking about Django’s history and future on Django Chat</title><link href="https://simonwillison.net/2024/Mar/21/django-history-and-future/#atom-tag" rel="alternate"/><published>2024-03-21T00:42:15+00:00</published><updated>2024-03-21T00:42:15+00:00</updated><id>https://simonwillison.net/2024/Mar/21/django-history-and-future/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jacobian.org/2024/mar/20/django-chat/"&gt;Talking about Django’s history and future on Django Chat&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Django co-creator Jacob Kaplan-Moss sat down with the Django Chat podcast team to talk about Django’s history, his recent return to the Django Software Foundation board and what he hopes to achieve there.&lt;/p&gt;

&lt;p&gt;Here’s his post about it, where he used Whisper and Claude to extract some of his own highlights from the conversation.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://djangochat.com/episodes/djangos-evolution-jacob-kaplan-moss-6CswRTAf"&gt;Django Chat episodes&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/podcasts"&gt;podcasts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dsf"&gt;dsf&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="jacob-kaplan-moss"/><category term="podcasts"/><category term="python"/><category term="dsf"/></entry><entry><title>Paying people to work on open source is good actually</title><link href="https://simonwillison.net/2024/Feb/17/paying-people-to-work-on-open-source-is-good-actually/#atom-tag" rel="alternate"/><published>2024-02-17T01:42:51+00:00</published><updated>2024-02-17T01:42:51+00:00</updated><id>https://simonwillison.net/2024/Feb/17/paying-people-to-work-on-open-source-is-good-actually/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jacobian.org/2024/feb/16/paying-maintainers-is-good/"&gt;Paying people to work on open source is good actually&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
In which Jacob expands his widely quoted (including here) pithy toot about how quick people are to pick holes in paid open source contributor situations into a satisfyingly comprehensive rant. This is absolutely worth your time—there’s so much I could quote from here, but I’m going to go with this:&lt;/p&gt;

&lt;p&gt;“Many, many more people should be getting paid to write free software, but for that to happen we’re going to have to be okay accepting impure or imperfect mechanisms.”


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="open-source"/></entry><entry><title>Quoting Jacob Kaplan-Moss</title><link href="https://simonwillison.net/2024/Feb/12/jacob-kaplan-moss/#atom-tag" rel="alternate"/><published>2024-02-12T05:18:06+00:00</published><updated>2024-02-12T05:18:06+00:00</updated><id>https://simonwillison.net/2024/Feb/12/jacob-kaplan-moss/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://social.jacobian.org/@jacob/111914179201102152"&gt;&lt;p&gt;“We believe that open source should be sustainable and open source maintainers should get paid!”&lt;/p&gt;
&lt;p&gt;Maintainer: &lt;em&gt;introduces commercial features&lt;/em&gt;
“Not like that”&lt;/p&gt;
&lt;p&gt;Maintainer: &lt;em&gt;works for a large tech co&lt;/em&gt;
“Not like that”&lt;/p&gt;
&lt;p&gt;Maintainer: &lt;em&gt;takes investment&lt;/em&gt;
“Not like that”&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://social.jacobian.org/@jacob/111914179201102152"&gt;Jacob Kaplan-Moss&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="open-source"/></entry><entry><title>Should you give candidates feedback on their interview performance?</title><link href="https://simonwillison.net/2023/Sep/24/should-you-give-candidates-feedback-on-their-interview-performan/#atom-tag" rel="alternate"/><published>2023-09-24T22:25:59+00:00</published><updated>2023-09-24T22:25:59+00:00</updated><id>https://simonwillison.net/2023/Sep/24/should-you-give-candidates-feedback-on-their-interview-performan/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jacobian.org/2023/aug/25/candidate-feedback/"&gt;Should you give candidates feedback on their interview performance?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob provides a characteristically nuanced answer to the question of whether you should provide feedback to candidates you have interviewed. He suggests offering the candidate the option to email asking for feedback early in the interview process to avoid feeling pushy later on, and proposes the phrase “you failed to demonstrate...” as a useful framing device.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/management"&gt;management&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="management"/></entry><entry><title>Probably Are Gonna Need It: Application Security Edition</title><link href="https://simonwillison.net/2021/Jul/8/pagni-appsec/#atom-tag" rel="alternate"/><published>2021-07-08T18:31:01+00:00</published><updated>2021-07-08T18:31:01+00:00</updated><id>https://simonwillison.net/2021/Jul/8/pagni-appsec/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jacobian.org/2021/jul/8/appsec-pagnis/"&gt;Probably Are Gonna Need It: Application Security Edition&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob Kaplan-Moss shares his PAGNIs for application security: “basic security mitigations that are easy to do at the beginning, but get progressively harder the longer you put them off”. Plenty to think about in here—I particularly like Jacob’s recommendation to build a production-to-staging database mirroring solution that works from an allow-list of columns, to avoid the risk of accidentally exposing new private data as the product continues to evolve.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/jacobian/status/1413157068375302146"&gt;@jacobian&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pagni"&gt;pagni&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="security"/><category term="pagni"/></entry><entry><title>Quoting Jacob Kaplan-Moss</title><link href="https://simonwillison.net/2021/Feb/8/jacob-kaplan-moss/#atom-tag" rel="alternate"/><published>2021-02-08T15:21:52+00:00</published><updated>2021-02-08T15:21:52+00:00</updated><id>https://simonwillison.net/2021/Feb/8/jacob-kaplan-moss/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://jacobian.org/2021/jan/30/soccr/"&gt;&lt;p&gt;Finally, remember that whatever choice is made, you’re going to need to get behind it! You should be able to make a compelling positive case for any of the options you present. If there’s an option you can’t support, don’t present it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://jacobian.org/2021/jan/30/soccr/"&gt;Jacob Kaplan-Moss&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/management"&gt;management&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="management"/></entry><entry><title>Quoting Jacob Kaplan-Moss</title><link href="https://simonwillison.net/2021/Jan/5/jacob-kaplan-moss/#atom-tag" rel="alternate"/><published>2021-01-05T16:33:52+00:00</published><updated>2021-01-05T16:33:52+00:00</updated><id>https://simonwillison.net/2021/Jan/5/jacob-kaplan-moss/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://jacobian.org/2021/jan/5/designing-engineering-organizations/"&gt;&lt;p&gt;Generally, product-aligned teams deliver better products more rapidly. Again, Conway’s Law is inescapable; if delivering a new feature requires several teams to coordinate, you’ll struggle compared to an org where a single team can execute on a new feature.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://jacobian.org/2021/jan/5/designing-engineering-organizations/"&gt;Jacob Kaplan-Moss&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/management"&gt;management&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;&lt;/p&gt;



</summary><category term="management"/><category term="jacob-kaplan-moss"/></entry><entry><title>Demos, Prototypes, and MVPs</title><link href="https://simonwillison.net/2020/Jan/16/demos-prototypes-and-mvps/#atom-tag" rel="alternate"/><published>2020-01-16T20:24:46+00:00</published><updated>2020-01-16T20:24:46+00:00</updated><id>https://simonwillison.net/2020/Jan/16/demos-prototypes-and-mvps/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jacobian.org/2020/jan/16/demos-prototypes-mvps/"&gt;Demos, Prototypes, and MVPs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I really like how Jacob describes the difference between a demo and a prototype: a demo is externally facing and helps explain a concept to a customer; a prototype is internally facing and helps prove that something can be built.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/jacobian/status/1217844436748701700"&gt;@jacobian&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prototyping"&gt;prototyping&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="prototyping"/></entry><entry><title>My Python Development Environment, 2020 Edition</title><link href="https://simonwillison.net/2019/Nov/12/my-python-development-environment-2020-edition/#atom-tag" rel="alternate"/><published>2019-11-12T01:30:03+00:00</published><updated>2019-11-12T01:30:03+00:00</updated><id>https://simonwillison.net/2019/Nov/12/my-python-development-environment-2020-edition/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jacobian.org/2019/nov/11/python-environment-2020/"&gt;My Python Development Environment, 2020 Edition&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob Kaplan-Moss shares what works for him as a Python environment coming into 2020: pyenv, poetry, and pipx. I’m not a frequent user of any of those tools—it definitely looks like I should be.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/jacobian/status/1193972275088969735"&gt;@jacobian&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="python"/></entry><entry><title>pinboard-to-sqlite</title><link href="https://simonwillison.net/2019/Nov/7/pinboard-to-sqlite/#atom-tag" rel="alternate"/><published>2019-11-07T20:46:38+00:00</published><updated>2019-11-07T20:46:38+00:00</updated><id>https://simonwillison.net/2019/Nov/7/pinboard-to-sqlite/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/jacobian/pinboard-to-sqlite"&gt;pinboard-to-sqlite&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob Kaplan-Moss just released the second Dogsheep tool that wasn’t written by me (after goodreads-to-sqlite by Tobias Kunze)—this one imports your Pinterest bookmarks. The repo includes a really clean minimal example of how to use GitHub actions to run tests and release packages to PyPI.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/jacobian/status/1192500064163389442"&gt;@jacobian&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pypi"&gt;pypi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pinboard"&gt;pinboard&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dogsheep"&gt;dogsheep&lt;/a&gt;&lt;/p&gt;



</summary><category term="github"/><category term="jacob-kaplan-moss"/><category term="pypi"/><category term="pinboard"/><category term="dogsheep"/></entry><entry><title>What to do when PyPI goes down</title><link href="https://simonwillison.net/2010/Jul/21/pypi/#atom-tag" rel="alternate"/><published>2010-07-21T10:19:00+00:00</published><updated>2010-07-21T10:19:00+00:00</updated><id>https://simonwillison.net/2010/Jul/21/pypi/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.jacobian.org/writing/when-pypi-goes-down/#c5203"&gt;What to do when PyPI goes down&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
My deployment scripts tend to rely on PyPI these days (they install dependencies in to a virtualenv) which makes me distinctly uncomfortable. Jacob explains how to use the PyPI mirrors that are starting to come online, but that won’t help if the PyPI listing links to an externally hosted file which starts to 404, as happened with the python-openid package quite recently (now fixed). The comments on the post discuss workarounds, including hosting your own PyPI mirror or bundling tar.gz files of your dependencies with your project.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/deployment"&gt;deployment&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/packaging"&gt;packaging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pip"&gt;pip&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pypi"&gt;pypi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/setuptools"&gt;setuptools&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="deployment"/><category term="jacob-kaplan-moss"/><category term="packaging"/><category term="pip"/><category term="pypi"/><category term="python"/><category term="setuptools"/><category term="recovered"/></entry><entry><title>jacobian's django-deployment-workshop</title><link href="https://simonwillison.net/2010/Feb/19/jacobians/#atom-tag" rel="alternate"/><published>2010-02-19T14:28:35+00:00</published><updated>2010-02-19T14:28:35+00:00</updated><id>https://simonwillison.net/2010/Feb/19/jacobians/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/jacobian/django-deployment-workshop"&gt;jacobian&amp;#x27;s django-deployment-workshop&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Notes and resources from Jacob’s 3 hour Django deployment workshop at PyCon, including example configuration files for Apache2 + mod_wsgi, nginx, PostgreSQL and pgpool.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/apache"&gt;apache&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/deployment"&gt;deployment&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/modwsgi"&gt;modwsgi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nginx"&gt;nginx&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pgpool"&gt;pgpool&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/postgresql"&gt;postgresql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pycon"&gt;pycon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sysadmin"&gt;sysadmin&lt;/a&gt;&lt;/p&gt;



</summary><category term="apache"/><category term="deployment"/><category term="django"/><category term="jacob-kaplan-moss"/><category term="modwsgi"/><category term="nginx"/><category term="pgpool"/><category term="postgresql"/><category term="pycon"/><category term="python"/><category term="sysadmin"/></entry><entry><title>Writing good documentation (part 1)</title><link href="https://simonwillison.net/2009/Nov/11/documentation/#atom-tag" rel="alternate"/><published>2009-11-11T07:13:57+00:00</published><updated>2009-11-11T07:13:57+00:00</updated><id>https://simonwillison.net/2009/Nov/11/documentation/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jacobian.org/writing/good-documentation/"&gt;Writing good documentation (part 1)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob explains some of the philosophy behind Django’s documentation. Topical guides are particularly interesting—many projects skip them (leaving books to fill the gap) but they fill an essential gap between tutorials and low-level reference documentation.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/documentation"&gt;documentation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="documentation"/><category term="jacob-kaplan-moss"/><category term="python"/></entry><entry><title>Python is Unix</title><link href="https://simonwillison.net/2009/Oct/7/python/#atom-tag" rel="alternate"/><published>2009-10-07T11:43:20+00:00</published><updated>2009-10-07T11:43:20+00:00</updated><id>https://simonwillison.net/2009/Oct/7/python/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jacobian.org/writing/python-is-unix/"&gt;Python is Unix&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob ports Ryan Tomayko’s simple prefork network server to Python.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ryan-tomayko"&gt;ryan-tomayko&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unix"&gt;unix&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="python"/><category term="ryan-tomayko"/><category term="unix"/></entry><entry><title>Quoting Jacob Kaplan-Moss</title><link href="https://simonwillison.net/2009/Sep/21/clas/#atom-tag" rel="alternate"/><published>2009-09-21T18:35:21+00:00</published><updated>2009-09-21T18:35:21+00:00</updated><id>https://simonwillison.net/2009/Sep/21/clas/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://jacobian.org/writing/contributor-license-agreements/#id15"&gt;&lt;p&gt;Years ago, Alex Russell told me that Django ought to be collecting CLAs. I said "yeah, whatever" and ignored him. And thus have spent more than a year gathering CLAs to get DSF's paperwork in order. Sigh.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://jacobian.org/writing/contributor-license-agreements/#id15"&gt;Jacob Kaplan-Moss&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/alex-russell"&gt;alex-russell&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/clas"&gt;clas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/law"&gt;law&lt;/a&gt;&lt;/p&gt;



</summary><category term="alex-russell"/><category term="jacob-kaplan-moss"/><category term="clas"/><category term="django"/><category term="law"/></entry><entry><title>Twenty questions about the GPL</title><link href="https://simonwillison.net/2009/Jul/13/twenty/#atom-tag" rel="alternate"/><published>2009-07-13T23:59:01+00:00</published><updated>2009-07-13T23:59:01+00:00</updated><id>https://simonwillison.net/2009/Jul/13/twenty/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jacobian.org/writing/gpl-questions/"&gt;Twenty questions about the GPL&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob kicks off a fascinating discussion about GPLv3.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/gpl"&gt;gpl&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gpl3"&gt;gpl3&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/licensing"&gt;licensing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;&lt;/p&gt;



</summary><category term="gpl"/><category term="gpl3"/><category term="jacob-kaplan-moss"/><category term="licensing"/><category term="open-source"/></entry><entry><title>geocoders</title><link href="https://simonwillison.net/2009/May/27/geocoders/#atom-tag" rel="alternate"/><published>2009-05-27T10:02:54+00:00</published><updated>2009-05-27T10:02:54+00:00</updated><id>https://simonwillison.net/2009/May/27/geocoders/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/simonw/geocoders/tree/master"&gt;geocoders&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A fifteen minute project extracted from something else I’m working on—an ultra simple Python API for geocoding a single string against Google, Yahoo! Placemaker, GeoNames and (thanks to Jacob) Yahoo! Geo’s web services.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/geocoders"&gt;geocoders&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geocoding"&gt;geocoding&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geonames"&gt;geonames&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/placemaker"&gt;placemaker&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-services"&gt;web-services&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/yahoo"&gt;yahoo&lt;/a&gt;&lt;/p&gt;



</summary><category term="geocoders"/><category term="geocoding"/><category term="geonames"/><category term="github"/><category term="google"/><category term="jacob-kaplan-moss"/><category term="placemaker"/><category term="projects"/><category term="python"/><category term="web-services"/><category term="yahoo"/></entry><entry><title>REST worst practices</title><link href="https://simonwillison.net/2009/Apr/30/rest/#atom-tag" rel="alternate"/><published>2009-04-30T19:53:12+00:00</published><updated>2009-04-30T19:53:12+00:00</updated><id>https://simonwillison.net/2009/Apr/30/rest/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jacobian.org/writing/rest-worst-practices/"&gt;REST worst practices&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob Kaplan-Moss’ thoughts on the characteristics of a well designed Django REST API library, from November 2008.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rest"&gt;rest&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="jacob-kaplan-moss"/><category term="python"/><category term="rest"/></entry><entry><title>Developing Django apps with zc.buildout</title><link href="https://simonwillison.net/2009/Apr/16/developing/#atom-tag" rel="alternate"/><published>2009-04-16T09:50:32+00:00</published><updated>2009-04-16T09:50:32+00:00</updated><id>https://simonwillison.net/2009/Apr/16/developing/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jacobian.org/writing/django-apps-with-buildout/"&gt;Developing Django apps with zc.buildout&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob went ahead and actually documented one of Python’s myriad of packaging options.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/packaging"&gt;packaging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/zcbuildout"&gt;zcbuildout&lt;/a&gt;&lt;/p&gt;



</summary><category term="jacob-kaplan-moss"/><category term="packaging"/><category term="python"/><category term="zcbuildout"/></entry><entry><title>django-shorturls</title><link href="https://simonwillison.net/2009/Apr/13/jacobians/#atom-tag" rel="alternate"/><published>2009-04-13T09:31:13+00:00</published><updated>2009-04-13T09:31:13+00:00</updated><id>https://simonwillison.net/2009/Apr/13/jacobians/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/jacobian/django-shorturls/tree/master"&gt;django-shorturls&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob took my self-admittedly shonky shorter URL code and turned it in to a proper reusable Django application.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/djangoshorturls"&gt;djangoshorturls&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/revcanonical"&gt;revcanonical&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="djangoshorturls"/><category term="jacob-kaplan-moss"/><category term="python"/><category term="revcanonical"/></entry></feed>