Jacob Kaplan-Moss
Writing
2005 — 2012
May 2012
Auto-building Sphinx docs
A quick tip to automatically regenerate your Sphinx docs as you make changes.
March 2012
Measuring the Django Community: The Django community in 2012
In 2007, and again in 2009, I made an attempt to measure the size of the Django community. By popular request — okay, a couple people asked for it, whatever — let’s do this thing again.
October 2011
DIY supplies
Since moving to the country a year ago my weekends and evenings have turned into project time. I’m a cheapskate, so I’ve been buying and repairing lots of used tools and making a lot of my own parts. This means I’m constantly looking for some random specific bolt, or a piece of plastic some particular size, or something similarly specific and esoteric. So I starting maintaining a list of the places I go to when I need supplies. It’s really for my own reference, but I figured it might prove useful to someone, so why not put it online?
August 2011
Why conferences need a code of conduct
Recently, tech conferences have started publishing a new kind of document: a code of conduct or anti-harassment policy. Attendees are being explicitly told that they’re expected to follow these policies. I think this is important.
July 2011
Quotes: P.J. Eby on PyPI
A quote from P.J. Eby about PyPI and groupware in general.
June 2011
Is there a market for paid Django apps?
Is there a market for paid Django apps?
May 2011
A REST wankery question
Even after all theses years REST best practices still elude me sometimes.
I refuse to tolerate assholes
A response to Rusty Russell’s musing on assholes in open source
April 2011
Work for me!
Are you looking for an awesome web development gig? Then you should come work for me at Revsys. We’re hiring a full-time Python/Django developer.
March 2011
Help desk software?
I’m looking for some help-desk style software with some very specific features.
November 2010
Buildbot: Configuration and architecture
The second part in my series about building a build farm for Django with Buildbot. Starting in this part I’ll be looking at some actual code.
Buildbot: CI is hard!
Part 1 in my series on a complex Buildbot setup. This time: some background.
Office hours
Frank and I held our first “office hours” last week; the transcript is now available.
Django classes: deployment, ecosystem
Next month I’ll be teaching two new one-day classes, both of which evolved from common questions we get here at Revsys. Each class is going to be offered twice, once in LA and once in Boston.
How to roast a chicken
Learn you how to roast a bird. It’s worth it, I promise.
Django gotcha: concrete inheritance
Since 1.0, Django’s supported model inheritance. It’s a neat feature, and can go a long way towards increasing flexibility in your modeling options. However, model inheritance also offers a really excellent opportunity to shoot yourself in the foot: concrete (multi-table) inheritance.
What’s your favorite Django app?
On Twitter, I asked, “what’s your favorite third-party Django app?” Eight hours later, I’ve got about 50 replies. Let’s take a look.
October 2010
“Web Scale”
What does “web scale” mean, anyway?
Quotes: Peter Norvig on programming languages
A quote from Peter Norvig on programming languages.
August 2010
Quotes: man tar
A quote from man tar.
July 2010
Quotes: Mark Shuttleworth on Tribalism
A quote from Mark Shuttleworth on the dangers of tribalism.
Quotes: GvR on commit privileges
A quote from Guido van Rossum on commit privileges.
What to do when PyPI goes down
How to work around a PyPI outage.
June 2010
Backwards compatibility
Backwards compatibility is a pain sometimes.
util
Every large project has ‘em. Doesn’t make it any nicer.
February 2010
Dynamic form generation
I had the pleasure of being on a forms panel at PyCon 2010 chaired by Brandon Craig Rhodes. To get a stable baseline, Brandon asked each of us to provide code showing how each forms toolkit might tackle a common forms problem: dynamic forms. Here’s my solution for Django.
Early registration for my Advanced Django class ends soon
Early registration ends Friday for the March Advanced Django Class I’m teaching, so if you’re planning on coming, you should sign up soon!
To hell with web standards
Secret W3C member lists? Anonymous holds? What is this, the Senate?
December 2009
Fixing PostgreSQL’s default encoding on Ubuntu 9.10
Ubuntu 9.10 installs PostgreSQL with a default encoding of SQL_ASCII. This is stupid. Here’s how to fix it.
November 2009
Writing great documentation: You need an editor
If you really want to produce great documentation, it needs to be edited.
Writing great documentation: Technical style
How to develop a great technical writing style.
Writing great documentation: What to write
Tech docs can take a bunch of different forms ranging from high-level overviews, to step-by-step walkthroughs, to auto-generated API documentation. Unfortunately, no single format works for all users; there’s huge differences in the way that people learn, so a well-documented project needs to provide many different forms of documentation. This is the first in a series of posts that’ll cover the art of writing good technical documentation.
My travel kit
I travel quite a bit. This means I’ve often experienced a particularly geeky form of pain: the frustration of missing that one cable or power adaptor I really need. This has happened to me enough times that over the years I’ve grown into something of tech readiness geek. My travel kit now has all sorts of adaptors and cables; I thought it’d be amusing to dump out my travel bag and actually enumerate all this crap.
Measuring the Django Community: The Django community in 2009
In March of 2007, I attempted to measure the size of Django’s community. That March turned out to be a major inflection point in Django’s growth: the release of 0.96 brought a lot of new features — testing and the new forms library being the critical ones — and those in turn brought in a lot of new users. Growth since then has been at a much faster pace. Today I thought it’d be interesting to review the same metrics I used back then. I was quite curious to see what’s changed, and by how much.
Thank you, Rails
The web development community owes Rails and the Rails community a debt of gratitude. I think we should all step back from our personal preferences and plainly say thank you, Rails, for all that you’ve done to move the state of web development forward.
On commit bits
What’d you do the day you started your job? Got your commit access to the company’s source control, right? Wait, what?
Lessons from Rackspace’s downtime
Last night Rackspace Cloud had some downtime. Reading post-mortems is always instructive, so let’s see what we can learn from Rackspace.
The power of “no”
Last week, I wrote on Twitter that “closed-source software gets worse with each release (Microsoft, Adobe, …). Open-source software gets better (OOo, Ubuntu, …).” Here’s where I try to expand on that quip.
October 2009
SEO scumbags
These people are a cancer and must be destroyed.
QFT
QFT: “In short, if there’s a difference, it’s not the sex, it’s the sexism. Anyone who can’t acknowledge this is a bigot and a twit.”
Job opportunity: engineer at Whiskey Media
My friends and former co-workers at Whiskey Media are looking for a developer to join their team.
* is Unix
Links to a bunch of simple forking network servers inspired by I like Unicorn because it’s Unix.
Python is Unix
Porting Ryan Tomayko’s simple prefork network server into Python. You know, because it’s there.
September 2009
Django Master Class, October 16
I’m teaching a Django “Master Class” in Washington, DC on October 16, 2009.
Contributor License Agreements
In which copyright law makes collaborating on open source code more difficult than it should be.
Snakes on the Web
The history and future of Python web development. A talk given at PyCon Argentina and PyCon Brazil, 2009.
August 2009
Reminder: Django Training
Remember: today’s the last day to sign up at early-bird pricing for my week-long Django course in Kansas City. You can save $500 if you sign up now.
July 2009
Django Training
I’m teaching Django class in Kansas City, September 21st - 25th.
Twenty questions about the GPL
Twenty questions about the GNU Public License.
Django internals: authentication
An overview of how Django handles authentication via sessions.
Professionalism
On being professional.
June 2009
SVN usability
A comedy in which I try to remember how to import some code into SVN.
Looking for a Django developer?
Need an experienced Python/Django developer? A good friend of mine needs a new gig.
April 2009
More buildout notes
I got a lot of great feedback on my buildout tutorial I posted last week. In general, the comments there have some excellent tips, tricks, and extra pointer, so check ‘em out. After reading the comments and a few more I got over email, I thought I’d share a selected grab-bag of updates, hints, and details for those fooling around with Buildout and Django.
Developing Django apps with zc.buildout
Over the weekend I put together django-shorturls, the latest in a series of small plugable Django apps I’ve written. This time, though, I used zc.buildout and djangorecipe to build, test, package, and distribute the app, and (with the exception of a few annoyances) it’s an exceedingly civilized way to develop an app.
Nobody expects Python packaging!
Python has one package distribution system: source files and setup.py install. And easy_install. Python has two package distribution systems…
Hooray for standards
Hey, look, it’s a new W3C site.
March 2009
Python implementation details
The main part of getting Django working on alternate Python VMs was fixing the various assumptions we made about implementation details of Python.
It’s time for a change
Starting today I’m joining Frank Wiles — a good friend and fellow Lawrencian — at his consulting firm, Revolution Systems, LLC. I’m really excited to be working with Frank: he’s a great guy, and a crazy-smart developer and sysadmin.
February 2009
FAQ: Untrusted users and HTML
There’s only one perfectly safe way to allow untrusted users to enter raw HTML. You’re not going to like it.
The taste of shame and humiliation
Excuse me while I shed a few tears for my former employer. How the mighty have fallen.
January 2009
Why I’m excited about Python 3
and why you should be, too.
Descriptivists and Prescriptivists
What happened to the web standards descriptivists?
What is django.contrib?
Since it comes up a lot, I thought I’d spend a bit of time writing up my thoughts on what“django.contrib“ really is, and what including a package in it really means. In a nutshell, django.contrib contains optional, de facto standard implementations of common patterns.
November 2008
“Syntactic Sugar”
The traditional view of languages — human or computer — is that they’re a tool we use to express thought. But modern literary and linguistic theory holds that it’s a two way street: our thought drives our language, but the language we use leaves an indelible imprint on our thought processes.
Typography: Rhythm & Proportion
Lessons from The Elements of Typographic Style: rhythm and proportion.
Minimalism
The minimalism bandwagon’s leaving — jump on! Jump on!
REST worst practices
Some REST “worst practices.”
March 2008
PyCon Braindump
There are some great roundups of the content at PyCon out there; this isn’t one of them. See, I have this notebook (Moleskine FTW!) I carry with me everywhere, and now it’s chock-full of note from PyCon; this is a braindump.
Help OSI
Bruce Perens is running for the OSI board and needs support.
February 2008
Sailing on…
A look back at the years I’ve spent a the Journal-World, and an announcement about the future.
January 2008
A picture is worth a thousand words
“… supporting only Ascii is uninternational to a point that’s almost offensive …”
Shameless self-promotion
I’ve got a couple of sweet upcoming speaking/teaching gigs coming up, and now I’m going to pimp them out.
November 2007
Django Book Update
The Django Book is finished!
October 2007
Of the Web
A general impression of how CouchDB fits into the big picture of the Web.
CouchDB first impressions
I’m playing with CouchDB tonight. Here are some first thoughts, as they occur to me.
September 2007
The sorry state of database journalism
I’ve been following with interest as Derek Willis explores Caspio, a sort of hosted data-driven web app tool for journalists. This post started out as a comment on his blog, but soon ballooned.
August 2007
My “personal security” plan
Prompted by recent reading on cryptography and computer security, I’ve been rethinking my pretty lax personal security plan. Taking to heart the lesson that the best security is open, I ‘m posting my plans publicly for comment.
July 2007
Seasoning Templates
A few words about salt.
Die, Marker Felt, Die!
Like everyone else, I got sick of looking at Marker Felt on my iPhone. So I did something about it.
Dear Adobe
Acrobat Reader blows ass.
May 2007
Some guesses about the future
There’s a fun thread over at Poynter’s Online-News mailing list about what the future might hold for digital journalism. I thought I’d post my contributions here as well.
Django projects
I’ve always thought that the sign of a healthy Open Source project is a vibrant ecosystem around that project. That’s why I’ve been thrilled to see that there are a bunch of cool third-party Django add-ons popping up. I thought I’d take a few minutes and give a shout out to some of my favorites.
Django Internships at the Journal-World
I’m extremely excited to announce our new internship program here in Lawrence. Starting this summer we’re going to be hiring interns to join our kick-ass team and learn the ropes.
March 2007
Measuring the Django Community: Circles of Django (2007)
So here’s a question I get asked a lot: “How big is Django’s community?” Read on to see me fail to answer this question.
You vs. the Real World
“Be liberal in what you accept.”
Jimbo’s Number
Watching Wikipedia slowly die is sad, but there’s apparently a lesson here.
Ripped by Engadget
I got ripped off by Engadget, and I all got was this lousy t-shirt.
Wait, I didn’t even get one of those…
Five things I hate about Python
Inspired by Titus (who was in turn inspired by brian d foy), here’s what I hate about Python. I completely agree with Brian that you can’t trust any advocate who doesn’t know enough to find stuff to hate. Given that I spend a lot of time advocating Python, writing down what I hate seems a good exercise.
February 2007
Overheard at PyCon
Quotes from PyCon.
I don’t care whose is bigger
Really, I couldn’t care less who’s got a bigger penis.
January 2007
Fried Chicken
I’ve been trying to make outstanding fried chicken for about four years, and I think I’ve finally got it. I don’t mean to toot my own horn, but I just made the best damn fried chicken I’ve ever had, and it wasn’t even all that hard. If you like the crispy stuff and aren’t afraid of phrases like “heat a quart of oil to 375°”, read on…
November 2006
How the news breaks
I swear, sometimes this programming thing is really just the digital equivalent of baling twine and duct tape.
September 2006
Wanted: kick-ass sysadmin
Want a job? We’re hiring a sysadmin.
August 2006
Pronouncement
If Guido gets to Pronounce, I do, too.
July 2006
Post-OSCONum part 1: try not to suck
Part one of my thoughts after attending the Open Source Convention.
“Show-stoppers”
Lately a large number of questions posted to django-users have included phrases like “this is a show-stopper” or “this is critical”. I think it’s worth my time to point out that this is a lousy method of getting developers to do what you want. It’s the online equivalent of threatening to take your ball and go home, and is about as effective.
Here, then, some advice on the right ways to get your pet bug fixed quickly.
Digg dugg
I got Dugg, I got reddited, and all I got was this lousy t-shirt.
Warning: This post contains profanity. Read on at your own risk.
Bad dog!
The dog ate my DSlite.
June 2006
Improved text image view
I just found this in my django-ego-feed: 23 excuses: Simple Django View for Dynamic Text Replacement
I’ve been using something similar to generate the titles for the site (look at the title above for an example), so I’m pretty familiar with the technique.
Andrew’s code over there is pretty good, but I’ve got a few improvements he and you might be interested in.
Django OSCON shirts
I’m about to print up some Django shirts to take to OSCON next month — got any ideas?
May 2006
Django propaganda
Some Django propaganda to keep us rolling on…
April 2006
A complete waste of time
My post-lunch time waste hack of the day.
Django meetup in Palo Alto
If you live in the Bay Area or will be in Palo Alto on April 27th, I want to buy you dinner.
March 2006
Merquery
Brian Beck just announced that he’s beginning work on Merquery, a full-text indexer and search engine specifically designed for developers using RAD frameworks like Django.
Quiet Enjoyment
Wherein we discover that at least one lawyer has a sense of humor.
Free server? Probably not
As the saying goes, if it sounds too good to be true, it probably is.
Free servers?
So Sun’s giving away T2000 servers for free — maybe.
Django stuff at Pycon
Here’s some links to the Django stuff I showed off at Pycon.
February 2006
WWBD
What Would Bill Do?
January 2006
Template + Cache = Crazy Delicious
Here’s a simple class for a template tag that caches its output (with apologies to Chris Parnell and Andy Samberg).
Why you should use Django
Inspired by Guido van Rossum’s plea to be taught web frameworks here are (in no particular order) ten reasons why he — and you — should use Django.
Strike averted
I’m thrilled to announce we’ve hired James Bennett (a.k.a ubernostrum in #django) as World Online’s new front end developer.
Done
After far too long, I’m finally done.
December 2005
Dojo gets a manual
Since my last post hit the Dojo folks pretty hard for the lack of documenation, I’d be remiss if I didn’t point out that they now have a manual online.
Django, meet Dojo
After hearing some rave reviews of Dojo on django-dev, I finally got around to checking it out today. Here are my thoughts (with an obvious focus towards) using Dojo with Django).
Have more…
And now a word from our sponsors.
Django performance tips
Django handles lots of traffic with ease; Django sites have survived slashdottings, farkings, and more. Here are some notes on how we tweak our servers to get that type of high performance.
Hiring, part II
Besides the Django developer position I posted about yesterday, we’re also hiring a front-end web developer.
We’re hiring!
Want to work for the most innovative news organization in the country, if not the world? Want to join a team of the best and brightest online media developers? Want to get paid to create award-winning web sites?
Well, have I got the job for you: World Online is looking for a kick-ass web developer to join our team.
Lightpd on Ubuntu
Here’s how to install lighttpd from source on Ubuntu in a pleasent, Ubuntu-ish way.
What can Django learn from Rails?
One of the questions asked at Snakes & Rubies was about what Django could learn from Rails (and vice versa). Once I finish wrestling Final Cut Pro to the ground you’ll be able to see how Adrian and David answered the question, but in the meantime it got me thinking about some cool features of Rails that are worth ripping off… er… being inspired by.
September 2005
allofmp3.com RSS feed
I use and love allofmp3.com, but the site lacks an RSS feed of new music. So I created one.
Private Dancer?
As I was going over some notes on our internal wiki, I ran across a list of rejected names for the framework that become Django.
August 2005
A note to web designers
When a job listing says it requires knowledge of web standards, don’t bother applying if you haven’t changed your markup since 1998.
A quick comparison
My take on Microsoft versus Linux.
Sera’s Pancakes
My fiancée’s kick-ass pancake recipe — somewhere between a crêpe and a pancake.
Django and Rails
My feedback on Sam Newman’s comparison of Django and Rails
Reboot
I’m back.