I’ve been contemplating moving away from Zope 2 as a web framework for a little while now. Once upon a time, I had high hopes for Zope. I thought that it might provide me with all the Role Based Authentication and template based stuff I might need, and with Python, since that’s my preferred language at the moment. However, after several years of development using Zope, and running this personal website with it, I am.. frustrated.
Smart, And Gets Things Done
That’s something Joel Spolsky has said about hiring the right people. You want someone smart, but they have to also get things done. You don’t want an Architecture Astronaut, and increasingly, I’m feeling that Zope is a bit like this. There’s too much *framework* getting in my way when all I want to do is render web pages. Fast. I want to be able to install my web-based application easily, without requiring users to jump through too many hoops. None would be good.
Now Zope 2 does a lot of things well, but it also does a lot of things.. half-assed. There’s no single, robust, good blog Product that implements a bunch of blog type features that have been around for years. Like tags. I mean, come on. I have no idea if there’s a decent PhotoAlbum implementation yet. ORM is hard. The security framework is very flexible, but doesn’t have good shortcuts to do things with sensible defaults. Plone is a whole bunch of other code designed to try to make Zope more useful, and that adds a bunch of other issues. Widgets exist inside Archetypes, and you need Plone for that.. and to install it you need to install a PloneSite and the install your Product inside the PloneSite. DTML was a nasty hack of an idea that still hasn’t been taken out and shot. ZCML is more of the same idiocy. ZPT can’t do if/then/else clauses, only if/then clauses. The timezone code has been broken for years.
Nice Try, But
So yeah, Zope has its issues, as I’m sure any other framework does. These particular Zope issues are really hurting me now, though. I’ve got a lot of sunk cost in all the development I’ve put into Zope related stuff. I want to add functionality to this Zope site, but I can’t figure out how to do it. Syndication (RSS feeds) was a long time coming, and that’s a really simple thing to implement. I’m generally getting pretty fed up with having to wait 5 years for Zope to catch up with what everyone else has long moved on from. AJAX? JSON? Where are these standard tools? What the hell are you guys working on that is more important?
What The Cool Kids Are Using
There just isn’t that much out there using Zope. Lots of big sites are built out of ugly hacks with MySQL and PHP in a LAMP stack. And yet, they all work, and they’re fast. As they say: “First make it work. Then make it fast.” I have trouble doing either with Zope. I want what they’re having. I want to be able to quickly roll out a web app, or add features to an existing one, without having to spend 3 weeks working out what the boilerplate ‘model’ code needs to look like. Oh, and running unit tests without having to load an entire virtual server would be nice, too.
So, I have a plan. I am going to try out a couple of other ‘web-framework’ type things. I have 3 decent candidates so far: Django, TurboGears and Twisted.Web. Twisted is probably too much like hard work to do what I want to do, but I may be pleasantly surprised. I already speak Twisted, and I’m a founding sponsor (via seafelt.com), so I feel I should at least have a look at it. Django has been blessed by Guido, but TurboGears looks more like what I’m after, on the surface, at least.
So, I’m going to try to do something simple in each of them, and compare. I’ll write up my experiences here at some point in the (hopefully near) future, so check back for the results of the Great Eigenmagic Web Framework Bakeoff.
Who knows, maybe I’ll be able to tag it so you can find it easily.