<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Encolpe's What ? &#187; planet</title>
	<atom:link href="http://encolpe.wordpress.com/category/planet/feed/" rel="self" type="application/rss+xml" />
	<link>http://encolpe.wordpress.com</link>
	<description>Life is freedom and respect</description>
	<lastBuildDate>Sun, 25 Oct 2009 00:26:12 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='encolpe.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/d07731bee1d25c72c9e7a3edbf33b0bb?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Encolpe's What ? &#187; planet</title>
		<link>http://encolpe.wordpress.com</link>
	</image>
			<item>
		<title>Which Plone project is your site based on?</title>
		<link>http://encolpe.wordpress.com/2009/10/23/which-plone-project-is-your-site-based-on/</link>
		<comments>http://encolpe.wordpress.com/2009/10/23/which-plone-project-is-your-site-based-on/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 21:55:01 +0000</pubDate>
		<dc:creator>encolpe</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[Plone 2.5]]></category>
		<category><![CDATA[Plone 3.0]]></category>
		<category><![CDATA[Plone 3.1]]></category>
		<category><![CDATA[Plone 3.2]]></category>
		<category><![CDATA[Plone 3.3]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Zope2]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[planet-en]]></category>
		<category><![CDATA[Plone project]]></category>
		<category><![CDATA[ploneconf2009]]></category>

		<guid isPermaLink="false">http://encolpe.wordpress.com/?p=227</guid>
		<description><![CDATA[Far from the versions war I&#8217;m trying to understand how many people don&#8217;t use Plone &#8220;main&#8221; and choose to use project based on it. This evaluation is getting more difficult that I&#8217;m not able to recense how many projects are based on Plone. We can found some of them in the Plone.org feed and some [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=227&subd=encolpe&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Far from the versions war I&#8217;m trying to understand how many people don&#8217;t use Plone &#8220;main&#8221; and choose to use project based on it. This evaluation is getting more difficult that I&#8217;m not able to recense how many projects are based on Plone. We can found some of them in the Plone.org feed and some others in pypi or in the plone.org products column.</p>
<p>I can easily cite :</p>
<ul>
<li>PloneGov &#8211; <a title="PloneGov" href="http://www.plonegov.org/" target="_blank">http://www.plonegov.org/</a></li>
<li>CommunesPlone &#8211; <a title="Communes Plone" href="http://www.communesplone.org/le-projet" target="_blank">http://www.communesplone.org/le-projet</a></li>
<li>PloneEdu (dead)</li>
<li>educommons &#8211; <a href="http://enpraxis.net/" target="_blank">http://enpraxis.net/</a> (no main page for educommons)</li>
<li>educomponents &#8211; <a href="http://wdok.cs.uni-magdeburg.de/demo/" target="_blank">http://wdok.cs.uni-magdeburg.de/demo/</a></li>
<li>getPaid &#8211; <a href="http://www.plonegetpaid.com/" target="_blank">http://www.plonegetpaid.com/</a></li>
<li>Plone4Artists &#8211; <a href="http://plone4artists.org/" target="_blank">http://plone4artists.org</a></li>
</ul>
<p>But they would be much more.</p>
<p>The Plone Conference in Budapest will be a good place for these projects to gain visibility and to project leaders to talk with the evangelist team to gain a page on Plone.org to show what are their roadmap. It is difficult to find an announce done in a feed or in mailing lists few months ago. It easier to find a page one the official plone.org site if a projects column is created in it. The Plone foundation doesn&#8217;t have to fund them, but can help their communication.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/encolpe.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/encolpe.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/encolpe.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/encolpe.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/encolpe.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/encolpe.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/encolpe.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/encolpe.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/encolpe.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/encolpe.wordpress.com/227/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=227&subd=encolpe&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://encolpe.wordpress.com/2009/10/23/which-plone-project-is-your-site-based-on/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfe0f9ff13a511088bc2e4e9f42ae808?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">encolpe</media:title>
		</media:content>
	</item>
		<item>
		<title>La fondation Plone sort la version 3.3 et met à jour son site</title>
		<link>http://encolpe.wordpress.com/2009/08/24/la-fondation-plone-sort-la-version-3-3-et-met-a-jour-son-site/</link>
		<comments>http://encolpe.wordpress.com/2009/08/24/la-fondation-plone-sort-la-version-3-3-et-met-a-jour-son-site/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 14:11:18 +0000</pubDate>
		<dc:creator>encolpe</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[Plone 3.3]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[fr]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[planet-fr]]></category>
		<category><![CDATA[ArchGenXML]]></category>
		<category><![CDATA[CommunesPlone]]></category>
		<category><![CDATA[getPaid]]></category>
		<category><![CDATA[plone 3.3]]></category>
		<category><![CDATA[Plone fundation]]></category>
		<category><![CDATA[Plone4Artists]]></category>
		<category><![CDATA[PloneGov]]></category>

		<guid isPermaLink="false">http://encolpe.wordpress.com/?p=216</guid>
		<description><![CDATA[Après 5 versions candidates la fondation Plone valide enfin la nouvelle mouture tant attendue du système de gestion de contenu Plone. Cette version était prévue pour sortir en avril, mais une série de bugs critiques lors de la dernière phase de validation a obligé à repousser sans cesse la date de sortie.
La fondation en a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=216&subd=encolpe&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Après 5 versions candidates la fondation Plone valide enfin la nouvelle mouture tant attendue du système de gestion de contenu <a title="Définition Wikipédia" href="http://fr.wikipedia.org/wiki/Plone" target="_blank">Plone</a>. Cette version était prévue pour sortir en avril, mais une série de bugs critiques lors de la dernière phase de validation a obligé à repousser sans cesse la date de sortie.<br />
La fondation en a aussi profité pour revoir le look du site <a href="http://plone.org/" target="_blank">http://plone.org</a> en utilisant les dernière technologie utilisée dans Plone 3.</p>
<p>La plateforme continue de se diversifier :</p>
<ul>
<li><a href="http://www.plonegetpaid.com/" target="_blank">Get Paid</a> pour gérer votre site e-commerce</li>
<li><a href="http://pypi.python.org/pypi/archgenxml" target="_blank">ArchGenXML</a> pour générer le code à partir de diagrammes <a href="http://fr.wikipedia.org/wiki/Unified_Modeling_Language" target="_blank">UML</a></li>
<li><a href="http://plone4artists.org/" target="_blank">Plone4Artists</a> pour les artistes qui veulent gérer eux-mêmes leur communauté</li>
<li><a href="http://www.communesplone.org/le-projet" target="_blank">Communes Plone</a> qui regroupe plusieurs communes belges qui souhaitent mutualiser le développement de leur système d&#8217;information.</li>
<li><a href="http://www.plonegov.org/" target="_blank">PloneGov</a> pour l&#8217;administration &#8211; grand prix du jury aux Lutèce 2007</li>
</ul>
<ul>
<li><img src="http://linuxfr.org/images/en.png" alt="[en]" /> <a href="http://pypi.python.org/pypi/Plone/3.3" target="_blank">Plone 3.3 sur Pypi</a></li>
<li><img src="http://linuxfr.org/images/en.png" alt="[en]" /> <a title="http://plone.org/products/plone" href="http://plone.org/products/plone" target="_blank">La page officielle sur Plone.org</a></li>
<li><img src="http://linuxfr.org/images/en.png" alt="[en]" /> <a title="http://plone.org/products/plone/releases/3.3" href="http://plone.org/products/plone/releases/3.3" target="_blank">Liste des améliorations incluses dans Plone 3.3</a></li>
</ul>
<p>Cette mouture apporte plusieurs nouveautés intéressantes. Tout d&#8217;abord <a href="http://vincentfretin.ecreall.com/" target="_blank">Vincent Fretin</a> est devenu le nouveau coordinateur des traductions au niveau mondial. Il a aussi fait le ménage dans la traduction française qui atteint toujours les 100% de complétion depuis la sortie de Plone 2.1. Il a été aussi très actif pour la chasse aux bugs dans les releases canadidate et a été le contributeur principal de la dernière mouture de ArchGenXML 2.</p>
<p>Les évolutions :</p>
<ul>
<li>les liens externes renvoient directement vers les sites concernés ;</li>
<li>les ressources (CSS, JavaScript, KSS) peuvent être maintenant gérées de manière conditionnelle (IE6Fixes.css n&#8217;est chargé qu&#8217;en présence de IE6 par exemple) ;</li>
<li>l&#8217;édition en ligne est finalement désactivée par défaut, car elle est trop lourde pour IE6 ;</li>
<li>le verrouillage des documents lors de l&#8217;édition est maintenant configurable ;</li>
<li>l&#8217;historique des documents contient les modifications de workflow et les notes ajoutées lors de la modification des documents ;</li>
<li>les évènements supportent <a href="http://fr.wikipedia.org/wiki/ICalendar" target="_blank">iCalendar</a> par défaut ;</li>
<li>le chargement du fichier ZCML des extensions de Plone devient automatique.</li>
</ul>
<p>Le site <a href="http://plone.org/" target="_blank">Plone</a> utilise maintenant (<a href="http://pypi.python.org/pypi/collective.xdv" target="_blank"> http://pypi.python.org/pypi/collective.xdv</a> ) pour gérer son design. Ce produit permet de créer un design dans une page HTML statique et d&#8217;appliquer des règles de transformation <a href="http://fr.wikipedia.org/wiki/Extensible_Stylesheet_Language_Transformations" target="_blank">XSLT</a> pour adapter cette page statique à un site dynamique. Il est basé sur la technologie <a href="http://deliverance.openplans.org/" target="_blank">Deliverance</a>. Plus d&#8217;informations sont disponibles dans le nouveau <a href="http://plone.org/documentation/manual/theming" target="_blank"> manuel de gestion des thèmes</a> dans Plone.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/encolpe.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/encolpe.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/encolpe.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/encolpe.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/encolpe.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/encolpe.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/encolpe.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/encolpe.wordpress.com/216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/encolpe.wordpress.com/216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/encolpe.wordpress.com/216/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=216&subd=encolpe&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://encolpe.wordpress.com/2009/08/24/la-fondation-plone-sort-la-version-3-3-et-met-a-jour-son-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfe0f9ff13a511088bc2e4e9f42ae808?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">encolpe</media:title>
		</media:content>

		<media:content url="http://linuxfr.org/images/en.png" medium="image">
			<media:title type="html">[en]</media:title>
		</media:content>

		<media:content url="http://linuxfr.org/images/en.png" medium="image">
			<media:title type="html">[en]</media:title>
		</media:content>

		<media:content url="http://linuxfr.org/images/en.png" medium="image">
			<media:title type="html">[en]</media:title>
		</media:content>
	</item>
		<item>
		<title>On move for Lyon and Plone</title>
		<link>http://encolpe.wordpress.com/2009/07/26/on-move-for-lyon-and-plone/</link>
		<comments>http://encolpe.wordpress.com/2009/07/26/on-move-for-lyon-and-plone/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 11:38:38 +0000</pubDate>
		<dc:creator>encolpe</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[fr]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[planet-en]]></category>
		<category><![CDATA[planet-fr]]></category>
		<category><![CDATA[CPS]]></category>
		<category><![CDATA[Lyon]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Plone]]></category>
		<category><![CDATA[Quadra Informatique]]></category>
		<category><![CDATA[Zope]]></category>

		<guid isPermaLink="false">http://encolpe.wordpress.com/?p=212</guid>
		<description><![CDATA[I leave Alterway two monthes ago for Quadra Informatique. It is a  more generic service company that choose Plone 4 years ago, and more recently Magento. They not seemed to be very active in the  community for now because they mainly proposed patches and features inside existing products more than creating their own products. They [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=212&subd=encolpe&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I leave Alterway two monthes ago for <a title="Quadra Informatique" href="http://www.quadra-informatique.fr/" target="_blank">Quadra Informatique</a>. It is a  more generic service company that choose Plone 4 years ago, and more recently Magento. They not seemed to be very active in the  community for now because they mainly proposed patches and features inside existing products more than creating their own products. They have some good products in their boxes and we prepare some official releases for September and others for the end of the year. These projects will be released under Cecil-B license (<a title="Cecill licences" href="http://www.cecill.info/licences.en.html" target="_blank">http://www.cecill.info/licences.en.html</a>) a BSD-like license.</p>
<p>I will not only developping with Plone for them&#8230; and I&#8217;m leaving Paris this week to go in <a title="Lyon's official website" href="http://www.lyon.fr/vdl/sections/en/" target="_blank">Lyon</a>. The goal is  to develop Zope/Plone as a local company in this city that choosed Zope/CPS to develop their website some years ago. For some problems that only french telecom legislation can create I will not have a regular network connexion until the end of August.</p>
<p>Have a good vacation and see you in September.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/encolpe.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/encolpe.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/encolpe.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/encolpe.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/encolpe.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/encolpe.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/encolpe.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/encolpe.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/encolpe.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/encolpe.wordpress.com/212/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=212&subd=encolpe&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://encolpe.wordpress.com/2009/07/26/on-move-for-lyon-and-plone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfe0f9ff13a511088bc2e4e9f42ae808?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">encolpe</media:title>
		</media:content>
	</item>
		<item>
		<title>Get your egg version form the metadata.xml file</title>
		<link>http://encolpe.wordpress.com/2009/07/13/get-your-egg-version-form-the-metadata-xml-file/</link>
		<comments>http://encolpe.wordpress.com/2009/07/13/get-your-egg-version-form-the-metadata-xml-file/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 10:03:20 +0000</pubDate>
		<dc:creator>encolpe</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[Plone 3.0]]></category>
		<category><![CDATA[Plone 3.1]]></category>
		<category><![CDATA[Plone 3.2]]></category>
		<category><![CDATA[Plone 3.3]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[planet-en]]></category>
		<category><![CDATA[egg]]></category>
		<category><![CDATA[metadata.xml]]></category>
		<category><![CDATA[version]]></category>

		<guid isPermaLink="false">http://encolpe.wordpress.com/?p=204</guid>
		<description><![CDATA[A quick tip useful to keep the coherence between the setup.py file of your egg and the profiles/default/metadata.xml file. The simpliest way to do this is to compute version value in setup.py from the metadata.xml. In the setup.py file remove the version = &#8216;x.y.z&#8217; line by the following code:
from xml.dom import minidom

metadata_file = os.path.join(os.path.dirname(__file__),
  [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=204&subd=encolpe&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A quick tip useful to keep the coherence between the setup.py file of your egg and the profiles/default/metadata.xml file. The simpliest way to do this is to compute version value in setup.py from the metadata.xml. In the setup.py file remove the version = &#8216;x.y.z&#8217; line by the following code:</p>
<pre style="background-color:#e2ebf8;">from xml.dom import minidom

metadata_file = os.path.join(os.path.dirname(__file__),
                             'collective', 'bobo',
                             'profiles', 'default', 'metadata.xml')
metadata = minidom.parse(metadata_file)
version = metadata.getElementsByTagName("version")[0].childNodes[0].nodeValue
version = str(version).strip()</pre>
<p>You can check it works with the command:</p>
<pre style="background-color:#e2ebf8;">python setup.py --version</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/encolpe.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/encolpe.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/encolpe.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/encolpe.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/encolpe.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/encolpe.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/encolpe.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/encolpe.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/encolpe.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/encolpe.wordpress.com/204/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=204&subd=encolpe&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://encolpe.wordpress.com/2009/07/13/get-your-egg-version-form-the-metadata-xml-file/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfe0f9ff13a511088bc2e4e9f42ae808?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">encolpe</media:title>
		</media:content>
	</item>
		<item>
		<title>Manage monkey patches and performance improvement in Plone 3</title>
		<link>http://encolpe.wordpress.com/2009/07/13/manage-monkey-patches-and-performance-improvement-in-plone-3/</link>
		<comments>http://encolpe.wordpress.com/2009/07/13/manage-monkey-patches-and-performance-improvement-in-plone-3/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 09:55:19 +0000</pubDate>
		<dc:creator>encolpe</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Plone 3.0]]></category>
		<category><![CDATA[Plone 3.1]]></category>
		<category><![CDATA[Plone 3.2]]></category>
		<category><![CDATA[Plone 3.3]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[planet-en]]></category>
		<category><![CDATA[collective.monkeypatcher]]></category>
		<category><![CDATA[collective.monkeypatcherpanel]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[PlonePAS]]></category>

		<guid isPermaLink="false">http://encolpe.wordpress.com/?p=197</guid>
		<description><![CDATA[Few days ago Jean-Michel François proposed a useful patch for PlonePAS that can be applied for all Plone release until 3.2. Plone 3.3 will embed this patch.
How can we add this patch in a traceable way for an not so old Plone 3.1 or 3.2 ?
First, we can use the new release  of Products.PlonePAS that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=197&subd=encolpe&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Few days ago Jean-Michel François proposed a useful <a title="patch" href="https://dev.plone.org/plone/ticket/9361" target="_blank">patch</a> for PlonePAS that can be applied for all Plone release until 3.2. Plone 3.3 will embed this patch.</p>
<p>How can we add this patch in a traceable way for an not so old Plone 3.1 or 3.2 ?</p>
<p>First, we can use the new release  of Products.PlonePAS that should be compatible with our Plone installation. The second option is to add a monkey patch in the policy product of our site. One more monkey patch&#8230;</p>
<p>Some projects have so many monkey patches that it is difficult to know where is the code that run your site. Martin Aspeli did a tool to handle monkey patches in an elegant way for Zope 2 and Zope 3: <a href="http://pypi.python.org/pypi/collective.monkeypatcher" target="_blank">collective.monkeypatcher</a>. It allows you to plug  your monkey patches with <a href="http://svn.plone.org/svn/collective/collective.monkeypatcher/trunk/collective/monkeypatcher/tests/dummypatch.zcml" target="_blank">a simple ZCML directive</a>. Later Gilles Lenfant added a control panel for Zope 2 to be able to have a visual way to follow patches with <a href="http://pypi.python.org/pypi/collective.monkeypatcherpanel" target="_blank">collective.monkeypatcherpanel</a>.</p>
<p>How does it works?</p>
<p>In your <em>buildout.cfg</em> add :</p>
<pre style="background-color:#e2ebf8;">eggs +=
   collective.monkeypatcher
   collective.monkeypatcherpanel
zcml +=
   collective.monkeypatcher
   collective.monkeypatcherpanel</pre>
<p>To create patches add a &#8216;<em>patches.py</em>&#8216; file in your egg (if you have more than 2 or 3 patches you should create a directory). Our performance patch looks like this:</p>
<pre style="background-color:#e2ebf8;">import copy

def enumerateUsers( self
                  , id=None
                  , login=None
                  , exact_match=False
                  , **kw
                  ):

    """ See IUserEnumerationPlugin.
    """
    plugin_id = self.getId()

    criteria=copy.copy(kw)
    if id is not None:
        criteria["id"]=id
    if login is not None:
        criteria["login"]=login

    if not kw and id:
        data = self._storage.get(id, None)
        if data is None:
            user_info = []
        else:
            user_info=[ { 'id' : self.prefix + id,
                     'login' : id,
                     'title' : data.get('fullname', id),
                     'description' : data.get('fullname', id),
                     'email' : data.get('email', ''),
                     'pluginid' : plugin_id } ]
    else:
        users=[ (user,data) for (user,data) in self._storage.items()
                    if self.testMemberData(data, criteria, exact_match)]

         user_info=[ { 'id' : self.prefix + user_id,
                     'login' : user_id,
                     'title' : data.get('fullname', user_id),
                     'description' : data.get('fullname', user_id),
                     'email' : data.get('email', ''),
                     'pluginid' : plugin_id } for (user_id, data) in users ]

        return tuple(user_info)</pre>
<p>In the <em>configure.zcml</em> of your policy product add an include:</p>
<pre style="background-color:#e2ebf8;">&lt;include file="patches.zcml" /&gt;</pre>
<p>The file patches.zcml will contain following code:</p>
<pre style="background-color:#e2ebf8;">&lt;configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:monkey="http://namespaces.plone.org/monkey"
    i18n_domain="collective.monkeypatcher"&gt;

    &lt;include package="collective.monkeypatcher" file="meta.zcml" /&gt;

    &lt;monkey:patch
       original="enumerateUsers"
       replacement=".patches.enumerateUsers"
       docstringWarning="false"
    /&gt;

&lt;/configure&gt;</pre>
<p>Run your buildout, start your site and the patch is applied. You can go in the Zope Control Panel to see how many patches are already compatible with this tool.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/encolpe.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/encolpe.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/encolpe.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/encolpe.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/encolpe.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/encolpe.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/encolpe.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/encolpe.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/encolpe.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/encolpe.wordpress.com/197/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=197&subd=encolpe&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://encolpe.wordpress.com/2009/07/13/manage-monkey-patches-and-performance-improvement-in-plone-3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfe0f9ff13a511088bc2e4e9f42ae808?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">encolpe</media:title>
		</media:content>
	</item>
		<item>
		<title>Le libre en question</title>
		<link>http://encolpe.wordpress.com/2009/07/07/192/</link>
		<comments>http://encolpe.wordpress.com/2009/07/07/192/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 21:47:32 +0000</pubDate>
		<dc:creator>encolpe</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[fr]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[planet-fr]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[Licensing]]></category>
		<category><![CDATA[Plone]]></category>
		<category><![CDATA[Plone fundation]]></category>
		<category><![CDATA[Zope]]></category>

		<guid isPermaLink="false">http://encolpe.wordpress.com/?p=192</guid>
		<description><![CDATA[Aujourd&#8217;hui un client nous met le couteau sous la gorge d&#8217;une manière assez peu banale. Il y a quelques années il a choisi de prendre une plateforme libre pour développer ses outils internes et une partie des services qu&#8217;il propose à ses clients.
Son choix a été de prendre Plone pour les raisons suivantes :

pas de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=192&subd=encolpe&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Aujourd&#8217;hui un client nous met le couteau sous la gorge d&#8217;une manière assez peu banale. Il y a quelques années il a choisi de prendre une plateforme libre pour développer ses outils internes et une partie des services qu&#8217;il propose à ses clients.</p>
<p>Son choix a été de prendre Plone pour les raisons suivantes :</p>
<ul>
<li>pas de coût de licence</li>
<li>un développement via l&#8217;interface web de Zope quasiment sans avoir à écrire de code</li>
<li>une documentation abondante et une communauté réactive</li>
<li>présence en France d&#8217;acteurs majeurs du développement international de la plateforme</li>
<li>une licence libre (la GPL) qui lui permet de penser que la plateforme ne deviendra jamais propriétaire</li>
</ul>
<p>Le projet a eu des hauts et des bas. Il y a eu des formations externes, de la maintenance externe, du développement interne et externe. Globalement le projet a dépassé les espérances et est passé en mode industriel il y a un an. Le client possède toutes les sources et la connaissance de son applicatif. Il est maître de son destin. Avec le recul il est satisfait de cette plateforme et de son coût.</p>
<p>Ayant acquis une maitrise certaine de la gestion de contenu dans son corps de métier, ce client aimerai développer un module métier qu&#8217;il utilisera pour lui dans un premier temps, mais qu&#8217;il compte aussi revendre à ses concurrents à moyen terme. Pour cela ce module sera vedu comme une technologie propriétaire. Cela soulève une série de questions politiques et juridiques en interne (attention, certains de ces arguments sont partiellement erronés ) :</p>
<ol>
<li>si un site web utilise du code GPL pour fournir un service à des clients, un client peut demander à avoir accès au code source de l&#8217;application puisqu&#8217;il paie pour ce service</li>
<li>si nous fournissons des sources sous GPL notre code source ne peut être commercialisé à des tiers sans qu&#8217;ils soient obligés de reverser ce code dans le domaine public</li>
<li>si nous utilisons une extension sous GPL tout le code source devient GPL</li>
</ol>
<p>Sur le fond je comprends la démarche de la vente d&#8217;un savoir faire que l&#8217;on veut protéger. Chez ce client tout ces constats ont amené a une réponse : pour faire du propriétaire il faut se baser sur une technologie propriétaire qui permet de faire ce que l&#8217;on veut une fois achetée.</p>
<p>Que faire ? Faut-il abandonner tous les développements en Plone  ? Il est tout à fait possible de réaliser un tel module propriétaire avec Zope et de l&#8217;intégrer avec d&#8217;autres systèmes sans que cela pose de problèmes de licence. Par contre, le Core de Plone 2 et de Plone 3 sont sous licence GPLv2 ce qui provoque un certain malaise. En anticipant de tels questionnements, la fondation Plone a décidé que le Core de Plone 4 serait sous licence BSD et  qu&#8217;elle accepterait que les modules d&#8217;extensions soient sous licence compatibles LPGL et GPL. Elle accepte aussi que des plateformes sous licence propriétaire soit développé à partir de Plone.</p>
<p>Dans notre cas précis ce questionnement est orienté : il faut vendre notre savoir faire pour générer des royalties et améliorer la rentabilité. Pour cela le choix d&#8217;une technologie libre est risquée et il faut adopter en masse une technologie propriétaire quitte à remettre en cause les développements en cours. Les coûts à justifier sont tels qu&#8217;il n&#8217;est pas possible de tolérer qu&#8217;un autre technologie puisse damer le pion à la technologie propriétaire à court terme car le choix de la technologie propriétaire est celui fait à moyen terme.</p>
<p>Il nous est proposé de fournir un canva pour fabriquer ce module dans la technologie propriétaire qui soit intégrable à Plone. Et dans tous les cas Plone va être abandoné. Autant nous mettre la corde au cou nous-même et attendre le bourreau.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/encolpe.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/encolpe.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/encolpe.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/encolpe.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/encolpe.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/encolpe.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/encolpe.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/encolpe.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/encolpe.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/encolpe.wordpress.com/192/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=192&subd=encolpe&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://encolpe.wordpress.com/2009/07/07/192/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfe0f9ff13a511088bc2e4e9f42ae808?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">encolpe</media:title>
		</media:content>
	</item>
		<item>
		<title>collective.releaser missing releases and upload bug</title>
		<link>http://encolpe.wordpress.com/2009/06/29/collective-releaser-missing-releases-and-upload-bug/</link>
		<comments>http://encolpe.wordpress.com/2009/06/29/collective-releaser-missing-releases-and-upload-bug/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 23:42:46 +0000</pubDate>
		<dc:creator>encolpe</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[planet-en]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[collective.releaser]]></category>
		<category><![CDATA[Quadra Informatique]]></category>

		<guid isPermaLink="false">http://encolpe.wordpress.com/?p=186</guid>
		<description><![CDATA[Since few weeks we have problems to use collective.releaser when we use release-packages: packages are not uploaded to our private pypi or are published in pypi when they should be private and public packages are not published at all.
collective.releaser seems be a victim of this bug as the 0.6.2 release was never published on pypi [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=186&subd=encolpe&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Since few weeks we have problems to use collective.releaser when we use <em><strong>release-packages</strong></em>: packages are not uploaded to our private pypi or are published in pypi when they should be private and public packages are not published at all.<br />
<em>collective.releaser</em> seems be a victim of this bug as the 0.6.2 release was never published on pypi even if the tag was done 2 months ago.</p>
<p>Today ready this:<br />
<a href="http://dev.plone.org/collective/browser/collective.releaser/tags/0.6.2/collective/releaser/commands.py#L107">collective/releaser/commands.py:L107</a></p>
<p>Line 110, when the expression is matching something the loop continues, then in the line 117 an empty list is in found sometimes.</p>
<p>If you add these two lines after the line 112 you can again upload your releases in cheeseshops:</p>
<pre style="background-color:#e2ebf8;">if founded != []:
    break</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/encolpe.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/encolpe.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/encolpe.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/encolpe.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/encolpe.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/encolpe.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/encolpe.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/encolpe.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/encolpe.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/encolpe.wordpress.com/186/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=186&subd=encolpe&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://encolpe.wordpress.com/2009/06/29/collective-releaser-missing-releases-and-upload-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfe0f9ff13a511088bc2e4e9f42ae808?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">encolpe</media:title>
		</media:content>
	</item>
		<item>
		<title>Heads up: new plone.recipe.pound release</title>
		<link>http://encolpe.wordpress.com/2009/06/03/heads-up-new-plone-recipe-pound-release/</link>
		<comments>http://encolpe.wordpress.com/2009/06/03/heads-up-new-plone-recipe-pound-release/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 00:42:32 +0000</pubDate>
		<dc:creator>encolpe</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[Plone 3.0]]></category>
		<category><![CDATA[Plone 3.1]]></category>
		<category><![CDATA[Plone 3.2]]></category>
		<category><![CDATA[Plone 3.3]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[buildout]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[planet-en]]></category>
		<category><![CDATA[plone.recipe.pound]]></category>
		<category><![CDATA[zc.recipe.cmmi]]></category>

		<guid isPermaLink="false">http://encolpe.wordpress.com/?p=182</guid>
		<description><![CDATA[Since few weeks plone.recipe.pound 0.5.4 was broken with an output like this:
An internal error occured due to a bug in either zc.buildout or in a recipe being used:
Traceback (most recent call last):
File "/tmp/tmpVcq-b1/zc.buildout-1.2.1-py2.4.egg/zc/buildout/buildout.py", line 1509, in main
File "/tmp/tmpVcq-b1/zc.buildout-1.2.1-py2.4.egg/zc/buildout/buildout.py", line 473, in install
File "/tmp/tmpVcq-b1/zc.buildout-1.2.1-py2.4.egg/zc/buildout/buildout.py", line 1091, in _call
File "/home/encolpe/.virtualenvs/internal/preprod/plone.recipe.pound/plone/recipe/pound/build.py", line 74, in install
installed = CMMIRecipe.install(self)
File "/home/encolpe/.virtualenvs/internal/preprod/downloads/dist/zc.recipe.cmmi-1.2.0/src/zc/recipe/cmmi/__init__.py", [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=182&subd=encolpe&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Since few weeks plone.recipe.pound 0.5.4 was broken with an output like this:</p>
<pre style="background-color:#E2EBF8;">An internal error occured due to a bug in either zc.buildout or in a recipe being used:
Traceback (most recent call last):
File "/tmp/tmpVcq-b1/zc.buildout-1.2.1-py2.4.egg/zc/buildout/buildout.py", line 1509, in main
File "/tmp/tmpVcq-b1/zc.buildout-1.2.1-py2.4.egg/zc/buildout/buildout.py", line 473, in install
File "/tmp/tmpVcq-b1/zc.buildout-1.2.1-py2.4.egg/zc/buildout/buildout.py", line 1091, in _call
File "/home/encolpe/.virtualenvs/internal/preprod/plone.recipe.pound/plone/recipe/pound/build.py", line 74, in install
installed = CMMIRecipe.install(self)
File "/home/encolpe/.virtualenvs/internal/preprod/downloads/dist/zc.recipe.cmmi-1.2.0/src/zc/recipe/cmmi/__init__.py", line 155, in install
system("make install")
File "/home/encolpe/.virtualenvs/internal/preprod/downloads/dist/zc.recipe.cmmi-1.2.0/src/zc/recipe/cmmi/__init__.py", line 27, in system
raise SystemError("Failed", c)
SystemError: ('Failed', 'make install')</pre>
<p>This recipe directly unherit from zc.recipe.cmmi and act as a wrapper around the CMMIRecipe.install method. Most arguments used are transmitted to the recipe are self attributes or keys in self.options. The version 1.2.0 of this recipe publish the May, 18 moved the way that extra arguments are transmitted:</p>
<ul>
<li>zc.recipe.cmmi 1.1.x:  self.options['extra_options']</li>
<li>zc.recipe.cmmi 1.2.0: self.extra_options (an empty string by default)</li>
</ul>
<p>There&#8217;s no regression tests, neither an entry in the release history. Youenn did a new release of plone.recipe.pound to fix this new behavior.</p>
<p>Morality:</p>
<ul>
<li>if you are using zc.recipe.cmmi 1.1.x you can still use plone.recipe.pound 0.5.4</li>
<li>if you are using zc.recipe.cmmi 1.2.0 or above use plone.recipe.pound 0.5.5</li>
<li>other recipes using zc.recipe.cmmi may be broken</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/encolpe.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/encolpe.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/encolpe.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/encolpe.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/encolpe.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/encolpe.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/encolpe.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/encolpe.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/encolpe.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/encolpe.wordpress.com/182/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=182&subd=encolpe&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://encolpe.wordpress.com/2009/06/03/heads-up-new-plone-recipe-pound-release/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfe0f9ff13a511088bc2e4e9f42ae808?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">encolpe</media:title>
		</media:content>
	</item>
		<item>
		<title>Install a maintenance page without restarting apache</title>
		<link>http://encolpe.wordpress.com/2009/05/08/install-a-maintenance-page-without-restarting-apache/</link>
		<comments>http://encolpe.wordpress.com/2009/05/08/install-a-maintenance-page-without-restarting-apache/#comments</comments>
		<pubDate>Thu, 07 May 2009 22:19:54 +0000</pubDate>
		<dc:creator>encolpe</dc:creator>
				<category><![CDATA[Plone 3.2]]></category>
		<category><![CDATA[Zope2]]></category>
		<category><![CDATA[buildout]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[planet-en]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[fabric]]></category>
		<category><![CDATA[Plone]]></category>
		<category><![CDATA[zc.buildout]]></category>

		<guid isPermaLink="false">http://encolpe.wordpress.com/?p=167</guid>
		<description><![CDATA[These days we are working with fabric to remove some hazard in maintenance.
Recently someone gzip a Data.fs file in production and our customer loose 2 days of work. We choose to use fabric (http://www.nongnu.org/fab/) to limit command line working to the strict minimum.
Now, almost all procedures were added in a fabric factory, from the installation [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=167&subd=encolpe&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>These days we are working with fabric to remove some hazard in maintenance.<br />
Recently someone gzip a Data.fs file in production and our customer loose 2 days of work. We choose to use fabric (<a href="http://www.nongnu.org/fab/">http://www.nongnu.org/fab/</a>) to limit command line working to the strict minimum.</p>
<p>Now, almost all procedures were added in a fabric factory, from the installation of a development environment to the upgrade of the production server. In this last part, we search a solution to put a maintenance page without have to gain root privileges to restart the apache used in frontend. For static or CGI sites you can use a <em><strong>.htaccess</strong></em> file to override the global rules. For a stopped Zope server it doesn&#8217;t help much.</p>
<p>The goal is to use RewriteCond and RewriteRule in a such way that a static HTML file would be displayed when it exists. We can call it &#8216;<em>maintenance.html</em>&#8216; and rename it &#8216;<em>maintenance.html-disabled</em>&#8216; to let the site be displayed normally.</p>
<p>We start with a virtual host generated by <em><a href="http://pypi.python.org/pypi/iw.recipe.squid" target="_blank">iw.recipe.squid</a></em>:</p>
<pre style="background-color:#cadfed;">&lt;VirtualHost *:80&gt;
   ServerName www.gosseyn.fr

   RewriteEngine On
   RewriteLog /my/path/to/squid/parts/squid/log/rewrite_www.gosseyn.fr.log
   RewriteLogLevel 0

   CustomLog /my/path/to/squid//parts/squid/log/access_www.gosseyn.fr.log common
   ErrorLog /my/path/to/squid//parts/squid/log/error_www.gosseyn.fr.log

   ## common rules for squid rewrite rules
   RewriteRule ^(.*)$ - [E=BACKEND_LOCATION:127.0.0.1]
   RewriteRule ^(.*)$ - [E=BACKEND_PORT:8081]
   RewriteRule ^(.*)$ - [E=BACKEND_PATH:site]

   RewriteRule  ^/(.*)/$ http://127.0.0.1:3128/%{ENV:BACKEND_LOCATION}/%{ENV:BACKEND_PORT}/http/%{SERVER_NAME}/80/%{ENV:BACKEND_PATH}/__original_url__/$1 [L,P]
   RewriteRule  ^/(.*)$ http://127.0.0.1:3128/%{ENV:BACKEND_LOCATION}/%{ENV:BACKEND_PORT}/http/%{SERVER_NAME}/80/%{ENV:BACKEND_PATH}/__original_url__/$1 [L,P]

   ## specific rules base on cookie

&lt;/VirtualHost&gt;</pre>
<p>First we need to declare a document root and to bypass all security rules. We create a new path in the root of our buildout folder called &#8216;maintenances_pages&#8217;.</p>
<pre style="background-color:#cadfed;">   DocumentRoot /my/path/to/buildout/prod/maintenance_pages

   &lt;Directory "/my/path/to/buildout/prod/maintenance_pages"&gt;
       Options None
       AllowOverride None
       Order allow,deny
       allow from all

       &lt;LimitExcept GET&gt;
           Order allow,deny
           allow from all
       &lt;/LimitExcept&gt;
   &lt;/Directory&gt;</pre>
<p>These declaration should satisfy all paranoid BOFH.<br />
Now create a file called maintenance.html within the folder. All code (javascript, CSS and images) must be embeded, this is a limitation of this approach.<br />
Well, how to detect that a file exist on the filesystem from apache. You can do this with the <a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteflags"><strong>flag &#8216;-f&#8217;</strong></a> from the rewrite module:</p>
<pre style="background-color:#cadfed;">    RewriteCond /my/path/to/buildout/prod/maintenance_pages/maintenance.html -f</pre>
<p>Then redirect all pages to our maintenance page:</p>
<pre style="background-color:#cadfed;">   RewriteCond %{REQUEST_URI} !/maintenance.html
   RewriteRule $ /maintenance.html [R=302,L]</pre>
<p>We also need to disable the standard rewrite rules. The easier way to do it is to use &#8216;<strong>!-f</strong>&#8216;.</p>
<pre style="background-color:#cadfed;">   RewriteCond /my/path/to/buildout/prod/maintenance_pages/maintenance.html !-f
   RewriteRule  ^/(.*)/$ http://127.0.0.1:3128/%{ENV:BACKEND_LOCATION}/%{ENV:BACKEND_PORT}/http/%{SERVER_NAME}/80/%{ENV:BACKEND_PATH}/__original_url__/$1 [L,P]
   RewriteCond /my/path/to/buildout/prod/maintenance_pages/maintenance.html !-f
   RewriteRule  ^/(.*)$ http://127.0.0.1:3128/%{ENV:BACKEND_LOCATION}/%{ENV:BACKEND_PORT}/http/%{SERVER_NAME}/80/%{ENV:BACKEND_PATH}/__original_url__/$1 [L,P]</pre>
<p>These rules will not be applied anymore when our maintenance file will be name &#8216;maintenance.html&#8217;. Our goal is reached.</p>
<p>The whole virtualhost file look like this:</p>
<pre style="background-color:#cadfed;">&lt;VirtualHost *:80&gt;
   ServerName www.gosseyn.fr

   RewriteEngine On
   RewriteLog /my/path/to/squid/parts/squid/log/rewrite_www.gosseyn.fr.log
   RewriteLogLevel 0

   CustomLog /my/path/to/squid//parts/squid/log/access_www.gosseyn.fr.log common
   ErrorLog /my/path/to/squid//parts/squid/log/error_www.gosseyn.fr.log

   DocumentRoot /my/path/to/buildout/prod/maintenance_pages

   &lt;Directory "/my/path/to/buildout/prod/maintenance_pages"&gt;
       Options None
       AllowOverride None
       Order allow,deny
       allow from all

       &lt;LimitExcept GET&gt;
           Order allow,deny
           allow from all
       &lt;/LimitExcept&gt;
   &lt;/Directory&gt;

   ## our maintenance page
   RewriteCond /my/path/to/buildout/prod/maintenance_pages/maintenance.html -f
   RewriteCond %{REQUEST_URI} !/maintenance.html
   RewriteRule $ /maintenance.html [R=302,L]

   ## common rules for squid rewrite rules
   RewriteRule ^(.*)$ - [E=BACKEND_LOCATION:127.0.0.1]
   RewriteRule ^(.*)$ - [E=BACKEND_PORT:8081]
   RewriteRule ^(.*)$ - [E=BACKEND_PATH:site]

   RewriteCond /my/path/to/buildout/prod/maintenance_pages/maintenance.html !-f
   RewriteRule  ^/(.*)/$ http://127.0.0.1:3128/%{ENV:BACKEND_LOCATION}/%{ENV:BACKEND_PORT}/http/%{SERVER_NAME}/80/%{ENV:BACKEND_PATH}/__original_url__/$1 [L,P]
   RewriteCond /my/path/to/buildout/prod/maintenance_pages/maintenance.html !-f
   RewriteRule  ^/(.*)$ http://127.0.0.1:3128/%{ENV:BACKEND_LOCATION}/%{ENV:BACKEND_PORT}/http/%{SERVER_NAME}/80/%{ENV:BACKEND_PATH}/__original_url__/$1 [L,P]

   ## specific rules base on cookie

&lt;/VirtualHost&gt;</pre>
<p>It will be difficult to include this in a recipe as we modify an existing virtualhost in a very specific way.</p>
<p>As usual, all feedbacks are appreciated.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/encolpe.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/encolpe.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/encolpe.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/encolpe.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/encolpe.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/encolpe.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/encolpe.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/encolpe.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/encolpe.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/encolpe.wordpress.com/167/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=167&subd=encolpe&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://encolpe.wordpress.com/2009/05/08/install-a-maintenance-page-without-restarting-apache/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfe0f9ff13a511088bc2e4e9f42ae808?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">encolpe</media:title>
		</media:content>
	</item>
		<item>
		<title>How to extend you Plone 3.2 buildout</title>
		<link>http://encolpe.wordpress.com/2009/03/16/how-to-extend-you-plone-32-buildout/</link>
		<comments>http://encolpe.wordpress.com/2009/03/16/how-to-extend-you-plone-32-buildout/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 15:12:01 +0000</pubDate>
		<dc:creator>encolpe</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Plone 3.2]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[buildout]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[planet-en]]></category>
		<category><![CDATA[updating]]></category>
		<category><![CDATA[zc.buildout]]></category>

		<guid isPermaLink="false">http://encolpe.wordpress.com/?p=149</guid>
		<description><![CDATA[Plone 3.2 and next comes with a hardcoded versions.cfg for each Plone release. For the current release:
http://dist.plone.org/release/3.2.2/versions.cfg
The Plone Upgrade Guide will show you how to transform a basic buildout created with paster:
http://plone.org/documentation/manual/upgrade-guide/version/upgrading-from-3-x-to-3.2
This solution will work until you already defined a &#8216;[versions]&#8216; section in your main buildout file. What we need is to merge the two [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=149&subd=encolpe&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Plone 3.2 and next comes with a hardcoded versions.cfg for each Plone release. For the current release:<br />
http://dist.plone.org/release/3.2.2/versions.cfg</p>
<p>The Plone Upgrade Guide will show you how to transform a basic buildout created with paster:<br />
http://plone.org/documentation/manual/upgrade-guide/version/upgrading-from-3-x-to-3.2</p>
<p>This solution will work until you already defined a &#8216;<strong>[versions]</strong>&#8216; section in your main buildout file. What we need is to merge the two &#8216;<strong>[versions]</strong>&#8216; sections.</p>
<p>For example, you current &#8216;<em>buildout.cfg</em>&#8216; looks like this:</p>
<pre style="background-color:#CADFED;">
[buildout]
...
eggs =
	archetypes.schematuning
	Products.CacheSetup
	Products.errornumber
	collective.recipe.omelette
	collective.workflowed
	Products.DCWorkflowGraph
	Products.PrintingMailHost
	plone.reload
	Products.PDBDebugMode
	Products.DocFinderTab

versions = versions

[versions]
zope.testing=3.5.1
zope.interface=3.4.1
Products.errornumber=1.2
archetypes.schematuning=1.1
Products.CacheSetup=1.2
</pre>
<hr />
<p>If you add <code style="background-color:#CADFED;">extends = http://dist.plone.org/release/3.2.2/versions.cfg</code> it will be overloaded by the local section displayed above and will be simply ignored by &#8216;<em>bin/buildout</em>&#8216;. If you run an update now all plone bundle eggs will be updated to the last published eggs (Plone 3.3b1, etc).<br />
The solution consist to use the &#8216;extends&#8217; directive to merge sections. For that we need to put your local &#8216;<strong>[versions]</strong>&#8216; section in a separate file.<br />
&#8216;<em>dev-versions.cfg</em>&#8216; will contain:</p>
<pre style="background-color:#CADFED;">
[versions]
zope.testing=3.5.1
zope.interface=3.4.1
Products.errornumber=1.2
archetypes.schematuning=1.1
Products.CacheSetup=1.2
</pre>
<hr />
<p>The &#8216;<em>buildout.cfg</em>&#8216; will contain: </p>
<pre style="background-color:#CADFED;">
[buildout]
...
eggs =
	archetypes.schematuning
	Products.CacheSetup
	Products.errornumber
	collective.recipe.omelette
	collective.workflowed
	Products.DCWorkflowGraph
	Products.PrintingMailHost
	plone.reload
	Products.PDBDebugMode
	Products.DocFinderTab

extends = <em>dev-versions.cfg</em> http://dist.plone.org/release/3.2.2/versions.cfg

versions = versions
</pre>
<hr />
<p>We can update now and verify our eggs versions:</p>
<ul>
<li>Plone 3.2.2</li>
<li>plone.app.locales 3.2.0</li>
<li>Products.CMFPlacefulWorkflow 1.4.0</li>
<li>Products.CacheSetup 1.2</li>
</ul>
<p>It is a certified Plone 3.2.2 installation with our specifics packages.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/encolpe.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/encolpe.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/encolpe.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/encolpe.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/encolpe.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/encolpe.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/encolpe.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/encolpe.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/encolpe.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/encolpe.wordpress.com/149/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=encolpe.wordpress.com&blog=1743175&post=149&subd=encolpe&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://encolpe.wordpress.com/2009/03/16/how-to-extend-you-plone-32-buildout/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bfe0f9ff13a511088bc2e4e9f42ae808?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">encolpe</media:title>
		</media:content>
	</item>
	</channel>
</rss>