<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
         xmlns="http://purl.org/rss/1.0/">




    



<channel rdf:about="http://blog.fourdigits.nl/roelbruggink/RSS">
  <title>roelbruggink</title>
  <link>http://blog.fourdigits.nl</link>

  <description>
    
       
       
  </description>

  
  
            <syn:updatePeriod>daily</syn:updatePeriod>
            <syn:updateFrequency>1</syn:updateFrequency>
            <syn:updateBase>2009-07-01T09:57:41Z</syn:updateBase>
        

  <image rdf:resource="http://blog.fourdigits.nl/logo.gif"/>

  <items>
    <rdf:Seq>
        
            <rdf:li rdf:resource="http://blog.fourdigits.nl/new-maintainer-for-macports-python24"/>
        
        
            <rdf:li rdf:resource="http://blog.fourdigits.nl/theres-an-end-to-everything.-but-not-right-now"/>
        
        
            <rdf:li rdf:resource="http://blog.fourdigits.nl/theres-an-end-to-everything"/>
        
        
            <rdf:li rdf:resource="http://blog.fourdigits.nl/adding-zope-2-permissions-using-just-zcml-and-a-generic-setup-profile"/>
        
        
            <rdf:li rdf:resource="http://blog.fourdigits.nl/changing-your-plone-theme-skin-based-on-the-objects-portal_type"/>
        
        
            <rdf:li rdf:resource="http://blog.fourdigits.nl/removing-a-persistent-local-utility"/>
        
        
            <rdf:li rdf:resource="http://blog.fourdigits.nl/collective.anonymousview-released"/>
        
        
            <rdf:li rdf:resource="http://blog.fourdigits.nl/dutch-plone-translation-sprint-the-results"/>
        
    </rdf:Seq>
  </items>

</channel>

    <item rdf:about="http://blog.fourdigits.nl/new-maintainer-for-macports-python24">        <title>New maintainer for MacPorts' python24</title>        <link>http://blog.fourdigits.nl/new-maintainer-for-macports-python24</link>        <description>Roel Bruggink has stepped up as the maintainer for MacPort's python24 port.</description>    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <![CDATA[<p>Roel Bruggink has stepped up as the maintainer for MacPort's python24 port.</p><h2>Python24 + Snow Leopard != fun</h2>
<p>When Snow Leopard was released, I noticed that our favorite program Mac Ports' python24 didn't exactly worked as I expected. Thanks to fschultze, I had a <a class="external-link" href="http://svn.plone.org/svn/collective/buildout/python/">working alternative</a>. But, I would like to keep stuff like python24 in macports.</p>
<h2>Complaining is wrong</h2>
<p>I could keep on complaining about it, but that's not the right mindset. I use this software for free, so I like to give back to the community by stepping up as the macports python24 maintainer as of <a class="external-link" href="http://trac.macports.org/changeset/67311">revision 67311</a>.</p>
<h2>What will I do</h2>
<p>My main priority is to get python24 working and keep it that way. I will keep MacPorts in sync with the latest releases, after it's tested :) I will not try to fix everything myself, so the port will be <a class="external-link" href="http://guide.macports.org/#project.update-policies.nonmaintainer">openmaintainer</a>. That basically means that 'small' (len undefined) patches may be committed by anyone who has MacPorts commit access.</p>
<h2>Found a bug, or need a fix?</h2>
<p>Please do <a class="external-link" href="http://trac.macports.org/newticket?port=python24&amp;cc=roel@fourdigits.nl">use tickets</a> to communicate your problems (and solutions), and please explain why it is a problem. If there is no 'why', I will close the ticket and will not accept the 'solution'.</p>]]>
</content:encoded>       <dc:publisher>Four Digits</dc:publisher>        <dc:creator>Roel Bruggink</dc:creator>       <dc:rights>(C) Four Digits</dc:rights>                <dc:date>2010-05-05T09:45:22Z</dc:date>        <dc:type>Blog Post</dc:type>    </item>
    <item rdf:about="http://blog.fourdigits.nl/theres-an-end-to-everything.-but-not-right-now">        <title>There's an end to everything. But not right now :)</title>        <link>http://blog.fourdigits.nl/theres-an-end-to-everything.-but-not-right-now</link>        <description>Four Digits and Plone are here to stay.</description>    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <![CDATA[<p>Four Digits and Plone are here to stay.</p><p>April fools is a great day. It's even greater when you pull of a prank later in the day. Somehow people let down their guard, and so we begin :) The best pranks are those that no one expects, and that no one really wants to hear :)</p>
<p>Of course we do continue to work on -and with- Plone, the product and the community, because we think Plone is the best for us and our clients.</p>
<p> </p>
<p class="callout"><span class="visualHighlight">Let this be clear: <a class="internal-link" href="theres-an-end-to-everything">this</a> was an April fools joke!</span></p>
<p> </p>
<p>Thanks for participating, and see you on the next conference, sprint or meeting!</p>]]>
</content:encoded>       <dc:publisher>Four Digits</dc:publisher>        <dc:creator>Roel Bruggink</dc:creator>       <dc:rights>(C) Four Digits</dc:rights>                <dc:date>2010-04-02T07:27:05Z</dc:date>        <dc:type>Blog Post</dc:type>    </item>
    <item rdf:about="http://blog.fourdigits.nl/theres-an-end-to-everything">        <title>There's an end to everything.</title>        <link>http://blog.fourdigits.nl/theres-an-end-to-everything</link>        <description>Four Digits is moving away from Plone.</description>    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <![CDATA[<p>Four Digits is moving away from Plone.</p><p class="callout">This was an April fools joke. Please also read the <a class="internal-link" href="theres-an-end-to-everything.-but-not-right-now">follow up</a>.</p>
<p>It has been a difficult week for us. We've been talking for hours. What should we do? Is this the right thing to do? More questions then answers, but at least we now know what to do.</p>
<p>For the last couple of years, life has been a blast! We've met wonderful, intelligent people. We've gotten to know a wonderful, intelligent product - Plone of course!</p>
<p>We really like the whole Plone community, and we really did enjoy coding on the new Plone collections, integrating TinyMCE and building Deco. But we also see a lot of difficulties on the horizon. We no longer can afford to invest in Plone the community, nor in Plone the product.</p>
<p>So, this is farewell... I hope you will keep on rocking the Plone boat and get more and larger contracts. The best to you all! We would like to keep the legend alive, so we want you to join us in one final night of abundant drinking and get up tomorrow and code like the monkeys we are.</p>]]>
</content:encoded>       <dc:publisher>Four Digits</dc:publisher>        <dc:creator>Roel Bruggink</dc:creator>       <dc:rights>(C) Four Digits</dc:rights>                <dc:date>2010-04-01T19:15:00Z</dc:date>        <dc:type>Blog Post</dc:type>    </item>
    <item rdf:about="http://blog.fourdigits.nl/adding-zope-2-permissions-using-just-zcml-and-a-generic-setup-profile">        <title>Adding Zope 2 permissions using just ZCML and a Generic Setup profile</title>        <link>http://blog.fourdigits.nl/adding-zope-2-permissions-using-just-zcml-and-a-generic-setup-profile</link>        <description>How to add Zope 2 permissions without a Zope 2 package (Install.py)</description>    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <![CDATA[<p>How to add Zope 2 permissions without a Zope 2 package (Install.py)</p><h2>Short story</h2>
<p>To add Zope 2 permissions without creating a Zope 2 package and adding them manually in the Install.py file, we configure the permissions in the main configure.zcml file of our package, or in a dedicated permissions.zcml. Then we map the permissions to roles and we're done. You might want to take a look at Products.Five's configure.zcml, permissions.zcml and the method create_permission_from_permission_directive in security.py.</p>
<h2>Short-ish story</h2>
<p>In pre Zope 2.12, we need <a href="http://pypi.python.org/pypi/collective.autopermission">collective.autopermissions</a> to automate the creation of the defined permissions. Zope 2.12 includes that functionality, so we are almost done :)</p>
<p>In configure.zcml we include permissions.zcml before our profiles.</p>
<h3>configure.zcml</h3>
<pre>&lt;include package=".permissions" /&gt;<br /> <br /> &lt;genericsetup:registerProfile<br /> name="default"<br /> title="plone.app.collection"<br /> directory="profiles/default"<br /> description="plone.app.collection profile"<br /> provides="Products.GenericSetup.interfaces.EXTENSION"<br /> /&gt;</pre>
<p>Our permissions.zcml contains the definitions of the permissions. Permissions do not need a containing node, so the following will do.</p>
<p>Note: the id attribute is the Zope 3 identifier and title is the Zope 2 identifier.</p>
<h3>permissions.zcml</h3>
<pre>&lt;permission<br /> id="plone.app.collection.addCollection"<br /> title="plone.app.collection: Add Collection"<br /> /&gt;<br /> &lt;permission<br /> id="plone.app.collection.addSomething"<br /> title="plone.app.collection: Add something"<br /> /&gt;<br /> &lt;permission<br /> id="plone.app.collection.addEvenMore"<br /> title="plone.app.collection: Add even more"<br /> /&gt;</pre>
<p>In our profile we have a rolemap.xml to set the role/permission mappings. Make sure that the name attribute corresponds to the title attribute in permissions.zcml</p>
<h3>rolemap.xml</h3>
<pre>&lt;rolemap&gt;<br /> &lt;permissions&gt;<br /> &lt;permission<br /> name="plone.app.collection: Add Collection"<br /> acquire="True"&gt;<br /> &lt;role name="Manager" /&gt;<br /> &lt;/permission&gt;<br /> &lt;/permissions&gt;<br />&lt;/rolemap&gt;</pre>]]>
</content:encoded>       <dc:publisher>Four Digits</dc:publisher>        <dc:creator>Roel Bruggink</dc:creator>       <dc:rights>(C) Four Digits</dc:rights>                <dc:date>2009-08-16T10:11:30Z</dc:date>        <dc:type>Blog Post</dc:type>    </item>
    <item rdf:about="http://blog.fourdigits.nl/changing-your-plone-theme-skin-based-on-the-objects-portal_type">        <title>Changing your Plone theme/skin based on the object's portal_type</title>        <link>http://blog.fourdigits.nl/changing-your-plone-theme-skin-based-on-the-objects-portal_type</link>        <description></description>    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <![CDATA[<p></p><h2>Update</h2>
<p>I have updated this post to fix some issues. There where problems with VHM style virtual hosting (because of the /virtual_hosting added to TraversalRequestNameStack) and I fixed my catalog query (shame on me).</p>
<p>As Deichi pointed out, you need Plone &gt;= 3.1 because of IThemeSpecific. We have tested this on Plone 3.2.2 and 3.2.3, but it should work on Plone &gt;= 3.1.</p>
<h2>Objective</h2>
<p>I have a folder structure like (section)[/random]/(department)[/random]/(project)[/random], and the folders project, department and district need to have a different theme. This sounds like a fairly easy task, but that couldn't be futher away from the truth.</p>
<h2>Problems all over</h2>
<p>According to <a href="http://maurits.vanrees.org/weblog/archive/2008/01/skin-switching-with-pre-traversal">Maurits' blog on Skin switching</a> and <a href="http://weblion.psu.edu/news/theme-switching-by-url-folder-page-etc">Weblions' "Theme switching by URL, folder, page, etc."</a>, <a href="http://docs.zope.org/zope3/Interface/zope.app.publication.interfaces.IBeforeTraverseEvent/index.html">IBeforeTraverseEvent</a> should be used. I thought it would give me every object in the url, but you guessed it: it didn't. It just gave me the Plone Site object. I then implemented __bobo_traverse__ in the contenttypes. Either way, things like browser resources didn't work because <i>changeSkin</i> just changes the theme for the request it's in. And because everything inside the themes is <a href="http://plone.org/documentation/manual/theme-reference/buildingblocks/components/themespecific">IThemeSpecific</a> and the currently active theme is a different theme, I got error 404 galore.</p>
<h2>Solution</h2>
<p>Using IBeforeTraverseEvent is the way to go to hijack every request. We need to do that, so portal_css and portal_js also works like expected. We need to take three steps:</p>
<p>In configure.zcml: <br />1. Configure a event handler</p>
<pre>&lt;subscriber<br /> for="plone.app.layout.navigation.interfaces.INavigationRoot<br /> zope.app.publication.interfaces.IBeforeTraverseEvent"<br /> handler=".skinswitcher.setskin" /&gt;</pre>
<p>In skinswitcher.py: <br />2. Define the event handler that sets the theme.</p>
<pre>def setskin(site, event):<br />"""Eventhandler to set the skin"""<br />    skin_name = findMeMySkin(site, event.request)<br />    portal = getToolByName(site, 'portal_url').getPortalObject()<br />    portal.changeSkin(skin_name, event.request)</pre>
<p>3. And we need some code to find out which theme should be used.</p>
<pre>def findMeMySkin(site, request):<br />    # define possible skins<br />    PROJECT_THEME = 'Project Plone Theme'<br />    AFDELING_THEME = 'Afdeling Plone Theme'<br />    DISTRICT_THEME = 'District Plone Theme'<br />    DEFAULT = 'Plone Tableless'<br />    skins=[PROJECT_THEME, AFDELING_THEME, DISTRICT_THEME, DEFAULT]<br /><br />    # map portal_type to theme<br />    mapping={<br />        'Project': PROJECT_THEME,<br />        'Afdeling': AFDELING_THEME,<br />        'District': DISTRICT_THEME,<br />    }<br /><br />    if not request.TraversalRequestNameStack:<br />        return DEFAULT<br /><br />    # reverse to look from the root up<br />    stack=[]<br />    stack.extend(request.TraversalRequestNameStack)<br />    stack.extend(site.getPhysicalPath())<br />    stack=[x for x in stack if x and x!='/' and x!='virtual_hosting']<br />    stack.append('')<br />    stack=stack[::-1]<br /><br />    # support portal_css and portal_js<br />    for item in stack:<br />        if item in skins:<br />            return item<br /><br />    # check objects<br />    portal_catalog = getToolByName(site, 'portal_catalog')<br />    while stack:<br />        item=stack.pop()<br />        path = '/'.join(stack)<br /><br />        query={}<br />        query['id']=str(item)<br />        query['path'] = {'query' : path}<br /><br />        brains = portal_catalog.unrestrictedSearchResults(query)<br />        if brains:<br />            brain=brains[0]<br />            portal_type=brain.portal_type<br />            try:<br />                return mapping[portal_type]<br />            except:<br />                pass<br /><br />    return DEFAULT<br /></pre>]]>
</content:encoded>       <dc:publisher>Four Digits</dc:publisher>        <dc:creator>Roel Bruggink</dc:creator>       <dc:rights>(C) Four Digits</dc:rights>                <dc:date>2009-08-04T11:15:00Z</dc:date>        <dc:type>Blog Post</dc:type>    </item>
    <item rdf:about="http://blog.fourdigits.nl/removing-a-persistent-local-utility">        <title>Removing a persistent local utility</title>        <link>http://blog.fourdigits.nl/removing-a-persistent-local-utility</link>        <description></description>    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <![CDATA[<p></p><h3>What is the problem?</h3>
<p>Trying to remove a local persistent utility using unregisterUtility results in errors like "AttributeError: type object 'IFavoriteStorage' has no attribute '__iro__' ". And above all: no one seems to know how to fix it "properly". Comments are more then welcome!</p>
<h3>Solution</h3>
<p>There are two parts to the solution: there is the definition of the utility and the utility itself.</p>
<p>1. Unregister the utility (remove defition):</p>
<pre>portal.getSiteManager().unregisterUtility(utility, IFavoriteStorage)</pre>
<p>2. Delete the object (remove utility itself):</p>
<pre>del my_utility</pre>
<h3>Example</h3>
<p>So add or edit Extensions/Install.py and add something like this:</p>
<pre>from Products.CMFCore.utils import getToolByName
from Products.CMFPlone.utils import log 
from zope.component import getUtility
from fourdigits.favorites.interfaces import IFavoriteStorage
import transaction

def uninstall(portal, reinstall=False):
    # Remove utilities when really uninstalled
    if not reinstall:
        my_utility = getUtility(IMyFirstUtility)
        portal.getSiteManager().unregisterUtility(my_utility, IFavoriteStorage)
        del my_utility
        transaction.commit()
        log("Uninstalled fourdigits.favorites")
	
    return "Ran all uninstall steps."
</pre>]]>
</content:encoded>       <dc:publisher>Four Digits</dc:publisher>        <dc:creator>Roel Bruggink</dc:creator>       <dc:rights>(C) Four Digits</dc:rights>                <dc:date>2009-07-29T11:59:31Z</dc:date>        <dc:type>Blog Post</dc:type>    </item>
    <item rdf:about="http://blog.fourdigits.nl/collective.anonymousview-released">        <title>collective.anonymousview released</title>        <link>http://blog.fourdigits.nl/collective.anonymousview-released</link>        <description>collective.anonymousview allows authenticated users to view a page as if they are not logged in.</description>    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <![CDATA[<p>collective.anonymousview allows authenticated users to view a page as if they are not logged in.</p><h2>What is collective.anonymousview and why does it exist?</h2>
<p>During the <a class="internal-link" href="summary-of-interview-results" title="Summary of interview results">interviews done by Laurens</a> some of the clients said that they use a second browser to see what the website looks to normal visitors. We also use multiple browser to see how the website behaves.</p>
<p>We released collective.anonymousview (<a class="external-link" href="http://svn.plone.org/svn/collective/collective.anonymousbrowser/">SVN</a>, <a class="external-link" href="http://pypi.python.org/pypi/collective.anonymousview">pypi</a>, <a class="external-link" href="http://plone.org/products/collective.anonymousview">plone.org</a>) to allow content editors (and our developers) to view the current page as an anonymous user more easily. The product adds an extra tab to the object actions bar, which links to a browserview that under water uses urllib2 to open that page for you. That way you effectively have an extra browser, and it saves time for our clients and developers, because they no longer have to navigate through the website (or copy the url) in a seperate browser.</p>
<h2>What does it look like?</h2>
<p>The extra tab is located to the right side:</p>
<p><a class="external-link" href="av_extra_tab.png/image_view_fullscreen"><img alt="Extra 'anonymous view' tab" class="image-inline image-inline" src="av_extra_tab.png/image_preview" /></a></p>
<p>The normal 'logged in' screen looks like this:</p>
<p><a class="external-link" href="av_authenticated.png/image_view_fullscreen"><img alt="Front-page for an authenticated user" class="image-inline image-inline" src="av_authenticated.png/image_preview" /></a></p>
<p>And the 'anonymous' screen, with just another browserview looks like this:</p>
<p><a class="external-link" href="av_anonymous.png/image_view_fullscreen"><img alt="Front-page for an 'anonymous' user" class="image-inline image-inline" src="av_anonymous.png/image_preview" /></a></p>
<h2>Installation</h2>
<p>Installation is the same as other products:</p>
<p>Add the following to buildout.cfg:</p>
<pre>eggs +=
    collective.anonymousview
zcml +=
    collective.anonymousview
</pre>
<p>Next up is to install it via the quickinstaller, or (if you use that) include it in your <a class="external-link" href="http://www.slideshare.net/wooda/martin-aspeli-extending-and-customising-plone-3">policy product</a> (page 14) and reinstall that.</p>]]>
</content:encoded>       <dc:publisher>Four Digits</dc:publisher>        <dc:creator>Roel Bruggink</dc:creator>       <dc:rights>(C) Four Digits</dc:rights>                <dc:date>2009-05-15T19:45:00Z</dc:date>        <dc:type>Blog Post</dc:type>    </item>
    <item rdf:about="http://blog.fourdigits.nl/dutch-plone-translation-sprint-the-results">        <title>Dutch Plone translation sprint: the results</title>        <link>http://blog.fourdigits.nl/dutch-plone-translation-sprint-the-results</link>        <description>Plone is once again 100% Dutch.</description>    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <![CDATA[<p>Plone is once again 100% Dutch.</p><p>Due to Plone 3.3 being in testing fase, the need for an new Dutch translation has risen. We had fallen behind from a perfect 100% translation to a mere 96%. A perfect opportunity to organise a sprint and subject our colleagues to slaverish labour (Har har!). 'Cause we are such greate people to hang with (or because good translations are important), many had shown interest and so we had 13 men eager for beer and Plone around the office; Duco, Kees, Arjen, Wietse and Kim Chee from <a class="external-link" href="http://www.goldmund-wyldebeast-wunderliebe.com/">GW20e</a>, Fred and Maurits from <a class="external-link" href="http://zestsoftware.nl/">Zest Software</a>, Jarno from <a class="external-link" href="http://www.pareto.nl/">Pareto</a>, and last but not least Rob, Maarten, Roel and Laurens from <a class="external-link" href="http://www.fourdigits.nl">Four Digits</a>.</p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/mg_3788.jpg" title="MG_3788.jpg"><img alt="MG_3788.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/mg_3788.jpg/image_preview" /></a></p>
<p>Four Digits provided food and drinks, so the fierce men from GW20e arrived first. They had forgotten the <a href="http://www.urbandictionary.com/define.php?term=road%20beer">road beer</a> and thus -even before unpacking- dived into our fridge to confiscate our last <a href="http://www.jever.de">Jever</a>!</p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/mg_3797.jpg" title="MG_3797.jpg"><img alt="MG_3797.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/mg_3797.jpg/image_preview" /></a></p>
<p>Kees biting the bullet on PloneBoard.</p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/mg_3789.jpg" title="MG_3789.jpg"><img alt="MG_3789.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/mg_3789.jpg/image_preview" /></a></p>
<p>Roel and Jarno slaved away over Kupu, the Password reset tool and Plone itself,</p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/mg_3805.jpg" title="MG_3805.jpg"><img alt="MG_3805.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/mg_3805.jpg/image_preview" /></a></p>
<p>while Rob and Kim Chee wrestled with the whole of CMF and LinguaPlone.</p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/mg_3806.jpg" title="MG_3806.jpg"><img alt="MG_3806.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/mg_3806.jpg/image_preview" /></a></p>
<p>Rob and Kim Chee aka Violent J and Shaggy 2 Dope</p>
<p>Just in time for diner, our last guests Fred and Maurits from Zest arrived. Although they missed the kick-off, they made up a lot by going for Archetypes and more.</p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/mg_3803.jpg" title="MG_3803.jpg"><img alt="MG_3803.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/mg_3803.jpg/image_preview" /></a></p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/mg_3809.jpg" title="MG_3809.jpg"><img alt="MG_3809.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/mg_3809.jpg/image_preview" /></a></p>
<p>Duco and Wietse googling for the steps to Tango to Singing &amp; dancing</p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/mg_3812.jpg" title="MG_3812.jpg"><img alt="MG_3812.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/mg_3812.jpg/image_preview" /></a></p>
<p style="text-align: left;">Arjen and Maarten (taking the picture) translating PloneGlossary, Poi, PoPoll, PloneFormGen, AddRemoveWidget, FlashUpload, PloneGazette and many more.</p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/mg_3814.jpg" title="MG_3814.jpg"><img alt="MG_3814.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/mg_3814.jpg/image_preview" /></a></p>
<p>Around 02:00 it was more then obvious that we should wrap things up.</p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/mg_3808.jpg" title="MG_3808.jpg"><img alt="MG_3808.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/mg_3808.jpg/image_preview" /></a></p>
<p>A final look at the board shows us that we have accomplished a lot in just a few hours!</p>
<p><a class="internal-link" href="dutch-translation-sprint-03-04-2009/vertaalsprint.jpg" title="vertaalsprint.jpg"><img alt="vertaalsprint.jpg" class="image-inline" src="dutch-translation-sprint-03-04-2009/vertaalsprint.jpg/image_preview" /></a></p>
<p>Since our handwriting isn't very nice, one could say very bad, here are the translated products:</p>
<ul>
<li> Plone </li>
<li>PloneHelpCenter</li>
<li>Poi</li>
<li>PloneFormGen</li>
<li>PloneBoard</li>
<li>Mlango (awarded ten points by the EuroSongfestival jury)</li>
<li>PloneGetPaid</li>
<li>PlonePoPoll</li>
<li>Singing &amp; dancing</li>
<li>PloneGlossary (Turned out to be somewhat harder, because the product was translated using German string ids.)</li>
<li>Classifieds</li>
<li>FlowPlayer</li>
<li>DataGridField</li>
<li>AddRemoveWidgt</li>
<li>P4A.PloneCalendar</li>
<li>PloneGazette</li>
<li>PloneSoftwareCenter</li>
<li>PloneFlashUpload (z3c.widget)</li>
</ul>
<p>+ And the ones I forgot.</p>
<p><b>To say it once more: Plone is a Dutchie! 100%! </b></p>
<p>Disclaimer: Any resemblance to real persons, living or dead, is purely coincidental. All models over 18 years of age.</p>]]>
</content:encoded>       <dc:publisher>Four Digits</dc:publisher>        <dc:creator>Roel Bruggink</dc:creator>       <dc:rights>(C) Four Digits</dc:rights>                <dc:date>2009-04-06T17:15:00Z</dc:date>        <dc:type>Blog Post</dc:type>    </item>




</rdf:RDF>

