<?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>Christophe Le Bot &#187; Outils du développeur</title>
	<atom:link href="http://blog.christophelebot.fr/category/developper/outils-du-developpeur/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.christophelebot.fr</link>
	<description>Pratique de la conception numérique</description>
	<lastBuildDate>Tue, 15 Jun 2010 23:02:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Le guide pratique Scrum bientôt dans les bacs</title>
		<link>http://blog.christophelebot.fr/2010/02/01/guide-pratique-scrum-claude-aubry/</link>
		<comments>http://blog.christophelebot.fr/2010/02/01/guide-pratique-scrum-claude-aubry/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 22:55:42 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Bonnes pratiques]]></category>
		<category><![CDATA[Evénements]]></category>
		<category><![CDATA[Gestion de projets]]></category>
		<category><![CDATA[Génie logiciel]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Qualité]]></category>
		<category><![CDATA[Recherche et innovation]]></category>
		<category><![CDATA[Se former]]></category>
		<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/?p=691</guid>
		<description><![CDATA[
Encore 9 jours de patience avant de découvrir un livre très attendu : Scrum, de Claude Aubry, chez Dunod. Les méthodes agiles ont le vent en poupe et les précurseurs, comme Claude, ont maintenant suffisamment de recul et d&#8217;expérience pour nous expliquer Scrum avec beaucoup d&#8217;efficacité et de pédagogie.
A lire sans retenue !
Si après ça, [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame"><img class="alignnone size-full wp-image-693" title="Scrum, par Claude Aubry - Dunod" src="http://blog.christophelebot.fr/wp-content/uploads/2010/02/aubry_scrum.jpg" alt="" width="312" height="448" /></div>
<p>Encore 9 jours de patience avant de découvrir un livre très attendu : Scrum, de <a title="Claude Aubry" href="http://www.aubryconseil.com/">Claude Aubry</a>, chez Dunod. Les méthodes agiles ont le vent en poupe et les précurseurs, comme Claude, ont maintenant suffisamment de recul et d&#8217;expérience pour nous expliquer Scrum avec beaucoup d&#8217;efficacité et de pédagogie.</p>
<p>A lire sans retenue !</p>
<p>Si après ça, vous n&#8217;êtes pas convaincus, je ne sais plus quoi faire. Ah si, venir aux ateliers du <a title="Site officiel SigmaT" href="http://www.sigmat.fr/">SigmaT</a> (dont Claude Aubry est le président !). Le prochain est mercredi 3 février et ce sera un XP Game, parfait pour découvrir l&#8217;efficacité d&#8217;une démarche agile.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2010/02/01/guide-pratique-scrum-claude-aubry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Barcamp PHP toulousain : la synthèse</title>
		<link>http://blog.christophelebot.fr/2009/11/05/barcamp-php-toulousain-la-synthese/</link>
		<comments>http://blog.christophelebot.fr/2009/11/05/barcamp-php-toulousain-la-synthese/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 23:22:29 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Bases de données]]></category>
		<category><![CDATA[Bonnes pratiques]]></category>
		<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Evénements]]></category>
		<category><![CDATA[Génie logiciel]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Programmation avancée]]></category>
		<category><![CDATA[Qualité]]></category>
		<category><![CDATA[Recherche et innovation]]></category>
		<category><![CDATA[Se former]]></category>
		<category><![CDATA[Serveurs]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[AFUP]]></category>
		<category><![CDATA[Barcamp]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tests]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/?p=570</guid>
		<description><![CDATA[
Jeudi dernier se tenait le Barcamp PHP Cheese &#38; Wine. Même si le vin et le fromage ont été très appréciés, nous n&#8217;étions pas venus (seulement) pour ça. Alors pour les absents qui ont eu tort de l&#8217;être, voici une petite synthèse de cette longue soirée.
Un vrai barcamp
Premier bon point : c&#8217;est un vrai barcamp [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame"><img class="alignnone size-medium wp-image-531" title="Bacrcamp PHP Toulouse" src="http://blog.christophelebot.fr/wp-content/uploads/2009/10/barcampPHP01-06629-420x251.jpg" alt="Bacrcamp PHP Toulouse" width="420" height="251" /></div>
<p>Jeudi dernier se tenait le <a title="Barcamp PHP à Toulouse le 29 octobre" href="/2009/10/06/barcamp-php-linagora-toulouse/">Barcamp PHP Cheese &amp; Wine</a>. Même si le vin et le fromage ont été très appréciés, nous n&#8217;étions pas venus (seulement) pour ça. Alors pour les absents qui ont eu tort de l&#8217;être, voici une petite synthèse de cette longue soirée.</p>
<h3>Un vrai barcamp</h3>
<p>Premier bon point : c&#8217;est un vrai barcamp où les participants se présentent et définissent le contenu des ateliers. Tous les barcamps ne respectent pas cette règle de base&#8230; Xavier Gorse, président de l&#8217;<a title="Site officiel de l'AFUP" href="http://www.afup.org/">AFUP</a>, a donc joué le rôle de &laquo;&nbsp;maître de cérémonie&nbsp;&raquo; pour établir le programme d&#8217;après les souhaits de chacun  :</p>
<ul>
<li>PHP et sécurité</li>
<li>PHP 5.3</li>
<li>Déploiement d&#8217;applications PHP</li>
<li>PHP et les bases de données &laquo;&nbsp;NoSQL&nbsp;&raquo;</li>
<li>Outillage PHP</li>
<li>PHP et testing</li>
<li>Frameworks PHP</li>
</ul>
<p>Pour ma part, j&#8217;ai participé aux ateliers :</p>
<ul>
<li>Déploiement d&#8217;applications PHP</li>
<li>PHP et les bases de données &laquo;&nbsp;NoSQL&nbsp;&raquo;</li>
<li>PHP et testing</li>
</ul>
<p>Je limite donc mon article à ces sujets, sachant que d&#8217;autres synthèses ont déjà été publiées :</p>
<ul>
<li><a title="Synthèse du Barcamp PHP toulousain" href="http://www.raphael-rougeron.com/post/2009/11/02/Synth%C3%A8se-du-Barcamp-PHP-toulousain">Synthèse du Barcamp PHP toulousain</a>, par Raphaël Rougeron</li>
<li><a title="Synthèse du Barcamp PHP toulousain" href="http://methylbro.titaxium.org/post/2009/11/04/synthese-du-barcamp-php-toulousain">Synthèse du Barcamp PHP toulousain</a>, par Thomas Gasc</li>
</ul>
<h3>Déploiement d&#8217;applications PHP</h3>
<p>Cet atelier a mis en évidence la <strong>difficulté de déployer des applications web</strong> en général (technologies nombreuses et environnement hétérogène). Tous les outils existants ont été passés en revue, du paquet Linux (.deb) aux outils spécifiques à PHP (<a title="Projet PEAR" href="http://pear.php.net/">PEAR</a>, <a title="Projet Phing" href="http://www.phing.info/">Phing</a>, <a title="Phar sur php.net" href="http://php.net/manual/fr/intro.phar.php">Phar</a>) en passant par des intermédiaires parfois plus adaptés (makefile, <a title="Puppet" href="http://reductivelabs.com/products/puppet/">Puppet</a>, <a title="Capistrano" href="http://www.capify.org/">Capistrano</a>, <a title="Projet Apache Ant" href="http://ant.apache.org/">Ant</a>). Deux groupes de participants étaient clairement représentés, avec des besoins très différents :</p>
<ul>
<li><strong>Déploiement d&#8217;une solution sur un parc important et hétérogène</strong> (cas des éditeurs de solutions, comme <a title="Linagora" href="http://www.linagora.com/">Linagora</a> avec <a title="Site officiel OBM" href="http://pro.obm.org/">OBM</a>)</li>
<li><strong>Déploiement d&#8217;un projet sur-mesure sur un ou quelques serveurs, mais très fréquemment et avec des contraintes d&#8217;intégration de contenus externes</strong> (cas des agences web, avec plusieurs déploiements par jour).</li>
</ul>
<p>Dans le premier cas, la difficulté est d&#8217;identifier la configuration des serveurs cibles et de préparer les paquets d&#8217;installation correspondants (.deb pour chaque distribution Linux, .msi pour chaque version de Windows, etc.), tout en assurant la compatibilité des données sans toujours les connaître (tests de régression).</p>
<p>Dans le second cas, il faut savoir intégrer pendant le déploiement les données du site en exploitation (base de données, templates gérés par un web designer externe, etc.), avec d&#8217;éventuelles transformations (ETL, Extract Transform Load).</p>
<p>J&#8217;ai ajouté qu&#8217;un déploiement ne se limite pas à la livraison de la partie applicative mais doit aussi <strong>savoir traiter la mise à jour des outils liés au projet</strong> (plate-forme de gestion de tickets, extranet, feuille de route, tests, sauvegardes, alertes, etc.).</p>
<p>En dehors de <a title="Projet PEAR" href="http://pear.php.net/">PEAR</a>, trés utilisé et qui est un outil de déploiement à l&#8217;origine, j&#8217;ai une préférence pour <a title="Projet Apache Ant" href="http://ant.apache.org/">Ant</a> + <a title="Projet Phing" href="http://www.phing.info/">Phing</a> et <a title="Capistrano" href="http://www.capify.org/">Capistrano</a>.</p>
<h3>Bases de données &laquo;&nbsp;NoSQL&nbsp;&raquo;</h3>
<p>Là, on entre dans une autre dimension. Les bases &laquo;&nbsp;NoSQL&nbsp;&raquo; sont des <strong>bases de données non relationnelles</strong>. En gros, on ne retrouve pas le schéma habituel &laquo;&nbsp;tables contenant des champs et étant reliées entre elles&nbsp;&raquo;. L&#8217;avantage est d&#8217;<strong>obtenir des performances exceptionnelles sur des entrepôts de données énormes</strong>. Parmi les acteurs majeurs qui développent et utilisent des bases &laquo;&nbsp;NoSQL&nbsp;&raquo;, on peut citer : Google (projet Big Table qui a inspiré le <a title="Projet Apache Cassandra" href="http://incubator.apache.org/cassandra/">projet Cassandra</a>), Facebook ou Linkedin.</p>
<p>Si on revient à la dure réalité d&#8217;un acteur de dimension modeste, on constate que ces technologies émergentes et prometteuses sont encore très spécifiques. Les bases relationnelles ont de beaux jours devant elles. La difficulté est notamment de <strong>réintégrer dans l&#8217;application PHP ce qui fait la force des systèmes SQL</strong> : sélection, jointures, intégrité référentielle, etc. Le volet <em>testing </em>des projets en prend un coup&#8230;</p>
<h3>PHP et testing</h3>
<p>Atelier en petit comité (6 personnes), en concurrence déloyale avec l&#8217;atelier Frameworks qui a fait le plein ! Nous avons tenté de lister les types de tests liés à une application web, en dépassant autant que possible la simple vue du développeur :</p>
<ul>
<li>Tests unitaires (PHP et Javascript)</li>
<li>Tests fonctionnels</li>
<li>Tests d&#8217;IHM (via <a title="Selenium Core" href="http://seleniumhq.org/projects/core/">Selenium Core</a>, <a title="Selenium Remote Control" href="http://seleniumhq.org/projects/remote-control/">Selenium RC</a> et <a title="Selenium IDE" href="http://seleniumhq.org/projects/ide/">Selenium IDE</a>)</li>
<li>Tests de recette</li>
<li>Tests de non régression</li>
<li>Tests de performance</li>
<li>Tests de charge</li>
<li>Tests de conformité (normes, W3C, accessibilité, etc.)</li>
<li>Tests ergonomiques (tri par cartes, paper prototyping, tests utilisateurs, etc.)</li>
<li>A/B testing</li>
</ul>
<p>Les échanges sur nos expériences ont été très instructifs. Nous étions tous d&#8217;accord pour insister sur la définition précise des cas d&#8217;utilisation qui facilite la gestion des tests pendant toute la durée du projet<strong> avec le client</strong>. D&#8217;où une phase de spécifications sérieuse qui conditionne la qualité du travail livré. Certains tests peuvent faire l&#8217;objet de validation contractuelle, comme les wireframes issus de tests ergonomiques qui servent ensuite de feuille de route aux intégrateurs et développeurs.</p>
<p>La difficulté avec les tests, c&#8217;est de savoir placer le curseur pour ne pas s&#8217;y noyer. <strong>Il n&#8217;est pas réaliste d&#8217;appliquer les tests de façon exhaustive</strong>. C&#8217;est un idéal en contradiction avec les budgets et les délais imposés en pratique. Il faut donc savoir réaliser les bons tests, au bon endroit et au bon moment. Par exemple, sur le calcul des prix d&#8217;un panier de site e-commerce, sur l&#8217;intégration des données lors d&#8217;un couplage entre deux systèmes, sur l&#8217;ergonomie d&#8217;une interface riche, etc.</p>
<h3>En résumé</h3>
<p>Une excellente soirée qui a largement dépassée les 5 heures prévues ! L&#8217;accueil de <a title="Linagora" href="http://www.linagora.com/">Linagora </a>et de l&#8217;<a title="Site officiel de l'AFUP" href="http://www.afup.org/">AFUP</a> était parfait, l&#8217;ambiance très sympathique et le niveau des échanges très pointu. Il y a des gens qui savent faire des choses avec PHP en Midi-Pyrénées ! Je pense qu&#8217;on remettra ça sous peu. Prochaine étape : le <a title="Bargento 3" href="http://www.bargento.fr/">Bargento, lundi 9 novembre à Paris</a>. Je serai présent avec l&#8217;équipe de l&#8217;AFUP pour organiser et animer cette journée qui s&#8217;annonce exceptionnelle. Et à la suite, le <a title="Forum PHP 2009" href="http://afup.org/pages/forumphp2009/">Forum PHP 2009</a>, tout aussi exceptionnel. Sur ce coup-là, je déclare forfait. Il faut bien travailler un peu !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2009/11/05/barcamp-php-toulousain-la-synthese/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>L&#8217;Agile Tour 2009 à Toulouse le 22 octobre</title>
		<link>http://blog.christophelebot.fr/2009/10/17/lagile-tour-2009-a-toulouse-le-22-octobre/</link>
		<comments>http://blog.christophelebot.fr/2009/10/17/lagile-tour-2009-a-toulouse-le-22-octobre/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 21:04:58 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Bonnes pratiques]]></category>
		<category><![CDATA[Evénements]]></category>
		<category><![CDATA[Gestion de projets]]></category>
		<category><![CDATA[Génie logiciel]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Programmation avancée]]></category>
		<category><![CDATA[Qualité]]></category>
		<category><![CDATA[Recherche et innovation]]></category>
		<category><![CDATA[Se former]]></category>
		<category><![CDATA[Agilité]]></category>
		<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[SigmaT]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/?p=552</guid>
		<description><![CDATA[
L&#8217;Agile Tour est de retour à Toulouse ! Le principe reste le même : faire découvrir les méthodes agiles et partager les retours d&#8217;expérience de leur application sur des projets réels.
L&#8217;édition 2008 a été un réel succès, alors ne boudez pas celle de 2009 ! L&#8217;efficacité des organisateurs et un contenu riche et utile vous [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame"><a title="Agile Tour 2009 à Toulouse" href="http://www.agiletour.org/fr/at2009_toulouse.html"><img class="alignnone size-full wp-image-553" title="Agile Tour 2009" src="http://blog.christophelebot.fr/wp-content/uploads/2009/10/agilii_logo.jpg" alt="Agile Tour 2009" width="255" height="92" /></a></div>
<p>L&#8217;Agile Tour est de retour à Toulouse ! Le principe reste le même : faire découvrir les méthodes agiles et partager les retours d&#8217;expérience de leur application sur des projets réels.</p>
<p><a title="Compte-rendu Agile Tour 2008" href="http://blog.christophelebot.fr/2008/10/17/agile-tour-2008-toulouse/">L&#8217;édition 2008 a été un réel succès</a>, alors ne boudez pas celle de 2009 ! L&#8217;efficacité des organisateurs et un contenu riche et utile vous rempliront la tête d&#8217;idées.</p>
<p>Ce sera le 22 octobre toute la journée, mais pas au même endroit que l&#8217;an dernier. Hélas ! Je ne pourrai pas m&#8217;y rendre, c&#8217;est une catastrophe&#8230; Heureusement, les comptes-rendus sont toujours complets, avec une copie des présentations faites à l&#8217;assistance. Que du bon en somme.</p>
<p>Informations et inscription : <a title="Agile Tour 2009 à Toulouse" href="http://www.agiletour.org/fr/at2009_toulouse.html">Agile Tour 2009</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2009/10/17/lagile-tour-2009-a-toulouse-le-22-octobre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magentips, mon nouveau blog Magento</title>
		<link>http://blog.christophelebot.fr/2009/10/12/magentips-mon-nouveau-blog-magento/</link>
		<comments>http://blog.christophelebot.fr/2009/10/12/magentips-mon-nouveau-blog-magento/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 21:16:52 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Bonnes pratiques]]></category>
		<category><![CDATA[Documentation technique]]></category>
		<category><![CDATA[Evénements]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Programmation avancée]]></category>
		<category><![CDATA[Se former]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[E-marketing]]></category>
		<category><![CDATA[Magentips]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmation orientée objet]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Web design]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/?p=540</guid>
		<description><![CDATA[
Il y a deux ans, quand j’ai commencé à mettre le nez dans Magento, il n’y avait rien ou quasiment rien sur le web pour traiter le sujet. Alors j’ai toujours eu l’idée d’un blog pour centraliser l’information pratique au quotidien. Mais comme souvent, les autres priorités ont gelé cette initiative assez rapidement…
Depuis, il s’est [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame"><a title="Magentips" href="http://www.magentips.com/"><img class="alignnone size-full wp-image-541" title="Magentips" src="http://blog.christophelebot.fr/wp-content/uploads/2009/10/logo-magentips-400px.gif" alt="Magentips" width="400" height="147" /></a></div>
<p>Il y a deux ans, quand j’ai commencé à mettre le nez dans <a title="Site officiel Magento" href="http://www.magentocommerce.com/">Magento</a>, il n’y avait rien ou quasiment rien sur le web pour traiter le sujet. Alors j’ai toujours eu l’idée d’un blog pour centraliser l’information pratique au quotidien. Mais comme souvent, les autres priorités ont gelé cette initiative assez rapidement…</p>
<p>Depuis, il s’est passé beaucoup de choses autour de Magento. De nombreux sites dédiés ont fleuri et m’ont fait douter de l’intérêt de créer un <em>YABAM </em>(Yet another blog about Magento). Alors tout cela est resté dans un carton, à moitié achevé, pendant une dizaine de mois.</p>
<p>Et pourtant, voilà Magentips ! Comme quoi tout arrive. Je doute de ma disponibilité pour en faire le <em>YABAM </em>le plus riche de la planète, mais je souhaitais partager mes expériences Magento en dehors des sentiers battus et des premières évidences. La <a title="Magentips - A propos" href="http://www.magentips.com/a-propos">page A propos</a> détaille cela.</p>
<p>Je vois donc cette initiative personnelle comme un complément à des outils existants. Certains partages de contenu se feront donc naturellement vers des sites de référence comme le <a title="Blog français Magento" href="http://www.magentocommerce.com/fr/blog">blog français officiel Magento</a>, <a title="Fragento" href="http://www.fragento.org/">Fragento</a> et <a title="Wikigento" href="http://www.wikigento.com/">Wikigento</a>. Comme dirait Philippe Humeau (Wikigento), « on peut œuvrer ensemble dans le même sens, sans perdre son indépendance et sa liberté de ton ».</p>
<p><strong>Bienvenue sur <a title="Magentips" href="http://www.magentips.com/">Magentips</a> !</strong></p>
<p>Vous pouvez aussi retrouver <a title="Magentips sur Twitter" href="http://twitter.com/magentips">Magentips sur Twitter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2009/10/12/magentips-mon-nouveau-blog-magento/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Configurer Xdebug pour Eclipse PDT en utilisant un serveur de test distant</title>
		<link>http://blog.christophelebot.fr/2008/11/02/configurer-xdebug-eclipse-pdt-serveur-test-distant/</link>
		<comments>http://blog.christophelebot.fr/2008/11/02/configurer-xdebug-eclipse-pdt-serveur-test-distant/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 15:36:29 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Bonnes pratiques]]></category>
		<category><![CDATA[Concevoir]]></category>
		<category><![CDATA[Documentation technique]]></category>
		<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Développer]]></category>
		<category><![CDATA[Génie logiciel]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Qualité]]></category>
		<category><![CDATA[Se former]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tests]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/?p=255</guid>
		<description><![CDATA[
Fini le développement web approximatif ! Aujourd&#8217;hui, les applications web deviennent de véritables usines à gaz qu&#8217;il faut savoir maîtriser. Certains regrettent l&#8217;époque du développement procédural avec ses projets de moins de 2000 lignes de code, mais il faut se rendre à l&#8217;évidence : le web est la plate-forme, il a besoin d&#8217;applications riches, complexes [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame"><img class="alignnone size-full wp-image-308" title="Eclipse + Xdebug" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/logo-eclipse-xdebug.png" alt="" width="420" height="121" /></div>
<p><strong>Fini le développement web approximatif !</strong> Aujourd&#8217;hui, les applications web deviennent de véritables usines à gaz qu&#8217;il faut savoir maîtriser. Certains regrettent l&#8217;époque du développement procédural avec ses projets de moins de 2000 lignes de code, mais il faut se rendre à l&#8217;évidence : <strong>le web est la plate-forme</strong>, il a besoin d&#8217;applications riches, complexes et stables. Un exemple, <a title="Site officiel Magento" href="http://magentocommerce.com/">Magento</a> : 300.000 lignes de code&#8230;</p>
<p>Sans outils d&#8217;aide au développement, il n&#8217;est plus possible de garantir la qualité de son code. Heureusement, ils ne manquent pas, encore faut-il les installer et les configurer correctement.</p>
<p>Parmi les outils indispensables, le <strong><em>debugger </em></strong>et le <strong><em>profiler </em></strong>arrivent en tête. Ils permettent de tracer tout ce que le code source est censé faire : inclusions, chargement de données, valeurs de variables, temps d&#8217;exécution, contenu des objets, etc. Avec eux, on gagne déjà la moitié du temps de test ! Je devrais plutôt dire : <strong>sans eux, on ne fait pas de vrais tests !</strong></p>
<p>Je vais prendre l&#8217;exemple d&#8217;une <strong>application web PHP</strong> développée avec <strong><a title="Site officiel Eclipse" href="http://www.eclipse.org/">Eclipse</a> et son <a title="Site officiel PDT" href="http://www.eclipse.org/pdt/">extension PDT</a></strong> (PHP Development Tools), en utilisant <a title="Site officiel XDebug" href="http://xdebug.org/"><strong>Xdebug</strong></a> comme <em>debugger</em>. Cela n&#8217;a rien d&#8217;original, des milliers de développeurs PHP utilisent cette configuration, mais je vais sortir des sentiers battus pour traiter un cas plus délicat, mais plus courant en entreprise : <strong>comment utiliser xdebug sous Eclipse quand mon serveur web de test n&#8217;est pas mon poste de travail, mais un serveur distant ?</strong></p>
<p><span id="more-255"></span></p>
<h3>L&#8217;environnement de travail</h3>
<p>Imaginons donc cette configuration : <strong>un serveur web de test sous Linux Debian Etch et un poste de développement sous Windows</strong>. Rien de plus classique. J&#8217;aurais pu prendre un poste sous Linux, cela ne change rien à la suite. J&#8217;aurais aussi pu prendre un serveur web sous Windows (XAMP), mais je trouve tellement dangereux de faire des tests sous Windows pour une application qui sera hébergée par un serveur Linux que je préfère ne pas en parler&#8230;</p>
<p>On part du principe que PHP et Apache sont installés et actifs sur le serveur web. De même, Eclipse et PDT sont prêts sur le poste client.</p>
<h3>Configuration du serveur web</h3>
<p>Pour installer Xdebug, le plus simple est d&#8217;utiliser <a title="Site officiel PECL" href="http://pecl.php.net/">PECL</a>. Mais pour utiliser PECL, il faut <a title="Site officiel PEAR" href="http://pear.php.net/">PEAR</a> ! Et pour utiliser PEAR, il faut la version client de PHP ! Pas de panique, c&#8217;est tout simple : on prend sa console shell (en root) et on y va.</p>
<p>Installation de la version client de PHP :</p>
<pre>apt-get install php5-cli</pre>
<p>Installation de PEAR :</p>
<pre>apt-get install php-pear</pre>
<p>Pour éviter de se retrouver coincé par <em>phpize</em>, il faut aussi installer les paquets de développement PHP :</p>
<pre>apt-get install php5-dev</pre>
<p>On peut enfin installer Xdebug :</p>
<pre>pecl install xdebug</pre>
<p>Ensuite, on modifie le fichier de configuration de PHP pour activer Xdebug sur les applications web installées sur le serveur :</p>
<pre>vi /etc/php5/apache2/php.ini</pre>
<p>Dans le bloc <em>Dynamic extensions</em>, on ajoute la ligne suivante :</p>
<pre>zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so</pre>
<p>On enregistre, on ferme et on redémarre Apache :</p>
<pre>/etc/init.d/apache2 restart</pre>
<p>Si on fait un <code>phpinfo()</code> sur le serveur web, on obtient déjà un résultat encourageant :</p>
<div class="asset-frame"><img class="wp-image-284" title="xdebug dans phpinfo()" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/xdebug-phpinfo-1.png" alt="" width="420" height="62" /></div>
<p>Oui, mais&#8230; Par défaut, Xdebug n&#8217;est pas en mode remote :</p>
<div class="asset-frame"><img class="wp-image-285" title="xdebug sans mode remote" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/xdebug-phpinfo-2.png" alt="" width="420" height="110" /></div>
<p>Or nous avons besoin du mode remote pour utiliser Xdebug depuis le poste client. Qu&#8217;à cela ne tienne ! Un autre petit tour dans la configuration PHP :</p>
<pre>vi /etc/php5/apache2/php.ini</pre>
<p>Dans le bloc <em>Dynamic extensions</em>, on ajoute la gestion du mode remote :</p>
<pre>xdebug.remote_enable=1
xdebug.remote_host=192.168.1.2
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so</pre>
<p>Attention, le paramètre <code>xdebug.remote_host</code> correspond à l&#8217;hôte distant&#8230; vu du serveur ! Il s&#8217;agit donc du poste de développement. Piège classique.</p>
<p>Après redémarrage d&#8217;Apache, le <code>phpinfo()</code> est déjà plus sympathique :</p>
<div class="asset-frame"><img class="wp-image-283" title="xdebug en mode remote" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/xdebug-phpinfo-3.png" alt="" width="420" height="111" /></div>
<p>C&#8217;est fini pour le serveur !</p>
<h3>Configuration d&#8217;Eclipse</h3>
<p>Il reste à configurer Eclipse pour envoyer les requêtes vers le serveur web. On ouvre les préférences (menu <em>Windows &gt; Preferences</em>) et on choisit <em>PHP &gt; PHP Servers</em> pour définir le serveur de test :</p>
<div class="asset-frame"><img class="alignnone size-full wp-image-293" title="Configuration du serveur de test" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/eclipse-config-serveur-1.png" alt="" width="438" height="301" /></div>
<p>Il ne faut pas oublier les chemins (<em>Path Mapping</em>) pour faire le lien entre les deux machines. Si vous avez déjà créé un projet, vous pouvez directement le sélectionner comme chemin local (celui du poste client puisque, cette fois-ci, on est sous Eclipse !). Attention à un détail qui tue, <strong>le nom de votre projet ne doit pas contenir d&#8217;espace</strong>, sinon Xdebug ne fonctionnera pas !</p>
<div class="asset-frame"><img class="alignnone size-full wp-image-297" title="Configuration des chemins" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/eclipse-config-serveur-6.png" alt="" width="286" height="272" /></div>
<div class="asset-frame"><img class="alignnone size-full wp-image-296" title="Le mapping des chemins" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/eclipse-config-serveur-5.png" alt="" width="438" height="301" /></div>
<p>Le serveur est maintenant configuré :</p>
<div class="asset-frame"><img class="alignnone size-full wp-image-290" title="Le serveur configuré sous Eclipse" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/eclipse-config-serveur-4.png" alt="" width="420" height="364" /></div>
<p>Il reste à définir les paramètres par défaut du debugger PHP :</p>
<ul>
<li>PHP Debugger : XDebug</li>
<li>Server : celui qui vient d&#8217;être configuré</li>
<li>PHP Executable : on le laisse non défini puisque nous sommes en mode distant</li>
</ul>
<div class="asset-frame"><img class="alignnone size-full wp-image-292" title="Configuration du debbuger sous Eclipse" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/eclipse-config-debug.png" alt="" width="420" height="364" /></div>
<p>Cerise sur le gâteau, on oblige Eclipse à utiliser un navigateur web externe. Je choisis Firefox qui me permettra de tester l&#8217;interface avec d&#8217;autres outils (Firebug, Web Developper Tools, etc.).</p>
<div class="asset-frame"><img class="alignnone size-full wp-image-291" title="Configuration du navigateur" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/eclipse-config-browser.png" alt="" width="420" height="364" /></div>
<p>Voilà, c&#8217;est tout ! C&#8217;est un peu long, mais pas sorcier ! Maintenant on peut s&#8217;amuser et tester son code :</p>
<div class="asset-frame"><img class="alignnone size-full wp-image-307" title="Xdebug en action dans Eclipse" src="http://blog.christophelebot.fr/wp-content/uploads/2008/11/eclipse-xdebug.png" alt="" width="420" height="274" /></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2008/11/02/configurer-xdebug-eclipse-pdt-serveur-test-distant/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Simile Exhibit 2.0 officiellement en français</title>
		<link>http://blog.christophelebot.fr/2007/10/02/simile-exhibit-in-french/</link>
		<comments>http://blog.christophelebot.fr/2007/10/02/simile-exhibit-in-french/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 21:23:23 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Concevoir]]></category>
		<category><![CDATA[Développer]]></category>
		<category><![CDATA[Génie logiciel]]></category>
		<category><![CDATA[Imaginer]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Recherche et innovation]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Applications en ligne]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Gestion de contenu]]></category>
		<category><![CDATA[IHM]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Simile]]></category>
		<category><![CDATA[Web sémantique]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/2007/10/02/simile-exhibit-in-french/</guid>
		<description><![CDATA[


Depuis aujourd&#8217;hui, Simile Exhibit 2.0 supporte officiellement le français.
Je remercie David Huynh, créateur talentueux de cet outil précurseur des nouveaux usages du web, d&#8217;avoir accepter d&#8217;intégrer ma modeste contribution au code source officiel. Je remercie également les french beta testers qui m&#8217;ont permis d&#8217;affiner la version française, suite à mes précédents articles (ici et là). [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame">
<img src='http://blog.christophelebot.fr/wp-content/uploads/2007/06/simile-logo.png' alt='Logo Simile' />
</div>
<p><strong>Depuis aujourd&#8217;hui, <a href="http://simile.mit.edu/exhibit/" title="Site officiel Simile Exhibit">Simile Exhibit 2.0</a> supporte officiellement le français.</strong></p>
<p>Je remercie David Huynh, créateur talentueux de cet outil précurseur des nouveaux usages du web, d&#8217;avoir accepter d&#8217;intégrer ma modeste contribution au code source officiel. Je remercie également les <em>french beta testers</em> qui m&#8217;ont permis d&#8217;affiner la version française, suite à mes précédents articles (<a href="http://blog.christophelebot.fr/2007/07/05/simile-exhibit-french/">ici</a> et <a href="http://blog.christophelebot.fr/2007/09/21/simile-exhibit-2-french/">là</a>). Et une mention spéciale à <a href="http://lespetitescases.net/">Got</a> pour <a href="http://blog.christophelebot.fr/2007/06/15/defauts-exhibit/">m&#8217;avoir remis sur les rails</a>.</p>
<p>Si vous avez quelques exemples d&#8217;utilisation d&#8217;Exhibit en français, n&#8217;hésitez pas à les ajouter dans les commentaires. Amusez-vous bien&nbsp;!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2007/10/02/simile-exhibit-in-french/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Piloter et sécuriser ses bases de données avec MySQL Proxy</title>
		<link>http://blog.christophelebot.fr/2007/08/15/mysql-proxy/</link>
		<comments>http://blog.christophelebot.fr/2007/08/15/mysql-proxy/#comments</comments>
		<pubDate>Wed, 15 Aug 2007 10:06:46 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Bases de données]]></category>
		<category><![CDATA[Développer]]></category>
		<category><![CDATA[Exploiter]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Serveurs]]></category>
		<category><![CDATA[Services en ligne]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/2007/08/15/mysql-proxy/</guid>
		<description><![CDATA[


MySQL Proxy, proposé par MySQL AB, est le genre d&#8217;outils dont le rôle semble si évident qu&#8217;on se demande pourquoi il n&#8217;existait pas avant. Comme tout proxy, il récupère les requêtes destinées à la base de données, effectue des traitements et adresse une requête modifiée au serveur MySQL. Bien entendu, l&#8217;opération inverse est aussi gérée&#160;: [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame">
<a href="http://forge.mysql.com/wiki/MySQL_Proxy" title="Site web MySQL Proxy"><img src='http://blog.christophelebot.fr/wp-content/uploads/2007/08/mysql-proxy.jpg' alt='MySQL Proxy' /></a>
</div>
<p><a href="http://forge.mysql.com/wiki/MySQL_Proxy" title="Site web MySQL Proxy">MySQL Proxy</a>, proposé par <a href="http://www.mysql.com/" title="Site web MySQL">MySQL AB</a>, est le genre d&#8217;outils dont le rôle semble si évident qu&#8217;on se demande pourquoi il n&#8217;existait pas avant. Comme tout proxy, il récupère les requêtes destinées à la base de données, effectue des traitements et adresse une requête modifiée au serveur MySQL. Bien entendu, l&#8217;opération inverse est aussi gérée&nbsp;: MySQL Proxy sait récupérer un résultat de requête et le transformer avant de l&#8217;adresser au client initial.</p>
<h3>Fonctionnalités</h3>
<p>Après cette petite présentation, on peut se demander pourquoi on aurait besoin d&#8217;un proxy, puisque les services applicatifs (s&#8217;ils sont correctement architecturés et codés&#8230;) devraient envoyer une requête optimisée au serveur MySQL. Une petite liste des fonctionnalités finit par convaincre de son intérêt&nbsp;:</p>
<ul>
<li>Analyse des requêtes</li>
<li>Filtrage et modification des requêtes et des résultats</li>
<li>Injection de requêtes</li>
<li>Load balancing</li>
<li>Exécution de scripts (basés sur le <a href="http://www.lua.org/" title="Site web Lua">langage LUA</a>)</li>
</ul>
<h3>Cas d&#8217;utilisation</h3>
<p>Dans la pratique, on peut imaginer les situations suivantes&nbsp;:</p>
<ul>
<li>Corriger les erreurs de syntaxe communes.</li>
<li>Garantir le fonctionnement d&#8217;anciennes applications utilisant des requêtes non supportées.</li>
<li>Supprimer du résultat un mot de passe demandé dans la requête.</li>
<li>Récupérer et fusionner avec le résultat des données externes à la base de données (fichiers, flux XML, RPC&#8230;)</li>
<li>Router les requêtes vers un autre serveur MySQL ou vers une autre base de données du même serveur.</li>
<li>Empiler un lot de requêtes et les contrôler avant de mettre à jour les tables.</li>
<li>Dupliquer les requêtes en temps réel sur deux bases différentes.</li>
<li>Exécuter un script shell avant ou après des modifications dans la base de données.</li>
<li>Interdire certains motifs de requêtes.</li>
<li>Verrouiller des tables selon le contexte.</li>
<li>Contrer les injections SQL non désirées.</li>
</ul>
<p>On le voit, les possibilités sont infinies et ne dépendent que des contextes de production et de l&#8217;imagination des développeurs. MySQL Proxy permet surtout d&#8217;éviter d&#8217;intégrer la gestion de l&#8217;exploitation des bases de données MySQL dans les services applicatifs. Voilà enfin une saine séparation du travail du développeur métier et de l&#8217;administrateur MySQL&nbsp;!</p>
<h3>Mise en oeuvre</h3>
<p>MySQL Proxy est encore en version alpha et son fonctionnement n&#8217;est garanti que pour les versions MySQL 5.0.x et ultérieures.</p>
<p>Pour découvrir ses possibilités, O&#8217;Reilly Network propose un didacticiel clair et très fourni&nbsp;: <a href="http://www.oreillynet.com/pub/a/databases/2007/07/12/getting-started-with-mysql-proxy.html" title="Lire l'article">Getting Started with MySQL Proxy</a>.</p>
<p>Source : <a href="http://linuxfr.org/2007/08/09/22813.html" title="Article MySQL Proxy sur Linuxfr.org">Linuxfr.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2007/08/15/mysql-proxy/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Trouver un motif dans un fichier de log avec PHP</title>
		<link>http://blog.christophelebot.fr/2007/08/05/trouver-motif-fichier-log-php/</link>
		<comments>http://blog.christophelebot.fr/2007/08/05/trouver-motif-fichier-log-php/#comments</comments>
		<pubDate>Sun, 05 Aug 2007 12:09:38 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Développer]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/2007/08/05/trouver-motif-fichier-log-php/</guid>
		<description><![CDATA[Rien de plus exhaustif qu&#8217;un fichier de logs&#160;! Pourtant, nous les consultons rarement pour la simple et bonne raison qu&#8217;ils sont particulièrement indigestes (nous devrions apprendre à lire la matrice&#8230;). Bien entendu, il existe un tas d&#8217;outils pour analyser et construire une synthèse à partir des données de log. Mais il arrive souvent qu&#8217;on ait [...]]]></description>
			<content:encoded><![CDATA[<p>Rien de plus exhaustif qu&#8217;un fichier de logs&nbsp;! Pourtant, nous les consultons rarement pour la simple et bonne raison qu&#8217;ils sont particulièrement indigestes (nous devrions apprendre à lire la matrice&#8230;). Bien entendu, il existe un tas d&#8217;outils pour analyser et construire une synthèse à partir des données de log. Mais il arrive souvent qu&#8217;on ait besoin d&#8217;un détail que la synthèse n&#8217;apporte pas. Dans ce cas, lecture obligatoire du fichier de log de 157843 lignes&#8230; avec un petit script en PHP pour extraire les informations qui nous intéressent. Ouf&nbsp;!</p>
<pre name="code" class="php">
&lt;?php

/* Le fichier de log à analyser */
$fichier = "fichier.log";

/* Le motif à chercher */
$s = "google.fr";

/* Analyse et résultat */
$motif = "/$s/";
$pointeur = fopen($fichier, "r");
$i = 0;
if ($pointeur) {
    while (!feof($pointeur)) {
        $ligne = fgets($pointeur);
        if (preg_match($motif, $ligne, $r)) {
            echo $ligne . '';
            $i++;
        }
    }
    fclose($pointeur);
    echo "Motif '$s' trouvé $i fois.";
}

?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2007/08/05/trouver-motif-fichier-log-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP4, PHP5, PHP6 : la saison des grandes migrations</title>
		<link>http://blog.christophelebot.fr/2007/07/22/migration-php4-php5-php6/</link>
		<comments>http://blog.christophelebot.fr/2007/07/22/migration-php4-php5-php6/#comments</comments>
		<pubDate>Sun, 22 Jul 2007 17:41:12 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Concevoir]]></category>
		<category><![CDATA[Développer]]></category>
		<category><![CDATA[Exploiter]]></category>
		<category><![CDATA[Génie logiciel]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Programmation avancée]]></category>
		<category><![CDATA[Qualité]]></category>
		<category><![CDATA[Services en ligne]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmation orientée objet]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/2007/07/22/migration-php4-php5-php6/</guid>
		<description><![CDATA[


Avec un été aux allures d&#8217;automne, j&#8217;ai eu envie de présenter un flux migratoire d&#8217;exception. Nul discours écologique dans mes propos, puisqu&#8217;il est question de PHP, le langage le plus répandu pour créer des applications web. Entre la mort de PHP4, la gestation de PHP6 et PHP5 qui tarde à s&#8217;imposer, voici un point sur [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame">
<img src='http://blog.christophelebot.fr/wp-content/uploads/2007/07/php.gif' alt='Logo PHP' />
</div>
<p>Avec un été aux allures d&#8217;automne, j&#8217;ai eu envie de présenter un flux migratoire d&#8217;exception. Nul discours écologique dans mes propos, puisqu&#8217;il est question de PHP, le langage le plus répandu pour créer des applications web. Entre la mort de PHP4, la gestation de PHP6 et PHP5 qui tarde à s&#8217;imposer, voici un point sur la situation, les enjeux&#8230; et les risques.</p>
<h3>PHP4 en fin de course</h3>
<p>C&#8217;est maintenant officiel, <a href="http://www.php.net/index.php#2007-07-13-1" title="PHP 4 end of life announcement">PHP4 ne sera plus supporté à partir du 1<sup>er</sup> janvier 2008</a>. En soit, l&#8217;annonce ne choque pas puisque PHP5 a pris le relais depuis 3 ans. Mais, sur le terrain, la percée de la version actuelle de PHP est moins évidente. En cause, les nombreuses applications PHP4 encore exploitées en ligne qui freinent les hébergeurs dans l&#8217;adoption de PHP5.</p>
<h3>Migrer de PHP4 à PHP5</h3>
<p>Sachant que la migration de PHP4 vers PHP5 devient obligatoire, comment la réaliser en douceur dans le temps imparti (5 mois)&nbsp;?</p>
<p>Premier point&nbsp;: s&#8217;informer et comprendre la nécessité de migrer. Le site <a href="http://gophp5.org/" title="Site Go PHP5">Go PHP5</a> est là pour ça&nbsp;!</p>
<div class="asset-frame">
<a href="http://gophp5.org/" title="Site Go PHP5"><img src='http://blog.christophelebot.fr/wp-content/uploads/2007/07/gophp5-283x100.png' alt='Go PHP5' /></a><br />
L&#8217;initiative Go PHP5 pour promouvoir une migration rapide vers PHP5.
</div>
<p>Ensuite, il faut mettre le nez dans l&#8217;existant et y apporter les corrections ou les évolutions nécessaires pour le rendre compatible avec PHP5. On s&#8217;aidera des ressources mises à disposition par le PHP Group&nbsp;:</p>
<ul>
<li><a href="http://www.php.net/manual/fr/migration5.php" title="Migration de PHP 4 à PHP 5 sur php.net">Migration de PHP 4 à PHP 5</a></li>
<li><a href="http://www.php.net/manual/en/migration51.php" title="Migrating from PHP 5.0.x to PHP 5.1.x sur php.net">Migrating from PHP 5.0.x to PHP 5.1.x</a></li>
<li><a href="http://www.php.net/manual/en/migration52.php" title="Migrating from PHP 5.1.x to PHP 5.2.x sur php.net">Migrating from PHP 5.1.x to PHP 5.2.x</a></li>
</ul>
<h3>Préparer l&#8217;arrivée de PHP6</h3>
<p>Maintenant, quid de PHP6&nbsp;? Quitte à migrer cet automne, autant en profiter pour préparer son arrivée&nbsp;! On sait maintenant à quoi ressemblera la nouvelle mouture PHP et ce qu&#8217;elle implique pour les développeurs.</p>
<p>A la lecture de <a href="http://www.corephp.co.uk/archives/19-Prepare-for-PHP-6.html" title="Prepare for PHP 6 sur corephp.co.uk">Prepare for PHP 6</a>, on remarque vite que PHP sera beaucoup moins permissif. On ne regrettera pas le <em>Register Globals</em>, ni le <em>Safe Mode</em> (même s&#8217;il peut gêner quelques hébergeurs à la traîne).</p>
<p>Bien sûr, l&#8217;abandon des <em>Magic Quotes</em> imposera de retoucher de nombreuses applications PHP4 pour éviter les injections de commandes (pour attaquer une base de données, par exemple). On me rétorquera que PHP5 les désactive par défaut&#8230; ce qui veut dire qu&#8217;on peut les activer pour éviter de &laquo;&nbsp;perdre&nbsp;&raquo; du temps à mettre en conformité son code&nbsp;! Avec PHP6, point de salut, il faut s&#8217;y coller&nbsp;!</p>
<p>Parmi les fonctionnalités les plus attendues, les <em>namespaces</em> pour la programmation orientée objet, le support natif d&#8217;Unicode, l&#8217;accélérateur APC par défaut.</p>
<p>Le plus inattendu est sans doute <em>goto</em> pour spécifier où continuer l&#8217;exécution du code&nbsp;! A oublier de suite en programmation orientée objet&#8230;</p>
<p>Après le discours, la pratique. Voilà une petite check-list (tirée du magazine <em>Programmez</em>, juin 2007) pour faciliter l&#8217;arrivée de PHP6&nbsp;:</p>
<ul>
<li>Ne pas utiliser <code>register_globals</code>, mais <code>$_POST</code>, <code>$_GET</code>, <code>$_COOKIE</code> et <code>$_REQUEST</code></li>
<li>Ne pas utiliser <code>$HTTP_POST_VARS</code> et <code>$HTTP_SERVER_VARS</code>, mais <code>$_POST</code> et <code>$_SERVER</code></li>
<li>Mettre les directives <code>magic_quotes_*</code> à <code>off</code></li>
<li>Ne pas spécifier le passage par référence dans l&#8217;appel de fonction, mais dans le prototype</li>
<li>Ne pas utiliser la fonction <code>__autoload()</code> (pratique mais très gourmande)</li>
<li>Ne pas mettre une variable derrière un <code>break</code>, mais une constante, un nombre&#8230; ou rien</li>
<li>Désactiver le <code>safe_mode</code></li>
<li>Ne pas utiliser la librairie GD1 pour traiter les images, mais la GD2</li>
<li>Utiliser l&#8217;UTF-8 ou l&#8217;UTF-16</li>
</ul>
<p>Le dernier point est, selon moi, le plus critique. Le support d&#8217;Unicode (UTF-8 ou UTF-16) impose de convertir la chaîne complète du développement&nbsp;: fichiers de code source, fichiers de données, base de données, navigateur web, etc. Or le support d&#8217;Unicode est loin d&#8217;être un réflex dans les projets web. Quel webdesigner se préoccupe de déclarer le support de l&#8217;Unicode dans Dreamweaver&nbsp;? La question qui suit est&nbsp;: pourquoi la majorité des outils propose encore l&#8217;ISO-8851 ou CP1252 par défaut&nbsp;? Bref, ce point dépasse le cadre des évolutions de PHP, mais deviendra un vrai Capharnaüm s&#8217;il n&#8217;est pas traité dans son ensemble.</p>
<h3>Une opportunité pour les entreprises&#8230; et leurs prestataires</h3>
<p>Inutile de tourner autour du pot&nbsp;: la migration nécessaire de PHP4 vers PHP5 demandera d&#8217;ici la fin de l&#8217;année un certain travail aux équipes de développement PHP de tous bords. Pour le bien des entreprises, c&#8217;est certain. Elles verront leur système d&#8217;information évoluer et gagner en maturité. Pour leurs prestataires aussi qui sauront profiter de l&#8217;opportunité pour aller plus loin qu&#8217;une simple mise en conformité iso-fonctionnelle.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2007/07/22/migration-php4-php5-php6/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Y a-t-il des spécialistes d&#8217;Exhibit dans la salle ?</title>
		<link>http://blog.christophelebot.fr/2007/06/15/defauts-exhibit/</link>
		<comments>http://blog.christophelebot.fr/2007/06/15/defauts-exhibit/#comments</comments>
		<pubDate>Fri, 15 Jun 2007 13:42:52 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Concevoir]]></category>
		<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Développer]]></category>
		<category><![CDATA[Génie logiciel]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Programmation avancée]]></category>
		<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Audience]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Gestion de contenu]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mashups]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Programmation orientée objet]]></category>
		<category><![CDATA[Simile]]></category>
		<category><![CDATA[Standards web]]></category>
		<category><![CDATA[Web sémantique]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/2007/06/15/defauts-exhibit/</guid>
		<description><![CDATA[


Cela fait un certain temps que je suis avec beaucoup d&#8217;intérêt les travaux du MIT (Massachusetts Institute of Technology) autour de Simile (Semantic Interoperability of Metadata and Information in unLike Environments). Ses intervenants défrichent le terrain du web sémantique avec beaucoup de talent et sans oublier de passer de la théorie à la pratique.
Le projet [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame">
<a href="http://simile.mit.edu/" title="Projet Simile"><img src='http://blog.christophelebot.fr/wp-content/uploads/2007/06/simile-logo.png' alt='Logo Simile' /></a>
</div>
<p>Cela fait un certain temps que je suis avec beaucoup d&#8217;intérêt les travaux du <a href="http://www.mit.edu/" title="Site web MIT">MIT (Massachusetts Institute of Technology)</a> autour de <a href="http://simile.mit.edu/" title="Projet Simile">Simile (Semantic Interoperability of Metadata and Information in unLike Environments)</a>. Ses intervenants défrichent le terrain du web sémantique avec beaucoup de talent et sans oublier de passer de la théorie à la pratique.</p>
<p><strong>Le projet le plus connu est sans doute <a href="http://simile.mit.edu/timeline/" title="Projet Simile Timeline">Timeline</a> qui se veut le &laquo;&nbsp;Google Maps du temps&nbsp;&raquo;.</strong> J&#8217;avoue que le résultat est plutôt à la hauteur de la comparaison, d&#8217;autant que l&#8217;intégration de Timeline dans un site web est triviale&nbsp;!</p>
<p><strong>Par contre, je suis un peu moins enthousiaste avec <a href="http://simile.mit.edu/exhibit/" title="Projet Simile Exhibit">Exhibit</a>.</strong> Ce framework permet de publier des données structurées et de les manipuler dans une interface web avec une déconcertante facilité. Le concept est génial mais je trouve certains choix techniques très discutables.</p>
<p>Pourquoi avoir créé des attributs HTML spécifiques à Exhibit&nbsp;? Par exemple, pour réaliser un filtre à facettes, il faut écrire le code suivant&nbsp;:</p>
<pre name="code" class="html">
&lt;div id="exhibit-browse-panel" ex:facets=".discipline, .relationship, .shared, .deceased"&gt;&lt;/div&gt;
</pre>
<p><strong>Résultat, le code source n&#8217;est pas conforme et la page n&#8217;est pas accessible (au sens ergonomique). Des inconvénients qui vont à l&#8217;encontre du web sémantique&nbsp;!</strong> Pourquoi ne pas avoir développé une syntaxe particulière pour les valeurs des attributs HTML officiels&nbsp;? C&#8217;est le principe de diffusion adopté par les <a href="http://microformats.org/" title="Microformats">microformats</a>.</p>
<p>Quant aux données, elles proviennent d&#8217;un objet Javascript (plus précisément d&#8217;un objet <a href="http://www.json.org/" title="Site officiel JSON">JSON</a>). Adopter JSON est une excellente idée&#8230; sauf pour le référencement de la page web. En effet, <strong>pour un robot d&#8217;indexation, une page Exhibit est vide&nbsp;!</strong> Il y a bien <a href="http://simile.mit.edu/wiki/Exhibit/How_to_make_Exhibit_search_engine_%22friendly%22" title="How to make Exhibit search engine "friendly"">quelques pistes pour résoudre le problème</a>, mais je suis loin d&#8217;être convaincu. Il me semblerait plus judicieux d&#8217;intégrer les données par défaut dans le code source HTML et de les manipuler via des méthodes non intrusives (<em>unobstrusive Javascript</em>) par le DOM du navigateur.</p>
<p><strong>Et de votre côté, utilisez-vous Exhibit dans vos projets&nbsp;? Avez-vous trouvé des réponses à ces contraintes&nbsp;?</strong></p>
<p>Exhibit a un tel potentiel que je ne voudrais pas être bloqué par ces deux défauts majeurs. Surtout qu&#8217;<strong>un autre projet va en décupler l&#8217;intérêt&nbsp;: <a href="http://www.christian-faure.net/2007/05/01/potluck/" title="Vidéo Potluck">Potluck</a></strong> (merci Christian pour cette découverte&nbsp;!).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2007/06/15/defauts-exhibit/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
