<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>mrtopf.de » English Posts</title>
	
	<link>http://mrtopf.de/blog</link>
	<description>Web2.0, Plone, Second Life, New Marketing, Data Portability</description>
	<pubDate>Tue, 10 Nov 2009 11:44:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/MrtopfdeEnglishPosts" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Data Without Borders is back: The Internet Identity Workshop</title>
		<link>http://feedproxy.google.com/~r/MrtopfdeEnglishPosts/~3/4lWDElRNed8/</link>
		<comments>http://mrtopf.de/blog/podcast/data-without-borders-is-back/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 11:44:57 +0000</pubDate>
		<dc:creator>Christian Scholz</dc:creator>
		
		<category><![CDATA[Data Portability]]></category>

		<category><![CDATA[English Posts]]></category>

		<category><![CDATA[Planet Plone]]></category>

		<category><![CDATA[Podcast]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[data without borders]]></category>

		<category><![CDATA[dataportability]]></category>

		<category><![CDATA[dwbp]]></category>

		<category><![CDATA[iiw]]></category>

		<category><![CDATA[internet identity workshop]]></category>

		<category><![CDATA[standards]]></category>

		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://mrtopf.de/blog/?p=1389</guid>
		<description><![CDATA[It took a while before we restarted our podcast &#8220;Data Without Borders&#8221; but we are back on track with the third episode after the break where we talk about what happened at the Internet Identity Workshop (IIW) which happened last week.
We also got two new people on board: Eve Maler from PayPal who is also [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fpodcast%2Fdata-without-borders-is-back%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fpodcast%2Fdata-without-borders-is-back%2F" height="61" width="51" /></a></div><p><a href="http://datawithoutborders.net"><img alt="Data Without Borders" src="http://datawithoutborders.net/files/itunes-icon2-150.png" title="Data Without Borders" class="alignleft" width="150" height="150" /></a>It took a while before we restarted our podcast &#8220;<a href="http://datawithoutborders.net/">Data Without Borders</a>&#8221; but we are back on track with the third episode after the break where we talk about what happened at the <a href="http://iiw.idcommons.net/Main_Page">Internet Identity Workshop</a> (IIW) which happened last week.</p>
<p>We also got two new people on board: <a href="http://xmlgrrl.com">Eve Maler</a> from PayPal who is also the chair of the <a href="http://kantarainitiative.org">Kantara Inititative</a>&#8217;s <a href="http://kantarainitiative.org/confluence/display/uma/Home">User Managed Access Work Group</a> and <a href="http://eliasbizannes.com/blog/">Elias Bizannes</a>, like myself board member of the <a href="http://dataportability.org">DataPortability Project</a>.</p>
<p>Of course we also still have <a href="http://mediaslate.org">Trent Adams</a> from the <a href="http://www.isoc.org/">Internet Society</a> (the organization behind the <a href="http://ietf.org">IETF</a>) and another member of the DataPortability Project board: <a href="http://stevenwonders.com">Steve Greenberg</a>.</p>
<p>And last but not least we are now an official podcast of the DataPortability Project (<small>whatever that actually means, in terms of content probably nothing and it should be noted that the opinions expressed in thep podcast are our personal opinions and not some official opinion of the DataPortability Project unless stated otherwise</small>).</p>
<h3>The Internet Identity Workshop</h3>
<p>I heard a lot of very good things about the Internet Identity Workshop which happenes twice a year in Mountain View, CA. Unfortunately I never made it there though. But at least I know people who are going there and this time all of my podcast co-hosts have been there and so we talk about some topics which have been discussed there, like the future of OpenID, Webfinger, LRDD, XRD and lot of other upcoming and established standards.</p>
<p>But give it a listen yourself:</p>
<p><br />
(<a href="http://datawithoutborders.net/files/dwb07.mp3">Download MP3, 45 min, 46 MB</a>)</p>
<p>For the shownotes check the <a href="http://datawithoutborders.net/dwb7/">blog entry</a>.</p>
<p>You can also <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=299637365">subscribe to us on iTunes</a>.</p>
<p>We are also <a href="http://datawithoutborders.net/live/">streaming the recording of new episodes live</a> on fridays, 1800 UTC. More information will be posted to the <a href="http://twitter.com/dwbp">Data Without Borders Twitter account</a>.</p>

    <!-- fb_sitestats code START -->
    <script src="http://feeds.feedburner.com/~s/mrtopfde?i=http://mrtopf.de/blog/podcast/data-without-borders-is-back/" type="text/javascript" charset="utf-8"></script>
    <!-- fb_sitestats code END -->
    <img src="http://feeds.feedburner.com/~r/MrtopfdeEnglishPosts/~4/4lWDElRNed8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mrtopf.de/blog/podcast/data-without-borders-is-back/feed/</wfw:commentRss>
		<enclosure url="http://datawithoutborders.net/files/dwb07.mp3" length="47220864" type="audio/mpeg" /><media:content url="http://datawithoutborders.net/files/dwb07.mp3" fileSize="47220864" type="audio/mpeg" /><feedburner:origLink>http://mrtopf.de/blog/podcast/data-without-borders-is-back/</feedburner:origLink></item>
		<item>
		<title>Malthe about “Otto” (Plone Conference 2009 Open Space Session)</title>
		<link>http://feedproxy.google.com/~r/MrtopfdeEnglishPosts/~3/WK88EbNZi4o/</link>
		<comments>http://mrtopf.de/blog/plone/malthe-about-otto-plone-conference-2009-open-space-session/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 17:09:30 +0000</pubDate>
		<dc:creator>Christian Scholz</dc:creator>
		
		<category><![CDATA[Conferences and Meetings]]></category>

		<category><![CDATA[English Posts]]></category>

		<category><![CDATA[Planet Plone]]></category>

		<category><![CDATA[Plone]]></category>

		<category><![CDATA[Podcast]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[bfg]]></category>

		<category><![CDATA[otto]]></category>

		<category><![CDATA[ploneconf2009]]></category>

		<category><![CDATA[webframeworks]]></category>

		<guid isPermaLink="false">http://mrtopf.de/blog/?p=1386</guid>
		<description><![CDATA[
Malthe Borch organized a session about &#8220;Otto&#8221;, his and Jeroen&#8217;s approach to make Python Web Framework programming fun again mainly be reinventing the wheel. But give it a listen yourself:

(Download MP3)
(It started by Malthe explaining that repoze.bfg was born out of forking Zope3 packages to make them work in your environment and then noticing that [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fmalthe-about-otto-plone-conference-2009-open-space-session%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fmalthe-about-otto-plone-conference-2009-open-space-session%2F" height="61" width="51" /></a></div><p><a title="Malthe about empty fields by MrTopf, on Flickr" href="http://www.flickr.com/photos/mrtopf/4058008355/"><img src="http://farm3.static.flickr.com/2789/4058008355_ffa8ce5e0b.jpg" alt="Malthe about empty fields" width="500" height="331" /></a></p>
<p>Malthe Borch organized a session about &#8220;Otto&#8221;, his and Jeroen&#8217;s approach to make Python Web Framework programming fun again mainly be reinventing the wheel. But give it a listen yourself:</p>
<p></p>
<p>(<a href="http://mrtopf.de/files/otto.mp3">Download MP3</a>)</p>
<p>(It started by Malthe explaining that <a href="http://bfg.repoze.org">repoze.bfg</a> was born out of forking Zope3 packages to make them work in your environment and then noticing that you don&#8217;t need them and throwing them out again or something along those lines)</p>
<p><a href="http://www.flickr.com/photos/mrtopf/4058007597/" title="Malthe and Sylvain during the Otto session by MrTopf, on Flickr"><img src="http://farm3.static.flickr.com/2620/4058007597_6248d51fde.jpg" width="500" height="331" alt="Malthe and Sylvain during the Otto session" /></a></p>

    <!-- fb_sitestats code START -->
    <script src="http://feeds.feedburner.com/~s/mrtopfde?i=http://mrtopf.de/blog/plone/malthe-about-otto-plone-conference-2009-open-space-session/" type="text/javascript" charset="utf-8"></script>
    <!-- fb_sitestats code END -->
    <img src="http://feeds.feedburner.com/~r/MrtopfdeEnglishPosts/~4/WK88EbNZi4o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mrtopf.de/blog/plone/malthe-about-otto-plone-conference-2009-open-space-session/feed/</wfw:commentRss>
		<enclosure url="http://mrtopf.de/files/otto.mp3" length="26730624" type="audio/mpeg" /><media:content url="http://mrtopf.de/files/otto.mp3" fileSize="26730624" type="audio/mpeg" /><feedburner:origLink>http://mrtopf.de/blog/plone/malthe-about-otto-plone-conference-2009-open-space-session/</feedburner:origLink></item>
		<item>
		<title>Georg Greve’s Keynote at the Plone Conference 2009</title>
		<link>http://feedproxy.google.com/~r/MrtopfdeEnglishPosts/~3/VzY5OuGmtnM/</link>
		<comments>http://mrtopf.de/blog/plone/pc09-keynote-fsfe/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 09:17:08 +0000</pubDate>
		<dc:creator>Christian Scholz</dc:creator>
		
		<category><![CDATA[Conferences and Meetings]]></category>

		<category><![CDATA[English Posts]]></category>

		<category><![CDATA[Planet Plone]]></category>

		<category><![CDATA[Plone]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://mrtopf.de/blog/plone/pc09-keynote-fsfe/</guid>
		<description><![CDATA[
Georg Greve from the Free Software Foundation Europe was talking about decision making. He started explaining how he moved from being a software developer to being a politician. 
He takes the relicensing policy as an example and wonders how we reached a decision on it. What is a majority? How do we define the qualified [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fpc09-keynote-fsfe%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fpc09-keynote-fsfe%2F" height="61" width="51" /></a></div><p><a href="http://www.flickr.com/photos/mrtopf/4058009944/" title="Georg Greve of the FSF at the Plone Conference 2009 by MrTopf, on Flickr"><img src="http://farm3.static.flickr.com/2636/4058009944_e64d439795.jpg" width="500" height="331" alt="Georg Greve of the FSF at the Plone Conference 2009" /></a></p>
<p><a href="http://fsfe.org/about/greve/greve.en.html">Georg Greve</a> from the <a href="http://fsfe.org">Free Software Foundation Europe</a> was talking about decision making. He started explaining how he moved from being a software developer to being a politician. </p>
<p>He takes the relicensing policy as an example and wonders how we reached a decision on it. What is a majority? How do we define the qualified majority needed? Here the Plone Foundation is one important piece. If we wouldn&#8217;t have the Plone Foundation it would come down to consensus. This works well in certain group but sometimes it also leads to shoutocracy where those people who shout the loudest go on doing so and the others at some point simply give up.</p>
<p>This is not applicable in many cases. E.g. in the <a href="http://plone.org/foundation">Plone Foundation</a> it is about copyright and you need unanimous agreement, you need everybody to say &#8220;Yes&#8221;. </p>
<h3>Copyright Law</h3>
<p>Copyright laws are man made by man made processes. So where does it come from?<br />
It starts with national levels which have some form of majority. In a bi/multilateral situation it is unanimity and in the united nations it&#8217;s consensus. </p>
<p>This sounds as if the bi/multilateral decisions are easier to make than the UN ones but that&#8217;s not necessarily true. There are a lot of rules involved and it might come down to harsher negotiations. It is also complicated with certain regimes where they technically have 100% of their people behind them.</p>
<p>But why do copyright laws happen? There are always some reasons behind those laws. In copyright it is about &#8220;fairness&#8221; politicians say. But what does &#8220;fair&#8221; mean? Also politicians are not expert in this field but they still need to make decisions. So they rely on other people to help with that decision.</p>
<p>He gives TRIPS (Trade Related aspects of Intellectual Property Rights) as an example. Originally it was driven by a very very targeted agenda by large US corporation, by a coalition of the willing. Only those who wanted the maximum went along. And now governments need to enforce something which was created by a group of coporations. He mentions the U.S. Special 301 list with the &#8220;naughty&#8221; countries who do not enforce that. </p>
<p>He mentions a <a href="http://www.news.ku.edu/2009/april/9/taxlobbying.shtml">study</a> (LAWRENCE) where 3 professors found out that lobby expenditures can receive you a 22,000 percent return on investment. This is for tax regulations, we don&#8217;t know about copyright lobbying. So it&#8217;s a worthwhile thing to do for companies.</p>
<p>On which side do you wanna be? What&#8217;s your perspective of this?</p>
<blockquote><p>&#8220;Politics is too serious a matter to be left to politicians&#8221; (Charles de Gaulle)</p></blockquote>
<p>The only way your voice is heard is that you need to be at that table where decisions are made. E.g. Plone is also affected by this. Like software patents, web standards, etc. </p>
<blockquote><p>&#8220;Those who are too smart to engage in politics aree punished by being governed by those who are dumber&#8221; (Plato)</p></blockquote>
<p>Inactivity is not an option. There are moments where we have to act!</p>
<h3>Governance?</h3>
<p>This is going in two directions, the external government between Plone and the outside world. But there is also the inside governance, how does the community work in itself?</p>
<p>Plone already decided to be a community instead of being a single vendor. He thinks that this is the more sustainable approach. The single-vendor approach is complicated because it&#8217;s only one company you don&#8217;t know the future about. </p>
<p>There are also other issues that come up. How do you address growth? This is one of the most challenging issue. How do we keep the substance strong as people get in and how do we ensure that our community remains able to make decisions. No one has found the answer to that yet though.</p>
<p>What about the structural &#8220;bottleneck bugs&#8221;? </p>
<p>There is things in the plumbing which you might want to redo at some point. KDE just has gone through such a process which was rather painful. Many projects encounter such situations. It is very hard to find volunteers to do that work. You also cannot find a customer to pay for all of this. There is no visual change.</p>
<p>How do we find ways to address those problems? He knows that the Plone community is thinking about this and he also helped the <a href="http://odba.org">Open Database Alliance</a> to find a solution for this. There the membership fees are done like this: 50% allocated by members, 20-30% allocated by board. Members can allocate fund for certain projects. All the members interested in this can pool their funds for this project. </p>
<p>In order for this to work you need the right choices. The ODBA has certain seats for users, developers etc. </p>
<h3>Food for thought</h3>
<ol>
<li><b>Get active</b>. Find ways to express your political agenda! Just being a small foundation of a few 100 people is not an excuse. You can make a difference! </li>
<li>The most important asset of Plone is YOU! In the end whether the PF is structured this or that way, the strategic choices still need to express what the community wants. He was positively impressed by what he experiences at the conference as he experiences a positive and lively community. Keep it that way!</li>
<li><b>Coordinate with your allies</b>, like FSF. Talk to them as often as you can. Find common priorities and build alliances on them.</li>
</ol>
<p><small>This live blogging report is without any guarantees of correctness and corrections are very welcome in the comments!</small></p>

    <!-- fb_sitestats code START -->
    <script src="http://feeds.feedburner.com/~s/mrtopfde?i=http://mrtopf.de/blog/plone/pc09-keynote-fsfe/" type="text/javascript" charset="utf-8"></script>
    <!-- fb_sitestats code END -->
    <img src="http://feeds.feedburner.com/~r/MrtopfdeEnglishPosts/~4/VzY5OuGmtnM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mrtopf.de/blog/plone/pc09-keynote-fsfe/feed/</wfw:commentRss>
		<feedburner:origLink>http://mrtopf.de/blog/plone/pc09-keynote-fsfe/</feedburner:origLink></item>
		<item>
		<title>Content Types with Dexterity (Plone Conference 2009)</title>
		<link>http://feedproxy.google.com/~r/MrtopfdeEnglishPosts/~3/QvL1wzV9s6Y/</link>
		<comments>http://mrtopf.de/blog/plone/pc09-dexterity/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 11:04:45 +0000</pubDate>
		<dc:creator>Christian Scholz</dc:creator>
		
		<category><![CDATA[Conferences and Meetings]]></category>

		<category><![CDATA[English Posts]]></category>

		<category><![CDATA[Planet Plone]]></category>

		<category><![CDATA[Plone]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://mrtopf.de/blog/plone/pc09-dexterity/</guid>
		<description><![CDATA[David Glick is introducing Dexterity to us, the new way of doing content types in Plone. It is aimed at non-developers and developers.
What is a content type?

A way to categorize the items in your site
It has a Schema which is a list of fields
It has a workflow/permissions
It has custom view templates
misc settings, like placeful restrictions, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fpc09-dexterity%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fpc09-dexterity%2F" height="61" width="51" /></a></div><p>David Glick is introducing Dexterity to us, the new way of doing content types in Plone. It is aimed at non-developers and developers.</p>
<h3>What is a content type?</h3>
<ul>
<li>A way to categorize the items in your site</li>
<li>It has a Schema which is a list of fields</li>
<li>It has a workflow/permissions</li>
<li>It has custom view templates</li>
<li>misc settings, like placeful restrictions, comments, searchability, per-type portlet assignments</li>
</ul>
<h3>Content Management Framework (CMF)</h3>
<ul>
<li>Underlying framework for registering types and assigning workflows</li>
<li>CMFDefault contains sample types which used to be used by Plone</li>
<li>It is not schema-based though</li>
</ul>
<h3>Archetypes</h3>
<ul>
<li>Provided schema-based form generation</li>
<li>Basis of Plone&#8217;s current default content types (ATCT)</li>
<li>Not going away anytime soon</li>
</ul>
<p>It has some ugly bits though.</p>
<h3>Dexterity</h3>
<p>Because of the drawbacks of AT, Martin Aspeli invented Dexterity.</p>
<p>Goals of Dexterity:</p>
<ul>
<li>Make filesystem content type development sane</li>
<li>Make through-the-web content type development sane</li>
<li>Make it possible to switch back and forth between the two</li>
</ul>
<p>The philosophy of Dexterity:</p>
<ul>
<li>Reuse over reinvention</li>
<li>Small over big (e.g. AT is quite big, it&#8217;s all in one package)</li>
<li>Natural interaction over excessive generality</li>
<li>Real code over generated code</li>
<li>Zope 3 over Zope 2</li>
<li>Automated testing</li>
</ul>
<h3>Installing dexterity</h3>
<p>It&#8217;s a normal python egg you add to your buildout (plone.app.dexterity). Right now only compatible with Plone 3 but work on Plone 4 is ongoing. Then of course you also have to install it inside your site. This will give you all the products and a Dexterity Control Panel.</p>
<h3>Using dexterity</h3>
<p>Inside the Control Panel you can create a new content type. Right after that you can add it to a plone site but it only has Title and Description. It also contains a default view which contains also lots of meta data fields.</p>
<p>With &#8220;Behaviours&#8221; you can extend the functionality of the content type like choosing a better shortname etc. This is different from subclassing and schema extension. Behaviours are stored in the FTI, they can be switched on and off. Examples are thumbnail generation, versioning, ratings, &#8220;name from title&#8221; etc.</p>
<p>In the FTI you now can disable the Metadata behaviour and enable the name from title-behaviour.</p>
<p>Now we need more fields. This can be done in the Schema tab. You can give it a title and a type. A field has lots of attributes you can edit then like if it&#8217;s required, if it&#8217;s read-only, the default value etc.</p>
<h3>Rapid Prototyping</h3>
<p>The Schema object in memory is directly modified, so changes take in effect immediately.</p>
<h3>Modifying a typey</h3>
<p>You can add, remove and rename fields through the web. But, values stored in exising instances will not be automatically removed or converted. So be careful.</p>
<h3>Some more desired refinements</h3>
<ul>
<li>Custom add permissions</li>
<li>Show the &#8220;bio&#8221; field in a separate fieldset</li>
</ul>
<p>These cannot be done throught the web (not yet). So lets switch to the filesystem.</p>
<h3>Filesystem roundtripping</h3>
<p>Schema editing internally is done in XML, stored in the FTI. This can be imported and exported via GenericSetup. It also is converted into a Zope 3 Schema which is then used to edit content.</p>
<p>He then goes through the files which are inside an example dexterity product structure. E.g. the __init__.py stuff is gone and now works all via GenericSetup. There every type will have it&#8217;s own XML file which is the generated one we talked about earlier.</p>
<p>He also shows the Zope 3 schema with custom fields you can use and some dependencies like five.grok and others.</p>
<p>To make that fieldset you then have to change the Zope3 Schema by adding a fieldset and adding a list of the field names to that set.</p>
<p>There are also more form directives he doesn&#8217;t want to get into like widget, omitted, mode, order_before, order_after etc. Additionally you can set permissions for individual fields.</p>
<h3>Custom view templates</h3>
<p>To register a custom view you write:</p>
<pre>from five import grok
class View(grok.View):
    grok.context(IPlonista)
    grok.require('zope2.View')</pre>
<p>Templates are found by convention (thanks to grok). So you need to put it into &#8220;plonista_templates/view.pt&#8221;. Inside the template you also can use direct attribute access as dexterity is intelligent enough to find that data.</p>
<h3>Enabling your filesystem content type</h3>
<p>You can then add the package to your buildout and rerun buildout.</p>
<p>After restarting Plone you can e.g. see the Bio field in a separate fieldset and you also see the custom view.</p>
<h3>The pieces</h3>
<ul>
<li>five.grok</li>
<li>plone.dexterity (core package, base content classes, FTI, default edit form and view)</li>
<li>plone.autoform (Dexterity renders widgets using z3c.form, autoform makes it possible for a form to be composed by schemas and form hints from different sources, like main schema + behaviour schemas)</li>
<li>plone.schemaeditor (used for UI for editing schema TTW. basically you can edit a Zope3 interface TTW. could be used seperately. IFieldFactory determines which fields are editable)</li>
<li>plone.supermodel (serializer translates Zope3 schema into XML. Parser translates an XML schema into a Zope 3 Schema. It&#8217;s easily extensible)</li>
<li>plone.directives.dexterity (grok directives for custom content classes)</li>
<li>plone.folder (orderable btree-based folder implementation, will also be the basis for AT-based folders in Plone 4)</li>
<li>plone.behaviour (a behaviour is a conditional adapter. In Dexterity, the condition is whether the behaviour is listed in the FTI for a type. ZCML directives for registering new behaviours)</li>
<li>plone.rfc822 (supports marshalling of Dexterity contet into RFC 822 format, used to support access via WebDAV)</li>
<li>plone.app.dexterity (pulls in everything you need. Standard behaviou: DC, related items. Provides the types control panel)</li>
</ul>
<h3>Status/Roadmap</h3>
<ul>
<li>Core functionality is pretty solid</li>
<li>Schema serialization</li>
<li>automatic form generation seems to be working will</li>
<li>portlet assignments works</li>
<li>content rule assignments works</li>
<li>Relations not working between AT and Dexterity content types in the same site</li>
<li>Widgets nor as rich as AT yet but better than formlib. We have autocomplete, browser-for-content, file/image upload</li>
<li>TTW schema editing works fine but needs more real-life use</li>
<li>Image &amp; File support (via plone.namedfile &amp; plone.formwidget.namedfile). No support for image scaling yet.</li>
<li>Rich Text field with text transform support</li>
<li>Select field support. no way to define vocabularies through the web yet.</li>
<li>WebDAV support is work in progress.</li>
<li>Versioning and staging is in progress</li>
<li>TTW behaviour creation would be cool but is not yet implemented.</li>
<li>Link integrity checks are not implemented yet</li>
</ul>
<h3>Upcoming releases</h3>
<p>Second alpha release was on Oct 12. First beta release coming soon.</p>
<p>It&#8217;s compatible with Plone3, Plone 4 compatibility is coming soon.</p>
<h3>Documentation</h3>
<p><a href="http://plone.org/products/dexterity/documentation/manual/developer-manual">Dexterity Developer Manual</a><br />
<a href="http://plone.org/products/dexterity/documentation/manual/behaviors/referencemanual-all-pages">Behaviours manual</a></p>
<h3>Getting involved</h3>
<p><a href="http://code.google.com/p/dexterity">Code on Google</a><br />
<a href="http://groups.google.com/group/dexterity-development">Google Group</a></p>

    <!-- fb_sitestats code START -->
    <script src="http://feeds.feedburner.com/~s/mrtopfde?i=http://mrtopf.de/blog/plone/pc09-dexterity/" type="text/javascript" charset="utf-8"></script>
    <!-- fb_sitestats code END -->
    <img src="http://feeds.feedburner.com/~r/MrtopfdeEnglishPosts/~4/QvL1wzV9s6Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mrtopf.de/blog/plone/pc09-dexterity/feed/</wfw:commentRss>
		<feedburner:origLink>http://mrtopf.de/blog/plone/pc09-dexterity/</feedburner:origLink></item>
		<item>
		<title>Lightning Talk: Godefroid Chapelle about buildout</title>
		<link>http://feedproxy.google.com/~r/MrtopfdeEnglishPosts/~3/5yO454EVXGA/</link>
		<comments>http://mrtopf.de/blog/plone/lightning-talk-godefroid-chapelle-about-buildout/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 17:15:44 +0000</pubDate>
		<dc:creator>Christian Scholz</dc:creator>
		
		<category><![CDATA[Conferences and Meetings]]></category>

		<category><![CDATA[English Posts]]></category>

		<category><![CDATA[Planet Plone]]></category>

		<category><![CDATA[Plone]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[budapest]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[ploneconf2009]]></category>

		<category><![CDATA[talks]]></category>

		<guid isPermaLink="false">http://mrtopf.de/blog/plone/lightning-talk-godefroid-chapelle-about-buildout/</guid>
		<description><![CDATA[What&#8217;s new in the latest release of zc.buildout?

Extension build by gocept, you can use buildout really offline. It tells you if you cannot download something in offline mode but still uses download-caches etc. if you configure it.
&#8220;annotate&#8221; command will give you where all the values are coming from when having a very extended configuration. It [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Flightning-talk-godefroid-chapelle-about-buildout%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Flightning-talk-godefroid-chapelle-about-buildout%2F" height="61" width="51" /></a></div><p>What&#8217;s new in the latest release of zc.buildout?</p>
<ol>
<li>Extension build by gocept, you can use buildout really offline. It tells you if you cannot download something in offline mode but still uses download-caches etc. if you configure it.</li>
<li>&#8220;annotate&#8221; command will give you where all the values are coming from when having a very extended configuration. It also shows all the places from where the configuration is coming from and which overwrites which. He wants feedback on that.</li>
</ol>

    <!-- fb_sitestats code START -->
    <script src="http://feeds.feedburner.com/~s/mrtopfde?i=http://mrtopf.de/blog/plone/lightning-talk-godefroid-chapelle-about-buildout/" type="text/javascript" charset="utf-8"></script>
    <!-- fb_sitestats code END -->
    <img src="http://feeds.feedburner.com/~r/MrtopfdeEnglishPosts/~4/5yO454EVXGA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mrtopf.de/blog/plone/lightning-talk-godefroid-chapelle-about-buildout/feed/</wfw:commentRss>
		<feedburner:origLink>http://mrtopf.de/blog/plone/lightning-talk-godefroid-chapelle-about-buildout/</feedburner:origLink></item>
		<item>
		<title>unloading plone - approaching scalability (Plone conference 2009)</title>
		<link>http://feedproxy.google.com/~r/MrtopfdeEnglishPosts/~3/EZ8FVoLB8-0/</link>
		<comments>http://mrtopf.de/blog/plone/pc09-scaling-plone/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 16:33:25 +0000</pubDate>
		<dc:creator>Christian Scholz</dc:creator>
		
		<category><![CDATA[Conferences and Meetings]]></category>

		<category><![CDATA[English Posts]]></category>

		<category><![CDATA[Planet Plone]]></category>

		<category><![CDATA[Plone]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[budapest]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[ploneconf2009]]></category>

		<category><![CDATA[talks]]></category>

		<guid isPermaLink="false">http://mrtopf.de/blog/plone/pc09-scaling-plone/</guid>
		<description><![CDATA[Elizabeth Leddy is talking about scalability issues with Plone and how to approach scalability: Tools, Tips and techniques for making Plone scale.
This talk is not about just installing something like CacheFu, it&#8217;s more about specialized situations where you cannot cache, have SSL, are contantly logged in and so on.
&#8220;A responsive, scalable Plone setup has little [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fpc09-scaling-plone%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fpc09-scaling-plone%2F" height="61" width="51" /></a></div><p><a title="Elizabeth Leddy by MrTopf, on Flickr" href="http://www.flickr.com/photos/mrtopf/4053364442/"><img class="alignleft" src="http://farm3.static.flickr.com/2759/4053364442_931e676045.jpg" alt="Elizabeth Leddy" width="281" height="500" /></a>Elizabeth Leddy is talking about scalability issues with Plone and how to approach scalability: Tools, Tips and techniques for making Plone scale.</p>
<p>This talk is not about just installing something like CacheFu, it&#8217;s more about specialized situations where you cannot cache, have SSL, are contantly logged in and so on.</p>
<blockquote><p>&#8220;A responsive, scalable Plone setup has little to do with optimizing code&#8221;</p></blockquote>
<p>We also need to know that Plone is not Drupal, so we do not get the same RPS. That means that we need talent and hardware to get Plone to scale. She also says that Plone people are kinda special, compared to PHP people.</p>
<h3>Measure!</h3>
<p>The first important thing is to measure what really is slow. So setup your tools to do measuring.</p>
<p>Tools you can use:</p>
<ul>
<li><a href="http://munin.projects.linpro.no/">munin</a><br />
<a href="http://mmonit.com/monit/">monit</a> (or supervisor)<br />
<a href="http://ganglia.sourceforge.net/">ganglia</a><br />
Zope Health Watcher (monitor response time!)</li>
</ul>
<h3>Whale Watchers</h3>
<p>You can also use a whale watcher which is triggered in the abnormality case and reads all statistics it gets.</p>
<h3>Simple(r) error reporting</h3>
<p>It&#8217;s good to have some sort of escalation. Like escalate with email, use Google Analytics for Timeouts, 4xx and 5xx pages.</p>
<h3>4 stages of system grief</h3>
<p>Denial - Anger - Bargaining - Acceptance.</p>
<p>She recommends sharding your ZEO as much as you can which means splitting the data in smaller databases. This makes moving databases around easier. You can also pack faster, backup faster. It also helps reducing the single point of failure you have with ZEO.</p>
<h3>How much hardware</h3>
<p>First see what components you need and how they need to be distributed on different boxes and how these boxes need to look like. Also check the tradeoff between RAM, CPU and Disk space.</p>
<p>With Zope and ZEO on different computers you also have network latency. With a shard ZEO it also makes sense to put the ZEO on the same computer as the Zope. But not everybody can do this.</p>
<p>She then explained a munin graph of the memory usage explaining the badness of Swap. You want it shared between cache and apps. With that graph you can also find out how many Zope instances you can use on one box.</p>
<h3>How many Zopes should I have?</h3>
<ul>
<li>50% avg. util</li>
<li>2 zopes/CPU</li>
<li>api/async instances</li>
</ul>
<p>(she looked at Mongrel and what they found out).</p>
<p>You add more hardware when in any point in time the average is more than 50% utility. 2 Zopes/CPU is a good way to start. Question: How many threads per Zope instances. Answer: it depends. She uses 1 as the OS is way better at context switching than Zope is. But be careful with asynchronous requests.</p>
<h3>What does &#8220;asynchronous&#8221; mean?</h3>
<p>A lot of requests in Zope take a very long time (like 2 minutes). If you can take out some time out of that, do that. Like if you have to collect data from somewhere else, do it later, pickle it up and do it separately. (Pickle, Drop, Pickup, Process, Callback).</p>
<h3>use httpd</h3>
<p>Serve static content from a static web server to unload plone, provide faster response time to initial requests, and enable simpler caching strategies. Esp. for non-existing images plone takes faaaar longer than an apache (404 that is).</p>
<p>(you might want to rewrite the access to /portal_skins/&#8230;)</p>
<h3>CSS and sprites</h3>
<p>use CSS sprites! less bandwidth with less response time and onle 1 request.</p>
<h3>HAProxy</h3>
<p>handles graceful reloads, backend health, distribution algorithms, warmup time, preserve keepalive, web based stats.</p>
<p>HAProxy esp. knows if a request is finished on one instance and then gives it the next request instead of going round-robin.</p>
<p>It also knows about Zope startup time and does not send it requests during that.</p>
<p>Find it <a href="http://haproxy.1wt.eu/">here</a>.</p>
<h3>ZEO</h3>
<p>It&#8217;s perfect for OO access but has problems with other data access paradigms. For this use something else.</p>
<p>If python &lt;2.6: socket.settimeout(2)</p>
<p>If you know you have a long running request, set it higher and set it back.</p>
<h3>Restarting</h3>
<p>Restarting is not a sin. Let Zope eat as much as it wants but restart it regularly. Also pack your ZEOs frequently. Do it for your system, not for you.</p>
<h3>Backups</h3>
<p>First: Get good disks and your ZEO will fly.</p>
<ul>
<li>Use repozo for backups (and look out for timing, don&#8217;t do it during busy times).</li>
<li>Use chunked rsync for backing up regular files (like your Plone install).</li>
<li>Watch the disk</li>
</ul>
<h3>Summary</h3>
<ul>
<li>Always setup system and error monitoring first</li>
<li>choose the right softzware for YOUR hardware</li>
<li>use as many zopes as possible but no more</li>
<li>do it like a flickr engineer (async)</li>
<li>Don&#8217;t make zope handle unnecessary requests</li>
<li>Accept that zeo usually isn&#8217;t the only db in a scaled solution</li>
<li>Never understimate the importance of a proper disk-RAM partnership.</li>
</ul>

    <!-- fb_sitestats code START -->
    <script src="http://feeds.feedburner.com/~s/mrtopfde?i=http://mrtopf.de/blog/plone/pc09-scaling-plone/" type="text/javascript" charset="utf-8"></script>
    <!-- fb_sitestats code END -->
    <img src="http://feeds.feedburner.com/~r/MrtopfdeEnglishPosts/~4/EZ8FVoLB8-0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mrtopf.de/blog/plone/pc09-scaling-plone/feed/</wfw:commentRss>
		<feedburner:origLink>http://mrtopf.de/blog/plone/pc09-scaling-plone/</feedburner:origLink></item>
		<item>
		<title>Lessons learned from other frameworks (Plone Conference 2009)</title>
		<link>http://feedproxy.google.com/~r/MrtopfdeEnglishPosts/~3/aMsTS6lcivE/</link>
		<comments>http://mrtopf.de/blog/plone/pc09-framework-lessons/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 14:18:40 +0000</pubDate>
		<dc:creator>Christian Scholz</dc:creator>
		
		<category><![CDATA[Conferences and Meetings]]></category>

		<category><![CDATA[English Posts]]></category>

		<category><![CDATA[Planet Plone]]></category>

		<category><![CDATA[Plone]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[bfg]]></category>

		<category><![CDATA[budapest]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[frameworks]]></category>

		<category><![CDATA[grok]]></category>

		<category><![CDATA[ploneconf2009]]></category>

		<category><![CDATA[pylons]]></category>

		<category><![CDATA[repoze]]></category>

		<category><![CDATA[talks]]></category>

		<category><![CDATA[wiggy]]></category>

		<category><![CDATA[zodb]]></category>

		<category><![CDATA[Zope]]></category>

		<category><![CDATA[ztk]]></category>

		<guid isPermaLink="false">http://mrtopf.de/blog/plone/pc09-framework-lessons/</guid>
		<description><![CDATA[Wichert Akkerman was talking about lessons he learned from other frameworks. He once was looking at other frameworks and thistalk is about a view for developers. First of all: Plone is an application, not a framework but still we build stuff on top and thus it&#8217;s a valid comparison to make.

Zope Toolkit (Zope 3 reborn). [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fpc09-framework-lessons%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fpc09-framework-lessons%2F" height="61" width="51" /></a></div><p>Wichert Akkerman was talking about lessons he learned from other frameworks. He once was looking at other frameworks and thistalk is about a view for developers. First of all: Plone is an application, not a framework but still we build stuff on top and thus it&#8217;s a valid comparison to make.</p>
<ul>
<li>Zope Toolkit (Zope 3 reborn). Nobody knows what it is and is changing all the time. It has not been released yet. It&#8217;s the basis of several other frameworks.</li>
<li>Grok (A Smashing Web Framework). Is an attempt to make Zope or the Zope Toolkit easier.</li>
<li>BFG is a &#8220;pay only for what you eat&#8221; Python Web framework. Has the most released compared to the other, about 76 releases in a year.</li>
<li>Pylons is lightweight and little.</li>
<li>Django and Plone are also there, where the latter is called &#8220;Plone Portal Toolkit&#8221; by him</li>
</ul>
<h3>Templates</h3>
<p>Every framework has one template engine. ZPT sometimes are smarter than you though. E.g. try to put a style element in your page and you have to do lots of &#8220;&lt;tal:pain replace=&#8221;structure string:&amp;lt;&#8221;&gt;&#8221;. So you have to do all sorts of tricks to get it done and this is not helpful. You want to do this:</p>
<pre>
&lt;style type="text/css"&gt;
#nav li#home {
   background: url(${logo}) no-repeat;
}
&lt;/style&gt;
</pre>
<p>Another thing where Plone differs from all the others is that Plone already has templates. In others you start with nearly nothing. No standard views are there. No templates to customize. </p>
<p>There are also tools like XDV or deliverance which he thinks is still not delivering though. E.g. using breadcrumbs is tedious and you can do it with XDV using custom XSLT but nobody really will do this (or can do this). But you can customize breadcrumbs in Plone but then you have again 2 fields where you have to change stuff.</p>
<p>So Deliverance is interesting but it has it&#8217;s limits.</p>
<h3>Authentication and Authorization</h3>
<p>Plone does all that for you, it has the PAS. You get all that for free. In other toolkits you have e.g. PAU (in Zope Toolkit) which is supposed to be a more flexible way than PAU but in fact is harder to understand.<br />
In BFG it&#8217;s far simpler. You can still cover all the usecase but you might need to write a little bit of Python. Compared to that PAU is far too complex to understand.</p>
<p>TG2 and Pylons both use repoze.who. It turns out though that repoze.who does the same mistake as PAS and PAU as there is too much policy in the code. In the end it restricts you.</p>
<h3>Forms</h3>
<p>In Plone you have many ways to do forms. You have CMFFormController, there is formlib, z3c.form, ATCT and dexterity. There are 5 different ways to do a form in Plone and this is a bit too many. All are also doing the same mistakes. You define data in the form, you have validating, the marshalling, the generation of the form, they are all built into one package. The result is something that is very very complex.</p>
<p>But if you split them up it becomes simpler and you can use them separately. </p>
<p>Pylons use formencode and you can use validator decorators on controllers to do the validation (@validate(schema=&#8230;)). But it&#8217;s not generating a form etc. It&#8217;s just validating. Pylons additionally can add error messages into the HTML.</p>
<p>wiggy also experimented a bit with formish which also has separate packages for the individual functions. </p>
<p>There is no problem to split it into different packages, you might need to write a bit of code but that&#8217;s ok and so much simpler in the end.</p>
<h3>Data</h3>
<p>In Zope you are usually ZODB based. BFG OTOH can do both, ZODB and SQL as not storage layer is included. Pylons uses SQLAlchemy but it&#8217;s very easy to switch to something else, e.g. CouchDB. The big difference there is that if you look at the Zope based options, then you always have a root object. That way you can have multiple sites in the same storage but you also always have to use the ZODB. This makes it difficult in case your data is more relational. Django has it&#8217;s own ORM.</p>
<p>In Plone you have again lots of options: Archetypes, Devilstick, Dexterity, &#8230; There still is no good story for a SQL based storage. It&#8217;s very hard to do although the storage itself is not the problem.</p>
<h3>Configuration</h3>
<p>Plone/Zope usually used ZCML. It was intended to configure components together. But it&#8217;s gaining some use for general configuration. There also is the zope.conf file which was used for everything but it somehow has been forgotten. Then you additionally you have all the settings stored inside the ZODB which makes it sometimes harder to deploy the site (e.g. file paths might be a problem). This is not done by any other framework.</p>
<p>BFG is using ZCML but only for component wiring up. The rest is done in an .ini-file, like Pylons, TG2 etc. Django uses a python settings file. This is also the plan for Plone but it&#8217;s a long way to go.</p>
<h3>URLs</h3>
<p>In Zope based sites everything is based on traversals. The Zope publisher is iterating over the path and maps it to objects. This works well with the ZODB as it&#8217;s a hierarchical database. There are some exceptions though for URLs which do not map to a ZODB object (&#8221;/folder&#8221;,&#8221;/folder/@@view&#8221;,&#8221;/++resource++package/public.css&#8221;). The traversal in Zope is highly complex. There are no API to generate URLs for e.g. views. </p>
<p>The other frameworks have usually a much simpler option, using Routes. Here you map regular expressions for URLs to a bit of code. You can then also have different names for the same bit of code, e.g. for different languages. You cannot do that easily in Zope. With routes you can also reverse engineer URLs.</p>
<p>The downside is if you have hierarchical content like in Zope or Plone. So it&#8217;s a tradeoff. In BFG you can use both at the same time. For Zope there are also some experiments with routes (me.grok.trails).<br />
Having the liberty to do both is very handy.</p>
<h3>Documentation</h3>
<p>&#8220;Always a fun one&#8221;.</p>
<p>Zope Toolkit has no documentation at all. It has meta documentation, like how to make releases which hasn&#8217;t happen yet, what should be included, coding styleguides etc. That makes it a bit hard to work it. The only thing which might help is philikon&#8217;s book which is 3 years old.</p>
<p>Grok is well documented, has lots of tutorials but only partial Reference. It&#8217;s also not sure how it&#8217;s versioned. But still you might need the Zope Toolkit at some point with it and then you are back to no documentation. </p>
<p>BFG has everything. It has tutorial, fully versioned documentation. Every release becomes a new set of documentation. </p>
<p>Pylons is also good documented but it&#8217;s not versioned. They also use a lot of addon packages which are documented separately. It needs to be seen if documentation is kept in sync and keeps relevant.</p>
<p>django has again good documentation, it has tutorials, reference documentation and it&#8217;s versioned. It&#8217;s very code oriented. </p>
<p>Plone is catching up, the documentation team is doing a tremendous job. It has tutorial but only partial reference documentation. It&#8217;s not versioned though. It even has more documentation for e.g. buildout than buildout itself.</p>
<h3>What&#8217;s important?</h3>
<p>The most important thing is that you feel &#8220;in control&#8221; and you actually are. You want good documentation and not missing or misleading docs. </p>
<p>&#8220;Python is an excellent choice but to be fair, if you are only doing a one-off project I think you might want to use a simpler framework than Grok for your portal.&#8221; (Sebastian Ware on the grok list)</p>
<h3>Lessons</h3>
<ul>
<li>Modularity can confuse (Django is very integrated and this might be good as there is only one choice. With Plone you might need to learn too much. At least at the documentation experience level it&#8217;s important).</li>
<li>Explicit is simpler than a framework (nobody understand how to change Plone portlets or the navtree although it aims to be very flexible.. But writing code might be simpler).</li>
<li>Version documentation</li>
<li>Less features, not more</li>
<li>Sugarcoating is not a solution (lesson for Plone and Grok, at some point you need to look below that)</li>
<li></li>
</ul>

    <!-- fb_sitestats code START -->
    <script src="http://feeds.feedburner.com/~s/mrtopfde?i=http://mrtopf.de/blog/plone/pc09-framework-lessons/" type="text/javascript" charset="utf-8"></script>
    <!-- fb_sitestats code END -->
    <img src="http://feeds.feedburner.com/~r/MrtopfdeEnglishPosts/~4/aMsTS6lcivE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mrtopf.de/blog/plone/pc09-framework-lessons/feed/</wfw:commentRss>
		<feedburner:origLink>http://mrtopf.de/blog/plone/pc09-framework-lessons/</feedburner:origLink></item>
		<item>
		<title>KARL: knowledge management &amp; collaboration for NGOs (Plone Conference 2009)</title>
		<link>http://feedproxy.google.com/~r/MrtopfdeEnglishPosts/~3/Pk_DVvw9Myo/</link>
		<comments>http://mrtopf.de/blog/plone/pc2009-karl/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 11:24:11 +0000</pubDate>
		<dc:creator>Christian Scholz</dc:creator>
		
		<category><![CDATA[Conferences and Meetings]]></category>

		<category><![CDATA[English Posts]]></category>

		<category><![CDATA[Planet Plone]]></category>

		<category><![CDATA[Plone]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[budapest]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[ploneconf2009]]></category>

		<category><![CDATA[talks]]></category>

		<guid isPermaLink="false">http://mrtopf.de/blog/?p=1365</guid>
		<description><![CDATA[Tom Moroz, Chris Rossi and Calvin Hendryx-Parker have been talking about KARL.
Tom Moroz of the Open Society Institute (OSI) starts on a bit of background on what KARL is. 
OSI has 7 &#8216;core&#8217; offices in US and Europe. It has national foundations in 32 countries. They have a program and grant giving activity in over [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fpc2009-karl%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fpc2009-karl%2F" height="61" width="51" /></a></div><p>Tom Moroz, Chris Rossi and Calvin Hendryx-Parker have been talking about KARL.</p>
<p>Tom Moroz of the Open Society Institute (OSI) starts on a bit of background on what KARL is. </p>
<p>OSI has 7 &#8216;core&#8217; offices in US and Europe. It has national foundations in 32 countries. They have a program and grant giving activity in over 60 countries and &gt;20 Program Areas / Initiatives.</p>
<p>KARL was begun in August 2006, in May 2007 KARL v1.0 beta release, January 2008 an official launch, November 2008 KARL v2.0, June 2009 KARL v3.0. OSI first developed it for their own needs but later saw that many NGOs have the same problems so they tried to open it up for their use cases as well.</p>
<p>He then showed some of the features of KARL.</p>
<p>Chris Rossi then took over and explained a bit about the technical background. KARL moved away from Plone to use BFG and he tries to explain the reasoning:</p>
<ul>
<li>Plone is great at what it does. Content Management in a nice, general way. This is the sweet spot of Plone.</li>
<li>What do you do when your project is outside of the sweet spot?</li>
<li>Further you need to exted Plone, the more you fight the framework. Result is a high developer frustration.</li>
<li>Using BFG, they were able to maintain programming paradigms familiar to Zope/Plone developers without using/fighting Plone.</li>
</ul>
<p>The move from KARL 1 to KARL 2:</p>
<ul>
<li>Entirely new UI built on top of Plone &#8212; very different from Plone&#8217;s UI.</li>
<li>Much framework fighting</li>
<li>Much integration with non-Plone technologies, aka Frankenplone. </li>
<li>Because of the Frankenplone infrastructure they ended up with bad performance and poor reliability</li>
<li>It also resulted in difficult maintenance</li>
<li>Difficult to provide something reasonable for non-OSI deployments.</li>
</ul>
<p>What are the alternatives to Plone?</p>
<ul>
<li>Zope2, primarily used by Plone, time tested.</li>
<li>Zope3, big, many dependencies, app developers encouraged to use CA.</li>
<li>Grok, an attempt to make Zope3 easier to use (but it&#8217;s still Zope3 and still big and complicated).</li>
<li>Django, nice, but full stack like Zope2 (you need to use their answers for all you do).</li>
<li>Pylons/TG2, also nice but geared towards RDB/URL dispatch</li>
<li>Several others, little traction, not Zope like.</li>
</ul>
<p>With BFG:</p>
<ul>
<li>It is in the repoze namespace, but is not really repoze.</li>
<li>Like Zope, but much smaller, leaner</li>
<li>Speed and simplicity: &#8220;Pay only for what you eat&#8221;. If you don&#8217;t need it, it&#8217;s not there. If you do need it, it is easy to put it in.</li>
<li>Documentation: An undocumented feature or API is a bug.</li>
<li>Testing: 100% test coverage. Untested code is broken code.</li>
<li>Collaborative culture: Using and promoting non-Zope technologies when they are useful.</li>
<li>Easy to adopt for Zope developers. (Maybe non-Zope developers as well.)</li>
</ul>
<p>KARL technologies</p>
<p>Python: WSGI, WebOB, Paste Deploy, virtualenv, eggs, repoze.who, Supervisor, TinyMCE, jQuery, nose, twill, mod_wsgi.</p>
<p>Zope: ZPT (Chameleon), traversal, views, security, ZODB/ZEO, catalog, component architecture, buildout</p>
<p>Facts:</p>
<ul>
<li>50-150 rps per core, fully dynamic and personalized, no caching</li>
<li>50,000+ lines of code (including tests)</li>
<li>1,500+ unit tests, 8-10 seconds</li>
<li>startup time: &lt;2 seconds</li>
<li>946 MB ZODB +11.8 GB blobs, 3,700 users, 736 communities, 90k documents</li>
<li>&lt;600MB RAM</li>
</ul>
<p>KARL project</p>
<ul>
<li>13 committers, 8 organizations</li>
<li>LaunchPad: 708 total issues, 35 milestones, 59 UAT, 5 evaluations, 3 migrations</li>
<li>Zero open bugs</li>
<li>Hosting by Six Feet Up</li>
<li>Web Site: <a href="http://www.karlproject.org">www.karlproject.org</a></li>
</ul>
<p>Then Calvin talks about hosting which he started with KARL 2. He explains what the difference is and how deployment now is much easier because the framework is smaller.</p>
<p>They are running it on Xen and CentOS. It&#8217;s fully managed and monitored. Of course you can also run KARL yourself on your server.</p>
<p>KARL 3.0 migration</p>
<ul>
<li>Plone-based KARL 2 to the BFG-based KARL 3</li>
<li>4.7 GB of data and 62,000 pieces of content</li>
<li>Created dummy content to baseline and test the migration process</li>
<li>Using a GenericSetup to export XML content and built a one time content importer for KARL 3</li>
<li>Migrated users group information stored in Postgres to KARL 3</li>
<li>Both systems were ZODB backed, but the newer KARL system included BLOB support</li>
<li>Other pilots were migrated a few weeks later</li>
</ul>
<p>Recent &amp; Future KARL Hosting</p>
<ul>
<li>Moved to new datacenter in Q3 2009 (more robust)</li>
<li>Disaster Recovery Support Q1 2010</li>
<li>Online Realtime Backup Q1 2010</li>
</ul>
<p>He also mentioned EC2 but there you are dependant on Amazon&#8217;s infrastructure.</p>
<p>The path forward:</p>
<ul>
<li>On-going software development</li>
<li>Development of governance model to make available to both large and small organizations</li>
<li>The importance of &#8220;soft&#8221; technology and methodologies</li>
</ul>

    <!-- fb_sitestats code START -->
    <script src="http://feeds.feedburner.com/~s/mrtopfde?i=http://mrtopf.de/blog/plone/pc2009-karl/" type="text/javascript" charset="utf-8"></script>
    <!-- fb_sitestats code END -->
    <img src="http://feeds.feedburner.com/~r/MrtopfdeEnglishPosts/~4/Pk_DVvw9Myo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mrtopf.de/blog/plone/pc2009-karl/feed/</wfw:commentRss>
		<feedburner:origLink>http://mrtopf.de/blog/plone/pc2009-karl/</feedburner:origLink></item>
		<item>
		<title>Plone Conference Live Streams</title>
		<link>http://feedproxy.google.com/~r/MrtopfdeEnglishPosts/~3/bqkryjJ_2JE/</link>
		<comments>http://mrtopf.de/blog/plone/plone-conference-live-streams/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 10:16:45 +0000</pubDate>
		<dc:creator>Christian Scholz</dc:creator>
		
		<category><![CDATA[Conferences and Meetings]]></category>

		<category><![CDATA[English Posts]]></category>

		<category><![CDATA[Planet Plone]]></category>

		<category><![CDATA[Plone]]></category>

		<category><![CDATA[budapest]]></category>

		<category><![CDATA[livestream]]></category>

		<category><![CDATA[ploneconf]]></category>

		<category><![CDATA[ploneconf2009]]></category>

		<guid isPermaLink="false">http://mrtopf.de/blog/?p=1359</guid>
		<description><![CDATA[As the site is down, here are the streams:
Main Hall
Live TV : Ustream
Eötvös Room
Live video chat by Ustream
Than Room
Live video chat by Ustream
Ortvay Room
Streaming .TV shows by Ustream
Link

Main Hall
Eötvös Room
Than Room
Ortvay Room


    
    
    
    ]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fplone-conference-live-streams%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fplone%2Fplone-conference-live-streams%2F" height="61" width="51" /></a></div><p>As the site is down, here are the streams:</p>
<h3>Main Hall</h3>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="320" id="utv171904"><param name="flashvars" value="autoplay=false&amp;brand=embed&amp;cid=1791585"/><param name="allowfullscreen" value="true"/><param name="allowscriptaccess" value="always"/><param name="movie" value="http://www.ustream.tv/flash/live/1/1791585"/><embed flashvars="autoplay=false&amp;brand=embed&amp;cid=1791585" width="400" height="320" allowfullscreen="true" allowscriptaccess="always" id="utv171904" name="utv_n_119852" src="http://www.ustream.tv/flash/live/1/1791585" type="application/x-shockwave-flash" /></object><a href="http://www.ustream.tv/live" style="padding: 2px 0px 4px; width: 400px; background: #ffffff; display: block; color: #000000; font-weight: normal; font-size: 10px; text-decoration: underline; text-align: center;" target="_blank">Live TV : Ustream</a></p>
<h3>Eötvös Room</h3>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="320" id="utv376566"><param name="flashvars" value="autoplay=false&amp;brand=embed&amp;cid=1792061"/><param name="allowfullscreen" value="true"/><param name="allowscriptaccess" value="always"/><param name="movie" value="http://www.ustream.tv/flash/live/1/1792061"/><embed flashvars="autoplay=false&amp;brand=embed&amp;cid=1792061" width="400" height="320" allowfullscreen="true" allowscriptaccess="always" id="utv376566" name="utv_n_51323" src="http://www.ustream.tv/flash/live/1/1792061" type="application/x-shockwave-flash" /></object><a href="http://www.ustream.tv/" style="padding: 2px 0px 4px; width: 400px; background: #ffffff; display: block; color: #000000; font-weight: normal; font-size: 10px; text-decoration: underline; text-align: center;" target="_blank">Live video chat by Ustream</a></p>
<h3>Than Room</h3>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="320" id="utv831827"><param name="flashvars" value="autoplay=false&amp;brand=embed&amp;cid=1792067"/><param name="allowfullscreen" value="true"/><param name="allowscriptaccess" value="always"/><param name="movie" value="http://www.ustream.tv/flash/live/1/1792067"/><embed flashvars="autoplay=false&amp;brand=embed&amp;cid=1792067" width="400" height="320" allowfullscreen="true" allowscriptaccess="always" id="utv831827" name="utv_n_426948" src="http://www.ustream.tv/flash/live/1/1792067" type="application/x-shockwave-flash" /></object><a href="http://www.ustream.tv/" style="padding: 2px 0px 4px; width: 400px; background: #ffffff; display: block; color: #000000; font-weight: normal; font-size: 10px; text-decoration: underline; text-align: center;" target="_blank">Live video chat by Ustream</a></p>
<h3>Ortvay Room</h3>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="320" id="utv496496"><param name="flashvars" value="autoplay=false&amp;brand=embed&amp;cid=1792070"/><param name="allowfullscreen" value="true"/><param name="allowscriptaccess" value="always"/><param name="movie" value="http://www.ustream.tv/flash/live/1/1792070"/><embed flashvars="autoplay=false&amp;brand=embed&amp;cid=1792070" width="400" height="320" allowfullscreen="true" allowscriptaccess="always" id="utv496496" name="utv_n_998750" src="http://www.ustream.tv/flash/live/1/1792070" type="application/x-shockwave-flash" /></object><a href="http://www.ustream.tv/" style="padding: 2px 0px 4px; width: 400px; background: #ffffff; display: block; color: #000000; font-weight: normal; font-size: 10px; text-decoration: underline; text-align: center;" target="_blank">Streaming .TV shows by Ustream</a></p>
<h3>Link</h3>
<ul>
<li><a href="http://www.ustream.tv/channel/main-hall">Main Hall</a></li>
<li><a href="http://www.ustream.tv/channel/eötvös-room">Eötvös Room</a></li>
<li><a href="http://www.ustream.tv/channel/than-room">Than Room</a></li>
<li><a href="http://www.ustream.tv/channel/ortvay-room">Ortvay Room</a></li>
</ul>

    <!-- fb_sitestats code START -->
    <script src="http://feeds.feedburner.com/~s/mrtopfde?i=http://mrtopf.de/blog/plone/plone-conference-live-streams/" type="text/javascript" charset="utf-8"></script>
    <!-- fb_sitestats code END -->
    <img src="http://feeds.feedburner.com/~r/MrtopfdeEnglishPosts/~4/bqkryjJ_2JE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mrtopf.de/blog/plone/plone-conference-live-streams/feed/</wfw:commentRss>
		<enclosure url="http://www.ustream.tv/flash/live/1/1791585" length="175664" type="application/x-shockwave-flash" /><media:content url="http://www.ustream.tv/flash/live/1/1791585" fileSize="175664" type="application/x-shockwave-flash" /><feedburner:origLink>http://mrtopf.de/blog/plone/plone-conference-live-streams/</feedburner:origLink></item>
		<item>
		<title>Introducing WebFinger and a python client</title>
		<link>http://feedproxy.google.com/~r/MrtopfdeEnglishPosts/~3/aI96Hkv3qwM/</link>
		<comments>http://mrtopf.de/blog/en/introducing-webfinger-and-a-python-client/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 15:39:56 +0000</pubDate>
		<dc:creator>Christian Scholz</dc:creator>
		
		<category><![CDATA[Data Portability]]></category>

		<category><![CDATA[English Posts]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[acct]]></category>

		<category><![CDATA[dataportability]]></category>

		<category><![CDATA[discovery]]></category>

		<category><![CDATA[diso]]></category>

		<category><![CDATA[email]]></category>

		<category><![CDATA[lrdd]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[openweb]]></category>

		<category><![CDATA[pydataportability]]></category>

		<category><![CDATA[url]]></category>

		<category><![CDATA[webfinger]]></category>

		<category><![CDATA[xrd]]></category>

		<guid isPermaLink="false">http://mrtopf.de/blog/?p=1331</guid>
		<description><![CDATA[One repeatedly upcoming problem is what identifier a normal user would use for identifying his or her own user account. One approach is apparently OpenID in which case it is a HTTP URL. For the one or other reason though OpenID has not the success among non-geeks as one would wish for. This led to [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fen%2Fintroducing-webfinger-and-a-python-client%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmrtopf.de%2Fblog%2Fen%2Fintroducing-webfinger-and-a-python-client%2F" height="61" width="51" /></a></div><p><img class="alignleft size-medium wp-image-1334" title="pydpwebfinger" src="http://mrtopf.de/blog/wp-content/uploads/2009/10/pydpwebfinger-300x108.png" alt="pydpwebfinger" width="300" height="108" />One repeatedly upcoming problem is what identifier a normal user would use for identifying his or her own user account. One approach is apparently OpenID in which case it is a HTTP URL. For the one or other reason though OpenID has not the success among non-geeks as one would wish for. This led to some people thinking about different ways for an identifier scheme to identify yourself on the web. And the thinking was: &#8220;People do think of their email addresses as personal identifier, so why not use those?&#8221;.</p>
<p>One result of this was the <strong>E</strong>-mail-<strong>A</strong>ddress-to-<strong>U</strong>RL-<strong>T</strong>ranslation, in short <a href="http://eaut.org/">EAUT</a>. The idea was to these esp. to OpenIDs.</p>
<p>Now another idea is born at Google: WebFinger. It&#8217;s goal is a bit more than just providing an easy to understand identifier in that it also aims to retrieving information about the user, like the <a href="http://en.wikipedia.org/wiki/Finger_protocol">finger protocol</a> did back in the days. It&#8217;s chaining together some upcoming protocols, like <a href="http://www.oasis-open.org/committees/download.php/34072/xrd-1.0-wd06.html">XRD</a> and the proposed <code><a href="http://hueniverse.com/2009/08/making-the-case-for-a-new-acct-uri-scheme/">acct:</a></code> URI scheme.</p>
<h3>How does a WebFinger identifier look like?</h3>
<p>It&#8217;s like an e-mail address but with an additonal acct: in front:</p>
<pre>acct:user@examplehost.com</pre>
<p>A WebFinger client would then use a discovery mechanism known as <a href="http://tools.ietf.org/html/draft-hammer-discovery-03">Link based resource descriptor discovery (LRDD)</a> to obtain more information about this user which comes as an XRD file and most likely will point to other services a user might have data stored at (like a profile).</p>
<p>The <code>acct:</code> scheme is here used to make it a valid URI again because <code>mailto:</code> is not semantically correct.</p>
<p>While I personally do not think that inventing a new email-based identifier is solving the problem of user&#8217;s confusion on what their identifier is, I nevertheless implemented WebFinger support in the more general discovery library called <a href="http://pypi.python.org/pypi/pydataportability.discovery">pydataportability.discovery</a>. More on the issues I see with it maybe in a different blog post.</p>
<h3>pydataportability.discovery</h3>
<p><a href="http://pydataportability.net">pydataportability</a> is (or going to be) a set of libraries for handling various protocols used in the open web/distributed social networking/data portability world. It contains right now basic support for Microformats (hCard and XFN), includes an XRDS-Simple parser and from today on also support for parsing XRD files as well as for discovery (which is going from a URI of a resource like document to the actual resource description file marked up in XRD).</p>
<p>Today I released the following components:</p>
<ul>
<li><a href="http://pypi.python.org/pypi/pydataportability.xrd">pydataportability.xrd</a> is an XRD parser</li>
<li><a href="http://pypi.python.org/pypi/pydataportability.model.resource">pydataportability.model.resource</a> models a Resource Description document and is used by the above component</li>
<li><a href="http://pypi.python.org/pypi/pydataportability.discovery">pydataportability.discovery</a> is implementing hostmeta discovery for now and also has support for WebFinger&#8217;s acct: scheme as well as it&#8217;s &#8220;http://webfinger.net/rel/acct-desc&#8221; relationship type.</li>
</ul>
<p>You can find more documentation on the <a href="http://pydataportability.net">pydataportability homepage</a>.</p>
<p>Be aware though that nearly all used protocols are not stable. XRD, WebFinger and the discovery stack are much likely to change soon and thus the state of the library might not match the specifications anymore. Moreover this really is a prototype and some structures and names are also likely to change in the future.</p>
<h3>How to install and use it</h3>
<p>Luckily Google and Yahoo already have implemented support for WebFinger although you need to enable it for your account (at least in Google&#8217;s case, I haven&#8217;t tested it with Yahoo yet).</p>
<p>After installing pydataportability.discovery also provides two commands for performing discovery. This is really just an example though as the main use of this to include it in your application and do something else with the data retrieved. These commands are called &#8220;discover&#8221; and &#8220;webfinger&#8221;.</p>
<p>I recommend to install pydataportability inside a virtualenv. You can do so like follows (I assume you have easy_install installed):</p>
<pre>sudo easy_install virtualenv
virtualenv pydp_env --no-site-packages
cd pydp_env
bin/easy_install pydataportability.discovery</pre>
<p><code>discover</code> command to perform discovery on any XRD enabled resource (but only via hostmeta at the moment).  Or you can use the <code>webfinger</code> command to perform discovery on WebFinger identifiers:</p>
<pre>$ bin/webfinger acct:mrtopf@googlemail.com
Rels:  ['http://portablecontacts.net/spec/1.0']
URIs: ['http://www-opensocial.googleusercontent.com/api/people/']
Media Types: []
Prio: 0
Templates: []</pre>
<p>But as said before, this is really just a proof of concept. On how to use this in your own application please<br />
check out the <a href="http://pydataportability.net/docs/discovery/">pydataportability.discovery documentation</a>. You will also find out in there on how you can provide your own plugins to control the discovery workflow yourself.</p>
<h3>More information about WebFinger</h3>
<p>You can read more about WebFinger here:</p>
<ul>
<li><a href="http://code.google.com/p/webfinger/">The Project Page on Google Code</a></li>
<li><a href="http://code.google.com/p/webfinger/wiki/WebFingerProtocol">The Mailing List</a></li>
<li><a href="http://hueniverse.com/2009/08/introducing-webfinger/">Eran introduces WebFinger</a></li>
<li><a href="http://hueniverse.com/2009/09/implementing-webfinger/">Eran on implementing WebFinger</a></li>
</ul>

    <!-- fb_sitestats code START -->
    <script src="http://feeds.feedburner.com/~s/mrtopfde?i=http://mrtopf.de/blog/en/introducing-webfinger-and-a-python-client/" type="text/javascript" charset="utf-8"></script>
    <!-- fb_sitestats code END -->
    <img src="http://feeds.feedburner.com/~r/MrtopfdeEnglishPosts/~4/aI96Hkv3qwM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mrtopf.de/blog/en/introducing-webfinger-and-a-python-client/feed/</wfw:commentRss>
		<feedburner:origLink>http://mrtopf.de/blog/en/introducing-webfinger-and-a-python-client/</feedburner:origLink></item>
	<media:rating>nonadult</media:rating></channel>
</rss>
