<?xml version="1.0" encoding="utf-8"?><rss version="2.0"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:cc="http://backend.userland.com/creativeCommonsRssModule"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    
	<channel>
		<title>Gastero Prod - Tags - d&#233;veloppement</title>
		<link>http://www.gasteroprod.com/tags/developpement.html</link>
		<description></description>
		<image>
			<url>http://www.gasteroprod.com/design/images/button_gasteroprod.png</url>
			<width>80</width>
			<height>15</height>
			<title>Gastero Prod</title>
			<link>http://www.gasteroprod.com/</link>
		</image>
		<language>fr</language>
		<generator>SPIP 2.0.0 dev</generator>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<ttl>60</ttl>
		<cc:license>http://creativecommons.org/licenses/by-nc-sa/1.0/</cc:license>
		
		<item>
			<title>Mes conventions de codage</title>
			<link>http://www.gasteroprod.com/blog/mes-conventions-de-codage.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p><a href='http://case.oncle-tom.net/' class='spip_out'>Oncle Tom</a> m&#8217;a envoyé en douce il y a quelques jours une <a href='http://case.oncle-tom.net/2008/07/23/conventions-de-programmation-necessaire-maturite/' class='spip_out'>patate chaude</a> en m&#8217;invitant à vous parler de mes conventions de codage. Vaste sujet, et surtout très vite trollesque, de quoi se régaler.</p></div>
        	<div><p>J&#8217;avais commencé à mettre le sujet en perspective avec un bref historique de mon expérience du développement informatique, mais ce qui devait être bref s&#8217;est révélé plutôt étoffé, donc c&#8217;est devenu un article à part entière sur mes aventures informatiques, et il y a tellement à dire que je ne l&#8217;ai pas fini... bref, passons tout de suite au cœur du sujet&nbsp;!</p>

<p>En fait, au risque de décevoir, j&#8217;ai plus des habitudes que des conventions strictes de codage, et même si j&#8217;ai des préférences personnelles, j&#8217;essaie en général de m&#8217;en tenir aux conventions qui me sont dictées par les projets auxquels je participe.</p>

<p>Après quelques projets sur lesquels j&#8217;étais plutôt isolé, comme <a href='http://sourceforge.net/projects/phpmychat/' class='spip_out'>phpMyChat</a>, et des discussions sur les newsgroups <a href='http://www.gasteroprod.com/news:fr.comp.internet.www.auteurs.php' class='spip_out'>fciwap</a> puis <a href='http://www.gasteroprod.com/news:fr.comp.lang.php' class='spip_out'>fclp</a>, ma première grosse expérience en matière de conventions de codage est venue avec <a href='http://www.gasteroprod.com/blog/blog/une-introduction-a-pear.html' class='spip_in'>PEAR</a>&nbsp;[<a href="http://www.gasteroprod.com/#nb1" name="nh1" id="nh1" class="spip_note" rel="footnote" title='[1] Pour ceux qui ne connaissent pas, PEAR est un entrep&#244;t de classes &#8212; et (...)' >1</a>]. Des discussions interminables et passionnées&nbsp;[<a href="http://www.gasteroprod.com/#nb2" name="nh2" id="nh2" class="spip_note" rel="footnote" title='[2] Oui, OK, trollesques, on peut le dire...' >2</a>] ont eu lieu sur les mailing-lists du projet lors de l&#8217;élaboration des <a href='http://pear.php.net/manual/fr/standards.php' class='spip_out'>conventions de codage</a>, à laquelle j&#8217;ai participé fin 2001. Il était notamment question du choix d&#8217;<a href='http://article.gmane.org/gmane.comp.php.pear.devel/359' class='spip_out'>espaces ou tabulations pour l&#8217;indentation du code</a>&nbsp;[<a href="http://www.gasteroprod.com/#nb3" name="nh3" id="nh3" class="spip_note" rel="footnote" title='[3] Certains ont m&#234;me proposer de m&#233;langer tabulations et espaces (...)' >3</a>] ou du positionnement des accolades...</p>

<p>J&#8217;approuve au final le choix d&#8217;espaces pour les indentations, mais j&#8217;étais auparavant plutôt habitué aux tabulations, tout simplement parce que les éditeurs que j&#8217;utilisais à l&#8217;époque ne savaient pas gérer ces espaces lors de l&#8217;utilisation de la touche de tabulation, et surtout que je ne me préoccupais pas du rendu dans un autre éditeur, étant le seul à travailler sur mes projets. Je ne retrouve malheureusement pas l&#8217;exemple qui avait fini par convaincre presque tout le monde &mdash; dont moi &mdash; que les espaces étaient la meilleure solution.</p>

<p>Après, entre 2 et 4 espaces, je trouve que 2 espaces évitent d&#8217;avoir trop de décalage quand on a beaucoup de niveaux imbriqués, tout en préservant une bonne lisibilité. &#171;&nbsp;C&#8217;est mon choix&nbsp;&#187;.</p>

<p>Quoi qu&#8217;il en soit, il ne faut pas oublier non plus que ces conventions de codage sont comme toutes les bonnes pratiques, elles s&#8217;enrichissent au fur et à mesure des expériences, et elles <a href='http://pear.php.net/manual/fr/pear2cs.php' class='spip_out'>évoluent</a> toujours petit à petit, par ajustements successifs.</p>

<p>Côté PHP, donc, j&#8217;étais plutôt utilisateur des conventions de PEAR, mais comme je l&#8217;ai indiqué plus tôt, j&#8217;adopte systématiquement les conventions déjà en place sur les projets auxquels je participe, donc je m&#8217;intéresse maintenant à celles de <a href='http://www.clever-age.com/veille/blog/tags/symfony/' class='spip_out'>symfony</a>.</p>

<p>Pour le Javascript, rien de bien original, j&#8217;utilise <i>grosso modo</i> les mêmes qu&#8217;Oncle Tom, mais pour les CSS, je reste basique, pas d&#8217;indentation selon la cascade, et un ordre logique plutôt qu&#8217;alphabétique.</p>

<p>Bon, la patate est encore chaude bien que passée entre de nombreuses mains, je la refile vite fait à <a href='http://www.glagla.org/weblog/' class='spip_out'>Oliv</a> même s&#8217;il a fait un rapide commentaire chez Oncle Tom, <a href='http://www.unelectronlibre.info/' class='spip_out'>NiCoS</a> histoire d&#8217;avoir l&#8217;avis d&#8217;un fan de Django et <a href='http://www.clochix.net/' class='spip_out'>Clochix</a>&nbsp;!</p></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh1" name="nb1" class="spip_note" title="Notes 1" rev="footnote">1</a>] Pour ceux qui ne connaissent pas, PEAR est un entrepôt de classes &mdash; et non réellement un <a href='http://www.clever-age.com/veille/blog/tags/framework/' class='spip_out'><i>framework</i></a>, même si ce terme est plus attractif &mdash; PHP répondant aux problématiques les plus courantes des développements Web.</p>

<p>[<a href="http://www.gasteroprod.com/#nh2" name="nb2" class="spip_note" title="Notes 2" rev="footnote">2</a>] Oui, OK, trollesques, on peut le dire...</p>

<p>[<a href="http://www.gasteroprod.com/#nh3" name="nb3" class="spip_note" title="Notes 3" rev="footnote">3</a>] Certains ont même proposer de <a href='http://article.gmane.org/gmane.comp.php.pear.devel/378' class='spip_out'>mélanger tabulations et espaces</a>&nbsp;!</p></div>
        </div>
        ]]></description>
			<pubDate>Thu, 31 Jul 2008 23:03:00 +0100</pubDate>
			
				<category>d&#233;veloppement</category>
			
				<category>informatique</category>
			
			<guid isPermaLink="true">blog/mes-conventions-de-codage.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/mes-conventions-de-codage.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/mes-conventions-de-codage-734.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Surveillez vos erreurs 404, elles peuvent &#234;tre tr&#232;s instructives</title>
			<link>http://www.gasteroprod.com/blog/blog/surveillez-vos-erreurs-404-elles-peuvent-etre-tres-instructives.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>A l&#8217;heure où tout le monde ne jure que par l&#8217;optimisation du référencement &mdash; on dit <i>Search Engine Optimization</i>, ou SEO, pour faire branché &mdash; afin d&#8217;augmenter son trafic, et ainsi ses clients potentiels et/ou son revenu publicitaire, qui se soucie de vérifier ce qui se passe pour les internautes qui arrivent bien sur le site, mais sur une page qui n&#8217;existe pas, indiquée comme il se doit par une erreur HTTP 404&nbsp;[<a href="http://www.gasteroprod.com/#nb1-1" name="nh1-1" id="nh1-1" class="spip_note" rel="footnote" title='[1] Oui, c&#39;est la r&#232;gle, mais certains ne la respectent pas, bien (...)' >1</a>]&nbsp;?</p></div>
        	<div><p>Si vous ne vous en souciez pas, commencez tout de suite à le faire, il y a beaucoup à apprendre, et sans doute beaucoup d&#8217;améliorations à apporter à votre site.</p>

<p>Le moyen le plus simple de connaître les URL en erreur 404 sur lesquelles arrivent les internautes, c&#8217;est d&#8217;abord de s&#8217;intéresser à celles qui sont référencées dans les moteurs de recherche, dont Google. On peut trouver justement un référencement des pages en erreur, dont celles en 404, au sein des <a href='https://www.google.com/webmasters/tools/' class='spip_out'>outils Google pour les webmasters</a>.</p>

<dl class='spip_document_494 spip_documents spip_documents_center' >
<dt><a href="http://www.gasteroprod.com/IMG/png/google-webmasters-404.png" title='PNG - 150.8 ko' type="image/png"><img src='http://www.gasteroprod.com/local/cache-vignettes/L400xH205/google-webmasters-404-56f85.png' width='400' height='205' alt='PNG - 150.8 ko' /></a></dt>
<dt class='spip_doc_titre' style='width:350px;'><strong>Erreurs 404 de Gastero Prod référencées par Google</strong></dt>
</dl>
<p>Une autre méthode plus basique et source potentielle d&#8217;explosion de compte mail est de se faire envoyer un mail à chaque requête donnant une erreur. C&#8217;est ce que j&#8217;ai fait dans mon squelette <code class='spip_code' dir='ltr'>404.html</code> pour Gastero Prod, en donnant au passage quelques informations utiles de contexte d&#8217;appel&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
mail('adresse@example.com',<br />
&nbsp; &nbsp; &nbsp; &nbsp; '[GP404] '.$_SERVER['REQUEST_URI'],<br />
&nbsp; &nbsp; &nbsp; &nbsp; '#URL_SITE_SPIP'.$_SERVER['REQUEST_URI'].&quot;\r\n&quot;.'User agent: '.$_SERVER['HTTP_USER_AGENT'].&quot;\r\n&quot;.'Referer: '.$_SERVER['HTTP_REFERER'].&quot;\r\n&quot;.print_r($GLOBALS, true),<br />
&nbsp; &nbsp; &nbsp; &nbsp; 'From: adresse@example.com');<br />
}<br />
?&gt;</code></div>
<p>Identifier les erreurs 404 permet d&#8217;améliorer un site sur plusieurs sujets&nbsp;:</p>

<h3 class="spip">La qualité du référencement</h3>
<p>Si un internaute arrive sur votre site depuis un moteur de recherche, et tombe sur une erreur 404, c&#8217;est qu&#8217;il y a un soucis dans votre référencement, sans doute parce que votre site ou un autre site contient des liens qui pointent vers ces mauvaises URL, liens qui existent&nbsp;:</p>

<ul class="spip"><li> soit par simple erreur de frappe, ce qu&#8217;un bon <a href='http://www.clever-age.com/veille/clever-link/les-outils-de-gestion-de-contenu.html' class='spip_out'>outil de gestion de contenus Web</a> devrait permettre d&#8217;éviter,</li><li> soit parce que vous avez modifié vos URL, ce qu&#8217;il ne faut surtout <a href='http://www.w3.org/Provider/Style/URI' class='spip_out'>pas faire</a>&nbsp;!,</li><li> soit parce que des URL déterminées et gérées automatiquement sont mal configurées.</li></ul>
<p>En observant les erreurs 404 relevées par Google, j&#8217;ai pu corriger de nombreux problèmes apparus sur Gastero Prod, notamment avec le petit changement opéré sur les URL&nbsp;[<a href="http://www.gasteroprod.com/#nb1-2" name="nh1-2" id="nh1-2" class="spip_note" rel="footnote" title='[2] Oui, je sais, c&#39;est mal, mais j&#39;ai mis des redirections permanentes au (...)' >2</a>] pour que les articles du blog ne soient plus à la racine mais dans une sous rubrique <code class='spip_code' dir='ltr'>blog/</code> et surtout un mélange entre URL absolues et URL relative, pas encore totalement bien gérées dans SPIP avec des URL arborescentes.</p>

<p>Il n&#8217;y a bien entendu pas que le nettoyage des erreurs 404 qui permet d&#8217;améliorer la qualité du référencement, mais c&#8217;est un autre sujet...</p>

<h3 class="spip">Les performances, la consommation de bande passante, et donc potentiellement le coût de l&#8217;hébergement</h3>
<p>Si vous faites en sorte de diminuer les erreurs 404 sur votre site, quelles qu&#8217;en soit les causes, les internautes ne téléchargeront que les pages réellement intéressantes, et vous réduirez le gaspillage de ressources de votre serveur, ainsi que la bande passante consommée.</p>

<p>Selon la nature de votre hébergement, cela peut avoir un impact &mdash; positif à priori &mdash; sur son coût, ce qui peut s&#8217;avérer intéressant comme motivation.</p>

<h3 class="spip">La sécurité</h3>
<p>Vous pouvez aussi identifier, dans les erreurs 404, des attaques essayant de profiter de failles de sécurité de solutions packagées.</p>

<p>Par exemple, un requête revenant ces derniers temps dans mes logs de 404 est la suivante&nbsp;:</p>

<p><code class='spip_code' dir='ltr'>http://www.gasteroprod.com/infoevent.php3?rootagenda=http://love-ma2.t35.com/sistem.txt?</code></p>

<p>En cherchant <code class='spip_code' dir='ltr'>infoevent.php3</code> sur Google, j&#8217;ai découvert qu&#8217;il s&#8217;agit d&#8217;un script faisant justement l&#8217;objet d&#8217;une <a href='http://www.securityfocus.com/bid/29164' class='spip_out'>faille de sécurité de phpMyAgenda</a>.</p>

<p>Comme par hasard, le client ayant fait cette requête n&#8217;est pas un navigateur traditionnel, mais s&#8217;identifie comme étant <code class='spip_code' dir='ltr'>libwww-perl/5.803</code>. C&#8217;est donc bien un programme qui tente l&#8217;attaque, sauf falsification de signature qui serait ici inepte.</p>

<p>Autre exemple avec cette requête&nbsp;:</p>

<p><code class='spip_code' dir='ltr'>http://www.gasteroprod.com//tags.php?BBCodeFile=http://guhit.com/img/id.txt?</code></p>

<p>Requête qui correspond à une <a href='http://www.securityfocus.com/bid/19464' class='spip_out'>faille de sécurité de Tagger LE</a>, et qui est demandée comme par hasard aussi par un client <code class='spip_code' dir='ltr'>libwww-perl/5.812</code>&nbsp;!</p>

<p>Dernier exemple avec cette requête&nbsp;:</p>

<p><code class='spip_code' dir='ltr'>http://www.gasteroprod.com//chat/users_popupL.php3?From=http://www.covoiturage.fr/communities/arab.txt??</code></p>

<p>Requête qui correspond à une <a href='http://osvdb.org/39224' class='spip_out'>faille de sécurité de phpMyChat</a>&nbsp;[<a href="http://www.gasteroprod.com/#nb1-3" name="nh1-3" id="nh1-3" class="spip_note" rel="footnote" title='[3] Oups oups oups ! :-(' >3</a>], et qui est demandée comme par hasard une fois de plus par un client <code class='spip_code' dir='ltr'>libwww-perl/5.805</code>&nbsp;!</p>

<p>Je tiens à signaler aux hackers qui me liraient que je n&#8217;utilise aucune de ces applications, ni aucune des nombreuses autres auxquelles s&#8217;adressent les autres attaques que je subi...</p>

<p>Faudrait-il donc refuser systématiquement toute requête signée par <code class='spip_code' dir='ltr'>libwww-perl</code>&nbsp;?</p>

<p>En tout cas, vous pouvez déjà refuser les requêtes clairement identifiables comme des attaques brutales, par exemple comme ceci si vous avez le module <code class='spip_code' dir='ltr'>mod_rewrite</code> pour Apache&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code># Bloquer certaines attaques brutales pas fines<br />
# http://www.securityfocus.com/bid/19464<br />
RewriteCond %{QUERY_STRING} &amp;?BBCodeFile=([^&amp;]+)<br />
RewriteRule tags\.php - [F,L]<br />
# http://www.securityfocus.com/bid/29164<br />
RewriteCond %{QUERY_STRING} &amp;?rootagenda=([^&amp;]+)<br />
RewriteRule infoevent\.php3 - [F,L]<br />
# http://osvdb.org/39224<br />
RewriteCond %{QUERY_STRING} &amp;?From=([^&amp;]+)<br />
RewriteRule users_popupL\.php3 - [F,L]</code></div>
<p>Voilà, vous êtes prévenus, n&#8217;ignorez plus vos erreurs 404, agissez&nbsp;!</p></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh1-1" name="nb1-1" class="spip_note" title="Notes 1-1" rev="footnote">1</a>] Oui, c&#8217;est la règle, mais certains ne la respectent pas, bien entendu...</p><p>[<a href="http://www.gasteroprod.com/#nh1-2" name="nb1-2" class="spip_note" title="Notes 1-2" rev="footnote">2</a>] Oui, je sais, c&#8217;est mal, mais j&#8217;ai mis des redirections permanentes au moins, moi&nbsp;!&nbsp;;-)</p>

<p>[<a href="http://www.gasteroprod.com/#nh1-3" name="nb1-3" class="spip_note" title="Notes 1-3" rev="footnote">3</a>] Oups oups oups&nbsp;!&nbsp;:-(</p></div>
        </div>
        ]]></description>
			<pubDate>Mon, 02 Jun 2008 21:31:44 +0100</pubDate>
			
				<category>SPIP</category>
			
				<category>d&#233;veloppement</category>
			
				<category>404</category>
			
				<category>RewriteRule</category>
			
			<guid isPermaLink="true">blog/blog/surveillez-vos-erreurs-404-elles-peuvent-etre-tres-instructives.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/surveillez-vos-erreurs-404-elles-peuvent-etre-tres-instructives.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/surveillez-vos-erreurs-404-elles-peuvent-a-tre-tra-s-instructives-684.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Comment d&#233;finir dans jQuery ses propres filtres de s&#233;lection</title>
			<link>http://www.gasteroprod.com/blog/blog/comment-definir-dans-jquery-ses-propres-filtres-de-selection.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p><i>Article initialement publié dans <a href='http://www.clever-age.com/veille/blog/comment-definir-dans-jquery-ses-propres-filtres-de-selection.html' class='spip_out'>le weblog de Clever Age</a>.</i></p>

<p>La librairie Javascript <a href='http://jquery.com/' class='spip_out'>jQuery</a> est en train de se répandre à grande vitesse, mais malgré une <a href='http://docs.jquery.com/Main_Page' class='spip_out'>documentation</a> assez complète, certains points restent obscurs. Voici par exemple comment créer votre propre filtre de sélection.</p></div>
        	<div><p>Le besoin particulier qui m&#8217;a conduit à trouver la solution que je vais exposer ici est de sélectionner des éléments dont le contenu texte est exactement égal à une chaine de caractères donnée.</p>

<p>jQuery propose le filtre <a href='http://docs.jquery.com/DOM/Traversing#contains.28_str_.29' class='spip_out'><code class='spip_code' dir='ltr'>contains()</code></a> qui permet d&#8217;identifier des éléments qui contiennent la chaine de caractères &#8217;text&#8217;, de l&#8217;une des manières suivantes&nbsp;:</p>

<div class="coloration_code"><div class="spip_javascript code">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'element'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">contains</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'text'</span><span style="color: #009900;">&#41;</span>...<br />
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'element:contains(text)'</span><span style="color: #009900;">&#41;</span>...</div><div class='code_download'
		style='text-align: right;'>
		<a href='http://www.gasteroprod.com/local/cache-code/9fdbd605f68cf34482cebb737a85270a.txt'
		style='font-family: verdana, arial, sans; font-weight: bold; font-style: normal;'>T&eacute;l&eacute;charger</a></div></div>
<p>Malheureusement, ce filtre ne permet pas d&#8217;identifier des éléments qui contiennent exactement la chaine <code class='spip_code' dir='ltr'>'text'</code>, donc il faut le faire soit-même.</p>

<p>La solution directe, sans étendre jQuery, est d&#8217;utiliser <a href='http://docs.jquery.com/DOM/Traversing#filter.28_expression_.29' class='spip_out'><code class='spip_code' dir='ltr'>filter()</code></a>&nbsp;:</p>

<div class="coloration_code"><div class="spip_javascript code">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'element'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">return</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'text'</span>;<br />
<span style="color: #009900;">&#125;</span></div><div class='code_download'
		style='text-align: right;'>
		<a href='http://www.gasteroprod.com/local/cache-code/272a44534a74cd136e4acb37e91395e1.txt'
		style='font-family: verdana, arial, sans; font-weight: bold; font-style: normal;'>T&eacute;l&eacute;charger</a></div></div>
<p>Si cela est réalisable une ou deux fois dans un code relativement peu volumineux, il devient vite pénible de recopier tout ce code pour une opération qu&#8217;on imaginerait plus simple.</p>

<p>Heureusement, il est possible d&#8217;<a href='http://docs.jquery.com/Plugins/Authoring' class='spip_out'>étendre jQuery</a>, soit par des plugins soit <a href='http://docs.jquery.com/Plugins/Authoring#Using_jQuery.extend_to_extend_jQuery_itself' class='spip_out'>directement jQuery lui-même</a> et ses éléments, dont ses filtres. Cette dernière possibilité n&#8217;est par contre pas bien &mdash; voire pas du tout&nbsp;[<a href="http://www.gasteroprod.com/#nb2-1" name="nh2-1" id="nh2-1" class="spip_note" rel="footnote" title='[1] Esp&#233;rons juste que cette absence de documentation n&#39;implique pas une (...)' >1</a>] &mdash; documentée.</p>

<p>Voici ce que ça donne pour le besoin particulier exprimé précédemment&nbsp;:</p>

<div class="coloration_code"><div class="spip_javascript code">jQuery.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>jQuery.<span style="color: #660066;">expr</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">':'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;containsExactly<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;$(a).text() == m[3]&quot;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>;</div><div class='code_download'
		style='text-align: right;'>
		<a href='http://www.gasteroprod.com/local/cache-code/6ed31e72cf283526ea98310ed5e25508.txt'
		style='font-family: verdana, arial, sans; font-weight: bold; font-style: normal;'>T&eacute;l&eacute;charger</a></div></div>
<p>Une fois ceci fait, il est possible de filtrer les éléments de la manière suivante&nbsp;:</p>

<div class="coloration_code"><div class="spip_javascript code">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'element:containsExactly(text)'</span><span style="color: #009900;">&#41;</span>...</div></div>
<p>Simple, n&#8217;est-ce pas&nbsp;?</p>

<p>Ce qu&#8217;il faut savoir pour écrire ses propres filtres est surtout la définition des variables disponibles. Vous avez sans doute vu ces étranges <code class='spip_code' dir='ltr'>a</code> et <code class='spip_code' dir='ltr'>m[3]</code> dans le code ci-dessus. La première impression pourrait être que cela ne permet de filtrer que les éléments de type lien &mdash; balise <code class='spip_code' dir='ltr'>&lt;a&gt;</code> &mdash; mais il n&#8217;en est rien, ce <code class='spip_code' dir='ltr'>a</code> n&#8217;est qu&#8217;un nom de variable.</p>

<p>Voici donc la fameuse liste des variables, grâce à ce <a href='http://www.mail-archive.com/discuss@jquery.com/msg15863.html' class='spip_out'>mail de Danny Wachsstock sur la liste de discussion jQuery</a>&nbsp;:</p>

<ul class="spip"><li> <code class='spip_code' dir='ltr'>a</code> pour l&#8217;élément à filtrer</li><li> <code class='spip_code' dir='ltr'>m[3]</code> pour ce qui est entre parenthèses dans le sélecteur</li><li> <code class='spip_code' dir='ltr'>i</code> pour l&#8217;index de l&#8217;élément à filtrer</li><li> <code class='spip_code' dir='ltr'>r</code> pour le tableau complet d&#8217;éléments</li></ul>
<p>Comme indiqué dans le mail cité précédemment, vous trouverez de nombreux exemples dans cette <a href='http://www.softwareunity.com/sandbox/JQueryMoreSelectors/' class='spip_out'>liste de sélecteurs aditionnels</a>.</p>

<p>A vous de jouer&nbsp;!</p></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh2-1" name="nb2-1" class="spip_note" title="Notes 2-1" rev="footnote">1</a>] Espérons juste que cette absence de documentation n&#8217;implique pas une pérennité douteuse</p></div>
        </div>
        ]]></description>
			<pubDate>Thu, 05 Jul 2007 15:23:12 +0100</pubDate>
			
				<category>d&#233;veloppement</category>
			
				<category>Clever Age</category>
			
				<category>jQuery</category>
			
				<category>Javascript</category>
			
			<guid isPermaLink="true">blog/blog/comment-definir-dans-jquery-ses-propres-filtres-de-selection.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/comment-definir-dans-jquery-ses-propres-filtres-de-selection.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/comment-da-c-finir-dans-jquery-ses-propres-filtres-de-sa-c-lection-611.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Open XML Translator : Clever Age r&#233;alise pour Microsoft Corp. un plugin permettant &#224; Word 2007 d&#39;utiliser le format OpenDocument (ODF) d&#39;OpenOffice </title>
			<link>http://www.gasteroprod.com/blog/blog/open-xml-translator-clever-age-realise-pour-microsoft-corp.-un-plugin-permettant-a-word-2007-d-utiliser-le-format-opendocument-odf-d-openoffice.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>L&#8217;annonce est enfin officielle&nbsp;[<a href="http://www.gasteroprod.com/#nb3-1" name="nh3-1" id="nh3-1" class="spip_note" rel="footnote" title='[1] Microsoft Expands Document Interoperability' >1</a>], Microsoft Corp. sponsorise <a href='http://www.clever-age.com/' class='spip_out'>Clever Age</a> qui conçoit et développe un plugin pour Word 2007 qui permettra d&#8217;exploiter dans celui-ci le format standard OpenDocument.</p></div>
        	<div><p>Le projet est publié sous licence libre BSD et hébergé sur SourceForge sous le nom <a href='http://sourceforge.net/projects/odf-converter' class='spip_out'>ODF Add-in for Word 2007</a>. La première version vient d&#8217;être mise en ligne, où elle est téléchargeable gratuitement&nbsp;[<a href="http://www.gasteroprod.com/#nb3-2" name="nh3-2" id="nh3-2" class="spip_note" rel="footnote" title='[2] Les statistiques de t&#233;l&#233;chargement sont d&#233;j&#224; int&#233;ressantes...' >2</a>].</p>

<p>Voilà la citation de Frédéric Bon extraite du communiqué officiel de Microsoft&nbsp;:</p>

<blockquote class="spip">
<p>
&#8220;OpenXML represents a paradigm shift not only in its architecture but also in the customer needs it serves, opening organizations&#8217; existing documents to take advantage of new content management and collaboration scenarios that weren&#8217;t possible even as recently as a few years ago ,&#8221; said Frédéric Bon, CEO of Clever Age. &#8220;Through the documentation Ecma International is creating and work such as the Open XML Translator project, customers will soon have the confidence that Open XML and ODF formats can coexist and new document scenarios will flourish. We are looking forward to working with the community of developers and businesses interested in XML documents.&#8221;</p>
</blockquote>
<p>Les réactions &mdash; et leurs armées de trolls associées &mdash; ne se sont pas fait attendre, ce qui est plutôt logique étant donné la sensibilité du sujet. Voilà quelques liens pour suivre les débats et nourrir les trolls&nbsp;[<a href="http://www.gasteroprod.com/#nb3-3" name="nh3-3" id="nh3-3" class="spip_note" rel="footnote" title='[3] Je mettrais cette liste &#224; jour r&#233;guli&#232;rement, n&#39;h&#233;sitez pas &#224; (...)' >3</a>]&nbsp;:</p>

<ul class="spip"><li> En français&nbsp;:<ul class="spip"><li> <a href='http://www.clubic.com/actualite-36315-microsoft-etend-l-interoperabilite-entre-documents.html' class='spip_out'>Clubic</a></li><li> <a href='http://www.pcinpact.com/actu/news/29915-Interoperabilite-Microsoft-souvre-enfin-a-Op.htm' class='spip_out'>PC Impact</a></li><li> <a href='http://linuxfr.org/2006/07/06/21067.html' class='spip_out'>LinuxFR</a> (et <a href='http://linuxfr.org/~snt/22110.html' class='spip_out'>là</a>)</li><li> <a href='http://www.generation-nt.com/actualites/16595/microsoft-open-document-office-openoffice-sun-microsystems/' class='spip_out'>Génération-NT</a></li><li> <a href='http://www.lemondeinformatique.fr/actualites/lire-microsoft-annonce-l-interoperabilite-odf-openxml-20010.html' class='spip_out'>Le Monde Informatique</a></li><li> <a href='http://www.vnunet.fr/actualite/tpepme_-_business/strategies_et_marches/20060706006' class='spip_out'>VNUnet</a></li><li> <a href='http://www.01net.com/article/321860.html' class='spip_out'>01net</a></li><li> <a href='http://www.zdnet.fr/actualites/informatique/0,39040745,39362035,00.htm?xtor=1' class='spip_out'>ZDNet</a></li><li> <a href='http://standblog.org/blog/2006/07/10/93114850-actu-des-standards-et-des-formats-ouverts' class='spip_out'>Tristan Nitot</a></li></ul></li></ul>
<ul class="spip"><li> En anglais&nbsp;:<ul class="spip"><li> <a href='http://blogs.msdn.com/brian_jones/archive/2006/07/05/657510.aspx' class='spip_out'>Brian Jones, program manager de l&#8217;équipe Microsoft Office</a></li><li> <a href='http://digg.com/software/Microsoft_to_Support_OpenDocument!' class='spip_out'>Digg</a></li><li> <a href='http://arstechnica.com/journals/microsoft.ars/2006/7/6/4538' class='spip_out'>Ars Technica</a></li><li> <a href='http://www.theregister.co.uk/2006/07/06/microsoft_odf_interoperability/' class='spip_out'>The Register</a></li><li> <a href='http://it.slashdot.org/it/06/07/06/139243.shtml' class='spip_out'>Slashdot</a></li><li> <a href='http://www.groklaw.net/article.php?story=20060706064747376' class='spip_out'>Groklaw</a></li><li> <a href='http://www.microsoftmonitor.com/archives/016375.html' class='spip_out'>Jupiter Research&#8217;s Microsoft Monitor</a>&nbsp;: &#171;&nbsp;Microsoft has previously made overtures to the open-source community, 
but this project goes further in many respects.&nbsp;&#187;</li><li> <a href='http://www.vnunet.com/vnunet/news/2159846/microsoft-flip-flops-odf' class='spip_out'>vnunet.com&nbsp;: Microsoft flip-flops on ODF support</a></li><li> <a href='http://www.upi.com/Hi-Tech/view.php?StoryID=20060706-010521-9677r' class='spip_out'>United Press International&nbsp;: Microsoft backs cross-platform initiative</a></li><li> <a href='http://www.pcworld.idg.com.au/index.php/id;1131017534;fp;16;fpid;0' class='spip_out'>PC World&nbsp;: Microsoft to back Office-to-ODF plug-in</a>&nbsp;: &#171;&nbsp;According to Paoli, Clever Age approached Microsoft last year after some initial development. "They started having good results, so we asked them to continue," he said.&nbsp;&#187;</li><li> <a href='http://www.consortiuminfo.org/standardsblog/article.php?story=20060706092209358' class='spip_out'>ConsortiumInfo.org&#8217;s Standards Blog&nbsp;: Microsoft Falls Back Again&nbsp;: Announces ODF Plugin Project</a>&nbsp;: &#171;&nbsp;The news is being treated in the press as "new news," but in fact Ray Ozzie let slip mention of the project last October, and an open source converter project was started by the same French company last September 26.&nbsp;&#187;</li><li> <a href='http://blogs.guardian.co.uk/technology/archives/2006/07/07/microsoft_announces_open_document_support_for_office_2007.html' class='spip_out'>Guardian Unlimited&#8217;s Technology Blog&nbsp;: Microsoft announces Open Document support for Office 2007</a>&nbsp;: &#171;&nbsp;Why Clever Age&nbsp;? It was already working on a SourceForge proejct for an <a href='http://sourceforge.net/projects/ooo-word-filter/' class='spip_out'>OpenOffice filter to Microsoft Word XML</a>.&nbsp;&#187;</li><li> <a href='http://www.cio.com/blog_view.html?CID=22737' class='spip_out'>CIO&#8217;s Microsoft Informer&nbsp;: OpenDocument Skirmish Ends in Truce</a></li></ul></li></ul>
<ul class="spip"><li> En polonais&nbsp;[<a href="http://www.gasteroprod.com/#nb3-4" name="nh3-4" id="nh3-4" class="spip_note" rel="footnote" title='[4] Bin oui, notre entit&#233; polonaise participe au projet' >4</a>]&nbsp;:<ul class="spip"><li> <a href='http://www.idg.pl/news/95698.html' class='spip_out'>IDG Pologne</a></li><li> <a href='http://itbiznes.pl/art20876.html' class='spip_out'>ITbiznes.pl</a></li><li> <a href='http://7thguard.net/news.php?id=5179' class='spip_out'>7thGuard</a></li></ul></li></ul></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh3-1" name="nb3-1" class="spip_note" title="Notes 3-1" rev="footnote">1</a>]  <a href='http://www.microsoft.com/presspass/press/2006/jul06/07-06OpenSourceProjectPR.mspx' class='spip_out'>Microsoft Expands Document Interoperability</a></p><p>[<a href="http://www.gasteroprod.com/#nh3-2" name="nb3-2" class="spip_note" title="Notes 3-2" rev="footnote">2</a>] Les <a href='http://sourceforge.net/project/stats/detail.php?group_id=169337&amp;ugn=odf-converter&amp;type=prdownload&amp;mode=week&amp;package_id=0' class='spip_out'>statistiques de téléchargement</a> sont déjà intéressantes...</p>

<p>[<a href="http://www.gasteroprod.com/#nh3-3" name="nb3-3" class="spip_note" title="Notes 3-3" rev="footnote">3</a>] Je mettrais cette liste à jour régulièrement, n&#8217;hésitez pas à revenir...</p>

<p>[<a href="http://www.gasteroprod.com/#nh3-4" name="nb3-4" class="spip_note" title="Notes 3-4" rev="footnote">4</a>] Bin oui, <a href='http://www.clever-age.com.pl/' class='spip_out'>notre entité polonaise</a> participe au projet</p></div>
        </div>
        ]]></description>
			<pubDate>Thu, 06 Jul 2006 14:48:33 +0100</pubDate>
			
				<category>standards</category>
			
				<category>d&#233;veloppement</category>
			
				<category>Clever Age</category>
			
				<category>Microsoft</category>
			
				<category>licence</category>
			
				<category>logiciel libre</category>
			
				<category>informatique</category>
			
			<guid isPermaLink="true">blog/blog/open-xml-translator-clever-age-realise-pour-microsoft-corp.-un-plugin-permettant-a-word-2007-d-utiliser-le-format-opendocument-odf-d-openoffice.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/open-xml-translator-clever-age-realise-pour-microsoft-corp.-un-plugin-permettant-a-word-2007-d-utiliser-le-format-opendocument-odf-d-openoffice.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/open-xml-translator-clever-age-ra-c-alise-pour-microsoft-corp.-un-plugin-permettant-a-word-2007-d-utiliser-le-format-opendocument-odf-d-openoffice-582.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>CSS : on reprend tout &#224; z&#233;ro !</title>
			<link>http://www.gasteroprod.com/blog/blog/css-on-reprend-tout-a-zero.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p><a href='http://pompage.net/' class='spip_out'>Pompage</a> vient de publier les dernières traductions des excellents tutoriaux &#171;&nbsp;<i><a href='http://www.wpdfd.com/editorial/basics/index.html' class='spip_out'>CSS from the Ground Up</a></i>&nbsp;&#187; de <a href='http://www.wpdfd.com/' class='spip_out'>Joe Gillespie</a>, ce qui clôt la série. Un must à lire et relire absolument&nbsp;!</p></div>
        	<div><p>Voici le programme, avec malheureusement un peu de flottement dans les titres&nbsp;[<a href="http://www.gasteroprod.com/#nb4-1" name="nh4-1" id="nh4-1" class="spip_note" rel="footnote" title='[1] Et attention &#224; l&#39;URL du 6&#232;me &#233;pisode, qui contient un &#171; _ &#187; au lieu d&#39;un &#171; (...)' >1</a>]&nbsp;:</p>

<ol class="spip"><li> <a href='http://pompage.net/pompe/cssdezero-1/' class='spip_out'>Une page de base</a></li><li> <a href='http://pompage.net/pompe/cssdezero-2/' class='spip_out'>Une Feuille de Style</a></li><li> <a href='http://pompage.net/pompe/cssdezero-3/' class='spip_out'>Appliquer du style au texte</a></li><li> <a href='http://pompage.net/pompe/cssdezero-4/' class='spip_out'>Plus de mise en forme pour le texte</a></li><li> <a href='http://pompage.net/pompe/cssdezero-5/' class='spip_out'>Des listes à gogo</a></li><li> <a href='http://pompage.net/pompe/cssdezero_6/' class='spip_out'>Etablir des liens</a></li><li> <a href='http://pompage.net/pompe/cssdezero-7/' class='spip_out'>Les boîtes CSS</a></li><li> <a href='http://pompage.net/pompe/cssdezero-8/' class='spip_out'>Des <i>div</i> sur mesure</a></li><li> <a href='http://pompage.net/pompe/cssdezero-9/' class='spip_out'>On met tout ensemble</a></li><li> <a href='http://pompage.net/pompe/cssdezero-10/' class='spip_out'>Doctypes et validation</a></li><li> <a href='http://pompage.net/pompe/cssdezero-11/' class='spip_out'>11ème épisode</a></li><li> <a href='http://pompage.net/pompe/cssdezero-12/' class='spip_out'>12ème épisode</a></li><li> <a href='http://pompage.net/pompe/cssdezero-13/' class='spip_out'>13ème épisode</a></li><li> <a href='http://pompage.net/pompe/cssdezero-14/' class='spip_out'>14ème épisode</a></li><li> <a href='http://pompage.net/pompe/cssdezero-15/' class='spip_out'>L&#8217;avenir</a></li></ol></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh4-1" name="nb4-1" class="spip_note" title="Notes 4-1" rev="footnote">1</a>] Et attention à l&#8217;URL du 6ème épisode, qui contient un &#171;&nbsp;_&nbsp;&#187; au lieu d&#8217;un &#171;&nbsp;-&nbsp;&#187;</p></div>
        </div>
        ]]></description>
			<pubDate>Mon, 16 Jan 2006 09:59:10 +0100</pubDate>
			
				<category>standards</category>
			
				<category>d&#233;veloppement</category>
			
			<guid isPermaLink="true">blog/blog/css-on-reprend-tout-a-zero.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/css-on-reprend-tout-a-zero.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/css-on-reprend-tout-a-za-c-ro-549.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Blogmarks encore mieux int&#233;gr&#233; &#224; Google avec BlogmarksInGoogle 0.3</title>
			<link>http://www.gasteroprod.com/blog/blog/blogmarks-encore-mieux-integre-a-google-avec-blogmarksingoogle-0.3.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>Suite à la sortie de BlogmarksInGoogle 0.2 <a href='http://www.gasteroprod.com/blog/blog/blogmarks-integre-a-google.html' class='spip_in'>il y a deux jours</a>, <a href='http://www.prendreuncafe.com/blog/' class='spip_out'>NiKo</a> avait suggéré <a href='http://www.gasteroprod.com/blogmarks-integre-a-google.html#commentaire1095' class='spip_out'>d&#8217;une part</a> que j&#8217;améliore le design, et <a href='http://www.gasteroprod.com/blogmarks-integre-a-google.html#commentaire1097' class='spip_out'>d&#8217;autre part</a> que j&#8217;utilise le flux Atom plutôt que le flux RSS. Voilà qui est fait, avec d&#8217;autres améliorations au passage, et le résultat est clairement encore mieux&nbsp;!</p></div>
        	<div><p>Voilà donc ce que ça donne pour le design&nbsp;:</p>

<dl class='spip_document_331 spip_documents spip_documents_center' >
<dt><a href="http://www.gasteroprod.com/IMG/png/BlogmarksInGoogle-screenshot.png" title='PNG - 150.4 ko' type="image/png"><img src='http://www.gasteroprod.com/local/cache-vignettes/L400xH289/BlogmarksInGoogle-screenshot-86ff3.png' width='400' height='289' alt='PNG - 150.4 ko' /></a></dt>
<dt class='spip_doc_titre' style='width:350px;'><strong>BlogmarksInGoogle 0.3 en action</strong></dt>
</dl>
<p>Pour ce qui est des évolutions, jugez vous-même&nbsp;:</p>

<ul class="spip"><li> Utilisation du flux Atom au lieu du flux RSS, ce qui permet notamment de récupérer la vignette sans tout l&#8217;habillage HTML</li><li> Prise en compte de l&#8217;ordre de popularité plutôt que l&#8217;ordre chronologique</li><li> Suppression des nombreux styles CSS <i>inline</i> au profit d&#8217;une section globale de styles</li><li> Alternance de couleurs entre les résultats pour améliorer la lisibilité</li></ul>
<p>Il reste juste un bug un peu pénible à corriger&nbsp;: si vous utilisez l&#8217;extension BetterSearch pour Firefox, vous risquez d&#8217;avoir les résultats Google relégués après ceux de Blogmarks, l&#8217;extension semblant ajouter un <code class='spip_code' dir='ltr'>clear: right;</code> sauvage...</p>

<p><strong>MAJ&nbsp;:</strong> Effectivement, il manquait un <a href='http://userscripts.org/scripts/show/2243' class='spip_out'>lien vers le script</a>, merci NiCoS&nbsp;!</p></div>
        	
        	
        </div>
        ]]></description>
			<pubDate>Tue, 27 Dec 2005 20:42:58 +0100</pubDate>
			
				<category>d&#233;veloppement</category>
			
				<category>Mozilla</category>
			
				<category>bookmarks</category>
			
				<category>Google</category>
			
				<category>Firefox</category>
			
				<category>Blogmarks</category>
			
			<guid isPermaLink="true">blog/blog/blogmarks-encore-mieux-integre-a-google-avec-blogmarksingoogle-0.3.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/blogmarks-encore-mieux-integre-a-google-avec-blogmarksingoogle-0.3.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/blogmarks-encore-mieux-inta-c-gra-c-a-google-avec-blogmarksingoogle-0.3-537.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Blogmarks int&#233;gr&#233; &#224; Google !</title>
			<link>http://www.gasteroprod.com/blog/blog/blogmarks-integre-a-google.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>Non, il ne s&#8217;agit pas d&#8217;une nouvelle croustillante sur un hypothétique rachat de <a href='http://blogmarks.net/' class='spip_out'>Blogmarks</a> par <a href='http://www.google.com/' class='spip_out'>Google</a>&nbsp;[<a href="http://www.gasteroprod.com/#nb5-1" name="nh5-1" id="nh5-1" class="spip_note" rel="footnote" title='[1] Alors que l&#39;on vient d&#39;apprendre que Opera s&#39;est finalement auto rachet&#233; (...)' >1</a>], mais d&#8217;une véritable information sérieuse, qui pourrait bien changer votre façon de faire des recherches sur le Web.</p></div>
        	<div><p>Fidèle utilisateur de Google depuis longtemps pour toute recherche sur le Web, j&#8217;avais de plus en plus tendance ces derniers temps à tenter aussi ma chance sur Blogmarks, espérant ainsi ne trouver que des liens vraiment intéressants.</p>

<p>Ayant découvert le script <a href='http://greasemonkey.mozdev.org/' class='spip_out'>Greasemonkey</a> <a href='http://userscripts.org/scripts/show/786' class='spip_out'>GooFD</a> &mdash; développé par <a href='http://nybblelabs.org.uk/' class='spip_out'>Ben Sherratt</a> &mdash; qui permet de retrouver les derniers bookmarks <a href='http://del.icio.us/' class='spip_out'>del.icio.us</a> dans Google et inversement, je me suis lancé dans la création d&#8217;un équivalent dédié à Blogmarks.</p>

<p>Voilà donc mon script <a href='http://userscripts.org/scripts/show/2243' class='spip_out'>BlogmarksInGoogle</a>&nbsp;!</p>

<p>Et voici un apperçu de ce que cela donne pour une recherche sur <a href='http://www.google.fr/search?q=Clever+Age&amp;start=0&amp;ie=utf-8&amp;oe=utf-8&amp;client=firefox-a&amp;rls=org.mozilla:fr:official' class='spip_out'>Clever Age</a>&nbsp;:</p>

<dl class='spip_document_330 spip_documents spip_documents_center' >
<dt><a href="http://www.gasteroprod.com/IMG/png/BlogmarksInGoogle.png" title='PNG - 229.8 ko' type="image/png"><img src='http://www.gasteroprod.com/local/cache-vignettes/L214xH400/BlogmarksInGoogle-01bea.png' width='214' height='400' alt='PNG - 229.8 ko' /></a></dt>
</dl>
<p>Ce script a été testé avec Mozilla Firefox 1.5.</p>

<p><strong>MAJ&nbsp;:</strong> <a href='http://www.gasteroprod.com/blog/blog/blogmarks-encore-mieux-integre-a-google-avec-blogmarksingoogle-0.3.html' class='spip_in'>Blogmarks encore mieux intégré à Google avec BlogmarksInGoogle 0.3</a></p></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh5-1" name="nb5-1" class="spip_note" title="Notes 5-1" rev="footnote">1</a>] Alors que l&#8217;on vient d&#8217;apprendre que <a href='http://blakeross.com/2005/12/23/opera-buys-opera/' class='spip_out'>Opera s&#8217;est finalement auto racheté</a>&nbsp;!</p></div>
        </div>
        ]]></description>
			<pubDate>Sun, 25 Dec 2005 21:13:00 +0100</pubDate>
			
				<category>d&#233;veloppement</category>
			
				<category>Mozilla</category>
			
				<category>bookmarks</category>
			
				<category>Google</category>
			
				<category>Firefox</category>
			
				<category>Blogmarks</category>
			
				<category>Greasemonkey</category>
			
			<guid isPermaLink="true">blog/blog/blogmarks-integre-a-google.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/blogmarks-integre-a-google.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/blogmarks-inta-c-gra-c-a-google-536.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Quand le confort d&#39;un internaute met en p&#233;ril celui des autres</title>
			<link>http://www.gasteroprod.com/blog/blog/quand-le-confort-d-un-internaute-met-en-peril-celui-des-autres.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>Le &#171;&nbsp;<a href='http://www.mozilla.org/projects/netlib/Link_Prefetching_FAQ.html' class='spip_out'>pré téléchargement</a>&nbsp;&#187;, une nouvelle fonctionnalité de <a href='http://www.mozilla.com/' class='spip_out'>Firefox 1.5</a>, est exploité à outrance par une extension nommée <a href='http://fasterfox.mozdev.org/' class='spip_out'>FasterFox</a>. Comme son nom l&#8217;indique, elle permet théoriquement de naviguer plus rapidement, puisque toutes les pages auxquelles on peut accéder depuis la courante sont déjà chargées dans Firefox. Sauf que si tout le monde fait ça en accédant à une page où il y a 79 liens - comme la page d&#8217;accueil de Gastero Prod&nbsp;[<a href="http://www.gasteroprod.com/#nb6-1" name="nh6-1" id="nh6-1" class="spip_note" rel="footnote" title='[1] Merci &#224; la Web Developer Toolbar pour le d&#233;compte' >1</a>] - le nombre de requêtes sur le serveur est multiplié par 80&nbsp;!!!</p></div>
        	<div><p>J&#8217;ai eu l&#8217;info par <a href='http://ljouanneau.com/blog/2005/12/07/502-fasterfox-abuse-sur-le-prefetching' class='spip_out'>Laurent Jouanneau</a>, et je m&#8217;empresse de la relayer, parce que je trouve cela vraiment dangereux pour la santé des plateformes d&#8217;hébergement.</p>

<p>Je me suis aussi empressé d&#8217;adopter sur ce site la règle <a href='http://www.webmaster-hub.com/publication/article5.html' class='spip_out'>mod_rewrite</a> proposée par Laurent, en espérant que je ne me ferais pas jeter par mon hébergeur&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>RewriteEngine On<br />
RewriteCond %{X-moz} ^prefetch<br />
RewriteRule ^.* - [F]</code></div>
<p>Au passage, je n&#8217;ose imaginer la perturbation que cela va apporter à tous les outils de statistique de consultation des sites qui ne prendront pas en considération cet en-tête HTTP <code class='spip_code' dir='ltr'>X-moz: prefetch</code> ...</p>

<p><strong>Mise à jour du 9/12&nbsp;:</strong> J&#8217;ai laissé <a href='https://addons.mozilla.org/extensions/moreinfo.php?id=1269&amp;vid=7401&amp;page=comments&amp;action=successful#87434' class='spip_out'>un commentaire</a> sur la page de l&#8217;extension, et je me rends compte que je ne suis <a href='https://addons.mozilla.org/extensions/moreinfo.php?id=1269&amp;vid=7401&amp;page=comments&amp;action=successful#87291' class='spip_out'>pas</a> le <a href='https://addons.mozilla.org/extensions/moreinfo.php?id=1269&amp;vid=7401&amp;page=comments&amp;action=successful#87432' class='spip_out'>seul</a>. N&#8217;hésitez pas à faire de même...</p></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh6-1" name="nb6-1" class="spip_note" title="Notes 6-1" rev="footnote">1</a>] Merci à la Web Developer Toolbar pour le décompte</p></div>
        </div>
        ]]></description>
			<pubDate>Tue, 06 Dec 2005 21:59:00 +0100</pubDate>
			
				<category>oups</category>
			
				<category>Gastero Prod</category>
			
				<category>d&#233;veloppement</category>
			
				<category>Mozilla</category>
			
				<category>Firefox</category>
			
				<category>extension</category>
			
				<category>RewriteRule</category>
			
			<guid isPermaLink="true">blog/blog/quand-le-confort-d-un-internaute-met-en-peril-celui-des-autres.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/quand-le-confort-d-un-internaute-met-en-peril-celui-des-autres.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/quand-le-confort-d-un-internaute-met-en-pa-c-ril-celui-des-autres-526.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>La fin du HTML pour les applications accessibles via le Web n&#39;est pas pour tout de suite</title>
			<link>http://www.gasteroprod.com/blog/la-fin-du-html-pour-les-applications-accessibles-via-le-web-n-est-pas-pour-tout-de-suite.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p><a href='http://ljouanneau.com/' class='spip_out'>Laurent Jouanneau</a> part de <a href='http://ljouanneau.com/blog/2005/09/15/469-de-la-bonne-utilisation-des-technologies' class='spip_out'>sa réaction</a> face à l&#8217;avènement de <a href='http://standblog.org/blog/2005/09/15/93114367-a-propos-de-svg-et-canvas' class='spip_out'>SVG et Canvas</a>, annoncés par <a href='http://standblog.org/' class='spip_out'>Tristan Nitot</a>, pour dénoncer l&#8217;usage abusif qui est fait de HTML pour développer des applications alors qu&#8217;il est normalement dédié aux documents, d&#8217;autant plus que de nouvelles technologies plus orientées applications sont déjà disponibles, comme <a href='http://www.clever-age.com/veille/clever-link/xul-partie-visible-du-framework-mozilla-xpfe-323.html' class='spip_out'>XUL / XPFE</a>.</p></div>
        	<div><p>Je partage tout à fait les soucis de Laurent de différencier les documents et les applications, et je vois bien l&#8217;intérêt de la plateforme <a href='http://www.mozilla.org/xpfe/' class='spip_out'>XUL / XPFE</a> de Mozilla ou de ses cousins <a href='http://www.xaml.net/' class='spip_out'>XAML / Avalon</a>&nbsp;[<a href="http://www.gasteroprod.com/#nb7-1" name="nh7-1" id="nh7-1" class="spip_note" rel="footnote" title='[1] Vous noterez au passage que MOBIFORM Software Ltd., qui se sert de ce (...)' >1</a>] chez Microsoft, <a href='http://www.macromedia.com/fr/software/flex/productinfo/brz_overview/' class='spip_out'>MXML / Flex</a> chez Macromedia&nbsp;[<a href="http://www.gasteroprod.com/#nb7-2" name="nh7-2" id="nh7-2" class="spip_note" rel="footnote" title='[2] Rachet&#233; cette ann&#233;e par Adobe, donc l&#39;avenir dira si les produits (...)' >2</a>] ou <a href='http://openlaszlo.org/' class='spip_out'>OpenLaszlo</a>.</p>

<p>Mais comme l&#8217;indique bien cette liste &mdash; pourtant non exhaustive &mdash; de solutions disponibles, le principal problème est une fois de plus de trouver laquelle de ces technologies répond le mieux et le plus durablement à un besoin et des contraintes donnés.</p>

<p>Si l&#8217;on parle d&#8217;<a href='http://www.clever-age.com/veille/clever-link/usabilite-accessibilite-realite-274.html' class='spip_out'>accessibilité</a>,  la possibilité d&#8217;accéder à une application via le Web depuis n&#8217;importe quel navigateur est un critère important, et là XUL / XPFE&nbsp;[<a href="http://www.gasteroprod.com/#nb7-3" name="nh7-3" id="nh7-3" class="spip_note" rel="footnote" title='[3] Limit&#233; pour l&#39;instant aux navigateurs utilisant Gecko, dont bien s&#251;r (...)' >3</a>] et XAML / Avalon&nbsp;[<a href="http://www.gasteroprod.com/#nb7-4" name="nh7-4" id="nh7-4" class="spip_note" rel="footnote" title='[4] Peut-&#234;tre support&#233; dans le futur IE 7, mais en tout cas dans Windows (...)' >4</a>] sont écartés d&#8217;office&nbsp;[<a href="http://www.gasteroprod.com/#nb7-5" name="nh7-5" id="nh7-5" class="spip_note" rel="footnote" title='[5] Pour l&#39;instant en tout cas' >5</a>], alors que MXML / Flex a l&#8217;avantage de s&#8217;appuyer sur la très largement répendue plateforme cliente Flash. Mais c&#8217;est une solution propriétaire... Reste alors son challenger logiciel libre OpenLaszlo, qui semble bien prometteur.</p>

<p>Dans un même temps, l&#8217;usage des technologies standards du Web évolue très rapidement&nbsp;[<a href="http://www.gasteroprod.com/#nb7-6" name="nh7-6" id="nh7-6" class="spip_note" rel="footnote" title='[6] Sur la base de technologies d&#233;j&#224; connues depuis quelque temps mais (...)' >6</a>], et la déferlante <a href='http://blogmarks.net/tag/ajax' class='spip_out'>AJAX</a> qui redonne des couleurs vives au HTML vieillissant n&#8217;est pas près de s&#8217;essoufler. On en reparle prochainement...</p></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh7-1" name="nb7-1" class="spip_note" title="Notes 7-1" rev="footnote">1</a>] Vous noterez au passage que MOBIFORM Software Ltd., qui se sert de ce site au nom de domaine opportuniste pour promouvoir son logiciel &#171;&nbsp;Aurora&nbsp;&#187;, offre une comparaison de XAML avec d&#8217;autres technologies, mais oublie incidieusement d&#8217;y placer XUL...</p>

<p>[<a href="http://www.gasteroprod.com/#nh7-2" name="nb7-2" class="spip_note" title="Notes 7-2" rev="footnote">2</a>] Racheté cette année par Adobe, donc l&#8217;avenir dira si les produits persistent en l&#8217;état</p>

<p>[<a href="http://www.gasteroprod.com/#nh7-3" name="nb7-3" class="spip_note" title="Notes 7-3" rev="footnote">3</a>] Limité pour l&#8217;instant aux navigateurs utilisant Gecko, dont bien sûr Firefox</p>

<p>[<a href="http://www.gasteroprod.com/#nh7-4" name="nb7-4" class="spip_note" title="Notes 7-4" rev="footnote">4</a>] Peut-être supporté dans le futur IE 7, mais en tout cas dans Windows Vista</p>

<p>[<a href="http://www.gasteroprod.com/#nh7-5" name="nb7-5" class="spip_note" title="Notes 7-5" rev="footnote">5</a>] Pour l&#8217;instant en tout cas</p>

<p>[<a href="http://www.gasteroprod.com/#nh7-6" name="nb7-6" class="spip_note" title="Notes 7-6" rev="footnote">6</a>] Sur la base de technologies déjà connues depuis quelque temps mais jusqu&#8217;alors relativement ignorées</p></div>
        </div>
        ]]></description>
			<pubDate>Fri, 16 Sep 2005 07:36:03 +0100</pubDate>
			
				<category>standards</category>
			
				<category>accessibilit&#233;</category>
			
				<category>client riche</category>
			
				<category>d&#233;veloppement</category>
			
				<category>Mozilla</category>
			
				<category>Microsoft</category>
			
				<category>Ajax</category>
			
				<category>XUL</category>
			
			<guid isPermaLink="true">blog/la-fin-du-html-pour-les-applications-accessibles-via-le-web-n-est-pas-pour-tout-de-suite.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/la-fin-du-html-pour-les-applications-accessibles-via-le-web-n-est-pas-pour-tout-de-suite.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/la-fin-du-html-pour-les-applications-accessibles-via-le-web-n-est-pas-pour-tout-de-suite-517.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Gastero Prod maintenant sur SPIP 1.8.2 pr2... en attendant plus</title>
			<link>http://www.gasteroprod.com/blog/blog/gastero-prod-maintenant-sur-spip-1.8.2-pr2-en-attendant-plus.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>Gastero Prod tournait depuis déjà quelque temps sur la robuste version 1.7.2 de SPIP, mais vient de faire un grand pas vers la 1.8.2 pr2 du CVS. Bilan et perspectives...</p></div>
        	<div><p>Le bilan va être très court, puisque la migration s&#8217;est effectuée en 10 minutes montre en main&nbsp;[<a href="http://www.gasteroprod.com/#nb8-1" name="nh8-1" id="nh8-1" class="spip_note" rel="footnote" title='[1] En trois &#233;tapes simples : t&#233;l&#233;chargement depuis le CVS upload chez (...)' >1</a>], sans aucun effet de bord détecté pour l&#8217;instant.</p>

<p>SPIP continue donc à fournir une belle compatibilité ascendante, même sur les versions issues du CVS. Bravo&nbsp;!</p>

<p>J&#8217;avais dans l&#8217;idée de participer au concours <a href='http://www.summer-refresh-05.com/' class='spip_out'>Summer Refresh 2005</a>, mais le temps va finalement me manquer, donc je vais plutôt me contenter pour l&#8217;instant d&#8217;une simple nouvelle couche de vernis.</p>

<p>Des évolutions s&#8217;ajouteront petit à petit à partir de maintenant, j&#8217;ai déjà pas mal d&#8217;idées.</p>

<p>J&#8217;espère notamment pouvoir expérimenter rapidement certaines extensions de la <a href='http://zone.spip.org/' class='spip_out'>SPIP Zone</a>, dont les <a href='http://zone.spip.org/trac/spip-zone/browser/_contribs_/_trackbacks_/' class='spip_out'>trackbacks</a> , qui sont vraiment l&#8217;un des plus gros manques quand on veut construire un blog avec SPIP, et peut-être la dernière version de la gestion de newsletters de BoOz&nbsp;[<a href="http://www.gasteroprod.com/#nb8-2" name="nh8-2" id="nh8-2" class="spip_note" rel="footnote" title='[2] Qui, comme Perline l&#39;avait fait pour le sien il y a quelques mois, m&#39;a (...)' >2</a>], maintenant intitulée <a href='http://zone.spip.org/trac/spip-zone/browser/_contribs_/_email_/spip-listes/' class='spip_out'>spip-listes</a>.</p>

<p>J&#8217;espère aussi pouvoir remplacer un jour ma <a href='http://www.spip-contrib.net/Realiser-un-agenda-avec-SPIP' class='spip_out'>vieille contrib</a> permettant de <a href='http://www.gasteroprod.com/blog/le-meme-agenda-que-gastero-prod-avec-spip.html' class='spip_in'>réaliser l&#8217;agenda de ce site avec SPIP</a> avec le <a href='http://www.spip-contrib.net/spikini/FiltreAgendaMemo' class='spip_out'>nouveau système d&#8217;agenda public</a> concocté par Emmanuel&nbsp;[<a href="http://www.gasteroprod.com/#nb8-3" name="nh8-3" id="nh8-3" class="spip_note" rel="footnote" title='[3] A.K.A. D&#233;esse A.' >3</a>], le quatrième mousquetaire de SPIP. Reste à comprendre comment ça marche... A moins que je ne supprime tout simplement cet agenda, qui est si difficile à remplir pour le peu d&#8217;intérêt qu&#8217;il suscite.</p>

<p>Il faudra au passage que je purifie un peu le code pour rendre le site plus accessible et encore plus respectueux des standards, j&#8217;ai encore beaucoup appris ces derniers temps sur ces deux sujets.</p>

<p>Enfin, je compte intégrer au mieux mes meilleures photos, noyées pour l&#8217;instant parmi toutes celles publiées sur <a href='http://www.flickr.com/photos/nicolas-hoizey/' class='spip_out'>Flickr</a>, sans réel lien avec ce site, si ce n&#8217;est le petit flash en page d&#8217;accueil. Et pourquoi pas, puisqu&#8217;on parle de Flickr, aussi intégrer plus étroitement <a href='http://flickrate.gasteroprod.com/' class='spip_out'>flickRate</a>, qui commence à prendre de l&#8217;ampleur.</p>

<p>Quel beau programme, n&#8217;est-ce pas&nbsp;!</p></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh8-1" name="nb8-1" class="spip_note" title="Notes 8-1" rev="footnote">1</a>] En trois étapes simples&nbsp;:</p>

<ul class="spip"><li> téléchargement depuis le CVS</li><li> upload chez <a href='http://ouvaton.coop/' class='spip_out'>Ouvaton</a> par FTP</li><li> procédure de mise à jour de SPIP</li></ul>
<p>[<a href="http://www.gasteroprod.com/#nh8-2" name="nb8-2" class="spip_note" title="Notes 8-2" rev="footnote">2</a>] Qui, comme <a href='http://perline.org/' class='spip_out'>Perline</a> l&#8217;avait fait pour <a href='http://microapp.com/fiche_produit.cfm?ref_produit=4707' class='spip_out'>le sien</a> il y a quelques mois, m&#8217;a sympathiquement fait envoyer par son éditeur <a href='http://www.eyrolles.com/' class='spip_out'>Eyrolles</a> un exemplaire du livre &#171;&nbsp;<a href='http://www.eyrolles.com/Informatique/Livre/9782212114287/livre-spip-1-8.php' class='spip_out'>SPIP 1.8</a>&nbsp;&#187;, qu&#8217;il a co écrit avec Yann Forgerit dans la collection &#171;&nbsp;<a href='http://www.eyrolles.com/Informatique/Collection/1291/les-cahiers-du-programmeur.php' class='spip_out'>les cahiers du programmeur</a>&nbsp;&#187;</p>

<p>[<a href="http://www.gasteroprod.com/#nh8-3" name="nb8-3" class="spip_note" title="Notes 8-3" rev="footnote">3</a>] A.K.A. Déesse A.</p></div>
        </div>
        ]]></description>
			<pubDate>Tue, 16 Aug 2005 22:17:12 +0100</pubDate>
			
				<category>photo</category>
			
				<category>SPIP</category>
			
				<category>Gastero Prod</category>
			
				<category>standards</category>
			
				<category>d&#233;veloppement</category>
			
			<guid isPermaLink="true">blog/blog/gastero-prod-maintenant-sur-spip-1.8.2-pr2-en-attendant-plus.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/gastero-prod-maintenant-sur-spip-1.8.2-pr2-en-attendant-plus.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/gastero-prod-maintenant-sur-spip-1.8.2-pr2-en-attendant-plus-488.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Mise &#224; jour du &#171; Magic Quadrant &#187; du Gartner sur les Web Services</title>
			<link>http://www.gasteroprod.com/blog/blog/mise-a-jour-du-magic-quadrant-du-gartner-sur-les-web-services.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p><i>Article initialement publié dans <a href='http://www.clever-age.com/veille/weblog/mise-jour-du-magic-quadrant-du-gartner-sur-les-web-services_402.html' class='spip_out'>le weblog de Clever Age</a>.</i></p>

<p>Dans sa mise à jour&nbsp;[<a href="http://www.gasteroprod.com/#nb9-1" name="nh9-1" id="nh9-1" class="spip_note" rel="footnote" title='[1] Qui est plut&#244;t une remise &#224; neuf, puisque les crit&#232;res ont &#233;volu&#233; depuis (...)' >1</a>] de juillet du <a href='http://mediaproducts.gartner.com/gc/webletter/microsoft4_enterprise/2005/article15/article15.html' class='spip_out'>&#171;&nbsp;cadrant magique&nbsp;&#187; des éditeurs de solutions Web Services</a>, le Gartner place sans surprise <a href='http://www.microsoft.com/' class='spip_out'>Microsoft</a> et <a href='http://www.ibm.com/' class='spip_out'>IBM</a> bien en tête.</p></div>
        	<div><dl class='spip_document_315 spip_documents spip_documents_center' >
<dt><img src='http://www.gasteroprod.com/IMG/gif/gartner_mq_ws.gif' width='477' height='426' alt='GIF - 5.2 ko' /></dt>
</dl>
<p>Ces deux éditeurs étant ceux qui participent le plus à l&#8217;élaboration des standards des Web Services, ils sont naturellement bien placés comme ayant une vision globale du sujet&nbsp;[<a href="http://www.gasteroprod.com/#nb9-2" name="nh9-2" id="nh9-2" class="spip_note" rel="footnote" title='[2] Axe &#171; Completness of vision &#187; du quadrant' >2</a>]. Et comme ce sont de grosses machines avec beaucoup de ressources humaines et des budgets conséquents en R&amp;D, ils ont les compétences et les moyens qui vont avec&nbsp;[<a href="http://www.gasteroprod.com/#nb9-3" name="nh9-3" id="nh9-3" class="spip_note" rel="footnote" title='[3] Axe &#171; Ability to execute &#187;' >3</a>].</p>

<p><a href='http://www.oracle.com/' class='spip_out'>Oracle</a>, après le <a href='http://www.01net.com/article/251341.html' class='spip_out'>rachat opportuniste de Collaxa en 2004</a>, se place en bon chalenger de ces deux leaders pour l&#8217;instant inattaquables.</p>

<p><a href='http://www.sun.com/' class='spip_out'>Sun</a>, qui avait tardé à bien vouloir rejoindre l&#8217;organisation de standardisation de l&#8217;inter opérabilité des Web Services&nbsp;[<a href="http://www.gasteroprod.com/#nb9-4" name="nh9-4" id="nh9-4" class="spip_note" rel="footnote" title='[4] WS-I : http://www.ws-i.org/' >4</a>], apparaît bien en retard sur ses concurrents habituels, même si le <a href='http://zdnet.fr/actualites/informatique/0,39040745,39237193,00.htm' class='spip_out'>rachat récent du spécialiste SeeBeyond</a>&nbsp;[<a href="http://www.gasteroprod.com/#nb9-5" name="nh9-5" id="nh9-5" class="spip_note" rel="footnote" title='[5] Rachat trop r&#233;cent pour le Gartner qui distingue encore les deux (...)' >5</a>] devrait lui permettre de gagner quelques places.</p>

<p>Quel que soit l&#8217;avenir de chacun de ces éditeurs, et malgré les nombreux travaux menés sur ces sujets, il reste encore bien du chemin à parcourir avant de stabiliser les couches sécurité et qualité de service, qui restent les principaux freins à l&#8217;adoption des Web Services dans de vrais projets d&#8217;envergure.</p></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh9-1" name="nb9-1" class="spip_note" title="Notes 9-1" rev="footnote">1</a>] Qui est plutôt une remise à neuf, puisque les critères ont évolué depuis la version précédente</p><p>[<a href="http://www.gasteroprod.com/#nh9-2" name="nb9-2" class="spip_note" title="Notes 9-2" rev="footnote">2</a>] Axe &#171;&nbsp;Completness of vision&nbsp;&#187; du quadrant</p>

<p>[<a href="http://www.gasteroprod.com/#nh9-3" name="nb9-3" class="spip_note" title="Notes 9-3" rev="footnote">3</a>] Axe &#171;&nbsp;Ability to execute&nbsp;&#187;</p>

<p>[<a href="http://www.gasteroprod.com/#nh9-4" name="nb9-4" class="spip_note" title="Notes 9-4" rev="footnote">4</a>] WS-I&nbsp;: <a href='http://www.ws-i.org/' class='spip_out'>http://www.ws-i.org/</a></p>

<p>[<a href="http://www.gasteroprod.com/#nh9-5" name="nb9-5" class="spip_note" title="Notes 9-5" rev="footnote">5</a>] Rachat  trop récent pour le Gartner qui distingue encore les deux éditeurs dans son cadrant</p></div>
        </div>
        ]]></description>
			<pubDate>Fri, 29 Jul 2005 15:32:28 +0100</pubDate>
			
				<category>d&#233;veloppement</category>
			
				<category>Clever Age</category>
			
				<category>Microsoft</category>
			
				<category>IBM</category>
			
			<guid isPermaLink="true">blog/blog/mise-a-jour-du-magic-quadrant-du-gartner-sur-les-web-services.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/mise-a-jour-du-magic-quadrant-du-gartner-sur-les-web-services.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/mise-a-jour-du-magic-quadrant-du-gartner-sur-les-web-services-486.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>flickRate, pour am&#233;liorer les favoris de Flickr</title>
			<link>http://www.gasteroprod.com/blog/flickrate-pour-ameliorer-les-favoris-de-flickr.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>Voilà trop longtemps que je n&#8217;ai rien écrit ici. Ce n&#8217;est pas la seule raison, mais <a href='http://flickrate.gasteroprod.com/' class='spip_out'>flickRate</a> occupe pas mal mon esprit ces derniers temps, il est temps d&#8217;en parler.</p></div>
        	<div><p>flickRate est né d&#8217;une frustration que j&#8217;avais vis à vis des favoris de <a href='http://flickr.com/' class='spip_out'>Flickr</a>.</p>

<p>Vous pouvez voir par exemple dans <a href='http://www.flickr.com/photos/nicolas-hoizey/favorites/' class='spip_out'>mes favoris</a> qu&#8217;il n&#8217;y a pas de ligne directrice, que certaines photos sélectionnées le sont pour leur esthétisme, et d&#8217;autres pour leur humour...</p>

<p>Afin de gérer mieux mes propres favoris, et tant qu&#8217;à faire offrir cette même possibilité à d&#8217;autres, j&#8217;ai créé l&#8217;application flickRate, qui permet de <strong>donner des notes à des photos</strong> postées publiquement sur Flickr. Les trois critères proposés pour l&#8217;instant sont l&#8217;<strong>esthétisme</strong>, l&#8217;<strong>originalité</strong>, et le &#171;&nbsp;<strong>fun</strong>&nbsp;&#187;. Cela pourrait évoluer, ce n&#8217;est pas réellement satisfaisant. Il sera aussi sans doute possible un jour de ne voter que pour un ou deux de ces critères.</p>

<p>A ce jour, flickRate a déjà rassemblé 206 utilisateurs, qui ont voté pour <a href='http://flickrate.gasteroprod.com/browse.php?nb=32&amp;who=all&amp;when=all&amp;criteria=aesthetics' class='spip_out'>1090 photos</a>&nbsp;!</p>

<h3 class="spip">S&#8217;inscrire</h3>
<p>La première chose à faire, si ce n&#8217;est déjà fait, est de <a href='http://flickrate.gasteroprod.com/register.php' class='spip_out'>s&#8217;inscrire</a>. Seule une adresse e-mail est nécessaire, afin de valider la création d&#8217;un compte par envoi d&#8217;un mail de confirmation.</p>

<p>Dans un futur relativement proche, dès que la <a href='http://flickr.com/services/api/auth.spec.html' class='spip_out'>nouvelle API d&#8217;authentification de Flickr</a> sera disponible, un compte Flickr devrait suffire, ce qui permettra aussi éventuellement de rendre le système plus équitable en n&#8217;autorisant pas les inscrits à voter pour leurs propres photos.</p>

<h3 class="spip">Comment voter&nbsp;?</h3>
<p>Il existe deux moyens de voter pour des photos avec flickRate, tous deux présents sur la page de flickRate réservée aux <a href='http://flickrate.gasteroprod.com/tools.php' class='spip_out'>outils</a>&nbsp;:</p>

<p><strong>Un bookmarklet</strong></p>

<p>Le premier moyen est assez traditionnel, il s&#8217;agit d&#8217;un bookmarklet qui ouvre une popup de vote.</p>

<dl class='spip_document_310 spip_documents spip_documents_center' >
<dt><img src='http://www.gasteroprod.com/IMG/jpg/flickrate_bookmarklet.jpg' width='306' height='454' alt='JPEG - 34.8 ko' /></dt>
<dt class='spip_doc_titre' style='width:306px;'><strong>Voter dans une popup</strong></dt>
<dd class='spip_doc_descriptif' style='width:306px;'>Popup ouverte par le bookmarklet flickRate depuis une page de photo
</dd>
</dl>
<p>Ce bookmarklet est normalement utilisable avec tous les navigateurs, mais n&#8217;hésitez pas à signaler si ce n&#8217;est pas le cas.</p>

<p><strong>Un script Greasemonkey</strong></p>

<p>Si ce nom <a href='http://greasemonkey.mozdev.org/' class='spip_out'>Greasemonkey</a> ne vous est pas familier, sachez qu&#8217;il s&#8217;agit d&#8217;une extension formidable pour Mozilla Firefox qui permet de créer des scripts modifiant l&#8217;interface des sites Web visités.</p>

<p>Il existe <a href='http://blogmarks.net/tag/greasemonkey' class='spip_out'>des tonnes</a> de <a href='http://dunck.us/collab/GreaseMonkeyUserScripts' class='spip_out'>scripts Greasemonkey</a> permettant d&#8217;améliorer ou modifier des sites existants, dont <a href='http://dunck.us/collab/GreaseMonkeyUserScripts#head-bf3e38f5cf2d4219b5d85be3de046038aa959e0d' class='spip_out'>Flickr</a>.</p>

<p>Pour faire simple, dans le cas de flickRate, cela permet d&#8217;afficher l&#8217;interface de vote de flickRate directement sous les photos dans les pages de Flickr&nbsp;!</p>

<dl class='spip_document_312 spip_documents spip_documents_center' >
<dt><img src='http://www.gasteroprod.com/IMG/jpg/flickrate_greasemonkey.jpg' width='500' height='360' alt='JPEG - 45.2 ko' /></dt>
<dt class='spip_doc_titre' style='width:350px;'><strong>flickRate intégré à Flickr</strong></dt>
<dd class='spip_doc_descriptif' style='width:350px;'>Grâce à Greasemonkey, l&#8217;interface de vote de flickRate est intégrée à Flickr&nbsp;!
</dd>
</dl>
<p>Ce script Greasemonkey a aussi été <a href='http://www.letitblog.com/greasemonkey-compiler/' class='spip_out'>compilé</a> sous forme d&#8217;une extension Firefox, si vous ne souhaitez pas installer l&#8217;extension Greasemonkey.</p>

<h3 class="spip">Naviguer dans flickRate</h3>
<p>La navigation dans flickRate permet de voir quelles sont les photos les mieux classées selon les trois critères, et même de restreindre la visualisation à une période calendaire donnée, voir à <a href='http://flickrate.gasteroprod.com/browse.php?nb=32&amp;who=you&amp;when=all&amp;criteria=aesthetics' class='spip_out'>ses propres votes</a> ou <a href='http://flickrate.gasteroprod.com/browse.php?nb=32&amp;who=others&amp;when=all&amp;criteria=aesthetics' class='spip_out'>uniquement ceux des autres</a>.</p>

<dl class='spip_document_311 spip_documents spip_documents_center' >
<dt><img src='http://www.gasteroprod.com/IMG/jpg/flickrate_browse.jpg' width='500' height='360' alt='JPEG - 55.3 ko' /></dt>
<dt class='spip_doc_titre' style='width:350px;'><strong>Navigation dans flickRate</strong></dt>
<dd class='spip_doc_descriptif' style='width:350px;'>Les options de filtre et tri sont nombreuses dans flickRate pour naviguer selon ses propres intérêts
</dd>
</dl>
<p>Afin de récolter les remarques des utilisateurs et discuter des évolutions de flickRate, j&#8217;ai créé un <a href='http://www.flickr.com/groups/flickrate/' class='spip_out'>groupe flickRate</a> sur Flickr.</p>

<h3 class="spip">Et ça donne quoi&nbsp;?</h3>
<p>Pour finir en beauté&nbsp;[<a href="http://www.gasteroprod.com/#nb10-1" name="nh10-1" id="nh10-1" class="spip_note" rel="footnote" title='[1] Oui, je sais, elle &#233;tait facile celle-l&#224;...' >1</a>], voici à ce jour les 20 photos les plus appréciées des utilisateurs de flickRate&nbsp;[<a href="http://www.gasteroprod.com/#nb10-2" name="nh10-2" id="nh10-2" class="spip_note" rel="footnote" title='[2] Au moins deux d&#39;entre eux ont vot&#233; pour ces photos' >2</a>] depuis son lancement&nbsp;:</p>

<p><a href="http://www.flickr.com/photos/84796723@N00/1558605/" title="longtail on the beach, by dogsbody"><img src="http://photos2.flickr.com/1558605_af64edfa42_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/47689490@N00/11757131/" title="Lucy In The Sky With Diamonds, by noqontrol"><img src="http://photos6.flickr.com/11757131_c7e7c32baf_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/64235932@N00/13512288/" title="Under Rain, by Foad 2Fun"><img src="http://photos10.flickr.com/13512288_f9a2dd2e78_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/38608514@N00/13466833/" title="L&apos;intÃ©rieur de la basilique de Lisieux, by Nicolas Hoizey"><img src="http://photos11.flickr.com/13466833_cf31714fa7_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/59171457@N00/13251523/" title="IMG_1973, by conceptDawg"><img src="http://photos11.flickr.com/13251523_75cfb52b06_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/43671131372@N01/4271300/" title="Wolf Moon, by notraces"><img src="http://photos4.flickr.com/4271300_9fc9235f4e_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/49503111054@N01/9887123/" title="sun, by lil aNNa"><img src="http://photos5.flickr.com/9887123_8005cb4929_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/11823401@N00/11668682/" title="Curve 70, by Crinity"><img src="http://photos10.flickr.com/11668682_f9af877357_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/15297893@N00/5762084/" title="Winter in spring #2, by solea"><img src="http://photos6.flickr.com/5762084_496b9624bf_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/80866212@N00/9185047/" title="China Image 0039, by Jackson Lee"><img src="http://photos4.flickr.com/9185047_be635d551a_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/66812927@N00/8109304/" title="Asaf-ud-Daula&apos;s Imambara, by madviks"><img src="http://photos6.flickr.com/8109304_d03036bac0_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/35277602@N00/1290277/" title="Chevrons, by BombDog"><img src="http://photos2.flickr.com/1290277_172122f428_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/15264742@N00/4594639/" title="Fusca, by Josa Jr"><img src="http://photos3.flickr.com/4594639_7d92a87b69_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/89826592@N00/14295396/" title="Let the light shine, by Mark, The"><img src="http://photos14.flickr.com/14295396_b1982fbf29_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/38608514@N00/3057330/" title="Le TrÃ©port, Normandie, France, by Nicolas Hoizey"><img src="http://photos1.flickr.com/3057330_e284624052_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/74813207@N00/20717912/" title="La Jolla Shores #06, by mutbka"><img src="http://photos16.flickr.com/20717912_0eda5882a1_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/43671131372@N01/19602128/" title="Moon on Ice, by notraces"><img src="http://photos14.flickr.com/19602128_ce8843acbd_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/43671131372@N01/20275216/" title="Look to the Sky, by notraces"><img src="http://photos17.flickr.com/20275216_e9a6dc096c_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/92362770@N00/20233031/" title="2002-202A, by aquanerds"><img src="http://photos17.flickr.com/20233031_41fa2f9a79_s.jpg" width="75" height="75" /></a>
<a href="http://www.flickr.com/photos/92362770@N00/20039694/" title="2000-032A, by aquanerds"><img src="http://photos15.flickr.com/20039694_81b5500cb5_s.jpg" width="75" height="75" /></a></p></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh10-1" name="nb10-1" class="spip_note" title="Notes 10-1" rev="footnote">1</a>] Oui, je sais, elle était facile celle-là...</p>

<p>[<a href="http://www.gasteroprod.com/#nh10-2" name="nb10-2" class="spip_note" title="Notes 10-2" rev="footnote">2</a>] Au moins deux d&#8217;entre eux ont voté pour ces photos</p></div>
        </div>
        ]]></description>
			<pubDate>Sun, 26 Jun 2005 17:07:11 +0100</pubDate>
			
				<category>photo</category>
			
				<category>Flickr</category>
			
				<category>d&#233;veloppement</category>
			
				<category>Greasemonkey</category>
			
			<guid isPermaLink="true">blog/flickrate-pour-ameliorer-les-favoris-de-flickr.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/flickrate-pour-ameliorer-les-favoris-de-flickr.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/flickrate-pour-ama-c-liorer-les-favoris-de-flickr-482.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Citation de Sterling Hughes</title>
			<link>http://www.gasteroprod.com/blog/blog/citation-de-sterling-hughes.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>I wouldn&#8217;t ride to work every day in a Formula 1 automobile. It has no air conditioning, poor safety features (important in Italy), and it looks down right uncomfortable. [...] Its about the tool that will get your job done, and make you the most comfortable for the least cost. This is where PHP shines.</p></div>
        	<div><p><a href='http://www.edwardbear.org/serendipity/archives/1178_NET_vs_PHP_again_and_again.html' class='spip_out'>source</a></p></div>
        	
        	
        </div>
        ]]></description>
			<pubDate>Thu, 23 Jun 2005 09:50:09 +0100</pubDate>
			
				<category>d&#233;veloppement</category>
			
				<category>PHP</category>
			
				<category>citation</category>
			
			<guid isPermaLink="true">blog/blog/citation-de-sterling-hughes.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>en</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/citation-de-sterling-hughes.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/citation-de-sterling-hughes-481.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Dark side of XUL</title>
			<link>http://www.gasteroprod.com/blog/blog/dark-side-of-xul.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>Non, ceci n&#8217;est pas le nom d&#8217;une secte ou d&#8217;un nouvel album hardcore trash metal, mais juste un titre accrocheur pour annoncer une nouvelle <a href='http://www.clever-age.com/veille/clever-link/15.html' class='spip_out'>Clever Link</a>&nbsp;[<a href="http://www.gasteroprod.com/#nb11-1" name="nh11-1" id="nh11-1" class="spip_note" rel="footnote" title='[1] Une chronique envoy&#233;e r&#233;guli&#232;rement par Clever Age &#224; tous les (...)' >1</a>], où <a href='http://www.clever-age.com/' class='spip_out'>Clever Age</a> vous parle de <a href='http://www.mozilla.org/projects/xul/' class='spip_out'>XUL</a>&nbsp;[<a href="http://www.gasteroprod.com/#nb11-2" name="nh11-2" id="nh11-2" class="spip_note" rel="footnote" title='[2] XUL : XML User Interface Language' >2</a>], la face la plus visible et médiatisée de <a href='http://www.mozilla.org/xpfe/' class='spip_out'>XPFE</a>&nbsp;[<a href="http://www.gasteroprod.com/#nb11-3" name="nh11-3" id="nh11-3" class="spip_note" rel="footnote" title='[3] XPFE : Cross-Platform Front-End' >3</a>], la plateforme client riche de <a href='http://www.mozilla.org/' class='spip_out'>Mozilla</a>.</p></div>
        	<div><p>Voici le chapo de la chronique&nbsp;:</p>

<p>&#171;&nbsp;Réaliser une application métier performante, facilement maintenable et extensible, offrant une interface ergonomique aux utilisateurs, nécessite tout d&#8217;abord un choix technologique de première importance, tant les solutions sont aujourd&#8217;hui diverses.</p>

<p>XPFE, la plateforme de développement de Mozilla, pourrait bien jouer les trouble-fête dans la cour des habitués que sont Java ou .Net. Son langage de description d&#8217;interfaces riches en XML, XUL, a tout pour séduire.&nbsp;&#187;</p>

<p>Je vous laisse découvrir la suite par vous-même&nbsp;: <a href='http://www.clever-age.com/veille/clever-link/xul-partie-visible-du-framework-mozilla-xpfe_323.html' class='spip_out'>XUL, la partie visible du framework Mozilla (XPFE)</a></p></div>
        	
        	<div class="info" style="border: 1px solid #333;"><p>[<a href="http://www.gasteroprod.com/#nh11-1" name="nb11-1" class="spip_note" title="Notes 11-1" rev="footnote">1</a>] Une chronique envoyée régulièrement par Clever Age à tous les abonnés</p>

<p>[<a href="http://www.gasteroprod.com/#nh11-2" name="nb11-2" class="spip_note" title="Notes 11-2" rev="footnote">2</a>] XUL&nbsp;: <i>XML User Interface Language</i></p>

<p>[<a href="http://www.gasteroprod.com/#nh11-3" name="nb11-3" class="spip_note" title="Notes 11-3" rev="footnote">3</a>] XPFE&nbsp;: <i>Cross-Platform Front-End</i></p></div>
        </div>
        ]]></description>
			<pubDate>Wed, 02 Feb 2005 22:27:28 +0100</pubDate>
			
				<category>client riche</category>
			
				<category>d&#233;veloppement</category>
			
				<category>Mozilla</category>
			
				<category>Clever Age</category>
			
			<guid isPermaLink="true">blog/blog/dark-side-of-xul.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/dark-side-of-xul.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/dark-side-of-xul-444.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Chronique d&#39;une licence non annonc&#233;e</title>
			<link>http://www.gasteroprod.com/blog/blog/chronique-d-une-licence-non-annoncee.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>La <a href='http://www.php.net/license/3_0.txt' class='spip_out'>version 3 de la licence de PHP</a> est sortie. Vous ne le saviez pas&nbsp;? Normal, elle est un peu passée en douceur, sans faire de bruit.</p></div>
        	<div><h3 class="spip">Petite chronologie</h3>
<p>Le <strong>12 juin 2002</strong>, Stig Bakken, leader du développement de PHP pour sa version 4.3, <a href='http://cvs.php.net/diff.php/php4/LICENSE?login=2&amp;r1=1.17&amp;r2=1.18&amp;ty=h' class='spip_out'>met à jour</a> la licence pour cette version. Le paragraphe 6 qui indiquait que le Zend Engine est inclu dans PHP est supprimé, et est remplacé par une simple mention de ce Zend Engine en fin de texte. Le numéro de licence passe du même coup de 2.02 à 3.0a1.</p>

<p>Le <strong>21 juillet 2002</strong>, Stig Bakken, toujours lui, intervient plusieurs fois sur la licence, principalement pour scinder en deux le paragraphe  3 qui parle à la fois du nom <i>PHP</i> et de l&#8217;usage qu&#8217;il en est fait pour nommer les logiciels développés en PHP. La séparation en deux paragraphe simplifie la compréhension de la seconde partie, qui devient donc le paragraphe 4 suivant&nbsp;:</p>

<p><i>Products derived from this software may not be called "PHP", nor may "PHP" appear in their name, without prior written permission from group@php.net.  You may indicate that your software works in conjunction with PHP by saying "Foo for PHP" instead of calling it "PHP Foo" or "phpfoo"</i></p>

<p>Soit en français&nbsp;:</p>

<p><i>Les produits dérivés de ce logiciel ne devraient pas être appelés "PHP", et "PHP" ne devrait pas apparaître dans leur nom, sans autorisation écrite préalable de group@php.net. Vous pouvez indiquer que votre logiciel fonctionne avec PHP en disant "Foo pour PHP" plutôt qu&#8217;en l&#8217;appelant "PHP Foo" ou "phpfoo".</i></p>

<p>Dans la foulée, Derick Rethans <a href='http://marc.theaimsgroup.com/?l=php-cvs&amp;m=102727165608460&amp;w=2' class='spip_out'>demande</a> dans la mailing-list <a href='http://marc.theaimsgroup.com/?l=php-cvs&amp;r=1&amp;w=2' class='spip_out'>php-cvs</a> si <a href='http://www.phpmyadmin.net/' class='spip_out'>phpMyAdmin</a> et <a href='http://phpopentracker.de/' class='spip_out'>phpOpenTracker</a> sont considérés comme des logiciels <i>dérivés</i> de PHP, selon le nouveau sens proposé par la licence.</p>

<p>Le <strong>5 août 2002</strong>, Sebastian Bergmann, créateur de phpOpenTracker, <a href='http://marc.theaimsgroup.com/?l=php-dev&amp;m=102858914124505&amp;w=2' class='spip_out'>répond</a> en passant dans la mailing-list plus appropriée <a href='http://marc.theaimsgroup.com/?l=php-dev&amp;r=1&amp;w=2' class='spip_out'>php-dev</a> qu&#8217;il est naturellement lui aussi intéressé, puisque directement concerné.</p>

<p>C&#8217;est alors que Rasmus Lerdorf, créateur de PHP que l&#8217;on ne présente plus, <a href='http://marc.theaimsgroup.com/?l=php-dev&amp;m=102859018225314&amp;w=2' class='spip_out'>intervient</a>  pour préciser ce qu&#8217;il en pense et en a déjà dit à plusieurs reprises auparavant. En synthèse, les projets développés en PHP n&#8217;ont aucune raison d&#8217;avoir des noms comportant <i>PHP</i>, alors que cela n&#8217;est pratiqué dans aucune autre technologie.</p>

<p>Le <strong>4 septembre 2002</strong>, sans doute pour l&#8217;exemple, Rasmus Lerdorf <a href='http://www.advogato.org/person/rasmus/diary.html?start=69' class='spip_out'>interpèle</a>   <a href='http://www.advogato.org/person/mglazer/' class='spip_out'>Michael Glazer</a>, créateur du projet <a href='http://freshmeat.net/projects/phportal/' class='spip_out'>PHPortal</a>, pour lui demander pourquoi le nom de son projet contient &#8217;php&#8217;.</p>

<p>Le <strong>6 septembre 2002</strong>, Rasmus, toujours lui, <a href='http://marc.theaimsgroup.com/?l=pear-dev&amp;m=103134676127239&amp;w=2' class='spip_out'>annonce</a> dans la mailing-list <a href='http://marc.theaimsgroup.com/?l=pear-dev&amp;r=1&amp;w=2' class='spip_out'>pear-dev</a> que suite à une discussion avec Richard M.&nbsp;Stallman, la <a href='http://www.gnu.org/licenses/license-list.html#GPLIncompatibleLicenses' class='spip_out'>liste des licences logiciel libre non compatibles avec la GNU/GPL</a> a été mise à jour pour prendre en compte la nouvelle version de la licence PHP et ôter les réserves importantes qui étaient faites sur la pertinence de la version précédente.</p>

<h3 class="spip">A bin oui, mais alors ...</h3>
<p>Cette habitude de mettre <i>PHP</i> dans le nom des logiciels, très particulière en effet, a sans doute trouvé sa source dans phpMyAdmin, assurément le plus fameux des projets PHP.</p>

<p>C&#8217;est d&#8217;ailleurs exactement ce qui a conduit aux noms de <a href='http://www.phpheaven.net/phpmychat:home' class='spip_out'>phpMyChat</a>, qui était initialement basé uniquement sur PHP et MySQL, mais aussi de <a href='http://www.phpheaven.net/phplang:home' class='spip_out'>phpLang</a>, phpApp, phpXMLP et phpSyndication.</p>

<p>Pour les autres projets, cela n&#8217;aurait sans doute que peu d&#8217;impact, mais un changement de nom de phpMyChat est-il envisageable alors qu&#8217;il est depuis déjà pas mal de temps connu de miliers d&#8217;utilisateurs&nbsp;?</p>

<h3 class="spip">Bonus</h3>
<p>Toutes ses discussions auront aussi permis de <a href='http://marc.theaimsgroup.com/?l=php-cvs&amp;m=102738953806371&amp;w=2' class='spip_out'>découvrir</a> grâce à Yasuo Ohgaki que <i>PHP</i> est une marque déposée en 1947 au Japon par l&#8217;éditeur <i>PHP Sougou Kennkyusho</i>.</p></div>
        	
        	
        </div>
        ]]></description>
			<pubDate>Fri, 20 Dec 2002 19:52:00 +0100</pubDate>
			
				<category>d&#233;veloppement</category>
			
				<category>PHP</category>
			
				<category>phpHeaven</category>
			
				<category>licence</category>
			
				<category>logiciel libre</category>
			
			<guid isPermaLink="true">blog/blog/chronique-d-une-licence-non-annoncee.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/chronique-d-une-licence-non-annoncee.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/chronique-d-une-licence-non-annonca-c-e-531.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Guide du d&#233;butant pour PEAR DB</title>
			<link>http://www.gasteroprod.com/blog/blog/guide-du-debutant-pour-pear-db.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>Traduction du tutoriel de <a href='mailto:cox@idecnet.com' class='spip_mailto'>Tomas V. V. Cox</a> publié en anglais à l&#8217;adresse suivante&nbsp;: <a href='http://vulcanonet.com/soft/?pack=pear_tut' class='spip_out'>http://vulcanonet.com/soft/?pack=pe...</a></p></div>
        	<div><h3 class="spip">Introduction (à écrire&nbsp;!)</h3>
<p>Ceci est un tutoriel sur l&#8217;utilisation de l&#8217;extension PEAR DB.</p>

<p>PEAR DB est un ensemble de classe proposant&nbsp;:</p>

<ul class="spip"><li> abstraction de bases de données</li><li> gestion avancée des erreurs</li><li> etc </li></ul>
<h3 class="spip">Obtenir et installer Pear</h3>
<p>Pour le moment, le projet PEAR est encore fortement en développement, donc le meilleur moyen de l&#8217;obtenir est depuis le CVS (la distribution de PEAR DB livrée avec PHP est obsolète, même celle avec PHP 4.0.6&nbsp;!). Ensuite, la seule chose que vous avez à faire est d&#8217;ajouter le répertoire racine de PEAR au paramètre <i>include_path</i> de votre fichier <i>php.ini</i>. Vous pouvez aussi procéder comme ceci&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>ini_set('include_path', '/pear_base_dir');</code></div>
<p>Voici un exemple pas à pas&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>Placez-vous là où vous voulez que soient les sources de PEAR<br />
# cd /usr/local/lib<br />
Connectez-vous au CVS (utilisez &quot;phpfi&quot; comme mot de passe)<br />
# cvs -d :pserver:cvsread@cvs.php.net:/repository login<br />
Lancez la commande suivante pour récupérer tous les fichiers<br />
de PEAR. Vous pouvez également l'utiliser pour mettre à jour<br />
des fichiers déjà récupérés. D'autres options possibles sont<br />
&quot;today&quot;, &quot;last month&quot;, ...<br />
# cvs -d :pserver:cvsread@cvs.php.net:/repository export -D &quot;last week&quot; php4/pear<br />
Editez votre php.ini et ajoutez le répertoire /usr/local/lib/php4/pear<br />
à votre paramètre include_path. Si vous n'avez pas accès au<br />
fichier php.ini, vous pouvez utiliser<br />
ini_set('include_path', 'path_to_pear'); dans votre code.</code></div>
<p>La documentation complète du CVS PHP peut être trouvée <a href='http://cvs.php.net/' class='spip_out'>ici</a>.</p>

<p>Notez que PEAR DB nécessite PHP > 4.0.4, mais d&#8217;autres packages  de PEAR comme le parser XML Parser ou le script <i>pear installer</i> nécessitent PHP >= 4.0.5.</p>

<p>Pour l&#8217;instant, ce guide couvre la dernière version CVS de PEAR DB, mais il peut être valide pour toute version récente.</p>

<h3 class="spip">Utilisation de PEAR DB</h3>
<p><strong>Se connecter et se déconnecter d&#8217;une base de données</strong></p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
// The pear base directory must be in your include_path<br />
require_once 'DB.php';<br />
$user = 'foo';<br />
$pass = 'bar';<br />
$host = 'localhost';<br />
$db_name = 'clients_db';<br />
// Data Source Name: This is the universal connection string<br />
$dsn = &quot;mysql://$user:$pass@$host/$db_name&quot;;<br />
// DB::connect will return a Pear DB object on success<br />
// or a Pear DB Error object on error<br />
// You can also set to TRUE the second param<br />
// if you want a persistent connection:<br />
// $db = DB::connect($dsn, true);<br />
$db = DB::connect($dsn);<br />
// With DB::isError you can diferentiate between an error or<br />
// a valid conection.<br />
if (DB::isError($db)) {<br />
 &nbsp;die ($db-&gt;getMessage());<br />
}<br />
....<br />
// You can disconnect from the database with:<br />
$db-&gt;disconnect();<br />
?&gt;</code></div>
<p>La chaine de connexion Data Source Name (paramètre <i>$dsn</i> dans l&#8217;exemple ci-dessus) peut avoir les formats autorisés suivants (copie directe de la méthode parseDSN de pear/DB.php)&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>* &nbsp;phptype: Database backend used in PHP (mysql, odbc etc.)<br />
* &nbsp;dbsyntax: Database used with regards to SQL syntax etc.<br />
* &nbsp;protocol: Communication protocol to use (tcp, unix etc.)<br />
* &nbsp;hostspec: Host specification (hostname[:port])<br />
* &nbsp;database: Database to use on the DBMS server<br />
* &nbsp;username: User name for login<br />
* &nbsp;password: Password for login<br />
*<br />
* The format of the supplied DSN is in its fullest form:<br />
*<br />
* &nbsp;phptype(dbsyntax)://username:password@protocol+hostspec/database<br />
*<br />
* Most variations are allowed:<br />
*<br />
* &nbsp;phptype://username:password@protocol+hostspec:110//usr/db_file.db<br />
* &nbsp;phptype://username:password@hostspec/database_name<br />
* &nbsp;phptype://username:password@hostspec<br />
* &nbsp;phptype://username@hostspec<br />
* &nbsp;phptype://hostspec/database<br />
* &nbsp;phptype://hostspec<br />
* &nbsp;phptype(dbsyntax)<br />
* &nbsp;phptype</code></div>
<p>Les bases de données actuellement supportées (partie <i>phptype</i> du DSN) sont&nbsp;:</p>

<table class="spip">
<tbody>
<tr class='row_even'>
<td>mysql</td>
<td>MySQL</td></tr>
<tr class='row_odd'>
<td>pgsql</td>
<td>PostgreSQL</td></tr>
<tr class='row_even'>
<td>ibase</td>
<td>InterBase</td></tr>
<tr class='row_odd'>
<td>msql</td>
<td>Mini SQL</td></tr>
<tr class='row_even'>
<td>mssql</td>
<td>Microsoft SQL Server</td></tr>
<tr class='row_odd'>
<td>oci8</td>
<td>Oracle 7/8/8i</td></tr>
<tr class='row_even'>
<td>odbc</td>
<td>ODBC (Open Database Connectivity)</td></tr>
<tr class='row_odd'>
<td>sybase</td>
<td>SyBase</td></tr>
<tr class='row_even'>
<td>ifx</td>
<td>Informix</td></tr>
<tr class='row_odd'>
<td>fbsql</td>
<td>FrontBase</td></tr>
</tbody>
</table>
<p>Notez que certaines fonctionnalités peuvent ne pas être supportées par tous les gestionnaires de bases de données. Référez-vous au document donnant le status des extensions PEAR DB situé dans <i>&lt;pear base dir>/DB/STATUS</i> pour avoir la liste détaillée.</p>

<p><strong>Effectuer une requête dans la base de données</strong></p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
// Once you have a valid DB object<br />
...<br />
$sql = &quot;select * from clients&quot;;<br />
// If the query is a &quot;SELECT&quot;, $db-&gt;query will return<br />
// a DB Result object on success.<br />
// Else it simply will return a DB_OK<br />
// On failure it will return a DB Error object.<br />
$result = $db-&gt;query($sql);<br />
// Always check that $result is not an error<br />
if (DB::isError($result)) {<br />
 &nbsp;die ($result-&gt;getMessage());<br />
}<br />
...<br />
?&gt;</code></div>
<p><strong>Récupérer les enregistrements résultant de la requête</strong></p>

<p><i> <strong>Fonctions fetch</strong> </i></p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
// Once you have a valid DB Result object<br />
...<br />
// Get each row of data on each iteration until<br />
// there is no more rows<br />
while ($row = $result-&gt;fetchRow()) {<br />
 &nbsp;$id = $row[0];<br />
}<br />
?&gt;</code></div>
<p>Plutôt que <i>fetchRow()</i> vous pouvez utiliser <i> <strong>fetchInto()</strong> </i> qui renseigne directement la valeur <i>$row</i>&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
...<br />
while ($result-&gt;fetchInto($row)) {<br />
 &nbsp;$id = $row[0];<br />
}<br />
?&gt;</code></div>
<p><i> <strong>Sélectionner le format de l&#8217;enregistrement récupéré</strong> </i></p>

<p>Les modes de <i>fetch</i> supportés sont <i>DB_FETCHMODE_ORDERED</i> (par défaut), <i>DB_FETCHMODE_ASSOC</i> et <i>DB_FETCHMODE_OBJECT</i>.</p>

<p>Exemples de structures de données retournées par les méthodes <i>fetch</i>&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
$res = $db-&gt;query('select id, name, email from users');<br />
$row = $res-&gt;fetchRow($mode);<br />
//With $mode = DB_FETCHMODE_ORDERED<br />
//The default behavior is to return an ordered array.<br />
$row = array (<br />
 &nbsp;0 =&gt; &lt;column &quot;id&quot; data&gt;,<br />
 &nbsp;1 =&gt; &lt;column &quot;name&quot; data&gt;,<br />
 &nbsp;2 =&gt; &lt;column &quot;email&quot; data&gt;<br />
);<br />
$id = $row[0];<br />
//With $mode = DB_FETCHMODE_ASSOC<br />
//Returns an associative array with column names as array keys:<br />
$row = array (<br />
 &nbsp;'id' &nbsp; &nbsp;=&gt; &lt;column &quot;id&quot; data&gt;,<br />
 &nbsp;'name' &nbsp;=&gt; &lt;column &quot;name&quot; data&gt;,<br />
 &nbsp;'email' =&gt; &lt;column &quot;email&quot; data&gt;<br />
);<br />
$id = $row['id'];<br />
//With $mode = DB_FETCHMODE_OBJECT<br />
//Returns a DB_row object with column names as properties:<br />
$row = db_row Object<br />
(<br />
 &nbsp;[id] &nbsp; &nbsp;=&gt; &lt;column &quot;id&quot; data&gt;,<br />
 &nbsp;[name] &nbsp;=&gt; &lt;column &quot;name&quot; data&gt;,<br />
 &nbsp;[email] =&gt; &lt;column &quot;email&quot; data&gt;<br />
)<br />
$id = $row-&gt;id;<br />
?&gt;</code></div>
<p><i> <strong>Configurer le format des enregistrements retournés</strong> </i></p>

<p>Vous pouvez indiquer quel mode de retour utiliser aux méthodes <i>fetchRow()</i> et <i>fetchInto()</i> ou définir un mode par défaut pour l&#8217;instance de DB.</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
...<br />
// 1) Set the mode per call:<br />
while ($row = $result-&gt;fetchRow(DB_FETCHMODE_ASSOC)) {<br />
 &nbsp;[..]<br />
}<br />
while ($result-&gt;fetchInto($row, DB_FETCHMODE_ASSOC)) {<br />
 &nbsp;[..]<br />
}<br />
// 2) Set the mode for all calls:<br />
$db = DB::connect($dsn);<br />
// this will set a default fetchmode for this Pear DB instance<br />
// (for all queries)<br />
$db-&gt;setFetchMode(DB_FETCHMODE_ASSOC);<br />
$result = $db-&gt;query(...);<br />
while ($row = $result-&gt;fetchRow()) {<br />
 &nbsp;$id = $row['id'];<br />
}<br />
?&gt;</code></div>
<p><i> <strong>Récupérer les enregistrements par indice</strong> </i></p>

<p>Le système de <i>fetch</i> de PEAR DB supporte aussi un autre paramètre pour permettre de récupérer les enregistrement par leur indice numérique. Cela est particulièrement intéressant si vous souhaitez exploiter seulement une partie d&#8217;un ensemble de résultats (par exemple pour contruire des <a href='http://vulcanonet.com/soft/index.php?pack=pager' class='spip_out'>listes paginées</a>), récupérer les enregistrements dans un ordre particulier, etc.</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
...<br />
// the row to start fetching<br />
$from = 50;<br />
// how many results per page<br />
$res_per_page = 10;<br />
// the last row to fetch for this page<br />
$to = $from + $res_per_page;<br />
foreach (range($from, $to) as $rownum) {<br />
 &nbsp;if (!$row = $res-&gt;fetchrow($fetchmode, $rownum)) {<br />
 &nbsp; &nbsp;break;<br />
 &nbsp;}<br />
 &nbsp;$id = $row[0];<br />
 &nbsp;....<br />
}<br />
?&gt;</code></div>
<p><i> <strong>Vider le résultat</strong> </i></p>

<p>Une fois que vous avez terminé d&#8217;utiliser le résultat, vous pouvez le vider avec la méthode <strong>free()</strong>&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
...<br />
$result = $db-&gt;query('SELECT * FROM clients');<br />
while ($row = $result-&gt;fetchRow()) {<br />
 &nbsp;...<br />
}<br />
$result-&gt;free();<br />
?&gt;</code></div>
<p><strong>Récupération rapide de données</strong></p>

<p>PEAR DB fourni quelques méthodes particulières pour récupérer le résultat d&#8217;une requête sans avoir besoin d&#8217;utiliser <i>fetchRow()</i> pour le parcourir. Ce sont les méthodes <i>getOne</i>, <i>getRow</i>, <i>getCol</i>, <i>getAssoc</i> et <i>getAll</i>. Voici quelques exemples d&#8217;utilisation&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
require_once 'DB.php';<br />
$db = DB::connect('pgsql://postgres@unix+localhost/clients_db');<br />
// -----------------------------------------------------------<br />
// getOne retrieves the first result of the first column<br />
// from a query<br />
$numrows = $db-&gt;getOne('select count(id) from clients');<br />
// -----------------------------------------------------------<br />
// getRow will fetch the first row and return it as an array<br />
$sql = 'select name, address, phone from clients where id=1';<br />
if (is_array($row = $db-&gt;getRow($sql))) {<br />
 &nbsp;list($name, $address, $phone) = $row;<br />
}<br />
// -----------------------------------------------------------<br />
// getCol will return an array with the data of the<br />
// selected column. It accepts the column number to retrieve<br />
// as the second param.<br />
// The next sentence could return for example:<br />
// $all_client_names = array('Stig', 'Jon', 'Colin');<br />
$all_client_names = $db-&gt;getCol('select name from clients');<br />
// -----------------------------------------------------------<br />
// Other functions are: getAssoc() and getAll().<br />
// For the moment refer to their in-line documentation<br />
// at pear/DB/common.php<br />
// -----------------------------------------------------------<br />
?&gt;</code></div>
<p>La famille des méthodes <i>get*()</i> fait tout le "sale boulot" pour vous, c&#8217;est à dire&nbsp;: exécuter la requête, récupérer les données et vider le résultat. Notez que comme toutes les fonctions de PEAR DB, elles retourneront un object PEAR DB_error en cas d&#8217;erreur.</p>

<p><strong>Obtenir plus d&#8217;informations sur le résultat des requêtes (numRows, numCols, affectedRows, tableInfo)</strong></p>

<p>Avec PEAR DB vous avez plusieurs façons d&#8217;obtenir des informations intéressantes sur les résultats de requêtes. Ce sont&nbsp;:</p>

<ul class="spip"><li> <strong>numRows()</strong>&nbsp;: Donne le nombre total d&#8217;enregistrements retournés par une requête de type "SELECT".</li><li> <strong>numCols()</strong>&nbsp;: Donne le nombre total de colonnes retournées par une requête de type "SELECT".</li><li> <strong>affectedRows()</strong>&nbsp;: Donne le nombre d&#8217;enregistrements affectés par une requête de manipulation de données ("INSERT", "UPDATE" or "DELETE").</li><li> <strong>tableInfo()</strong>&nbsp;: Donne un tableau associatif contenant des informations sur les champs retournés par une requête de type "SELECT". </li></ul>
<p>Exemples d&#8217;utilisation&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
...<br />
$db = DB::connect($dsn);<br />
$sql = 'select * from clients';<br />
$res = $db-&gt;query($sql);<br />
// Don't forget to check if the returned result from your<br />
// action is a Pear Error object. If you get a error message<br />
// like 'DB_error: database not capable', means that<br />
// your database backend doesn't support this action.<br />
//<br />
// Number of rows<br />
echo $res-&gt;numRows();<br />
// Number of cols<br />
echo $res-&gt;numCols();<br />
// Table Info<br />
print_r ($res-&gt;tableInfo());<br />
// Affected rows<br />
$sql = &quot;delete from clients&quot;;<br />
// remember that this statement won't return a result object<br />
$db-&gt;query($sql);<br />
echo 'I have deleted ' . $db-&gt;affectedRows() . 'clients';<br />
?&gt;</code></div>
<p><strong>Séquences</strong></p>

<p>Les séquences sont un moyen d&#8217;obtenir des IDs uniques pour les enregistrements. Si vous faites la majeure partie de votre travail avec par exemple MySQL, pensez aux séquences comme un autre moyen de gérer AUTO_INCREMENT. Cela est relativement simple, tout d&#8217;abord vous demandez un ID, puis vous insérez cette valeur dans le champ correspondant du nouvel enregistrement que vous êtes en train de créer. Vous pouvez avoir plus d&#8217;une séquence pour toutes vos tables, mais assurez-vous que vous utilisez toujours la même séquence pour une table particulière.</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
...<br />
// Get an ID (if the sequence doesn't exist, it will be created)<br />
$id = $db-&gt;nextID('mySequence');<br />
// Use the ID in your INSERT query<br />
$res = $db-&gt;query(&quot;INSERT INTO myTable (id,text) VALUES ($id,'foo')&quot;);<br />
...<br />
?&gt;</code></div>
<p><strong>Prepare &amp; Execute/ExcuteMultiple (pas encore écrit)</strong></p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
// UNTESTED CODE !!!<br />
//<br />
// Example inserting data<br />
$alldata = array(<br />
 &nbsp;array(1, 'one', 'en'),<br />
 &nbsp;array(2, 'two', 'to'),<br />
 &nbsp;array(3, 'three', 'tre'),<br />
 &nbsp;array(4, 'four', 'fire')<br />
);<br />
$sth = $dbh-&gt;prepare(&quot;INSERT INTO numbers VALUES(?,?,?)&quot;);<br />
foreach ($alldata as $row) {<br />
 &nbsp;$dbh-&gt;execute($sth, $row);<br />
}<br />
//Here's an example of a file placeholder:<br />
$myfile = &quot;/tmp/image.jpg&quot;;<br />
$sth = $dbh-&gt;prepare('INSERT INTO images (?, &amp;)');<br />
$dbh-&gt;execute($sth, array(&quot;this is me&quot;, $myfile));<br />
//After I commit a bugfix that I have on my laptop, you can use<br />
//parameter arrays in the getXxx methods too:<br />
$ver = $dbh-&gt;getOne(&quot;SELECT stableversion FROM packages WHERE name = ?&quot;,<br />
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;array($package));<br />
?&gt;</code></div>
<p><strong>autoCommit, commit and rollback (pas encore écrit)</strong></p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
//examples here<br />
?&gt;</code></div>
<h3 class="spip">Liste des méthodes disponibles</h3>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
/*<br />
* From the DB_(driver) objects<br />
*/<br />
// get the object with, ie:<br />
$db = DB::connect('mysql://user:pass@localhost/my_db');<br />
<br />
// Set options<br />
$db-&gt;setErrorHandling();<br />
$db-&gt;setFetchmode();<br />
// Information<br />
$db-&gt;affectedRows();<br />
$db-&gt;tableInfo();<br />
// Database manipulation<br />
$db-&gt;query();<br />
// Data fetch<br />
$db-&gt;nextId();<br />
$db-&gt;getOne();<br />
$db-&gt;getRow();<br />
$db-&gt;getCol();<br />
$db-&gt;getAssoc();<br />
$db-&gt;getAll();<br />
// Place holders and execute related<br />
$db-&gt;quote();<br />
$db-&gt;prepare();<br />
$db-&gt;execute();<br />
$db-&gt;executeMultiple();<br />
// Transactions<br />
$db-&gt;autoCommit();<br />
$db-&gt;commit();<br />
$db-&gt;rollback();<br />
// Disconnection<br />
$db-&gt;disconnect();<br />
<br />
/*<br />
* From DB_result objects<br />
*/<br />
// get the object with, ie:<br />
$res = $db-&gt;query('select * from foo');<br />
<br />
// Data fetch<br />
$res-&gt;fetchRow();<br />
$res-&gt;fetchInto();<br />
// Result Info<br />
$res-&gt;numCols();<br />
$res-&gt;numRows();<br />
$res-&gt;tableInfo();<br />
// Free<br />
$res-&gt;free();<br />
<br />
/*<br />
* From DB_error objects<br />
*/<br />
// get the object with, ie:<br />
$error = $db-&gt;query('select * from no_table');<br />
<br />
$error-&gt;getMessage();<br />
$error-&gt;getDebugInfo();<br />
$error-&gt;toString();<br />
?&gt;</code></div>
<h3 class="spip">Gestion des erreurs</h3>
<p><strong>Récupérer le message d&#8217;erreur d&#8217;une erreur PEAR DB</strong></p>

<p>Toutes les erreurs retournées par PEAR DB sont des objets PEAR Error. Voici un moyen de récupérer leurs informations&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
...<br />
$res = $db-&gt;query('select * from no_table');<br />
if (DB::isError($res)) {<br />
 &nbsp;// get the portable error string<br />
 &nbsp;echo $res-&gt;getMessage();<br />
}<br />
?&gt;</code></div>
<p><strong>Débuguer les erreurs PEAR DB</strong></p>

<p>PEAR DB utilise un système de messages d&#8217;erreur portable pour signaler les erreurs à l&#8217;utilisateur. Cela a beaucoup d&#8217;avantages comme proposer un moyen simple de les transposer en autres langages ou réaliser une action spécifique en cas d&#8217;erreur spécifique. Mais cela ne donne pas beaucoup d&#8217;informations au développeur sur ce qui est arrivé. Pour récupérer l&#8217;erreur réelle donnée par le gestionnaire de bases de données ainsi que la dernière requête effectuée, vous pouvez utiliser la méthode <i>getDebugInfo()</i>&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
$sql = 'select * from no_table';<br />
if (DB::isError($res = $db-&gt;query($sql))) {<br />
 &nbsp;// get the native backend error<br />
 &nbsp;// and the last query<br />
 &nbsp;echo $res-&gt;getDebugInfo();<br />
}<br />
?&gt;</code></div>
<p>Normalement quand une fonction PHP échoue, un message d&#8217;erreur est affiché. Dans PEAR ce fonctionnement a été désactivé. Mais peut-être aurez-vous parfois besoin de visualiser ces messages pour ôter des erreurs obscures de votre code. Cela peut être fait avec la fonction PHP set_error_handler qui est documentée dans le manuel PHP. Voici un exemple simple&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
// what messages to report<br />
error_reporting (E_ALL ^ E_NOTICE);<br />
// this function will handle all reported errors<br />
function my_error_handler ($errno, $errstr, $errfile, $errline) {<br />
 &nbsp;echo &quot;In $errfile, line: $errlinen&lt;br&gt;$errstr&quot;;<br />
}<br />
set_error_handler ('my_error_handler');<br />
$db = DB::connect('pgsql://postgres@localhost/no_db');<br />
...<br />
?&gt;</code></div>
<p><strong>Exécuter autmatiquement des actions en cas d&#8217;erreur</strong></p>

<p>Comme vous pouvez le voir, PEAR DB fait d&#8217;intenses vérifications et rapports d&#8217;erreurs, fonctionnalité qui oblige le développeur à toujours vérifier si le résultat de son action est ou non une erreur. PEAR DB prend aussi en charge cette tâche pénible, et propose un système très flexible pour automatiquement exécuter des actions en czas d&#8217;erreurs.</p>

<p>Les actions possibles sont&nbsp;:</p>

<ul class="spip"><li> Retourne l&#8217;objet erreur (PEAR_ERROR_RETURN). C&#8217;est l&#8217;action par défaut. </li><li> Imprime le message d&#8217;erreur (PEAR_ERROR_PRINT) </li><li> Imprime le message d&#8217;erreur et arrête l&#8217;exécution (PEAR_ERROR_DIE) </li><li> Utilise la fonction PHP <i>trigger_error()</i> pour lever une erreur PHP (PEAR_ERROR_TRIGGER) </li><li> Passe l&#8217;objet erreur à une fonction ou à une méthode d&#8217;objet (PEAR_ERROR_CALLBACK) </li></ul>
<p>Un exemple simple&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
require_once 'DB.php';<br />
// Set the default action to take on error<br />
PEAR::setErrorHandling(PEAR_ERROR_DIE);<br />
// From here you don't need to check errors any more<br />
$db = DB::connect('pgsql://postgres@localhost/my_database');<br />
$res = $db-&gt;query('select id from no_table');<br />
// at this point the execution is aborted and the error message is raisen<br />
...<br />
?&gt;</code></div>
<p>Un exemple plus complet&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
// Define the app evironment (this is: what errors you want to output)<br />
define ('DEBUG_ENV', true);<br />
// This function will handle all errors<br />
function handle_pear_error ($error_obj) {<br />
 &nbsp;// Be verbose while developing the application<br />
 &nbsp;if (DEBUG_ENV) {<br />
 &nbsp; &nbsp;die ($error_obj-&gt;getMessage().&quot;n&quot;.$error_obj-&gt;getDebugInfo());<br />
&nbsp; &nbsp; &nbsp; &nbsp; // Dump a silly message if the site is in production<br />
 &nbsp;} else {<br />
 &nbsp; &nbsp;die ('Sorry you request can not be processed now. Try again later');<br />
 &nbsp;}<br />
}<br />
require_once 'DB.php';<br />
// On error, call the &quot;handle_pear_error&quot; function back<br />
// You can also use an object as pear error handler so:<br />
// setErrorHandling(PEAR_ERROR_CALLBACK, array($object,'method_name');<br />
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handle_pear_error');<br />
$db = DB::connect('pgsql://postgres@localhost/site_db');<br />
$res = $db-&gt;query('select id from no_table');<br />
// at this point the execution is aborted and the &quot;handle_pear_error&quot;<br />
// function is called with the error object as its first argument<br />
while ($row = $res-&gt;fetchRow()) {<br />
 &nbsp;...<br />
}<br />
...<br />
?&gt;</code></div>
<p>Référez-vous au <a href='http://www.php.net/manual/en/pear.reference.php' class='spip_out'>manuel de référence de PEAR</a> pour obtenir la description détaillée des différentes actions possibles.</p>

<p>Voici une idée pour créer un système étendu de gestion d&#8217;erreurs&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
error_reporting (E_ALL ^ E_NOTICE);<br />
// this function will handle all errors reported by PHP<br />
function php_error_handler ($errno, $errstr, $errfile, $errline) {<br />
 &nbsp;die (&quot;In $errfile, line: $errlinen&lt;br&gt;$errstr&quot;);<br />
}<br />
set_error_handler ('php_error_handler');<br />
// this function will catch errors generated by Pear,<br />
// transform it to PHP errors and trigger them to the php_error_handler<br />
function pear_error_handler ($err_obj) {<br />
 &nbsp;$error_string = $err_obj-&gt;getMessage() . '&lt;br&gt;' . $error_obj-&gt;getDebugInfo();<br />
 &nbsp;trigger_error ($error_string, E_USER_ERROR);<br />
}<br />
require 'DB.php';<br />
PEAR::setErrorHandling (PEAR_ERROR_CALLBACK, 'pear_error_handler');<br />
// force an error<br />
$db = DB::connect('pgsql://postgres@localhost/no_db');<br />
...<br />
?&gt;</code></div>
<h3 class="spip">Remerciements</h3>
<p>Remerciements particuliers à Stig pour avoir créé le merveilleux monde de PEAR, aux personnes qui m&#8217;aident à maintenir ce document et bien sûr aussi à l&#8217;ensemble de l&#8217;équipe PEAR pour son travail permanent dessus.</p></div>
        	
        	
        </div>
        ]]></description>
			<pubDate>Fri, 12 Oct 2001 18:58:00 +0100</pubDate>
			
				<category>d&#233;veloppement</category>
			
				<category>PHP</category>
			
				<category>PEAR</category>
			
			<guid isPermaLink="true">blog/blog/guide-du-debutant-pour-pear-db.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc:format>text/html</dc:format>
			<dc:language>fr</dc:language>
			<comments>http://www.gasteroprod.com/blog/blog/guide-du-debutant-pour-pear-db.html#commentaires</comments>
			<wfw:commentRss>http://www.gasteroprod.com/rss/commentaires/guide-du-da-c-butant-pour-pear-db-533.rss</wfw:commentRss>
		</item>
		
		<item>
			<title>Une introduction &#224; PEAR</title>
			<link>http://www.gasteroprod.com/blog/blog/une-introduction-a-pear.html</link>
			<description><![CDATA[
        <div id="contentbox">
        	<div class="chapo" style="font-weight: bolder;"><p>Traduction de l&#8217;article de <a href='http://www.onlamp.com/pub/au/98' class='spip_out'>Joao Prado Maia</a> publié initialement le 24 mai 2001 sur <a href='http://www.onlamp.com/pub/a/php/2001/05/24/pear.html' class='spip_out'>ONLamp.com</a>, de O&#8217;Reilly.</p></div>
        	<div><h3 class="spip">Qu&#8217;est-ce que PEAR&nbsp;? Et pourquoi devrais-je m&#8217;en préoccuper&nbsp;?</h3>
<p>Le projet PEAR (NDT&nbsp;: PHP Extension and Application Repository) a été lancé par Stig S. Bakken pour créer un outil similaire au CPAN de Perl. Son but principal est de devenir un entrepôt pour des extensions et scripts PHP. Le but le plus ambitieux du projet est de tenter de définir des standards qui puisse aider les développeurs à écrire du code portable et réutilisable.</p>

<p>De la documentation sur le projet commence à apparaître sur Internet, en concéquence certainement de sa popularité grandissante. Une documentation de départ peut déjà être trouvée dans le <a href='http://www.php.net/manual/fr/pear.php' class='spip_out'>manuel officiel de PHP</a> et sera augmentée.</p>

<p>PEAR est encore particulièrement en travaux, notamment le "PEAR installer" et le <a href='http://pear.php.net/' class='spip_out'>site dédié</a>, et il devrait beaucoup croître dans les mois à venir. Il y a de nombreuses discussions sur la mailing-list des développeurs de PHP à propos de l&#8217;usage de PEAR dans les versions futures pour gérer le nombre croissant d&#8217;extensions C et aussi de l&#8217;usage du "PEAR installer" comme interface pour que les utilisateurs téléchargent et installent des extensions PHP.</p>

<p>Tout cela sans mentionner la librairie de scripts PHP de PEAR, qui est souvent considéré comme une des plus propre et bien conçues disponible actuellement pour PHP. L&#8217;un de ses composants les plus populaires est PEAR&nbsp;::DB, la librairie d&#8217;abstraction de base de données créée pour ce projet. Bakken travaille même au portage des classes et fonctions principales en une extension C pour rendre le composant aussi rapide que possible.</p>

<p>Ce nouveau projet deviendra sûrement l&#8217;un des aspects les plus importants de PHP dans le futur, autorisant les développeurs à partager du code en utilisant le site de PEAR et en donnant aux utilisateurs l&#8217;opportunité de télécharger et installer des extensions et scripts PHP.</p>

<h3 class="spip">Comment puis-je débuter avec PEAR&nbsp;?</h3>
<p>Comme mentionner précédemment, PEAR continue à évoluer et à s&#8217;améliorer. Cependant, un certain nombre de composants sont maintenant utilisables. Le plus populaire est PEAR&nbsp;::DB, qui permet au développeur d&#8217;écrire du code qui puisse être utilisé avec différents gestionnaires de bases de données. Par exemple, un développeur pourrait écrire un script qui insèrerait un enregistrement dans une table, et il fonctionnerait avec MySQL, PostgreSQL et Oracle.</p>

<p>Ainsi, l&#8217;exemple ci-dessous pourrait être utiliser avec tous les types de gestionnaires de bases de données (NDT&nbsp;: voir l&#8217;erratum en fin de page)&nbsp;:</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>&lt;?php<br />
// Include the appropriate PEAR classes<br />
require_once(&quot;DB.php&quot;);<br />
<br />
$dsn = array(<br />
 'phptype' &nbsp;=&gt; 'mysql',<br />
 'hostspec' =&gt; 'localhost',<br />
 'database' =&gt; 'test_db',<br />
 'username' =&gt; 'test_user',<br />
 'password' =&gt; 'test_password'<br />
);<br />
$dbh = DB::connect($dsn);<br />
<br />
$stmt = &quot;SELECT id, name FROM examples ORDER BY id&quot;;<br />
$result = $dbh-&gt;simpleQuery($stmt, DB_FETCHMODE_ASSOC);<br />
if ($dbh-&gt;numRows($result) &gt; 0) {<br />
 $data = (object) $dbh-&gt;fetchRow($result, DB_FETCHMODE_ASSOC);<br />
 echo &quot;id &nbsp; =&gt; $data-&gt;id&lt;br&gt;n&quot;;<br />
 echo &quot;name =&gt; $data-&gt;name&lt;br&gt;n&quot;;<br />
}<br />
?&gt;</code></div>
<p>C&#8217;était juste un très simple exemple pour montrer à quoi ressemblerait le code avec une librairie d&#8217;abstraction comme PEAR&nbsp;::DB.</p>

<p>Un nouveau chapitre a été récemment ajouté au manuel de PHP, mais il est encore incertain si ce manuel contiendra la documentation complète de tous les composants de PEAR, ou si un nouveau manuel sera créé uniquement pour les composants de PEAR.</p>

<h3 class="spip">Procédures d&#8217;installation</h3>
<p>Installer PEAR est en fait très simple, et je vais expliquer comment installer la dernière version du CVS de PEAR, qui change si rapidement.</p>

<p>Note&nbsp;: Le mécanisme interne de gestion de l&#8217;entrepôt changera probablement dans le futur. Pour l&#8217;instant, les composants et librairies sont stockés dans le même arbre CVS que PHP, ce qui pose des problèmes pour gérer à la fois les entrepôts et développeurs de PHP et de PEAR. Dans un futur proche, il est prévisible que PEAR sera détaché dans son propre module. Ce module existe, mais la plupart des composants sont encore dans l&#8217;ancien.</p>

<h3 class="spip">Installer PEAR à partir du CVS</h3>
<p>Si vous n&#8217;avez jamais entendu parler de CVS, jetez un oeil à sa <a href='http://www.cvshome.org/' class='spip_out'>documentation</a>. Ce n&#8217;est pas une technologie difficile d&#8217;usage, mais s&#8217;y accoutumer prend du temps.</p>

<p>En supposant que vous avez le client CVS standard installé sur votre machine, vous devrez suivre ces étapes&nbsp;:</p>

<p>1. Ouvrez une fenêtre de terminal (rxvt, xterm, ou autre)</p>

<p>2. Tapez les commandes suivantes&nbsp;:</p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code>cvs -z3 -d :pserver:cvsread@cvs.php.net:/repository login<br />
Password: [Entrez 'phpfi' comme mot de passe ici]<br />
cvs -z3 -d :pserver:cvsread@cvs.php.net:/repository co php4<br />
[Cela va créer un nouveau répertoire 'php4']<br />
cd php4<br />
cvs -z3 -d :pserver:cvsread@cvs.zend.com:/repository login<br />
Password: [Entrez 'zend' comme mot de passe ici]<br />
cvs -z3 -d :pserver:cvsread@cvs.zend.com:/repository co Zend TSRM<br />
[Cela va créer deux nouveaux répertoire dans 'php4', 'Zend' et 'TSRM']<br />
./buildconf</code></div>
<p>Voilà. Lancer buildconf devrait créer le script configure standard qui peut être utilisé pour définir vos paramètres pour PHP. Pour une installation normale, PEAR devrait être automatiquement installé dans /usr/local/lib/php, mais vous pouvez installer les fichiers manuellement en allant dans &#8217;php4/pear&#8217; et en lançant make install-su en tant que superuser.</p>

<p>Ensuite, vous devriez ajouter le répertoire racine de PEAR à l&#8217;include_path de votre fichier php.ini. Le chemin par défaut devrait être /usr/local/lib/php, mais cela peut être ailleurs si vous avez effectué des modification manuelles de vos paramètres de configuration.</p>

<h3 class="spip">Débuter avec PEAR</h3>
<p>Les composants de PEAR vont de l&#8217;abstraction de base de données à la gestion de cache, ce qui fait de PEAR plus qu&#8217;une simple librairie, c&#8217;est un nouveau standard pour écrire du code PHP portable et propre. L&#8217;une des plus importantes choses à faire pour un débutant avec PEAR est de lire les <a href='http://www.php.net/manual/fr/pear.standards.php' class='spip_out'>styles de codage PEAR</a> qui sont publiés dans le manuel de PHP.</p>

<p>Je donnerais quelques conseil pour commencer à travailler avec PEAR&nbsp;::DB, car c&#8217;est un des composant de PEAR les plus populaires. Vous pouvez trouver des exemples et de l&#8217;aide pour utiliser PEAR&nbsp;::DB en suivant ces étapes&nbsp;:</p>

<ul class="spip"><li> Cherchez des réponses à vos question sur <a href='http://marc.theaimsgroup.com/' class='spip_out'>MARC</a>, dans <a href='http://marc.theaimsgroup.com/?l=pear-dev' class='spip_out'>pear-dev</a> ou <a href='http://marc.theaimsgroup.com/?l=pear-general' class='spip_out'>pear-general</a>. </li><li> Lisez les scripts de tests unitaires fournis avec le code source de PEAR. L&#8217;emplacement de ces scripts peut être trouvé dans le répertoire où se trouve votre image CVS de PHP. Dans mon cas, c&#8217;est /home/jpm/php4/pear/DB/tests/. </li><li> Parcourez l&#8217;excellent <a href='http://vulcanonet.com/soft/?pack=pear_tut' class='spip_out'>tutoriel PEAR&nbsp;::DB</a> de Tomas V. V. Cox. 
J&#8217;espère que cet article a jeté un peu de lumière sur le mystérieux PEAR, et qu&#8217;il vous a fourni des informations utiles sur l&#8217;un des développements les plus prometteurs de la communauté PHP. </li></ul>
<p>Amusez-vous&nbsp;!</p>

<p><i><a href='http://www.onlamp.com/pub/au/98' class='spip_out'>Joao Prado Maia</a> est développeur Web à San Francisco. Il a plus de quatre ans d&#8217;expérience en développement d&#8217;applications web et aime apprendre de nouvelles technologies et de nouveaux langages de développement.</i></p></div>
        	
        	
        </div>
        ]]></description>
			<pubDate>Thu, 24 May 2001 18:56:00 +0100</pubDate>
			
				<category>d&#233;veloppement</category>
			
				<category>PHP</category>
			
				<category>PEAR</category>
			
			<guid isPermaLink="true">blog/blog/une-introduction-a-pear.html</guid>
			<dc:creator>Nicolas Hoizey</dc:creator>
  		<dc: