Drupal or Django? A Guide for Decision Makers

Target Audience

drupliconThere’s a large body of technical information out there about content management systems and frameworks, but not much written specifically for decision-makers. Programmers will always have preferences, but it’s the product managers and supervisors of the world who often make the final decision about what platform on which to deploy a sophisticated site. That’s tricky, because web platform decisions are more-or-less final — it’s very, very hard to change out the platform once the wheels are in motion. Meanwhile, the decision will ultimately be based on highly technical factors, while managers are often not highly technical people.

django-logo-negativeThis document aims to lay out what I see as being the pros and cons of two popular web publishing platforms: The PHP-based Drupal content management system (CMS) and the Python-based Django framework. It’s impossible to discuss systems like these in a non-technical way. However, I’ve tried to lay out the main points in straightforward language, with an eye toward helping supervisors make an informed choice.

This document could have covered any of the 600+ systems listed at cmsmatrix.org. We cover only Drupal and Django in this document because those systems are highest on the radar at our organization. It simply would not be possible to cover every system out there. In a sense, this document is as much about making a decision between using a framework or using a content management system as it is between specific platforms. In a sense, the discussion about Drupal and Django below can be seen as a stand-in for that larger discussion.

Disclosure: The author is a Django developer, not a Drupal developer. I’ve tried to provide as even-handed an assessment as possible, though bias may show through. I will update this document with additional information from the Drupal community as it becomes available.

Continue reading “Drupal or Django? A Guide for Decision Makers”

Notes on a Django Migration

Powered by Django. Earlier this year, I inherited responsibility for the website of the Knight Digital Media Center at UC Berkeley’s Graduate School of Journalism. The site is built with Django, a web application framework written in Python. The J-School has primarily been a PHP shop, using a mixture of open-source apps — lots of WordPress, Smarty templates and piles of home-brew code. Because it’s grown organically over time with no clear underlying architecture and a constantly changing array of publications to support, the organization sits on top of dozens of unrelated databases.

These are my notes and observations on how the J-School got into this mess, why we’ve fallen in love with Django, and how we plan to dig ourselves out.

Continue reading “Notes on a Django Migration”

CMS Roundup

Loose notes from SXSW 2008 panel Content Management System Roundup, with:

George DeMet Owner, Palantir.net
Jeff Eaton Lullabot
Tiffany Farriss Pres, Palantir.net
Mike Essl Owner Operator, mike.essl.com
Matthew McDermott Principal Consultant, Catapult Systems

The perennial question on every web dev mailing list: What CMS should I choose? Expression Engine made a huge splash at this year’s SXSW, but the Drupalites were out in force as well. This panel basically boiled down to MS Sharepoint (missed this, but not interested), EE, Drupal, and observations on a smattering of other systems. In a software category that offers around 600 choices, it’s impossible ever to represent the whole picture with anything approaching accuracy, but the conversation was still useful.

Continue reading “CMS Roundup”

Expression Engine 2.0

Loose notes from SXSW 2008. Panel session on upcoming massive update to CMS Expression Engine 2.o:

Now powered by code igniter — fully objeect-oriented OSS PHP framework. The ingredients of EE left uncooked. So now EE is built on a framework. This is a big deal. Code has merged, communities are merging. Faster, easier development for Ellis Lab and for 3rd party devs. Instant increase in capabilities of both systems.
Continue reading “Expression Engine 2.0”

Future Post

One of WordPress’ little-used features is its ability to set a “drip date” – to set a post’s timestamp in the future so that it doesn’t go live on the site until that time comes around. Recently I was working on a site for a client who needed an Events section. For various reasons, I didn’t want to use any of the existing events plugins for WP – I just wanted to override the behavior for future-dated posts so that they’d go live on the site immediately, without waiting.

For the past year or so, I’ve virtually never found a case where anything I wanted to do with WP hadn’t already been solved by an existing plugin or tweak to template logic. But amazingly, I couldn’t find anything to override the default future post behavior. Posted on WP-Hackers about the problem and got a few solutions volunteered within a few hours (there’s nothing like a vibrant open source community). By far the most elegant was this one from the magical Ryan Boren (same guy who planted the semi-secret WordPress t-shirt geocache):

Stick this in a php document in your plugins folder (remember not to include any whitespace after the closing php tag!), activate it, and create a post with a future timestamp. The post’s status field in wp_posts will be set to “publish” rather than “future” and it’ll go live on the site immediately.

You can also download this as a ready-to-go plugin.

Ryan’s too busy to host this trivial but super-useful plugin himself, but invited me to. I’ve submitted it to WP-Plugins and am awaiting a response – should be available there as well before long.

Music: Daniel Mille :: Les Minots

OpenID: The Missing Link

The OpenID light went on today, after a little setup and testing. I can now go to a blog or CMS or discussion board or other service that supports OpenID and type in “birdhouse.org” – no username, no password. Hit Return, and I’m in. If I’ve never been there before, I get standard user-level permissions. If I’ve been there before and an admin has escalated my privs, I’m in as admin. Securely. How is this possible?

Created an ID for myself at MyOpenID (though you could use any OpenID provider). Doing so gave me an identity URL through that provider. But here’s the dirty little OpenID secret that shouldn’t be a secret: The protocol supports “delegation” — by adding a couple of meta lines to the header of any URL you control (the birdhouse.org homepage, in my case), that URL can stand in as your identity URL. So when I typed “birdhouse.org” into a blog that supported OpenID earlier today, it fetched that URI and read its delegation headers. It then knew my “real” identity URL at the provider. The provider was able to determine that I was already logged into their service and pass “true” back to the blog I was trying to access. If I hadn’t been logged into MyOpenID at the time, I would have been prompted to log in there first, as a middle step in a seamless process.

Once authenticated to the blog, which had the WordPress OpenID plugin installed, a user-level account in that blog was created automatically for me. The admin could then escalate my privileges to admin or whatever, and I’d still only need to type “birdhouse.org” to log in there as admin. And you can’t. So there.

Distributed single sign-on works. Totally elegant.

A while back, Six Apart launched TypeKey, a single sign-on mechanism first made available for Movable Type blogs. TK never really took off, for a couple of reasons. First, most blog owners had already discovered that requiring any kind of sign-on had a chilling effect on blog conversation — any barrier to commenting was too high, and tended to stop casual “stopper-by” conversation dead. Second, a lot of people didn’t want to put all their identity eggs in the Six Apart basket, didn’t feel comfortable having a corporation behind the critical task of identity maintenance. That assumption was bogus – TypeKey was always an open API – but a lot of people didn’t feel comfortable with it. TypeKey isn’t dead, but there aren’t many sites using it.

Lots of identity conversation at SXSW this year, with OpenID emerging as the “final” solution to the distributed identity problem. Ended up not attending that panel, but did get to eat sushi with Kaliya “identity is a commons that no one can own” Hamlin, who (by some accounts) is single-handedly responsible for wrangling the monolithic corporate gargoyles (who all wanted to sell the world on their own proprietary silo identity systems and end up falling into the same hole that swallowed TypeKey), tying them up in a room and making them take mushrooms and hug until they agreed to adopt OpenID. Now even AOL is an OpenID provider.

Free love works!

Thanks Milan

Music: Linton Kwesi Johnson :: Brain Smashing Dub


Birdhouse Hosting welcomes katovichlaw.com:

Katovich Law Group assists clients in integrating sustainable, socially and environmentally responsible practices into their businesses at every level.

Katovich Law came to Birdhouse as a Plone site. The Plone CMS embeds its own server, and is therefore incompatible with Apache (without doing fancy port re-routing). Rather than go down that road (and because circumstances were going to make it very difficult to get a raw data dump or even a Plone backup from the old host), I offered to port the site to a more common/compatible CMS (Katovich had no particular attraction to any particular CMS – they were on Plone by circumstance).

Since the site had a pretty straightforward structure, decided to see if I could pull it off in WordPress (it’s what’s for breakfast). There were a few rough edges where WordPress’ blog orientation made things a bit tricky, but overall, the experience underscored my confidence in WP’s flexibility. Had never had cause to dig into the parent/child relationship of WordPress pages, but found them an incredibly easy way to organize hierarchical material and get logically nested URLs and nav sub-menus with zero effort.

Actually wanting to start mastering messing with Drupal, but this was a useful experiment.

Music: Spaceways Incorporated :: Future

CMS – Build vs. Buy

A few months ago, I posted about the newsinitiative site I had spent most of the summer working on*, and mentioned that we had decided to build our own content management system for it from scratch. Promised to say more about the CMS “build vs. buy**” decision process we went through, but never got around to it. After installing Search Meter for WordPress a month ago, discovered that people have actually been searching this site for more info on that decision.

CMSs are a funny category of software. When you go to choose a word processor, you’ve got three or four serious options to consider (but it generally comes down to Word). Image editor? Maybe a dozen (but it generally comes down to Photoshop). There are usually more options for server-side web application software. Survey package? Maybe a dozen. Blogging platform? Again, maybe a dozen (but it generally comes down to Movable Type and WordPress). But the game changes immensely when you start looking at content management systems.

Continue reading “CMS – Build vs. Buy”


Got pulled off my regular job a couple months ago to work full time on the Carnegie-Knight “Initiative for the Future of Journalism,” an aggregate effort by five of the top journalism schools to revamp and renew approaches to journalism, and ultimately to transform the way journalism is taught.

As part of the planning for the initiative, the five participating deans drafted a vision for change that seeks to renew the mission of schools of journalism much the same way that schools of business, medicine and law have renewed themselves at different junctures in history.

Online now is a starter/brochure site, and currently all of the advance reportage is happening through external blogs. But a compadre and I (yes, we have two webmasters at the jschool now!) have been hard at work building a custom content management system* to meet the project’s fancy multimedia and nested template needs — the largest pure programming job I’ve ever been involved with, and the first time I’ve done any kind of team programming — a very satisfying experience. We’ll be rolling out the “official” site on top of our CMS later this summer. For now, the reporting fellows are scattered all over the globe, gathering material.

The project was recently blogged at Dan Gillmor’s Center for Citizen Media, at Boing-Boing and also at Utterly Boring, though the interesting stuff is yet to come, once the story packages are completed by the fellows and we wrap up the CMS.

* Will have to post separately sometime on the old build vs. buy CMS question.

Hosting FAQs on WordPress

Overdue for a thorough going-over of the Hosting FAQs, but before I dove in, wanted a clean publishing back-end for them (I’ve been maintaining them through phpMyAdmin out of laziness — the thought of building yet another CRUD back-end fills me with dread). Also wanted to build in a search engine for users. Flirted with the thought of making the FAQs a Movable Type site, but decided to try something new and employ WordPress as a CMS instead.
Continue reading “Hosting FAQs on WordPress”