<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-19026079</id><updated>2011-11-29T10:24:22.297+01:00</updated><category term='plone'/><category term='personal'/><category term='python'/><category term='zope'/><title type='text'>..: hannosch :..</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19026079.post-3418024820703214526</id><published>2011-11-24T20:00:00.000+01:00</published><updated>2011-11-24T20:23:51.699+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><category scheme='http://www.blogger.com/atom/ns#' term='zope'/><title type='text'>Goodbye Jarn, Hello Mozilla</title><content type='html'>&lt;div style="font-family: inherit;"&gt;tl;dr Starting in January I'll work for the &lt;a href="https://wiki.mozilla.org/Services"&gt;Mozilla Services Team&lt;/a&gt; and will be based in Hamburg, Germany.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;It's been almost four years since I &lt;a href="http://blog.hannosch.eu/2008/02/personal-note-im-on-move.html"&gt;left my hometown&lt;/a&gt; and &lt;a href="http://www.klinik-bergedorf.de/"&gt;old career&lt;/a&gt; and moved to Norway, doing &lt;a href="http://plone.org/"&gt;Plone&lt;/a&gt; development full time at &lt;a href="http://www.jarn.com/"&gt;Jarn&lt;/a&gt;. For a while now I've been looking for a change of scenery. Unfortunately Jarn's plans to &lt;a href="http://blog.hannosch.eu/2010/08/personal-back-to-city-life.html"&gt;establish a presence in Berlin&lt;/a&gt; didn't work out, so I was back in small town Norway for the past eight months.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;At the same time I've been using Plone for almost ten years and started engaging with the community &lt;a href="http://dev.plone.org/ticket/884"&gt;nine years back&lt;/a&gt;. It's been an exciting and wonderful time, but as of late my enthusiasm has faded away. On the other hand I've witnessed an immense community energy at this years &lt;a href="http://blog.fourdigits.nl/living-statues-sprint-2011-wrap-up"&gt;living status sprint&lt;/a&gt; and the &lt;a href="http://ploneconf.org/"&gt;Plone Conference 2011&lt;/a&gt;. I'm certain the striving and ever renewing community will move Plone to the next level - it's just going to be without much of my time.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Now I'm looking forward to an excellent new team. And a new opportunity to contribute to Open Source software and making the web a better place. Catch me in Hamburg, San Francisco and maybe in a &lt;a href="http://blog.mozilla.com/axel/2011/11/21/mozilla-europe/"&gt;Mozilla Berlin office&lt;/a&gt; soon. Or in #distutils, #pylons or related Python projects :)&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;So long and thanks for all the Plone,&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Hanno&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;P.S. Alex Limi cannot be blamed for my departure at all - it was entirely &lt;a href="http://tarekziade.wordpress.com/2011/09/19/mozilla-services-is-hiring/"&gt;Tarek's fault&lt;/a&gt; ;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-3418024820703214526?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/3418024820703214526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=3418024820703214526' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/3418024820703214526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/3418024820703214526'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2011/11/goodbye-jarn-hello-mozilla.html' title='Goodbye Jarn, Hello Mozilla'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/17098895951947866519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total><georss:featurename>Tonsberg, Norway</georss:featurename><georss:point>59.2704284 10.4047336</georss:point><georss:box>59.2055179 10.2468051 59.3353389 10.5626621</georss:box></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-6801408777959508388</id><published>2011-04-10T21:48:00.002+02:00</published><updated>2011-11-12T05:43:03.121+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone 4.1 - Is it any faster?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Plone 4.1 is in its &lt;a href="http://plone.org/products/plone/releases/4.1"&gt;final beta stage&lt;/a&gt;, soon to be released as final. So it's &lt;a href="http://blog.hannosch.eu/2010/01/plone-4-how-much-faster-is-it.html"&gt;once again&lt;/a&gt; time to look at its performance improvements.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;In Plone 4.0 we have focussed on improving Plone's&amp;nbsp;&lt;a href="http://plone.org/products/plone/features/faster"&gt;raw rendering speed&lt;/a&gt; but also &lt;a href="http://plone.org/products/plone/features/reduced-memory-footprint"&gt;memory consumption&lt;/a&gt; and &lt;a href="http://plone.org/products/plone/features/massively-improved-handling-of-large-files-media"&gt;handling of binary files&lt;/a&gt;. These improvements benefit sites of all sizes and flavors.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;On the performance side we have focussed on a different area&amp;nbsp;for Plone 4.1: the catalog. The catalog is responsible for all searches, content listings, portlet listings, the section tabs, the sitemap, the reference engine, uuid lookups and many more things.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;For small to medium sites with maybe up to 10.000 content items the performance has been fine. But once your sites gets multiples of 10.000 content items up to millions the performance starts to degrade rapidly.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Over the &lt;a href="http://www.jarn.com/blog/catalog-query-plan/"&gt;last couple of years&lt;/a&gt; various &lt;a href="https://svn.enfoldsystems.com/trac/public/browser/enfold.fixes/trunk"&gt;companies&lt;/a&gt; and &lt;a href="http://svn.plone.org/svn/collective/unimr.catalogqueryplan/trunk/"&gt;community members&lt;/a&gt; have worked on this problem. So far these improvements have only been available as add-on components with varying degrees of maturity. For Plone 4.1 we have taken the stable and proven bits and integrated them back into the core.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The improvements fall into two broad categories: Improving the data stored in indexes and optimizing the internal search algorithms.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;On the storage side we have added two new specialized index types: a UUID index and a boolean index. We use them per default in Plone and update your existing indexes during the upgrade.&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;We've also updated almost all existing indexes to store data more&amp;nbsp;&lt;/span&gt;efficiently,&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;just store less data or reduce the conflict error&amp;nbsp;&lt;/span&gt;potential&amp;nbsp;for concurrent write operations.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;On the search side the biggest change is the introduction of a queryplan. All catalog searches are now instrumented to collect runtime information. Based on this data subsequent catalog searches will be executed in an optimized way. The process is fully transparent and needs no configuration. You can inspect the plan and reports about slow catalog queries in the ZMI screens of the catalog tool.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;But in what kind of improvement does this result in?&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;For a small site or a default empty Plone site there's no measurable difference. The good news being that there's no&amp;nbsp;&lt;/span&gt;measurable&amp;nbsp;overhead of all these changes.&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;In order to illustrate the impact I used one large real site and tweaked it to resemble a default Plone 4.0 and 4.1. The actual production site runs various of the mentioned improvements via experimental backports, so I had to take those out to get a realistic&amp;nbsp;comparison. The site in question has about 250,000 content objects with mostly published content. It uses LinguaPlone and has many portlets listing latest news or related content, so most pages do a number of catalog queries. As each catalog query is faster, you get cumulative effects.&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;In the graph I show the timings for the frontpage, a news archive with 4,000 news items per language, a normal page and it's edit screen.&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fK5QKgAq3hc/TaK0td0kynI/AAAAAAAAAz0/qgMePNFwG1w/s1600/plone-speed-nordic.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="270" src="http://3.bp.blogspot.com/-fK5QKgAq3hc/TaK0td0kynI/AAAAAAAAAz0/qgMePNFwG1w/s400/plone-speed-nordic.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;For pages doing either multiple catalog searches or catalog searches over large amounts of content we get an improvement of 2x up to 4x. For an edit screen that doesn't even show the navigation tree, there's less benefit. But even rendering the top sections and the language selector results in a 1.4x improvement for this site.&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;I did the testing on my local iMac with 3GHz and 8gb of RAM while the data was coming from a direct file storage. Effectively all operations were done with all data coming from the ZODB cache or from the operating systems disk cache from memory.&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;In reality the improvements will be larger, as we read far fewer objects from the database and thus avoid talking to the actual database over the network and doing disk reads. You will also likely be able to reduce the size of the ZODB cache without negatively affecting performance. The freed memory can be used to add more Zope instances or to decrease the hardware cost of running the site.&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;But of course the results for any given production environment will vary a lot. And none of these numbers reflect real world usage, as visitors will get served cached content from a reverse proxy in most cases. With the inclusion of &lt;a href="http://plone.app.caching/"&gt;plone.app.caching&lt;/a&gt;&amp;nbsp;into Plone 4.1 setting up&amp;nbsp;efficient&amp;nbsp;caching has become much easier.&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;There's many more improvements in this area that we will do. But with Plone 4.1 you should be able to run a Plone site with multiples of 10.000 of content items without the need for custom development - system administration knowledge to set up the application cluster and database is still a must though.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-6801408777959508388?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/6801408777959508388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=6801408777959508388' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/6801408777959508388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/6801408777959508388'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2011/04/plone-41-is-it-any-faster.html' title='Plone 4.1 - Is it any faster?'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-fK5QKgAq3hc/TaK0td0kynI/AAAAAAAAAz0/qgMePNFwG1w/s72-c/plone-speed-nordic.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-6951018069864363068</id><published>2010-08-31T13:39:00.007+02:00</published><updated>2010-08-31T14:32:57.029+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Personal: Back to the city life</title><content type='html'>Two and a half years ago I &lt;a href="http://blog.hannosch.eu/2008/02/personal-note-im-on-move.html"&gt;left my home country&lt;/a&gt; Germany to start a new adventure. I made my Plone hobby into a professional career choice and at the same time left to the Norwegian wilderness to work with all the talented people at &lt;a href="http://www.jarn.com/"&gt;Jarn&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Much has happened during that time. Our little company started with three employees and will soon have grown to thirteen and a half in multiple locations. We moved into new custom built office premises in 2008 and are now looking into extending those to meet our growing needs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had the pleasure of &lt;a href="http://blog.hannosch.eu/2009/08/sprints-and-conferences.html"&gt;traveling the world&lt;/a&gt;, spending four months in Copenhagen and working on interesting and challenging projects during all that time. Plone itself has come a long way too, culminating in the marvelous &lt;a href="http://plone.org/4"&gt;Plone 4 release&lt;/a&gt; yesterday. I had some concern that spending my time on Plone during the workday would make it less interesting to work on it during my free time. But I'm happy this hasn't come true, I'm as interested in contributing to Plone as I was before - even though I shifted my focus more and more to the infrastructure side and am now spending a good deal of &lt;a href="http://blog.hannosch.eu/2010/04/zope-2-releases.html"&gt;my time in Zope 2&lt;/a&gt; and the &lt;a href="http://docs.zope.org/zopetoolkit/releaseteam/members.html"&gt;Zope Toolkit&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But with all those good things, I still didn't feel happy all the way. I had to realize that I was neither made for dark Norwegian winters nor &lt;a href="http://en.wikipedia.org/wiki/T%C3%B8nsberg"&gt;small town&lt;/a&gt; life. Coming from a buzzing multi-million city myself, there was something missing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Luckily Jarn has established an unofficial presence in Berlin, Germany for some time now, so there was an easy way out for me. As of yesterday I moved to Berlin and will continue to work for Jarn from the new location.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Looking back I wouldn't want to miss those years and it's certainly been the right choice for me. Living abroad for a while is a wonderful experience and teaches you many things about yourself, your home country and many more different perspectives onto the world.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And now I'm looking forward to the next years and Plone 5 at the horizon :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hanno&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.S. As a Social 2.0 opt-out I have neither Facebook or Twitter accounts. If you are not interested in my personal notes, you don't have to follow posts labelled "personal" on this blog ;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-6951018069864363068?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/6951018069864363068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=6951018069864363068' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/6951018069864363068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/6951018069864363068'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2010/08/personal-back-to-city-life.html' title='Personal: Back to the city life'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-7233965359826525607</id><published>2010-06-14T20:08:00.006+02:00</published><updated>2010-06-14T21:19:48.853+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><category scheme='http://www.blogger.com/atom/ns#' term='zope'/><title type='text'>Zope 2.13 - alpha imminent</title><content type='html'>Dear world,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;this is your Zope 2 release manager speaking. We had some &lt;a href="https://mail.zope.org/pipermail/zope-dev/2010-June/040753.html"&gt;discussion in the community&lt;/a&gt; about the roadmap ahead for the next Zope 2 release culminating in a plan today.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A first alpha release for Zope 2.13 will be released on June 25 - just over 10 days from now. More alpha releases will follow on a 3-4 weeks basis and a first beta will be out in early September. That is as usual without guarantees and subject to changes. A final release is expected later this year.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zope 2.12 is continuing to be maintained. A &lt;a href="http://pypi.python.org/pypi/Zope2/2.12.7"&gt;Zope 2.12.7&lt;/a&gt; bugfix release was released just yesterday.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Current Zope SVN trunk (which will become 2.13) is compatible with both CMF 2.2 and CMF trunk and the upcoming Plone 4. It is likely that Plone 4.1 will officially support Zope 2.13.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zope 2.13 will bring a couple new features and has done a large deal of refactoring and house keeping. It currently only supports Python 2.6. Support for Python 2.7 might be added, if there is community volunteers to do the required work. Python 3.x support is out of the scope. Work has begun to port some of the underlying zope packages to Python 3.x, but there's still a lot more to do before this is feasible for Zope 2 itself.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what's in it?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zope 2.13 doesn't have any zope.app.* dependencies anymore. This finishes the transition from the hybrid Zope 2 + 3 codebase. Zope 3 itself has been split up into two projects, the underlying &lt;a href="http://docs.zope.org/zopetoolkit/"&gt;Zope Toolkit&lt;/a&gt; consisting of foundation libraries and the application server part. The application server part has been renamed &lt;a href="http://bluebream.zope.org/"&gt;BlueBream&lt;/a&gt;. Zope 2 only depends and ships with the Zope Toolkit now. Large parts of code inside Zope 2 and specifically Products.Five have been refactored to match this new reality. The goal is to finally remove the Five integration layer and make the Zope Toolkit a normal integral part of Zope 2.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zope 2.13 comes with native &lt;a href="http://wsgi.org/wsgi/"&gt;WSGI&lt;/a&gt; support. First pioneered in the &lt;a href="http://repoze.org/about.html"&gt;repoze.zope2&lt;/a&gt; project, this capability finally found its way back into the core and obsoletes the externally managed project. With WSGI Zope 2 can natively talk to a variety of web servers and isn't restricted to its own ZServer anymore. It also opens up new possibilities for writing or reusing &lt;a href="http://wsgi.org/wsgi/Middleware_and_Utilities"&gt;middleware&lt;/a&gt; in Zope 2 or factoring out capabilities into WSGI endware. It's expected that this new deployment model will over time become the default and the old ZServer implementation will be deprecated. There's no concrete timeline for this yet.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's an ongoing effort to refactor Zope 2 into more independent modularized distributions. Zope 2.12 has already seen a lot of this, with the use of zope.* packages as individual distributions and the extraction of packages like Acquisition, DateTime or tempstorage to name a few. Zope 2.13 continues this trend and tries to externalize packages containing C extensions. In a not so distant future it should be possible to run a Zope 2 like environment without the ZMI and the corresponding code. This is part of the vision for Zope 2 to evolve into a more modern and maintainable codebase, while preserving a realistic gradual upgrade path for existing installations and projects based on it. The Zope 3 project has shown that a complete rewrite is no viable answer for a large class of existing software.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's a large number of smaller features and improvements in the underlying libraries and Zope 2 itself. For example Zope 2.13 will ship with the new &lt;a href="http://pypi.python.org/pypi/ZODB3/3.10.0b1"&gt;ZODB 3.10&lt;/a&gt; version, which sports some noticeable performance improvements. The move to the latest version of the Zope Toolkit libraries makes integration of Zope community projects like &lt;a href="http://pypi.python.org/pypi/z3c.form"&gt;z3c.form&lt;/a&gt; much easier.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After the rather long release periods of Zope 2.12 and 2.13 we expect to switch to a shorter release period of six to nine months for the upcoming 2.14, 2.15 and beyond releases.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Discussion of the Zope 2 core development takes place on the &lt;a href="https://mail.zope.org/mailman/listinfo/zope-dev"&gt;zope-dev mailing list&lt;/a&gt;. Feel free to engage, leave comments on this blog or contact me in private.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Your release manager,&lt;/div&gt;&lt;div&gt;Hanno&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-7233965359826525607?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/7233965359826525607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=7233965359826525607' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/7233965359826525607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/7233965359826525607'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2010/06/zope-213-alpha-imminent.html' title='Zope 2.13 - alpha imminent'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-5817981835148878539</id><published>2010-04-06T18:11:00.006+02:00</published><updated>2010-04-06T18:25:34.398+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><category scheme='http://www.blogger.com/atom/ns#' term='zope'/><title type='text'>Zope 2 - Releases</title><content type='html'>Hello World,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;this is your new Zope 2 release manager speaking. I'm happy to report my first successful Zope 2 release, version 2.12.4. You can find it at the usual place: &lt;a href="http://pypi.python.org/pypi/Zope2/2.12.4"&gt;http://pypi.python.org/pypi/Zope2/2.12.4&lt;/a&gt;. More information about the release can be found at &lt;a href="http://docs.zope.org/zope2/releases/"&gt;http://docs.zope.org/zope2/releases/&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;If you are interested in more background information about me becoming release manager, there's a full announcement on the Zope developer mailing list at &lt;a href="https://mail.zope.org/pipermail/zope-dev/2010-March/039880.html"&gt;https://mail.zope.org/pipermail/zope-dev/2010-March/039880.html&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Don't worry, I won't bother you with blog posts about every maintenance release in the future. The next major feature release is still some time off, there's an initial roadmap discussion at &lt;a href="https://mail.zope.org/pipermail/zope-dev/2010-March/039915.html"&gt;https://mail.zope.org/pipermail/zope-dev/2010-March/039915.html&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All the best,&lt;/div&gt;&lt;div&gt;Hanno&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-5817981835148878539?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/5817981835148878539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=5817981835148878539' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5817981835148878539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5817981835148878539'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2010/04/zope-2-releases.html' title='Zope 2 - Releases'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-4384228441234955836</id><published>2010-01-17T18:33:00.010+01:00</published><updated>2011-11-12T05:43:24.677+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone 4 - How much faster is it?</title><content type='html'>During my work on Plone "trunk" in the last year, I kept posting some fancy graphs showing the speed improvements for rendering pages. Much has happened since I last posted one of these in &lt;a href="http://blog.hannosch.eu/2009/03/can-i-make-my-plone-3x-faster.html"&gt;March 2009&lt;/a&gt;.&lt;br /&gt;The newly coined Plone 4 is almost ready for a beta release and some companies have started using the alphas for production projects. Overall it's snappy, fun and stable. But how does it stack up against my experimental work? I got the good old ZPTDebugger out and optimized some more rough edges during the weekend and squeezed out another 10%. See the result for yourself:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_M01EKVhK7Ko/S1NLejgSDEI/AAAAAAAAAyY/t67NvCmSdBQ/s400-h/plone-speed-20100117.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5427764964210379842" src="http://2.bp.blogspot.com/_M01EKVhK7Ko/S1NLejgSDEI/AAAAAAAAAyY/t67NvCmSdBQ/s400/plone-speed-20100117.png" style="cursor: hand; cursor: pointer; height: 278px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;Compared to Plone 3.3 Plone 4.0 is about 50% faster, ranging from 30% for edit pages up to 70% for anonymous page views. If you use the Chameleon template engine, you get two to three times the speed compared to 3.3.&lt;br /&gt;As a little experiment I trimmed down the default content, portlets and viewlets in a 4.0 site to match what I had done in my experimental work. So I removed all portlets, hid the section, personal bar, site actions and content history viewlets and measured again. In the Chameleon setup you get the same kind of results as I did back in March. For anonymous page views, we are roughly at 50 requests / second. Removing all those elements might sound somewhat odd, but if you don't need some of these features or use xdv to supply some of these elements as static HTML, you can actually get close to these numbers.&lt;br /&gt;It's good to see my work finally in the mainline and available to all. Now onwards to the next adventure, making Plone easier to use and develop for :-)&lt;br /&gt;P.S. The controlpanel stats are indeed correct, though they look pretty odd. I didn't try to find the cause of the slowdown compared to all other page types.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-4384228441234955836?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/4384228441234955836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=4384228441234955836' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/4384228441234955836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/4384228441234955836'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2010/01/plone-4-how-much-faster-is-it.html' title='Plone 4 - How much faster is it?'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_M01EKVhK7Ko/S1NLejgSDEI/AAAAAAAAAyY/t67NvCmSdBQ/s72-c/plone-speed-20100117.png' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-5752373328521206510</id><published>2009-08-31T22:02:00.018+02:00</published><updated>2009-09-01T02:03:30.179+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><category scheme='http://www.blogger.com/atom/ns#' term='zope'/><title type='text'>Sprints and Conferences</title><content type='html'>I've been traveling a lot recently and didn't really report about what I've been doing. So here's a short summary of the last months and what is to come.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From Easter until end of June I stayed at a customer site in Copenhagen and helped push the new &lt;a href="http://plone.org/"&gt;Plone&lt;/a&gt;-based &lt;a href="http://www.norden.org/"&gt;norden.org&lt;/a&gt; website into going live. After quite a long time of being in development it was good to get this out to the public. Most of July I spent back in Tønsberg in a new apartment relaxing and enjoying the warm and quiet Norwegian summer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In early August I visited &lt;a href="http://plone.org/events/sprints/past-sprints/bristol-performance-sprint"&gt;Bristol again&lt;/a&gt;, this time for the &lt;a href="http://www.coactivate.org/projects/balloon-sprint/project-home"&gt;Balloon sprint&lt;/a&gt; organized by the awesome &lt;a href="http://www.teamrubber.com/"&gt;Team Rubber&lt;/a&gt;. Their offices are really nice and strategically placed in a lively neighborhood with lots of pubs around. While I missed out on the actual Balloon festival itself, I got around to help MJ fix some nasty &lt;a href="http://pypi.python.org/pypi/Acquisition/2.12.3"&gt;Acquisition&lt;/a&gt; and Python 2.5+ 64-bit issues. Otherwise I spent my time on attacking some long standing annoyances in &lt;a href="http://pypi.python.org/pypi/plone.reload/1.0b1"&gt;plone.reload&lt;/a&gt; cumulating in a 1.0 beta 1 release. plone.reload allows to reload the code and ZCML configuration for a running Plone process based on an &lt;a href="http://mail.python.org/pipermail/edu-sig/2007-February/007787.html"&gt;idea from Guido for a better reload&lt;/a&gt; mechanism. Now it comes with 100% test coverage and supports reloading code inside decorated methods.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With some time at home and regular work, next up was the &lt;a href="http://plope.com/Members/chrism/2009dcsprint"&gt;Repoze "CMS" sprint&lt;/a&gt; in Arlington, Virginia. Irene and Chris Shenton together with all the other sprinters made this one of the best social experiences I had on a sprint. By the end of the sprint we had managed to empty a keg of beer and enjoy lots of good food and conversations :-) On the actual work side I participated in all the opinionated discussions we had, but kept to my own little toy project for the code side of things. Still being work-in-progress I got a long way into integrating &lt;a href="http://babel.edgewall.org/"&gt;Babel&lt;/a&gt; with Zope. An attempt to replace the dated and custom &lt;a href="http://pypi.python.org/pypi/zope.i18n"&gt;zope.i18n&lt;/a&gt; package we use with the de-facto standard for i18n and l10n in Python web environments. I made this into an experiment to try out Mercurial some more, so the &lt;a href="http://bitbucket.org/hannosch/zopebabel/"&gt;code ended up on bitbucket&lt;/a&gt;. The code is far from finished - the message catalog and translation infrastructure is working, but the language negotiation and locale data support is still missing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next up I'm going to attend the unofficial Zope conference of the year, better known as the &lt;a href="http://www.zope.de/10-dzug-tagung"&gt;German Zope User Group conference&lt;/a&gt; in Munich next week. In my role as &lt;a href="http://plone.org/team/ReleaseManagers"&gt;Plone 5's release manager&lt;/a&gt; I was invited to give a keynote about the state of Plone along side two keynotes from Martin von Löwis and &lt;a href="http://regebro.wordpress.com/"&gt;Lennart Regebro&lt;/a&gt;. I'll attend the after-conference sprint, hoping to do some work on &lt;a href="http://bitbucket.org/tarek/distribute"&gt;Distribute&lt;/a&gt; and head straight to the second incarnation of the &lt;a href="http://grok.zope.org/"&gt;Grok&lt;/a&gt; &lt;a href="http://wiki.zope.org/grok/NeanderthalII2009"&gt;Neanderthal sprint&lt;/a&gt; for a couple of days in Cologne. I'll try to spent some time working on the &lt;a href="http://docs.zope.org/zopetoolkit/"&gt;Zope Toolkit&lt;/a&gt; - the extraction of more reusable packages from the former Zope 3 project. Ending another two week roadtrip with some well-deserved vacation in my former home town Hamburg.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And then it's only a short time to the annual &lt;a href="http://ploneconf2009.org/"&gt;Plone conference in Budapest&lt;/a&gt;, which I'll be attending with my fellows co-workers from &lt;a href="http://www.jarn.com/"&gt;Jarn&lt;/a&gt;. A company that values their employees and makes all of my travels possible thanks to our &lt;a href="http://www.jarn.com/blog/the-10-plone-manifesto/"&gt;10% manifesto&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At the end of the year I will have stretched myself to being on the road for 150 days, attended six sprints and three conferences including their sprints. I think next year I'll try to stay a bit more in one place. If only the Python, Zope and Plone communities weren't so much fun to hang out with ;-)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-5752373328521206510?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/5752373328521206510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=5752373328521206510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5752373328521206510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5752373328521206510'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2009/08/sprints-and-conferences.html' title='Sprints and Conferences'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-5800122023916442013</id><published>2009-05-23T14:03:00.003+02:00</published><updated>2009-05-23T14:27:20.268+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Visualizing the persistent structure of a page</title><content type='html'>&lt;div&gt;Inspired by &lt;a href="http://david.wglick.org/2009/visualizing-the-zodb-with-graphviz/"&gt;David's blog post&lt;/a&gt; I took his script and modified it slightly for a different purpose. Instead of showing an entire Plone site, I used it on a single page, with only a simple title and text. Here's what a page actually consists of on the persistent data level:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_M01EKVhK7Ko/ShfmiYkR7RI/AAAAAAAAAwM/AvwPE5MZMt0/s1600-h/page.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 216px;" src="http://4.bp.blogspot.com/_M01EKVhK7Ko/ShfmiYkR7RI/AAAAAAAAAwM/AvwPE5MZMt0/s400/page.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5338989361655573778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what you think of commonly as one page object is indeed at the minimum ten persistent objects. As soon as you add references to it or store certain other information on it, it will grow even more.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you ever heard complains about what is wrong with the way we store data in Plone, this might make it more obvious. Another thing you need to know about the ZODB is that it is slightly simplified just one big table with a unique identifier (oid) mapped to the pickle data. While conceptually the above object references are important, on the DB level loading any of these objects from the DB is the same operation. If you have a ZEO setup where loading an object incurs some network latency, you'll end up with ten times the latency for loading what seems to be a simple page object.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So if you ever wondered why you need to increase your ZODB cache to numbers in the thousands and Plone needs so much RAM, the above should give you some ideas. Fixing these problems is incredibly hard after they have been introduced, but people like Laurence Rowe keep reminding us of the importance of it. &amp;lt;/rant&amp;gt; ;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-5800122023916442013?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/5800122023916442013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=5800122023916442013' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5800122023916442013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5800122023916442013'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2009/05/visualizing-persistent-structure-of.html' title='Visualizing the persistent structure of a page'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_M01EKVhK7Ko/ShfmiYkR7RI/AAAAAAAAAwM/AvwPE5MZMt0/s72-c/page.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-9098678979820357697</id><published>2009-03-05T00:23:00.007+01:00</published><updated>2009-04-04T03:57:54.049+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Can I make my Plone 3.x faster?</title><content type='html'>In my series of showing of fancy graphs, I have gotten repeated complaints about not caring about Plone 3.x enough. Now I did clarify that many of the improvements we make to Plone trunk are too risky or backwards incompatible to do in Plone 3.x. But some of the improvements have made it back into Plone 3.3.&lt;br /&gt;&lt;br /&gt;Most importantly of all &lt;a href="http://mockit.blogspot.com/"&gt;Malthe Borch&lt;/a&gt; is working like crazy to make Chameleon compatible with the next Plone major release numbered 3.3. He certainly deserves any kind of support you can give him. While Chameleon is not going to be part of the official 3.3 release, thanks to our move to zc.buildout you will be able to install it painlessly into your sites. As with the other experimental.* packages announced at various times, this is still not going to be for the casual user. But if you are an experienced Plone integrator those options are worth checking out today.&lt;br /&gt;&lt;br /&gt;Plone trunk has seen another couple of improvements pushing it close to the 50 req/s limit, but taking Plone 3.2 as a baseline, the slogan today is: Plone is getting twice as fast with every release:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_M01EKVhK7Ko/Sa8RThdSSqI/AAAAAAAAAvU/zaBs3upkd3Y/s1600-h/plone-trunk-speed-20090305.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 283px;" src="http://2.bp.blogspot.com/_M01EKVhK7Ko/Sa8RThdSSqI/AAAAAAAAAvU/zaBs3upkd3Y/s400/plone-trunk-speed-20090305.png" alt="" id="BLOGGER_PHOTO_ID_5309481512789494434" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-9098678979820357697?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/9098678979820357697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=9098678979820357697' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/9098678979820357697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/9098678979820357697'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2009/03/can-i-make-my-plone-3x-faster.html' title='Can I make my Plone 3.x faster?'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_M01EKVhK7Ko/Sa8RThdSSqI/AAAAAAAAAvU/zaBs3upkd3Y/s72-c/plone-trunk-speed-20090305.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-2867781934748223612</id><published>2009-03-01T17:12:00.004+01:00</published><updated>2009-04-04T03:58:14.696+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone trunk continues to get faster</title><content type='html'>It's been more than two months, since I had a detailed look at the&lt;a href="http://blog.hannosch.eu/2008/12/plone-trunk-versus-kcachegrind.html"&gt; state of Plone trunk performance&lt;/a&gt;. This weekend I spent on evaluating what impact the changes we made during that time had on performance and worked a bit more on it.&lt;br /&gt;&lt;br /&gt;I made another round of improvements to the way we use CMF actions and converted some of the last Python scripts used in every page to browser view based code. Using as little untrusted code as possible to be part of the page rendering proved once again to be a fruitful endeavor.&lt;br /&gt;&lt;br /&gt;My current findings indicate that both the sheer overhead of security checks for untrusted code, but sometimes more importantly the hard to understand and spread out code itself cause the performance problems we have. An example I found today was the language selector viewlet. A nice mixture of code and nesting found in the template, some code in the viewlet class, both backed up by the language tool and querying a language utility in the backend. Each of the pieces looked good in itself, the combination meant that even for a site with a single language a large dictionary of all languages in the world was deep copied, and iterated over twice to determine that the number of languages used in the site was not more than 1. The relevant information here being easily accessible as simple attribute access away on the language tool. Concentrating the control flow from all the different places into the browser view made it far easier to understand what happened and avoid the insane overhead.&lt;br /&gt;&lt;br /&gt;Long story short, compared to Plone 3.2 as a baseline, we got up from a factor of being three times faster to about four times faster now.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_M01EKVhK7Ko/Saq223Oj_ZI/AAAAAAAAAvE/irckXHttmcA/s1600-h/plone-trunk-speed-20090301.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 283px;" src="http://3.bp.blogspot.com/_M01EKVhK7Ko/Saq223Oj_ZI/AAAAAAAAAvE/irckXHttmcA/s400/plone-trunk-speed-20090301.png" alt="" id="BLOGGER_PHOTO_ID_5308256164463771026" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-2867781934748223612?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/2867781934748223612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=2867781934748223612' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/2867781934748223612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/2867781934748223612'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2009/03/plone-trunk-continues-to-get-faster.html' title='Plone trunk continues to get faster'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_M01EKVhK7Ko/Saq223Oj_ZI/AAAAAAAAAvE/irckXHttmcA/s72-c/plone-trunk-speed-20090301.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-5931701825472379172</id><published>2009-02-26T22:24:00.003+01:00</published><updated>2009-04-04T04:02:43.208+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><category scheme='http://www.blogger.com/atom/ns#' term='zope'/><title type='text'>Zope 2.12 alpha one - it's done!</title><content type='html'>Today marked an important milestone in the history of &lt;a href="http://pypi.python.org/pypi/Zope2"&gt;Zope2&lt;/a&gt;. With the first alpha release of the next major version of Zope2, it proves once again to be still a serious player in the Python world. Thanks to a focused effort of its active community we have taken Zope2 to the next level.&lt;br /&gt;&lt;br /&gt;This release not only introduces support for both Python 2.5 and 2.6, includes the latest versions of the &lt;a href="http://pypi.python.org/pypi/ZODB3"&gt;ZODB&lt;/a&gt; and the &lt;a href="http://download.zope.org/zope3.5/"&gt;Zope component libraries&lt;/a&gt;, both still under heavy development each, but also redefines its installation story: Zope2 is now fully eggified and plays nicely with the standard way of installing Python packages today: &lt;a href="http://pypi.python.org/pypi/setuptools"&gt;setuptools&lt;/a&gt; - &lt;span style="font-style: italic;"&gt;easy_install Zope2&lt;/span&gt; at will.&lt;br /&gt;&lt;br /&gt;If this wouldn't be enough in itself, the last weeks have seen an incredible uptake in updating Zope2's documentation and &lt;a href="http://docs.zope.org/zope2/"&gt;http://docs.zope.org/zope2/&lt;/a&gt; is shaping up nicely. You can read more about the new release at: &lt;a href="http://docs.zope.org/zope2/releases/2.12/"&gt;http://docs.zope.org/zope2/releases/2.12/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In order to include the latest versions of the ZODB and the Zope components, a final release is not expected before Summer 2009.&lt;br /&gt;&lt;br /&gt;The next major version of Plone is developed based on Zope 2.12 and we are more than happy to have such a strong foundation for our work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-5931701825472379172?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/5931701825472379172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=5931701825472379172' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5931701825472379172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5931701825472379172'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2009/02/zope-212-alpha-one-its-done.html' title='Zope 2.12 alpha one - it&apos;s done!'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-5752454809378522312</id><published>2009-02-17T22:28:00.006+01:00</published><updated>2009-04-04T03:58:14.696+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Berlinale Sprint 2009</title><content type='html'>I'm back for a couple of days from &lt;a href="http://www.jarn.com/blog/berlinale-sprint-2009/"&gt;Jarn's first 10% sprint&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While everybody else was working on cool and exciting things, I happened to be in the wrong IRC channel at the wrong time. As a result &lt;a href="http://www.palladion.com/"&gt;Tres Seaver&lt;/a&gt; and me started to do something about &lt;a href="http://www.plope.com/zope2_book_maintainer"&gt;Chris McDonough wining&lt;/a&gt; about old and unmaintained artifacts.&lt;br /&gt;&lt;br /&gt;After a couple of days and nights of more work, you can now witness the new &lt;a href="http://docs.zope.org/zope2book/"&gt;Zope2 Book - 2.12 edition&lt;/a&gt;. Finally we put an end to the confusing situation of the &lt;a href="http://www.zope.org/Documentation/Books/ZopeBook/"&gt;2.6 edition being hosted at zope.org&lt;/a&gt; versus the &lt;a href="http://www.plope.com/Books/2_7Edition"&gt;2.7 edition being generously hosted by Chris&lt;/a&gt;. The book has come home and is now available in a new and shiny form at &lt;a href="http://docs.zope.org/zope2book/"&gt;http://docs.zope.org/zope2book/&lt;/a&gt; thanks to &lt;a href="http://www.zetwork.com/"&gt;Jens Vagelpohl&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Most of the time was spent converting the book from its old structured text source into a more modern reStructuredText format. With &lt;a href="http://sphinx.pocoo.org/"&gt;Sphinx&lt;/a&gt; and the &lt;a href="http://docs.zope.org/"&gt;design taken from docs.zope.org&lt;/a&gt; it was easy enough to produce the nice HTML output you see now.&lt;br /&gt;&lt;br /&gt;We also did spent quite some time to update the actual content of the book and it is starting to be a valuable source again. The purpose of the book is still to introduce newcomers to Zope, who arent't full-fledged developers. It won't ever be a good guide on how to develop complex applications with Zope2 today. We weren't able to catch up on five years of history in the matter of days, so don't expect the book to be all new and shiny, but you will neither find ZClasses in it anymore and might be surprised to see links to the Python Package Index.&lt;br /&gt;&lt;br /&gt;If you want to contribute to the book, the source material is available in the Zope SVN repository at svn+ssh://svn.zope.org/repos/main/zope2book/trunk. The web content is updated directly from SVN once a day. If you don't have commit rights, you can send patches or corrections to me and I'll gladly apply them for you.&lt;br /&gt;&lt;br /&gt;Inspired by those activities Tres and &lt;a href="http://www.muthukadan.net/"&gt;Baiju M&lt;/a&gt; have also started to update the &lt;a href="http://docs.zope.org/zdg/"&gt;Zope Developers Guide&lt;/a&gt; and are busy converting it to reStructuredText as we speak.&lt;br /&gt;&lt;br /&gt;The future of Zope2 is still looking bright ;)&lt;br /&gt;&lt;br /&gt;Update: Baiju finished the ZDG conversion and it's available at &lt;a href="http://docs.zope.org/zdg/"&gt;http://docs.zope.org/zdg/&lt;/a&gt;. The links at &lt;a href="http://www.zope.org/Documentation/Books/"&gt;http://www.zope.org/Documentation/Books/&lt;/a&gt; have been updated by Jens.&lt;br /&gt;&lt;br /&gt;If anyone feels strongly about the design, please get in touch with the Zope Foundation and the people behind new.zope.org. I'll not start tweaking CSS for one book here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-5752454809378522312?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/5752454809378522312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=5752454809378522312' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5752454809378522312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5752454809378522312'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2009/02/berlinale-sprint-2009.html' title='Berlinale Sprint 2009'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-7230185867952647904</id><published>2009-02-02T00:59:00.004+01:00</published><updated>2009-04-04T03:58:14.697+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Baarn Plone UI Sprint 2009</title><content type='html'>I'm back in Norway after four most productive days spent in Baarn on this years Plone UI sprint. Many thanks to Danny Bloemendaal, Wichert Akkerman, Cornelis Kolbach and &lt;a href="http://www.informaat.nl/"&gt;Informaat&lt;/a&gt; for hosting this event once again! It was wonderful and I'll happily come back next time to try out some more different pancakes ;-)&lt;br /&gt;&lt;br /&gt;The work part of the sprint had more presentations and large group discussions than the average Plone development sprint, but these have been both interesting and very productive. I think we got a lot closer to getting a common vocabulary and ideas about how to approach a next generation theming and UI story for Plone.&lt;br /&gt;&lt;br /&gt;Luckily we didn't start from scratch, but could base our work on the ideas and quite detailed proposals that have been made in recent month. Especially the &lt;a href="http://groups.google.com/group/plone-deco/files"&gt;Deco and Blocks proposals&lt;/a&gt; and the prototype implementations of Rob Gietema from &lt;a href="http://www.fourdigits.nl/"&gt;Four Digits&lt;/a&gt; have been of tremendous help.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wiggy.net/#20090130baarn1"&gt;Wichert has already written&lt;/a&gt; about how we divided the whole group into five smaller teams. I'll try to give a short summary of what has been worked on by each team.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Content editing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When it comes to content editing one of Plone's distinguishing features is its approach to do real inline WYSIWYG content editing. Most other CMS's have a separate administration interface, that has little to do with the website driven by the system. Plone's integrated approach has been a huge success, but has proven to have various difficulties over the years.&lt;br /&gt;&lt;br /&gt;Based on the experience and proposals the team looked into different ways of more clearly separating the administrative UI from the website itself. Examples of this are moving the administrative controls to the edge or most commonly the top of the browser window, lowering the number of controls shown by default and consolidating the controls into a single area.&lt;br /&gt;&lt;br /&gt;Another area has been the support for so-called working modes. So far Plone determines what kind of controls the user sees primarily based on the permission set of the user in a given context. The standard view of a page mixes in inline editing controls and directly offers access to even the most uncommon operations with equal priority (think of View, Edit, Rules, History, Sharing but also assigning portlets).&lt;br /&gt;&lt;br /&gt;The idea behind working modes is to make it an explicit choice of the user to go into any kind of editing operation. Usually most users will only view information, even if they have the right to edit. The switch to edit mode should be fast, easy and seamless, but nonetheless explicit. Once the user sees the editing controls, he should still see only the most common controls, to make them more effective to use. More uncommon options can be hidden on different pages or using modal dialogs.&lt;br /&gt;&lt;br /&gt;We have seen various prototypes of how such separation of concerns could look like and what is technically feasible in modern browsers. One of the things everybody agreed on, is the desperate need for user testing of these approaches, to see what works in the real world for normal users.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Page assembly / Page layout&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of the main ideas behind this work, which is based in large parts on the Deco proposal, is to make it possible for normal users to create rich pages including rich layouts through the standard Plone UI in an intuitive but powerful fashion. It also unifies the editing story for the main content area and any kind of secondary columns, taking away the complexity of entirely different ways of working with these as seen today.&lt;br /&gt;&lt;br /&gt;The team gathered around Rob to continue the work on the existing prototypes and incorporate feedback from the other teams into the ongoing work. I'm sure Rob will give us more details in the next days on the progress that has been made.&lt;br /&gt;&lt;br /&gt;In the daily wrap-up presentations we have seen a lot of work being done on the modal dialogs, like integration of the actual image browser, examples of tabbed settings in the dialogs and save dialogs including more advanced options like the change note field or the possibility to do workflow changes. The &lt;a href="http://www.fourdigits.nl/plone4uidemo/v15/"&gt;prototype from before the sprint&lt;/a&gt; is visible online and lets you have a sneak peak at the kind of changes we are working on.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Control panels&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The control panel or global administration UI team gathered around David Convent and part of the &lt;a href="http://www.gw20e.com/"&gt;GW20E&lt;/a&gt; crowd and had time to start implementing many of the ideas and sketches done in the first day. If you followed the SVN commit messages you will have noticed the &lt;a href="http://svn.plone.org/svn/plone/plone.app.users/trunk/"&gt;new plone.app.users package&lt;/a&gt; growing over the last days. As seen by the name the main focus has been on the user related settings and general user related data.&lt;br /&gt;&lt;br /&gt;The entire range of user dashboard, profile or author page, personal settings, password change forms but also join forms and general member data administration have gotten an overhaul. The goal is to clean up the confusing UI in this area (navigation between the different pages is quite unintuitive today) and provide more flexibility to adjust parts of the pages in question. At the end of the day it should be easy to add for example the country to the member data, make it a required field on the join form and get it into the users data screen.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Backend / Site Theming&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The team gathered around Laurence Rowe, Eric Steele and Denys Mishunov and worked and putting the Blocks proposal into action and refine it based on actual experience from designers.&lt;br /&gt;&lt;br /&gt;The goal in this area is to redefine the entire theming story for Plone in a way that makes it vastly easier. The focus is on making it possible to theme a Plone site effectively with little knowledge about Plone itself using HTML, CSS and images as the main tools. Knowledge about any kind of Zope component architecture or various forms of METAL macros, viewlets, portlets, skin templates or browser pages should no longer be required.&lt;br /&gt;&lt;br /&gt;Towards the end of the sprint we had a quite advanced demo that showed this in action and we were able to see how even a Plone 3 site was themed in this way. While the new approach uses a unified concept of tiles as "possibly dynamic chunks of HTML" instead of all the concepts we had before, bridging code to provide viewlets and portlets into this new model has been written and many more of the older concepts should be easy to bridge into the new model. An evolutionary upgrade path is going to be possible with this, not causing a major break in knowledge and technology investments already being made. Denys captured one of the demos on video and I hope he and Eric will tell the world more about this exciting new story.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Testing AJAX&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With all exciting new technology and especially a focus on a much richer client side editor environment, comes the dreaded question on how to do effective testing of AJAX applications. The team gathered around Balazs Ree and Godefroid Chapelle of KSS-fame, who brought extensive knowledge in the area with them. Various different approaches on how to effectively test the real application, doing so in a repeatable and automated way, while making it easy to write tests have been discussed and some of them prototyped.&lt;br /&gt;&lt;br /&gt;The tools of choice today are still Selenium and with Selenium RC and its Python bindings a way to instruct a browser from a Python test. Thanks to collective.buildbot and buildout setting up an automated testing infrastructure on multiple platforms using different browsers has become vastly simpler. Progress has been made in various directions, picking up old work from the early KSS days as well as utilizing new infrastructure like WSGI middleware. I hope Jean-Paul Ladage and Balazs Ree can tell more about the concrete achievements being made.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Summary&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you can read there's been work done in various directions and I'm excited about all of them. With the progress being made on the sprint I'm looking forward to see the wider community feedback on these topics. Now that we have gotten actual prototypes to play with and are starting to see concrete implementations of the different pieces this no longer is an abstract exercise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-7230185867952647904?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/7230185867952647904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=7230185867952647904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/7230185867952647904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/7230185867952647904'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2009/02/baarn-plone-ui-sprint-2009.html' title='Baarn Plone UI Sprint 2009'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-3991369544423282450</id><published>2009-02-01T13:48:00.007+01:00</published><updated>2009-05-26T22:16:00.031+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Profiling with kcachegrind made easier</title><content type='html'>During the third day of this years Baarn UI sprint, I couldn't resist to look into profiling Plone's startup speed again. As I've been recently getting used to &lt;a href="http://blog.hannosch.eu/2008/12/plone-trunk-versus-kcachegrind.html"&gt;using kcachegrind&lt;/a&gt; for visualizing profiling data, I wanted to make it easier to get the profiling data right in this tool.&lt;br /&gt;&lt;br /&gt;When doing profiling on full application requests the WSGI middleware repoze.profile is an excellent tool to use. But for profiling startup speed I needed to get back to profiling an individual function call. &lt;a href="http://pypi.python.org/pypi/profilehooks"&gt;profilehooks&lt;/a&gt; to the rescue? Sadly not.&lt;br /&gt;&lt;br /&gt;In order to convert the profiling data into a format understandable to kcachegrind I needed the data to be in the cProfile format produced by Python 2.5's new profiling library. profilehooks still lives in the Python 2.4 world and has profile and hotshot support.&lt;br /&gt;&lt;br /&gt;So I made a new tiny package called &lt;a href="http://pypi.python.org/pypi/profilestats"&gt;profilestats&lt;/a&gt; which will use the cProfile module instead. It works on both Python 2.5 and 2.6 and writes out the profiling data directly into a file called &lt;span style="font-style: italic;"&gt;cachegrind.out.profilestats&lt;/span&gt; for kcachegrind to grok.&lt;br /&gt;&lt;br /&gt;On the actual Plone startup speed front there isn't any real news. Parsing and executing ZCML, deepcopying Archetypes schemata and just the sheer number of imports and packages to load are still the slowest parts. Especially the recursive algorithms used in zope.interface and zope.component are still the slowest individual parts by a large offset.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-3991369544423282450?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/3991369544423282450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=3991369544423282450' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/3991369544423282450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/3991369544423282450'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2009/02/profiling-with-kcachegrind-made-easier.html' title='Profiling with kcachegrind made easier'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-5794786815211071308</id><published>2009-01-31T13:06:00.005+01:00</published><updated>2009-04-04T03:58:57.563+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>How to protect your Data.fs</title><content type='html'>I'm currently enjoying some very productive time at this years Baarn's UI sprint organized by Informaat in the Netherlands. While I'm primarily working on the testing group, where we try to get a full-roundtrip Selenium-based testing story in place, we were looking into ZODB demo storages for different reasons.&lt;br /&gt;&lt;br /&gt;As a side effect we came up with the following little snippet:&lt;br /&gt;&lt;blockquote&gt;from ZODB.DemoStorage import DemoStorage&lt;br /&gt;from Zope2.App.startup import getConfiguration&lt;br /&gt;&lt;br /&gt;# Read the database configuration from zope.conf&lt;br /&gt;dbtab = getConfiguration().dbtab&lt;br /&gt;&lt;br /&gt;# Get the root storage and open it&lt;br /&gt;base_storage = dbtab.getDatabase('/', is_root=1)._storage&lt;br /&gt;&lt;br /&gt;# Wrap an in-memory demo storage around our normal storage&lt;br /&gt;Storage = DemoStorage(base=base_storage)&lt;br /&gt;&lt;/blockquote&gt;If you put this code into a file called custom_zodb.py in your INSTANCE_HOME, your Zope will start up with its normal file storage, but wrapped in a demo storage.&lt;br /&gt;&lt;br /&gt;With this file in place all changes you do will only be written and kept in memory. Once you restart the server, you are back to the state of the Data.fs on your file system.&lt;br /&gt;&lt;br /&gt;The next time you want to experiment with a large customer Data.fs, show a demo based on some predefined content, provide a Live-CD or host a demo site, this might come in handy. If you want to feel even more on the save side, opening the underlying storage in read-only mode or ensuring that the operating system level user doesn't have write permissions to the file could be additional measures to take.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-5794786815211071308?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/5794786815211071308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=5794786815211071308' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5794786815211071308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5794786815211071308'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2009/01/how-to-protect-your-datafs.html' title='How to protect your Data.fs'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-2488986452146611760</id><published>2008-12-13T01:51:00.008+01:00</published><updated>2009-04-04T03:58:57.563+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone trunk versus kcachegrind</title><content type='html'>David Glick reminded me a while back of a visualization tool for profiling data called &lt;a href="http://kcachegrind.sourceforge.net/"&gt;kcachegrind&lt;/a&gt;. After trying to optimize Plone trunk based on simple Python profile data for a while, a more advanced analyzing tool was desperately needed.&lt;br /&gt;&lt;br /&gt;In order to convert the normal Python profiling output into a format readable by kcachegrind, you need to run a script called &lt;a href="http://pypi.python.org/pypi/pyprof2calltree"&gt;pyprof2calltree&lt;/a&gt; over it. The publically available version seems to be broken in some ways but David took on the challenge and sent me a fixed version.&lt;br /&gt;&lt;br /&gt;After getting familiar with the tool and poking at Plone trunk for a bit, I was able to identify a couple of more places, which I hadn't found so far in my optimization attempts. So at the end of day two of the &lt;a href="http://www.openplans.org/projects/plone-performance-sprint-2008"&gt;Plone Performance Sprint 2008&lt;/a&gt; happening in Bristol right now, I got some notable results. Compared to the &lt;a href="http://blog.hannosch.eu/2008/11/news-from-plone-trunk-november-2008.html"&gt;last results I posted three weeks ago&lt;/a&gt;, everything but edit pages have seen another 50% speed increase. Thank you David!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_M01EKVhK7Ko/SUP_PiCKKTI/AAAAAAAAAus/mWKm9DC-D_E/s1600-h/plone-trunk-speed-20081213.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 283px;" src="http://2.bp.blogspot.com/_M01EKVhK7Ko/SUP_PiCKKTI/AAAAAAAAAus/mWKm9DC-D_E/s400/plone-trunk-speed-20081213.png" alt="" id="BLOGGER_PHOTO_ID_5279343830507333938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One of the changes was inside ResourceRegistries and can be readily applied in Plone 3.x as well. It saves about 10ms per request in a default site. All other changes still revolve around optimized actions handling. The amount of speed increase you can get by rather simple and straightforward changes still amazes me. Stay tuned for more.&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;&lt;br /&gt;This morning I found another problem with content type icon expressions being recompiled on every page load. I updated the graph with the new results: We got up from 24 requests/s to 27 requests/s ... I like it :)&lt;br /&gt;&lt;br /&gt;Update 2:&lt;br /&gt;&lt;br /&gt;I found a bit more places to optimize and took a look at Archetypes edit screens in particular. Updated graph is above, we are now officially three times faster than Plone 3.2 and have reached the magical 30 requests / sec number.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-2488986452146611760?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/2488986452146611760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=2488986452146611760' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/2488986452146611760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/2488986452146611760'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2008/12/plone-trunk-versus-kcachegrind.html' title='Plone trunk versus kcachegrind'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_M01EKVhK7Ko/SUP_PiCKKTI/AAAAAAAAAus/mWKm9DC-D_E/s72-c/plone-trunk-speed-20081213.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-2932192714480386313</id><published>2008-12-06T20:06:00.002+01:00</published><updated>2009-04-04T04:35:36.310+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone versus Python 3</title><content type='html'>Python 3 final has been released. What does this mean for Plone and how could a roadmap for adoption look like?&lt;br /&gt;&lt;br /&gt;I peaked into my crystal ball and came up with a couple of statements that reflect my own personal opinion. So here is one possible scenario for the future:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The Plone 3 series will see major releases up until 3.4 or 3.5 in a roughly six to nine month iteration and stretch into 2010.&lt;/li&gt;&lt;li&gt;Plone 3 will see support for Python 2.5 and 2.6 in Plone 3.4 while staying backwards compatible with Python 2.4.&lt;/li&gt;&lt;li&gt;Plone 4 final will be released in early 2010.&lt;/li&gt;&lt;li&gt;Plone 4 will recommend Python 2.6 and might be backward compatible with 2.5.&lt;/li&gt;&lt;li&gt;Plone 4 will see multiple 4.x releases in the same way 3.x did. These will continue throughout 2010 and 2011.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If a Python 2.7 is released during the lifetime of Plone 4.x, support for it will be added.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Plone 5 will run on Python 3 and see a release in 2011 or 2012.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;This is only one possible scenario. What do you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-2932192714480386313?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/2932192714480386313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=2932192714480386313' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/2932192714480386313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/2932192714480386313'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2008/12/plone-versus-python-3.html' title='Plone versus Python 3'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-5797215762568487744</id><published>2008-11-20T23:36:00.007+01:00</published><updated>2009-04-04T03:58:57.563+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone LOC statistics</title><content type='html'>A couple of days ago I removed the source code statistics for &lt;a href="http://www.ohloh.net/projects/plone"&gt;Plone from ohloh.net&lt;/a&gt;. The way ohloh calculates statistics from Subversion repositories is long broken for any project that copied or moved any of its code base in Subversion. Plone has done so many times in its lifetime and as a result ohloh was showing wildly incorrect statistics.&lt;br /&gt;&lt;br /&gt;But fear not - ohloh's &lt;a href="http://labs.ohloh.net/ohcount"&gt;lines of code counting tool called ohcount&lt;/a&gt; is available for download and local install. Executed on a checkout of our codebase it provides quite accurate results.&lt;br /&gt;&lt;br /&gt;A distinction between the Zope, CMF and Plone parts of our stack isn't practical anymore for Plone trunk. In a completely egg-based world, we have cases like plone.portlets depending on zope.app.content, while it is not included in the Zope2 egg anymore. Where should one place Products.ZopeVersionControl, which is pulled in for Products.CMFEditions but written by the Zope community? The number that is comparable over all releases is the total, so here it is:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_M01EKVhK7Ko/SSXo1S6EMaI/AAAAAAAAAts/Oe4AjjZe3ig/s1600-h/plone-trunk-code.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 282px;" src="http://1.bp.blogspot.com/_M01EKVhK7Ko/SSXo1S6EMaI/AAAAAAAAAts/Oe4AjjZe3ig/s400/plone-trunk-code.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5270874941213127074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The main source of the recent decline is the removal of lots of zope.app packages from the Zope2 installation, which were never used nor usable inside Zope2. zope.app.rotterdam, the example theme for the zope.app ZMI replacement is the most famous example of those. But we are also busy at reducing the amount of old code we have been carrying around in our own packages.&lt;br /&gt;&lt;br /&gt;I expect to see the total amount of lines of code to decrease further, while we are developing Plone trunk. Yes, that is: We will be able to deliver more features with less lines of code, without cheating on quality, tests or documentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-5797215762568487744?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/5797215762568487744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=5797215762568487744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5797215762568487744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5797215762568487744'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2008/11/plone-loc-statistics-november-2008.html' title='Plone LOC statistics'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_M01EKVhK7Ko/SSXo1S6EMaI/AAAAAAAAAts/Oe4AjjZe3ig/s72-c/plone-trunk-code.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-7366920488229823339</id><published>2008-11-20T19:09:00.014+01:00</published><updated>2009-04-04T03:58:57.564+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>News from Plone trunk</title><content type='html'>Some people following the developer mailing lists or blogosphere have noticed that Plone trunk has seen quite some interesting changes as of late.&lt;br /&gt;&lt;br /&gt;Since I'm the current intermediate release manager for the upcoming Plone 4.0 release, I thought I might share some of those exciting news with you. The framework team for Plone 4.0 is currently being selected and will suggest a final release manager to the Plone Foundation board. I'm available as a candidate, but the decision is yet to be made.&lt;br /&gt;&lt;br /&gt;Over the summer we have seen an amazing effort from some of our Google Summer of Code students and their mentor Sidnei who brought us Python 2.5 and 2.6 support for Zope trunk. This has been followed up by Sidnei and Matthew Wilkes and we can run Plone trunk with all Python versions from 2.4 up to 2.6 now.&lt;br /&gt;&lt;br /&gt;In other news, we run Plone trunk based on the eggified Zope2 trunk as of last week. Thanks to David Glick for helping with some tough Acquisition related changes. This means we have moved our entire stack towards eggs. As a side effect of that move the amount of code we need to pull in from Zope2 has gotten a lot less. Instead of 105 zope and zope.app packages we only pull in 65 of them anymore. I'll post some current lines of code graphs soon.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://mockit.blogspot.com/2008/11/speedup.html"&gt;most amazing news&lt;/a&gt; has been unveiled by Malthe yesterday. I have been lucky enough to be in Copenhagen and cheer Malthe while he got Plone trunk running entirely based on Chameleon. While he posted some impressive numbers for the Chameleon versus ZPT comparison for Plone trunk, I thought I put this into perspective and compare it with Plone 3.2.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_M01EKVhK7Ko/SSWrbQEc2cI/AAAAAAAAAtk/Pxh35bzMv0U/s1600-h/plone-trunk-speed.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 282px;" src="http://1.bp.blogspot.com/_M01EKVhK7Ko/SSWrbQEc2cI/AAAAAAAAAtk/Pxh35bzMv0U/s400/plone-trunk-speed.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5270807423565486530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We have a 50% to more than 100% speed increase. And yes we get 16 requests per second out of a completely uncached front-page.&lt;br /&gt;&lt;br /&gt;I included the number for the HTML filter control panel as an example of a somewhat complex formlib-based form. This gives you a hint, at what we can expect from a framework like dexterity when it comes to edit screens.&lt;br /&gt;&lt;br /&gt;This is just the beginning of what we can do and I expect more performance improvements to come. We have seen a lot of improvements made to the content creation, catalog and search performance during the last year which still need to make it into Plone trunk.&lt;br /&gt;&lt;br /&gt;With the next &lt;a href="http://www.openplans.org/projects/plone-performance-sprint-2008"&gt;performance sprint in Bristol&lt;/a&gt; coming up in December, the future of Plone looks bright to me. And all of this just happens while we redefine the content editor and administration UI for Plone at the same time.&lt;br /&gt;&lt;br /&gt;The future of Plone happens now,&lt;br /&gt;Hanno&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-7366920488229823339?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/7366920488229823339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=7366920488229823339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/7366920488229823339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/7366920488229823339'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2008/11/news-from-plone-trunk-november-2008.html' title='News from Plone trunk'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_M01EKVhK7Ko/SSWrbQEc2cI/AAAAAAAAAtk/Pxh35bzMv0U/s72-c/plone-trunk-speed.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-6870424356555497398</id><published>2008-07-18T15:08:00.020+02:00</published><updated>2009-04-04T03:58:57.564+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Project Messerschmidt vs. NKOTB</title><content type='html'>There have been rumors for some time, since Alexander Limi gave a most impressive lightning talk at last years Plone conference, about a templating language that sets out to put an end to our search for the perfect one.&lt;br /&gt;&lt;br /&gt;It's major feature: Speed, speed and speed. Compared to any other templating system out there, by an order of magnitude faster.&lt;br /&gt;&lt;br /&gt;Some time has passed and careful observers have &lt;a href="http://blog.delaguardia.com.mx/index.php?op=ViewArticle&amp;amp;articleId=88&amp;amp;blogId=1"&gt;spotted NKOTB&lt;/a&gt; at times. During last years &lt;a href="http://www.openplans.org/projects/plone-performance-sprint-2007"&gt;performance sprint&lt;/a&gt; organized and sponsored by &lt;a href="http://www.headnet.dk/"&gt;Headnet&lt;/a&gt; a critical mass of people met and tried &lt;a href="http://www.jarn.com/blog/optimizing-navigation-tree-templates"&gt;various approaches&lt;/a&gt; to put this ingenious piece of art to some use.&lt;br /&gt;&lt;br /&gt;Some time passed again and NKOTB got a proper name and a public presence, now to be known under the name &lt;a href="http://code.google.com/p/spitfire/"&gt;spitfire&lt;/a&gt;. But when you put too many intelligent people into one room, you won't always get them to push in one direction. So Project Messerschmidt was born. An attempt &lt;a href="http://mockit.blogspot.com/2008/02/engine-that-saturates-your-pipes.html"&gt;to mock&lt;/a&gt; the same underlying approach of spitfire but make it vastly simpler.&lt;br /&gt;&lt;br /&gt;So where are we today?&lt;br /&gt;&lt;br /&gt;Spitfire is under active development, but to the current day is not integrated into any Zope environment except for &lt;a href="http://svn.plone.org/svn/collective/nkotb/trunk"&gt;some initial attempts&lt;/a&gt;. Spitfire only has support for &lt;a href="http://www.cheetahtemplate.org/"&gt;Cheetah-like syntax&lt;/a&gt; today.&lt;br /&gt;&lt;br /&gt;What about Project Messerschmidt?&lt;br /&gt;&lt;br /&gt;It is nowadays known as &lt;a href="http://pypi.python.org/pypi/z3c.pt"&gt;z3c.pt&lt;/a&gt; and used by projects like &lt;a href="http://groups.google.com/group/vudo"&gt;Vudo&lt;/a&gt; or &lt;a href="http://svn.repoze.org/repoze.bfg/trunk/README.txt"&gt;repoze.bfg&lt;/a&gt;. It has a full implementation of the TAL standard including the i18n namespace. While it does make some conscious choices about different default behavior than zope.pagetemplate it is virtually compatible.&lt;br /&gt;&lt;br /&gt;The most notable differences are lacking support for METAL, the provider expression and to the current day no Five or Zope2 integration. The later two should be a matter of one focused day of work to finish.&lt;br /&gt;&lt;br /&gt;But what about the main objective, speed? There is one established shoot-out test for templating languages called 'bigtable'. The objective is to render an HTML table of ten columns and 1000 rows. It is somewhat like the 'top speed of your car' number. It certainly isn't the only number you are interested in, when buying a car. But it's an easy to compare number, that has some objective nature to it.&lt;br /&gt;&lt;br /&gt;So here are the numbers, judge for yourself:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_M01EKVhK7Ko/SIGYEyF8lFI/AAAAAAAAAtc/BuScjJLkMC0/s1600-h/speed.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_M01EKVhK7Ko/SIGYEyF8lFI/AAAAAAAAAtc/BuScjJLkMC0/s400/speed.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5224624250660099154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Update: Thanks to a comment by Alexander, I made the chart a bit more impressive :)&lt;br /&gt;&lt;br /&gt;Update 2: Since I've seen Donna experimenting with Mako, I added it to the graph.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-6870424356555497398?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/6870424356555497398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=6870424356555497398' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/6870424356555497398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/6870424356555497398'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2008/07/project-messerschmidt-vs-nkotb.html' title='Project Messerschmidt vs. NKOTB'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_M01EKVhK7Ko/SIGYEyF8lFI/AAAAAAAAAtc/BuScjJLkMC0/s72-c/speed.png' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-3927278865424559024</id><published>2008-07-18T14:45:00.008+02:00</published><updated>2009-04-04T03:58:57.564+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone reloaded</title><content type='html'>I've been silently working on a project called plone.reload which &lt;a href="http://diefenba.ch/blog/archive/2008/06/30/quick-tip-8-plone-reload-or-plone-development-is-fun-again"&gt;has been noticed&lt;/a&gt; by some.&lt;br /&gt;&lt;br /&gt;After I got positive feedback from &lt;a href="http://martinaspeli.net/"&gt;Martin Aspeli&lt;/a&gt;, &lt;a href="http://diefenba.ch/blog"&gt;Kai Diefenbach&lt;/a&gt; and &lt;a href="http://blogs.onenw.org/jon/"&gt;Jon Stahl&lt;/a&gt; I felt it might be ready.&lt;br /&gt;&lt;br /&gt;Danny Bloemendaal calls it:&lt;br /&gt;&lt;blockquote&gt;The best improvement since the day (automatic) product refreshes died in Zope.&lt;/blockquote&gt;And my Co-Worker Denys Mishunov told me:&lt;br /&gt;&lt;blockquote&gt;We should include it in every project we do.&lt;/blockquote&gt;So what is this project that gets people excited?&lt;br /&gt;&lt;br /&gt;Its &lt;a href="http://pypi.python.org/pypi/plone.reload"&gt;PyPi page&lt;/a&gt; is short and concise without any glamour:&lt;br /&gt;&lt;blockquote&gt;Configuration and code reload without server restarts.&lt;/blockquote&gt;What does this mean for you? It brings back the good old refresh feature, we used to have for Products. Remember the refresh.txt files? Does it work for products alone? No!&lt;br /&gt;&lt;br /&gt;This project tries to bring code reloading back into the modern world of Zope 3. Reload code located in browser views? Not a problem. What about that new browser:page you registered? Just reload all your ZCML without having to restart your server. Do you need to mark your packages in any way? No, you don't.&lt;br /&gt;&lt;br /&gt;This project is most useful when you do user interface oriented work. You can work on file system based templates just fine in Zope debug mode, but so far modifying underlying browser views, viewlets or portlets always required you to restart. This time is over!&lt;br /&gt;&lt;br /&gt;Is this useful as a general reload feature for all code imaginable? No, it's not.&lt;br /&gt;&lt;br /&gt;For all application specific logic &lt;a href="http://plone.org/documentation/tutorial/testing/writing-unit-tests"&gt;unit tests&lt;/a&gt; are still your best and fastest bet. For content types, register them once, get your GenericSetup profiles up and keep them as stupid as possible. Then plone.reload will help you on getting your user-interface in shape, without spending your time on getting coffee while Plone restarts all day long...&lt;br /&gt;&lt;br /&gt;This project is heavily based on the work done by the fine Products.RefreshNG folks and wouldn't been possible without Guido himself contributing to the idea. So if you find it useful, remember the titans on whose shoulders we stand upon.&lt;br /&gt;&lt;br /&gt;Hanno&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-3927278865424559024?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/3927278865424559024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=3927278865424559024' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/3927278865424559024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/3927278865424559024'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2008/07/plone-reloaded.html' title='Plone reloaded'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-4654658411477181490</id><published>2008-07-18T12:29:00.008+02:00</published><updated>2009-04-04T03:59:32.605+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Back to blogging...</title><content type='html'>Dear readers,&lt;br /&gt;&lt;br /&gt;I have kept silent for a while on this blog. That seems to be a natural tendency for anyone who is &lt;a href="http://m.odul.us/2008/07/14/blog-autopsy"&gt;busy in the Plone community&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After &lt;a href="http://hannosch.blogspot.com/2008/02/personal-note-im-on-move.html"&gt;leaving my home country&lt;/a&gt; for the Nordic wilderness five month ago, I have been somewhat overwhelmed with all the new impressions and having &lt;a href="http://www.jarn.com/about/working-at-jarn"&gt;a new job&lt;/a&gt;. But for a couple of weeks, I have silently started to get back into the community. Besides starting to catch up on my &lt;a href="http://limi.net/articles/kill-your-tv/"&gt;bug wrangler duties&lt;/a&gt;, I also started to use &lt;a href="http://www.jarn.com/blog/the-10-plone-manifesto/"&gt;my 10% time&lt;/a&gt; for less visible work.&lt;br /&gt;&lt;br /&gt;Two of my recent projects deserve their own posts, so stay tuned to get an update on 'Codename Messerschmidt' and the project that got me the highest amount of personal 'thank you' mails yet in my open source career...&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Hanno&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-4654658411477181490?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/4654658411477181490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=4654658411477181490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/4654658411477181490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/4654658411477181490'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2008/07/back-to-blogging.html' title='Back to blogging...'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-3192456126728991921</id><published>2008-02-06T16:51:00.001+01:00</published><updated>2009-04-04T03:58:57.564+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Some more ideas to consider</title><content type='html'>After all the awesome blog posts and mailing list posts about Plone's future, I don't have much left to say. I do agree with lots of the points mentioned and try not to reproduce those here.&lt;br /&gt;&lt;br /&gt;I'd like to bring up some more minor ideas nonetheless.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Make add-ons first class citizens&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The number of features that everyone wants to see in Plone is growing and even at this point I think Plone does more than we can guarantee to deliver good quality for.&lt;br /&gt;&lt;br /&gt;In my opinion the only way out of the current 'everything should be in the core' meme is to embrace add-ons more and make them first class citizens of the Plone ecosystem. Alex Limi already posted some ideas on how to improve the installation and update story and I wholeheartedly agree with him. We need to provide the entrypoints and metadata for add-ons to integrate seamlessly with a Plone installation. I have some specific ideas on how to do this and plan to rework the add-ons control panel of Plone in the near future.&lt;br /&gt;&lt;br /&gt;Obviously this goes hand in hand with all the planned efforts for turning the products section of plone.org into something more usable. The PyPi-like interface goes a long way of making it simpler for developers to upload their packages to plone.org and ratings and reviews give you another metric for judging a packages quality.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Plone should be lighter&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In my opinion a default Plone installation at this point does too much and it is too hard to turn off some of the unneeded features for a particular site. What I would like to see is for Plone to come with two different flavors of default configuration. One that resembles what we have right now and which is created by default by the installers. I'd call this the 'evaluation version'. The other one I would like to see is the 'minimal version', which configures a Plone site with just the options you need to have for a working system. No content added, no portlet assignments, one simple one-state-workflow, no content rules, staging, versioning, openid or what not.&lt;br /&gt;&lt;br /&gt;What I would like to do is to group all the configuration needed for one particular feature into an extension profile and present this as a feature control panel. So you can get versioning with a single click in the control panel or you can add it as a GenericSetup dependency in your policy package for your site and have the same effect.&lt;br /&gt;&lt;br /&gt;This allows integrators to reuse the new base profile called minimal version as the base for their policy packages without hopefully having to delete anything from the created site. The minimal version obviously becomes the GenericSetup base profile. As a nice side effect we can get faster test runs by running most of the integration tests that require a full Plone site against the minimal version.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. More fine grained configuration upgrade procedure&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Closely related to the above mentioned, I think we need a better upgrade story for the configuration of both Plone itself as well as add-ons. We have the underlying technology with GenericSetup upgrade profiles available. What remains is to expose this in the user interface, so you know if an installed add-on needs an upgrade.&lt;br /&gt;&lt;br /&gt;For Plone itself we need to distinguish between essential upgrade steps and non-essential ones and give the user the choice to apply the non-essential ones according to their needs. For example creating the site mananger in the Plone 3 migration is essential, reordering the CSS files in the registry is something that should be left to the user to decide with a small description of what will happen and why we do it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. Optional code&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the same way I'd like to see the Plone configuration to become lighter, we could think about using the same principle for code. Everyone who has ever used a Windows installer for a more complex product, knows their ability to choose from a variety of options during install time. So you can either install only the base product or install some options with it. Later you can go back to the installer and add or remove more of these options. I think this should be doable with a set of more independent packages which we are getting better at and an installer based on buildout.&lt;br /&gt;&lt;br /&gt;Why should we think about this at all? Less code is less code to run, to eat your memory and CPU cycles, to contain bugs and security holes and to look at when trying to figure out how to extend the system.&lt;br /&gt;&lt;br /&gt;However this has a big risk of resulting in more non-reproducible bugs and more integration errors between different parts, so it needs to be considered carefully. Plone the product as downloaded by the casual user should still come with all the bells and whistles.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. Unicode!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a personal pet peeve of mine. We are already in a good starting position to master the move from a system using encoded strings to a fully Unicode aware application. There are some major next steps we need to take to get there eventually, so one day we can theoretically run on Python 3. Obviously this is not something we need to do in the next year but Python 3 lingers on the horizon and one of the certain things about it, is that we won't be able to use it unless we fix our Unicode story.&lt;br /&gt;&lt;br /&gt;For Plone 4.0 I would like to do some changes to Archetypes and PortalTransforms to get better Unicode support. Still on the todo list are external data sources like LDAP, SQL and quite some configuration stored in the ZODB like old Zope2 properties. Maybe more for 5.0 we will need to think about using a Unicode aware publisher, which goes nicely with ditching the Zope2 publisher and going for a repoze based setup. There is more work here and a fine balance to keep between introducing backwards incompatible changes and moving forward.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-3192456126728991921?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/3192456126728991921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=3192456126728991921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/3192456126728991921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/3192456126728991921'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2008/02/some-more-ideas-to-consider.html' title='Some more ideas to consider'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-5786322493656475772</id><published>2008-02-02T18:57:00.002+01:00</published><updated>2009-05-26T22:15:31.154+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Personal note: I'm on the move...</title><content type='html'>There are some big changes coming up in my personal and professional life which I wanted to share with you.&lt;br /&gt;&lt;br /&gt;For a few days I'm officially homeless now. I handed over my apartment to my landlord last week early in the morning. In February I'm staying with friends and hijack some couches. Thanks a lot to my brother for hosting me in the first week!&lt;br /&gt;&lt;br /&gt;While I still have to work for one more week in late February for my old employer - a small hospital in the eastern part of Hamburg - I'm already looking forward to my new job opportunity.&lt;br /&gt;&lt;br /&gt;But first I'll attend the &lt;a href="http://plone.org/events/2008-summit"&gt;Plone Strategic Planning summit&lt;/a&gt;  in San Francisco to help shape the future of my favorite Open Source CMS. I think this is going to be a great opportunity for Plone and hopefully we will see lots of interesting stuff happening on and especially after the Summit.&lt;br /&gt;&lt;br /&gt;Finally end of February I will move to a beautiful little sea-side town at the Fjord of Oslo in cold Norway. Amongst other things this little town is world famous for one of the &lt;a href="http://www.jarn.com/"&gt;coolest Plone companies called Jarn&lt;/a&gt;, home to many dedicated and extremely skilled Plone addicts. It is with great pleasure that I'll have  the opportunity to join them starting in March.&lt;br /&gt;&lt;br /&gt;So prepare yourself what happens, when I don't only work on this project in my spare hours but can share my experience on a daily basis with lots of other amazing long term core contributers. It is truly an amazing time for me and Plone these days :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-5786322493656475772?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/5786322493656475772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=5786322493656475772' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5786322493656475772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5786322493656475772'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2008/02/personal-note-im-on-move.html' title='Personal note: I&apos;m on the move...'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-5179867091573562027</id><published>2008-01-25T01:20:00.001+01:00</published><updated>2009-04-04T03:58:57.564+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Fewer Zope Server restarts</title><content type='html'>In my ongoing attempt to make filesystem based &lt;a href="http://hannosch.blogspot.com/2007/10/performance-sprint-warmup.html"&gt;Zope development faster&lt;/a&gt;, I had a look at the nice but somewhat scary &lt;a href="http://launchpad.net/refreshng/"&gt;RefreshNG product&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One of the nice things which I thought about myself is its ability to reload all ZCML and reconfigure the global site manager without a server restart.&lt;br /&gt;&lt;br /&gt;I took that idea and made it into its own package &lt;span style="font-style: italic;"&gt;plone.reload&lt;/span&gt; which has a first release at &lt;a href="http://pypi.python.org/pypi/plone.reload/0.1"&gt;http://pypi.python.org/pypi/plone.reload/0.1&lt;/a&gt;. All you need to do is to call http://server:port/@@zcml_reload while being logged-in as a Manager. You can do that as often as you like :)&lt;br /&gt;&lt;br /&gt;Casual testing tells me that it should work in a standard Zope2 or Plone environment, though I only tested it against Zope 2.11 / Plone 4.0.&lt;br /&gt;&lt;br /&gt;Feedback and bug reports welcome ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sorry for the premature announcement. It seems there is some caching going on, which I need to work around. Probably this happens thanks to the new local site manager... Right now changing global GenericSetup steps works fine, but not much more. I'll post an update once I have tested this myself more thoroughly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update 2:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I got a new 0.3 release out, which should fix the caching issues. Sadly it does so by invalidating all the ZODB caches, which means you will wait a bit more after hitting the Force-Reload button in your browser. I found that just refreshing the site gave an acceptable wait-time, though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-5179867091573562027?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/5179867091573562027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=5179867091573562027' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5179867091573562027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/5179867091573562027'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2008/01/fewer-zope-server-restarts.html' title='Fewer Zope Server restarts'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-6760291889322866987</id><published>2007-12-27T00:59:00.000+01:00</published><updated>2009-04-04T03:58:57.564+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>MailHost redux</title><content type='html'>For some time we had quite an interesting and diverse landscape of mail host solutions for Zope and Plone.&lt;br /&gt;&lt;br /&gt;With the upcoming release of Zope 2.11 we finally have a nice and feature rich default MailHost implementation in Zope 2 based on the zope.sendmail package. Major kudos to Andreas Jung for doing that work.&lt;br /&gt;&lt;br /&gt;Today I have spent some hours to fix the standard mail host used in Plone provided by the SecureMailHost product to become nothing more than a tiny backwards compatibility layer on top of Zope 2's standard MailHost. Hopefully this work will go into Plone 4.0.&lt;br /&gt;&lt;br /&gt;At that point we'll have a transaction-safe default mail delivery which you can turn into an asynchronous delivery by nothing more than a switch in the ZMI. And obviously it has SSL/TLS support as well :)&lt;br /&gt;&lt;br /&gt;If you are interested in testing this, please get the code from http://svn.plone.org/svn/collective/SecureMailHost/trunk.&lt;br /&gt;&lt;br /&gt;Feedback welcome,&lt;br /&gt;Hanno&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-6760291889322866987?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/6760291889322866987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=6760291889322866987' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/6760291889322866987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/6760291889322866987'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2007/12/mailhost-redux.html' title='MailHost redux'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-8722068342372369340</id><published>2007-10-21T10:26:00.000+02:00</published><updated>2009-04-04T03:58:57.564+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Confession of a civilian</title><content type='html'>Here it is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;I do TTW-customization on almost all of my sites!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Most of them are simple sites that use no custom logic and have only some templates and CSS files customized. I work with people on these projects that don't know Python or anything of the Zope/Plone stack. Explaining them the portal_skins ZMI is easy enough, explaining them shell access, server restarts and theme products is just not productive. And restarting the server for one change would take down the four other simple sites hosted on the same server as well - that's just not a good idea.&lt;br /&gt;&lt;br /&gt;One thing I'm not going to do however is doing any kind of TTW development. My simple rule is to never use Python scripts in the customs folder, just customized page templates. For Python code and any kind of logic you need to know Python and some parts of the stack anyways, so the step to file system based code is a lot smaller and the advantages of proper development tools gets bigger.&lt;br /&gt;&lt;br /&gt;The only thing I personally have found to be too cumbersome is to do Plone version upgrades with TTW templates. I need good diff tools to compare the changes made to the original template and my customized versions (say main_template), so I usually end up dumping the whole templates to a file system theme product before the upgrade and do the diffing and adjusting work there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-8722068342372369340?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/8722068342372369340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=8722068342372369340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/8722068342372369340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/8722068342372369340'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2007/10/confession-of-civilian.html' title='Confession of a civilian'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-3048255344252437218</id><published>2007-10-16T23:22:00.000+02:00</published><updated>2009-04-04T03:58:57.565+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Performance sprint warmup</title><content type='html'>While the &lt;a href="http://plone.org/events/sprints/copenhagen-performance-sprint"&gt;Copenhagen Plone performance sprint&lt;/a&gt; is still two weeks away, I thought I spent some time on profiling during the &lt;a href="http://plone.org/events/conferences/2007-naples/sprint"&gt;Naples sprint&lt;/a&gt; at this years &lt;a href="http://plone.org/events/conferences/2007-naples/"&gt;Plone conference&lt;/a&gt; as well.&lt;br /&gt;&lt;br /&gt;I concentrated on profiling Zope startup time when Plone is installed in it. While this doesn't matter that much in production environments it is of quite some importance for us poor developers.&lt;br /&gt;&lt;br /&gt;On my one year old MacBook Pro Zope would start in about 16 seconds at first. Using &lt;a href="http://mg.pov.lt/blog/profiling.html"&gt;Marius Gedminas great profilehooks.py&lt;/a&gt; I identified four big time consumers.&lt;br /&gt;&lt;br /&gt;1. Importing modules&lt;br /&gt;&lt;br /&gt;Not much can be done about that, though some of the CMFPlone migrations seem to be a good candidate to be excluded from initial loading and being defered to a point when they are actually needed. A couple of hundred imports could be safed here I guess.&lt;br /&gt;&lt;br /&gt;2. Compiling and registering translation files&lt;br /&gt;&lt;br /&gt;In a Plone environment so far all about 620 po files where read and parsed two to three times. I needed to adjust the mo file compilation code in my &lt;a href="http://pypi.python.org/pypi/python-gettext"&gt;python-gettext&lt;/a&gt; package a bit and hacked PlacelessTranslationService to use lazy message catalogs instead. Those won't parse all the files on Zope startup but instead once they are first accessed. A typical site will probably never use all the languages and parsing and keeping those in memory was a bad choice.&lt;br /&gt;&lt;br /&gt;After this was done I was down at 11 seconds. About a 30% speed increase.&lt;br /&gt;&lt;br /&gt;3. Reading and compiling page templates&lt;br /&gt;&lt;br /&gt;It turned out that right now we have around 140 purely disk based page template files for various ZMI screens. Until now all of them were always read, parsed and compiled on Zope startup; most of them are never used. So I added some lazy loading code into Zope's PageTemplateFile, made it available as an option and enabled it from CMFPlone. As the CMFPlone code is read after some of the templates are already loaded, we can only skip about 110 of them in this way. I'll add the whole thing as a zope.conf option, which will be parsed early enough in the process to get rid of the remaining ones.&lt;br /&gt;&lt;br /&gt;Measuring the startup time again, I'm now down to 8 seconds, another 30%.&lt;br /&gt;&lt;br /&gt;4. Parsing ZCML files&lt;br /&gt;&lt;br /&gt;Parsing hundreds of ZCML files is currently the remaining big block for startup time. AFAICS this uses expat right now. It might be interesting to experiment with different XML parsers like lxml to see if some performance gain can be achieved here. I'll leave the exercise to someone else (Florian had shown interest in it...). &lt;br /&gt;&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;By spending about half a day of work on the topic I could speed up Zope startup time by an overall 50%. Not too shabby I think :) Lets see if there are some weak spots while loading the Plone site TTW the first time as well...&lt;br /&gt;&lt;br /&gt;The downside to this all is that it is only available on Plone and Zope trunk. Maybe we can backport some of these improvements to the Plone 3.x line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-3048255344252437218?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/3048255344252437218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=3048255344252437218' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/3048255344252437218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/3048255344252437218'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2007/10/performance-sprint-warmup.html' title='Performance sprint warmup'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-115894066052765883</id><published>2006-09-22T17:41:00.000+02:00</published><updated>2009-04-04T03:58:57.565+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Having fun with setuptools</title><content type='html'>As already &lt;a href="http://hannosch.blogspot.com/2006/09/cheeseshop-gets-zopified.html"&gt;noted yesterday&lt;/a&gt; the CheeseShop is getting interesting for the common Zope folks. So I took the opportunity to play around a bit more with &lt;a href="http://plone.org/products/i18ndude"&gt;i18ndude&lt;/a&gt; and &lt;a href="http://peak.telecommunity.com/DevCenter/setuptools"&gt;setuptools&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The result is a &lt;a href="http://plone.org/products/i18ndude/releases/2.1"&gt;new i18ndude 2.1 release&lt;/a&gt; that is &lt;a href="http://python.org/pypi/i18ndude/2.1"&gt;available as an egg&lt;/a&gt; from the CheeseShop. All you need to do, is to run &lt;i&gt;easy_install i18ndude&lt;/i&gt; to get the latest version.&lt;br /&gt;&lt;br /&gt;But while reading the setuptools documentation I found yet another useful feature which is called &lt;a href="http://peak.telecommunity.com/DevCenter/setuptools#automatic-script-creation"&gt;automatic script creation&lt;/a&gt;. Now I have developed on the MS Windows platform for quite some years and have always hated to have to write wrapper scripts around Python scripts myself in order to make them callable.&lt;br /&gt;&lt;br /&gt;Now thanks to setuptools this step is automatically taken care of and an i18ndude.exe is created automatically if you easy_install i18ndude :)&lt;br /&gt;&lt;br /&gt;But I was even more adventurous and tried out the integrated distutils support for building nice installers and found that I only had to type in a single command to get a nice Windows installer in addition to the egg build and have them automatically uploaded to the CheeseShop:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;python setup.py register bdist_egg bdist_wininst upload -s&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;While you have to be on a Windows system to be able to create that installer, this is  not harder than doing an tar.gz release.&lt;br /&gt;&lt;br /&gt;So make sure to grab the new &lt;a href="http://plone.org/products/i18ndude/releases/2.1.1"&gt;experimental installer for i18ndude 2.1.1&lt;/a&gt; and report back any issues you find in the &lt;a href="http://plone.org/products/i18ndude/i18ndudetracker"&gt;bug tracker&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If this turns out to be as easy as it looks like right now, you might find new installers for the various plone.* packages in the future as well. Now a way to register those releases on plone.org from the command line as well would be nice ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-115894066052765883?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/115894066052765883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=115894066052765883' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115894066052765883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115894066052765883'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2006/09/having-fun-with-setuptools.html' title='Having fun with setuptools'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-115884384106023316</id><published>2006-09-21T14:40:00.000+02:00</published><updated>2009-04-04T03:58:57.565+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Cheeseshop gets zopified</title><content type='html'>After reading &lt;a href="http://www.z3lab.org/sections/blogs/philipp-weitershausen/2006_09_21_cheeseshop-now-framework"&gt;Phillips blog post about the new framework categories for Zope 2 and 3 in the Cheeseshop&lt;/a&gt; I got to work and updated the i18ndude registration as well as pre-registered the plone.i18n and plone.app.i18n packages, so right now we have four packages registered for the two frameworks which are all around internationalization :)&lt;br /&gt;&lt;br /&gt;For a nice short explanation &lt;a href="http://danielnouri.org/blog/devel/upload-to-pypi.html"&gt;how-to register a package in the Cheeseshop you should read Daniels blog post&lt;/a&gt; on the topic.&lt;br /&gt;&lt;br /&gt;For those of you that have already upgraded to Subversion 1.4 you might find that setuptools does not work anymore.&lt;br /&gt;&lt;br /&gt;If you see a &lt;i&gt;AttributeError: 'NoneType' object has no attribute 'group'&lt;/i&gt; you want to try these steps (stolen from a post of Phillip J. Eby):&lt;br /&gt;&lt;pre&gt;easy_install -eb. setuptools==dev06&lt;/pre&gt;&lt;br /&gt;This will create a setuptools subdirectory in the current directory. Then do:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;cd setuptools&lt;br /&gt;python2.4 setup.py install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you haven't yet upgraded to Subversion 1.4 you can spare yourself this hassle and upgrade setuptools first ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-115884384106023316?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/115884384106023316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=115884384106023316' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115884384106023316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115884384106023316'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2006/09/cheeseshop-gets-zopified.html' title='Cheeseshop gets zopified'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-115850307706711290</id><published>2006-09-17T15:40:00.000+02:00</published><updated>2009-04-04T03:58:57.565+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>DZUG conference sprint 2006</title><content type='html'>Last week I have been in St. Augustin at a &lt;a href="http://www.zope.de/redaktion/dzug/tagung/sankt-augustin-2006/sankt-augustin-sprints/"&gt;three days pre-conference sprint&lt;/a&gt; before the &lt;a href="http://www.zope.de/dzug-tagung"&gt;annual DZUG e.V. conference&lt;/a&gt; which extended into the two conference days as well. We had a room in the &lt;a href="http://www.fh-brs.de/"&gt;University of Applied Sciences Bonn-Rhein-Sieg&lt;/a&gt; where the conference took place, but thanks to the excellent organization of Nina Schütz all of us five sprinters shared an apartment in Cologne, where we soon discovered a free wireless network that allowed us to work all day long. In the evenings we familiarized ourselves with the local flavor of beer called Kölsch in quite some nice pubs and bars as well ;)&lt;br /&gt;&lt;br /&gt;While I originally planned to polish up the last bits of my PLIP's for Plone 3.0 (CMF 2.1 and some i18n features) I had an idea the night before the sprint which I worked on instead.&lt;br /&gt;&lt;br /&gt;If you have looked into Plone 2.5 you will have noticed the introduction of a new product called GenericSetup that is used to configure a Plone site. If you are not yet familiar with it, you should really learn about it by reading &lt;a href="http://plone.org/documentation/tutorial/understanding-and-using-genericsetup-in-plone"&gt;Rob Miller's excellent tutorial&lt;/a&gt; that is available on plone.org.&lt;br /&gt;&lt;br /&gt;GenericSetup supports both setting up a site (a persistent Plone portal) from scratch through something called base profiles but also supports a concept of extension profiles that can be used to extend the configuration of a site after it has been created.&lt;br /&gt;&lt;br /&gt;Now these extension profiles can be used for installation of add-on products that need to register new content types, workflows, actions, create tools or anything else an add-on product would like to do. But right now there is one essential thing missing for this kind of additional configuration: Uninstall support.&lt;br /&gt;&lt;br /&gt;Right now we use CMFQuickInstallerTool to provide us with an easy way of installing add-ons and it has integrated support for recording the changes each individual product makes at install time, on which it's uninstall feature is based on. While this recording feature is far from perfect it handles at least 90% of the use-cases and has proven to be working quite well.&lt;br /&gt;&lt;br /&gt;Now the most obvious thing is: Why don't we teach CMFQuickInstallerTool how to install add-on products based on extension profiles rather than through an external method?&lt;br /&gt;&lt;br /&gt;After skimming through the code I realized that this is far easier than I would have imagined. So I spent the most part of the sprint working on this and had it fully functional at the end, including some nice test coverage. Right now you can find the &lt;a href="http://svn.plone.org/svn/collective/CMFQuickInstallerTool/branches/hannosch-dzugsprint/"&gt;code on a branch in the collective&lt;/a&gt;. It is tested with Plone 2.5 and Zope 2.9 only but should work for any supported combination of Plone 2.5 and up.&lt;br /&gt;&lt;br /&gt;Please try it out and report back any issues you find. You just need to replace the CMFQuickInstallerTool with my branch, there are no additional dependencies. If everything goes as planned we might have this included in Plone 3.0 and eventually even in Plone 2.5.2+&lt;br /&gt;&lt;br /&gt;As a personal note I might add that I begin to fall in love with sprint driven development. I think I begin to understand those developers out there that would like to see their life being a never-ending-sprint ;)&lt;br /&gt;&lt;br /&gt;Sprintingly yours,&lt;br /&gt;Hanno&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-115850307706711290?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/115850307706711290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=115850307706711290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115850307706711290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115850307706711290'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2006/09/dzug-conference-sprint-2006.html' title='DZUG conference sprint 2006'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-115627836251786459</id><published>2006-08-22T22:25:00.000+02:00</published><updated>2009-04-04T03:58:57.565+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>The summer is over</title><content type='html'>Dependent on where you are located on this planet, the summer season may still go on for some weeks or is yet some month away, but at least &lt;a href="http://code.google.com/soc/"&gt;Google's Summer of Code 2006&lt;/a&gt; is over.&lt;br /&gt;&lt;br /&gt;I had the privilege to be one of three students, who where allowed to work on projects for the &lt;a href="http://code.google.com/soc/plone/about.html"&gt;Plone Foundation&lt;/a&gt;. A big thanks to Google for making this happen and to all the people in the Plone community for supporting the idea and me specifically. A special thanks goes to my mentor Alec Mitchell, who has given me all the support I wanted.&lt;br /&gt;&lt;br /&gt;Now it is time to look back at the last few months and see how much progress I made and how many of &lt;a href="http://code.google.com/soc/plone/appinfo.html?csaid=505319E51BEC1471"&gt;my goals&lt;/a&gt; I actually reached. For those of you not familiar with my project, the short form was: Reimplement as much as possible of the existing i18n/l10n infrastructure found in the core Plone project based on Zope3.&lt;br /&gt;&lt;br /&gt;To be honest I did not achieve as many of my goals than I had hoped for myself. But the good news is that while some of the work is still to be done, on the one hand I will continue to work on these and on the other hand that quite a lot of my time has gone into creating or refining more infrastructure and process for developing with Zope3 in the context of Plone, which will hopefully benefit all of you.&lt;br /&gt;&lt;br /&gt;But here are some concrete things I have been working on:&lt;br /&gt;&lt;br /&gt;1. Finish the move to use Zope3 Messages to internationalize Python code.&lt;br /&gt;&lt;br /&gt;This has been started in &lt;a href="http://plone.org/products/plone/roadmap/108"&gt;Plone 2.5 as detailed in PLIP 108&lt;/a&gt; and now has been extended to the world of Archetypes. On the current Plone 3.0 bundle you will find that both Archetypes and all of ATContentTypes use Messages now to mark any textual data which needs translation as part of the UI. For an example on how this looks like you can &lt;a href="http://dev.plone.org/collective/browser/ATContentTypes/trunk/content/event.py"&gt;view the event schema definition in ATCT&lt;/a&gt;. The two most prominent benefits of this are the ability to automatically extract all these messages from your product to build the Gettext translation templates and the ability to define these messages in your products own translation domain. Both of these should make it considerably easier to internationalize your products resulting in more products being available in multiple languages.&lt;br /&gt;&lt;br /&gt;2. Sanitizing the lists of available languages and countries&lt;br /&gt;&lt;br /&gt;So far we had three different implementations in AT, Plone and PloneLanguageTool used for various language lists and they where heavily out of sync. I reimplemented these as Zope3 utilities as part of &lt;a href="http://dev.plone.org/plone/browser/plone.i18n/trunk"&gt;my plone.i18n product&lt;/a&gt; and changed all the various places to use these centralized lists instead. Of course there are some different utilities for meta data languages or content languages now and you have the ability to customize these lists easily by adding local persistent variants of these utilities as implemented in &lt;a href="http://dev.plone.org/plone/browser/plone.app.i18n/trunk"&gt;plone.app.i18n&lt;/a&gt;. If you don't understand what I mean by that: Don't worry - there'll be a nice simple UI for you, which just allows you to select the languages you want to be available. After all this is still Plone - nice defaults and ease of use ;)&lt;br /&gt;&lt;br /&gt;3. New reusable and extensible text normalization&lt;br /&gt;&lt;br /&gt;When creating new items in Plone the technical id which ends up being used in the URL is usually autogenerated from the title of your object. As the URL is currently still limited to pure ASCII characters, you will have to normalize non-ASCII chars in some way to an ASCII equivalent for all languages except English. So far there was a hardcoded list of character mappings in CMFPlone itself, which you had no chance to enhance or customize easily. Now the whole process is based on Zope3 utilities as well allowing for easy customization and re-use. You can find the &lt;a href="http://dev.plone.org/plone/browser/plone.i18n/trunk/plone/i18n/normalizer"&gt;code in the plone.i18n package&lt;/a&gt; as well. As an added bonus the title normalization is now language dependent, so you can have meaningful mappings regarding your language and the normalization process is not slowed done by having to look at mappings for the whole Unicode character range at once.&lt;br /&gt;&lt;br /&gt;4. Making our nice country flags available as Zope3 resources&lt;br /&gt;&lt;br /&gt;If you have installed PloneLanguageTool so far or have a multi-language site based on LinguaPlone you will have noticed some nice icons that use country flags to symbolize the languages you want to read content in or translate to. These are now &lt;a href="http://dev.plone.org/plone/browser/plone.i18n/trunk/plone/i18n/locales/browser/country-flags"&gt;part of plone.i18n&lt;/a&gt; as well and thus available in any Zope3 based project rather than being stuck in a Plone specific product.&lt;br /&gt;&lt;br /&gt;5. Lots of bug fixes...&lt;br /&gt;&lt;br /&gt;Developing new things while there are still critical bugs for the most recent version didn't make much sense to me, so I tried to kill all &lt;a href="http://dev.plone.org/plone/query?status=closed&amp;milestone=%212.1&amp;milestone=%212.1.2&amp;milestone=%212.1.3&amp;milestone=%212.5&amp;owner=hannosch&amp;order=milestone"&gt;serious internationalization related bugs&lt;/a&gt; for Plone 2.5 and some more as I was on it ;)&lt;br /&gt;&lt;br /&gt;And now some notes on the infrastructure side&lt;br /&gt;&lt;br /&gt;6. New ZopeSkel templates to quickstart your Plone product&lt;br /&gt;&lt;br /&gt;As the Plone community is currently adopting Zope3 development practices, one of the new things you have to learn about, is writing your products not as Zope Products but as regular Python packages. These days this involves providing some metadata to enable them to be &lt;a href="http://peak.telecommunity.com/DevCenter/setuptools"&gt;packaged as eggs&lt;/a&gt;. As this is quite some boilerplate to remember &lt;a href="http://danielnouri.org/blog"&gt;Daniel Nouri&lt;/a&gt; has created a new &lt;a href="http://danielnouri.org/blog/devel/zope/quickstart-with-pastescript.html"&gt;product called ZopeSkel&lt;/a&gt; based on &lt;a href="http://blog.ianbicking.org/"&gt;Ian Bickings&lt;/a&gt; &lt;a href="http://pythonpaste.org/script/"&gt;PasteScript&lt;/a&gt; to generate product skeletons. After some extensive discussions I have &lt;a href="http://danielnouri.org/blog/devel/zope/zopeskel-plonecore.html"&gt;added some nice templates&lt;/a&gt; to quickstart products in the &lt;a href="http://sourceforge.net/mailarchive/message.php?msg_id=35846994"&gt;plone and plone.app namespaces&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;7. New GenericSetup support for local components&lt;br /&gt;&lt;br /&gt;As &lt;a href="http://hannosch.blogspot.com/2006/08/we-are-getting-local.html"&gt;I already blogged about&lt;/a&gt; some days ago, followed up by &lt;a href="http://optilude.blogspot.com/2006/08/local-adapters-in-zope-210.html"&gt;Martin Aspeli's blog entry about local adapters&lt;/a&gt; and their use in &lt;a href="http://svn.plone.org/svn/plone/plone.portlets"&gt;plone.portlets&lt;/a&gt; I have some fresh news from this front. The whole export/import handlers are now part of their own project called &lt;a href="http://dev.plone.org/collective/browser/GSLocalAddons/trunk"&gt;GSLocalAddons&lt;/a&gt; and I have extended the handlers quite a bit. They are now able to create registrations for utilities and adapters and as a special mode, they can even create utility registration from your already existing content in the ZODB. So making your CMF tools available as utilities shouldn't be any harder as to write two lines of XML now.&lt;br /&gt;&lt;br /&gt;8. CMF 2.1 support for Plone 3.0&lt;br /&gt;&lt;br /&gt;Only partially related to my SoC project has been my work on &lt;a href="http://plone.org/products/plone/roadmap/148"&gt;CMF 2.1 for Plone&lt;/a&gt;. At least this adds one of the last missing pieces to the i18n-puzzle by using Zope3 Messages for things like action titles and some more CMF specific things. I had stopped working on this to concentrate my efforts on the more vital parts of my SoC project, but now that this is over, I can start working on it again.&lt;br /&gt;&lt;br /&gt;What remains to be done?&lt;br /&gt;&lt;br /&gt;As you can read in &lt;a href="http://code.google.com/soc/plone/appinfo.html?csaid=505319E51BEC1471"&gt;my project description&lt;/a&gt; there are still some features currently available in PloneLanguageTool and PlacelessTranslationService not yet available in Zope3. After I cleaned up my current projects, I will start working on these again, so we might be able to retire both of these products in Plone 3.5 in the next year. So stay tuned, as the journey to a better world of internationalization isn't over yet :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-115627836251786459?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/115627836251786459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=115627836251786459' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115627836251786459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115627836251786459'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2006/08/summer-is-over.html' title='The summer is over'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-115571701441410515</id><published>2006-08-16T09:56:00.000+02:00</published><updated>2009-04-04T03:58:57.565+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>We are getting local...</title><content type='html'>As you may have noticed Plone developers are currently pushing hard to use new Zope3 technologies to bring sanity again to the world of Plone code.&lt;br /&gt;&lt;br /&gt;So far we have been using interfaces and browser views in Plone 2.5, but for Plone 3.0 we are going to rely on Zope 2.10 which has a far easier local component story. So you can expect to see not only global utilities and adapters but also their local counterparts.&lt;br /&gt;&lt;br /&gt;But how do we actually create those in our persistent CMF-based portals? Well, why not do the obvious and use our existing configuration setup called GenericSetup to create them for us?&lt;br /&gt;&lt;br /&gt;Imagine a simple file called sitemanager.xml with the following code:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt; ?xml version="1.0"? &gt;&lt;br /&gt;&lt; utilities &gt;&lt;br /&gt;&lt; utility&lt;br /&gt; interface="plone.app.i18n.locales.interfaces.ICountries"&lt;br /&gt; class="plone.app.i18n.locales.countries.Countries"&lt;br /&gt; /&gt;&lt;br /&gt;&lt; /utilities &gt;&lt;/pre&gt;&lt;/blockquote&gt;Wouldn't it be nice if you could use something like it? Well you can, I made the first prototype as part of my Google Summer of Code project and it's working just fine.&lt;br /&gt;&lt;br /&gt;You can take a sneak peak at the code at:&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;&lt;a href="http://dev.plone.org/collective/browser/GSLocalAddons/trunk/exportimport/sitemanager.py"&gt;http://dev.plone.org/collective/browser/GSLocalAddons/trunk/exportimport/sitemanager.py&lt;/a&gt;. Once this has a decent amount of tests, I would consider this a valuable addition to GenericSetup itself.&lt;br /&gt;&lt;br /&gt;P.S. I should note that I stole some ideas from &lt;a href="http://blogs.nuxeo.com/sections/blogs/lennart_regebro"&gt;Lennart Regebro's&lt;/a&gt; work on &lt;a href="http://svn.nuxeo.org/trac/pub/browser/CPS3/products/CPSSharedCalendar/branches/regebro-generic_setup"&gt;CPSSharedCalendar&lt;/a&gt;, thx mate ;)&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-115571701441410515?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/115571701441410515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=115571701441410515' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115571701441410515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115571701441410515'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2006/08/we-are-getting-local.html' title='We are getting local...'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-115358007063189787</id><published>2006-07-22T16:54:00.000+02:00</published><updated>2009-04-04T03:59:32.606+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Switching to Mac OS X</title><content type='html'>So far I have been quite a satisfied user of Windows XP, having to deal with the whole Windows platform as part of my day job anyways. Put as of late I found myself in a position where I was constantly hitting some edges I did not like about it. For some time I was able to get myself going by using more and more helpful Unix tools, which were ported natively to the Windows platform by some friendly folks.&lt;br /&gt;&lt;br /&gt;But in the last couple of weeks I grew even more impatient especially about the visual look and responsiveness of the graphical user interface. My first reaction has been to get myself a copy of the new Windows Vista and evaluate if I would eventually be able to hold myself back and wait on the next Windows version that promised to get a new breath-taking look and feel. But after some days of extensive testing I had to finally realize that Windows Vista would merely be able to catch up with the graphical features of all the other OS'es available right now, but would by no means be able to show any innovation or even take the lead for some month. Considering that I would have to wait for the next Windows version after Vista probably for four years or more, it just wasn't an option.&lt;br /&gt;&lt;br /&gt;After looking out for contenders I got myself copies of Ubuntu Linux and for some old habit a copy of OpenSuse and tried both KDE and Gnome again. While both gave me a lot of flexibility and have improved a lot since I last looked at them a couple of years ago I still wasn't satisfied. My main problem with them was that I would have to spent weeks to configure them in a way that I would find them usable and fun to work with. This showed me once more why I like Plone so much - sensible defaults and not too many options on the standard config screen, while still retaining the flexibility of being able to customize every part of it.&lt;br /&gt;&lt;br /&gt;Now as I needed to get myself a notebook I did the one obvious thing after all. Being a core Plone developer I had seen the majority of friendly folks at conferences and sprints using some hard- and software of a certain fruit company. Now thanks to &lt;a href="http://code.google.com/soc/plone/about.html"&gt;my current Google Summer of Code project&lt;/a&gt; I had the money to buy myself one of these fruit boxes myself :)&lt;br /&gt;&lt;br /&gt;As a nice add-on bonus I got myself a notebook with a native English keyboard so I would not have to dislocate my fingers anymore while typing some code which included some of those rare characters like brackets, which are at insane positions at the standard German keyboard.&lt;br /&gt;&lt;br /&gt;Thanks to some &lt;a href="http://www.z3lab.org/sections/blogs/philipp-weitershausen/2006_04_26_keyboard-layout-for"&gt;nice how-to from philiKON&lt;/a&gt; I was able to get those few umlauts I needed on occasion working with ease. For all those lazy folks out there you can get my &lt;a href="http://hannosch.info/keyboard/usgerman.keylayout"&gt;keylayout file for U.S. (German)&lt;/a&gt; and a &lt;a href="http://hannosch.info/keyboard/usgerman.icns"&gt;nice icon for it&lt;/a&gt;. I hope you like the icon Philipp ;)&lt;br /&gt;&lt;br /&gt;Now I have to get back to coding as the &lt;a href="http://svn.plone.org/svn/plone/review/plip148-cmf21-bundle/"&gt;CMF 2.1 integration bundle for Plone 3&lt;/a&gt; still needs some love...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-115358007063189787?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/115358007063189787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=115358007063189787' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115358007063189787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/115358007063189787'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2006/07/switching-to-mac-os-x.html' title='Switching to Mac OS X'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-113242385688814234</id><published>2005-11-19T18:53:00.000+01:00</published><updated>2009-04-04T03:58:57.565+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>ArchGenXML finally supports i18ndude 2.0</title><content type='html'>Luckily I have meet jensens today on IRC and after some discussion we finally got ArchGenXML to support the new i18ndude 2.0.&lt;br /&gt;&lt;br /&gt;So be sure to grab the latest version of ArchGenXML from SVN trunk or wait on the next official 1.4 release. As always you can get the latest i18ndude release from http://plone.org/products/i18ndude/.&lt;br /&gt;&lt;br /&gt;Please note that i18ndude 1.0 won't work anymore, so be sure to upgrade simultaneously ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-113242385688814234?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/113242385688814234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=113242385688814234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/113242385688814234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/113242385688814234'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2005/11/archgenxml-finally-supports-i18ndude.html' title='ArchGenXML finally supports i18ndude 2.0'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19026079.post-113215467199873633</id><published>2005-11-16T15:55:00.000+01:00</published><updated>2009-04-04T04:30:31.330+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>What am I doing?</title><content type='html'>I'm an active core developer of the &lt;a href="http://plone.org/"&gt;Plone™ Open Source Content Management System&lt;/a&gt;. My main focus is currently on internationalization. In this role I'm maintaining the &lt;a href="http://plone.org/products/i18ndude"&gt;i18ndude&lt;/a&gt;, &lt;a href="http://plone.org/products/i18ntestcase"&gt;i18ntestcase&lt;/a&gt; and &lt;a href="http://plone.org/products/pts"&gt;PlacelessTranslationService&lt;/a&gt; products and co-leading the &lt;a href="http://plone.org/development/teams/i18n/"&gt;i18n team&lt;/a&gt; responsible for the translation of Plone.&lt;br /&gt;&lt;br /&gt;Currently I'm working hard on getting Plone to use &lt;a href="http://dev.zope.org/Zope3"&gt;Zope3's&lt;/a&gt; i18n features like MessageID's. See my &lt;a href="http://plone.org/products/plone/roadmap/108"&gt;PLIP 108&lt;/a&gt; and &lt;a href="http://plone.org/products/plone/roadmap/111"&gt;PLIP 111&lt;/a&gt; for details.&lt;br /&gt;&lt;br /&gt;Some things I have on my todo list:&lt;br /&gt;  &lt;ul&gt;&lt;li&gt;Write a how-to on internationalization of your AT-based product using the capabilities of Plone 2.2 (MessageID's)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Rewrite the localization part of the translation_service of Plone using Zope3's locales support, removing the date/time handling from the po files&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Deprecate the current i18n approach of AT and replace it with a MessageID-based approach. Get ArchGenXML to support it (and the new i18ndude)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Rewrite PloneLanguageTool using Zope3 technologies and incorporate the language negotiating which is part of PTS into it&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Get rid of PTS as fast as we can ;)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Support &lt;a href="https://launchpad.net/rosetta"&gt;launchpad/rosetta&lt;/a&gt; to translate Plone or write a PloneI18NCenter product which does some of this stuff&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Implement support for number dependend messages in Zope3&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Make the world a better place...&lt;/li&gt;&lt;/ul&gt;If you want to help on any of this please let me know. Ideas on what has to be improved in i18n/l10n are most welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19026079-113215467199873633?l=blog.hannosch.eu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.hannosch.eu/feeds/113215467199873633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19026079&amp;postID=113215467199873633' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/113215467199873633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19026079/posts/default/113215467199873633'/><link rel='alternate' type='text/html' href='http://blog.hannosch.eu/2005/11/what-am-i-doing.html' title='What am I doing?'/><author><name>Hanno Schlichting</name><uri>http://www.blogger.com/profile/02880767944793425548</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-mJW0fTlfWBc/TjBmMUGwU1I/AAAAAAAAA08/wAGjCU2GQeY/s220/hannosch.jpg'/></author><thr:total>1</thr:total></entry></feed>
