<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://rss.lapin-blanc.net/~d/styles/rss2frenchfull.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://rss.lapin-blanc.net/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:coop="http://www.google.com/coop/namespace" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Web, UNIX &amp; Rock'n'Roll !</title>
	
	<link>http://lapin-blanc.net</link>
	<description>Lapin Blanc, le weblog de Kévin Dunglas.</description>
	<pubDate>Mon, 05 Jan 2009 13:34:32 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>fr</language>
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://rss.lapin-blanc.net/lapin-blanc" type="application/rss+xml" /><feedburner:emailServiceId>1779981</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Frss.lapin-blanc.net%2Flapin-blanc" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.rojo.com/add-subscription?resource=http%3A%2F%2Frss.lapin-blanc.net%2Flapin-blanc" src="http://blog.rojo.com/RojoWideRed.gif">Subscribe with Rojo</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://rss.lapin-blanc.net/lapin-blanc" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Frss.lapin-blanc.net%2Flapin-blanc" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Frss.lapin-blanc.net%2Flapin-blanc" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Frss.lapin-blanc.net%2Flapin-blanc" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=fr&amp;url=http%3A%2F%2Frss.lapin-blanc.net%2Flapin-blanc" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/bn/intatm_fr_1.gif">Subscribe with Mon Yahoo!</feedburner:feedFlare><item>
		<title>Add reCAPTCHA widgets to Symfony forms</title>
		<link>http://rss.lapin-blanc.net/~r/lapin-blanc/~3/503367667/</link>
		<comments>http://lapin-blanc.net/05/01/2009/recaptcha-symfony-forms/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 13:25:38 +0000</pubDate>
		<dc:creator>keyes</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programmation]]></category>

		<category><![CDATA[Symfony]]></category>

		<category><![CDATA[Sécurité]]></category>

		<category><![CDATA[reCAPTCHA]]></category>

		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://lapin-blanc.net/?p=333</guid>
		<description><![CDATA[I&#8217;ve wrote a new Symfony plugin to add reCAPTCHA widgets and validation to Symfony new forms. reCAPTCHA is a free CAPTCHA service that helps to digitize books, newspapers and old time radio shows.

To install: checkout it from http://selfpublish.googlecode.com/svn/trunk/plugins/sfAnotherReCaptchaPlugin/ and put it in your Symfony plugins directory.
Next, get a reCAPTCHA key and put the following lines]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve wrote a new <a href="http://www.symfony-project.org/">Symfony</a> plugin to add <a href="http://recaptcha.net/">reCAPTCHA</a> widgets and validation to Symfony new forms. reCAPTCHA is a free CAPTCHA service that helps to digitize books, newspapers and old time radio shows.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://recaptcha.net/shared-media/logo2-nobottom.gif" alt="" width="187" height="125" /></p>
<p>To install: checkout it from <a href="http://selfpublish.googlecode.com/svn/trunk/plugins/sfAnotherReCaptchaPlugin/">http://selfpublish.googlecode.com/svn/trunk/plugins/sfAnotherReCaptchaPlugin/</a> and put it in your Symfony <code>plugins</code> directory.</p>
<p>Next, get <a href="https://admin.recaptcha.net/accounts/login/?next=/recaptcha/createsite/">a reCAPTCHA key</a> and put the following lines in your <code>app.yml</code>:</p>
<pre><code class="language-yaml">recaptcha:
  public_key:      &lt;your public reCAPTCHA key&gt;
  private_key:     &lt;your private reCAPTCHA key&gt;</code></pre>
<p>Clear the cache with the <code>symfony cc</code> and check that the plugin activated in <code>projectConfiguration.class.php</code>.<br />
You are now able to add reCAPTCHA widgets and validators.</p>
<p>See the <a href="http://selfpublish.googlecode.com/svn/trunk/plugins/sfAnotherReCaptchaPlugin/README">plugin&#8217;s README file</a> or <a href="http://code.google.com/p/selfpublish/source/browse/trunk/lib/form/sfGuardRegisterForm.class.php">this register form with reCAPTCHA enabled</a> to learn how to use it.</p>
<p>This plugin is distributed under <a href="http://selfpublish.googlecode.com/svn/trunk/plugins/sfAnotherReCaptchaPlugin/LICENSE">the MIT license</a> and is based on <a href="http://arthurkoziel.com/">Arthur Koziel</a> work.</p>
<div class="feedflare">
<a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=XwEUep.p"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=XwEUep.p" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=oUhoNw.P"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=oUhoNw.P" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=hR4eC6.p"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=hR4eC6.p" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=apkOnA.p"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=apkOnA.p" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=eVB8I5.p"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=eVB8I5.p" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=5bF6xO.P"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=5bF6xO.P" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=5Njiiz.P"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=5Njiiz.P" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=sqjA3f.P"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=sqjA3f.P" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=nRdmXp.p"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=nRdmXp.p" border="0"></img></a>
</div><img src="http://rss.lapin-blanc.net/~r/lapin-blanc/~4/503367667" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lapin-blanc.net/05/01/2009/recaptcha-symfony-forms/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[PHP]]></coop:keyword>

		<coop:keyword><![CDATA[Programmation]]></coop:keyword>

		<coop:keyword><![CDATA[Symfony]]></coop:keyword>

		<coop:keyword><![CDATA[Sécurité]]></coop:keyword>

		<coop:keyword><![CDATA[reCAPTCHA]]></coop:keyword>

		<coop:keyword><![CDATA[spam]]></coop:keyword>
	<feedburner:origLink>http://lapin-blanc.net/05/01/2009/recaptcha-symfony-forms/</feedburner:origLink></item>
		<item>
		<title>Tweet13 sur Presse-Citron</title>
		<link>http://rss.lapin-blanc.net/~r/lapin-blanc/~3/498486254/</link>
		<comments>http://lapin-blanc.net/30/12/2008/tweet13-sur-presse-citron/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 09:53:59 +0000</pubDate>
		<dc:creator>keyes</dc:creator>
		
		<category><![CDATA[Buzz]]></category>

		<category><![CDATA[Django]]></category>

		<category><![CDATA[Perso]]></category>

		<category><![CDATA[Programmation]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Web 2.0]]></category>

		<category><![CDATA[Tweet13]]></category>

		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://lapin-blanc.net/?p=318</guid>
		<description><![CDATA[Ok ça date un peu, comme vous avez pu le constater je n&#8217;ai pas eu l&#8217;occasion de bloguer beaucoup ces temps ci.

Mon dernier jouet pour Twitter, Tweet13, à fait l&#8217;objet d&#8217;une revue par Eric Dupin sur son blog Presse-Citron. Merci à lui !
Pour rappel Tweet13 est une petite application web qui permet de chiffrer les]]></description>
			<content:encoded><![CDATA[<p>Ok ça date un peu, comme vous avez pu le constater je n&#8217;ai pas eu l&#8217;occasion de bloguer beaucoup ces temps ci.</p>
<p style="text-align: center;"><a href="http://lapin-blanc.net/wp-content/uploads/2008/12/presse-citron.jpg"><img class="size-medium wp-image-319 aligncenter" title="presse-citron" src="http://lapin-blanc.net/wp-content/uploads/2008/12/presse-citron.jpg" alt="" width="276" height="253" /></a></p>
<p>Mon dernier <a href="http://lapin-blanc.net/02/12/2008/jouons-un-peu-avec-tweet13/">jouet pour Twitter</a>, <a href="http://tweet13.kakofony.com/">Tweet13</a>, à fait <a href="http://www.presse-citron.net/tweet13-petits-cryptages-entre-amis">l&#8217;objet d&#8217;une revue</a> par Eric Dupin sur son blog <a href="http://www.presse-citron.net/">Presse-Citron</a>. Merci à lui !</p>
<p>Pour rappel <a>Tweet13</a> est une petite application web qui permet de chiffrer les messages <a href="http://twitter.com/dunglas">Twitter</a> à l&#8217;aide de <a href="http://en.wikipedia.org/wiki/ROT13">ROT13</a> avant des les envoyer.</p>
<p>En parlant d&#8217;applications Twitter, je vous en ai concocter une nouvelle sur le thème de la musique qui devrait être disponible sous peu <img src='http://lapin-blanc.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Joyeuses fêtes à tous.</p>
<div class="feedflare">
<a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=WUJxVq.o"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=WUJxVq.o" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=JJvN96.O"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=JJvN96.O" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=Xqj648.o"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=Xqj648.o" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=sI4Eaz.o"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=sI4Eaz.o" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=ARNa8a.o"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=ARNa8a.o" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=WNFw0l.O"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=WNFw0l.O" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=9yEwNP.O"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=9yEwNP.O" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=XZsfQF.O"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=XZsfQF.O" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=SImHSG.o"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=SImHSG.o" border="0"></img></a>
</div><img src="http://rss.lapin-blanc.net/~r/lapin-blanc/~4/498486254" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lapin-blanc.net/30/12/2008/tweet13-sur-presse-citron/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[Buzz]]></coop:keyword>

		<coop:keyword><![CDATA[Django]]></coop:keyword>

		<coop:keyword><![CDATA[Perso]]></coop:keyword>

		<coop:keyword><![CDATA[Programmation]]></coop:keyword>

		<coop:keyword><![CDATA[Python]]></coop:keyword>

		<coop:keyword><![CDATA[Web 2.0]]></coop:keyword>

		<coop:keyword><![CDATA[Tweet13]]></coop:keyword>

		<coop:keyword><![CDATA[Twitter]]></coop:keyword>
	<feedburner:origLink>http://lapin-blanc.net/30/12/2008/tweet13-sur-presse-citron/</feedburner:origLink></item>
		<item>
		<title>I need a webdesigner!</title>
		<link>http://rss.lapin-blanc.net/~r/lapin-blanc/~3/493526937/</link>
		<comments>http://lapin-blanc.net/23/12/2008/i-need-a-webdesigner/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 22:43:48 +0000</pubDate>
		<dc:creator>keyes</dc:creator>
		
		<category><![CDATA[Buzz]]></category>

		<category><![CDATA[Perso]]></category>

		<category><![CDATA[Programmation]]></category>

		<category><![CDATA[Web 2.0]]></category>

		<category><![CDATA[Graphic]]></category>

		<category><![CDATA[Partnership]]></category>

		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://lapin-blanc.net/?p=313</guid>
		<description><![CDATA[Hello Folk!
As a creative web application and software maker I&#8217;ve an always increasing need of graphics elements and templates  for my projects.
I&#8217;m looking for a partnership with a webdesigner. I do the code, you do the design, we share the success (if any)  
If you are interested to work with me contact me via]]></description>
			<content:encoded><![CDATA[<p>Hello Folk!</p>
<p>As a creative web application and software maker I&#8217;ve an always increasing need of graphics elements and templates  for my projects.</p>
<p>I&#8217;m looking for a partnership with a webdesigner. I do the code, you do the design, we share the success (if any) <img src='http://lapin-blanc.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>If you are interested to work with me contact me via the dedicated page of this blog <img src='http://lapin-blanc.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<div class="feedflare">
<a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=9bc6o"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=9bc6o" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=ZJRGO"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=ZJRGO" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=E1oIo"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=E1oIo" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=ARx2o"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=ARx2o" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=QG3Ro"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=QG3Ro" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=eDDUO"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=eDDUO" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=5yEVO"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=5yEVO" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=3qqsO"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=3qqsO" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=HtGeo"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=HtGeo" border="0"></img></a>
</div><img src="http://rss.lapin-blanc.net/~r/lapin-blanc/~4/493526937" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lapin-blanc.net/23/12/2008/i-need-a-webdesigner/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[Buzz]]></coop:keyword>

		<coop:keyword><![CDATA[Perso]]></coop:keyword>

		<coop:keyword><![CDATA[Programmation]]></coop:keyword>

		<coop:keyword><![CDATA[Web 2.0]]></coop:keyword>

		<coop:keyword><![CDATA[Graphic]]></coop:keyword>

		<coop:keyword><![CDATA[Partnership]]></coop:keyword>

		<coop:keyword><![CDATA[Webdesign]]></coop:keyword>
	<feedburner:origLink>http://lapin-blanc.net/23/12/2008/i-need-a-webdesigner/</feedburner:origLink></item>
		<item>
		<title>Jouons un peu avec Tweet13</title>
		<link>http://rss.lapin-blanc.net/~r/lapin-blanc/~3/472413098/</link>
		<comments>http://lapin-blanc.net/02/12/2008/jouons-un-peu-avec-tweet13/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 12:27:50 +0000</pubDate>
		<dc:creator>keyes</dc:creator>
		
		<category><![CDATA[Buzz]]></category>

		<category><![CDATA[Django]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Web 2.0]]></category>

		<category><![CDATA[JQuery]]></category>

		<category><![CDATA[Tweet13]]></category>

		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://lapin-blanc.net/?p=311</guid>
		<description><![CDATA[Voici Tweet13, le dernier petit gadget Twitter que je viens de programmer.
Comme son nom l&#8217;indique, Tweet13 chiffre vos updates Twitter avec ROT13 et ajoute optionellement un lien pour déchiffrer le message.
Quel intérêt de chiffrer un message si tout le monde peut le lire ?
Révéler la fin des films que vous avez vu, donner la réponse]]></description>
			<content:encoded><![CDATA[<p>Voici <a href="http://tweet13.kakofony.com">Tweet13</a>, le dernier petit gadget Twitter que je viens de programmer.</p>
<p>Comme son nom l&#8217;indique, Tweet13 chiffre vos updates Twitter avec <a href="http://fr.wikipedia.org/wiki/ROT13">ROT13</a> et ajoute optionellement un lien pour déchiffrer le message.</p>
<p>Quel intérêt de chiffrer un message si tout le monde peut le lire ?<br />
Révéler la fin des films que vous avez vu, donner la réponse à de petits quizz que vous avez créés ou encore parler plus crument que d&#8217;habitude sans choquer vos followers sensibles <img src='http://lapin-blanc.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Tweet13 à été développé avec Django, JQuery et l&#8217;API Twitter.</p>
<p><a href="http://tweet13.kakofony.com">Voir Tweet13.</a></p>
<div class="feedflare">
<a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=CZS6o"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=CZS6o" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=e3HCO"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=e3HCO" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=obVWo"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=obVWo" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=RHICo"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=RHICo" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=GRbjo"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=GRbjo" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=309XO"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=309XO" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=YLKwO"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=YLKwO" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=u4CJO"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=u4CJO" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=7447o"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=7447o" border="0"></img></a>
</div><img src="http://rss.lapin-blanc.net/~r/lapin-blanc/~4/472413098" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lapin-blanc.net/02/12/2008/jouons-un-peu-avec-tweet13/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[Buzz]]></coop:keyword>

		<coop:keyword><![CDATA[Django]]></coop:keyword>

		<coop:keyword><![CDATA[Python]]></coop:keyword>

		<coop:keyword><![CDATA[Web 2.0]]></coop:keyword>

		<coop:keyword><![CDATA[JQuery]]></coop:keyword>

		<coop:keyword><![CDATA[Tweet13]]></coop:keyword>

		<coop:keyword><![CDATA[Twitter]]></coop:keyword>
	<feedburner:origLink>http://lapin-blanc.net/02/12/2008/jouons-un-peu-avec-tweet13/</feedburner:origLink></item>
		<item>
		<title>Build your own website thumbnail generator with Django</title>
		<link>http://rss.lapin-blanc.net/~r/lapin-blanc/~3/447789790/</link>
		<comments>http://lapin-blanc.net/09/11/2008/django-website-thumbnail-generator/#comments</comments>
		<pubDate>Sun, 09 Nov 2008 22:25:00 +0000</pubDate>
		<dc:creator>keyes</dc:creator>
		
		<category><![CDATA[Buzz]]></category>

		<category><![CDATA[Django]]></category>

		<category><![CDATA[English]]></category>

		<category><![CDATA[Programmation]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Web 2.0]]></category>

		<category><![CDATA[Thubmnail]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://lapin-blanc.net/?p=302</guid>
		<description><![CDATA[On many website you can see a awesome link preview effect using a thumbnail of the page. There is some web services such as Websnapr or Thumbalizr providing an API to make your own webpages screenshots but it can be annoying to rely on third party projects: free accounts can only display a small among]]></description>
			<content:encoded><![CDATA[<p>On many website you can see a awesome <a href="http://www.websnapr.com/previewbubble/">link preview effect</a> using a thumbnail of the page. There is some web services such as <a href="http://www.websnapr.com/">Websnapr</a> or <a href="http://www.thumbalizr.com/">Thumbalizr</a> providing an <acronym title="Application Programming Interface">API</acronym> to make your own webpages screenshots but it can be annoying to rely on third party projects: free accounts can only display a small among of screenshots and, cannot customize the size of the image, you cannot render Flash animations or Javascript&#8230;</p>
<p style="text-align: center;"><img class="aligncenter" src="http://webkit.org/images/icon-gold.png" alt="Webkit Logo" width="215" height="174" /></p>
<p>We will build a website thumbnail generator using <a href="http://cutycapt.sourceforge.net/">CutyCapt</a>, a <a href="http://webkit.org/">Webkit</a> based free software designed to make screenshots of web pages, and <a href="http://www.djangoproject.com/">Django</a>, the powerful <a href="http://www.python.org/">Python</a> web framework.</p>
<p>The first step is to download and install CutyCapt. On a Debian-based system (such as Ubuntu) just type the following commands:</p>
<pre><code class="language-sh">sudo apt-get install subversion libqt4-webkit libqt4-dev g++
svn co https://cutycapt.svn.sourceforge.net/svnroot/cutycapt
cd cutycapt/CutyCapt
qmake
make
./CutyCapt --url=http://lapin-blanc.net --out=example.png</code></pre>
<p>Try to open the <samp>example.png</samp> (i.e: <kbd>eog example.png</kbd>), if the install is OK you must see a screenshot of this blog.</p>
<p>I assume your <a href="http://docs.djangoproject.com/en/dev/intro/install/#intro-install">Django installation</a> is working fine. Start a new project if needed (<kbd>django-admin.py startproject mysite</kbd>) and create an application called <samp>webthumb</samp></p>
<p>with <kbd>python manage.py startapp</kbd> in your project.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm1.static.flickr.com/171/416333744_9153d5fe0d_m.jpg" alt="Django Reinhardt" width="200" height="200" /></p>
<p>Edit your <samp>urls.py</samp> file to add a new pattern to the tuple <code>urlpatterns</code>. It will match screenshots requests and call the <code>thumb</code> view:</p>
<pre><code class="language-python">(r'^thumb/(?P.*)', 'mysite.webthumb.views.thumb'),</code></pre>
<p>Now create a view called <code>thumb</code> in <samp>webthumb/view.py</samp> with this code:</p>
<pre><code class="language-python">import os
import subprocess
import md5
from django.http import HttpResponse

CUTYCAPT = '/home/keyes/cutycapt/CutyCapt/CutyCapt'
THUMBS_DIR  = '/home/keyes/Documents/Projets/kakofony/thumbs/'

def thumb(request, url):
    hash = md5.new(url).hexdigest()
    path = THUMBS_DIR + hash + '.png'
    print path

    if not os.path.isfile(path):
        try:
            subprocess.check_call([CUTYCAPT,\
                '--url=' + url,\
                '--min-width=200',\
                '--out=' + path])
        except subprocess.CalledProcessError:
            return django.http.HttpResponseServerError

    img = open(path, 'rb').read()
    return django.http.HttpResponse(img, mimetype='image/png')</code></pre>
<p>Adapt the variables <var>CUTYCAPT</var> and <var>THUMBS_DIR</var> with your settings. Of course the directory pointed by <var>THUMBS_DIR</var> must be writeable (<code>chmod 777</code>).</p>
<p>You can now embed website thumbnails in your websites just with this HTML markup <code class="language-html">&lt;img src="http://localhost/thumb/http://lapin-blanc.net" alt="Lapin Blanc" /&gt;</code>.</p>
<p>Enjoy !</p>
<div class="feedflare">
<a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=YLqCn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=YLqCn" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=I8GcN"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=I8GcN" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=qcHZn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=qcHZn" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=TgBan"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=TgBan" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=PTJcn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=PTJcn" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=iOgwN"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=iOgwN" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=ETsYN"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=ETsYN" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=J1aGN"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=J1aGN" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=l63zn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=l63zn" border="0"></img></a>
</div><img src="http://rss.lapin-blanc.net/~r/lapin-blanc/~4/447789790" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lapin-blanc.net/09/11/2008/django-website-thumbnail-generator/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[Buzz]]></coop:keyword>

		<coop:keyword><![CDATA[Django]]></coop:keyword>

		<coop:keyword><![CDATA[English]]></coop:keyword>

		<coop:keyword><![CDATA[Programmation]]></coop:keyword>

		<coop:keyword><![CDATA[Python]]></coop:keyword>

		<coop:keyword><![CDATA[Web 2.0]]></coop:keyword>

		<coop:keyword><![CDATA[Thubmnail]]></coop:keyword>

		<coop:keyword><![CDATA[Web]]></coop:keyword>
	<feedburner:origLink>http://lapin-blanc.net/09/11/2008/django-website-thumbnail-generator/</feedburner:origLink></item>
		<item>
		<title>The last update of Aptana block Django development server</title>
		<link>http://rss.lapin-blanc.net/~r/lapin-blanc/~3/442661459/</link>
		<comments>http://lapin-blanc.net/05/11/2008/aptana-block-django-dev-server/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 00:24:58 +0000</pubDate>
		<dc:creator>keyes</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[English]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[XHTML / CSS]]></category>

		<category><![CDATA[Aptana]]></category>

		<category><![CDATA[Eclipse]]></category>

		<category><![CDATA[Framework]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://lapin-blanc.net/?p=299</guid>
		<description><![CDATA[The last update of Aptana Studio come with a new built-in Jetty-based HTTP server running on port 8000&#8230; the same as Django development server. There is no good way to disable the preview server feature of the popular editor, but our favorite web framework can be launched on another port. Just type python manage.py runserver]]></description>
			<content:encoded><![CDATA[<p>The last update of <a href="http://www.aptana.com/studio">Aptana Studio</a> come with a new built-in <a href="http://www.mortbay.org/jetty/">Jetty</a>-based HTTP server running on port 8000&#8230; the same as <a href="http://www.djangoproject.com/">Django</a> development server. There <a href="http://forums.aptana.com/viewtopic.php?p=19489">is no good way to disable the preview server feature</a> of the popular editor, but our favorite web framework can be launched on another port. Just type <kbd>python manage.py runserver 8080</kbd> instead of <kbd>python manage.py</kbd> and access to your work on <samp>http://localhost:8080</samp>.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://upload.wikimedia.org/wikipedia/de/thumb/0/0e/Django-logo.svg/504px-Django-logo.svg.png" alt="Django logo" width="252" height="108" /></p>
<div class="feedflare">
<a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=dExzn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=dExzn" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=0Gl8N"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=0Gl8N" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=ynown"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=ynown" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=iIJjn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=iIJjn" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=wD62n"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=wD62n" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=o6bBN"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=o6bBN" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=AzB0N"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=AzB0N" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=rMhdN"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=rMhdN" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=L4uRn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=L4uRn" border="0"></img></a>
</div><img src="http://rss.lapin-blanc.net/~r/lapin-blanc/~4/442661459" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lapin-blanc.net/05/11/2008/aptana-block-django-dev-server/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[Django]]></coop:keyword>

		<coop:keyword><![CDATA[English]]></coop:keyword>

		<coop:keyword><![CDATA[Python]]></coop:keyword>

		<coop:keyword><![CDATA[XHTML / CSS]]></coop:keyword>

		<coop:keyword><![CDATA[Aptana]]></coop:keyword>

		<coop:keyword><![CDATA[Eclipse]]></coop:keyword>

		<coop:keyword><![CDATA[Framework]]></coop:keyword>

		<coop:keyword><![CDATA[Web]]></coop:keyword>
	<feedburner:origLink>http://lapin-blanc.net/05/11/2008/aptana-block-django-dev-server/</feedburner:origLink></item>
		<item>
		<title>Ravalement de façade</title>
		<link>http://rss.lapin-blanc.net/~r/lapin-blanc/~3/441440971/</link>
		<comments>http://lapin-blanc.net/03/11/2008/ravalement-facade/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 22:19:38 +0000</pubDate>
		<dc:creator>keyes</dc:creator>
		
		<category><![CDATA[Perso]]></category>

		<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://lapin-blanc.net/?p=297</guid>
		<description><![CDATA[Comme vous pouvez le voir, j&#8217;ai légerement remanié l&#8217;apparence de mon blog. Il utilise désormais un thème très sobre à trois colonnes permettant de mieux structurer l&#8217;information et fait la part belle à Twitter que j&#8217;utilise de plus en plus assidument.
]]></description>
			<content:encoded><![CDATA[<p>Comme vous pouvez le voir, j&#8217;ai légerement remanié l&#8217;apparence de mon blog. Il utilise désormais un thème très sobre à trois colonnes permettant de mieux structurer l&#8217;information et fait la part belle à <a href="http://twitter.com/dunglas">Twitter</a> que j&#8217;utilise de plus en plus assidument.</p>
<div class="feedflare">
<a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=7wzRn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=7wzRn" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=QtusN"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=QtusN" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=xGxdn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=xGxdn" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=ZcpSn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=ZcpSn" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=VGCsn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=VGCsn" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=Ef6iN"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=Ef6iN" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=uzrDN"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=uzrDN" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=a0OON"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=a0OON" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=kubQn"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=kubQn" border="0"></img></a>
</div><img src="http://rss.lapin-blanc.net/~r/lapin-blanc/~4/441440971" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lapin-blanc.net/03/11/2008/ravalement-facade/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[Perso]]></coop:keyword>

		<coop:keyword><![CDATA[Blog]]></coop:keyword>
	<feedburner:origLink>http://lapin-blanc.net/03/11/2008/ravalement-facade/</feedburner:origLink></item>
		<item>
		<title>Monter une partition Linux sous Mac OS X</title>
		<link>http://rss.lapin-blanc.net/~r/lapin-blanc/~3/432757711/</link>
		<comments>http://lapin-blanc.net/26/10/2008/partition-linux-sous-mac-os-x/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 17:37:05 +0000</pubDate>
		<dc:creator>keyes</dc:creator>
		
		<category><![CDATA[Mac]]></category>

		<category><![CDATA[OS]]></category>

		<category><![CDATA[Ubuntu]]></category>

		<category><![CDATA[Disque dur]]></category>

		<category><![CDATA[ext2]]></category>

		<category><![CDATA[ext3]]></category>

		<category><![CDATA[ext4]]></category>

		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://lapin-blanc.net/?p=289</guid>
		<description><![CDATA[Ou plus précisément une partition de type ext2/3, le système de fichier le plus populaire sous GNU/Linux, utilisé par défaut sur Ubuntu.
Mac OS X n&#8217;inclut pas de pilote pour monter les partitions ext2, heureusement un projet libre comble ce manque : ext2fsx. Récupérer la version ext2fsx_dev sur le site du projet, la seule supportant l&#8217;architecture]]></description>
			<content:encoded><![CDATA[<p>Ou plus précisément une partition de type <a href="http://fr.wikipedia.org/wiki/Ext2">ext2/3</a>, le système de fichier le plus populaire sous GNU/Linux, utilisé par défaut sur <a href="http://www.ubuntu.com">Ubuntu</a>.</p>
<p>Mac OS X n&#8217;inclut pas de pilote pour monter les partitions ext2, heureusement un projet libre comble ce manque : <a href="http://sourceforge.net/projects/ext2fsx/">ext2fsx</a>. Récupérer la version <samp>ext2fsx_dev</samp> sur le site du projet, la seule supportant <a href="http://fr.wikipedia.org/wiki/X86">l&#8217;architecture x86</a> (tous les <a href="http://www.apple.com/fr/mac/">Mac</a> depuis <a href="http://fr.wikipedia.org/wiki/Passage_de_Apple_vers_Intel">le passage aux processeurs Intel</a>). Un simple double clic sur le fichier <code>.dmg</code> et un redémarrage de l&#8217;ordinateur suffira à l&#8217;activation du pilote.</p>
<p style="text-align: center;"><a href="http://lapin-blanc.net/wp-content/uploads/2008/10/ext2fsx.png"><img class="size-medium wp-image-290 aligncenter" title="ext2fsx" src="http://lapin-blanc.net/wp-content/uploads/2008/10/ext2fsx.png" alt="Gestionnaire ExtFS" width="300" height="254" /></a></p>
<p>Vous pouvez désormais monter vos partitions formatés en ext2, 3 ou 4 via <a href="http://developer.apple.com/documentation/Darwin/Reference/Manpages/man8/mount.8.html">la commande <code>mount</code></a> ou depuis un sympathique petit utilitaire nommé <samp>Gestionnaire ExtFS</samp> que l&#8217;on trouve dans le menu <samp>Autre</samp> des <samp>Préférences Système</samp>.</p>
<div class="feedflare">
<a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=9JUwm"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=9JUwm" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=sskKM"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=sskKM" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=Svs6m"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=Svs6m" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=evZQm"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=evZQm" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=F1qkm"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=F1qkm" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=JLJ1M"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=JLJ1M" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=xvjjM"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=xvjjM" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=sjUHM"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=sjUHM" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=9UD9m"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=9UD9m" border="0"></img></a>
</div><img src="http://rss.lapin-blanc.net/~r/lapin-blanc/~4/432757711" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lapin-blanc.net/26/10/2008/partition-linux-sous-mac-os-x/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[Mac]]></coop:keyword>

		<coop:keyword><![CDATA[OS]]></coop:keyword>

		<coop:keyword><![CDATA[Ubuntu]]></coop:keyword>

		<coop:keyword><![CDATA[Disque dur]]></coop:keyword>

		<coop:keyword><![CDATA[ext2]]></coop:keyword>

		<coop:keyword><![CDATA[ext3]]></coop:keyword>

		<coop:keyword><![CDATA[ext4]]></coop:keyword>

		<coop:keyword><![CDATA[Linux]]></coop:keyword>
	<feedburner:origLink>http://lapin-blanc.net/26/10/2008/partition-linux-sous-mac-os-x/</feedburner:origLink></item>
		<item>
		<title>Quel développeur suis-je ?</title>
		<link>http://rss.lapin-blanc.net/~r/lapin-blanc/~3/423440892/</link>
		<comments>http://lapin-blanc.net/17/10/2008/quel-developpeur-suis-je/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 06:39:54 +0000</pubDate>
		<dc:creator>keyes</dc:creator>
		
		<category><![CDATA[Buzz]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Ubuntu]]></category>

		<category><![CDATA[Chaîne]]></category>

		<category><![CDATA[Développement]]></category>

		<guid isPermaLink="false">http://lapin-blanc.net/?p=285</guid>
		<description><![CDATA[
Os : Ubuntu et Mac OS X
Éditeurs : Eclipse et vim
Langages favoris : Python, C
VCS : Subversion
Navigateur : Firefox

Alors, quel développeur je suis ?
]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Os</strong> : Ubuntu et Mac OS X</li>
<li><strong>Éditeurs</strong> : Eclipse et vim</li>
<li><strong>Langages favoris</strong> : Python, C</li>
<li><strong><acronym title="Version Control System">VCS</acronym></strong> : Subversion</li>
<li><strong>Navigateur</strong> : Firefox</li>
</ul>
<p>Alors, <a href="http://www.miximum.fr/culture/99-quel-developpeur-etes-vous">quel développeur je suis</a> ?</p>
<div class="wp-caption aligncenter" style="width: 459px"><img src="http://farm3.static.flickr.com/2010/2115997043_4c19ff1b52_o.jpg" alt="Programmer hierarchy" width="449" height="651" /><p class="wp-caption-text">Programmer hierarchy</p></div>
<div class="feedflare">
<a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=ozcHm"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=ozcHm" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=zCDaM"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=zCDaM" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=Z9w7m"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=Z9w7m" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=sdpkm"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=sdpkm" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=Rqrwm"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=Rqrwm" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=wZGlM"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=wZGlM" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=VLf4M"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=VLf4M" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=gdRtM"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=gdRtM" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=greOm"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=greOm" border="0"></img></a>
</div><img src="http://rss.lapin-blanc.net/~r/lapin-blanc/~4/423440892" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lapin-blanc.net/17/10/2008/quel-developpeur-suis-je/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[Buzz]]></coop:keyword>

		<coop:keyword><![CDATA[PHP]]></coop:keyword>

		<coop:keyword><![CDATA[Ubuntu]]></coop:keyword>

		<coop:keyword><![CDATA[Chaîne]]></coop:keyword>

		<coop:keyword><![CDATA[Développement]]></coop:keyword>
	<feedburner:origLink>http://lapin-blanc.net/17/10/2008/quel-developpeur-suis-je/</feedburner:origLink></item>
		<item>
		<title>Un formulaire de création de compte avec Symfony et sfGuard</title>
		<link>http://rss.lapin-blanc.net/~r/lapin-blanc/~3/420917027/</link>
		<comments>http://lapin-blanc.net/14/10/2008/creation-compte-symfony-sfguard/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 21:10:37 +0000</pubDate>
		<dc:creator>keyes</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programmation]]></category>

		<category><![CDATA[Symfony]]></category>

		<category><![CDATA[Web 2.0]]></category>

		<category><![CDATA[sfGuard]]></category>

		<guid isPermaLink="false">http://lapin-blanc.net/?p=277</guid>
		<description><![CDATA[sfGuard fait parti des plugins Symfony les plus utiles. Il ajoute à notre framework un système de gestion avancé des utilisateurs, groupes et permissions. Il inclut en standard un back office complet ainsi qu&#8217;un formulaire de connexion mais pas pour de la création de compte en front.

Alors qu&#8217;il fût assez fastidieux de le réaliser avec]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.symfony-project.org/plugins/sfGuardPlugin">sfGuard</a> fait parti <a href="http://lapin-blanc.net/12/07/2008/plugins-symfony-indispensables/">des plugins </a><a href="http://lapin-blanc.net/12/07/2008/plugins-symfony-indispensables/">Symfony</a><a href="http://lapin-blanc.net/12/07/2008/plugins-symfony-indispensables/"> les plus utiles</a>. Il ajoute à <a href="http://www.symfony-project.org/">notre framework</a> un système de gestion avancé des utilisateurs, groupes et permissions. Il inclut en standard un back office complet ainsi qu&#8217;un formulaire de connexion mais pas pour de la création de compte en front.</p>
<p style="text-align: center;"><img class="aligncenter" title="Symfony" src="http://www.sensiolabs.com/images/symfony.gif" alt="Symfony" width="170" height="46" /></p>
<p>Alors qu&#8217;il fût assez fastidieux de <a href="http://rinik.net/blog/en-how-to-create-registration-with-all-the-activation-stuff-for-sfguardplugin">le réaliser</a> avec la version 1.0 de Symfony, <a href="http://www.symfony-project.org/book/forms/1_1/en/">le nouveau système de création de formulaires</a> introduit dans la version 1.1 nous facilite bien la tache.</p>
<p>Je ne reviendrais pas sur l&#8217;installation du plugin qui est <a href="http://www.symfony-project.org/plugins/sfGuardPlugin">très bien détaillée</a> dans sa documentation.</p>
<p>Commençons par <a href="http://www.symfony-project.org/book/forms/1_1/en/">générer les formulaires associés à nos tables grâce à Propel</a> : <code>php symfony propel:build-forms</code>. Attaquons-nous maintenant à la classe de notre formulaire d&#8217;enregistrement. Créez un fichier nommé <kbd>sfGuardRegisterForm.class.php</kbd> dans le répertoire <samp>lib/form/</samp> qui contient ce code :</p>
<pre><code class="language-php">&lt;?php
class sfGuardRegisterForm extends sfGuardUserForm
{
  public function configure()
  {
    parent::configure();

    /* Ici on ajoute une validation
        pour le mot de passe afin qu'il soit long
        d'au moins 6 caractères et d'au plus 128. */
    $this-&gt;validatorSchema['password'] = new sfValidatorString(
      array('min_length' =&gt; 6, 'max_length' =&gt; 128)
    );
  }
}
</code></pre>
<p>Comme vous pouvez le lire, on se contente de créer une classe qui hérite de <code>sfGuardUserForm</code> fournie avec le plugin et d&#8217;y ajouter une validation supplémentaire pour le mot de passe (par défaut il peut être vide). C&#8217;est également dans cette méthode <code>configure</code> que se déroulera la validation de vos champs personnalisés sur lesquels nous reviendrons plus bas.</p>
<p>Effacez la cache avec la commande <code>php symfony cc</code>. C&#8217;est déjà presque fini !</p>
<p>Créons un répertoire <kbd>sfGuardAuth</kbd> dans le répertoire <samp>modules</samp> de votre application puis deux sous répertoires dans <samp>sfGuardAuth</samp> nommés <kbd>actions</kbd> et <kbd>templates</kbd>. Ce pseudo-module nous permettre de surcharger le module <samp>sfGuardAuth</samp> du plugin afin de lui ajouter une action et une vue qui permettront à vos visiteurs de s&#8217;enregistrer sur votre site.</p>
<p>Créez un fichier <kbd>actions.class.php</kbd> dans le répertoire <samp>actions</samp> qui contient :</p>
<pre><code class="language-php">&lt;?php
/* On doit inclure manuellement
l'action du plugin car l'autoloading ne fonctionne pas dans ce cas. */
require_once(sfConfig::get('sf_plugins_dir').
'/sfGuardPlugin/modules/sfGuardAuth/lib/BasesfGuardAuthActions.class.php');

/* Notre action dérive de celle fournie par le module
    afin d'hériter de ses actions propres. */
class sfGuardAuthActions extends BasesfGuardAuthActions
{
  public function executeRegister($request) {
    /* Passe le formulaire à la vue. */
    $this-&gt;form = new sfGuardRegisterForm();

    /* Si l'action est appelé via la méthode POST... */
    if ($request-&gt;isMethod('post')) {
      $this-&gt;form-&gt;bind(
        $request-&gt;getParameter('sf_guard_user')
      );

      /* ...et que les données sont valides */
      if ($this-&gt;form-&gt;isValid()) {

        /* On crée l'utilisateur */
        $sf_guard_user = $this-&gt;form-&gt;save();

        $this-&gt;getUser()-&gt;setFlash('message',
          'Vous êtes enregistré,
            &lt;a href="/login"&gt;connectez-vous&lt;/a&gt; !');
        $this-&gt;redirect('@homepage');
      }
      /* Sinon le formulaire ainsi que l'erreur sera ré-affiché */
    }
  }
}</code></pre>
<p>Quand l&#8217;utilisateur est créé on redirige le visiteur vers la page d&#8217;accueil et on l&#8217;avertit grâce à <a href="http://www.symfony-project.org/book/1_0/06-Inside-the-Controller-Layer#Flash%20Attributes">un attribut flash</a>.</p>
<p>Passons à la vue qui se nommera <kbd>registerSuccess.php</kbd> et qui se trouvera dans le répertoire <samp>templates</samp> :</p>
<pre><code class="language-php">&lt;form action="&lt;?php echo url_for('sfGuardAuth/register') ?&gt;" method="POST"&gt;
  &lt;table&gt;
    &lt;?php echo $form ?&gt;
    &lt;tr&gt;
      &lt;td colspan="2"&gt;
        &lt;input type="submit" /&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/form&gt;
</code></pre>
<p>Très bien, notre formulaire fonctionne. Mais le plus fort arrive !</p>
<p>Vous avez ajouter des champs personnalisés au profil de votre utilisateur dans la table <code>sf_guard_user_profile</code> (cf. la documentation de sfGuard) ? Régénérez les formulaires associés à vos tables avec la commande <code>php symfony propel:build-forms</code>, effacez la cache à grand coup de <code>php symfony cc</code>, rechargez la page <samp><kbd>/sfGuardAuth/register</kbd></samp> et admirez : nos champs sont automatiquement reconnus et affichés. Vous pourrez leur ajouter des étapes de validation dans notre première classe <code class="language-php">sfGuardRegisterForm</code> ou dans <code>sfGuardUserProfileForm</code> si vous voulez qu&#8217;elles s&#8217;appliquent à tous les formulaires héritant de cette classe (page de modification du profil, &#8230;.).</p>
<div class="feedflare">
<a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=XImFm"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=XImFm" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=cEdMM"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=cEdMM" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=3hj5m"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=3hj5m" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=q3HGm"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=q3HGm" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=AsPFm"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=AsPFm" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=ynNZM"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=ynNZM" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=n9A7M"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=n9A7M" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=OyxlM"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=OyxlM" border="0"></img></a> <a href="http://rss.lapin-blanc.net/~f/lapin-blanc?a=0053m"><img src="http://rss.lapin-blanc.net/~f/lapin-blanc?i=0053m" border="0"></img></a>
</div><img src="http://rss.lapin-blanc.net/~r/lapin-blanc/~4/420917027" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://lapin-blanc.net/14/10/2008/creation-compte-symfony-sfguard/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[PHP]]></coop:keyword>

		<coop:keyword><![CDATA[Programmation]]></coop:keyword>

		<coop:keyword><![CDATA[Symfony]]></coop:keyword>

		<coop:keyword><![CDATA[Web 2.0]]></coop:keyword>

		<coop:keyword><![CDATA[sfGuard]]></coop:keyword>
	<feedburner:origLink>http://lapin-blanc.net/14/10/2008/creation-compte-symfony-sfguard/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.378 seconds -->
