Alexander Limi

February 27th, 2007

Report from the Plone 3 UI Sprint

Whew. The Plone 3 UI sprint in Baarn (near Amsterdam) is over, and what an amazing experience it was.

For those of you who don't know what a sprint is — it's a kind of a workshop where Plone developers gather from time to time and work on improving Plone or its add-on products. This time, there were 25 of us in all, and everyone did an amazing job of making Plone 3 so much better.

The easiest way to summarize the sprint is to talk about what the individual people were up to, so I'll try to give a summary of the work done at the sprint:

Cornelis Kolbach, an incredibly talented designer with a very good eye for both usability and elegance created a fresh, new look for Plone 3. He's new to the Plone world, so I worked closely with him, and after several days of design studies, passionate — and always good-natured — discussion and collaboration, he came up with a visual and structural design that pleases the mind as well as the eye. Trust me, you'll love the new direction of Plone in this area. Keep your eyes peeled for the beta.

Another person that was new to the Plone sprints was Sisi Nutt. She came to the sprint from Amsterdam where she works, and helped out with documenting the migration minutiae, making notes on how to update add-on products to ensure they work with Plone 3, etc. She seemed to have fun at the sprint, and we appreciated her attention to detail around the documentation process.

We had great results on making Plone even simpler and easier to use, in large part based on the work of Joel Burton. Joel has collected thousands of hours of user testing and training experience into his “Humane CMS” presentation in Seattle earlier this year. Several of these recommendations from his enlightening talk will be included in 3.0, and also in the next 3.5 release, especially the focus on the ability to have different levels of application and user interface complexity depending on the role of the user in the organization.

Andy McKay missed his flight, but didn't let that stop him from sprinting remotely by contributing two of his add-on products to the Plone core: Automatic table-of-contents generation for documents, and a presentation mode that works in all browsers.

Martin Aspeli was his usual productive self, finalizing the portlets/dashboard infrastructure with the competent help from David Convent and Christian Scholz (who created a reusable, flexible RSS portlet for the new system in record time).

Christian did some experiments with caching of the Resource Registries, which was later applied in a slightly different form. He also added basics web stats integration points in Plone, so it's easier to hook in something like Google Analytics for your site.

Martin also had a different set of irons in the fire — the content rules infrastructure in Plone 3. This component allows you to define what happens with content that is added, moved, deleted and otherwise modified. You can move the content to a different folder, send out a mail, or any of the other actions that are available. He was assisted by the always clear-headed Danny Bloemendaal, who — in addition to organizing the sprint — made the whole rules concept so much easier to use and set up.

Work was done on improving the what was known as Smart Folders in Plone 2.1 and 2.5 — we have added the ability for rich text, as well as making it possible to have both explicit references in addition to the stored searches it offered earlier. Bearing in mind the conceptual changes, we renamed this concept to Collections, a name everybody thought better represented its new capabilities.

On the Ajax front, we focused more on fixing bugs and cleaning up the architecture than adding new features. We put Godefroid Chapelle and Balazs Ree (the Ajax/KSS team) in the same room as Duncan Booth (one of the main developers behind Kupu, our visual editor component). Lots of small and big integration issues were fixed, and at the end of the day, both frameworks now have much cleaner integration with the other. Since the dynamic user interface and the editor are two of the major priorities in Plone 3, the importance of this cannot be overstated.

Speaking of Kupu, Duncan also sat down and listened closely to my moaning about the difficulty of getting the content filtering right, because of the many levels of filtering involved. The result is that Plone 3 ships with a unified HTML filtering control panel that controls both what Kupu filters and what the server filters — without the user having to know what happens where. Awesome.

In addition, he fixed one of my pet peeves with the Mozilla/Firefox rich text editing component. Allow me to expand on this (if you're bored, skip ahead — I need to rant a bit).

To get the full appreciation of this story, rewind about three years, and us filing a bug report on the rich text editing component in Mozilla. The problem back then was that Mozilla would insert a <br> tag instead of a <p> tag when you hit the return key on your keyboard when writing.

This makes absolutely no sense on the web, as what you get in all other browsers and even in all word processors is a new paragraph, not a line break. All of them require you to use shift-return if you want a line break that is not a new paragraph.

It took us two years to get this fixed because of the politics involved. Yes, two years — including recruiting a Mozilla developer from Finland that could fix this for us.

Well, it turns out that Mozilla/Firefox left us an additional "easter egg", as we found out when people started using Kupu to edit content in Plone. It now correctly inserts a new paragraph when you hit the return key. However, if you hit return twice, you're in for a nasty surprise: It inserts a paragraph tag at the first keypress, and then inserts a <br> outside of the existing paragraph tag! Insane.

But you can't expect them to know anything about HTML. I mean, they are just building a web browser. ;-)

The logic probably went something like this:

So what we did to work around this was to construct a client-side JS transform that detects when there is a redundant line break tag outside of the paragraph tags, as well as immediately before a closing paragraph tag — which is also a common occurrence. The end result is that Kupu saves markup without redundant elements when using Mozilla, and the dreaded "No Style" text blocks are thus a thing of the past.

Thanks for listening, it felt good to finally get that story out — back to the sprint report:

Hanno Schlichting headed up an amazing amount of work by several teams, reorganizing the control panels into more logical and featureful sets, aided by a small army of capable implementors — Alex Clark, David Siedband, and Jean-Paul Ladage. The result is that the majority of the common tweaks that integrators and site administrators do with Plone will now be easily accessible and well-organized.

Kai Diefenbach, Jeroen Vloothuis and Mikko Othamaa were tasked with improving the Contents view of Plone, adding support for more powerful multiselection and other UI improvements. I haven't had time to check out these improvements myself yet, but they looked like they were making a lot of progress during the sprint.

Kai also added a long-due improvement to the Plone commenting infrastructure: it now uses IntelligentText by default. For those of you who don't know it, IntelligentText is a simple parser that lets people write plain text, but makes URLs into HTML links, and mail addresses into clickable mail addresses. Simple and effective — and just what you want for the basic commenting fields.

Andi Zeidler picked up the fantastic work done by Alec Mitchell and Philipp von Weitershausen on making Zope 3 views customizable through the web. I'm happy to report that the integration is complete and working, which the Plone consultants and integrators will be exceedingly happy to hear — as they can now make use of the cutting-edge new Zope 3 technologies in a way that mimics the convenience of the template approach that made Plone such a hit among that audience in the first place.

Wichert Akkerman, our ever vigilant and productive release manager, managed to complete some important infrastructure work for CMF that allows you to use the skins machinery from Python packages in addition to Products. If you know what this is, you'll know why this is important — if not, just appreciate that it makes developers' lives easier.

Helge Tesdal, Daniel Nouri and Andi Zeidler made CacheFu work with Plone 3.0 — no small feat — and also spent some time on making Zope 3 views cacheable. I don't know too much about this personally, but I sure appreciate the effects: a faster Plone.

They also did some additional tasks: Helge organized a LinguaPlone discussion and did some Zope 3-based refactoring experiments for LinguaPlone (on a separate branch, of course), Daniel added in the indexing capabilities of Archetypes, so it can index Word documents, PDFs, etc.

Florian Schulze and Geir Bækholt worked on one of the most important UI widgets in Plone 3 — the infamously named ÜberSelectionWidget. The idea is to create one selection widget that works the same way across the entire Plone application, no matter what selection problem we are trying to solve. Whether we are selecting users to put in a group, documents to be added as references, images to be included in a page — it should always work the same way.

In typical Plone style, the widget was first build to work with plain old HTML to make sure accessibility and total browser compatibility was kept, quite a tall order for such a flexible and versatile widget. But they did it, and we now have something that was described as "Quicksilver, HTML forms style". Impressive stuff, especially considering that it lives inside a form along with other elements, and still does the right thing. The next step is to Ajaxify it, so that users with the ability to use dynamic behaviours will have an even more efficient widget for their selections.

Florian also worked on the new content icon implementation, as well as converting the Plone templates to use viewlets instead of metal:slots where it made sense. This gives us more flexibility and less insanity in main_template.

Finally, I'll have to send out a big thank-you to the teams behind Zope (both 2 and 3) and the CMF, you have been adding a fantastic amount of well thought-out infrastructure, cleaning up old code and dusty corners, and making sure we can build a world-leading Content Management System with the very best tools available.

And a big thank-you to Danny and Cornelis for organizing the sprint — everyone there had a fantastic time, and we couldn't have hoped for a better sprint. I owe you all lots of drinks.

Oh, and since I know you're dying to see it — here's an in-progress screenshot of the new Plone theme. Anything that looks out of place on that screenshot is my fault, not Cornelis' — I had to make some last-minute adjustments to it to make sure we could ship it with the beta, and there are ongoing improvements to the CSS until we ship the final release. I suck, Cornelis rules.

I can't wait to get Plone 3 out the door, it's an amazing release. Look out for the beta sometime this week.

(Update: because of changes in CMF that we wanted to have included in the beta, the release has been moved to March 19th, 2007.)

And if I forgot anybody or anything, shoot me a mail — I can only remember so much of all the amazing stuff that happened at the sprint. Thanks, everyone!

Alexander Limi makes software easier to use. One of the founders of the open source project Plone, he currently lives in San Francisco, and previously worked at Jarn & Google. These days, he works at Mozilla on the Firefox browser.

Get an email when this site is updated & follow me on Twitter

Powered by Plone & hosted by Amaze