<?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; Développement web</title>
	<atom:link href="http://blog.christophelebot.fr/category/developper/developpement-web/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.christophelebot.fr</link>
	<description>Pratique de la conception numérique</description>
	<lastBuildDate>Wed, 07 Sep 2011 19:28:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Livre Magento : ça, c&#8217;est fait !</title>
		<link>http://blog.christophelebot.fr/2011/04/29/livre-magento-christophe-le-bot-campus-press-pearson/</link>
		<comments>http://blog.christophelebot.fr/2011/04/29/livre-magento-christophe-le-bot-campus-press-pearson/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 22:29:10 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Documentation technique]]></category>
		<category><![CDATA[Evénements]]></category>
		<category><![CDATA[Gestion de projets]]></category>
		<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Se former]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[Livre]]></category>
		<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/?p=857</guid>
		<description><![CDATA[Après 7 mois d&#8217;absence sur ce blog, me voici de retour ! Ce fut pour la bonne cause : mon livre consacré à Magento est maintenant terminé, imprimé et distribué par tous les bons libraires. Pour en savoir plus, je vous invite à consulter la page officielle de l&#8217;ouvrage sur le site de l&#8217;éditeur Pearson [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame"><a title="Livre Magento - Christophe Le Bot - Le Campus - Pearson" href="http://www.pearson.fr/livre/?GCOI=27440100564270"><img class="alignnone size-full wp-image-856" title="Livre Pratique du e-commerce avec Magento - Christophe Le Bot - CampusPress - Pearson" src="http://blog.christophelebot.fr/wp-content/uploads/2011/04/livre-magento-christophe-le-bot-pearson.png" alt="" width="250" height="308" /></a></div>
<p>Après 7 mois d&#8217;absence sur ce blog, me voici de retour ! Ce fut pour la bonne cause : mon livre consacré à <a title="Site officiel Magento" href="http://www.magentocommerce.com/">Magento</a> est maintenant terminé, imprimé et distribué par tous les bons libraires. Pour en savoir plus, je vous invite à consulter la <a title="Livre Magento - Christophe Le Bot - Le Campus - Pearson" href="http://www.pearson.fr/livre/?GCOI=27440100564270">page officielle de l&#8217;ouvrage sur le site de l&#8217;éditeur Pearson</a> et la <a title="Rubrique spéciale Livre Magento sur Magentips" href="http://www.magentips.com/livre-magento/">rubrique dédiée sur mon autre blog Magentips</a>.</p>
<p>Une bonne chose de faite et du temps à ne plus savoir qu&#8217;en faire pour mon blog !</p>
<p>Je souffle un peu d&#8217;abord et je reviens avec plein de sujets intéressants. Le web bouge encore et toujours à toute vitesse !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2011/04/29/livre-magento-christophe-le-bot-campus-press-pearson/feed/</wfw:commentRss>
		<slash:comments>1</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[Sécurité]]></category>
		<category><![CDATA[Serveurs]]></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 [...]]]></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>Barcamp PHP à Toulouse le 29 octobre</title>
		<link>http://blog.christophelebot.fr/2009/10/06/barcamp-php-linagora-toulouse/</link>
		<comments>http://blog.christophelebot.fr/2009/10/06/barcamp-php-linagora-toulouse/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 21:15:29 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Evénements]]></category>
		<category><![CDATA[Génie logiciel]]></category>
		<category><![CDATA[Se former]]></category>
		<category><![CDATA[Veille économique]]></category>
		<category><![CDATA[AFUP]]></category>
		<category><![CDATA[Barcamp]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/?p=530</guid>
		<description><![CDATA[Linagora GSO, société spécialisée dans les Logiciels Libres, organise avec la participation de l’AFUP (Association Française d’Utilisateurs de PHP), son premier Barcamp sur le thème de PHP autour d’un Cheese and Wine. Une bonne occasion de voir ce que le Sud-Ouest est capable de faire avec PHP, le tout chez mes amis de Linagora. Une [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame"><a title="Linagora - Barcamp PHP Toulouse" href="http://www.linagora.com/spip.php?article560#form16"><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" /></a></div>
<p>Linagora GSO, société spécialisée dans les Logiciels Libres, organise avec la participation de l’AFUP (Association Française d’Utilisateurs de PHP), son premier Barcamp sur le thème de PHP autour d’un Cheese and Wine.</p>
<p>Une bonne occasion de voir ce que le Sud-Ouest est capable de faire avec PHP, le tout chez mes amis de Linagora. Une excellente soirée en perspective !</p>
<p><a title="Linagora - Barcamp PHP Toulouse" href="http://www.linagora.com/spip.php?article560#form16">&gt; Informations et inscription</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2009/10/06/barcamp-php-linagora-toulouse/feed/</wfw:commentRss>
		<slash:comments>0</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[Développement web]]></category>
		<category><![CDATA[Développer]]></category>
		<category><![CDATA[Documentation technique]]></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>14</slash:comments>
		</item>
		<item>
		<title>Sauvez les développeurs !</title>
		<link>http://blog.christophelebot.fr/2008/03/30/save-the-developers/</link>
		<comments>http://blog.christophelebot.fr/2008/03/30/save-the-developers/#comments</comments>
		<pubDate>Sun, 30 Mar 2008 21:40:59 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Bonnes pratiques]]></category>
		<category><![CDATA[Concevoir]]></category>
		<category><![CDATA[Design numérique]]></category>
		<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Développer]]></category>
		<category><![CDATA[Génie logiciel]]></category>
		<category><![CDATA[Qualité]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IHM]]></category>
		<category><![CDATA[Standards web]]></category>
		<category><![CDATA[Web design]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/2008/03/30/save-the-developers/</guid>
		<description><![CDATA[Mettre au point des sites web qui fonctionnent avec Internet Explorer 6 relève du défi&#160;! Ce qui devait arriver, arrive&#160;: Save the developers! Pour ma part, j&#8217;ai pu mesurer le temps passé à mettre au point une interface pour Internet Explorer 6&#160;: 15 à 25% du temps de développement des interfaces web&#160;! Sans parler de [...]]]></description>
			<content:encoded><![CDATA[<p>Mettre au point des sites web qui fonctionnent avec Internet Explorer 6 relève du défi&nbsp;! Ce qui devait arriver, arrive&nbsp;: <strong><a href="http://www.savethedevelopers.org/" title="Campagne Save the developers">Save the developers!</a></strong></p>
<p>Pour ma part, j&#8217;ai pu mesurer le temps passé à mettre au point une interface pour Internet Explorer 6&nbsp;: 15 à 25% du temps de développement des interfaces web&nbsp;! Sans parler de l&#8217;énervement au sein des équipes de développement&#8230;</p>
<p>Alors, s&#8217;il vous plaît, <strong>mettez à jour votre navigateur web&nbsp;!</strong> Ce sera bénéfique pour tout le monde&nbsp;: les développeurs pourront concevoir des interfaces plus rapidement, les applications web seront plus stables et vous bénéficierez d&#8217;un outil efficace et adapté au web d&#8217;aujourd&#8217;hui.</p>
<p>Vous avez l&#8217;embarras du choix&nbsp;:</p>
<div class="asset-frame">
<a href="http://www.microsoft.com/france/windows/downloads/ie/getitnow.mspx" title="Télécharger Internet Explorer sur le site officiel"><img src='http://blog.christophelebot.fr/wp-content/uploads/2008/03/internetexplorer.gif' alt='Téléchargez Internet Explorer' /></a>
</div>
<p>Si vous tenez à rester dans le giron de Microsoft, installez dès que possible Internet Explorer 7. Les améliorations sont notables, même si nous sommes encore loin d&#8217;un résultat idéal. Il paraît qu&#8217;Internet Explorer 8 sera enfin un navigateur digne de ce nom. J&#8217;attends de voir&#8230; Bref, vous l&#8217;aurez compris&nbsp;: ce n&#8217;est pas mon préféré.</p>
<div class="asset-frame">
<a href="http://getfirefox.com/" title="Télécharger Firefox sur le site officiel"><img src='http://blog.christophelebot.fr/wp-content/uploads/2008/03/firefox.gif' alt='Téléchargez Firefox' /></a>
</div>
<p>Firefox 2 est le navigateur web le plus utilisé par les développeurs, grâce à une interface intuitive et une multitude d&#8217;extensions. Seule ombre au tableau&nbsp;: sa gourmandise en terme de ressources mémoire. Mais Firefox 3 apportera un sérieux changement de ce côté. Incontournable et recommandé par les professionnels.</p>
<div class="asset-frame">
<a href="http://www.opera.com/products/desktop/" title="Télécharger Opera sur le site officiel"><img src='http://blog.christophelebot.fr/wp-content/uploads/2008/03/opera.gif' alt='Téléchargez Opera' /></a>
</div>
<p>Opera, c&#8217;est LE navigateur web par excellence. Léger, rapide, complet, il a tout pour plaire, en particulier son support quasi parfait des normes du W3C. S&#8217;il reste marginal sur les ordinateurs, il est le roi du web mobile&nbsp;!</p>
<div class="asset-frame">
<a href="http://www.apple.com/fr/safari/download/" title="Télécharger Safari sur le site officiel"><img src='http://blog.christophelebot.fr/wp-content/uploads/2008/03/safari.gif' alt='Téléchargez Safari' /></a>
</div>
<p>Proposé par Apple, Safari est le navigateur web par défaut de MacOS, mais il fonctionne aussi sous Windows. Un bon produit qui possède la magie Apple. Parfait pour l&#8217;utilisateur qui ne veut pas s&#8217;embarrasser de technique.</p>
<p>Quel que soit votre choix, <strong>le plus important est d&#8217;abandonner Internet Explorer 6&nbsp;!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2008/03/30/save-the-developers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Simile Exhibit 2.0 en français</title>
		<link>http://blog.christophelebot.fr/2007/09/21/simile-exhibit-2-french/</link>
		<comments>http://blog.christophelebot.fr/2007/09/21/simile-exhibit-2-french/#comments</comments>
		<pubDate>Thu, 20 Sep 2007 22:15:39 +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[Imaginer]]></category>
		<category><![CDATA[Recherche et innovation]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Applications en ligne]]></category>
		<category><![CDATA[Cartographie]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Géolocalisation]]></category>
		<category><![CDATA[Gestion de contenu]]></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/09/21/simile-exhibit-2-french/</guid>
		<description><![CDATA[On sait tous que les rentrées de septembre sont difficiles, mais celle-ci est vraiment infernale&#160;! Même plus le temps de bloguer&#8230; J&#8217;ai quand même fini un projet qui me tenait à coeur&#160;: la version française de Simile Exhibit 2.0. Je ne vais pas revenir sur la présentation de cet outil fabuleux, largement décrit dans mon [...]]]></description>
			<content:encoded><![CDATA[<p>On sait tous que les rentrées de septembre sont difficiles, mais celle-ci est vraiment infernale&nbsp;! Même plus le temps de bloguer&#8230;</p>
<p>J&#8217;ai quand même fini un projet qui me tenait à coeur&nbsp;: la version française de Simile Exhibit 2.0.</p>
<p>Je ne vais pas revenir sur la présentation de cet outil fabuleux, largement décrit dans mon précédent article [<a href="http://blog.christophelebot.fr/2007/07/05/simile-exhibit-french/">Simile Exhibit : la version française est (presque) disponible</a>]. J&#8217;ajoute simplement que la version 2.0 est toute fraîche et qu&#8217;il était temps d&#8217;y apporter une touche &laquo;&nbsp;frenchie&nbsp;&raquo;&nbsp;!</p>
<p>La voici donc en démonstration sur mon site, avant d&#8217;être intégrée à l&#8217;API officielle. Si vous constatez un dysfonctionnement ou une erreur de traduction, un petit commentaire sera le bienvenu&nbsp;! Bien entendu, seule l&#8217;interface d&#8217;Exhibit est en français, les données (reprises des exemples officielles) restent en anglais. Un jour, quand j&#8217;aurai cinq minutes, je donnerai un exemple français&#8230;</p>
<h3>Liste des exemples à tester</h3>
<ul>
<li><a href="http://demo.christophelebot.fr/simile-exhibit2-fr/site/examples/nobelists/nobelists.html" title="Exemple Prix Nobel" target="_blank">Prix Nobel</a></li>
<li><a href="http://demo.christophelebot.fr/simile-exhibit2-fr/site/examples/cereals/cereal-characters.html" title="Exemple Personnages de céréales" target="_blank">Personnages de céréales</a></li>
<li><a href="http://demo.christophelebot.fr/simile-exhibit2-fr/site/examples/billionaires/billionaires.html" title="Exemple Milliardaires" target="_blank">Milliardaires</a></li>
<li><a href="http://demo.christophelebot.fr/simile-exhibit2-fr/site/examples/CSAIL-PIs/CSAIL-PIs.html" title="Exemple CSAIL" target="_blank">CSAIL</a></li>
<li><a href="http://demo.christophelebot.fr/simile-exhibit2-fr/site/examples/cities/cities.html" title="Exemple Villes" target="_blank">Villes</a></li>
<li><a href="http://demo.christophelebot.fr/simile-exhibit2-fr/site/examples/factbook/factbook-people.html" title="Exemple Données CIA" target="_blank">Données CIA</a></li>
<li><a href="http://demo.christophelebot.fr/simile-exhibit2-fr/site/examples/flags/flags.html" title="Exemple Drapeaux" target="_blank">Drapeaux</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2007/09/21/simile-exhibit-2-french/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 [...]]]></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>
		<item>
		<title>Zend Framework dans les starting-blocks</title>
		<link>http://blog.christophelebot.fr/2007/05/29/zend-framework-rc1/</link>
		<comments>http://blog.christophelebot.fr/2007/05/29/zend-framework-rc1/#comments</comments>
		<pubDate>Tue, 29 May 2007 21:25:33 +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[Qualité]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Framework]]></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/05/29/zend-framework-rc1/</guid>
		<description><![CDATA[Le Zend Framework passe en RC1 (release candidate 1). C&#8217;est donc la dernière étape avant sa sortie officielle prévue cet été (peut-être fin juin, disent certains). Son arrivée dans l&#8217;arène bien encombrée des frameworks PHP a déclenché des débats passionnés, avec des clans résolument contre (&#171;&#160;ce n&#8217;est pas un framework !&#160;&#187;) et des clans qui ne [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame"><img src="http://blog.christophelebot.fr/wp-content/uploads/2007/05/logo-zend-framework.jpg" alt="Logo Zend Framework" /></div>
<p><strong>Le <a title="Site officiel Zend Framework" href="http://framework.zend.com/">Zend Framework</a> passe en RC1 (release candidate 1).</strong> C&#8217;est donc la dernière étape avant sa sortie officielle prévue cet été (peut-être fin juin, disent certains).</p>
<p>Son arrivée dans l&#8217;arène bien encombrée des frameworks PHP a déclenché des débats passionnés, avec des clans résolument contre (<em>&laquo;&nbsp;ce n&#8217;est pas un framework !&nbsp;&raquo;</em>) et des clans qui ne jurent que par lui (<em>&laquo;&nbsp;il est soutenu par Zend et IBM autour du langage le plus populaire du web !&nbsp;&raquo;</em>). Je ne parle même pas des allergiques au PHP qui trouvent stupide de construire un framework autour d&#8217;un langage aussi immature&#8230;</p>
<p>Bref, chacun se fera son avis. <strong>Pour ma part, je trouve le projet très pertinent.</strong></p>
<p>C&#8217;est vrai que Zend Framework n&#8217;est pas aussi complet que <a title="Site officiel Symfony" href="http://www.symfony-project.com/">Symfony</a> (un très beau projet, je vous conseille de l&#8217;étudier !). On peut effectivement le voir comme une bibliothèque d&#8217;objets respectant les principes classiques de l&#8217;architecture MVC (Modèle Vue Contrôleur). Dans ce cas, je pourrais aussi bien dire que <a title="Site officiel prototype" href="http://www.prototypejs.org/">prototype</a> n&#8217;est pas un framework Javascript mais une collection de classes. C&#8217;est étrange, mais personne n&#8217;y songe&#8230;</p>
<p>On peut aussi se demander pourquoi ce framework n&#8217;est pas intégré directement dans PHP, suivi d&#8217;un bon ménage pour éliminer une myriade de fonctions inutiles. En cela, PHP est plus proche de Perl (36 façons de faire une chose) que de Python (1 seule façon de faire un chose). Mais il est difficile de mettre une croix sur ce qui a fait le succès de PHP : sa facilité de prise en main et son approche procédurale. PHP atteindra difficilement la beauté théorique d&#8217;une usine à gaz Java ou l&#8217;efficacité pragmatique d&#8217;un projet Ruby, mais il est partout.</p>
<p>Donc, considérons que le Zend Framework est un framework PHP léger. <strong>Quels sont ses avantages ? Pour moi, ils dépassent clairement le cadre purement technique, ce qui en fait déjà une solution incontournable :</strong></p>
<ul>
<li>Il a été créé à l&#8217;initiative de Zend, <em>the PHP company</em> (comme elle le dit si bien), pour des applications professionnelles lourdes.</li>
<li>Il est soutenu par des acteurs puissants (IBM en tête) qui garantissent sa pérennité.</li>
<li>Il utilise le langage le plus répandu sur les serveurs web.</li>
<li>Il repose sur les avancées majeures en programmation objet de la version 5 de PHP (il était temps&#8230;).</li>
<li>Il fonctionne par simple inclusion, donc sur toutes les offres d&#8217;hébergement existantes (serveurs mutualisés, notamment).</li>
<li>Il donne enfin un cadre de travail aux développeurs PHP (réputés comme les cancres de la programmation).</li>
<li>Comme tout framework, il réduit le temps de développement par la mise en facteur des bonnes pratiques et une meilleure définition de l&#8217;architecture.</li>
<li>Il offre une documentation complète, à jour et claire, un atout essentiel pour son adoption en entreprise.</li>
<li>Il bénéficie de l&#8217;élan autour d&#8217;<a title="Site officiel Eclipse" href="http://www.eclipse.org/">Eclipse</a>, grâce au développement parallèle de <a title="Extension PDT pour Eclipse" href="http://www.eclipse.org/pdt/">PDT (PHP Development Tools)</a>.</li>
</ul>
<p><strong>Cette orientation très professionnelle, tout en gardant la simplicité de PHP grâce à un framework léger, devrait décider un bon nombre de développeurs et d&#8217;architectes à considérer ce choix.</strong></p>
<p>L&#8217;avenir me dira si j&#8217;ai vu juste&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2007/05/29/zend-framework-rc1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser les catégories pour gérer les tags sous WordPress</title>
		<link>http://blog.christophelebot.fr/2007/05/10/wordpress-categories-tags/</link>
		<comments>http://blog.christophelebot.fr/2007/05/10/wordpress-categories-tags/#comments</comments>
		<pubDate>Thu, 10 May 2007 11:18:01 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Bonnes pratiques]]></category>
		<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Développer]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Programmation avancée]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Gestion de contenu]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web sémantique]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/2007/05/10/wordpress-categories-tags/</guid>
		<description><![CDATA[Incroyable mais vrai&#160;: WordPress ne gère pas les tags&#160;! Ces petites étiquettes qui donnent du sens au contenu généré par les utilisateurs, sont dans tous les services estampillés &#171;&#160;Web 2.0&#8243;&#8230; sauf dans WordPress. Les utilisateurs râlent depuis longtemps&#160;: c&#8217;est qu&#8217;ils les demandent, ces tags&#160;! Et avec insistance&#160;! Ils devaient être intégrés dans la prochaine version [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame">
<img src='http://blog.christophelebot.fr/wp-content/uploads/2007/05/logo-wordpress.jpg' alt='Logo WordPress' />
</div>
<p>Incroyable mais vrai&nbsp;: <strong><a href="http://wordpress.org/" title="Site officiel WordPress">WordPress</a> ne gère pas les <em>tags</em>&nbsp;!</strong> Ces petites étiquettes qui donnent du sens au contenu généré par les utilisateurs, sont dans tous les services estampillés &laquo;&nbsp;Web 2.0&#8243;&#8230; sauf dans WordPress. Les utilisateurs râlent depuis longtemps&nbsp;: c&#8217;est qu&#8217;ils les demandent, ces <em>tags</em>&nbsp;! Et avec insistance&nbsp;! Ils devaient être intégrés dans la prochaine version (la v.2.2 à paraître ces jours-ci) et ne le seront que dans la version 2.3. Les plus impatients ont déjà migré sur d&#8217;autres plates-formes&#8230;</p>
<p><strong>Mais au fait, a-t-on vraiment besoin des <em>tags</em> dans WordPress&nbsp;?</p>
<p>Non, car ce moteur de blog propose les catégories pour les gérer.</strong> Certains vont tout de suite me dire qu&#8217;il y a une grosse différence entre les deux et qu&#8217;il faut donc les deux. C&#8217;est vrai, il y a une telle différence que j&#8217;utilise les deux dans ce blog&#8230; en m&#8217;appuyant seulement sur les catégories.</p>
<h3>Gérer les catégories comme un arbre sémantique</h3>
<p>L&#8217;astuce consiste à utiliser la hiérarchie des catégories comme un arbre sémantique. Ensuite, il suffit de placer certains de ses noeuds dans l&#8217;interface. Pour illustrer le principe, je vais prendre l&#8217;exemple de ce blog qui utilise à la fois des thèmes et des tags.</p>
<h3>Etape 1 : créer les racines</h3>
<p>Pour commencer, je crée les catégories qui me serviront de racines&nbsp;:</p>
<ul>
<li><strong>Thèmes</strong><br />
Pour gérer une classification hiérarchique.</li>
<li><strong>Mots-clés</strong><br />
Pour gérer les <em>tags</em>.</li>
</ul>
<p>WordPress m&#8217;indique les identifiants des deux racines&nbsp;: 3 pour <em>Thèmes</em> et 4 pour <em>Mot-clés</em>. Ces identifiants sont importants pour placer les racines dans l&#8217;interface. Leur valeur dépend bien sûr de votre propre installation de WordPress. Mais n&#8217;allons pas trop vite&#8230;</p>
<h3>Etape 2 : créer les thèmes</h3>
<p>Mes thèmes sont hiérarchiques. Je crée donc les thèmes principaux (<em>Concevoir, Développer, Exploiter, Imaginer, Savoir</em>) en les plaçant sous la catégorie <em>Thèmes</em>. Puis, viennent les thèmes secondaires placés chacun sous un thème principal. Rien de très compliqué, c&#8217;est du WordPress basique&nbsp;!</p>
<div class="asset-frame">
<img src='http://blog.christophelebot.fr/wp-content/uploads/2007/05/wordpress-categ-themes.gif' alt='Thèmes sous WordPress' /><br />
La liste de mes thèmes dans l&#8217;interface de WordPress.
</div>
<h3>Etape 3 : afficher les thèmes</h3>
<p>Maintenant, il faut mettre les mains dans le cambouis. Je vais modifier le thème WordPress de mon blog pour afficher mes thèmes dans la partie latérale de mon blog. Par défaut, WordPress gère la navigation par catégories dans un fichier nommé <code>sidebar.php</code>. J&#8217;y ajoute le code suivant&nbsp;:</p>
<pre name="code" class="php">
&lt;ul&gt;
	&lt;?php
	wp_list_categories('title_li=&amp;orderby=name&amp;show_count=0&amp;use_desc_for_title=1&amp;child_of=3');
	?&gt;
&lt;/ul&gt;
</pre>
<p>wp_list_categories est une fonction standard de WordPress pour afficher la liste des catégories. Grâce à ses options, je vais pouvoir placer la racine de mon arbre sémantique&nbsp;:</p>
<ul>
<li><code>title_li=</code><br />
Indique que je ne souhaite pas afficher de titre avant la liste.</li>
<li><code>orderby=name</code><br />
Ordonne les catégories par nom.</li>
<li><code>use_desc_for_title=1</code><br />
Affiche les catégories sous leur catégorie mère.</li>
<li><code>child_of=3</code><br />
Limite la liste aux catégories appartenant à la catégorie 3 (donc <em>Thèmes</em>).</li>
</ul>
<h3>Etape 4 : créer les mots-clés</h3>
<p>Les mots-clés sont créés sur le même principe. Je les saisie donc dans le gestionnaire de catégories de WordPress, sous la catégorie <em>Mots-clés</em>.</p>
<div class="asset-frame">
<img src='http://blog.christophelebot.fr/wp-content/uploads/2007/05/wordpress-categ-tags.gif' alt='Mots-clés sous WordPress' /><br />
La liste de mes mots-clés dans l&#8217;interface de WordPress.
</div>
<h3>Etape 5 : afficher les mots-clés&#8230; dans un joli <em>tag cloud</em></h3>
<p>Pour afficher les mots-clés, j&#8217;aurais pu me simplifier la vie en reprenant le même principe que pour les thèmes. Dans ce cas, le code suivant suffit&nbsp;:</p>
<pre name="code" class="php">
&lt;ul&gt;
	&lt;?php
	wp_list_categories('title_li=&amp;orderby=name&amp;show_count=0&amp;hierarchical=0&amp;child_of=4');
	?&gt;
&lt;/ul&gt;
</pre>
<p>Mais présenter les mots-clés sous forme d&#8217;un <em>tag cloud</em> est quand-même plus &laquo;&nbsp;tendance&nbsp;&raquo;. Un <em>tag cloud</em> met en valeur les mots-clés (<em>tags</em>) les plus utilisés. Pour cela, inutile de réinventer la roue, j&#8217;utilise une extension WordPress très simple et efficace&nbsp;: <a href="http://sw-guide.de/wordpress/plugins/category-tagging/" title="Extension Category Tagging pour WordPress">Category Tagging</a>.</p>
<p>Une fois installée et activée, je n&#8217;ai plus qu&#8217;à générer le <em>tag cloud</em> dans l&#8217;interface&nbsp;:</p>
<pre name="code" class="php">
&lt;ul&gt;
	&lt;?php
	// Affichage du tag cloud (via plugin Category Tagging)
	if (function_exists ('cattag_tagcloud') ) {
		echo cattag_tagcloud(1,5,1,'NAME_ASC','1,2,3,4,5,6,7,8,9','','&lt;li&gt;&lt;a rel=&quot;tag&quot; href=&quot;%link%&quot; title=&quot;%description%&quot; class=&quot;tag-cloud-%size%&quot;&gt;%title%&lt;/a&gt;&lt;/li&gt;','Aucun mot-clé trouvé');
	}
	// Affichage simple
	else {
		wp_list_categories('title_li=&amp;orderby=name&amp;show_count=0&amp;hierarchical=0&amp;child_of=4');
	}
	?&gt;
&lt;/ul&gt;
</pre>
<p>A chacun de spécifier ses paramètres (voir le détail sur le site de <a href="http://sw-guide.de/wordpress/plugins/category-tagging/" title="Extension Category Tagging pour WordPress">Category Tagging</a>). Le plus important est sans doute le 5<sup>e</sup> paramètre qui exclut des catégories. Je l&#8217;utilise ici pour ne pas afficher les catégories racines (<em>Thèmes</em> et <em>Mots-clés</em>), ainsi que les thèmes de premier niveau qui sont déjà dans l&#8217;interface.</p>
<p>Reste à définir les styles CSS pour afficher les mots-clés en fonction de leur utilisation. Pour moi, c&#8217;est le code suivant&nbsp;:</p>
<pre name="code" class="css">
a.tag-cloud-1 {
	font-size:1em;
	color:#9B907F;
}
a.tag-cloud-2 {
	font-size:1.2em;
	color:#7C6E59;
}
a.tag-cloud-3 {
	font-size:1.4em;
	color:#7C6E59;
}
a.tag-cloud-4 {
	font-size:1.6em;
	color:#666;
}
a.tag-cloud-5 {
	font-size:1.8em;
	color:#444;
}
</pre>
<h3>Inconvénients</h3>
<p>Comme toute astuce, la solution n&#8217;est pas idéale. Il y a aussi des inconvénients&nbsp;:</p>
<ul>
<li>L&#8217;ajout d&#8217;un <em>tag</em> n&#8217;est pas possible pendant la saisie d&#8217;un article. En effet, WordPress propose l&#8217;ajout de catégorie pendant la rédaction, mais il semble impossible d&#8217;ajouter une sous-catégorie. Si quelqu&#8217;un connait le truc, je suis preneur&nbsp;!</li>
<li>Il faut modifier le code du thème WordPress pour gérer la liste des catégories à ne pas afficher dans le <em>tag cloud</em>. C&#8217;est le cas quand j&#8217;ajoute ou supprime un thème principal&#8230; ce qui est très rare.</li>
</ul>
<h3>Avantages</h3>
<p>La solution n&#8217;est peut-être pas idéale, mais c&#8217;est un bon compromis&nbsp;:</p>
<ul>
<li>On se passe d&#8217;un gestionnaire de <em>tags</em>. WordPress s&#8217;en trouve plus léger et plus stable.</li>
<li>Au niveau des articles, je peux afficher les thèmes et les mots-clés dans la même liste pour proposer un choix plus large aux lecteurs.</li>
<li>Si un mot-clé prend de limportance, je peux le placer dans les thèmes sans toucher aux articles, ni aux outils de navigation. Pour faire la même chose avec un système de <em>tags</em> indépendant, il faut modifier chaque article</li>
</ul>
<p><ins datetime="2007-05-14T20:30:39+00:00"><strong>Mise à jour.</strong></ins> Thomas VdB voit deux autres avantages essentiels à utiliser les catégories comme arbre sémantique&nbsp;:</p>
<ul>
<li>Les doublons disparaissent (comme <em>Sémantique</em>, <em>sémantique</em> et <em>semantique</em> qui sont habituellement considérés comme trois <em>tags</em> différents).</li>
<li>Le référencement est optimisé car l&#8217;adresse d&#8217;une page d&#8217;un tag décrit son contenu et facilite son indexation (par exemple, <a href="http://blog.christophelebot.fr/category/mots-cles/web-semantique/" title="Tag Web sémantique">/category/mots-cles/web-semantique/</a>).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2007/05/10/wordpress-categories-tags/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Rue89 a choisi Drupal et explique pourquoi</title>
		<link>http://blog.christophelebot.fr/2007/05/04/drupal-rue89/</link>
		<comments>http://blog.christophelebot.fr/2007/05/04/drupal-rue89/#comments</comments>
		<pubDate>Fri, 04 May 2007 14:10:01 +0000</pubDate>
		<dc:creator>Christophe</dc:creator>
				<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Développer]]></category>
		<category><![CDATA[Evénements]]></category>
		<category><![CDATA[Exploiter]]></category>
		<category><![CDATA[Outils du développeur]]></category>
		<category><![CDATA[Savoir]]></category>
		<category><![CDATA[Services en ligne]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Gestion de contenu]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Travail collaboratif]]></category>

		<guid isPermaLink="false">http://blog.christophelebot.fr/2007/05/04/drupal-rue89/</guid>
		<description><![CDATA[Dimanche 6 mai 2007, ce sera la fin du suspens : nous saurons tous à quoi ressemble&#8230; Rue89 ! Oui, c&#8217;est la date qu&#8217;a choisi cette équipe de journalistes passionnés et téméraires pour ouvrir un site d&#8217;information d&#8217;un nouveau genre. Rendez-vous donc dimanche à 18h (pas à 20h !). Pour en diffuser le contenu, Rue89 [...]]]></description>
			<content:encoded><![CDATA[<div class="asset-frame"><a title="Site web Rue89" href="http://www.rue89.com/"><img src="http://blog.christophelebot.fr/wp-content/uploads/2007/05/rue89.png" alt="Rue89" /></a></div>
<p><strong>Dimanche 6 mai 2007, ce sera la fin du suspens : nous saurons tous à quoi ressemble&#8230; <a title="Site web Rue89" href="http://www.rue89.com/">Rue89</a> !</strong> Oui, c&#8217;est la date qu&#8217;a choisi cette équipe de journalistes passionnés et téméraires pour ouvrir un site d&#8217;information d&#8217;un nouveau genre. Rendez-vous donc dimanche à 18h (pas à 20h !).</p>
<p>Pour en diffuser le contenu, Rue89 a sélectionné <a title="Site web Drupal" href="http://www.drupal.org/">Drupal</a>, une plate-forme de gestion de contenu libre. Ce choix est argumenté dans un <a title="Spécial geek : pourquoi Drupal ? " href="http://makingof.rue89.com/index.php?entry=entry070428-172321">article du blog Rue89</a> :</p>
<blockquote><p>Parce que nous avions pris la décision de démarrer le site au plus vite et de le faire évoluer au fur et à mesure des suggestions et critiques des utilisateurs, nous avons cherché une solution flexible et prête à l&#8217;emploi.</p>
<p>[...]</p>
<p>Nous avons opté pour la plateforme LAMP (Linux, Apache, MySQL, PHP) parce qu&#8217;elle est très largement répandue sur Internet, maîtrisée par de nombreux développeurs et qu&#8217;elle sert de base technologique à plusieurs outils de gestion de contenu Open Source performants et stables.</p>
<p>[...]</p>
<p>SPIP, bien que largement déployé, nous a paru dépassé et ne répondant pas à nos attentes en terme de fonctionnalités.</p>
<p>[...]</p>
<p>En matière de performance, Drupal apporte des résultats bien plus intéressants [que Joomla] à périmètre matériel constant.</p></blockquote>
<p>Rue89 cite par ailleurs quelques études comparatives qui permettent d&#8217;y voir plus clair :</p>
<ul>
<li><a title="Article sur le site Alledia" href="http://www.alledia.com/blog/general-cms-issues/joomla-and-drupal-%11-which-one-is-right-for-you?/">Joomla and Drupal &#8211; Which One is Right for You?</a>, Alledia</li>
<li><a title="Article sur le site de Dries Buytaert" href="http://buytaert.net/drupal-vs-joomla-performance">Drupal vs Joomla: performance</a>, Dries Buytaert (responsable du projet Drupal)</li>
<li><a title="Article sur le site CMSReport" href="http://cmsreport.com/node/543">Drupal and Joomla comparison</a>, CMSReport</li>
<li><a title="Article sur le site IBM" href="http://www-128.ibm.com/developerworks/ibm/library/i-osource1/">Using open source software to design, develop, and deploy a collaborative Web</a>, IBM</li>
</ul>
<p>Les commentaires des lecteurs valent également de s&#8217;y attarder :</p>
<blockquote><p>eZ Publish est bien une référence, mais une référence qui ne monte pas ! La faute a sa difficulté à monter en charge (cache PHP obligatoire) et à l&#8217;incapacité des développeurs à adapter le framework aux versions courantes de PHP/MySQL.</p>
<p>[...]</p>
<p>C&#8217;est un véritable plaisir que de développer sur ce framework [Drupal], notre équipe de dev est littéralement sous le charme !</p></blockquote>
<p>Voilà beaucoup d&#8217;arguments solides en faveur de Drupal. Pour ma part, je l&#8217;avais testé sans être convaincu. C&#8217;était en 2001. La démonstration en ligne de la version actuelle m&#8217;a montré qu&#8217;il a beaucoup évolué depuis. Je le replace donc dans le peloton de tête des CMS LAMP (Content Management System sur plate-forme Linux, Apache, MySQL et PHP).</p>
<p>Il me reste à souhaiter bon vent à Rue89 qui aura déjà beaucoup à faire deux heures après son lancement !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christophelebot.fr/2007/05/04/drupal-rue89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

