<?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/"
	>

<channel>
	<title>Blog d&#039;un ingénieur informaticien parmi d&#039;autres... &#187; Vie du blog</title>
	<atom:link href="http://blog.courtine.org/category/vie-du-blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.courtine.org</link>
	<description>Blog myBlog = BlogFactory.getWordPressBlog();</description>
	<lastBuildDate>Sun, 15 Jan 2012 15:45:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Te Deum</title>
		<link>http://blog.courtine.org/2011/03/16/te-deum/</link>
		<comments>http://blog.courtine.org/2011/03/16/te-deum/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 18:48:27 +0000</pubDate>
		<dc:creator>Benoît Courtine</dc:creator>
				<category><![CDATA[Vie du blog]]></category>

		<guid isPermaLink="false">http://blog.courtine.org/?p=703</guid>
		<description><![CDATA[Oyez ! Oyez ! Ce mercredi 16 mars de l&#8217;an de grâces 2011, vers 11h, ma femme et moi avons fini l&#8217;implémentation que nous préparions depuis 9 mois : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class HuitiemeMerveilleDuMonde implements Bebe &#123; &#160; @Override public&#8230;]]></description>
			<content:encoded><![CDATA[<p>Oyez ! Oyez !</p>
<p>Ce mercredi 16 mars de l&#8217;an de grâces 2011, vers 11h, ma femme et moi avons fini l&#8217;implémentation que nous préparions depuis 9 mois :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HuitiemeMerveilleDuMonde <span style="color: #000000; font-weight: bold;">implements</span> Bebe <span style="color: #009900;">&#123;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNom<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Courtine&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getPrenom<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Aliénor&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> Sexe getSexe<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">return</span> Sexe.<span style="color: #006633;">FILLE</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">double</span> getTaille<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">return</span> 48.0d<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">double</span> getPoids<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">return</span> 3.060d<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Selon la formule consacrée, &laquo;&nbsp;la mère et l&#8217;enfant se portent bien&nbsp;&raquo;, et se remettent tranquillement de leurs émotions à la maternité. Pour sa part, le père est aux anges, et a hâte de retrouver tout le monde demain !</p>
<p>Notre petite Aliénor en image :</p>
<div id="attachment_705" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.courtine.org/wp-content/uploads/2011/03/Alienor.jpg"><img class="size-medium wp-image-705" title="Aliénor Courtine" src="http://blog.courtine.org/wp-content/uploads/2011/03/Alienor-300x225.jpg" alt="Aliénor Courtine" width="300" height="225" /></a><p class="wp-caption-text">Aliénor Courtine</p></div>
<p>Seule petite ombre au tableau : l&#8217;implémentation dans sa version 1.0 va sans doute souffrir de bugs à corriger, tels que des appels intempestifs de &laquo;&nbsp;<em>réveillerPapaEnPleineNuit()</em>&laquo;&nbsp;, &laquo;&nbsp;<em>refuserDeDormir()</em>&laquo;&nbsp;, etc.</p>
<p>Le temps de <del>pouponner bébé</del> corriger ces quelques bugs, je risque d&#8217;être à nouveau un peu distant de ce blog dans les prochaines semaines.
<div class="tweetmeme_button" style="float: left; margin-left: 10px; margin-right: 20px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.courtine.org%2F2011%2F03%2F16%2Fte-deum%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.courtine.org%2F2011%2F03%2F16%2Fte-deum%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=bcourtine%3AR_adaa69f468b94402bc961e78ad01d140&amp;b=2" height="61" width="50" /><br />
			</a>
		</div> <p><a href="http://blog.courtine.org/?flattrss_redirect&amp;id=703&amp;md5=75500ae1f80118ffb6557789a3edc02c" title="Flattr" target="_blank"><img src="http://blog.courtine.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.courtine.org/2011/03/16/te-deum/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=bcourtine&amp;popout=1&amp;url=http%3A%2F%2Fblog.courtine.org%2F2011%2F03%2F16%2Fte-deum%2F&amp;language=fr_FR&amp;category=text&amp;title=Te+Deum&amp;description=Oyez+%21+Oyez+%21+Ce+mercredi+16+mars+de+l%26%238217%3Ban+de+gr%C3%A2ces+2011%2C+vers+11h%2C+ma+femme+et+moi+avons+fini+l%26%238217%3Bimpl%C3%A9mentation+que+nous+pr%C3%A9parions+depuis+9+mois+%3A+1...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Revue de presse&#8230;</title>
		<link>http://blog.courtine.org/2011/02/06/revue-de-presse-2/</link>
		<comments>http://blog.courtine.org/2011/02/06/revue-de-presse-2/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 21:20:22 +0000</pubDate>
		<dc:creator>Benoît Courtine</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Vie du blog]]></category>

		<guid isPermaLink="false">http://blog.courtine.org/?p=628</guid>
		<description><![CDATA[L&#8217;emménagement s&#8217;est bien passé, et la nouvelle Freebox est arrivée beaucoup plus vite que prévue. Cependant, nous sommes toujours occupés à finir les petits travaux d&#8217;installation qui ne me laissent pas beaucoup de temps pour écrire, en particulier à cause des préparatif pour l&#8217;implémentation d&#8217;ici un mois de l&#8217;interface suivante : 1 2 3 4&#8230;]]></description>
			<content:encoded><![CDATA[<p>L&#8217;emménagement s&#8217;est bien passé, et la <a href="http://www.freebox-v6.fr/">nouvelle Freebox</a> est arrivée beaucoup plus vite que prévue. Cependant, nous sommes toujours occupés à finir les petits travaux d&#8217;installation qui ne me laissent pas beaucoup de temps pour écrire, en particulier à cause des préparatif pour l&#8217;implémentation d&#8217;ici un mois de l&#8217;interface suivante :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> Bebe <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNom<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getPrenom<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> Sexe getSexe<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">double</span> getTaille<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">double</span> getPoids<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>A défaut d&#8217;avoir le temps d&#8217;écrire un article de fond, voici donc en vrac une revue rapide de ma veille de ce mois de janvier&#8230;</p>
<h3><a href="http://www.libreoffice.org/">LibreOffice</a> vs <a href="http://www.openoffice.org/">OpenOffice</a></h3>
<p>C&#8217;est finalement LibreOffice qui a sorti le premier sa version 3.3.0, ce à quoi Oracle a répondu quelques jours plus tard avec la même version de sa suite. Après un test rapide de ces deux versions, la différence de fonctionnalités n&#8217;est pour l&#8217;instant pas flagrante. OpenOffice étant beaucoup plus agréable graphiquement, je vais donc rester sur la suite d&#8217;Oracle en attendant la suite des évènements&#8230;</p>
<h3><a href="http://hudson-ci.org/">Hudson</a> vs <a href="http://jenkins-ci.org/">Jenkins</a></h3>
<p>Deuxième fork, encore une fois avec un produit d&#8217;<a href="http://www.oracle.com/">Oracle</a>, encore une fois pour des <a href="http://www.developpez.com/actu/26995/Le-Projet-Hudson-change-de-nom-et-devient-Jenkins-pour-respecter-les-droits-d-Oracle-sa-migration-vers-GitHub-devrait-suivre/">différents sur la gouvernance du projet</a>. C&#8217;est la solution d&#8217;intégration continue Hudson qui a été forkée par sa communauté (et son fondateur, <a href="http://kohsuke.org/">Kohsuke Kawaguchi</a>). Comme pour OpenOffice, Oracle décide de poursuivre de son côté le développement d&#8217;Hudson, avec le soutien de <a href="http://www.sonatype.com/">Sonatype</a>. Pour ma part, j&#8217;ai décidé de &laquo;&nbsp;switcher&nbsp;&raquo;, et de suivre le projet Jenkins.</p>
<h3><a href="http://www.playframework.org/">Play Framework</a></h3>
<p>La version mineure 1.1.1 de Play Framework est parue ! Mais la grande évolution, c&#8217;est la version 1.2 prévue pour mars. Jusqu&#8217;à maintenant, lorsqu&#8217;on voulait ajouter une librairie à un projet Play, il fallait la mettre dans le répertoire &laquo;&nbsp;lib&nbsp;&raquo;, et donc commiter celui-ci avec le reste du projet.</p>
<p>Habitué aux projets <a href="http://maven.apache.org/">Maven</a>, où les dépendances sont gérées dans un unique fichier de configuration (et donc où les binaires de ces dépendances ne sont pas mis en gestion de configuration), je n&#8217;appréciait pas ce fonctionnement de Play, malgré ses autres qualités.</p>
<p>Or, avec la version 1.2 qui arrive, on va avoir un fonctionnement similaire à celui de Maven, où on va pouvoir définir des dépôts et lister les dépendances dans un <a href="https://gist.github.com/768364">fichier de configuration</a>.</p>
<h3><a href="http://www.parisjug.org/xwiki/bin/view/Main/WebHome">Paris <acronym title="Java User Group">JUG</acronym></a></h3>
<p>Lundi 28 février aura lieu à la cité universitaire le <a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20110228">3ème anniversaire du Paris <acronym title="Java User Group">JUG</acronym></a> : au programme, &laquo;&nbsp;siffler en travaillant&nbsp;&raquo; ! Et tant qu&#8217;on est dans l&#8217;annonce d&#8217;évènements Java, les 26 et 27 mai auront lieu au Grand Rex le &laquo;&nbsp;<a href="http://www.whatsnextparis.com/">What&#8217;s Next Paris?</a>&laquo;&nbsp;.</p>
<h3>Software craftmanship</h3>
<p>Le &laquo;&nbsp;software craftmanship&nbsp;&raquo;, c&#8217;est le concept à la mode (avec les TDD, Scrum, et autres <a href="http://en.wikipedia.org/wiki/DevOps">DevOps</a>). Sur ce sujet, je tenais à signaler <a href="http://www.touilleur-express.fr/2011/01/20/craftsmanship/">le dernier billet de Nicolas Martignole</a>, auquel j&#8217;adhère totalement.
<div class="tweetmeme_button" style="float: left; margin-left: 10px; margin-right: 20px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.courtine.org%2F2011%2F02%2F06%2Frevue-de-presse-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.courtine.org%2F2011%2F02%2F06%2Frevue-de-presse-2%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=bcourtine%3AR_adaa69f468b94402bc961e78ad01d140&amp;b=2" height="61" width="50" /><br />
			</a>
		</div> <p><a href="http://blog.courtine.org/?flattrss_redirect&amp;id=628&amp;md5=e92bd965ffaa1f514c3773e1d1c53571" title="Flattr" target="_blank"><img src="http://blog.courtine.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.courtine.org/2011/02/06/revue-de-presse-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=bcourtine&amp;popout=1&amp;url=http%3A%2F%2Fblog.courtine.org%2F2011%2F02%2F06%2Frevue-de-presse-2%2F&amp;language=fr_FR&amp;category=text&amp;title=Revue+de+presse%26%238230%3B&amp;description=L%26%238217%3Bemm%C3%A9nagement+s%26%238217%3Best+bien+pass%C3%A9%2C+et+la+nouvelle+Freebox+est+arriv%C3%A9e+beaucoup+plus+vite+que+pr%C3%A9vue.+Cependant%2C+nous+sommes+toujours+occup%C3%A9s+%C3%A0+finir+les+petits+travaux+d%26%238217%3Binstallation+qui+ne+me+laissent...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Voeux de silence</title>
		<link>http://blog.courtine.org/2011/01/09/voeux-de-silence/</link>
		<comments>http://blog.courtine.org/2011/01/09/voeux-de-silence/#comments</comments>
		<pubDate>Sun, 09 Jan 2011 21:47:37 +0000</pubDate>
		<dc:creator>Benoît Courtine</dc:creator>
				<category><![CDATA[Vie du blog]]></category>

		<guid isPermaLink="false">http://blog.courtine.org/?p=620</guid>
		<description><![CDATA[Comme de coutume, je vous souhaite à tous mes meilleurs voeux pour 2011 ! Et je profite de ces voeux pour expliquer le titre de ce post : depuis maintenant plus de 15 jours (et certainement pendant au moins tout le mois de Janvier), je vais délaisse ce blog. En effet, nous avons profité de&#8230;]]></description>
			<content:encoded><![CDATA[<p>Comme de coutume, je vous souhaite à tous mes meilleurs voeux pour 2011 !</p>
<p>Et je profite de ces voeux pour expliquer le titre de ce post : depuis maintenant plus de 15 jours (et certainement pendant au moins tout le mois de Janvier), je vais délaisse ce blog. En effet, nous avons profité de cette fin d&#8217;année 2010 pour déménager dans un appartement un peu plus grand mais <a href="http://www.noisylesec.fr/">un peu plus loin</a> de <a href="http://www.paris.fr/">Paris</a> (heureusement encore accessible par les transports en commun). Outre l&#8217;attente de notre <a href="http://www.korben.info/freebox-revolution-les-nouveautes.html">nouvelle Freebox</a> qui oblige à suivre l&#8217;actualité par <a href="http://fr.samsungmobile.com/galaxy-s">Galaxy-S</a> interposé, la priorité des soirées est consacrée au déballage des cartons et à l&#8217;aménagement&#8230;</p>
<p>Afin de bien commencer l&#8217;année, voici deux bons &laquo;&nbsp;bêtisiers&nbsp;&raquo; de fin d&#8217;année trouvés récemment :</p>
<ul>
<li><a href="http://www.makeuseof.com/tag/55-geeky-line-jokes/">55 citations informatiques classiques</a></li>
<li><a href="http://blog.xebia.fr/2010/12/31/betisier-2010/">Les perles de Xebia</a></li>
</ul>
<h3>Perles complémentaires</h3>
<p>Comme j&#8217;aime bien le concept du bêtisier, voici un petit complément d&#8217;extraits de code que j&#8217;ai eu l&#8217;occasion de lire cette année.<br />
Un tout nouveau design pattern, le &laquo;&nbsp;Don&#8217;t miss this exception !&nbsp;&raquo; :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// code...</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">SQLException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    LOGGER.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Exception :&quot;</span> <span style="color: #339933;">+</span> e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    LOGGER.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SQL Exception&quot;</span>, e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Toujours dans la gestion d&#8217;exceptions, voici le &laquo;&nbsp;quoi qu&#8217;il arrive, c&#8217;est pas moi mais la base de données&nbsp;&raquo; :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// code...</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SQLException</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Passons maintenant à la suite de la série &laquo;&nbsp;<a href="http://blog.courtine.org/2009/03/14/reinventer-la-roue-carree/">réinvention de la roue carrée</a>&laquo;&nbsp;, avec l&#8217;obtention de la date du jour au format français &laquo;&nbsp;jj/mm/aaaa&nbsp;&raquo; :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> getCurrentDate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">Date</span> date <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">Calendar</span> cal <span style="color: #339933;">=</span> <span style="color: #003399;">Calendar</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    cal.<span style="color: #006633;">setTime</span><span style="color: #009900;">&#40;</span>date<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">int</span> year <span style="color: #339933;">=</span> cal.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Calendar</span>.<span style="color: #006633;">YEAR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">int</span> month <span style="color: #339933;">=</span> cal.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Calendar</span>.<span style="color: #006633;">MONTH</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">int</span> day <span style="color: #339933;">=</span> cal.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Calendar</span>.<span style="color: #006633;">DATE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">String</span> yearStr <span style="color: #339933;">=</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span>year<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">String</span> monthStr <span style="color: #339933;">=</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span>month<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">String</span> dayStr <span style="color: #339933;">=</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span>day<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>monthStr.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        monthStr <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;0&quot;</span> <span style="color: #339933;">+</span> monthStr<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>dayStr.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        dayStr <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;0&quot;</span> <span style="color: #339933;">+</span> dayStr<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">return</span> dayStr <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;/&quot;</span> <span style="color: #339933;">+</span> monthStr <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;/&quot;</span> <span style="color: #339933;">+</span> yearStr<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Je vous épargne la méthode &laquo;&nbsp;<em>getCurrentHour()</em>&nbsp;&raquo; de ce même projet, basée sur le même concept. De même, je ne copierai pas ici la méthode &laquo;&nbsp;<em>validateDate()</em>&laquo;&nbsp;, dont le but est de vérifier qu&#8217;une chaîne de caractères représente une date valide dans ce même format (elle fait 62 lignes&#8230;).
<div class="tweetmeme_button" style="float: left; margin-left: 10px; margin-right: 20px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.courtine.org%2F2011%2F01%2F09%2Fvoeux-de-silence%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.courtine.org%2F2011%2F01%2F09%2Fvoeux-de-silence%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=bcourtine%3AR_adaa69f468b94402bc961e78ad01d140&amp;b=2" height="61" width="50" /><br />
			</a>
		</div> <p><a href="http://blog.courtine.org/?flattrss_redirect&amp;id=620&amp;md5=806c78c955621638db97353feebbd06f" title="Flattr" target="_blank"><img src="http://blog.courtine.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.courtine.org/2011/01/09/voeux-de-silence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=bcourtine&amp;popout=1&amp;url=http%3A%2F%2Fblog.courtine.org%2F2011%2F01%2F09%2Fvoeux-de-silence%2F&amp;language=fr_FR&amp;category=text&amp;title=Voeux+de+silence&amp;description=Comme+de+coutume%2C+je+vous+souhaite+%C3%A0+tous+mes+meilleurs+voeux+pour+2011+%21+Et+je+profite+de+ces+voeux+pour+expliquer+le+titre+de+ce+post+%3A+depuis+maintenant...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Fin de mise en place du blog</title>
		<link>http://blog.courtine.org/2010/07/18/fin-de-mise-en-place-du-blog/</link>
		<comments>http://blog.courtine.org/2010/07/18/fin-de-mise-en-place-du-blog/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 20:27:48 +0000</pubDate>
		<dc:creator>Benoît Courtine</dc:creator>
				<category><![CDATA[Vie du blog]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Dotclear]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.courtine.org/?p=180</guid>
		<description><![CDATA[Petite pause dans ma série de tutoriels Talend (qui n&#8217;est pas terminée), afin d&#8217;annoncer la fin de la mise en place de ce blog sous WordPress. Un des deux problèmes que a été résolu, par l&#8217;installation du plugin &#171;&#160;WP-Syntax Editor Integration Plugin&#171;&#160;. Avec celui-ci, plus de problème de disparition des attributs de mes morceaux de&#8230;]]></description>
			<content:encoded><![CDATA[<p>Petite pause dans ma série de tutoriels <a href="http://www.talend.com/">Talend</a> (qui n&#8217;est pas terminée), afin d&#8217;annoncer la fin de la mise en place de ce blog sous <a href="http://www.wordpress-fr.net/">WordPress</a>.</p>
<p>Un des deux problèmes que <a href="http://blog.courtine.org/2010/07/07/convaincu-par-wordpress-3/">j\&#8217;avais</a> a été résolu, par l&#8217;installation du plugin &laquo;&nbsp;<a href="http://www.effinger.org/blog/2009/12/30/wp-syntax-editor-integration-plugin-wp-syntax-im-wordpress-editor-nutzen/"><acronym title="WordPress">WP</acronym>-Syntax Editor Integration Plugin</a>&laquo;&nbsp;. Avec celui-ci, plus de problème de disparition des attributs de mes morceaux de code.</p>
<p>Concernant, la ponctuation française, je n&#8217;ai toujours pas trouvé mon bonheur&#8230; Donc si quelqu&#8217;un connaît le nom d&#8217;un tel plugin, qu&#8217;il n&#8217;hésite pas à me le signaler.</p>
<p>Quelques jours après la mise en ligne de ce nouveau blog, j&#8217;ai été confronté à un nouveau problème, que je n&#8217;avais pas sur <a href="http://www.dotclear.net/">Dotclear</a>&#8230; les spams pourriels ! Les robots sont visiblement friands de blogs WordPress. J&#8217;ai opté pour la méthode la plus simple, avec mes excuses pour le désagrément des (quelques) vrais commentateurs de ce blog : le <a href="http://www.642weather.com/weather/scripts-wordpress-captcha.php">CAPCHA</a>. J&#8217;ai au passage encore une fois été impressionné par le fonctionnement de WordPress. Le CAPCHA s&#8217;est automatiquement intégré au site sans que j&#8217;aie besoin de modifier à la main le moindre fichier du thème ! Et depuis, je n&#8217;ai pas constaté de nouveau problème de ce type.</p>
<p>Mais la plus grosse mise à jour date de ce week-end : il s&#8217;agit du changement de mon serveur web !</p>
<p><span id="more-180"></span></p>
<p>Ces derniers jours, j&#8217;ai constaté que le blog, qui tournait sur <a href="http://httpd.apache.org/">Apache</a>, était particulièrement lent à afficher les pages (entre 5 et 10 secondes), ce qui était inacceptable, vu sa charge quasiment nulle. J&#8217;ai donc cherché l&#8217;origine de ce problème :</p>
<ul>
<li>les ressources (processeur et mémoire) de mon serveur, que je peux monitorer, ont immédiatement été mises hors de cause ;</li>
<li>la base de données <a href="http://www.mysql.fr/">MySQL</a> également (via un petit benchmark de requêtes&#8230;)</li>
<li>le réseau également (les transferts de fichier via <acronym title="File Transfer Protocol">FTP</acronym> ne posent aucun problème)</li>
<li>le troisième candidat, le serveur web, a été le grand gagnant : après une relance du serveur, les performances s&#8217;améliorent nettement. Mais après quelques temps, elles se redégradent&#8230;</li>
</ul>
<p>Le coupable étant identifié, il restait à trouver une solution. J&#8217;ai envisagé d&#8217;aller &laquo;&nbsp;tunner&nbsp;&raquo; la configuration des performances du serveur (nombre de threads, de connexions, timeout, etc.). Mais finalement, j&#8217;ai profité de ce problème pour aller voir du côté des serveurs web alternatifs, et en particulier les &laquo;&nbsp;serveurs légers&nbsp;&raquo;.</p>
<p>J&#8217;ai tout d&#8217;abord envisagé <a href="http://www.lighttpd.net/">Lighttpd</a>. Très facile à mettre en place : la communication avec MySQL et <a href="http://www.php.net/"><acronym title="Pre-Hypertext Processing">PHP</acronym></a> fonctionne sans problème. Et ce test a définitivement prouvé qu&#8217;Apache était bien responsable de la lenteur générale. En changeant de serveur, je-&#8217;ai récupéré des temps d&#8217;affichage tout à fait corrects ! Le seul problème était que Lighttpd ne gère pas les fichiers <a href="http://fr.wikipedia.org/wiki/Htaccess">.htaccess</a>, très utilisés par WordPress (pour les &laquo;&nbsp;liens permanents&nbsp;&raquo;). Heureusement, le web abonde de littérature et une recherche rapide m&#8217;a <a href="http://sunfox.org/blog/2007/04/20/rewrite-de-wordpress-sous-lighttpd/">donné la solution</a>.</p>
<p>Mais quitte à tester les serveurs légers, je me suis ensuite intéressé à  <a href="http://nginx.org/">Nginx</a>, qui a plutôt bonne presse. En revanche, sur ce serveur, la communication avec <acronym title="Pre-Hypertext Processing">PHP</acronym> n&#8217;est pas inclue, et il faut passer par des services <a href="http://fr.wikipedia.org/wiki/Common_Gateway_Interface"><acronym title="Common Gateway Interface">CGI</acronym></a> (php-cgi, php5-cgi, une sur-couche <a href="http://redmine.lighttpd.net/projects/spawn-fcgi/">spawn-fcgi</a> qui est utilisée par Lighhtpd, ou <a href="http://php-fpm.org/">php-fpm</a>). Pour la mise en place, je me suis documenté <a href="http://elasticdog.com/2008/02/howto-install-wordpress-on-nginx/">ici</a> et <a href="http://www.howtoforge.com/installing-nginx-with-php5-and-mysql-support-on-debian-lenny">là</a>.</p>
<p>J&#8217;ai dans un premier temps mis de côté php-fpm, <a href="http://interfacelab.com/nginx-php-fpm-apc-awesome/">plus difficile à installer</a> (nécessitant une recompilation de <acronym title="Pre-Hypertext Processing">PHP</acronym>). En comparant l&#8217;utilisation directe de php-cgi et celle de spawn-fcgi, j&#8217;ai constaté que la deuxième solution était plus rapide. J&#8217;ai donc finalement décidé de garder le couple Nginx + spawn-fcgi. Il ne restait donc plus qu&#8217;à s&#8217;assurer du lancement correct des services au démarrage de la machine, comme décrit dans <a href="http://www.maximegaillard.com/1961-tuto-installation-nginx-php.html">ce troisième tutoriel</a>.</p>
<p>Au début, tout a très bien fonctionné. Mais au bout d&#8217;un certain temps (au maximum quelques heures !), je me suis retrouvé avec une erreur 502 de Nginx, &laquo;&nbsp;Mauvaise passerelle&nbsp;&raquo;. L&#8217;origine de cette erreur, c&#8217;est le processus php5-cgi (qui assure le traitement des requêtes <acronym title="Pre-Hypertext Processing">PHP</acronym>), qui s&#8217;arrête régulièrement pour une raison inconnue. Apparemment, <a href="http://forum.nginx.org/read.php?2,28783">je ne suis pas le seul à rencontrer ce problème</a>. Pour ceux qui ont le même souci, je l&#8217;ai résolu de la manière suivante :</p>
<ul>
<li>en limitant le nombre de requêtes que traite chaque processus php5-cgi, via la variable d&#8217;environnement <em>PHP_FCGI_MAX_REQUESTS</em></li>
<li>en lançant un pool de ces processus au lieu d&#8217;un seul, grâce au paramètre &laquo;&nbsp;-C&nbsp;&raquo; de spawn-fcgi</li>
</ul>
<p>Les instructions de lancement deviennent ainsi :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">PHP_FCGI_MAX_REQUESTS</span>=<span style="color: #000000;">1000</span>
<span style="color: #007800;">PHP_FCGI_CHILDREN</span>=<span style="color: #000000;">2</span>
<span style="color: #007800;">COMMAND</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>spawn-fcgi
<span style="color: #007800;">ADDRESS</span>=127.0.0.1
<span style="color: #007800;">PORT</span>=<span style="color: #000000;">9898</span>
<span style="color: #007800;">USER</span>=www-data
<span style="color: #007800;">GROUP</span>=www-data
<span style="color: #007800;">PHPCGI</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php5-cgi
<span style="color: #007800;">PIDFILE</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>spawncgi.pid
<span style="color: #007800;">$COMMAND</span> <span style="color: #660033;">-a</span> <span style="color: #007800;">$ADDRESS</span> <span style="color: #660033;">-p</span> <span style="color: #007800;">$PORT</span> <span style="color: #660033;">-u</span> <span style="color: #007800;">$USER</span> <span style="color: #660033;">-g</span> <span style="color: #007800;">$GROUP</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$PHPCGI</span> <span style="color: #660033;">-P</span> <span style="color: #007800;">$PIDFILE</span> <span style="color: #660033;">-C</span> <span style="color: #007800;">$PHP_FCGI_CHILDREN</span></pre></td></tr></table></div>

<p>Avec cette modification du script de lancement, le problème d&#8217;arrêt intempestif des processus php5-cgi semble avoir été résolu : le pool de processus tourne maintenant depuis plus de 24h sans s&#8217;être arrêté. Il ne reste donc plus qu&#8217;à reporter ces commandes dans un script de lancement (dans &laquo;&nbsp;<em>/etc/init.d/</em>&laquo;&nbsp;), et automatiser le démarrage de celui-ci.</p>
<p>Le couple &laquo;&nbsp;Nginx + spawn-fcgi&nbsp;&raquo; étant satisfaisant, avec des temps de réponse beaucoup plus corrects, je garde (au moins temporairement) cette solution. Il ne reste maintenant plus qu&#8217;à voir si elle est stable sur la durée&#8230;
<div class="tweetmeme_button" style="float: left; margin-left: 10px; margin-right: 20px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F18%2Ffin-de-mise-en-place-du-blog%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F18%2Ffin-de-mise-en-place-du-blog%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=bcourtine%3AR_adaa69f468b94402bc961e78ad01d140&amp;hashtags=Apache,Dotclear,Nginx,Open+Source,PHP,WordPress&amp;b=2" height="61" width="50" /><br />
			</a>
		</div> <p><a href="http://blog.courtine.org/?flattrss_redirect&amp;id=180&amp;md5=d8c695726077db471cf2dc0cc2f254c3" title="Flattr" target="_blank"><img src="http://blog.courtine.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.courtine.org/2010/07/18/fin-de-mise-en-place-du-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=bcourtine&amp;popout=1&amp;url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F18%2Ffin-de-mise-en-place-du-blog%2F&amp;language=fr_FR&amp;category=text&amp;title=Fin+de+mise+en+place+du+blog&amp;description=Petite+pause+dans+ma+s%C3%A9rie+de+tutoriels+Talend+%28qui+n%26%238217%3Best+pas+termin%C3%A9e%29%2C+afin+d%26%238217%3Bannoncer+la+fin+de+la+mise+en+place+de+ce+blog+sous+WordPress.+Un+des+deux+probl%C3%A8mes...&amp;tags=Apache%2CDotclear%2CNginx%2COpen+Source%2CPHP%2CWordPress%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Quand Talend m&#8217;évite un travail fastidieux</title>
		<link>http://blog.courtine.org/2010/07/10/quand-talend-mevite-un-travail-fastidieux/</link>
		<comments>http://blog.courtine.org/2010/07/10/quand-talend-mevite-un-travail-fastidieux/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 07:24:52 +0000</pubDate>
		<dc:creator>Benoît Courtine</dc:creator>
				<category><![CDATA[Talend]]></category>
		<category><![CDATA[Vie du blog]]></category>
		<category><![CDATA[Dotclear]]></category>
		<category><![CDATA[ETL]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Talend Open Studio]]></category>
		<category><![CDATA[Tutoriel]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.courtine.org/?p=141</guid>
		<description><![CDATA[Au cours des différents articles de ce blog, j&#8217;ai souvent parlé des outils de Talend, dont je suis fan car ils rendent bien des services dans le travail informatique. Aujourd&#8217;hui, j&#8217;ai l&#8217;occasion de vous présenter un cas d&#8217;utilisation plus personnel, où ces mêmes outils m&#8217;ont permis d&#8217;éviter un travail bien ennuyeux. Je vous ai présenté&#8230;]]></description>
			<content:encoded><![CDATA[<p>Au cours des différents articles de ce blog, j&#8217;ai souvent parlé des outils de <a href="http://www.talend.com/">Talend</a>, dont je suis fan car ils rendent bien des services dans le travail informatique.</p>
<p>Aujourd&#8217;hui, j&#8217;ai l&#8217;occasion de vous présenter un cas d&#8217;utilisation plus personnel, où ces mêmes outils m&#8217;ont permis d&#8217;éviter un travail bien ennuyeux. Je vous ai présenté récemment <a href="http://blog.courtine.org/2010/07/05/migrer-de-dotclear-a-wordpress/">la procédure de migration</a> que j&#8217;ai utilisée pour passer de <a href="http://www.dotclear.net/">Dotclear </a>à <a href="http://www.wordpress.org/">WordPress</a>.</p>
<p>Cette procédure n&#8217;a pas été au bout des choses et il me restait un certain nombre de petits ajustements à effectuer :</p>
<ul>
<li>Migrer les liens</li>
<li>Migrer les réponses aux commentaires du plugin <a href="http://plugins-dotclear.geeek.org/">Comback 2.0</a></li>
<li>Supprimer les acronymes de mes anciens billets (ils sont maintenant automatiquement ajoutés par le plugin <a href="http://wordpress.org/extend/plugins/acronyms/">Acronyms</a>)</li>
<li>Corriger les liens internes entre les anciens billets : ils ne sont plus valables</li>
</ul>
<p>Mis bout à bout, ces différentes actions sur 65 billets constituent un travail non négligeable&#8230; et d&#8217;un intérêt proche de 0. C&#8217;est à ce moment que Talend intervient, car il m&#8217;a permis d&#8217;automatiser ces différentes tâches.</p>
<p>S&#8217;agissant d&#8217;un cas d&#8217;étude simple, je pense qu&#8217;il peut constituer un bon tutoriel sur un cas d&#8217;utilisation réel de cet outil. Voici donc la première partie de ce tutoriel.<br />
<span id="more-141"></span></p>
<h3>Installer les bases de données de test</h3>
<p>Pour effectuer cette migration, je vais avoir besoin de deux bases de données : celle de Dotclear et celle de WordPress. J&#8217;installe donc <a href="http://www.easyphp.org/">EasyPHP</a> (par commodité), ainsi que les deux applications en question.</p>
<p>Afin de disposer de véritables données, j&#8217;importe dans leurs bases respectives :</p>
<ul>
<li>les données de mon ancien blog Dotclear.</li>
<li>les données migrées de mon nouveau blog WordPress.</li>
</ul>
<p>Je n&#8217;entre pas dans les détails de ces manipulations élémentaires, la documentation en ligne que l&#8217;on peut trouver étant déjà très abondante (par exemple sur l&#8217;<a href="http://www.commentcamarche.net/contents/mysql/mysqlimport.php3">import/export des bases de données MySQL</a>).</p>
<h3>Installer Talend Open Studio</h3>
<p>Les bases de données étant créées et remplies de données de test, nous pouvons passer aux choses sérieuses. Mais avant toute chose, il va falloir installer <acronym title="Talend Open Studio">TOS</acronym> (ou Talend <acronym title="Master Data Management">MDM</acronym> <acronym title="Community Edition">CE</acronym>, qui inclut <acronym title="Talend Open Studio">TOS</acronym>). Cette étape ne devrait poser aucun problème dès lors qu&#8217;on a un <a href="http://java.sun.com/"><acronym title="Java Development Kit">JDK</acronym></a> en version 6 : il suffit de décompresser l&#8217;archive.</p>
<p>En cas de problème, un <a href="http://www.talendforge.org/tutorials/tutorial.php?language=french&amp;idTuto=59">tutoriel récent</a> décrit la procédure pas à pas de l&#8217;installation de Talend <acronym title="Master Data Management">MDM</acronym>.</p>
<h3>Mise en place des métadonnées</h3>
<p>Première bonne pratique : je configure une et une unique fois l&#8217;accès à mes bases de données. Dans <acronym title="Talend Open Studio">TOS</acronym>, cela se fait en utilisant le menu &laquo;&nbsp;Métadonnées&nbsp;&raquo; de l&#8217;arbre de navigation, à gauche :</p>
<div id="attachment_143" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_Creer_Metadonnees.png"><img class="size-medium wp-image-143" title="Talend_Creer_Metadonnees" src="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_Creer_Metadonnees-300x257.png" alt="Création d'une métadonnée avec Talend" width="300" height="257" /></a><p class="wp-caption-text">Création d&#39;une métadonnée avec Talend</p></div>
<p>Nous renseignons ensuite les informations sur la connexion que nous créons. Ces zones sont purement informatives, mais c&#8217;est une &laquo;&nbsp;bonne pratique&nbsp;&raquo; de les remplir. Elles permettent par la suite à l&#8217;outil de générer une documentation automatique des jobs :</p>
<div id="attachment_145" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_ConnexionWP_1.png"><img class="size-medium wp-image-145" title="Talend_ConnexionWP_1" src="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_ConnexionWP_1-300x222.png" alt="Saisie des informations sur la connexion WordPress" width="300" height="222" /></a><p class="wp-caption-text">Saisie des informations sur la connexion WordPress</p></div>
<p>Puis nous saisissons les identifiants techniques de cette connexion (adresse, port, login, mot de passe, etc.) :</p>
<div id="attachment_146" class="wp-caption aligncenter" style="width: 269px"><a href="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_ConnexionWP_2.png"><img class="size-medium wp-image-146" title="Talend_ConnexionWP_2" src="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_ConnexionWP_2-259x300.png" alt="Saisie des identifiants techniques de connexion à la base de données de WordPress" width="259" height="300" /></a><p class="wp-caption-text">Saisie des identifiants techniques de connexion à la base de données de WordPress</p></div>
<p>Avant de terminer cette étape, le bouton &laquo;&nbsp;Vérifier&nbsp;&raquo; nous assure que tout est bon : la base de données tourne, est accessible, et nous n&#8217;avons pas fait d&#8217;erreur dans la saisie des différents identifiants.</p>
<p>J&#8217;attire maintenant votre attention sur le boutons &laquo;&nbsp;Exporter comme contexte&nbsp;&raquo;. Cette étape peut être différée mais il n&#8217;y a pas de raison particulière de la retarder. Comme son nom l&#8217;indique, elle permet de remplacer les paramètres de connexion &laquo;&nbsp;en dur&nbsp;&raquo; par des variables.</p>
<p>Ainsi, au niveau du code Java généré, on aura les remplacements :</p>
<ul>
<li>&laquo;&nbsp;localhost&nbsp;&raquo; devient context.BlogWP_Server</li>
<li>&laquo;&nbsp;3306&#8243; devient context.BlogWP_Port</li>
<li>etc.</li>
</ul>
<p>Cette opération se fait au détriment de toutes les <a href="http://www.loribel.com/java/normes/nommage.html">conventions de nommage Java</a> (de ce point de vue, mieux vaut de toute façon ne pas regarder de trop près le code généré&#8230;) mais apporte un certain nombre d&#8217;avantages :</p>
<ul>
<li> elle permet de travailler avec plusieurs bases de données distinctes utilisant le même schéma de données. Pour cela, il faut rajouter dans le groupe de contextes &laquo;&nbsp;BlogWP&nbsp;&raquo; un nouveau contexte (qui peut par exemple correspondre aux identifiants de connexion à la base de validation des traitement, voire à la base de données de production)</li>
<li>lors du déploiement effectif du job, après son &laquo;&nbsp;export batch&nbsp;&raquo;, passer par un contexte permet d&#8217;externaliser les paramètres de configuration. Ils ne sont plus embarqués dans l&#8217;archive <acronym title="Java ARchive">JAR</acronym> du traitement, mais placés dans des fichiers &laquo;&nbsp;properties&nbsp;&raquo;, à l&#8217;extérieur. Cela permet donc de modifier les paramètres du traitement avant son lancement sans avoir à repasser par le studio de développement, une re-compilation, un nouvel export, etc.</li>
</ul>
<p>Passons maintenant à la partie la plus intéressante : toutes ces opérations que nous venons de faire vont nous permettre d&#8217;extraire automatiquement de la base de données les schémas des différentes tables qui la composent, et ensuite de les utiliser directement dans l&#8217;éditeur visuel, sans avoir à trop nous en préoccuper. Pour cela, il faut sélectionner la métadonnée nouvellement créée et demander la récupération de son schéma :</p>
<div id="attachment_149" class="wp-caption aligncenter" style="width: 261px"><a href="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_Recuperer_Schema_BD.png"><img class="size-medium wp-image-149" title="Talend_Recuperer_Schema_BD" src="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_Recuperer_Schema_BD-251x300.png" alt="Récupération du schéma de la base de données de WordPress" width="251" height="300" /></a><p class="wp-caption-text">Récupération du schéma de la base de données de WordPress</p></div>
<p>Je passe rapidement sur les 3 écrans qui suivent. Les options par défaut conviennent généralement. Ceux qui veulent rentrer dans le détail (du troisième écran principalement) pourront véritablement affiner le mapping entre les données de la base et les classes Java, mais cela s&#8217;adresse plutôt à des utilisateurs expérimentés, et n&#8217;est pas l&#8217;objet de cet article).</p>
<p>Voici donc directement le résultat :</p>
<div id="attachment_150" class="wp-caption aligncenter" style="width: 226px"><a href="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_Schema_BD_WordPress.png"><img class="size-medium wp-image-150" title="Talend_Schema_BD_WordPress" src="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_Schema_BD_WordPress-216x300.png" alt="Schéma de la base de données WordPress" width="216" height="300" /></a><p class="wp-caption-text">Schéma de la base de données WordPress</p></div>
<p>Nous allons vérifier via un job élémentaire qu&#8217;on arrive bien à récupérer les données de la base. Dans l&#8217;onglet &laquo;&nbsp;Jobs&nbsp;&raquo; cette fois, nous allons donc créer un nouveau traitement :</p>
<div id="attachment_151" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_Creation_Job.png"><img class="size-medium wp-image-151" title="Talend_Creation_Job" src="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_Creation_Job-300x289.png" alt="Création du job de test" width="300" height="289" /></a><p class="wp-caption-text">Création du job de test</p></div>
<p>Construisons maintenant notre job :</p>
<ul>
<li>on ajoute tout d&#8217;abord le groupe de contextes &laquo;&nbsp;BlogWP&nbsp;&raquo; au job, afin que les paramètres de connexion soient accessibles (mais si on oublie cette étape, <acronym title="Talend Open Studio">TOS</acronym> la proposera de lui-même) ;</li>
<li>on place le composant tLogRow, qu&#8217;on trouve dans la palette de droite (rubrique &laquo;&nbsp;Logs &amp; Erreurs&nbsp;&raquo; ;</li>
<li>pour le tMySQLInput, nous allons voir l&#8217;intérêt d&#8217;avoir commencé par créer les métadonnées. Nous n&#8217;allons donc <strong>pas </strong>le chercher dans la palette. On prend la table &laquo;&nbsp;wp_links&nbsp;&raquo; des métadonnées et on la fait glisser jusqu&#8217;à la fenêtre du job. Talend donne alors le choix entre une série de composants, dont le tMysqlInput sélectionné par défaut. On valide, et on peut alors se rendre compte que tout a été pré-rempli (paramètres de connexion, nom de la table, requête à exécuter, schéma du composant) ;</li>
<li>il ne nous reste donc plus qu&#8217;à créer un lien &laquo;&nbsp;Principal&nbsp;&raquo; du tMysqlInput au tLogRow (clic droit sur le tMysqlInput &gt; ligne &gt; Principal, ou clic droit &laquo;&nbsp;glissé&nbsp;&raquo; du tMysqlInput jusqu&#8217;au tLogRow) ;</li>
</ul>
<p>Le job est techniquement finalisé. A ce stade :</p>
<ul>
<li>dans l&#8217;onglet code (en bas à gauche du job), on peut regarder à quoi ressemble le code généré, et s&#8217;assurer qu&#8217;il ne contient pas d&#8217;erreur de compilation (syntaxe, etc.)</li>
<li>on peut ajouter la documentation des différents composants, et ajouter quelques retouches cosmétiques pour permettre une meilleure lisibilité (nom affiché pour les composants, etc.).</li>
</ul>
<p>Il ne nous reste plus qu&#8217;à tester le bon fonctionnement de l&#8217;ensemble. Dans l&#8217;onglet &laquo;&nbsp;Exécuter&nbsp;&raquo;, on vérifie une dernière fois les paramètres du contexte (à gauche) et on lance l&#8217;exécution :</p>
<div id="attachment_152" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_Execution_Job.png"><img class="size-medium wp-image-152" title="Talend_Execution_Job" src="http://blog.courtine.org/wp-content/uploads/2010/07/Talend_Execution_Job-300x152.png" alt="Exécution du job Talend de test" width="300" height="152" /></a><p class="wp-caption-text">Exécution du job Talend de test</p></div>
<p>Ce succès clos cette première partie du tutoriel. On procède de même avec la base de données Dotclear et nous sommes prêts à entrer dans le vif du sujet : <a href="http://blog.courtine.org/2010/07/15/job-de-nettoyage-des-articles/">la mise à jour et la correction des données</a> !
<div class="tweetmeme_button" style="float: left; margin-left: 10px; margin-right: 20px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F10%2Fquand-talend-mevite-un-travail-fastidieux%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F10%2Fquand-talend-mevite-un-travail-fastidieux%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=bcourtine%3AR_adaa69f468b94402bc961e78ad01d140&amp;hashtags=Dotclear,ETL,MySQL,Talend+Open+Studio,Tutoriel,WordPress&amp;b=2" height="61" width="50" /><br />
			</a>
		</div> <p><a href="http://blog.courtine.org/?flattrss_redirect&amp;id=141&amp;md5=7e77cccd7086d31fc14804bee64efcba" title="Flattr" target="_blank"><img src="http://blog.courtine.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.courtine.org/2010/07/10/quand-talend-mevite-un-travail-fastidieux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=bcourtine&amp;popout=1&amp;url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F10%2Fquand-talend-mevite-un-travail-fastidieux%2F&amp;language=fr_FR&amp;category=text&amp;title=Quand+Talend+m%26%238217%3B%C3%A9vite+un+travail+fastidieux&amp;description=Au+cours+des+diff%C3%A9rents+articles+de+ce+blog%2C+j%26%238217%3Bai+souvent+parl%C3%A9+des+outils+de+Talend%2C+dont+je+suis+fan+car+ils+rendent+bien+des+services+dans+le+travail+informatique.+Aujourd%26%238217%3Bhui%2C...&amp;tags=Dotclear%2CETL%2CMySQL%2CTalend+Open+Studio%2CTutoriel%2CWordPress%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Convaincu par WordPress 3</title>
		<link>http://blog.courtine.org/2010/07/07/convaincu-par-wordpress-3/</link>
		<comments>http://blog.courtine.org/2010/07/07/convaincu-par-wordpress-3/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 20:25:01 +0000</pubDate>
		<dc:creator>Benoît Courtine</dc:creator>
				<category><![CDATA[Vie du blog]]></category>
		<category><![CDATA[Dotclear]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://wpblog.courtine.org/?p=95</guid>
		<description><![CDATA[Comme vous pouvez le constater, j&#8217;ai finalement décidé (de manière accélérée) de finaliser ma migration vers WordPress, malgré les première réserves que j&#8217;avais pu noter durant , en particulier celle concernant le manque d&#8217;intégrité de la base (qui je l&#8217;espère, sera revue prochainement). En effet, malgré ces défauts, il m&#8217;aura suffit de 2 jours pour être&#8230;]]></description>
			<content:encoded><![CDATA[<p>Comme vous pouvez le constater, j&#8217;ai finalement décidé (de manière accélérée) de finaliser ma migration vers <a href="http://www.wordpress-fr.net/">WordPress</a>, malgré les première réserves que j&#8217;avais pu noter durant <a href="http://blog.courtine.org/2010/07/05/migrer-de-dotclear-a-wordpress/">la migration difficile</a>, en particulier celle concernant le manque d&#8217;intégrité de la base (qui je l&#8217;espère, sera revue prochainement).</p>
<p>En effet, malgré ces défauts, il m&#8217;aura suffit de 2 jours pour être séduit par WordPress 3.0 :</p>
<p><span id="more-95"></span></p>
<h3>L&#8217;interface d&#8217;administration</h3>
<p>L&#8217;interface d&#8217;administration de WordPress 3.0 a été complètement revue, avec de l&#8217;<acronym title="Asynchronous JavaScript and XML">AJAX</acronym> dans tous les coins, qui la rendent vraiment agréable à utiliser. Ce n&#8217;est pas du tout ce qui a été déterminant dans mon choix, mais c&#8217;est un point non négligeable que d&#8217;utiliser une interface sympathique.</p>
<h3>Les thèmes disponibles</h3>
<p>Pour rester dans le domaine du visuel, une des grosses forces de WordPress par rapport à <a href="http://www.dotclear.net/">Dotclear</a>, c&#8217;est la taille de sa communauté, et le nombre de thèmes qu&#8217;elle met à disposition. Il n&#8217;y a absolument aucune comparaison possible : là où j&#8217;avais du mal à trouver un thème qui me convienne sur Dotclear, j&#8217;ai au contraire du mal à me décider sur WordPress.</p>
<p>De plus, les thèmes disponibles sont bien plus aboutis (comme <a href="http://wordpress.org/extend/themes/mystique">Mystique</a>, que j&#8217;utilise, et qui est très dynamiques en JavaScript/<acronym title="Asynchronous JavaScript and XML">AJAX</acronym>, comme vous pouvez vous en rendre compte (merci <a href="http://jquery.com/">jQuery</a>).</p>
<p>Une chose qui n&#8217;existe pas sous Dotclear (du moins sans un bon nombre de bidouilles), un thème peut en cacher un autre. En administration, il est possible de très largement personnaliser ses thèmes lorsque ceux-ci le permettent : nombre et position des barres latérales, palette de couleurs, contenu, navigation, <acronym title="Cascading Style Sheets">CSS</acronym>, etc. Voici par exemple à quoi ressemble le premier des 7 onglets d&#8217;options du thème &laquo;&nbsp;Mystique&nbsp;&raquo; :</p>
<div id="attachment_114" class="wp-caption aligncenter" style="width: 310px"><a href="http://wpblog.courtine.org/wp-content/uploads/2010/07/Mystique_Administration.png"><img class="size-medium wp-image-114" title="Mystique_Administration" src="http://wpblog.courtine.org/wp-content/uploads/2010/07/Mystique_Administration-300x223.png" alt="Administration du thème Mystique" width="300" height="223" /></a><p class="wp-caption-text">Administration du thème Mystique</p></div>
<p>Sur ce point, le panel des possibilités de WordPress m&#8217;a vraiment épaté. Je ne pensais pas que les possibilités de personnalisation graphique étaient poussées à ce point, et surtout pas avec une telle facilité.</p>
<h3>Les fonctionnalités disponibles</h3>
<p>Nativement, WordPress dispose de plus de fonctionnalités que Dotclear :</p>
<ul>
<li>sauvegarde de plusieurs versions d&#8217;un article, de manière automatique (sauvegarde automatique toutes les N secondes), avec la possibilité de comparer différentes versions et d&#8217;en restaurer une ancienne</li>
<li>hiérarchie des commentaires (en donnant la possibilité de &laquo;&nbsp;répondre&nbsp;&raquo; à une personne). Sous Dotclear, j&#8217;avais du utiliser le plugin <a href="http://sphere.dnsalias.org/wp-freestyle/?p=103">ComBack2</a> pour obtenir quelque chose d&#8217;approchant</li>
<li>etc.</li>
</ul>
<p>Mais ce qui est réellement impressionnant, au delà des fonctionnalités natives, c&#8217;est encore une fois la taille de la communauté. Le système de recherche/installation des extensions est très bien fait, et quoi qu&#8217;on veuille faire, &nbsp;&raquo;il y a une extension pour ça&nbsp;&raquo;.</p>
<ul>
<li><a href="http://wordpress.org/extend/plugins/wp-syntax/">gérer l&#8217;affichage des codes sources</a></li>
<li><a href="http://ketsugi.com/software/wordpress/acronyms-plugin/">ajouter automatiquement les définitions des acronymes présents dans les articles</a></li>
<li>etc.</li>
</ul>
<p>Au passage, je me permets un petit zoom sur une différence de fonctionnement qui à mon avis, est à l&#8217;avantage de WordPress.</p>
<p>Dans Dotclear, le contenu des articles est géré par deux champ de la table des articles : post_content et post_content_xhtml. L&#8217;article tel qu&#8217;on le saisit est enregistré dans la première. Les plugins que l&#8217;on installe peuvent enregistrer des &laquo;&nbsp;filtres&nbsp;&raquo;, qui au moment de l&#8217;enregistrement, vont enrichir le contenu (formatage d&#8217;un code source par exemple), et enregistrer le résultat dans post_content_xhtml. Au moment de l&#8217;affichage, c&#8217;est le contenu de cette deuxième table qui est utilisé. En revanche, si je ne me trompe pas (mais un spécialiste du développement sous Dotclear me contredira peut-être), un plugin ne peut intervenir entre le contenu de cette table et l&#8217;affichage.</p>
<p>Dans WordPress, il y a un unique champ pour gérer le contenu des articles. Les plugins peuvent également enregistrer des filtres, mais ceux-ci sont appliqués dynamiquement à l&#8217;affichage de l&#8217;article et non lors de son enregistrement. C&#8217;est probablement un peu plus gourmand en traitement mais plus efficace. Prenons l&#8217;exemple du plugin d&#8217;ajout des définitions des acronymes. Le post-traitement de WordPress permet une application rétroactive à tous les billets existants lorsque le plugin est activé. Dans Dotclear, cela ne pourrait se faire qu&#8217;en ré-enregistrant chaque article après l&#8217;installation du plugin.</p>
<h3>Des interfaces avec d&#8217;autres systèmes</h3>
<p>WordPress étant beaucoup plus utilisé que Dotclear, il dispose d&#8217;un beaucoup plus grand nombre d&#8217;interfaces avec d&#8217;autres systèmes informatiques :</p>
<ul>
<li>la plupart des systèmes mobiles (<a href="http://www.apple.com/fr/iphone/">iPhone</a>, <a href="http://www.android.com/">Android</a>, etc.) disposent d&#8217;une (souvent plus d&#8217;ailleurs) application permettant d&#8217;écrire ses billets en déplacement</li>
<li>des réseaux sociaux (<a href="http://www.linkedin.com/">LinkedIn</a>, etc.) disposent d&#8217;une application dédiée à WordPress</li>
</ul>
<h3>Un éditeur énervant&#8230;</h3>
<p>Même si WordPress m&#8217;a impressionné par bien des aspects, tout n&#8217;est pas parfait. Et un des gros reproches que je peux lui faire après ces deux journées de tests, c&#8217;est son éditeur. Dès qu&#8217;on utilise l&#8217;éditeur visuel (pourtant agréable), les morceaux de code que l&#8217;on insère directement en <acronym title="HyperText Markup Language">HTML</acronym> disparaissent :</p>
<ul>
<li>les balises &laquo;&nbsp;line&nbsp;&raquo;, &laquo;&nbsp;escaped&nbsp;&raquo;, etc. du plugin de coloration syntaxique du code</li>
<li>les espaces insécables avant les doubles ponctuations, auxquels je tiens pourtant beaucoup</li>
</ul>
<h3>Conclusion</h3>
<p>Malgré ces quelques défauts, j&#8217;ai tout de même trouvé suffisamment d&#8217;avantages à WordPress pour effectuer la migration. Il détrône donc Dotclear à l&#8217;adresse <a href="http://blog.courtine.org/">http://blog.courtine.org/</a> et comme page par défaut de mon domaine.</p>
<p>Le blog historique sous Dotclear devient accessible à l&#8217;adresse <a href="http://dcblog.courtine.org/">http://dcblog.courtine.org/</a></p>
<p>Il me reste maintenant à finaliser la migration (liens, etc.), qui devrait être faite d&#8217;ici deux petites semaines&#8230; et à essayer de résoudre les quelques problèmes listés ci-dessus. Si un spécialiste de WordPress passe par ici et connait la solution, je lui saurai gré de partager cette information en commentaires.
<div class="tweetmeme_button" style="float: left; margin-left: 10px; margin-right: 20px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F07%2Fconvaincu-par-wordpress-3%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F07%2Fconvaincu-par-wordpress-3%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=bcourtine%3AR_adaa69f468b94402bc961e78ad01d140&amp;hashtags=Dotclear,PHP,WordPress&amp;b=2" height="61" width="50" /><br />
			</a>
		</div> <p><a href="http://blog.courtine.org/?flattrss_redirect&amp;id=95&amp;md5=4777886939ccb46320497e9e68a7cfc1" title="Flattr" target="_blank"><img src="http://blog.courtine.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.courtine.org/2010/07/07/convaincu-par-wordpress-3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=bcourtine&amp;popout=1&amp;url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F07%2Fconvaincu-par-wordpress-3%2F&amp;language=fr_FR&amp;category=text&amp;title=Convaincu+par+WordPress+3&amp;description=Comme+vous+pouvez+le+constater%2C+j%26%238217%3Bai+finalement+d%C3%A9cid%C3%A9+%28de+mani%C3%A8re+acc%C3%A9l%C3%A9r%C3%A9e%29+de+finaliser+ma+migration+vers+WordPress%2C+malgr%C3%A9+les+premi%C3%A8re+r%C3%A9serves+que+j%26%238217%3Bavais+pu+noter+durant%C2%A0%2C+en+particulier+celle+concernant...&amp;tags=Dotclear%2CPHP%2CWordPress%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Migrer de Dotclear 2 a WordPress 3</title>
		<link>http://blog.courtine.org/2010/07/05/migrer-de-dotclear-a-wordpress/</link>
		<comments>http://blog.courtine.org/2010/07/05/migrer-de-dotclear-a-wordpress/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 22:27:00 +0000</pubDate>
		<dc:creator>Benoît Courtine</dc:creator>
				<category><![CDATA[Vie du blog]]></category>
		<category><![CDATA[Dotclear]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://wpblog.courtine.org/?p=45</guid>
		<description><![CDATA[Comme je le disais dans mon billet précédent, en parallèle de mon installation de la version 2.2 de Dotclear, j&#8217;ai décidé de tester WordPress. Cependant, si je dois migrer, j&#8217;aimerais ne pas perdre tout l&#8217;historique des billets de ce blog. J&#8217;ai donc décidé en premier lieu de vérifier qu&#8217;il était possible d&#8217;importer le contenu d&#8217;un&#8230;]]></description>
			<content:encoded><![CDATA[<p>Comme je le disais dans mon billet précédent, en parallèle de mon installation de la version 2.2 de <a hreflang="fr" href="http://www.dotclear.net/">Dotclear</a>, j&#8217;ai décidé de tester <a hreflang="fr" href="http://www.wordpress-fr.net/">WordPress</a>.</p>
<p>Cependant, si je dois migrer, j&#8217;aimerais ne pas perdre tout l&#8217;historique des billets de ce blog. J&#8217;ai donc décidé en premier lieu de vérifier qu&#8217;il était possible d&#8217;importer le contenu d&#8217;un blog Dotclear.</p>
<p>Je ne détaille pas l&#8217;installation en local des deux moteurs sous <a hreflang="en" href="http://www.easyphp.org/">EasyPHP</a> en version 5.3, pour vérifier au passage les éventuelles incompatibilité (je suis devenu un peu paranoïaque depuis <a hreflang="en" href="/index.php?post/2010/06/07/Dotclear-et-PHP-5.3">cet épisode</a>) : elle ne pose aucun problèmes pour ces deux moteurs.<br />
<span id="more-45"></span></p>
<h3>Premier essai</h3>
<p>WordPress dispose d&#8217;un module d&#8217;import, mais par défaut, celui-ci n&#8217;offre pas la possibilité de migrer depuis Dotclear. Un lien sur cette page permet de parcourir la liste des plugins additionnels d&#8217;import, où on trouve sans difficulté le <a hreflang="en" href="http://wordpress.org/extend/plugins/dotclear-importer/">plugin d&#8217;import pour Dotclear</a>.</p>
<p>Le système d&#8217;installation de plugins de WordPress est très intuitif, et il faut bien le reconnaître, plus agréable que celle de Dotclear. Ce plugin s&#8217;installe donc automatiquement, sans aucune difficulté :<br />
<a title="Dotclear Importer" href="/public/images/blog/Dotclear_Importer.png"><img style="display: block; margin: 0 auto;" title="Dotclear Importer, juil. 2010" src="/public/images/blog/.Dotclear_Importer_m.jpg" alt="Dotclear Importer" /></a></p>
<p>L&#8217;extension une fois activée (ne pas oublier cette) devient disponible dans le menu &laquo;&nbsp;Outils &gt; Importer&nbsp;&raquo; :<br />
<a title="Test du plugin Dotclear Importer" href="/public/images/blog/Dotclear_Importer_Test.png"><img style="display: block; margin: 0 auto;" title="Test du plugin Dotclear Importer, juil. 2010" src="/public/images/blog/.Dotclear_Importer_Test_m.jpg" alt="Test du plugin Dotclear Importer" /></a></p>
<p>Je lance donc le processus d&#8217;import, que je pensais être une simple formalité :</p>
<ol>
<li>0 catégorie importée&#8230; Tient, c&#8217;est curieux, mais je regarderai plus tard !</li>
<li>Blocage à l&#8217;import des utilisateurs. Par intuition, je me dis que le problème vient peut-être du nom d&#8217;utilisateur de test &laquo;&nbsp;admin&nbsp;&raquo;, identique sur mes deux instances de test. Bingo ! Un changement rapide via <a hreflang="en" href="http://www.phpmyadmin.net/">phpMyAdmin</a> valide cette hypothèse et me permet de continuer</li>
<li>0 article importé : zut !</li>
<li>25 commentaires importés&#8230; sans les articles associés !</li>
</ol>
<h3>Aparté sur les contraintes d&#8217;intégrité en <a hreflang="fr" href="http://www.mysql.fr/">MySQL</a></h3>
<p>Bref&#8230; cet import semble être un bel échec : après vérification, la base est même devenue incohérente, avec des commentaires totalement orphelins en base. C&#8217;est dans ce genre de moments qu&#8217;on se redit que les contraintes de <a hreflang="fr" href="http://fr.wikipedia.org/wiki/Cl%C3%A9_%C3%A9trang%C3%A8re">clés étrangères</a> sont vraiment une bonne idée pour garantir <a hreflang="fr" href="http://fr.wikipedia.org/wiki/Int%C3%A9grit%C3%A9_r%C3%A9f%C3%A9rentielle">l&#8217;intégrité référentielle</a> de la base.</p>
<p>C&#8217;est également à ce moment qu&#8217;on se rend compte que Dotclear a des avantages non négligeables sur son concurrent : il ne fonctionne en effet (dans sa version 2) que sous <a hreflang="fr" href="http://fr.wikipedia.org/wiki/InnoDB">InnoDB</a> et implémente ces contraintes d&#8217;intégrité, alors que WordPress (même dans sa dernière version), reste par défaut sous <a hreflang="fr" href="http://fr.wikipedia.org/wiki/MyISAM">MyISAM</a> qui ne supporte pas les contraintes d&#8217;intégrité&#8230;</p>
<p>Voici à titre d&#8217;illustration une capture d&#8217;écran du module &laquo;&nbsp;Conception&nbsp;&raquo; de phpMyAdmin pour la base de Dotclear. On s&#8217;y rend compte que celles-ci permettent de mieux comprendre le fonctionnement de la base et le lien qui existe entre les données :<br />
<a title="Structure de la base de données Dotclear" href="/public/images/blog/Dotclear_Structure_BD.png"><img style="display: block; margin: 0 auto;" title="Structure de la base de données Dotclear, juil. 2010" src="/public/images/blog/.Dotclear_Structure_BD_m.jpg" alt="Structure de la base de données Dotclear" /></a></p>
<h3>Bilan</h3>
<p>Ce constat étant effectué, je persiste et essaye de comprendre pourquoi ce plugin d&#8217;import n&#8217;a pas fonctionné&#8230; Par chance, il est constitué d&#8217;un unique fichier, ce qui va faciliter mon analyse, qui sera rapide : ce plugin n&#8217;a été conçu que pour l&#8217;import de blogs sous Dotclear 1.X (les anciens noms de tables et de champs sont révélateurs).</p>
<p>La version 2 de Dotclear étant parue depuis 2008, je suis déçu de constater qu&#8217;il n&#8217;existe pas encore sur le dépôt WordPress officiel de plugin pour la migration &laquo;&nbsp;Dotclear 2 &gt; WordPress&nbsp;&raquo;, d&#8217;autant plus qu&#8217;une de mes motivations pour tester WordPress est sa communauté et le nombre d&#8217;extensions/thèmes disponibles.</p>
<h3>Et de WordPress vers Dotclear ?</h3>
<p>Pour affiner mon jugement, même si ce n&#8217;était pas le but initial, j&#8217;ai tenté l&#8217;opération inverse : import de données de test de WordPress 3 vers Dotclear. Ce dernier dispose en standard d&#8217;un module d&#8217;import de données WordPress. Et là, le test s&#8217;est révélé concluant :<br />
<a title="Test d'import de données WordPress dans Dotclear" href="/public/images/blog/WordPress_to_Dotclear.png"><img style="display: block; margin: 0 auto;" title="Test d'import de données WordPress dans Dotclear, juil. 2010" src="/public/images/blog/.WordPress_to_Dotclear_m.jpg" alt="Test d'import de données WordPress dans Dotclear" /></a></p>
<h3>Troisième mi-temps</h3>
<p>Comme je n&#8217;aime pas m&#8217;avouer vaincu, j&#8217;ai sorti mon arme joker&#8230; <a hreflang="fr" href="http://www.google.fr/">Google</a> ! Il m&#8217;a conduit sur <a hreflang="fr" href="http://theworms.fr/2010/06/27/mirgation-dc22-vers-wp3/">cet article</a> détaillant la procédure.</p>
<p>Le <a hreflang="fr" href="http://www.digitaladventures.fr/realisations/import-export-dotclear2-wordpress2/">plugin d&#8217;import utilisé</a> est une mise à jour de celui que je mentionnais ci-dessus. Et afin d&#8217;apporter ma pierre à l&#8217;édifice, voici quelques remarques pour aider à la migration :</p>
<ul>
<li>Le bug de l&#8217;import des utilisateurs subsiste : il faut donc veiller à ce que le premier utilisateur créé sous WordPress aie un login différent de celui du blog Dotclear que vous voulez importer</li>
<li>L&#8217;import des liens ne fonctionne toujours pas</li>
<li>Ce plugin ne fonctionne que si les articles sont saisis en utilisant la syntaxe <a hreflang="fr" href="http://fr.wikipedia.org/wiki/Extensible_HyperText_Markup_Language"><acronym title="eXtensible HyperText Markup Language">XHTML</acronym></a> (et non la syntaxe wiki).</li>
</ul>
<p>On peut régler ce dernier problème en convertissant un à un les billets Dotclear via le lien &laquo;&nbsp;Convertir en <acronym title="eXtensible HyperText Markup Language">XHTML</acronym>&nbsp;&raquo; du menu de droite (juste sous &laquo;&nbsp;Format de texte : wiki&nbsp;&raquo;). Je saisis tous mes billets en syntaxe wiki et je n&#8217;avais pas envie de les convertir un par un, d&#8217;autant plus que le plugin <a hreflang="fr" href="http://plugins.code-web.org/plugin/syntaxehl/">SyntaxeHL</a> nécessite d&#8217;utiliser la syntaxe wiki. J&#8217;ai donc trouvé un moyen de contourner cette obligation. Dans la table &laquo;&nbsp;post&nbsp;&raquo; de Dotclear, il y a 4 champs : post_content, post_excerpt, post_content_xhtml et post_excerpt_xhtml. Quand on saisit un article, le texte est enregistré dans les tables post_content et post_excerpt, mais Dotclear en fait une conversion en <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> dans post_content_xhtml et post_excerpt_xhtml pour l&#8217;affichage. La modification du plugin proprement dite consiste donc à récupérer le contenu des articles depuis ces deux dernières tables au lieu des deux premières.</p>
<p>Voici le détail de la manipulation à effectuer. A la ligne 637 (numéro de ligne susceptible de changer en fonction de votre version du plugin), il faut remplacer le code :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>637
638
639
640
641
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$post_content</span> <span style="color: #339933;">=</span> dc2_textconv <span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_excerpt</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$post_excerpt</span> <span style="color: #339933;">=</span> dc2_textconv <span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_excerpt</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$post_content</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$post_excerpt</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&lt;!--more--&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$post_content</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>par</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>637
638
639
640
641
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$post_content</span> <span style="color: #339933;">=</span> dc2_textconv <span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_content_xhtml</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_excerpt</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$post_excerpt</span> <span style="color: #339933;">=</span> dc2_textconv <span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_excerpt_xhtml</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$post_content</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$post_excerpt</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&lt;!--more--&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$post_content</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Cette modification a été testée et approuvée par mes soins ! Le test ayant été concluant en local, il est temps de passer à la réalité. Le blog migré sous Dotclear est disponible à l&#8217;adresse <a hreflang="fr" href="http://wpblog.courtine.org/">http://wpblog.courtine.org/</a>. Il ne s&#8217;agit pour le moment qu&#8217;une version de test, et beaucoup de choses ont été perdues lors de la migration (images apparaissant en javascript, coloration syntaxique du code, liens entre les billets, pages statiques, etc.), que je m&#8217;efforcerai de corriger dans les jours avenir pour véritablement tester et comparer les deux systèmes.</p>
<p>D&#8217;ici là, n&#8217;hésitez pas à donner votre avis&#8230;
<div class="tweetmeme_button" style="float: left; margin-left: 10px; margin-right: 20px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F05%2Fmigrer-de-dotclear-a-wordpress%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F05%2Fmigrer-de-dotclear-a-wordpress%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=bcourtine%3AR_adaa69f468b94402bc961e78ad01d140&amp;hashtags=Dotclear,MySQL,PHP,WordPress&amp;b=2" height="61" width="50" /><br />
			</a>
		</div> <p><a href="http://blog.courtine.org/?flattrss_redirect&amp;id=45&amp;md5=da90554399b2f835fa0870e3269c5fa7" title="Flattr" target="_blank"><img src="http://blog.courtine.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.courtine.org/2010/07/05/migrer-de-dotclear-a-wordpress/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=bcourtine&amp;popout=1&amp;url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F05%2Fmigrer-de-dotclear-a-wordpress%2F&amp;language=fr_FR&amp;category=text&amp;title=Migrer+de+Dotclear+2+a+WordPress+3&amp;description=Comme+je+le+disais+dans+mon+billet+pr%C3%A9c%C3%A9dent%2C+en+parall%C3%A8le+de+mon+installation+de+la+version+2.2+de+Dotclear%2C+j%26%238217%3Bai+d%C3%A9cid%C3%A9+de+tester+WordPress.+Cependant%2C+si+je+dois+migrer%2C+j%26%238217%3Baimerais...&amp;tags=Dotclear%2CMySQL%2CPHP%2CWordPress%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Migration du blog vers Dotclear 2.2</title>
		<link>http://blog.courtine.org/2010/07/02/migration-du-blog-vers-dotclear-2-2/</link>
		<comments>http://blog.courtine.org/2010/07/02/migration-du-blog-vers-dotclear-2-2/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 07:34:00 +0000</pubDate>
		<dc:creator>Benoît Courtine</dc:creator>
				<category><![CDATA[Vie du blog]]></category>
		<category><![CDATA[Dotclear]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://wpblog.courtine.org/?p=44</guid>
		<description><![CDATA[<p>Depuis hier, la version finale de <a href="http://www.dotclear.net/" hreflang="fr">Dotclear</a> est disponible.</p> <p>J'attendais cette version avec impatience, en particulier pour sa compatibilité avec <a href="http://www.php.net/" hreflang="en"><acronym title="Hypertext Preprocessor">PHP</acronym></a> 5.3 <a href="/index.php?post/2010/06/07/Dotclear-et-PHP-5.3" hreflang="en">dont j'avais parlé</a> il y a peu (afin d'avoir une véritable compatibilité et non un "hack" non officiel).</p> <p>Je me suis donc empressé de la tester (en local tout d'abord), avec une bonne surprise&#160;: la migration se déroule sans aucune difficulté, soit en utilisant l'outil de mise à jour automatique, soit en écrasant la version précédente par la nouvelle (la version distribuée ne contenant pas le fichier de configuration de connexion, cette opération manuelle a le bon goût de garder les paramètres existants).</p> <p>Deuxième bonne surprise, pas de régression sur les quelques plugins que j'utilise&#160;! Après ces quelques vérifications d'usage et une sauvegarde complète (base de données comprise), j'ai procédé à la migration réelle du blog, sans aucun problème&#160;!</p>]]></description>
			<content:encoded><![CDATA[<p>Depuis hier, la version finale de <a href="http://www.dotclear.net/" hreflang="fr">Dotclear</a> est disponible.</p>
<p>J&#8217;attendais cette version avec impatience, en particulier pour sa compatibilité avec <a href="http://www.php.net/" hreflang="en"><acronym title="Pre-Hypertext Processing">PHP</acronym></a> 5.3 <a href="/index.php?post/2010/06/07/Dotclear-et-PHP-5.3" hreflang="en">dont j&#8217;avais parlé</a> il y a peu (afin d&#8217;avoir une véritable compatibilité et non un &laquo;&nbsp;hack&nbsp;&raquo; non officiel).</p>
<p>Je me suis donc empressé de la tester (en local tout d&#8217;abord), avec une bonne surprise&nbsp;: la migration se déroule sans aucune difficulté, soit en utilisant l&#8217;outil de mise à jour automatique, soit en écrasant la version précédente par la nouvelle (la version distribuée ne contenant pas le fichier de configuration de connexion, cette opération manuelle a le bon goût de garder les paramètres existants).</p>
<p>Deuxième bonne surprise, pas de régression sur les quelques plugins que j&#8217;utilise&nbsp;! Après ces quelques vérifications d&#8217;usage et une sauvegarde complète (base de données comprise), j&#8217;ai procédé à la migration réelle du blog, sans aucun problème&nbsp;!</p>
<p><span id="more-44"></span></p>
<p>Une fois cette formalité effectuée, j&#8217;ai voulu tester la nouvelle version.</p>
<p>En administration, aucun changement significatif. C&#8217;est &laquo;&nbsp;normal&nbsp;&raquo;, puisque outre <acronym title="Pre-Hypertext Processing">PHP</acronym> 5.3, cette montée de version <a href="http://www.morefnu.org/post/2010/06/01/Sur-le-chemin-de-la-2.2" hreflang="fr">est surtout technique</a>, avec une amélioration annoncée des performances du moteur du site.</p>
<p>Voici à quoi ressemble celle-ci, pour ceux qui ne connaissent pas le moteur&nbsp;: <a href="/public/images/blog/Dotclear_admin.png" title="Console d&#039;administration de Dotclear"><img src="/public/images/blog/.Dotclear_admin_m.jpg" alt="Console d&#039;administration de Dotclear" style="display:block; margin:0 auto;" title="Console d&#039;administration de Dotclear, juil. 2010" /></a></p>
<p>On regrette que cette interface n&#8217;aie pas été rendue un peu plus &laquo;&nbsp;Web 2.0&#8243;, comme celle de <a href="http://www.wordpress-fr.net/" hreflang="fr">WordPress</a> 3.0, que je teste actuellement (pour une éventuelle migration si je suis suffisamment séduit)&nbsp;: <a href="/public/images/blog/WordPress_admin.png" title="Console d&#039;administration de WordPress"><img src="/public/images/blog/.WordPress_admin_m.jpg" alt="Console d&#039;administration de WordPress" style="display:block; margin:0 auto;" title="Console d&#039;administration de WordPress, juil. 2010" /></a></p>
<p>Voyons maintenant ce qui se trouve dans le giron de cette version 2.2. Tout d&#8217;abord, il y a eu <a href="http://dotaddict.org/blog/post/2010/06/18/Avis-d-ouverture" hreflang="fr">la réouverture de la soumission de plugins</a> sur le site officiel <a href="http://dotaddict.org/" hreflang="fr">DotAddict</a>. Jusqu&#8217;à récemment, il était nécessaire de glaner ses plugins sur <a href="http://plugins-dotclear.geeek.org/" hreflang="fr">les dépôts non officiels</a>, ou en recherchant sur le web&#8230;</p>
<p>Avec cette réouverture de la plateforme officielle, nous avons deux nouvelles connexes&nbsp;:</p>
<ul>
<li>l&#8217;ajout d&#8217;un nombre non négligeable de nouveaux plugins depuis cette réouverture&nbsp;!</li>
<li>le plugin <a href="http://plugins.dotaddict.org/dc2/details/daInstaller" hreflang="fr">DaInstaller</a>, simplifiant grandement l&#8217;installation et la mise à jour des plugins ou de thèmes, directement depuis DotAddict. Il m&#8217;a permis de mettre très facilement à jour mes plugins après l&#8217;installation de cette nouvelle version&nbsp;:</li>
</ul>
<p><a href="/public/images/blog/DaInstaller.png" title="Console du plugin DaInstaller"><img src="/public/images/blog/.DaInstaller_m.jpg" alt="Console du plugin DaInstaller" style="display:block; margin:0 auto;" title="Console du plugin DaInstaller, juil. 2010" /></a></p>
<p>Maintenant que le moteur a été complètement revu, on attend avec impatience la prochaine version et une nouvelle interface, de nouveaux thèmes et de nouveaux plugins !&#8230;</p>
<div class="tweetmeme_button" style="float: left; margin-left: 10px; margin-right: 20px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F02%2Fmigration-du-blog-vers-dotclear-2-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F02%2Fmigration-du-blog-vers-dotclear-2-2%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=bcourtine%3AR_adaa69f468b94402bc961e78ad01d140&amp;hashtags=Dotclear,Open+Source,PHP,WordPress&amp;b=2" height="61" width="50" /><br />
			</a>
		</div> <p><a href="http://blog.courtine.org/?flattrss_redirect&amp;id=44&amp;md5=15fd2c3208a9c1132f272d37bb909ffe" title="Flattr" target="_blank"><img src="http://blog.courtine.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.courtine.org/2010/07/02/migration-du-blog-vers-dotclear-2-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=bcourtine&amp;popout=1&amp;url=http%3A%2F%2Fblog.courtine.org%2F2010%2F07%2F02%2Fmigration-du-blog-vers-dotclear-2-2%2F&amp;language=fr_FR&amp;category=text&amp;title=Migration+du+blog+vers+Dotclear+2.2&amp;description=Depuis+hier%2C+la+version+finale+de+Dotclear+est+disponible.+J%26%238217%3Battendais+cette+version+avec+impatience%2C+en+particulier+pour+sa+compatibilit%C3%A9+avec+PHP+5.3+dont+j%26%238217%3Bavais+parl%C3%A9+il+y+a+peu+%28afin...&amp;tags=Dotclear%2COpen+Source%2CPHP%2CWordPress%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Dotclear et PHP 5.3</title>
		<link>http://blog.courtine.org/2010/06/07/dotclear-et-php-5-3/</link>
		<comments>http://blog.courtine.org/2010/06/07/dotclear-et-php-5-3/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 23:06:00 +0000</pubDate>
		<dc:creator>Benoît Courtine</dc:creator>
				<category><![CDATA[Vie du blog]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://wpblog.courtine.org/?p=43</guid>
		<description><![CDATA[Un problème n&#8217;arrivant jamais seul (pour reprendre un proverbe connu), ce billet est la suite de mes mésaventures avec la montée de version de mon serveur dédié vers Ubuntu 10.04. Après avoir reconfiguré l&#8217;ensemble des serveurs, je tente d&#8217;accéder à la page d&#8217;accueil du blog&#8230; et c&#8217;est le drame&#160;! La page s&#8217;affiche bien, mais les&#8230;]]></description>
			<content:encoded><![CDATA[<p>Un problème n&#8217;arrivant jamais seul (pour reprendre un proverbe connu), ce billet est la suite de <a href="/index.php?post/2010/06/02/Serveurs-dedies">mes mésaventures</a> avec la montée de version de mon serveur dédié vers <a href="http://www.ubuntu-fr.org/" hreflang="fr">Ubuntu 10.04</a>.</p>
<p>Après avoir reconfiguré l&#8217;ensemble des serveurs, je tente d&#8217;accéder à la page d&#8217;accueil du blog&#8230; et c&#8217;est le drame&#160;! La page s&#8217;affiche bien, mais les billets ont disparus. Ceux qui sont passés sur le blog dans la journée du mercredi 2 juin ont pu se rendre compte de ce phénomène.</p>
<p>Les billets qui n&#8217;apparaissent pas, ça m&#8217;a fait penser à un problème de connexion avec la base de données. Ce qui est curieux, c&#8217;est que lorsque <a href="http://fr.dotclear.org/" hreflang="fr">Dotclear</a> ne parvient pas à se connecter à la base, on n&#8217;arrive pas jusqu&#8217;à la page d&#8217;accueil mais sur une page d&#8217;erreur spécifique. Une connexion à l&#8217;interface d&#8217;administration me confirme d&#8217;ailleurs que j&#8217;ai accès à une partie de la base&#160;: j&#8217;obtiens le titre des billets mais pas leur contenu.</p>
<p>Première piste&#160;: mes données seraient corrompues suite à la restauration de la base. Quelques requêtes <acronym title="Structured Query Language">SQL</acronym> en ligne de commande me permettent d&#8217;infirmer cette hypothèse&#160;: j&#8217;accède bien au contenu des billets.</p>
<p>Je me rabat donc vers une piste <acronym title="Pre-Hypertext Processing">PHP</acronym> (ou une librairie comme php-mysql), suite à la lecture des logs web qui contiennent une grande quantité d&#8217;avertissements de type &#8220;<em>Warning&#160;: Parameter n to myfunction expected to be a reference</em>&#8221;. Ces messages me mettent la puce à l&#8217;oreille, et un &#8220;<em>php -version</em>&#8221; m&#8217;indique &#8220;5.3.2&#8221;, alors qu&#8217;Ubuntu 9.10 fonctionnait avec <acronym title="Pre-Hypertext Processing">PHP</acronym> 5.2.X.</p>
<p>Dans <acronym title="Pre-Hypertext Processing">PHP</acronym> 5.3, <a href="http://fr.php.net/manual/fr/migration53.incompatible.php" hreflang="fr">une liste d&#8217;évolution</a> est incompatible avec les versions précédentes. Heureusement, je ne suis pas le premier à avoir eu ce problème et <a href="http://forum.dotclear.net/viewtopic.php?pid=252993" hreflang="fr">une solution non officielle</a> est disponible sur <a href="http://forum.dotclear.net/" hreflang="fr">le forum de Dotclear</a>. Elle a été soumise par <a href="http://forum.dotclear.net/profile.php?id=443" hreflang="fr">Dsls</a> dans les réponses 11 et 14, et fonctionne sans problèmes. Il faudra ensuite vérifier vos plugins (et leur appliquer une <a href="http://maxime-varinard.developpez.com/tutoriels/php/migration-vers-php-5-3/" hreflang="fr">procédure de migration</a> s&#8217;ils ne fonctionnent plus après cette montée de version de <acronym title="Pre-Hypertext Processing">PHP</acronym>).</p>
<p>Sortons maintenant notre appeau à trolls (mais j&#8217;assume)&#160;: cette évolution de <acronym title="Pre-Hypertext Processing">PHP</acronym> qui oblige toutes les applications à changer une partie de leur code avec des contournements obscurs (transformation d&#8217;objets en tableaux, entre autres choses&#8230;) me paraît vraiment curieuse.</p>
<p>Autre déception&#160;: cette version de <acronym title="Pre-Hypertext Processing">PHP</acronym> est officielle depuis maintenant presque un an (sortie le 30 juin 2009)&#160;! Je trouve regrettable qu&#8217;il n&#8217;y aie pas un patch officiel de Dotclear (la version corrigée est la 2.2 qui n&#8217;est encore qu&#8217;en version béta).</p>
<p>Malgré cette déception, j&#8217;apprécie Dotclear (en particulier parcequ&#8217;il s&#8217;agit d&#8217;un projet francophone). Cependant, je me demande si je ne vais pas dans un futur plus ou moins proche migrer vers <a href="http://www.wordpress-fr.net/" hreflang="fr">WordPress</a>. La communauté de ce dernier est en effet beaucoup plus nombreuse. Conséquence&#160;: le nombre de fonctionnalités (modules), de thèmes, et la vitesse des mises à jour sont beaucoup plus importants. S&#8217;il a été un concurrent pendant longtemps, j&#8217;ai de plus en plus l&#8217;impression que Dotclear est à la traine (la page des modules et des thèmes évolue très peu), et les modules Dotclear sont la plupart du temps des adaptations de fonctionnalités qui existent sur WordPress.</p>
<p>Je pense que j&#8217;attendrai la sortie de la version 2.2 pour me décider (si elle ne tarde pas trop).</p>
<div class="tweetmeme_button" style="float: left; margin-left: 10px; margin-right: 20px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F06%2F07%2Fdotclear-et-php-5-3%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F06%2F07%2Fdotclear-et-php-5-3%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=bcourtine%3AR_adaa69f468b94402bc961e78ad01d140&amp;hashtags=PHP,Ubuntu&amp;b=2" height="61" width="50" /><br />
			</a>
		</div> <p><a href="http://blog.courtine.org/?flattrss_redirect&amp;id=43&amp;md5=ce00549d3e6900783fb7e055f913141a" title="Flattr" target="_blank"><img src="http://blog.courtine.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.courtine.org/2010/06/07/dotclear-et-php-5-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=bcourtine&amp;popout=1&amp;url=http%3A%2F%2Fblog.courtine.org%2F2010%2F06%2F07%2Fdotclear-et-php-5-3%2F&amp;language=fr_FR&amp;category=text&amp;title=Dotclear+et+PHP+5.3&amp;description=Un+probl%C3%A8me+n%26%238217%3Barrivant+jamais+seul+%28pour+reprendre+un+proverbe+connu%29%2C+ce+billet+est+la+suite+de+mes+m%C3%A9saventures+avec+la+mont%C3%A9e+de+version+de+mon+serveur+d%C3%A9di%C3%A9+vers+Ubuntu+10.04....&amp;tags=PHP%2CUbuntu%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Retour</title>
		<link>http://blog.courtine.org/2010/05/31/retour/</link>
		<comments>http://blog.courtine.org/2010/05/31/retour/#comments</comments>
		<pubDate>Mon, 31 May 2010 23:00:00 +0000</pubDate>
		<dc:creator>Benoît Courtine</dc:creator>
				<category><![CDATA[Vie du blog]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://wpblog.courtine.org/?p=42</guid>
		<description><![CDATA[Tout d&#8217;abord, je présente toutes mes excuses aux (quelques) lecteurs qui ont essayé d&#8217;accéder au blog depuis 5 jours&#160;: je viens de m&#8217;apercevoir que le serveur MySQL était tombé, rendant le blog indisponible. Et comme j&#8217;ai maintenant un serveur dédié, personne ne l&#8217;a remis en route avant ce soir&#8230; Ensuite, le voyage de noces (au&#8230;]]></description>
			<content:encoded><![CDATA[<p>Tout d&#8217;abord, je présente toutes mes excuses aux (quelques) lecteurs qui ont essayé d&#8217;accéder au blog depuis 5 jours&#160;: je viens de m&#8217;apercevoir que le serveur <a href="http://www.mysql.com/" hreflang="en">MySQL</a> était tombé, rendant le blog indisponible. Et comme j&#8217;ai maintenant un <a href="/index.php?post/2010/04/06/Changement-d-hebergeur-vers-un-serveur-dedie" hreflang="fr">serveur dédié</a>, personne ne l&#8217;a remis en route avant ce soir&#8230;</p>
<p>Ensuite, le voyage de noces (au <a href="http://fr.wikipedia.org/wiki/Canada" hreflang="fr">Canada</a>) est malheureusement terminé, et je reprends donc le travail&#8230; et le blogging&#160;!</p>
<p>Mais avant de reprendre l&#8217;écriture de billets techniques, j&#8217;adresse ici un grand remerciement (avant les plus traditionnelles cartes de remerciements envoyées par la poste) à toutes les personnes ayant contribué à nous offrir un magnifique mariage. En particulier à la chorale&#160;! Et pour clore ce billet, voici l&#8217;enregistrement du  <a href="/public/musique/Mariage_SicutCervus.ogg">Sicut Cervus de Palestrina</a> qui a suivi l&#8217;échange de nos consentements (enregistré avec le <a href="http://www.zoom.co.jp/english/products/h4n/" hreflang="en">H4n Handy Recorder</a> dont j&#8217;ai déjà eu <a href="/index.php?post/2009/07/14/Test-du-H4n-Handy-Recorder">l&#8217;occasion de parler</a>).</p>
<p><a href="/public/images/mariage.jpg" title="Mariage"><img src="/public/images/mariage.jpg" alt="Mariage" style="display:block; margin:0 auto;" title="Mariage, juin 2010" /></a></p>
<div class="tweetmeme_button" style="float: left; margin-left: 10px; margin-right: 20px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F05%2F31%2Fretour%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.courtine.org%2F2010%2F05%2F31%2Fretour%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=bcourtine%3AR_adaa69f468b94402bc961e78ad01d140&amp;hashtags=Audio,MySQL&amp;b=2" height="61" width="50" /><br />
			</a>
		</div> <p><a href="http://blog.courtine.org/?flattrss_redirect&amp;id=42&amp;md5=7727eb7488be3ef30da590f1f667181e" title="Flattr" target="_blank"><img src="http://blog.courtine.org/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.courtine.org/2010/05/31/retour/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=bcourtine&amp;popout=1&amp;url=http%3A%2F%2Fblog.courtine.org%2F2010%2F05%2F31%2Fretour%2F&amp;language=fr_FR&amp;category=text&amp;title=Retour&amp;description=Tout+d%26%238217%3Babord%2C+je+pr%C3%A9sente+toutes+mes+excuses+aux+%28quelques%29+lecteurs+qui+ont+essay%C3%A9+d%26%238217%3Bacc%C3%A9der+au+blog+depuis+5+jours%26%23160%3B%3A+je+viens+de+m%26%238217%3Bapercevoir+que+le+serveur+MySQL+%C3%A9tait+tomb%C3%A9%2C+rendant...&amp;tags=Audio%2CMySQL%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
