Another great sprint is over (actually already for some days) and it was a great time.
Thanks again to Danny Bloemendaal and Informaat for making it possible. It was as productive as last year if not even more and it was also so much more to do than last year because Plone 3 will be just so much different (and we even get a new skin! ;-)
So what was I up to? This time I wasn’t just filming like at the Archipelago sprint (not that this was planned but a Powerbook is just slow ;-) but instead programming. And actually it was good to have attended the snow sprint as I was continuing work or issues I encountered there (like a veeeery slow Plone site with load times of about 10s).
So after I started with fixing a bug in versioning (if you enabled the checkbox in the edit form for a new version and saved it broke because of a wrong default value for comments) I did some more:
Making Plone fast
From my discouraging experiences from the Snow Sprint and some discussions with Balazs there I looked into it again and also discussed with Florian Schulze about what to do. And the problem was within the Resource Registries as it’s not storing the created compiled files but instead recreating them on every request (many people thought it would store it though). This wasn’t so much of a problem before but now we have a huge AJAX framework inside and this takes time to recreate and compile.
So I started work on creating a cache for Resource Registries and thanks to Florian I also came quite far (the cache itself was not the problem but keeping the API consistent was a bit). So for now instead of 10s loading time for the whole homepage I have about 1s (with cache disabled).
You can find this work on this branch: https://svn.plone.org/svn/plone/ResourceRegistries/branches/mrtopf-6159-performance-by-caching/
This branch is going to be merged tomorrow.
I got the job to include Google sitemap support
in Plone and the same for Google Analytics. The first one wasn’t too much work (except getting used to Zope3 and formlib for the control panel) but the second was a bit of thinking. I did this together with Geir who suggested to inject the needed script via an
ondomload event into the DOM and wait for that to load before calling it. It worked for me on Firefox but I still need to test with other browsers. It can be found on a branch but is more or less just the webstats.js file included in the registry (but disabled per default).
I already started a tags portlet and viewlet at the Snow Sprint and thus feeled like playing around with it a bit more. I thus started to create an RSS portlet with the new portlet engine. You need to get used to the new engine (and it still feels a bit too overengineered ;) but you definitely have some more possibilities like storing data in your portlets and easily managing or blocking them. David Covent and Martin Aspeli also worked on the UI for the manage screens to make it more appealing and understandable.
So the RSS portlet was not too hard to build with the great feedparser.py but the problem was more the loading time. It of course caches the feeds (in RAM) but it still takes some time to load many feeds on the first load. And the other problem is if the feed is not responding. I thus created a deferred portlet mechanism which allows any portlet to be filled after the page is loaded. This is done via KSS and you simply use the
IDeferredPortletRenderer as you can see in the RSS portlet example.
This work will also be merged tomorrow and can now be found in several branches:
And that’s it with the stuff I was working on (well, I am still).
But also the rest I saw was great, e.g.
- A cool UI for defining content rules (which trigger certain actions like email-to-portal-owner on certain events such as workflow changes or object create).
- a new skin by Cornelis Kolbach of Informaat. It definitely looks very different from the original one and great thanks to him for doing that. He’s also a CSS god, btw :-)
- a complete new folder contents with better drag’n’drop.
- nice AJAX enhancements a la Google Calendar
- better controlpanels (and restructured)
- inclusion of the customerize component which lets you do TTW editing of Zope3 views.
- Work on the much-needed Überselection Widget
And there was much more out there. So make sure you get the beta on monday! :-)