Monthly Archive for October, 2006

Queues are Databases?

Arnon Rotem-Gal-Oz mentions a thesis by Jim Grey in his post Queues Are Databases?. I had the opportunity to architect a large system that relied entirely on a large network of queues earlier in the year. It seemed natural to build the queue on top of a database.

Arnon is making the assumption here that the “database” is an RDBMS, which is where I think the real difference lies. Further to this he really seems to mean that the queue is in fact a single table – that seems to be the implication in the followup Queues Are Databases: Round Two. You might need to hack around with that page to see all the content because one of the adverts has gone mad and eaten it).

That is definitely wrong in my view, because of the issues in factoring objects. The underlying queue structure shouldn’t impose factoring requirements on the objects in the queue.

I used a class that multiply inherited from an axiom Item and a standard Twisted DeferredQueue. Although very simple that provides all of the primitives of a persistent queue, and very cheaply to boot.

Ruby’s partition

A very nice little function from the Python Cookbook: group and partition. These functions really ought to be in itertools (and IMO everything in itertools ought to be in __builtins__).

Just another example of how Ruby and Python are far more similar than different :)

Verbs in REST

More good stuff from lesscode.org with Useful and Useless REST. The verb issue is one I’ve come across quite a few times, and without really deciding what I think. Ryan’s comments on the semantics for proxies is interesting, and might be the real decider.

The guys at lesscode write some real interesting stuff, but I do wish they’d do their bickering in private.

Enthought Traits

A reference on Dr Dobbs Python-URL pointed me to Enthought Traits, which look very interesting.

This sort of idea crops up all over the place, but is rarely as well focused. This is part, for example, of Plone’s Archetypes and of Nevow’s Formless.
It’s good to see it separated from the persistence machinery (a fault of Archetypes IMO), and good to see the separation of “View” and “Typing and Validation” (a fault of Formless IMO). This is quite a specific set of responsibilities that Trait’s provide, and they seem to be well factored.

Sleevenotez is live again

We’re pleased to say that after a much harder second iteration than we expected Sleevenotez is back up and running. It’s quicker, more stable, much much more Internet Explorer friendly. Please go there, have a look, sign up and tell all your friends!

A site for everything

ajaxload.info – makes those lovely ‘loading’ animated gifs.

IE7 is a-coming

With the fast approaching release of IE7 (possibly even this Thursday) it’s worth having a look at the changes they’ve made to their CSS support. There’s been lots of complaining that they are still not achieving standards compliance, but this post, like a lot of the IE7 blog, shows a real desire to tacke the problems we’ve all been having.

More on patterns

Really good stuff here from Mark Dominus. It’s worth reading his Earlier Article.

Not sure there is much I can add. If you are interested in patterns, read these as something of a cautionary tale.

Zope 3 — Kill or Cure?

An interesting Zope 3 Critique from Ian Bicking, who has always got something valid to say. He’s a very pragmatic guy, because all of his effort goes into running code, and this comes out in this post.

He is generally right here as well I think. Adaptation is a really powerful technique which probably (along with generic functions) does deserve to be a first order item in the toolkit, with direct python language support.
Jean-Marc’s critique is way off beam though. I think he’s doing some serious post-purchase justification of Nuxeo’s switch. I can really understand their position, but they are playing to the Enterprise market, and Enterprise means either .NET or Java right now. If every enterprise application were well designed and built, it wouldn’t matter if you weren’t using Java or .NET – but that is, frankly, not the case. And it is quite reasonable for CTOs who have a big Java shop to want code to be written in Java. They have other concerns than what the best technology for the job in hand is. I have been there myself, and it really is fine to make those sorts of distinctions.

I’m in an odd position, as I came to Adaptation first through Twisted. Twisted has the finest architecture I’ve seen, bar none. They’ve made heavy use of Adaptation, but tactically, rather than with the broad strategic sweep within Zope. That probably is the biggest criticism of Zope 3 that is I think fair, and that both Ian and Jean-Marc make. Patterns are about solutions in context, and Adaptation is no different. It’s a really useful pattern, and one that, within a specific domain, has immense traction. It really isn’t a Golden Hammer though.

The ZCML issue is one the twisted guys have come up against a few times too. They had, at one point, their own registry syntax to specify adapters — it was massively simpler, obviously, but it was functionally equivalent to ZCML, and they ditched it. Providing a generic solution for a registry is not a new problem, and in the end I think the solution is to allow packages to provide code that answers the question, not just data.

“Big” architecture, such as the Zope 3 Component Architecture and J2EE in the end seem to cause more problems than they solve. Ultimately “Architecture” at it’s best really is just a pretty random collection of rules of thumb and handy concepts to solve specific use cases, just as it is in meatspace with the built environment. Trying to design software by starting with the solution and working back is just as bad as building a city by laying out a grid and then trying to fit people into it.

Current projects

Our Customer List is getting a bit long in the tooth, which is a bit annoying. We’re working on some long-term projects right now, which don’t qualify for the customer’s page really, so here’s a quick update.

First up is Sleevenotez which has been mentioned previously. We’re working on this with a major european telco. We’re also working with Paul Everitt and a major Plone systems company on a large Plone deployment in the states. That job is particularly interesting because we’re doing some pretty advanced stuff with XSL and Javascript. I’m going to blog some more about that later.

We’ve also got a project on the go for a major European music publisher, that has stalled at the last hurdle. The project is good to go, but has become mired somewhere at the customer. If said customer is reading this, please press the appropriate buttons, we love that project and want it to go live! :)