<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="" type="text/css"?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:dcterms="http://purl.org/dc/terms/"
         xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
         xmlns:rss="http://purl.org/rss/1.0/"
         xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <rss:channel rdf:about="http://www.codesyntax.com/cs-workshop/blog">

        <rss:title>CS-Workshop Blog</rss:title>
        <rss:link>http://www.codesyntax.com/cs-workshop/blog</rss:link>

        
        <rss:description>CS-Workshop Blog RSS 1.0 feed.</rss:description>

        <rss:image rdf:resource="http://www.codesyntax.com/logo.png"/>

        <sy:updatePeriod>daily</sy:updatePeriod>
        <sy:updateFrequency>1</sy:updateFrequency>

        <rss:items>
            <rdf:Seq>
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2009/10/30/geo-openspace"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2009/10/30/grok-openspace-at-plone-conference"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2009/10/29/plone-conference-2009-budapest"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2009/08/31/plonegov-growing-in-the-basque-country"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2009/01/27/using-collective.captcha-in-custom-forms"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2008/11/11/i-cant-reorder-elements-in-a-folder"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2008/11/07/world-plone-day-in-the-basque-country"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2008/10/20/open-source-world-conference-malaga-2008"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2008/10/08/welcome-plone-conference-2008"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2008/09/17/case-study-euskalkultura.com.-improving-the-performance-of-a-plone-site"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2008/04/16/my-plone-doesnt-show-translated-msgids-located-in-a-locales-directory"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2008/03/05/painless-big-xml-file-parsing-in-python"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2008/02/26/paster-is-your-friend"/>
                
                
                <rdf:li rdf:resource="http://www.codesyntax.com/cs-workshop/blog/2008/01/22/using-plone4artistsaudio-in-a-zc.buildout-based-plone-installation"/>
                
            </rdf:Seq>
        </rss:items>
    </rss:channel>

    <rss:image rdf:about="http://www.codesyntax.com/logo.png">
        <rss:title>CS-Workshop Blog</rss:title>
        <rss:link>http://www.codesyntax.com/cs-workshop/blog</rss:link>
        <rss:url>http://www.codesyntax.com/logo.png</rss:url>
    </rss:image>

    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2009/10/30/geo-openspace">

        <rss:title>Geo openspace</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2009/10/30/geo-openspace</rss:link>       

        <rss:description>A quick write-up of the geo-open space session held at Plone Conference</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>Giorgio Borelli presented <a class="external-link" href="http://dev.plone.org/collective/browser/collective.geo.settings">collective.geo.*</a> the collection of libraries to integrate geo-information in any Plone content-types.</p>
<p>They use <a class="external-link" href="http://openlayers.org/">OpenLayers</a> to show the data in the maps not to bind to <a class="external-link" href="http://maps.google.com">Google Maps</a>.</p>
<p>They use <a class="external-link" href="http://trac.gispython.org/primagis/browser">zgeo.*</a> packages as base-products, so collective.geo.* are mainly plone intregation layers.</p>
<p>I have presented <a class="external-link" href="http://tagzania.com">Tagzania</a> a social mapping application and also explained the use of <a class="external-link" href="http://www.geonames.org">Geonames</a> to geocode names.</p>
<p>We have also talked about other Plone products that provide map integration like <a class="external-link" href="http://plone.org/products/maps">Products.maps</a>, and when asked about that, Giorgio has told us that he didn't want to stick always to Google Maps, so he developed this product that uses OpenLayers, and also that Products.maps doesn't support lines or polygons.</p>
<p>If I missed something, please post a comment! Photos tomorrow or on sunday, the USB cable is in my hotel room :(</p>

          ]]>
        </content:encoded>        

        <dc:date>2009-10-30T17:12:03+01:00</dc:date>

        <dcterms:modified>2009-10-30T17:30:24+01:00</dcterms:modified>

        <dc:creator>Mikel Larreategi</dc:creator>

        

        
            <dc:subject>mapping</dc:subject>
        
        
            <dc:subject>maps</dc:subject>
        
        
            <dc:subject>openlayers</dc:subject>
        
        
            <dc:subject>tagzania</dc:subject>
        
        
            <dc:subject>geo</dc:subject>
        
        
            <dc:subject>plone</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2009/10/30/grok-openspace-at-plone-conference">

        <rss:title>Grok openspace at Plone Conference</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2009/10/30/grok-openspace-at-plone-conference</rss:link>       

        <rss:description>Godefroi Chappelle and XX (sorry I missed your name) presented the way of using Grok in Plone 3</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>Grok is a way to simplify the entry of people to Zope 3 (now called <a class="external-link" href="http://docs.zope.org/zopetoolkit/">Zope Toolkit)</a>. Although <a class="external-link" href="http://grok.zope.org">Grok</a> directly uses Zope Toolkit and it wasn't possible to use it directly in Zope 2, Grok people made a refactoring job to extract the core components of Grok to a smaller packages called <a class="external-link" href="http://pypi.python.org/pypi?%3Aaction=search&amp;term=grokcore&amp;submit=search">grokcore.*</a></p>
<p>In that way Godefroi and other people like <a class="external-link" href="http://regebro.wordpress.com">Lennart Regebro</a>, were able to write <a class="external-link" href="http://pypi.python.org/pypi/five.grok">five.grok: the Zope2 integration layer for Grok.</a></p>
<p>Now we can easily write views (browser views for example, because there are many other supported things) easily without needing to know all that ZCML stuff needed to register a browser view:</p>
<pre>from five import grok

# assuming content is in a module called content
from content import MyContent

class MyView(grok.View):
    grok.context(MyContent)
    def render(self):
        return u'Me grok view Plone!'
</pre>
<p>Is not that easy? We just need one line, yes one line, of ZCML to load that:</p>
<pre>&lt;grok:grok package="."/&gt;
</pre>
<p>Wow ! That avoids many lines of ZCML in our configure.zcml.</p>
<p>Grok is a way to avoid a lot of boilerplate code and ZCML lines without losing control on all those registration. It's another way of doing the same as we do writing ZCML, but without writing it.</p>
<p>Although there are many things already done and usable in Plone, they want to identify what isn't and write <em>grokkers</em> (classes that do the same as ZCML registrations) for them. Here are some of those things, identified in the open space:</p>
<ul><li>Portlets: there is something done in a package called plone.grok, but it's old and needs upgrading.</li><li>GenericSetup: avoid all that code to register a GS profile or import steps.</li><li>ContentRules.</li></ul>
<p>There is also a package to grok z3c.forms in Plone.</p>
<p>I think this will be very useful for as at CS.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

          ]]>
        </content:encoded>        

        <dc:date>2009-10-30T12:24:06+01:00</dc:date>

        <dcterms:modified>2009-10-30T12:24:06+01:00</dcterms:modified>

        <dc:creator>Mikel Larreategi</dc:creator>

        

        
            <dc:subject>grok</dc:subject>
        
        
            <dc:subject>zope3</dc:subject>
        
        
            <dc:subject>zope-toolkit</dc:subject>
        
        
            <dc:subject>zope</dc:subject>
        
        
            <dc:subject>plone</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2009/10/29/plone-conference-2009-budapest">

        <rss:title>Plone Conference 2009 - Budapest</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2009/10/29/plone-conference-2009-budapest</rss:link>       

        <rss:description>From October 28th to 30th, the 2009 edition of Plone Conference is being held in Budapest and there is CodeSyntax!</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>Many interesting talks these days at the Plone Conferente at ELTE Congress Center in Budapest!</p>
<p>We are talking about deliverance, xdv, Plone 4, Plone 5, and many other cool features of Plone, including Plone using experiences, integration with Django and other systems and many more.</p>
<p>This year, an experiment will be held the last day: an Open Space (or UnConference). People is writing intesting topics in a board, and the conference will be self-organized. I'm excited about a lot of the topics on that board. I can't divide myself so I'll try to attend the most I can.</p>
<p>Although the conference started on wednesday, two days of training were organized beforehand and there will be two more days of sprint.</p>
<p>Have a nice Plone!</p>

          ]]>
        </content:encoded>        

        <dc:date>2009-10-29T17:38:43+01:00</dc:date>

        <dcterms:modified>2009-10-29T17:38:43+01:00</dcterms:modified>

        <dc:creator>Mikel Larreategi</dc:creator>

        

        
            <dc:subject>conference</dc:subject>
        
        
            <dc:subject>budapest</dc:subject>
        
        
            <dc:subject>plone</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2009/08/31/plonegov-growing-in-the-basque-country">

        <rss:title>PloneGov growing in the Basque Country</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2009/08/31/plonegov-growing-in-the-basque-country</rss:link>       

        <rss:description>PloneGov is an international initiative with the goal of getting a powerful on-line eGovernment tool. Most eGovernement needs and requirements are similar and PloneGov wants to satisfy them in a effective and efficient way thanks to its open source project. CodeSyntax is part of PloneGov thanks to its UdalPlone initiative.</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>Last weeks CodeSyntax has launched three new multilingual corporative websites for 3 Basque City Councils using <strong>PloneGov - UdalPlone</strong>: <a class="external-link" href="http://www.zumaia.net">Zumaia</a>, <a class="external-link" href="http://ondarroa.eu">Ondarroa</a> and <a class="external-link" href="http://www.mutrikukoudala.net">Mutriku</a>. Thanks to these websites the <a class="external-link" href="http://www.plonegov.org">PloneGov</a> community in growing in the Basque Country.</p>
<p>CodeSyntax has a wide experience developing multilingual corporative websites for public administrations. We've developed over 20 websites using Zope first and PloneGov-UdalPlone currently.</p>
<p>PloneGov initiative has deserved several awards and nominations in all these years, for instance, it's one of the finalist of the <a class="external-link" href="http://www.epractice.eu/en/awards">European eGovernment Awards 2009</a>.</p>

          ]]>
        </content:encoded>        

        <dc:date>2009-08-31T11:31:48+02:00</dc:date>

        <dcterms:modified>2009-08-31T11:31:48+02:00</dcterms:modified>

        <dc:creator>Mikel Lizarralde</dc:creator>

        

        
            <dc:subject>plone</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2009/01/27/using-collective.captcha-in-custom-forms">

        <rss:title>Using collective.captcha in custom forms</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2009/01/27/using-collective.captcha-in-custom-forms</rss:link>       

        <rss:description>collective.captcha provides a simple way to create and verify captcha image and sounds to protect your forms from spambots.</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>We are using Plone for some community sites with blogs and newsitems
with comments and we were attacked by spambots and found ourselves
writing spam-deleting scripts until we found <a class="reference" href="http://pypi.python.org/pypi/collective.captcha">collective.captcha</a>.</p>
<p><a class="reference" href="http://pypi.python.org/pypi/collective.captcha">collective.captcha</a>
provides a very simple browser view to generate captcha images (and
also sound-captchas) and to verify user input. We are using it in Plone
2.5.x and also in 3.x (like in this blog) and it works great in both of
them.</p>
<p>First of all, you need to include in your buildout, both in eggs and
zcml sections of your instance and then run the buildout to get it
installed.</p>
<p>Then you need to integrate the captcha generated image and the form
to get user input, we use a simple page template for that, called <em>captcha_widget</em> with the following content:</p>
<pre class="literal-block">&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"<br />    i18n:domain="ataria"&gt;<br /><br />&lt;body&gt;<br /><br />&lt;span metal:define-macro="captcha"&gt;<br /><br />  &lt;div class="field"<br />       tal:define="error errors/captcha|nothing;"<br />       tal:attributes="class python:test(error, 'field error', 'field')"&gt;<br />    &lt;label for="captcha" i18n:translate="label_captcha"&gt;Captcha&lt;/label&gt;<br /><br />    &lt;span class="fieldRequired" title="Required"<br />          i18n:attributes="title"<br />          i18n:domain="plone"<br />          i18n:translate="label_required"&gt;(Required)&lt;/span&gt;<br /><br />    &lt;div class="formHelp" i18n:translate="help_captcha"&gt;<br />      Provide the text in the image. Just to avoid spambots<br />    &lt;/div&gt;<br />    &lt;p tal:replace="structure here/@@captcha/image_tag" /&gt;<br /><br />    &lt;div&gt;<br />      &lt;input type="text"<br />             name="captcha"<br />             id="captcha"<br />             value="" /&gt;<br />    &lt;/div&gt;<br />  &lt;/div&gt;<br /><br />&lt;/span&gt;<br /><br />&lt;/body&gt;<br />&lt;/html&gt;<br /></pre>
<p>The relevant part in this page template is the line in which the captcha image is rendered:</p>
<pre class="literal-block">&lt;p tal:replace="structure here/@@captcha/image_tag" /&gt;<br /></pre>
<p>The first part is completed. Now we just have to check that the user
input and the string shown in the captcha are the same. We mainly use
collective.captcha together with <a class="reference" href="http://plone.org/products/plone-comments">qPloneComments</a> and we use <a class="reference" href="http://plone.org/documentation/how-to/forms/">CMFFormController based forms</a> so we need to create the .cpt with the form in which we include the captcha with the following sentence:</p>
<pre class="literal-block">&lt;metal:captcha use-macro="here/captcha_widget/macros/captcha" /&gt;<br /></pre>
<p>After that you have to write the validator script and tie together
with the .metadata file of your form. The script we use is this:</p>
<pre class="literal-block">from Products.CMFPlone import PloneMessageFactory as _<br /><br />captcha = context.REQUEST.get('captcha')<br /><br />view = context.restrictedTraverse('@@captcha')<br /><br />if not view.verify(captcha):<br />    state.setError('captcha', _(u'Are you a bot? Try again...'))<br />    state.set(status='failure')<br /><br />return state<br /></pre>
<p>With this, you will have your form protected from spambots.</p>
<p>But <a class="reference" href="http://pypi.python.org/pypi/collective.captcha">collective.captcha</a>
has some sort of bug (or at least it has a bug with our configuration)
in which zope can't start if you do not override the captcha view in
your product. We <a class="reference" href="http://n2.nabble.com/Overriding-%40%40captcha-view-in-collective.captcha-tp1647972p1647972.html">reported the error in plone-users</a> but had no input about it, so I just reproduce it here.</p>
<p>To get <a class="reference" href="http://pypi.python.org/pypi/collective.captcha">collective.captcha</a> work correctly and zope start, you have to add an overrides.zcml file to your product and add the following ZCML snippet in it:</p>
<pre class="literal-block">&lt;browser:page<br />    name="captcha"<br />    for="*"<br />    permission="zope2.Public"<br />    allowed_interface="collective.captcha.browser.interfaces.ICaptchaView"<br />    class="collective.captcha.browser.captcha.Captcha"<br />    /&gt;<br /></pre>
<p>So now you know how to protect your hand-made plone forms with <a class="reference" href="http://pypi.python.org/pypi/collective.captcha">collective.captcha</a>.</p>

          ]]>
        </content:encoded>        

        <dc:date>2009-01-27T11:25:36+01:00</dc:date>

        <dcterms:modified>2009-01-27T11:25:36+01:00</dcterms:modified>

        <dc:creator>Mikel Larreategi</dc:creator>

        

        
            <dc:subject>captcha</dc:subject>
        
        
            <dc:subject>plone</dc:subject>
        
        
            <dc:subject>forms</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2008/11/11/i-cant-reorder-elements-in-a-folder">

        <rss:title>I can't reorder elements in a Plone folder!</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2008/11/11/i-cant-reorder-elements-in-a-folder</rss:link>       

        <rss:description>Recently I had a problem in a website we are currently developing to reorder some custom content-types in Plone folder.</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>We are currently building a website that has many customized content-types. In the main folder of the structure we are building, the client wants to reorder elements freely, like in a normal Plone folder. Well, the main folder of the structure is currently a Plone folder, so "no problem" I said, just go to <em>Contents</em> tabs and reorder the elements. But... aghh !!! I couldn't reorder the items !!</p>
<p>I started investigating what was going on, putting a <em>pdb</em> here and there, and found a curious thing: the items stored in the folder were some archetypes based custom objects with a portal type with a space in its name. This portal type was <strong>"Product Line"</strong>. The reordering code compared the items inside it and checked whether the item was actually in it looking at its <strong>_objects </strong>attribute, nothing special til here. But the check was not safe enough.</p>
<p>The code looked at the Metatype of the FTIs in the portal_types tool to check whether the element which was being reordered was currently a CMF object. But the Metatype of the FTI wasn't the same as the meta type of the object, because the Metatype of the FTI was the actual portal type of the object.</p>
<p>Moreover, the <strong>_objects</strong> attribute wasn't modified when the meta type of the object was changed, so it wasn't enough the change just the meta_type. I had to write a migration script to change the _objects attribute of the folder to change "ProductLine" with "Product Line". That change made my custom objects orderable.</p>
<p>&nbsp;</p>

          ]]>
        </content:encoded>        

        <dc:date>2008-11-11T17:25:00+01:00</dc:date>

        <dcterms:modified>2008-11-26T22:07:03+01:00</dcterms:modified>

        <dc:creator>Mikel Larreategi</dc:creator>

        

        
            <dc:subject>folder</dc:subject>
        
        
            <dc:subject>plone</dc:subject>
        
        
            <dc:subject>reorder</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2008/11/07/world-plone-day-in-the-basque-country">

        <rss:title>World Plone Day in the Basque Country</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2008/11/07/world-plone-day-in-the-basque-country</rss:link>       

        <rss:description>Our company office space hosts today the World Plone Day.</rss:description>

        <content:encoded>
          <![CDATA[
          
<p><a class="external-link" href="http://plone.org/events/wpd">World Plone Day</a> is happening today in over 30 cities around the world. We organised a local meeting in the Basque Country, and talks and mini-workshops are happening around me just as I write these lines.</p>
<p><a href="http://www.argazkiak.org/photo/world-plone-day-2008/?utm_medium=embedded&amp;utm_content=image"><img src="http://argazkiak.s3.amazonaws.com/b54a3a768e9916e2e7204877e5e3ce25_c.jpg" alt="" /></a><br />Argazkiak.org | <a href="http://www.argazkiak.org/photo/world-plone-day-2008/?utm_medium=embedded&amp;utm_content=text">World Plone Day 2008</a> © cc-by-sa: <a href="http://www.argazkiak.org/codesyntax?utm_medium=embedded&amp;utm_content=text">codesyntax</a></p>
<p>Some 30 people gathered <a class="external-link" href="http://www.tagzania.com/item/9952">here</a> today, and we are happy to see webmasters that edit some of the Plone websites that <a class="external-link" href="../../.">CodeSyntax</a> developed.</p>
<p><a href="http://www.argazkiak.org/photo/oier-joxe-iban/?utm_medium=embedded&amp;utm_content=image"><img src="http://argazkiak.s3.amazonaws.com/bdecdc95988994e8b76d01c2093babd7_c.jpg" alt="" /></a><br />Argazkiak.org | <a href="http://www.argazkiak.org/photo/oier-joxe-iban/?utm_medium=embedded&amp;utm_content=text">Oier, Joxe, Iban</a> © cc-by-sa: <a href="http://www.argazkiak.org/codesyntax?utm_medium=embedded&amp;utm_content=text">codesyntax</a></p>
<p>Above, editors of community website <a class="external-link" href="http://www.dantzan.com">Dantzan.com</a>, Oier Araolaza; from <a class="external-link" href="http://www.mondragon.edu">Mondragon University</a>, Joxe Aranzabal; and from local newssite <a class="external-link" href="http://Goiena.net">Goiena.net</a>, Iban Arantzabal.</p>
<p>One of our customers also volunteered to talk. Jabier Santamaria is the engineer behind a <a class="external-link" href="http://www.plonegov.org/">Plonegov</a> / Udalplone (our local brand for this Plone project to create websites for the public administration) website, the one for the town council of <a class="external-link" href="http://www.amorebieta-etxano.net">Amorebieta-Etxano</a>.</p>
<p><a href="http://www.argazkiak.org/photo/jabier-santamaria/?utm_medium=embedded&amp;utm_content=image"><img src="http://argazkiak.s3.amazonaws.com/fb2cea81b6633562eb040982073ea009_c.jpg" alt="" /></a><br />Argazkiak.org | <a href="http://www.argazkiak.org/photo/jabier-santamaria/?utm_medium=embedded&amp;utm_content=text">Jabier Santamaria</a> © cc-by-sa: <a href="http://www.argazkiak.org/codesyntax?utm_medium=embedded&amp;utm_content=text">codesyntax</a></p>
<p>We've been happy to welcome as well other Plone creators in the Basque Country, not only sites developed by us. Jesus Romo, of the virtual campus of the <a class="external-link" href="http://www.ehu.es">University of the Basque Country</a>, has explained how they use Plone in their <a class="external-link" href="http://ekasi.ehu.es/">eKasi elearning</a> project.</p>
<p><a href="http://www.argazkiak.org/photo/jesus-romo-ehu/?utm_medium=embedded&amp;utm_content=image"><img src="http://argazkiak.s3.amazonaws.com/b9cd13e6065c9a86ccbc443976ac24f7_c.jpg" alt="" /></a><br />Argazkiak.org | <a href="http://www.argazkiak.org/photo/jesus-romo-ehu/?utm_medium=embedded&amp;utm_content=text">Jesus Romo, EHU</a> © cc-by-sa: <a href="http://www.argazkiak.org/codesyntax?utm_medium=embedded&amp;utm_content=text">codesyntax</a></p>
<p>More pictures from this day <a href="http://www.flickr.com/photos/luistxo/tags/worldploneday2008/">in Flickr</a>. And the <a href="http://www.scribd.com/people/documents/5058/folder/47693">slides from the presentations</a> made by CodeSyntax coworkers today.</p>

          ]]>
        </content:encoded>        

        <dc:date>2008-11-07T10:20:00+01:00</dc:date>

        <dcterms:modified>2008-11-07T13:41:33+01:00</dcterms:modified>

        <dc:creator>Luistxo Fernandez</dc:creator>

        

        
            <dc:subject>plone</dc:subject>
        
        
            <dc:subject>worldploneday2008</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2008/10/20/open-source-world-conference-malaga-2008">

        <rss:title>Open Source World Conference Malaga 2008</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2008/10/20/open-source-world-conference-malaga-2008</rss:link>       

        

        <content:encoded>
          <![CDATA[
          
<div>
<div id="parent-fieldname-text" class="kssattr-atfieldname-text kssattr-templateId-widgets/rich kssattr-macro-rich-field-view inlineEditable">
<p>We are taking part in the <a class="external-link" href="http://www.opensourceworldconference.com/">Open Source World Conference</a> that will be held at the <a class="external-link" href="http://www.tagzania.com/item/89650">Malaga's Trade Fairs and Congress Center </a>on 20-22 October.&nbsp; A great Conference, more than 8,000 people are expected to attend to the conference, the exhibition and complementary activities area is to extend to over 6500 m² and with world-level open source software communities participation.</p>
<p>I hope to attend to some events in which we participate.</p>
<p>&nbsp;</p>
<h3><strong>OSOR</strong>, Open Source Observatory <br /></h3>
<p><img class="image-inline image-inline" src="../../taller-cs/blog/uploads/logoosor.jpg/image_preview" alt="Observatorio Software Libre OSOR" /></p>
<p>On Monday is the <strong>OSOR</strong>, <a class="external-link" href="http://www.osor.eu/">Open Source </a><a class="external-link" href="http://www.osor.eu/">Observatory and </a><a class="external-link" href="http://www.osor.eu/">Repository</a>
for European Public Administrations&nbsp;<strong> Launch Event a</strong><strong>t the Open Source World Conference.</strong></p>
<a class="external-link" href="http://www.plonegov.org/">The <span class="highlightedGlossaryTerm">OSOR</span> is a platform actively supporting the sharing of OSS-based eGovernment applications and experiences across Europe, and PloneGov</a> project is a best practice example in the area. Xavier Heymans, <a class="external-link" href="http://www.zeapartners.org/Members/codesyntax">ZEA Partners</a>, presents the <strong>PloneGov initiative</strong>.<br />
<p>&nbsp;</p>
<h3>Morfeo project</h3>
<p><a class="external-link" href="http://morfeo-project.org/">Morfeo project </a>and community is collaborating with a stand and 8 Morfeo-related ta<img class="image-right" src="../../taller-cs/blog/uploads/morfeoshirtlogowhite.thumbnail.PNG/image_mini" alt="Morfeo" />lks and workshops.</p>
<p>Morfeo community is a well <em>open innovation model, </em>and tomorrow you have a interesting speech about&nbsp; <em>"MORFEO: the development of open source software as part of the strategy for materializing the future Internet of Service</em>s" or the Miguel Ángel Cañas and Marcos Reyes speech about EzWeb platform: <em>"EzWeb: an open source application mashup web platform for the next-generation SOA and the future Internet of Services"</em></p>
<p>&nbsp;</p>
<img class="image-inline image-inline" src="uploads/morfeoprojectmalaga.jpg/image_preview" alt="Morfeo Project Malaga" />
<p>&nbsp;</p>
<h3>Plone everywhere</h3>
<p>Btw, I'm talking about&nbsp; <a class="external-link" href="http://www.plonegov.org/">PloneGov</a> , our <strong>e-government solution</strong>, but Plone is everywhere present in Malaga: for example, the  <a class="external-link" href="http://www.opensourceworldconference.com/">Open Source World Conference</a> site (<a class="external-link" href="http://www.opensourceworldconference.com/">1</a>) and the OSOR open source observatory (<a class="external-link" href="http://www.osor.eu/">2</a>) are developped&nbsp; on <a class="external-link" href="http://www.plone.org/">Plone</a>, our main CMS choice, based on Zope and Python, That's a great choice!&nbsp;</p>
</div>
</div>

          ]]>
        </content:encoded>        

        <dc:date>2008-10-20T09:30:00+02:00</dc:date>

        <dcterms:modified>2008-10-22T20:59:38+02:00</dcterms:modified>

        <dc:creator>Eneko Astigarraga</dc:creator>

        

        
            <dc:subject>CSL08</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2008/10/08/welcome-plone-conference-2008">

        <rss:title>Welcome Plone Conference 2008</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2008/10/08/welcome-plone-conference-2008</rss:link>       

        <rss:description>We landed in the USA yesterday afternoon, after a long-long trip from Eibar. Now we are waiting for the afternoon talks to be started. Welcome !</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>We managed to come to the Ronald Reagan Center at 9:00 more or less, got our registration badges and switched on the laptop... but the wifi was down in the main hall... That's the only <em>bug</em> we found in the Conference.</p>
<p>The Conference has started with the logistics information and the Keynote by Alex Limi and Alan Runyan.</p>
<p>Well, we are just recovering from the lunch (mmm, excellent sandwitch!) and waiting for the next talk about Plone 3.1 product migration to start.</p>
<p>More to come later... with photos if we get a stable net conection and upload some photos to Flickr.</p>

          ]]>
        </content:encoded>        

        <dc:date>2008-10-08T20:31:12+02:00</dc:date>

        <dcterms:modified>2008-10-08T20:31:12+02:00</dcterms:modified>

        <dc:creator>Mikel Larreategi</dc:creator>

        

        
            <dc:subject>ploneconf2008</dc:subject>
        
        
            <dc:subject>plone</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2008/09/17/case-study-euskalkultura.com.-improving-the-performance-of-a-plone-site">

        <rss:title>Case study: EuskalKultura.com. Improving the performance of a Plone Site</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2008/09/17/case-study-euskalkultura.com.-improving-the-performance-of-a-plone-site</rss:link>       

        

        <content:encoded>
          <![CDATA[
          
<p>We published <a href="http://www.euskalkultura.com/">EuskalKultura.com</a>
in early June. EuskalKultura is a website for Basque people living far
away from is homeland, mainly in America (both southern and northern
America). It's just a Plone 2.5 with some custom products such as
birthday greetings and other one or two custom archetypes with 3 or 4
fields.</p>
<p>But the main work before publishing it was to import the information of the <a href="http://web.archive.org/web/20070515003751/http://www.euskalkultura.com/">old website</a>.
The old site was a PHP based website with lots and lots of items
(mainly news items but also events, restaurant information, interviews,
...), all of then multilingual, mainly in Basque and Spanish. So we
have to write some scripts to pull the data from the MySQL database and
create the content in Plone throug invokeFactory, with the usual
UnicodeDecodeErrors :)</p>
<p>After testing it we managed to import all the data and create all
that newsitems and events, all of them properly linked thanks to <a href="http://plone.org/products/linguaplone">LinguaPlone</a> to have fully translated website.</p>
<p>Short after publishing the website, we discovered that it was
consuming a lot of RAM. We hosted it in a memory limited account in a
FreeBSD account at <a href="http://highspeedrails.com/">HighSpeedRails</a>,
but we have both excessive use of RAM and constant restarts.
HighSpeedRails provides some scripts to control the memory consumption
of your Zope applications, and restarts it when passes the established
limit. We also tried to upgrade the memory limit, and put it higher,
but our Plone started to eat all available memory in the hosting
service.</p>
<p>So, we decided to reproduce the situation locally, fix it if possible and reproduce again the fixed website.</p>
<p>Thanks to <a href="http://pypi.python.org/pypi/zc.buildout">zc.buildout</a>,
reproducing the environment was quite easy, I just had to checkout the
corresponding buildout from our svn server and run ./bin/buildout. We
downloaded the 1.5 GB size Data.fs and <a href="http://www.flickr.com/photos/libargutxi">Lur</a> wrote a python script to try to reproduce server's load parsing <a href="http://apache.org/">Apache</a> logs. In the meantime, I wrote a harder test-plan, using also Apache logs, to use it with <a href="http://jakarta.apache.org/jmeter/">JMeter</a>, taking many ideas from the <a href="http://www.openplans.org/projects/plone-performance-sprint-2007/benchmarking-with-jmeter">Plone Performance Sprint 2007</a>.</p>
<p>In our initial tests, we easily got our Plone site consume 700 MB
(and growing) of RAM after running it for half an our (or less).</p>
<p>It was our, and client's idea, to be able to select the content featured at the home, so we used <a href="http://plone.org/products/compositepack">CompositePack</a>
to get it. We created a new layout for it, and write a browser view to
avoid featured newsitems appear in the news listing. The code under the
hood, was proved to be totally inefficient, and after some analysis of
the website, we realized that the home page was automatic, I mean, our
client wasn't using that feature.-</p>
<p>Our client, also used newsitems (all of them saved inside a folder)
to create diferent kind of newsitems: short articles, featured
newsitems, common newsitems, ... and wanted to show in the home page
all newsitems except the ones keyworded as XXXX. Again, the code to get
that newsitem was highly inneficient.</p>
<p>So, we decided to get rid of CompositePack for the home page, and to use <a href="http://www.dieter.handshake.de/pyprojects/zope/AdvancedQuery.html">AdvancedQuery</a> to be able to make <em>not</em> queries to the Plone Catalog.</p>
<p>Those minor changes, proved to be great, because the navigation on
the website improved a lot, it was quite faster, and the response time
of the home paged decreased notably.</p>
<p>Another bottleneck was found in the keyword portlet. Our client uses
keywords to tag news items and events, and wanted a way to have a list
of all keywords used in news items and events, each one in the
corresponding section. We fastly created a view getting those keywords
from the catalog (with a catalog query and a inneficient algorithm :)),
and using the strategy copied from <a href="http://plone.org/products/quills">Quills</a>, we created a <a href="http://dev.plone.org/collective/browser/Quills/branches/1.5/traversal.py">traversal adapter</a>
to have a view with all the news items keyworded with the selected one.
The process of getting the list of needed keywords was slow, so we
changed it with a static list of keywords, updated on daily-basis
through a cronjob.</p>
<p>We also moved all news items stored in plain Plone folders to <a href="http://dev.plone.org/plone/browser/CMFPlone/branches/2.5/profiles/default/types/Large_Plone_Folder.xml">Plone Large Folders</a>
(based on BTrees and disabled out-of-the-box in Plone 2.5). We had no
ordering requirements in the news items or events folder, because their
main view is a properly configured Topic/Collection, so the change
wasn't dramatic, but time-consuming. It took hours to cut-and-paste and
recatalog all that news item and events.</p>
<p>We also took a look on all customized templates, and made some improvements to avoid common Plone problems: avoid using <em>getObject</em> once and again, use existing views instead of <em>home-made-scripts</em>, ...</p>
<p>Finaly, we also removed from our buildout some unneeded products,
improved the packaging of our base products and put the
zodb-object-cache option to the default (5000 objects).</p>
<p>After running again the python script and the JMeter test plan <strong>together</strong>, we found that our Plone site wasn't consuming more than 300 MB of RAM, although having the script running all the night. <strong>Incredible!!!</strong></p>
<p>We made some more tests, changin the zodb-object-cache option of our Zope instance, to a more significant value (<a href="http://hvelarde.vox.com/library/post/zodb-performance-a-small-change-can-make-a-big-difference.html">following Hector Velarde's advice</a>).
We tried with 10000, 20000, 30000 or 50000, but we didn't get any
improvement neither in memory consumption nor in CPU usage according to
<em>top</em> (OK, perhaps this is not the way to monitor a process, but
that's the way we were taught ;)), so we decided to set the value to
5000.</p>
<p>So, we downloaded the live Data.fs on friday (thanks <em>cron</em>),
run the news items and events cut-and-paste scripts on saturday and
sunday, make all the changes on monday and re-upload the Data.fs again
on monday midnight. On tuesday, we just made the last configuration
changes, and got it running.</p>
<p>After 8 hours running, it's just consuming 340 MB of RAM, some more
than in our local tests, but far away from the 700 MB-after-5-minutes,
we had in the previous situation.</p>

          ]]>
        </content:encoded>        

        <dc:date>2008-09-17T00:00:00+02:00</dc:date>

        <dcterms:modified>2008-09-24T13:03:09+02:00</dcterms:modified>

        <dc:creator>Mikel Larreategi</dc:creator>

        

        
            <dc:subject>performance</dc:subject>
        
        
            <dc:subject>plone</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2008/04/16/my-plone-doesnt-show-translated-msgids-located-in-a-locales-directory">

        <rss:title>My Plone doesn't show translated msgids located in a locales directory !!</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2008/04/16/my-plone-doesnt-show-translated-msgids-located-in-a-locales-directory</rss:link>       

        

        <content:encoded>
          <![CDATA[
          
<p>In a project I'm currently working on, I have written a product following the <em>new way</em> of writing Plone products: creating an egg and putting its translations in a locales directory.</p>
<p>After translating the msgids, creating the po files and reading once and again the <a href="http://maurits.vanrees.org/weblog/archive/2007/09/i18n-locales-and-plone-3.0">Maurits' post</a>
although I'm on Plone 2.5, I was seeing always the same translated
strings, always in the language my browser was configured in, no matter
I changed the language using Plone's language selector.</p>
<p>After googling a bit, I found this <a href="http://codespeak.net/z3/five/i18n.html">Five and i18n tutorial</a> in which Phillip says:</p>
<blockquote>
<p>The goal of the sprint was to allow both fallback
translation services (PTS, Localizer) and Zope 3 translation domains
come to the same conclusion regarding which language should be chosen.
The use case is that you have a site running Localizer or PTS and a
bunch of "old" products using either one of those for translation. Now
you have an additional, "new" Five-based product using Zope 3
translation domains. Most of the time, a page contains user messages
from more than one domain, so you would all domains be translated to
the same language.</p>
</blockquote>
<p>So, I just have to add an overrides.zcml file to my product (and load it in my buildout), with the following content:<br />
<code><br />
&lt;adapter<br />
for="zope.publisher.interfaces.http.IHTTPRequest"<br />
provides="zope.i18n.interfaces.IUserPreferredLanguages"<br />
factory="Products.Five.i18n.PTSLanguages"<br />
/&gt;</code></p>
<p>Now, Five and Zope3 components of my Plone site, negotiate the
language just like PTS does, so I have correctly translated msgids in
my site.</p>

          ]]>
        </content:encoded>        

        <dc:date>2008-04-16T00:00:00+02:00</dc:date>

        <dcterms:modified>2008-09-24T13:00:29+02:00</dcterms:modified>

        <dc:creator>Mikel Larreategi</dc:creator>

        

        
            <dc:subject>i18n</dc:subject>
        
        
            <dc:subject>plone</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2008/03/05/painless-big-xml-file-parsing-in-python">

        <rss:title>How to parse big XML files in Python</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2008/03/05/painless-big-xml-file-parsing-in-python</rss:link>       

        

        <content:encoded>
          <![CDATA[
          <p>Parsing big  XML files in Python (some 60 MB is already big for me) was a bit painful until now. I used to import <a href="http://docs.python.org/lib/module-xml.dom.minidom.html"><strong>minidom</strong></a> and sometimes <strong><a href="http://docs.python.org/lib/module-xml.sax.html">sax</a></strong>.</p>
<p>The problem with minidom is that the whole XML file loads into memory. Unless you have a 16GB machine, go to get a coffee, as you won't be able to do anything else until the cpu ends processing the file. If you try to do it with SAX, you have to work detecting every element start and end.   Quite crappy.</p>
<p>Today I learned a better solution from <a class="external-link" href="authors/erral">Erral</a>: <strong>use <a href="http://codespeak.net/lxml/">lxml</a> library</strong>. Here is an example so that you see how can we convert an XML file into a list of dicts:</p>
<pre>from lxml import etree
coords = etree.parse("/path/to/your/xml/file").getroot()
coords_list = []
for coord in coords:
    this = {}
    for child in coord.getchildren():
        this[child.tag] = child.text
        coords_list.append(this)</pre>
<p>Quite straightforward, isn't it? It's already in Kelpi: <a href="http://kelpi.com/script/e83d7e">XML to list of dict parsing</a>.</p>
          ]]>
        </content:encoded>        

        <dc:date>2008-03-05T13:20:00+01:00</dc:date>

        <dcterms:modified>2010-07-16T23:23:23+02:00</dcterms:modified>

        <dc:creator>Gari Araolaza</dc:creator>

        

        
            <dc:subject>python</dc:subject>
        
        
            <dc:subject>xml</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2008/02/26/paster-is-your-friend">

        <rss:title>Paster is your friend</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2008/02/26/paster-is-your-friend</rss:link>       

        

        <content:encoded>
          <![CDATA[
          
<p>If you are starting a new <a class="reference" href="http://plone.org/products/plone">Plone</a> project, <a class="reference" href="http://pythonpaste.org/script">paster</a> is definetely your friend. Your necesary and helpful friend.<a class="reference" href="http://pythonpaste.org/script">paster</a>
can be seen as a code generation tool, and perhaps it can be seen as
something to avoid, but it helps, and helps a lot, to write all that <em>boilerplate</em> code you need to write each time you start a <a class="reference" href="http://plone.org/products/plone">Plone</a> project, such as the buildout.cfg file (now that <a class="reference" href="http://pypi.python.org/pypi/zc.buildout">zc.buildout</a> seems to be the <em>de facto</em> standard to manage both development and deployment of <a class="reference" href="http://plone.org/products/plone">Plone</a> projects), skin, css and javascript registratin in a so called <em>theme product</em>, or new profile and content-type registration ina <em>content-type</em> or <em>archetype</em> product.</p>
<p>One of the thing I like the most from <a class="reference" href="http://pythonpaste.org/script">paster</a>
is the '--svn-repository' option. Before using paste, I found myself
many times importing incomplete projects to our svn repository or
deleting and later checkouting products. Now, each time I create a new
product, or egg, I only have to add a
'--svn-repository=http://url-to-my-svn' and I'm done. <a class="reference" href="http://pythonpaste.org/script">paster</a> creates the <em>trunk</em>, <em>branches</em> and <em>tags</em> structure, it checkouts the trunk, adds the files, and everything is set to start working.</p>
<p><a class="reference" href="http://pythonpaste.org/script">paster</a> would be nothing for <a class="reference" href="http://plone.org/products/plone">Plone</a> if <a class="reference" href="http://plone.org/products/zopeskel">ZopeSkel</a> wouldn't exist. <a class="reference" href="http://plone.org/products/zopeskel">ZopeSkel</a> is a collection of <a class="reference" href="http://pythonpaste.org/script">paster</a> templates you can use to create your producs. For example, there is a template to create a <em>theme product</em> or a buildout file or an archetypes based product. To use is, you just have to invoke paster with the name of the template:</p>
<pre>erral@lindari:/tmp$ paster create -t plone3_buildout myproject --svn-repository=http://myurl</pre>
<p>Answer just a couple of questions and you'll have a ready-to-go buildout configuration file in your repository.</p>
<p>The <em>archetype</em> template and the support of local <a class="reference" href="http://plone.org/products/zopeskel">ZopeSkel</a> commands (as <a class="reference" href="http://www.mustap.com/pythonzone_post_234_zopeskel-with-local-commands">explained by Mustapha</a> helps you to create a new <a class="reference" href="http://plone.org/products/archetypes">Archetypes</a> based content-type. But not only it creates the base <em>boilerplate</em>
code. Thanks to the local-command support, you can add new
content-types, new portlets or even new browser views, just anytime
after creating the project. You can add today a browser view, and
tomorrow a new content-type. You just have to worry to invoke the
correct <a title="id2" class="mceItemAnchor" name="id2" href="http://home/erral/Desktop/paster.html#id1"><span class="problematic">`</span></a>paster`command, everything else (add configure.zcml lines, new Generic Setup profile configuration files, etc) is done by <a class="reference" href="http://pythonpaste.org/script">paster</a>:</p>
<pre>erral@lindari:/tmp$ paster create -t archetype my.content
...
erral@lindari:/tmp$ cd my.content/
erral@lindari:/tmp$ ls
erral@lindari:/tmp/my.content$ paster addcontent --list
Available templates:
  atschema:     A handy AT schema builder
  contenttype:  A content type skeleton
  portlet:      A Plone 3 portlet
  view:         A browser view skeleton
  zcmlmeta:     A ZCML meta directive skeleton
erral@lindari:/tmp/my.content$ ls my/content/
browser    configure.zcml  __init__.py    portlets  tests
config.py  content         interfaces.py  profiles  tests.py
erral@lindari:/tmp/my.content$ paster addcontent contenttype
...
erral@lindari:/tmp/my.content$ ls my/content/content
configure.zcml  __init__.py  mynewcontenttype.py</pre>
<p>Awesome !!!</p>
<p>Many people don't like code generation tools. I don't know I should call <a class="reference" href="http://pythonpaste.org/script">paster</a> a code generation tool or a <em>helpful-boilerplate-writing-avoider-tool</em>. Is something <strong>you will want to use</strong> after trying it for the first time.</p>

          ]]>
        </content:encoded>        

        <dc:date>2008-02-26T12:58:18+01:00</dc:date>

        <dcterms:modified>2008-09-24T12:58:18+02:00</dcterms:modified>

        <dc:creator>Mikel Larreategi</dc:creator>

        

        
            <dc:subject>python</dc:subject>
        
        
            <dc:subject>plone</dc:subject>
        
        
            <dc:subject>paster</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://www.codesyntax.com/cs-workshop/blog/2008/01/22/using-plone4artistsaudio-in-a-zc.buildout-based-plone-installation">

        <rss:title>Using Plone4ArtistsAudio in a zc.buildout based Plone installation</rss:title>

        <rss:link>http://www.codesyntax.com/cs-workshop/blog/2008/01/22/using-plone4artistsaudio-in-a-zc.buildout-based-plone-installation</rss:link>       

        

        <content:encoded>
          <![CDATA[
          
<p>For two recently launched websites (<a title="Karkara.com: Orioko eta Aiako orainkaria" href="http://www.karkara.com/">Karkara.com</a> and <a title="Eibar.ORG: Eibarko peoria" href="http://eibar.org/">Eibar.org</a>) I have used <a href="http://plone4artists.org/products/plone4artistsaudio/">Plone4ArtistsAudio,</a> to easily create an audio album with podcasting capabilities without creating a new content-type. P4AAudio, is a product for <a href="http://plone.org/">Plone</a> that exposes some python libraries to re-use common Plone content-types, like Files, to use them like an audio album.</p>
<p>For example, Gari has in <a href="http://eibar.org/blogak/teknosexua">his blog</a> a folder called <em>podcast,</em> where he uploads <a href="http://eibar.org/blogak/teknosexua/podcast">his radio programs</a> broadcasted by <a title="http://www.eitb.com/euskadiirratia/" href="http://www.eitb.com/">Euskadi Irratia</a>
every two weeks. I added Plone4ArtistsAudio to this Plone installation
and enabled media in this folder, and only in this folder, and all
audio files uploaded like Plone standard files were audio enhanced <em>automagically</em> to have this pretty look and feel.</p>
<p><img class="image-inline" src="uploads/podcastgari.jpg/image_preview" alt="Gari's podcast example" /></p>
<p>This is pretty cool: I had to add no custom content-type (so, no new
portal types) to Plone. Some zope3 concepts like interfaces, adaptation
or event subscribers are used by Plone4ArtistsAudio to create this
product.</p>
<p>But everything has its cons. The installation of Plone4ArtistsAudio was a pain. In our latest projects we have used <a href="http://pypi.python.org/pypi/zc.buildout">zc.buildout</a> to deploy our sites following <a href="http://martinaspeli.net/">Martin</a>'s <a title="zc.buildout tutorial" href="http://plone.org/documentation/tutorial/buildout">tutorial on Plone.org</a> and many other suggestions from Plone community.</p>
<p>Plone4ArtistsAudio is just a bundle of python modules p4a.audio,
p4a.ploneaudio, p4a.common, p4a.z2utils and plone.app.form. It ships
all these modules inside a folder called pythonlib and it add this
folder to the sys.path when loading.</p>
<p>For some reason, this way of including the modules in the PYTHONPATH is not compatible with the <em>buildout way of working</em>, because when starting, zope complained about plone.app.form not being found.</p>
<p>After some searching on the Internet, I found that <a href="http://tinyurl.com/2clwma">something similar</a> happened with <a href="http://plonegetpaid.com/">PloneGetPaid</a>
but I couldn't fix it. So, after some help by Tim Terlegård, I decided
to leave Plone4ArtistsAudio in my products folder, but add the
libraries it ships as develop-eggs. Be careful, you cannot add this
libraries directly as installable eggs from the PyPI, because some of
them are marked to be zip_safe eggs, which aren't because they need the
zcml files inside them loaded by Zope.</p>
<p>So, my buildout.cfg file is now something like this:</p>
<pre>[buildout]
newest = false
index = http://download.zope.org/ppix
versions = versions

parts =
    plone
    zope2
    productdistros
    cachefu
    instance zopepyeggs =
    elementtree
    p4a.audio
    p4a.common
    p4a.fileimage
    p4a.ploneaudio
    p4a.z2utils
    plone.app.form

develop =
    src/p4a.audio
    src/p4a.common
    src/p4a.fileimage
    src/p4a.ploneaudio
    src/p4a.z2utils
    src/plone.app.form  [...]</pre>
<p>And svn:externals set to the following URLs inside src directory:</p>
<pre>p4a.audio http://www.plone4artists.org/svn/projects/p4a.audio/tags/release-1.0.1/
p4a.ploneaudio http://www.plone4artists.org/svn/projects/p4a.ploneaudio/tags/release-1.0.1/
p4a.common http://www.plone4artists.org/svn/projects/p4a.common/tags/release-1.0/
p4a.z2utils http://www.plone4artists.org/svn/projects/p4a.z2utils/tags/release-1.0/
p4a.fileimage http://www.plone4artists.org/svn/projects/p4a.fileimage/tags/release-1.0/
plone.app.form -r 18164 https://svn.plone.org/svn/plone/plone.app.form/branches/plone-2.5/</pre>
<p>So, Plone4ArtistsAudio is a great product, it provides not only a
nice interface without adding new content types, but also uses zope3
concepts like interfaces, adapters and subscriber and it also provides
a podcast RSS feed, but its installation is not as easy as dropping the
product in the Products folder.</p>
<p>Wow, this first post was quite long, but I hope it will be helpful
for those trying to install Plone4ArtistsAudio in their buildout based
Plone.</p>
<p>Happy <em>Ploning</em> and happy <em>buildouting..</em> ;)</p>

          ]]>
        </content:encoded>        

        <dc:date>2008-01-22T00:00:00+01:00</dc:date>

        <dcterms:modified>2008-10-01T12:46:11+02:00</dcterms:modified>

        <dc:creator>Mikel Larreategi</dc:creator>

        

        
            <dc:subject>plone4artists</dc:subject>
        
        
            <dc:subject>buildout</dc:subject>
        
        
            <dc:subject>plone</dc:subject>
        

    </rss:item>

    

</rdf:RDF>
