<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>La Case de l&#039;Oncle Tom &#187; css</title>
	<atom:link href="http://case.oncle-tom.net/tag/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://case.oncle-tom.net</link>
	<description>Développement Web, bonnes pratiques et performances</description>
	<lastBuildDate>Sun, 25 Dec 2011 19:33:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="search"
           href="http://case.oncle-tom.net/opensearch"
           type="application/opensearchdescription+xml"
           title="Content Search" />		<item>
		<title>Industrialiser l&#8217;artisanat de l&#8217;intégration Web, retour sur l&#8217;atelier</title>
		<link>http://case.oncle-tom.net/2010/industrialiser-lartisanat-de-lintegration-web-retour-sur-latelier/</link>
		<comments>http://case.oncle-tom.net/2010/industrialiser-lartisanat-de-lintegration-web-retour-sur-latelier/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 16:35:19 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[atelier]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[interaction design]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[livre blanc]]></category>
		<category><![CDATA[opquast]]></category>
		<category><![CDATA[parisweb]]></category>
		<category><![CDATA[temesis]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=17740</guid>
		<description><![CDATA[Industrialiser l'artisanat ? N'est-ce pas là un sacrilège ? Je partage ma vision et mon retour sur cet atelier. Pratique si vous n'aviez pas eu l'occasion d'y assister. D'ailleurs, il sera possible de contribuer, 2 livrables étant à l'étude.]]></description>
			<content:encoded><![CDATA[<p>De l&#8217;eau a coulé sous les ponts depuis <a href="http://paris-web.fr/">Paris Web</a>, et surtout, depuis que j&#8217;ai animé mon atelier technique intitulé &laquo;&nbsp;Industrialiser l&#8217;artisanat de l&#8217;intégration Web&nbsp;&raquo; (titre amélioré sur une judicieuse remarque de <a href="http://frank.taillandier.free.fr/">Frank Taillandier</a> &#8230; comme quoi on peut être végétarien et avoir de bonnes idées <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ).</p>
<p><span id="more-17740"></span></p>
<h3>La présentation</h3>
<p style="text-align: center;"><iframe src="http://www.slideshare.net/slideshow/embed_code/5459902" width="400" height="337" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe><br/><br/></p>
<p>J&#8217;ai <strong>complètement changé d&#8217;axe d&#8217;approche</strong> entre l&#8217;appel à proposition de Paris Web et le jour venu. J&#8217;ai retourné le sujet dans tous les sens pour arriver à transmettre le message de la manière la plus adaptée qu&#8217;il soit au public. Parce qu&#8217;il est vraiment <a href="http://thinkvitamin.com/user-science/understanding-your-audience/">essentiel de comprendre votre auditoire</a>.</p>
<p>De ce fait, j&#8217;ai préféré laisser tomber l&#8217;atelier magistral où j&#8217;aurais été le seul à partager. L&#8217;approche choisie fût celle de l&#8217;<a href="http://en.wikipedia.org/wiki/Interaction_design"><em>interaction design</em></a> (IxD) ; notion découverte la veille pendant la conférence de <a href="http://stephanietroeth.com/">Stéphanie Troeth</a>. L&#8217;idée étant de <strong>construire ensemble</strong> le corps de l&#8217;atelier, de produire ensemble la réflexion et d&#8217;en arriver à des conclusions plus rapidement.</p>
<p>Le plus amusant fût qu&#8217;<strong>on arrivait aux mêmes conclusions</strong>, et que les <em>slides </em>suivant la phase de <em>design</em> répondaient aux questions nouvellement créées.</p>
<p>Pour l&#8217;expérience, et le résultat produit, j&#8217;en suis satisfait <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Déroulement de l&#8217;atelier</h3>
<p>L&#8217;atelier consistait à passer en revue 3 des étapes du développement <em>frontend</em> : l&#8217;intégration <acronym title="HyperText Markup Language">HTML</acronym>, l&#8217;habillage <acronym title="Cascading Style Sheets">CSS</acronym> et les interactions JavaScript. Chaque étape se divisait en 4 composants de travail :</p>
<ul>
<li>Production / réalisation</li>
<li>Organisation / équipe</li>
<li>Documentation</li>
<li>Tests</li>
</ul>
<p>Pour chacun de ces composants, toute personne dans la salle pouvait suggérer une <strong>bonne pratique</strong>, une <strong>mauvaise pratique</strong> ou un <strong>outil</strong>. Cela s&#8217;est matérialisé avec un tableau blanc découpé en 4 zones, dans lesquelles on collait des post-it.</p>
<p>Pour la petite histoire, n&#8217;ayant pas pensé à acheter les post-il avant d&#8217;arriver à Paris, je me suis rabattu sur le premier choix venu, en me basant sur la connaissance du terrain de <a href="http://larlet.fr/">David Larlet</a> : Loisirs &amp; Créations du Bercy Village.</p>
<p>C&#8217;est ainsi que je me retrouvais avec 200 post-it en forme de cœur,  de maison ou de fleur.</p>
<p><img class="aligncenter size-medium wp-image-17834" title="Post-it" src="http://media.oncle-tom.net/images/2010/11/post-it-paris-web-300x179.jpg" alt="" width="300" height="179" /></p>
<p>Un peu de gaieté pour un atelier sérieux et créatif.<br />
D&#8217;ailleurs, parce qu&#8217;on n&#8217;a pas bossé pour rien, et que Paris Web c&#8217;est aussi la création en plus de <em>share the love</em>, voici la carte mentale de notre heure de travail :</p>
<iframe width="600" height="400" frameborder="0" scrolling="no" class="mindmeister-presentation mindmeister-presentation-id-65925228" src="http://www.mindmeister.com/maps/public_map_shell/65925228?width=600&height=400&zoom=0"></iframe>
<h3>Constats</h3>
<p>Mon premier constat, en regardant la carte mentale, c&#8217;est qu&#8217;on a quand même réussi à produire un <strong>bon nombre d&#8217;éléments</strong> en 1 heure, avec un public qui n&#8217;était pas préparé et dans une configuration de salle de classe, remplie de surcroît.<br />
La logistique s&#8217;est organisée d&#8217;elle-même, avec des contributions diverses pour ramasser les post-it, leur circulation et même la modération.</p>
<p>Quant au contenu en lui-même, plusieurs remarques s&#8217;imposent :</p>
<ul>
<li>la très grande majorité des contributions concernaient la <strong>production</strong> (c&#8217;était flagrant, face au tableau)</li>
<li>par extension, il y a peu d&#8217;éléments de documentation et de tests et dans une moindre mesure, peu de travail en équipe/organisationnel (à part les classiques <em>versionning</em>)</li>
<li>en production de <acronym title="Cascading Style Sheets">CSS</acronym> et de JavaScript, le<strong> nombre de mauvaises pratique équivaut ou dépasse les bonnes pratiques</strong></li>
</ul>
<p>En une phrase et une seule : le développement frontend, en tous cas représentatif de la population présente dans la salle, <strong>travaille dans son coin</strong>, avec ses méthodes, peu adaptables à d&#8217;autres cadres.</p>
<h3>Et la suite ?</h3>
<p>Mon avis c&#8217;est que si la production n&#8217;est pas forcément industrialisable au sens où on ne peut que difficilement automatiser la production du code, en revanche on peut <strong>automatiser les tests et la documentation</strong>, voire certains aspects d&#8217;organisation (diffusion automatique des <em>commits</em>, rapports etc.).</p>
<p>Une de mes hypothèses est que si le caractère individuel du travail est si marqué, c&#8217;est que nombre des méthodes, astuces et outils de travail sont basés sur des <strong>avis subjectifs</strong>. Pas étonnant que les réactions sur le mot <em>industrialisation</em> soient si virulentes et chargées d&#8217;émotions.</p>
<p>C&#8217;est une des raisons pour laquelle j&#8217;ai proposé en conclusion d&#8217;<strong>aller au-delà de nos jugements personnels</strong> pour formaliser des bonnes et mauvaises pratiques, que l&#8217;on applique ensuite à son projet si l&#8217;on est concerné. Un mélange des <em><a href="http://www.bbc.co.uk/guidelines/futuremedia/technical/css.shtml">guidelines</a></em><a href="http://www.bbc.co.uk/guidelines/futuremedia/technical/css.shtml"> BBC</a> et des bonnes pratiques <a href="http://www.opquast.com/">Opquast</a> en somme.</p>
<p>Ce que j&#8217;aimerais, c&#8217;est produire 2 livrables :</p>
<ul>
<li>une <em><strong>checklist</strong></em><strong> de bonnes pratiques</strong> de développement <em>frontend</em></li>
<li>un <strong>livre blanc du développement <em>frontend</em></strong>, comprenant en plus le processus de dialogue entre acteurs, pendant les phases projet</li>
</ul>
<p>Ces livrables seront <em>Open Source</em>, libres, gratuits et créés collectivement, parce qu&#8217;on a tous des terrains d&#8217;expertise différents et complémentaires.</p>
<div id="attachment_17833" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-17833" title="Délire de post-it" src="http://media.oncle-tom.net/images/2010/11/post-it-delire-300x179.jpg" alt="" width="300" height="179" /><p class="wp-caption-text">Share the love <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p></div>
<p>Je ne manquerai pas de vous tenir informé des avancées de ces projets, qui me tiennent à coeur.<br />
Je ne saurais que trop remercier les participants, présents lors de l&#8217;atelier Paris Web, ceux qui apporteront leur pierre à l &#8216;édifice (même si ça ne concerne qu&#8217;un changement de virgule dans une phrase) et ceux qui apporteront leur soutien, <a href="http://temesis.com/">Elie Sloïm</a> en tête. Il propose en effet de mettre à disposition la plate-forme Opquast en tant qu&#8217;outil de contribution.</p>
<p>Une idée qu&#8217;elle est bonne.</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2010/industrialiser-lartisanat-de-lintegration-web-retour-sur-latelier/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Paris Web 2010 : l&#8217;âge de raison</title>
		<link>http://case.oncle-tom.net/2010/paris-web-2010-age-de-raison/</link>
		<comments>http://case.oncle-tom.net/2010/paris-web-2010-age-de-raison/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 16:25:22 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[a11y]]></category>
		<category><![CDATA[accessibilité]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[grilles]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[parisweb]]></category>
		<category><![CDATA[qualité]]></category>
		<category><![CDATA[typographie]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[webdesign]]></category>
		<category><![CDATA[yahoo]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=17772</guid>
		<description><![CDATA[Paris Web, rien que d'y penser j'ai déjà envie d'y retourner. Condensé de l'édition 2010, où l'on parlera de typographie, d'innovation, d'architecture, d'outils et d'expérience utilisateur.
Paris Web, c'est LE cycle de conférence sur le webdesign, la qualité et l'accessibilité en France.]]></description>
			<content:encoded><![CDATA[<p><a href="http://paris-web.fr/">Paris Web</a>. Déjà 2 semaines que cet évènement est passé. 1 an à attendre à chaque fois : ça fait long mais au final, l&#8217;attente passe vite. Plus on se rapproche de la prochaine édition, plus le temps file.</p>
<p>Cette année, j&#8217;ai décidé de participer à toutes les conférences qui ne sont pas au cœur de mon activité quotidienne, au sens <em>production</em>. En gros, j&#8217;ai voulu laisser tomber tous les <em>buzzwords</em> et me concentrer sur des compétences et connaissances périphériques à activité. Satisfaire ma curiosité.</p>
<p>Je suis donc arrivé à Paris Web sans avoir regardé le programme, en décidant entre chaque pause le titre de la conférence que j&#8217;allais inscrire sur mon carnet de notes.</p>
<p><a href="http://case.oncle-tom.net/images/2010/09/logotype-paris-web.png"><img class="aligncenter size-medium wp-image-17530" title="Paris-Web" src="http://case.oncle-tom.net/images/2010/09/logotype-paris-web-300x203.png" alt="" width="300" height="203" /></a></p>
<p><span id="more-17772"></span></p>
<h3>L&#8217;ouverture par l&#8217;architecture</h3>
<p>Ce n&#8217;est pas tout à fait vrai : je savais quelle était la <em>première conférence</em> à laquelle j&#8217;allais assister. Graine semée il y a 2 ans, dans le retour en métro de Paris Web 2008. J&#8217;apprenais que <a href="http://arkhi.org/">Fabien Basmaison</a> partait 1 année entière en Chine (ou ailleurs en Asie ?).<br />
Absent de Paris Web 2009, il propose &laquo;&nbsp;<a href="http://www.paris-web.fr/2010/programme/le-web-lespace-public.php">Espace construit et espace virtuel, un retour vers le futur ?</a>&laquo;&nbsp; en guise d&#8217;introduction.</p>
<p>Ou comment ne pas parler de Web mais d&#8217;architecture, de construction et d&#8217;alliage fonctionnel/esthétique.</p>
<p>Il citait d&#8217;ailleurs une phrase que j&#8217;apprécie beaucoup : <q>l&#8217;architecture, c&#8217;est savoir changer d&#8217;échelle, de point de vue</q>. Je me plais à appliquer ce <em>moto</em> au quotidien mais au fond, n&#8217;est-ce pas là une chose essentielle pour toute personne travaillant dans le Web ? Savoir sortir le nez du cambouis, observer ce qui l&#8217;entoure, s&#8217;en inspirer et replonger/changer d&#8217;angle d&#8217;attaque.</p>
<p>L&#8217;architecture, c&#8217;est également <strong>réduire les obstacles</strong> pour obtenir davantage de fluidité, et augmenter le rendement. C&#8217;est la raison d&#8217;être des méthodes agiles, comme <a href="http://www.scrum.org/">scrum</a>. Parce que notre défi, c&#8217;est <a href="http://blog.akei.com/post/1415889011/choisir-son-metier-arreter-de-le-faire-subir">réussir un projet sur une base qui est tout sauf industrialisée</a> (voire industrialisable).</p>
<p>L&#8217;architecture, c&#8217;est <strong>travailler sur un patrimoine</strong>, ensemble, en utilisant l&#8217;existant (cf. <a href="#title-interface">Let&#8217;s Interface!</a>). On ne peut créer un ouvrage sans tenir compte de l&#8217;existant, de l&#8217;environnement ou même de l&#8217;intérêt même du-dit ouvrage. On ne peut décemment pas concevoir un site Web optimisé pour Internet Explorer 6 et une résolution de 1024&#215;748, ce serait juste omettre/nier l&#8217;existence du Web tout entier.</p>
<p>Paris Web est un moment où l&#8217;<strong>on s&#8217;ouvre l&#8217;esprit</strong> : cette conférence était programmée au bon moment, avec le bon intervenant mais surtout avec le bon contenu. Quelque chose qui n&#8217;était pas axée sur le Web. Celui qui replace le Web dans son contexte, celui de l&#8217;inspiration.</p>
<p><strong>Conseil livre</strong> :  de Le Corbusier.</p>
<h3 id="title-interface">Let&#8217;s Interface!</h3>
<p><a href="http://www.wait-till-i.com">Christian Heilmann</a> me fascine littéralement. Il a le don d&#8217;arriver à insuffler ce qu&#8217;il recherche : du fun et de l&#8217;intelligence.<br />
Si je devais résumer cette conférence en une phrase, ça serait la sienne : <q>le Web est un outil, utilisons-le</q>. On ne construit pas pour le Web, on construit <em>avec</em> le Web.</p>
<p>C&#8217;est la transcription parfaite de l&#8217;architecture vers le Web. Tenir compte de l&#8217;existant, des outils, pour construire les siens et arrêter de réinventer la roue.</p>
<p><strong>Les interfaces devraient être des outils faciles à utiliser</strong>, et à comprendre. De l&#8217;accessibilité au sens large en somme.<br />
De quoi insister auprès des clients de ne pas perdre de vue l&#8217;objectif principal ? L&#8217;utilisateur ?</p>
<h3>L&#8217;accessibilité dans une chaîne de production Web</h3>
<p>Quel meilleur moyen de ne pas perdre ses objectifs de vue en effectuant un contrôle qualité, matérialisé par une vérification de l&#8217;accessibilité à <em>toutes</em> les étapes du processus, plutôt qu&#8217;en livraison finale. C&#8217;est le point de vue de <a href="http://twitter.com/dboudreau">Denis Boudreau</a> et de <a href="http://accessibiliteweb.com/">Vincent François</a>.</p>
<p>Pourquoi la fin de chaîne pose problème ? Tout simplement parce qu&#8217;il est (souvent) déjà trop tard, que le coût des modifications en est multiplié mais surtout, c&#8217;est beaucoup plus simple d&#8217;intégrer ça dès le départ.<br />
Si on en revient à l&#8217;architecture, c&#8217;est comme si on mettait des fenêtres à 2 mètres de hauteur et qu&#8217;on se rendait compte à la livraison de la maison que ce n&#8217;est pas accessible car trop en hauteur pour les habitants. Vous vous voyez casser le mur et descendre la fenêtre ?</p>
<p>Leur <a href="http://accessibiliteweb.com/presentations/2010/parisweb/accessibilite-chaine-production/">présentation de l&#8217;accessibilité dans une chaine de production Web</a>, navigable au clavier et à la souris, est équivoque et découpe ces différentes phases au sein du projet :</p>
<ul>
<li>Analyse</li>
<li>Architecture</li>
<li>Ergonomie</li>
<li>Graphisme</li>
<li>Prototypage</li>
<li>Rédaction</li>
<li>Développement</li>
<li>Contrôle qualité</li>
</ul>
<p>Le liant entre ces phases étant la gestion de projet, menée de concert entre la maîtrise d&#8217;oeuvre et la maîtrise d&#8217;ouvrage. Une personne a même très justement souligné qu&#8217;il faudrait ajouter une nouvelle dernière étape, la livraison/maintenance. Pour s&#8217;assurer notamment qu&#8217;à l&#8217;usage, lors de la contribution ou des évolutions de l&#8217;application, l&#8217;accessibilité soit maintenue à niveau.</p>
<p><a href="http://www.flickr.com/photos/nicolas-hoizey/5107972863/"><img class="aligncenter" title="Paris Web Marketing Fail" src="http://farm2.static.flickr.com/1328/5107972863_754420e883.jpg" alt="" width="500" height="333" /></a></p>
<h3>Innover de 9 à 5</h3>
<p>Je m&#8217;intéresse à l&#8217;innovation, pas seulement à la théorie mais également à sa mise en pratique, depuis que je vois passer sous mon nez des projets intéressants mais qui oublient toujours une chose. Les usagers (tiens, on y revient). Un site est réalisé par une entreprise, pour accomplir un but (besoin marketing, nouveau produit ou autre) mais &#8230; la praticité et l&#8217;intérêt de l&#8217;usager, bien souvent, y sont absent ou trop peu représenté.</p>
<p>J&#8217;y reviendrai dans d&#8217;autres articles, par le biais de mes lectures et de mes projets.</p>
<p>Toujours est-il, j&#8217;ai découvert une autre personne de <a href="http://pheromone.ca/">Phéromone</a>, <a href="http://ot.zoy.org/">Olivier Théreaux</a>. Il a présenté de manière méthodique les différents types d&#8217;innovations possibles (<em>business</em>, <em>design</em>, incrémentales, radicales). Leur mélange provoque de l&#8217;efficacité, une amélioration des processus, de nouveaux produits, une découverte de nouveaux besoins et j&#8217;en passe.</p>
<p>Le travail de l&#8217;innovation, ce n&#8217;est pas seulement l&#8217;acquisition de l&#8217;idée : c&#8217;est l<strong>&#8216;art de la faire fructifier</strong>, de la mettre concrètement en oeuvre.<br />
En ce sens, il cite Scott Berkun : <q>les gens ne veulent pas innover, ils veulent avoir innové</q>. N&#8217;avez-vous jamais entendu de client qui vous demandait une application iPhone sans savoir ce qu&#8217;ils voulaient y mettre ? La réponse est dans la citation.</p>
<p>Innover, c&#8217;est <strong>apprendre à échouer</strong>. C&#8217;est admettre que des fautes seront commises et que la réussite se mesure également en terme de ressources : elles doivent être à la mesure des ambitions. L&#8217;amplitude entre les 2 augmente les risques d&#8217;échec.</p>
<p>Olivier soulignait aussi un détail essentiel, qu&#8217;on oublie un peu et qui pourtant caractérise tellement notre métier, notre univers : c&#8217;est la <strong>culture hacker</strong>. <em>Hacker</em> au sens bidouilleur. Celui qui parvient à ses fins en se servant d&#8217;outils à disposition. LE Web est à notre disposition.</p>
<p>Encore une fois, les personnes les plus fascinantes ne sont pas celles qui apportent de nouvelles choses ou qui sont les &laquo;&nbsp;meilleures&nbsp;&raquo;. Mais celles qui apportent un regard différent, de par leur(s) culture(s), leur expérience et leur vécu.</p>
<p><strong>Conseil lecture</strong> :  de Scott Berkun.</p>
<h3>Journey over Destination: creating an effective framework with UX tools</h3>
<p>J&#8217;ai malheureusement été moins attentif sur la conférence de <a href="http://unadorned.org/">Stéphanie Troeth</a> (projet client à régler, à croire que chaque année j&#8217;y coupe pas ;-(). Néanmoins, à la lecture de ses <em>slides</em> pendant sa présentation, une chose m&#8217;avait frappé : tout est clair, limpide et extrêmement synthétique. Sans le son, il y avait de quoi apprendre. C&#8217;est d&#8217;ailleurs comme ça que je me suis aperçu que la méthode employée lors de mon atelier technique (<a href="http://case.oncle-tom.net/2010/paris-web-industrialiser-integration-html/">dont vous pouvez lire l&#8217;annonce </a>; le détail et résumé arrivent) était en fait de l&#8217;<em>interactive design</em>.</p>
<p>L&#8217;expérience utilisateur repose avant tout sur la conception, du site, de l&#8217;outil ou de je ne sais quoi (le concept s&#8217;applique à tout, pas seulement au Web). Encore une fois, l&#8217;<strong>agilité du processus</strong>, la fragmentation des tâches et les contraintes (limites de temps, de fonctionnalités etc.) sont un élément essentiel à la qualité du résultat final.</p>
<p>L&#8217;exemple le plus parlant est celui du curseur : tirer d&#8217;un côté enlève du poids à l&#8217;extrême opposé. De même que parmi la trinité temps, argent, fonctionnalité, on ne peut en conserver que 2. Lesquels choisiriez-vous au moment d&#8217;acter un choix ? Que diraient vos clients ?</p>
<p>Notre conversation en <em>off</em> m&#8217;a confirmé mon intuition : sa présentation représente des mois de réfléxion, au fil de l&#8217;eau. Tiens, ce n&#8217;est pas justement le concept de l&#8217;innovation ? <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><a href="http://www.flickr.com/photos/mauriz/5107657136/"><img class="aligncenter" title="Amphithéâtre IBM à Paris Web" src="http://farm2.static.flickr.com/1139/5107657136_4c4de67512.jpg" alt="" width="500" height="333" /></a></p>
<h3>La typographie comme outil de design</h3>
<p>Encore un petit nouveau à Paris Web : <a href="http://www.davidrault.com/">David Rault</a>. Encore un globetrotter, à croire que ça va devenir un élément déterminant sur le CV <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>La typographie, de mémoire, est un sujet qui a été peu abordé à Paris Web, en tous cas pas lors de conférences. Je m&#8217;y connaissais assez peu et le moins que je puisse en dire, c&#8217;est que je suis resté le regard rivé sur la scène, à noter avec délectation cet enseignement, fort souvent un choix par défaut. <q>On va utiliser quelle typo ? Oh bof, de l&#8217;Arial ou du Verdana</q>.</p>
<p>Quelques explications sur la classification typographique, et hop, tout devient plus clair quant aux termes serif, sans-serif, linéales, humanes, garaldes, romaines etc. Je ne paraphraserai pas cette classification.</p>
<p>En revanche, retour à l&#8217;architecture, c&#8217;est tout le <strong>bagage culturel</strong> que les polices de caractères véhiculent. Sans oublier leur base historique et sociale. Je n&#8217;imaginais pas utiliser sur un ordinateur une police datant du XVI<sup>ème</sup> siècle, considérée comme parfaite.</p>
<p>En considérant que le Web, c&#8217;est 95% de typographie (ce que l&#8217;on lit), ce n&#8217;est clairement pas le choix banal que l&#8217;on a l&#8217;habitude de faire, ou de subir. Je rajoute cette notion aux indispensables à réunir pour réussir un projet, par le biais de la communication écrite.</p>
<p><strong>Conseil lecture</strong> : de David Rault.</p>
<h3>La macrotypographie de la page Web</h3>
<p>On reste dans l&#8217;univers de la communication visuelle avec <a href="http://lasoeurkaramazov.net/">Anne-Sophie Fradier</a>. L&#8217;occasion d&#8217;ailleurs de me rendre compte que j&#8217;avais déjà lu son blog auparavant, et que je le découvre juste maintenant, à l&#8217;occasion de la rédaction de cet article <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  Le Web est petit et on se connait plus facilement en avatar en fin de compte.</p>
<p>Macrotypographie vous dites ? Il s&#8217;agit de concevoir la typographie au niveau du paragraphe, de la page, par le biais de grilles, de colonnes, leur ratio etc. C&#8217;est forcément une personne bien puisque les grilles, elle adore et en mange au petit-déjeuner mais surtout, a eu une réponse extra à ma question (oui j&#8217;ai posé beaucoup de questions, je sais <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ) : <q>les grilles apportent-elles une contrainte qui brident la créativité ?</q><br />
Réponse : non, bien au contraire, <strong>il faut des contraintes pour développer la créativité</strong>. Elles agissent comme un guide.</p>
<p>Le rapport permanent du livre au Web était très intéressant. On a tendance à opposer print au Web, moi le premier &#8230; et finalement, elle considère que la page Web se rapproche du <em>volumen</em> (les rouleaux de papier, utilisé pour la Torah notamment).<br />
Plus amusant encore, tout ce qui concerne la typographie a déjà été inventé &#8230; par les moines. Enluminures, marges, blocs de lecture etc.</p>
<p>Un <strong>regard rafraîchissant</strong> de plus sur la manière de concevoir et d&#8217;architecturer nos contenus, nos sites et nos applications.</p>
<p><strong>Conseil lecture</strong> : de Josef Muller-Brockmann.</p>
<div class="wp-caption aligncenter" style="width: 510px"><a href="http://www.flickr.com/photos/nicolas-hoizey/5108562588/"><img class="  " title="La croix au rouge français" src="http://farm2.static.flickr.com/1153/5108562588_7a9d7e59d8.jpg" alt="" width="500" height="333" /></a><p class="wp-caption-text">La crois au rouge français</p></div>
<h3>Conclusion</h3>
<p>Alors, pourquoi avoir titré mon article l&#8217;âge de la raison ? Parce qu&#8217;en plus de partager notre amour du Web, les intervenants de Paris Web, les organisateurs, mais aussi les participants, ont réussi à démontrer qu&#8217;on n&#8217;était plus que dans la diffusion d&#8217;informations à coup de slides.<br />
Non, on était dans la <strong>création</strong>.</p>
<p>L&#8217;âge de la raison parce que finalement, le fond de <strong>cette édition était basé sur les réflexions</strong>. Qui sommes-nous ? Comment valoriser nos compétences ? Comment dialoguer avec le client ? Comment dire que la qualité ce n&#8217;est pas une option (pas la nôtre) ? Comment faire un site Web standard et un site Web mobile en un seul développement ?</p>
<p>L&#8217;âge de la raison car les <strong>processus </strong>de création et les <strong>enjeux métier</strong> étaient au centre des réflexion. Et qu&#8217;on n&#8217;a d&#8217;ailleurs toujours pas une réponse claire. L&#8217;argumentation va s&#8217;étoffer avec le temps, je n&#8217;en doute pas.</p>
<p>Je remercie chaleureusement les organisateurs d&#8217;avoir si bien <strong>réussi </strong>la programmation. Cette matinée typographie est un vent de fraîcheur qu&#8217;il faut continuer à pousser, pour aborder le <em>webdesign</em> d&#8217;un angle peu pratiqué jusqu&#8217;à présent.<br />
L&#8217;expérience de la <a href="http://fr.wikipedia.org/wiki/V%C3%A9lotypie">vélotypie </a>et de la traduction simultanée (et les 2 en même temps) était excellente. Je découvrais l&#8217;effervescence d&#8217;un organisateur des RMLL se demandant comment mettre en place un tel système.</p>
<p>Je terminerai malgré tout par quelques critiques, car on peut toujours progresser :</p>
<ul>
<li>HTML5 c&#8217;est sympa, il faut aller vers du concret, au-delà des balises section, header etc. La démo de Paul Rouget cassait la baraque car elle <strong>apportait ce qu&#8217;il manquait</strong> jusque là : la concrétisation au-delà du <em>slide</em> ;</li>
<li>le <strong>mobile </strong>a quasiment disparu de la programmation alors que l&#8217;an dernier, on sentait que c&#8217;était le sujet de toutes les interrogations</li>
<li>les conférences sur le <strong>contenu</strong>, leur rédaction me font trop souvent penser à des cours de référencement naturel de bas étage (je suis dur, j&#8217;assume)</li>
</ul>
<p>Encore une fois, rendez-vous de pris pour l&#8217;année prochaine, à savoir en 2011 &#8230; à moins qu&#8217;un <strong>Sud Web</strong> se glisse entre temps dans le calendrier ? <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>Remarque</strong> : j&#8217;oublie plein de choses, plein de personnes (Ryan, toute la <em>famille</em> avec Frank, N1k0 etc.) &#8230; dur dur de tout caser en 1 billet ;-(</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2010/paris-web-2010-age-de-raison/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Paris-Web 2010 : industrialiser l&#8217;artisanat de l&#8217;intégration HTML</title>
		<link>http://case.oncle-tom.net/2010/paris-web-industrialiser-integration-html/</link>
		<comments>http://case.oncle-tom.net/2010/paris-web-industrialiser-integration-html/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 09:00:04 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[atelier]]></category>
		<category><![CDATA[blueprint]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[discussion]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[industrialisation]]></category>
		<category><![CDATA[oocss]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[parisweb]]></category>
		<category><![CDATA[performances]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=17526</guid>
		<description><![CDATA[Je présente un nouvel atelier Paris-Web : "industrialiser l'artisanat de l'intégration HTML" le samedi 16 octobre 2010 à Télécom Paris. Présentation de l'atelier, pourquoi j'ai décidé de l'animer et comment il va s'organiser.
Une chose est sure : on va tous réfléchir ensemble !]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai le plaisir d&#8217;animer un atelier technique à <a href="http://www.paris-web.fr">Paris-Web</a> pour la troisième année consécutive. Mon premier atelier, en 2008, traitait des <strong>frameworks <acronym title="Cascading Style Sheets">CSS</acronym></strong> ; et en 2009, des capacités de Gears et d&#8217;HTML5 pour <strong>construire un site Web consultable hors-ligne</strong>.</p>
<p>Je reviens aux sources et à mon grand dada avec l&#8217;<strong>intégration <acronym title="HyperText Markup Language">HTML</acronym></strong> au sens large du terme. J&#8217;ai choisi d&#8217;intituler cet atelier : <a href="http://www.paris-web.fr/2010/programme/industrialiser-lartisanat-de-lintegration-html.php">industrialiser l&#8217;artisanat de l&#8217;intégration <acronym title="HyperText Markup Language">HTML</acronym></a>. Rendez-vous le samedi 16 octobre 2010 à 10h50 dans les locaux de <a href="http://www.telecom-paristech.fr/">Télécom Paris</a> pour en discuter &#8230; et maintenant, pour le préparer et en dessiner les contours.</p>
<p><img class="aligncenter size-medium wp-image-17530" title="Paris-Web" src="http://case.oncle-tom.net/images/2010/09/logotype-paris-web-300x203.png" alt="" width="300" height="203" /></p>
<p><span id="more-17526"></span></p>
<h3>Origine de l&#8217;atelier</h3>
<p>Juste après l&#8217;édition 2009 de Paris-Web, je me demandais sur quoi je pourrais parler en conférence ou en atelier. Cette manifestation a le mérite d&#8217;attirer des orateurs de qualité &#8230; et ce n&#8217;est pas évident de monter sur scène en se disant : que pourrais-je apporter au public, qui ne soit pas de la redite et suscite autant d&#8217;intérêt qu&#8217;une <a href="http://stephanietroeth.com/">Stéphanie Troeth</a>, <a href="http://www.la-grange.net/">Karl Dubost</a> ou <a href="http://icant.co.uk/">Christian Heilmann</a>.</p>
<p>Et là j&#8217;ai lu <a href="http://blog.temesis.com/post/2009/12/15/Ma-lettre-a-papa-ParisWeb">la lettre au papa Paris-Web d&#8217;Elie Sloïm</a>. J&#8217;ai de suite pensé à un sujet lié à l&#8217;<strong>intégration <acronym title="HyperText Markup Language">HTML</acronym></strong>. Cette spécialité connaît une effervescence d&#8217;outils depuis 2008 (<em>frameworks</em> <acronym title="Cascading Style Sheets">CSS</acronym>, pré-processeurs <acronym title="Cascading Style Sheets">CSS</acronym> et performances Web) &#8230; pourtant les méthodes de travail restent toujours très liées au développeur, à son tempérament et à ses connaissances d&#8217;outils capables d&#8217;améliorer la productivité. Quelque chose de tout sauf normalisé, industrialisé.</p>
<p>Comme il s&#8217;agit également d&#8217;une pratique ayant du mal à accepter les changements &#8211; je me souviens encore des réticences liées aux <em>frameworks</em>, alors que dans tout langage de programmation ces outils sont perçus comme du pain béni &#8211; je me suis dis qu&#8217;il y avait quelque chose à faire.</p>
<h3>Les axes initiaux de l&#8217;atelier</h3>
<p>En préparant l&#8217;appel à propositions de Paris-Web, j&#8217;avais convenu que cet atelier devrait tenter de répondre aux objectifs suivants :</p>
<ul>
<li>dresser un état de l&#8217;art de l&#8217;intégration <acronym title="HyperText Markup Language">HTML</acronym></li>
<li>offrir une large tribune à l&#8217;audience, notamment en partageant ses  propres retours d&#8217;expérience</li>
<li>déterminer ce dont on dispose et ce dont on manque en terme  d&#8217;outillage</li>
</ul>
<p>Par extension, je souhaitais répondre (au moins) à ces questions :</p>
<ul>
<li>comment bâtir des <acronym title="Cascading Style Sheets">CSS</acronym> indépendantes et réutilisables ?</li>
<li>quand et comment utiliser un préprocesseur <acronym title="Cascading Style Sheets">CSS</acronym> ?</li>
<li>comment dialoguer avec le graphiste ?</li>
<li>comment dialoguer avec le développeur ?</li>
<li>comment détecter les régressions et assurer une qualité de code en  <acronym title="Cascading Style Sheets">CSS</acronym> ?</li>
</ul>
<p>J&#8217;ai également repris l&#8217;historique des précédents Paris-Web pour voir que de précédents ateliers s&#8217;étaient déjà penchés sur la question de la chaine d&#8217;intégration. D&#8217;où mon souhait de ne pas forcément réinventer la roue.</p>
<p>Pour autant, les objectifs tout comme les questions ne sont pas figées dans le marbre. Cet article est également là pour <strong>capter vos avis et vos remarques</strong>, pour ajuster cela avant le jour de l&#8217;atelier.</p>
<h3>Discuter, échanger, et créer</h3>
<p>Enfin, mon évolution personnelle au long de cette année 2010 et certaines paroles de <a href="http://larlet.fr/">David Larlet</a> résonnaient dans ma tête.<br />
Un sujet de cette importance ne peut pas être magistral. Pourquoi ? Parce que tous les intégrateurs rencontrent une <strong>variété de conditions de travail différentes</strong>, et qu&#8217;il serait d&#8217;autant plus difficile d&#8217;obtenir un consensus en prodiguant cet atelier de manière magistrale.</p>
<p>D&#8217;où l&#8217;idée d&#8217;introduire l&#8217;atelier par un <strong>bref résumé de mes retours d&#8217;expérience</strong> sur les <em>frameworks</em> (existants, ou créés pour le besoin), les pré-processeurs <acronym title="Cascading Style Sheets">CSS</acronym>, leur combinaison ainsi que l&#8217;application de la philosophie <a href="http://oocss.org/">Object Oriented <acronym title="Cascading Style Sheets">CSS</acronym></a>. Quelque chose comme 10/15 minutes maximum.</p>
<p>Le reste du temps serait réparti de manière équitable sur chacune des questions, et <strong>animé sous forme de discussion</strong>. Chaque participant répondrait (<em>via</em> des post-it, je les fournirai <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ) par 1 ou plusieurs réponses, positives et négatives. En gros, ce qu&#8217;il faut faire, et ce qu&#8217;il ne faut pas faire.</p>
<p>Cette collecte en <em>live</em> des post-it, affichés au tableau, permettrait de dresser une <strong>cartographie des bonnes et mauvaises pratiques</strong>, des actions à mener et dont il faut se méfier.</p>
<p>A défaut de parler d&#8217;une industrialisation vidant l&#8217;intégration <acronym title="HyperText Markup Language">HTML</acronym> de son côté artisanal, on aurait une excellente occasion pour tous se poser ensemble les bonnes questions, et <strong>repartir avec des réponses et des idées pleins la tête</strong>.</p>
<h3>Conclusion</h3>
<p>Bref, si le sujet de l&#8217;intégration <acronym title="HyperText Markup Language">HTML</acronym> vous préoccupe, est au centre de vos intérêts et que vous souhaitez en améliorer sa pratique professionnelle (pour une meilleure reconnaissance de celle-ci ?), je vous invite à la fois à venir à l&#8217;atelier technique du samedi (<a href="http://inscriptions.paris-web.fr/">il reste quelques places ; ça ne coûte que 22€</a>) et à réagir en commentaires. Je ferai mon possible pour adapter l&#8217;animation de l&#8217;atelier à vos problématiques et questionnements.</p>
<p>Cet atelier serait ainsi à l&#8217;image de Paris-Web : une <strong>grande discussion conviviale, constructive et enrichissante</strong>.<br />
L&#8217;idée sera ensuite de concrétiser ces échanges soit par un ensemble de billets de blogs soit, si la matière le permet, en <strong>livre blanc</strong>.</p>
<p>Ne me demandez pas ce que je prévois pour 2011, je n&#8217;en ai aucune idée &#8230; <em>pour l&#8217;instant</em> <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2010/paris-web-industrialiser-integration-html/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>RMLL 2010 : c&#8217;est parti !</title>
		<link>http://case.oncle-tom.net/2010/rmll-2010/</link>
		<comments>http://case.oncle-tom.net/2010/rmll-2010/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 14:50:32 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[accessibilité]]></category>
		<category><![CDATA[bordeaux]]></category>
		<category><![CDATA[conférences]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[ezpublish]]></category>
		<category><![CDATA[ftth]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[opendata]]></category>
		<category><![CDATA[openstreetmap]]></category>
		<category><![CDATA[rmll]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[typo3]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=14602</guid>
		<description><![CDATA[Les RMLL commencent ! Petit aperçu du programme de la session Internet, que je co-organise avec <a href="http://prendreuncafe.com">Nicolas Perriault</a>.]]></description>
			<content:encoded><![CDATA[<p>La <a href="http://2010.rmll.info">onzième édition des Rencontres Mondiales du Logiciel Libre</a> (<em>Libre Software Meeting</em> pour les anglophones) vient de débuter à Bordeaux. Ce cycle de conférences signe son retour dans le terroir puisque sa toute première édition s&#8217;est déroulée à Bordeaux, 10 ans plus tôt.</p>
<p>Je vous parlais en janvier de l&#8217;appel à conférence. Celui-ci a battu les records : 35 conférences, 1 table ronde et plus d&#8217;une demi-journée de conférences en anglais pour la session Internet, que je co-organise avec <a href="http://prendreuncafe.com">Nicolas Perriault</a>.</p>
<p><a href="http://case.oncle-tom.net/images/2010/07/logo-11es_fr.png"><img class="aligncenter size-full wp-image-14603" title="RMLL 2010" src="http://case.oncle-tom.net/images/2010/07/logo-11es_fr.png" alt="Logo RMLL 2010" width="308" height="85" /></a></p>
<h3><span id="more-14602"></span>La session Internet</h3>
<p>Toutes les conférences liées à la thématique de l&#8217;Internet et du libre se déroulent sur 3 jours, du <strong>mercredi 7 juillet</strong> (demain) jusqu&#8217;au <strong>vendredi 8 juillet</strong>. Ça se passe dans l&#8217;<strong>amphitéâtre A</strong> (150 places) de l&#8217;<a href="http://www.enseirb.fr/">ENSEIRB-MATMECA</a>, à 2 pas de l&#8217;arrêt de tramway B « Arts et Métiers ». Tout se trouve sur le <a href="http://2010.rmll.info/spip.php?page=osm&amp;lang=fr">plan détaillé de l&#8217;évènement</a>, en particulier dans la rubrique <a href="http://2010.rmll.info/Venir-en-tramway.html">déplacement en tramway</a>.</p>
<p>La philosophie consiste à réduire les durées de conférence sur des durées de 20 minutes, pour offrir un message clair, sans longueur ainsi qu&#8217;une variété d&#8217;intervenants et de sujets.<br />
Coïncidence de la vie et organisation aidant, on a réussi à caser ça en demi-journées thématiques.<br />
Cela offre d&#8217;une part une vision claire du programme mais aussi, si vous avez une attente bien précise, une (ou plusieurs) demi-journées suffisent pour y répondre.</p>
<p>On aurait aimé en faire plus &#8230; difficile en 3 jours, déjà intenses.</p>
<h4>Frameworks et tests</h4>
<ul>
<li>Date : mercredi matin</li>
<li>6 conférences</li>
</ul>
<p>Où l&#8217;on parlera de <em>frameworks</em> de développement avec Django et Symfony2, de tests avec Selenium et une avant-première Temesis.<br />
SPIP sera de la partie pour inaugurer ce bal technique, servant autant à du site Web que de l&#8217;applicatif ou de la création d&#8217;<acronym title="Application Programming Interface">API</acronym>.</p>
<h4><acronym title="HyperText Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheets">CSS</acronym> et accessibilité</h4>
<ul>
<li>Date : mercredi après-midi</li>
<li>8 conférences</li>
</ul>
<p>On habille le Web avec des présentations d&#8217;HTML5, CSS3 mais également des outils d&#8217;amélioration de qualité (comme KBAccess, ou Tanaguru).<br />
La journée se terminera sur 2 conférences clé : l&#8217;intégration accessible de vidéos et l&#8217;<a href="http://2010.rmll.info/spip.php?article409&amp;lang=fr">accessibilité pour les non-lecteur</a>s. Oui, les non-lecteurs <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h4><acronym title="Content Management System">CMS</acronym> et gestion de contenu</h4>
<ul>
<li>Date : jeudi matin</li>
<li>6 conférences</li>
</ul>
<p>eZ Publish sera à l&#8217;honneur, aux côtés d&#8217;Automne, Typo3 et Joomla. Piwigo illustrera la gestion de contenu de photos et d&#8217;images.<br />
L&#8217;orientation est données aux cas pratiques : intégration de recherche à facette, optimisation de performances.</p>
<h4>Internet I/O</h4>
<ul>
<li>Date : jeudi après-midi</li>
<li>6 conférences</li>
</ul>
<p>À la fin de la demi-journée, vous saurez ce qu&#8217;il faut pour devenir votre propre hébergeur, de l&#8217;infrastructure matérielle jusqu&#8217;à l&#8217;accès Internet maitrisé.<br />
Une autre partie des conférences est dédiée à des outils d&#8217;extraction et d&#8217;accès à Internet, autrement qu&#8217;avec un navigateur Web.</p>
<h4>Matinée anglophone</h4>
<ul>
<li>Date : vendredi matin</li>
<li>3 conférences</li>
</ul>
<p>C&#8217;est un peu plus fourre-tout : <acronym title="Content Management System">CMS</acronym> Java avec <a href="http://lenya.apache.org/">Apache Lenya</a> (présenté par des membres de la fondation Apache), tests de montée en charge et outil de traduction collaborative par <a href="http://automattic.com/">Automattic</a>.</p>
<h4>Collaboratif, traduction et Open Data</h4>
<ul>
<li>Date : vendredi après-midi</li>
<li>6 conférences</li>
<li>1 table ronde</li>
</ul>
<p>Le clou du spectacle : traduction automatisée, réseau social décentralisé, collaborer à OpenStreetMap, gérer une communauté Open Source, Open Data et moteur de recherche décentralisé.</p>
<p>On terminera sur une table ronde dédiée à <strong>Open Data</strong>, afin de décrypter ensemble tous les intérêts à libérer ses données, créer de la richesse et apporter l&#8217;innovation jusqu&#8217;à la société civile ; un levier de croissance trop facilement oublié.</p>
<h3>On se voit sur place !</h3>
<p>Je serai sur place pendant toute la durée de la session Internet donc n&#8217;hésitez pas à nous interpeler, Nicolas ou moi.<br />
Le programme continue également en soirée, en aparté :</p>
<ul>
<li>mardi soir à <a href="http://www.laparcelle.fr">la Parcelle</a></li>
<li><a href="http://blog.temesis.com/post/2010/07/06/RMLL-2010-Bordeaux-c-est-parti">mercredi soir chez Élie</a> − c&#8217;est celui qui est plus beau en vrai que sur le Net, et c&#8217;est pas un <em>self-service</em></li>
<li><a href="http://blog.temesis.com/post/2010/07/06/RMLL-2010-Bordeaux-c-est-parti"></a>jeudi soir au <a href="http://2010.rmll.info/Le-repas-du-Libre.html">repas du libre</a></li>
<li>vendredi soir <a href="http://www.gotoresto.com/la-guinguette-chez-alriq">chez Alriq</a></li>
</ul>
<p>Vous pourrez y croiser entre autre (et dans le désordre) <a href="http://prendreuncafe.com">Nicolas Perriault</a>, <a href="http://ideance.net/">Sébastien Delorme</a>, <a href="http://david.larlet.fr/">David Larlet</a>, <a href="http://www.yab-le-o.com/">Mickaël Hoareau</a>, <a href="http://romy.tetue.net/">Romy Tetue</a>, <a href="http://temesis.com">Élie Sloïm</a>, <a href="http://frank.taillandier.free.fr/">Frank Taillandier</a>, <a href="http://www.denderello.com/">Dennis Benkert</a> et moi-même.</p>
<p>Je remercierai quand même mon employeur, <a href="http://www.clever-age.com/actualites/dernieres-actualites/autres-actualites/clever-age-participe-a-la-onzieme-edition-des-rencontres-mondiales-du-logiciel-libre.html">Clever Age, qui prend intégralement en charge mes jours de participation à cet évènement</a>. Participer à l&#8217;écosystème du libre sans se soucier de l&#8217;aspect financier est un confort très appréciable.</p>
<p>Pour un Internet libre !</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2010/rmll-2010/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>LESS + CSS + WordPress = WP-LESS</title>
		<link>http://case.oncle-tom.net/2009/less-css-wordpress-wp-less/</link>
		<comments>http://case.oncle-tom.net/2009/less-css-wordpress-wp-less/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 11:25:52 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[héritage]]></category>
		<category><![CDATA[less]]></category>
		<category><![CDATA[lessphp]]></category>
		<category><![CDATA[mixins]]></category>
		<category><![CDATA[objet]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[variables]]></category>
		<category><![CDATA[WP-LESS]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1435</guid>
		<description><![CDATA[LESS apporte ce qu'il manquait aux CSS : des variables, de l'injection de propriétés et des fonctions. Après son portage en PHP et un plugin Symfony, LESS débarque sur WordPress avec un plugin : WP-LESS. Il prend en charge tout le travail fastidieux, détecte les changements et génère les CSS à la volée.]]></description>
			<content:encoded><![CDATA[<p><a href="http://lesscss.org/">LESS</a> est une des briques qu&#8217;il manquait à <acronym title="Cascading Style Sheets">CSS</acronym>. Ce meta-langage apporte des fonctionnalités jusque là inédites telles que l&#8217;<strong>héritage</strong>, l&#8217;<strong>injection</strong> et les <strong>variables</strong>. <a href="http://leafo.net/lessphp/">lessphp</a> porte ces avancées en <acronym title="Pre-Hypertext Processing">PHP</acronym> et ajoute ses propres fonctionnalités.</p>
<p>Cet outil me paraît <strong>indispensable</strong> alors j&#8217;ai décidé de l&#8217;intégrer à WordPress : <a href="http://wordpress.org/extend/plugins/wp-less/"><acronym title="WordPress">WP</acronym>-LESS</a> est né.</p>
<p><img class="aligncenter size-full wp-image-1417" title="LESS CSS" src="http://case.oncle-tom.net/images/2009/08/less-logo.png" alt="LESS CSS" width="199" height="81" /></p>
<p><span id="more-1435"></span></p>
<h3>LESS en quelques mots (ou lignes de code)</h3>
<p>Pour mettre en exergue l&#8217;intérêt de LESS, je reprends un exemple officiel :</p>
<pre><code class="css">#defaults {
  @width: 960px;
  @color: black;
}
.article { color: #294366; }
.comment {
  width: #defaults[@width];
  color: .article['color'];
}</code></pre>
<p>Le source précédent utilise 3 principes :</p>
<ul>
<li>les <strong>variables</strong> (dont leur nom est préfixé par un @)</li>
<li>les <strong>namespaces</strong> (ici, #defaults) pour regrouper des propriétés</li>
<li>les <strong>accesseurs</strong> (pour obtenir la couleur de l&#8217;article au sein du commentaire)</li>
</ul>
<p>Une fois ce code compilé par LESS, la feuille de style générée se résume à ceci :</p>
<pre><code class="css">.article { color:#294366; }
.comment {
  width:960px;
  color:#294366;
}</code></pre>
<p>C&#8217;est simple et efficace. Surtout quand on sait que l&#8217;on peut effectuer des opérations mathématiques, y compris en utilisant les variables, la conception va se retrouver facilitée.</p>
<h3>L&#8217;intérêt de <acronym title="WordPress">WP</acronym>-LESS</h3>
<p><a href="http://wordpress.org/extend/plugins/wp-less/"><acronym title="WordPress">WP</acronym>-LESS</a> intègre le parseur <acronym title="Pre-Hypertext Processing">PHP</acronym>, <a href="http://leafo.net/lessphp/">phpless</a>, au sein de WordPress pour minimiser le travail à fournir.</p>
<p>Une fois activé, dès qu&#8217;il détecte un fichier comportant l&#8217;extension <code>.less</code>, il <strong>compilera automatiquement le fichier</strong> pour produire des <acronym title="Cascading Style Sheets">CSS</acronym> interprétables par les navigateurs Web. Pour des raisons de performances, cette compilation n&#8217;est effectuée que lorsque le fichier <code>.less</code> est modifié. Cela implique également qu&#8217;à chaque mise à jour de votre fichier <code>.less</code>, vous n&#8217;avez pas à vous soucier de compiler son équivalent <acronym title="Cascading Style Sheets">CSS</acronym>.</p>
<p>De nombreux <em>hooks</em> et <em>filtres</em> sont placées un peu partout dans le code pour permettre à tout développeur, créateur de thème ou bidouilleur de se fixer dessus sans avoir à modifier le code du plugin. Et dans les rares cas où ça ne suffirait pas, tout est extensible puisqu&#8217;il suffit d&#8217;hériter de l&#8217;objet WPLessPlugin pour parvenir à vos fins.<br />
Des tas de choses qu&#8217;on ne pourrait pas faire en simple PHP4 (message subliminal : WordPress doit abandonner PHP4).</p>
<p><acronym title="WordPress">WP</acronym>-LESS agit en toute <strong>transparence et simplicité</strong>.</p>
<a href="http://case.oncle-tom.net/images/2009/08/wp-less-repository.png"><img class="size-medium wp-image-1438" title="Arborescence du plugin WP-LESS" src="http://case.oncle-tom.net/images/2009/08/wp-less-repository-300x125.png" alt="Arborescence du plugin WP-LESS" width="300" height="125" /></a>
<h3>Quel avenir pour <acronym title="WordPress">WP</acronym>-LESS ?</h3>
<p>J&#8217;ai déjà en tête d&#8217;autres fonctions pour simplifier encore plus la vie :</p>
<ul>
<li>permettre l&#8217;<strong>intégration dans un thème</strong> en tant que dépendance externe pour permettre aux thémeurs de redistribuer <acronym title="WordPress">WP</acronym>-LESS sans avoir à activer le plugin</li>
<li>proposer des <em>helpers</em> pour ne pas avoir à passer par <em>wp_enqueue_stylesheet</em> (même si c&#8217;est la meilleure solution)</li>
<li>dissocier les fichiers <code>.less</code> des feuilles de style dans l&#8217;éditeur de thème avec une validation lors de l&#8217;enregistrement</li>
<li>afficher un <strong>tableau de bord</strong> montrant l&#8217;état des fichiers de cache tout en pouvant les purger</li>
</ul>
<p>Vous attendriez d&#8217;autres fonctionnalités de la part de ce plugin ?</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2009/less-css-wordpress-wp-less/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Ménage de printemps</title>
		<link>http://case.oncle-tom.net/2009/menage-printemps/</link>
		<comments>http://case.oncle-tom.net/2009/menage-printemps/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 18:06:59 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Personnel]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[blueprint]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css2]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[performances]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[webdesign]]></category>
		<category><![CDATA[yslow]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1345</guid>
		<description><![CDATA[J'avais besoin de changer de thème graphique ! Découvrez les besoins, les critères d'exigence et de qualité. Je présente également la vie d'un intégrateur sans compatibilité avec Internet Explorer 6, mes déconvenues avec WP Cron et les manipulations de WordPress pour parvenir à mes fins.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-thumbnail wp-image-1347" title="WordPress Logo" src="http://case.oncle-tom.net/images/2009/04/wordpress-badge-138x138.png" alt="WordPress Logo" width="138" height="138" /></p>
<p>Je me décide à passer un coup de peinture sur ce blog quasiment 2 ans après le <a href="http://case.oncle-tom.net/2007/08/15/css-summer-refresh-2007/"><acronym title="Cascading Style Sheets">CSS</acronym> Summer Refresh</a> organisé par <a href="http://alsacreations.com/">Alsacréations</a>. À vrai dire, j&#8217;avais ce projet dans les cartons depuis septembre 2008 mais le plus difficile a été de trouver le talent graphique. C&#8217;était également l&#8217;occasion de dire au revoir aux navigateurs Web de seconde zone, à savoir Internet Explorer 7 et moins.</p>
<p><span id="more-1345"></span></p>
<h3>Le besoin</h3>
<p>Mon besoin était le suivant :</p>
<ul>
<li><strong>Thème graphique</strong>
<ul>
<li>durable et peu lassant</li>
<li>usage de transparence</li>
<li>toujours sur des tons marrons</li>
<li>inspire la modernité tout comme le côté rustique et soucieux de la nature</li>
<li>structure en grille pour intégrer avec <a href="http://blueprintcss.org/">Blueprint</a></li>
</ul>
</li>
<li><strong>Fonctionnalités</strong>
<ul>
<li>intégration d&#8217;un <em>lifestream</em> (intégré entre temps)</li>
<li>intégration de <a href="http://feedburner.com/">Feedburner</a> via son <a href="http://code.google.com/intl/fr/apis/feedburner/awareness_api.html"><acronym title="Application Programming Interface">API</acronym> Awareness</a></li>
<li>intégration d&#8217;un bandeau <a href="http://flickr.com/">Flickr</a> qui s&#8217;étend sur toute la largeur de l&#8217;écran, peu importe la résolution employée</li>
<li>utilisation du blog comme vitrine : suppression de ma dernière page <acronym title="HyperText Markup Language">HTML</acronym> manuelle (autrefois accessible sur <a href="http://oncle-tom.net/">oncle-tom.net</a>)</li>
</ul>
</li>
<li><strong>Compatibilité</strong>
<ul>
<li>navigateurs modernes &#8230; c&#8217;est à dire rien en dessous d&#8217;Internet Explorer 8</li>
<li>intégration avec <acronym title="HyperText Markup Language">HTML</acronym> 5</li>
<li>pas d&#8217;utilisation de <acronym title="Graphics Interchange Format">GIF</acronym> mais de <acronym title="Portable Network Graphics">PNG</acronym> 6 et <acronym title="Portable Network Graphics">PNG</acronym> 24</li>
</ul>
</li>
<li><strong>Autre</strong>
<ul>
<li>soucis de performance (peu d&#8217;éléments graphiques, utilisation des <em>sprites</em>)</li>
</ul>
</li>
</ul>
<p>Finalement c&#8217;est <a href="http://leslyg.com/">Lesly</a> qui s&#8217;est chargé de la création graphique. Vous pouvez d&#8217;ailleurs consulter la <a href="http://leslyg.com/work/blog-de-thomas-parisot-oncle-tom/">maquette graphique originale sur son portfolio</a>. Quant à moi, j&#8217;ai réalisé toute l&#8217;intégration <acronym title="Cascading Style Sheets">CSS</acronym>/<acronym title="HyperText Markup Language">HTML</acronym> dans WordPress.</p>
<h3>L&#8217;intégration</h3>
<p>Tout d&#8217;abord, qu&#8217;est ce qui a changé par rapport à la maquette ?</p>
<ul>
<li><strong>les polices de caractère</strong> : hormis le titre, seules des polices standards ont été employées. J&#8217;attendrai le support des polices personnalisées en <acronym title="Cascading Style Sheets">CSS</acronym> 3 à moins de partir sur une solution à base de <acronym title="Scalable Vector Graphics">SVG</acronym> (encore que j&#8217;ai des doutes sur l&#8217;accessibilité d&#8217;une telle méthode) ;</li>
<li><strong>moins d&#8217;éléments graphiques</strong> : les punaises, les effets papiers ont été supprimés. Rien que le papier et le scotch de la partie &laquo;&nbsp;À propos&nbsp;&raquo; pesaient plus de 60Ko ;</li>
<li><strong>abandon temporaire du <em>featured content</em></strong> : les solutions actuelles étaient trop lourdes et j&#8217;étais trop impatient pour passer quelques heures de plus &#8230; donc c&#8217;est temporaire <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>l&#8217;<strong>ajout des pages en lieu et place du fil d&#8217;ariane</strong> : j&#8217;en avais besoin pour présenter différents contenus statiques ;</li>
<li><strong>le pied de page</strong> : peu de widgets WordPress offrent un degré de personnalisation suffisant pour arriver à ce résultat. C&#8217;est donc temporisé là aussi en attendant de trouver chaussure à mon pied <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
<div id="attachment_1346" class="wp-caption aligncenter" style="width: 160px"><a href="/images/2009/04/caseoncle-tomnet-oncletom-wood.png"><img class="size-medium wp-image-1346" title="caseoncle-tomnet-oncletom-wood" src="http://case.oncle-tom.net/images/2009/04/caseoncle-tomnet-oncletom-wood-150x300.png" alt="Aperçu pleine page" width="150" height="300" /></a><p class="wp-caption-text">Aperçu pleine page</p></div>
<p>Pour le reste je me suis fait plaisir avec notamment l&#8217;utilisation de coins arrondis (<em>border-radius</em>) basés sur les implémentations de Gecko et Webkit. Désolé pour les utilisateurs d&#8217;autres navigateurs car j&#8217;en ai usé et abusé afin d&#8217;éviter l&#8217;utilisation d&#8217;images.</p>
<p>J&#8217;ai également joué avec l&#8217;<strong><acronym title="Application Programming Interface">API</acronym> de WordPress</strong> pour générer les vignettes des articles. Je sais bien qu&#8217;on peut définir des tailles d&#8217;images mais ça ne vaut que pour les médias nouvellement mis en ligne. J&#8217;en ai profité pour n&#8217;afficher dans le listing que l&#8217;extrait du billet. Pas l&#8217;intro, seulement l&#8217;extrait (<em>excerpt</em>). J&#8217;ai lu récemment un article qui parlait de la chose et ça m&#8217;a paru plus approprié. Je peux désormais écrire le texte qui me convient pour attirer la lecture vers un article sans pour autant que ça ait de répercution sur son contenu une fois affiché en pleine page.</p>
<p>Je suis en revanche toujours dubitatif sur l&#8217;<acronym title="Application Programming Interface">API</acronym> de <acronym title="WordPress">WP</acronym> Cron : ma tâche a beau être enregistrée et planifiée, j&#8217;ai l&#8217;impression qu&#8217;elle ne s&#8217;exécute jamais &#8230; contrairement aux recherches de mises à jour de plugins &amp; cie. <span style="text-decoration: line-through;">Quelqu&#8217;un a déjà joué avec et rencontré pareil problème ?</span><br />
<strong>Mise à jour</strong> : j&#8217;ai résolu le problème et détaillé la marche à suivre dans l&#8217;article <a href="http://case.oncle-tom.net/2009/05/14/affichage-personnalise-abonnes-feedburner/">affichage personnalisé de ses lecteurs Feedburner</a>. Je planifiais une fonction et non un <em>hook</em>. Cela fonctionnait mais ne produisait fatalement pas de résultat <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Au final je n&#8217;ai même pas eu à placer la moindre ligne de JavaScript : tout est fait à partir de sélecteurs <acronym title="Cascading Style Sheets">CSS</acronym>. Mon seul regret : l&#8217;absence de sélecteur adjacent &#8230; &laquo;&nbsp;précédent&nbsp;&raquo;. Pour le menu du haut, je voulais pouvoir styler les éléments de menus ayant comme élément suivant une liste d&#8217;élément (<code>&lt;ul&gt;</code>).</p>
<h3>Au final</h3>
<p>J&#8217;ai mis à peu près 2 jours pour tout intégrer et optimiser. Je n&#8217;ai pas encore tenté l&#8217;optimisation à coup de <acronym title="Portable Network Graphics">PNG</acronym> 8 grâce aux quelques Ko gagnés avec <a href="http://pmt.sourceforge.net/pngcrush/">pngcrush</a>. Il faudrait également que je réunisse quelques images dans un seul et même sprite pour gagner encore quelques dizièmes de seconde en temps de chargement.</p>
<div id="attachment_1349" class="wp-caption aligncenter" style="width: 414px"><img class="size-full wp-image-1349" title="Rapport YSlow" src="http://case.oncle-tom.net/images/2009/04/caseoncle-tomnet-yslow.png" alt="Rapport YSlow" width="404" height="398" /><p class="wp-caption-text">Rapport YSlow</p></div>
<p>J&#8217;en ai profité pour tester l&#8217;utilisation de <em>mod_expires</em> et <em>mod_gzip</em> chez OVH en mutualisé (avant de tout migrer sur serveur dédié) : ça marche plutôt très bien. Si ça vous intéresse, je peux en faire un billet dédié. D&#8217;ici là, n&#8217;hésitez pas à bouquiner <a href="http://case.oncle-tom.net/2008/07/15/high-performance-web-sites/">High Performances Web Sites</a> qui reste une référence en la matière. J&#8217;attends d&#8217;ailleurs sa suite avec impatience : <em>Even Faster Web Sites: Essential Knowledge for Frontend Engineers</em>.</p>
<p>Quoiqu&#8217;il en soit, le fait d&#8217;avoir eu la pleine utilisation des sélecteurs <acronym title="Cascading Style Sheets">CSS</acronym> a été géniale : la vie est grandement facilitée. <em>inline-block</em> évite de nombreuses bidouilles à base de flottants. J&#8217;ai hâte qu&#8217;une version de <em>Blueprint</em> sorte en se basant uniquement sur les sélecteurs avancés et non des flottants pour disposer de mises en forme plus complexes tout en étant facile d&#8217;accès.</p>
<p>Si vous rencontrez des problèmes, surtout n&#8217;hésitez pas à les signaler, par le <a href="#respond">biais des commentaires</a> ou par <a href="/contact/">email</a> <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>En attendant, je retourne sur mon <a href="http://case.oncle-tom.net/2009/02/24/faire-part-de-naissance/">projet éprouvant du moment</a> !</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2009/menage-printemps/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Everything You Know About CSS Is Wrong!</title>
		<link>http://case.oncle-tom.net/2009/everything-you-know-about-css-is-wrong/</link>
		<comments>http://case.oncle-tom.net/2009/everything-you-know-about-css-is-wrong/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 06:00:44 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[critique]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[grilles]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[livre]]></category>
		<category><![CDATA[sitepoint]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1287</guid>
		<description><![CDATA[En bon français : &#171;&#160;tout ce que vous savez des CSS est faux !&#160;&#187;. L&#8217;heure n&#8217;est pas à la déprime mais à la lecture de cet ouvrage par le site SitePoint. Il est écrit en anglais par Rachel Andrew et Kevin Yank. Ce titre fortement accrocheur à la limite de l&#8217;injure annonce la couleur : [...]]]></description>
			<content:encoded><![CDATA[<p>En bon français : &laquo;&nbsp;<strong>tout ce que vous savez des <acronym title="Cascading Style Sheets">CSS</acronym> est faux</strong> !&nbsp;&raquo;. L&#8217;heure n&#8217;est pas à la déprime mais à la lecture de cet ouvrage par le site <a href="http://sitepoint.com">SitePoint</a>. Il est écrit en anglais par Rachel Andrew et Kevin Yank.</p>
<p><img class="aligncenter size-medium wp-image-1288" title="Everything You Know About CSS Is Wrong" src="http://case.oncle-tom.net/images/2009/01/everything-you-know-about-css-is-wrong-300x300.jpg" alt="Everything You Know About CSS Is Wrong" width="300" height="300" /></p>
<p>Ce titre fortement accrocheur à la limite de l&#8217;injure annonce la couleur : l&#8217;ouvrage est censé vous expliquer que les techniques employées aujourd&#8217;hui ne sont que du bricolage et qu&#8217;on peut faire la même chose en plus propre et plus simple.</p>
<p>En route pour cette saine lecture &#8230; ou pas.<br />
<span id="more-1287"></span></p>
<h3>Chapitrage</h3>
<p><a href="http://www.sitepoint.com/books/csswrong1/">Everything You Know About <acronym title="Cascading Style Sheets">CSS</acronym> Is Wrong!</a> est découpé en 5 chapitres. Cela représente un volume d&#8217;une petite centaine de pages. En voici la structure :</p>
<ol>
<li>The Problem with <acronym title="Cascading Style Sheets">CSS</acronym></li>
<li><acronym title="Cascading Style Sheets">CSS</acronym> Table Layout</li>
<li><acronym title="Cascading Style Sheets">CSS</acronym> Table Solutions</li>
<li>Considering Older Browsers</li>
<li>The Road Ahead</li>
</ol>
<p>Si vous commencez à flairer le mauvais plan, vous n&#8217;avez pas tout à fait tort.</p>
<h3>display: table-cell au lieu de float/clear/margin</h3>
<p>Tel serait le <em>credo</em> de l&#8217;ouvrage. C&#8217;est en teneur ce qui y est distillé, ni plus ni moins.</p>
<p>Quand on y repense, aujourd&#8217;hui <strong>on utilise vraiment des techniques à la noix</strong> pour positionner les flux, pour imiter des colonnes de taille égale. Tout ça pourquoi ? Parce que le navigateur dominant du marché s&#8217;appelle Internet Explorer 6/7 et ne permet pas d&#8217;utiliser l&#8217;attribut <acronym title="Cascading Style Sheets">CSS</acronym> display: table-cell.<br />
Son utilité ? Donner à l&#8217;élément concerné le comportement d&#8217;un tableau : des cellules de hauteur égale et des colonnes notamment.</p>
<p>Les 2 premiers chapitres sont à ce titre très démonstratifs puisque simplement, on apprend à construire un habillage classique à 2 colonnes avec cette technique. Mais, à mon avis, le chapitre 3 est entièrement à jeter.</p>
<p>Le livre commence en nous expliquant qu&#8217;on utilise des techniques de barbare pour le rendu. Sauf que celles proposées pour palier aux lacunes de cette mise en page en tableaux ne valent pas beaucoup mieux : pas de solution générique possible, simulation de colspan et rowspan laborieuse &#8230; si j&#8217;ai été convaincu par la présentation en grille, je l&#8217;ai en revanche moins été par ces solutions proposées.</p>
<p>Le chapitre 4 explique avec plein de sous-entendus qu&#8217;Internet Explorer 6 et 7 &#8230; ben il faut arrêter. En tous cas pour utiliser le display: table-cell. Je pense que même sans cette technique on avait déjà envie de les balancer mais bon. Ça sera un argument de plus pour prôner cette solution.</p>
<p>Le chapitre 5, <em>The Road Ahead</em>, propose une présentation maintes fois vue et revue de l&#8217;avenir avec CSS3. Ça fait office de piqûre de rappel concernant le module <em>templates</em> et  <em>grille</em> notamment.</p>
<div id="attachment_1289" class="wp-caption aligncenter" style="width: 459px"><a href="http://css.alsacreations.com/xmedia/exemples/display/txt-2cols.png"><img class="size-full wp-image-1289" title="Texte 2 colonnes avec display: table-cell" src="http://case.oncle-tom.net/images/2009/01/txt-2cols.png" alt="Texte 2 colonnes avec display: table-cell" width="449" height="251" /></a><p class="wp-caption-text">Texte 2 colonnes avec display: table-cell</p></div>
<h3>Pourquoi je ne vous recommande pas son achat ?</h3>
<p>Parce qu&#8217;au final on se trouve face à <em>gros article</em> doublé d&#8217;un titre bon pour écouler des exemplaires. Il aurait pu s&#8217;appeler &laquo;&nbsp;<em>comment présenter en grille sans tableaux et sans flottants</em>&nbsp;&raquo; par exemple.</p>
<p>Sans vouloir relancer le fumeux débat du  Web contre les livres, je pense qu&#8217;il y a des articles sur display: table-cell plus courts, moins chers et tout à fait valables (<a href="http://www.digital-web.com/articles/everything_you_know_about_CSS_Is_wrong/">y compris leur article de présentation</a>), notamment sur <a href="http://css.alsacreations.com/Faire-une-mise-en-page-sans-tableaux/Mise-en-page-CSS-avancee-grace-a-la-propriete-display">Alsacréations</a>.<br />
Pour moitié prix, le contenu aurait pu passer. À 30$, j&#8217;en attends davantage &#8230;</p>
<p>Je recommande avec beaucoup plus de ferveur l&#8217;indémodable <a href="http://case.oncle-tom.net/2007/12/11/critique-transcender-css-sublimez-design-web/">Transcender <acronym title="Cascading Style Sheets">CSS</acronym></a> d&#8217;Andy Clarke.</p>
<p>Un dernier point toutefois : je ne suis pas convaincu qu&#8217;un <strong>rendu à l&#8217;identique au pixel près</strong> soit une solution d&#8217;avenir. Il ne faut pas espérer avoir un rendu identique à la maquette ni identique sur tous les naivgateurs (notamment au niveau de la colorimétrie). Je crois davantage à un support de fonctionnalités et des solutions alternatives pour les navigateurs ne supportant pas ces dites-fonctionnalités. De même qu&#8217;on n&#8217;a pas le même rendu de couleurs pour les téléviseurs (y compris HD), il est utopique de vouloir la même chose d&#8217;un site.</p>
<p>Depuis quelques mois je ne recommande plus à mes clients de supporter <acronym title="Internet Explorer 6">IE6</acronym> et ce, malgré ses 20% de parts de marché. Je préfère largement proposer une solution dégradée, toujours fonctionnelle mais moins jolie.<br />
Cette année je refonds le thème de ce blog et je ne compte pas supporter ni <acronym title="Internet Explorer 6">IE6</acronym> ni IE7. Votre adoption d&#8217;autres navigateurs aide mais il faut montrer l&#8217;exemple.</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2009/everything-you-know-about-css-is-wrong/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Développement efficace avec les frameworks CSS</title>
		<link>http://case.oncle-tom.net/2008/developpement-efficace-frameworks-css/</link>
		<comments>http://case.oncle-tom.net/2008/developpement-efficace-frameworks-css/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 06:00:08 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[blueprint]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[parisweb]]></category>
		<category><![CDATA[rythme vertical]]></category>
		<category><![CDATA[xhtml]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1211</guid>
		<description><![CDATA[J&#8217;ai eu peur il y a 2 semaines en arrivant à Paris-Web 2008 : en discutant avec plusieurs personnes, il se trouve que peu d&#8217;entre elles connaissaient les frameworks CSS. Je craignais de n&#8217;attirer personne avec ce sujet lors des ateliers du samedi. Les frameworks CSS ont été mentionnés la première fois dans la conférence [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1214" title="Logo Blueprint" src="http://case.oncle-tom.net/images/2008/11/blueprint-logo.png" alt="" width="340" height="82" /></p>
<p>J&#8217;ai eu peur il y a 2 semaines en arrivant à <a href="http://case.oncle-tom.net/2008/11/20/paris-web-2008-webdesign-qualite-standards/">Paris-Web 2008</a> : en discutant avec plusieurs personnes, il se trouve que peu d&#8217;entre elles connaissaient les <em>frameworks</em> <acronym title="Cascading Style Sheets">CSS</acronym>. Je craignais de n&#8217;attirer personne avec ce sujet lors des <a href="http://www.paris-web.fr/2008/-samedi-15-novembre-technique-">ateliers du samedi</a>.</p>
<p>Les <em>frameworks</em> <acronym title="Cascading Style Sheets">CSS</acronym> ont été mentionnés la première fois dans la conférence <a href="http://www.wait-till-i.com/2008/10/31/working-in-the-now/">Working in the Now</a> (<a title="Visualiser la présentation Working in the Now de Christian Heilmann" href="http://www.slideshare.net/cheilmann/working-in-the-now-presentation">visualiser la présentation</a>). Au final, on n&#8217;était pas loin de faire salle comble avec plus d&#8217;une vingtaine de participants à vue de nez.</p>
<p>Une petite scéance de rattrapage s&#8217;impose <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><span id="more-1211"></span></p>
<h3>Pourquoi avoir choisi ce sujet ?</h3>
<p>J&#8217;ai lu un article sur <a href="http://www.biologeek.com/ergonomie,informatique/l-importance-du-rythme-vertical-en-design-css/">l&#8217;importance du rythme vertical</a> l&#8217;an dernier sur <a href="http://www.biologeek.com">Biologeek</a> et ça m&#8217;a sensibilisé au fait qu&#8217;on pouvait rendre la lecture d&#8217;un site tout simplement en rendant prédictible la position du texte.</p>
<p>Entre temps j&#8217;ai également lu l&#8217;excellent <a href="http://case.oncle-tom.net/2007/12/11/critique-transcender-css-sublimez-design-web/">Transcender <acronym title="Cascading Style Sheets">CSS</acronym></a> d&#8217;<a href="http://www.stuffandnonsense.co.uk">Andy Clarke</a>. J&#8217;y ai été sublimé par des présentations de sites totalement en grille.</p>
<p>Depuis je suis devenu fan de <a href="http://www.blueprintcss.org/">Blueprint <acronym title="Cascading Style Sheets">CSS</acronym></a> (je crois que ça s&#8217;est remarqué lors de mon intervention <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ). J&#8217;ai commencé à l&#8217;utiliser sur des projets personnels puis dans un cadre professionnel. J&#8217;utilisais déjà <a href="http://www.symfony-project.org">symfony</a> comme framework <acronym title="Pre-Hypertext Processing">PHP</acronym> et <a href="http://jquery.com">jQuery</a> comme framework JavaScript alors pourquoi pas Blueprint ?</p>
<p>Comme le suggérait très justement <a href="http://www.wait-till-i.com">Christian Heilmann</a> dans sa présentation, l&#8217;utilisation d&#8217;outils déjà existants est nécessaire pour réduire les coûts de production. C&#8217;était déjà un bon alibi mais je les apprécie aussi parce qu&#8217;on gagne un temps fou ! On se concentre sur le code métier, pas le reste.</p>
<h3>La présentation</h3>
<p>Je n&#8217;en dis pas plus, je vous laisse lire la présentation. Ayez toutefois en tête qu&#8217;en vrai elle dure facilement 1h.</p>
<div style="text-align:center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=pariswebdeveloppementefficaceframeworkscss-1226764594180788-9&amp;stripped_title=dveloppement-efficace-avec-les-frameworks-css-presentation" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=pariswebdeveloppementefficaceframeworkscss-1226764594180788-9&amp;stripped_title=dveloppement-efficace-avec-les-frameworks-css-presentation" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<h3>Ce qu&#8217;il faut en retenir</h3>
<p>J&#8217;ai rencontré 2 types de réactions lorsque j&#8217;ai parlé des frameworks : les enthousiastes et les réfractaires.</p>
<p>Je ne reviens pas sur les enthousiastes : il suffit de lire ma présentation. Les atouts les ont clairement séduit.<br />
Je m&#8217;intéresserai plutôt aux réfractaires. Assez paradoxalement, ce n&#8217;est pas dans la salle que je les ai eu mais en dehors. Les principaux arguments étaient :</p>
<ul>
<li>ça rajoute des kilo-octets superflus</li>
<li>on perd le contrôle de notre code</li>
<li>j&#8217;utilise déjà le mini-framework d&#8217;un collègue ou qui existait dans mon entreprise avant que j&#8217;arrive</li>
</ul>
<p>Ces arguments sont tout à fait acceptables &#8230; mais ça dépend dans quel contexte.</p>
<div id="attachment_1215" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-1215" title="Exemple de mise en forme en grille" src="http://case.oncle-tom.net/images/2008/11/blueprint-sample.png" alt="Exemple de mise en forme en grille" width="500" height="226" /><p class="wp-caption-text">Exemple de mise en forme en grille</p></div>
<p>Les sites à la recherche de performances exceptionnelles, ceux pour qui un Ko supprimé économise plusieurs Go de bande-passante par jour &#8230; oui ceux-là ont un grand intérêt à réfléchir à l&#8217;adoption d&#8217;un <em>framework</em>, aussi compressé qu&#8217;il soit.<br />
Je ne me fais pas de soucis pour eux : en général ils ont leur propre <em>framework</em>, totalement adapté à leur besoin. Cependant ça n&#8217;empêche pas d&#8217;aller prendre des idées ailleurs et de découvrir de nouveaux concepts. Puis de les intégrer.</p>
<p>Lorsqu&#8217;on adopte un outil de développement rapide (RAD), la conception ne se fait plus par rapport à nos habitudes mais par rapport à des <strong>principes établis</strong>. On ne fait plus forcément comme on veut mais les meilleurs <em>frameworks</em> disposent de fonctionnalités répondant à cette problématique. Le <a href="http://www.jdclayton.com/blueprints_compress_a_walkthrough.html"><em>compressor</em></a> de Blueprint en est un parfait exemple.<br />
Il permet de construire une version de Blueprint adaptée à son besoin, inclut des feuilles de notre choix et compresse le tout en un seul fichier prêt à la mise en production.</p>
<p>Maintenant l&#8217;avantage d&#8217;un <em>framework</em> c&#8217;est qu&#8217;une <strong>communauté</strong> ou un groupe de personnes compétentes en ont la gestion. Ces mainteneurs produisent une documentation, des spécifications et un code suffisamment compréhensible à lire. Ce n&#8217;est pas forcément le cas de Joe le développeur à qui on aura demandé 36 choses en même temps.<br />
Je fais davantage confiance à un outil éprouvé avec succès sur des milliers de projets qu&#8217;un outil développé sur un coin de bureau, malgré toute la bonne volonté de son concepteur.<br />
C&#8217;est également un risque certes mais un bon outil délaissé aura tout de même le mérite de fonctionner &#8230; et d&#8217;avoir davantage de chances de trouver un repreneur.</p>
<p>Une remarque intéressante a également émergé de l&#8217;atelier : faut-il utiliser un <em>framework</em> <acronym title="Cascading Style Sheets">CSS</acronym> avant ou après que la créa graphique ait été établie ?<br />
Je réitère ma réponse : <strong>l&#8217;idéal est que tout soit pris en charge le plus tôt possible</strong>. Autrement dit, intégrer les contraintes du <em>framework</em> dès la conception graphique est un gros atout. Le découpage de la maquette n&#8217;en sera que facilité et ça évitera tout bricolage.<br />
Certains outils l&#8217;ont d&#8217;ailleurs bien compris en proposant des supports pour graphistes au format PSD, Visio, Fireworks etc.</p>
<div id="attachment_1213" class="wp-caption aligncenter" style="width: 310px"><a href="http://case.oncle-tom.net/images/2008/11/960-sketch-sheets.png"><img class="size-medium wp-image-1213" title="Feuilles de dessin pour 960 Grid System" src="http://case.oncle-tom.net/images/2008/11/960-sketch-sheets-300x232.png" alt="Feuilles de dessin pour 960 Grid System" width="300" height="232" /></a><p class="wp-caption-text">Feuilles de dessin pour 960 Grid System</p></div>
<h3>Conclusion</h3>
<p>Quoiqu&#8217;il en soit, les <em>frameworks</em> <acronym title="Cascading Style Sheets">CSS</acronym> sont à mon avis promis à un bel avenir dès lors que les critères d&#8217;industrialisation auront débarqué au sein des agences Web.</p>
<p>Aujourd&#8217;hui une petite agence a tout à gagner à maîtriser de tels outils et à annoncer qu&#8217;elle développera mieux, plus vite et moins cher. Le prix ne fait pas tout : ce sont les <strong>outils et la qualité du développement</strong>. Tous les <em>frameworks</em> cités sont également des logiciels libres.</p>
<p>J&#8217;espère que cet aperçu rapide aura ouvert les yeux à certains d&#8217;entre vous. Je suis preneur de vos retours, surtout en entreprise. Ça vaut également pour celles et ceux qui ne sont toujours pas convaincu de l&#8217;intérêt des <em>frameworks</em> <acronym title="Cascading Style Sheets">CSS</acronym> <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>Remarque</strong> : il y avait 2 ateliers complémentaires à Paris-Web :</p>
<ul>
<li><a href="http://css.mammouthland.net/parisweb/optimisation-css.php">Optimiser ses <acronym title="Cascading Style Sheets">CSS</acronym></a></li>
<li><a href="http://romy.tetue.net/spip.php?article555">Cascade et héritage : concevoir, organiser, optimiser et maintenir ses feuilles de style</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/developpement-efficace-frameworks-css/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Widget Jaiku pour Netvibes : présentation et bilan du développement</title>
		<link>http://case.oncle-tom.net/2008/widget-jaiku-netvibes-presentation-bilan-developpement/</link>
		<comments>http://case.oncle-tom.net/2008/widget-jaiku-netvibes-presentation-bilan-developpement/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 05:00:37 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dashboard]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[jaiku]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[macosx]]></category>
		<category><![CDATA[micro-blogs]]></category>
		<category><![CDATA[netvibes]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[widget]]></category>
		<category><![CDATA[xhtml]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1070</guid>
		<description><![CDATA[J&#8217;ai publié il y a quelques semaines un widget Jaiku dans l&#8217;écosystème Netvibes. Autrement dit, on peut désormais interagir avec le sous-employé Jaiku depuis son compte Netvibes en levant à peine le petit doigt. La réalisation de ce widget était pour moi l&#8217;occasion de réaliser mon premier widget utilisant la plateforme UWA : un développement [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://case.oncle-tom.net/images/2008/06/logo-jaiku.png"><img class="aligncenter size-full wp-image-938" title="Logo Jaiku" src="http://case.oncle-tom.net/images/2008/06/logo-jaiku.png" alt="" width="89" height="73" /></a></p>
<p>J&#8217;ai publié il y a quelques semaines un <a title="widget Jaiku pour Netvibes" href="http://eco.netvibes.com/widgets/241591/jaiku">widget Jaiku</a> dans l&#8217;<a href="http://eco.netvibes.com">écosystème Netvibes</a>. Autrement dit, on peut désormais interagir avec le sous-employé Jaiku depuis son compte Netvibes en levant à peine le petit doigt.</p>
<p>La réalisation de ce widget était pour moi l&#8217;occasion de réaliser mon premier widget utilisant la plateforme <acronym title="Universal Widget API">UWA</acronym> : un développement rendu compatible pour plusieurs plateformes dont <a href="http://igoogle.com">iGoogle</a>, <a href="http://www.apple.com/downloads/dashboard/">MacOS X Dashboard</a>, <a href="http://live.com">Windows Live</a> etc.</p>
<p><span id="more-1070"></span></p>
<h3>Présentation du widget Jaiku pour Netvibes</h3>
<p>Avant de rentrer dans les détails techniques, faisons ensemble un petit tour de ce qu&#8217;est capable de faire le widget Jaiku. Rien de bien méchant puisqu&#8217;il fait ce qu&#8217;on veut : lire et envoyer les messages. Faut savoir rester simple <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<div id="attachment_1082" class="wp-caption aligncenter" style="width: 290px"><img class="size-full wp-image-1082" title="Jaiku pour Netvibes" src="http://case.oncle-tom.net/images/2008/08/jaiku-netvibes.png" alt="Jaiku pour Netvibes" width="280" height="450" /><p class="wp-caption-text">Widget Jaiku pour Netvibes</p></div>
<p>Je ne me cacherai pas que je me suis largement inspiré du widget Twitter pour Netvibes au niveau de la présentation tout en ajoutant ma touche personnelle.</p>
<p>L&#8217;écran de connexion accueille directement avec des champs identifiant et mot de passe pour faciliter son utilisation. Pas besoin d&#8217;aller fouiller dans les options. Un petit confort on dira.</p>
<p>L&#8217;entête contient ce qu&#8217;il faut pour envoyer des messages : votre lieu de présence et le champ de saisie. Le compteur de texte se met à jour à chaque caractère saisi et surtout, votre saisie n&#8217;est pas bloquée une fois que vous atteignez la limite. Il n&#8217;y a rien de plus pénible que ça.</p>
<p><strong>Le gros du morceau réside dans les onglets</strong> : pour une fois vous pouvez facilement naviguer d&#8217;une ligne de temps à une autre. Choisissez les messages de vos contacts, les vôtres (un peu narcissique non ?) ou encore les messages publics.<br />
Les 3 onglets sont paginés à la convenance de l&#8217;utilisateur, de 1 à 20 messages par page.</p>
<p>J&#8217;ai ensuite agrémenté de plusieurs fonctionnalités que j&#8217;apprécie à l&#8217;usage (à vous de me dire si c&#8217;est aussi le cas) :</p>
<ul>
<li><strong>possibilité de répondre à un message</strong> en pré-remplissant le champ de saisie avec ce qu&#8217;il faut (et ce que l&#8217;<acronym title="Application Programming Interface">API</acronym> Jaiku permet de faire &#8230;)</li>
<li>icône signalant l&#8217;<strong>origine des messages</strong> affichés (flux <acronym title="Really Simple Syndication">RSS</acronym>, Twitter, Last.fm etc.)</li>
<li><strong>filtrage de ses propres messages</strong> : vos messages n&#8217;apparaîtront pas dans la ligne de temps des contacts (ce qui en soit n&#8217;est pas plus mal)</li>
<li><strong>formattage des messages</strong> avec une meilleure reconnaissance de <acronym title="Uniform Resource Locator">URL</acronym> que le widget Twitter et surtout, une reconnaissance des noms d&#8217;utilisateurs (@utilisateur) et des noms de canaux (#canal) &#8230; vous permettant de leur répondre en cliquant sur leur nom</li>
</ul>
<p>Il resterait encore pas mal de choses à faire mais on arrive malheureusement assez rapidement aux limites des 2 services.</p>
<h3>L&#8217;<acronym title="Application Programming Interface">API</acronym> Jaiku</h3>
<p>L&#8217;<a href="http://devku.org/docs"><acronym title="Application Programming Interface">API</acronym> Jaiku</a> est très bien mais un peu <strong>chiche en services</strong>.</p>
<p>Le nombre de flux en récupération est suffisant : contacts, messages, informations personnelles.<br />
En revanche les méthodes d&#8217;envoi sont limitées et pour cause, il n&#8217;y en a qu&#8217;une : envoyer un message.</p>
<p>Il ne manque pas grand chose pour qu&#8217;on puisse tout faire :</p>
<ul>
<li>obtention de la liste des icônes personnalisées</li>
<li>préciser à quel message on adresse une réponse (pour éviter de casser les discussions)</li>
<li>une gestion de <em>messages privés</em> (et les flux qui vont bien)</li>
<li>une <acronym title="Application Programming Interface">API</acronym> qui ne souffre pas d&#8217;autant de délai &#8230; parfois il faut attendre 3 heures avant d&#8217;avoir un flux actualisé. Pas pratique pour de la messagerie en temps quasi-réel</li>
</ul>
<p>Ces demandes ont été faites mais bon, il faudra attendre la <a href="http://www.jaiku.com/blog/2008/08/18/from-the-dev-corner-an-under-the-hood-preview-of-our-new-engine/">relance de Jaiku avec Google App Engine</a> &#8230; très bientôt visiblement.</p>
<h3>Et du côté de Netvibes ?</h3>
<p>Le développement du widget repose sur l&#8217;<acronym title="Application Programming Interface">API</acronym> <acronym title="Universal Widget API">UWA</acronym> de Netvibes et donc par conséquent, c&#8217;est du développement 99% JavaScript.</p>
<p>Heureusement tout n&#8217;est pas à faire puisqu&#8217;<acronym title="Universal Widget API">UWA</acronym> fournit une base d&#8217;outils et quelques fonctionnalités natives comme la pagination ou les onglets.</p>
<h3>Quels avantages à utiliser Netvibes <acronym title="Universal Widget API">UWA</acronym> ?</h3>
<p>La <a href="http://dev.netvibes.com/doc/universal_widget_api">spécification <acronym title="Universal Widget API">UWA</acronym></a> permet donc à partir d&#8217;un <strong>développement unique de le porter sur d&#8217;autres plateformes de blogs</strong> en un minimum d&#8217;efforts (très souvent aucun). Il faut savoir qu&#8217;à chaque plateforme de widget il y a une manière de développer différente.</p>
<p>Alors plutôt que de parier sur un cheval, avec <acronym title="Universal Widget API">UWA</acronym>, on peut parier sur tous. Et ne faire qu&#8217;un seul développement.</p>
<p>Le développement d&#8217;un widget aboutit très généralement à l&#8217;ajout dans l&#8217;<a href="http://eco.netvibes.com">écosystème Netvibes</a>. Le widget se retrouve ainsi à la portée de toutes les pages de démarrage par le biais de son moteur de recherche intégré.</p>
<p>Côté développement, tout reste globalement simple quand on veut faire du simple.</p>
<h3>Mais quelle galère à développer avec Netvibes <acronym title="Universal Widget API">UWA</acronym> &#8230;</h3>
<p>En revanche ça devient beaucoup moins drôle quand on tombe sur des besoins mal couverts par la documentation.<br />
Et quand je dis <em>mal couvert</em>, ça inclut :</p>
<ul>
<li>pas de documentation du tout</li>
<li>une documentation partielle et pas suffisamment verbeuse (genre pour les onglets et la pagination)</li>
<li>une documentation obsolète et pas recommandée de leur propre aveu (le stockage des mots de passe)</li>
</ul>
<p><strong>L&#8217;adoption d&#8217;un service et sa qualité se jugent à mon avis par sa documentation</strong>. Certes des efforts sont faits mais leur <acronym title="Application Programming Interface">API</acronym> deviendra crédible et fiable le jour où elle sera à jour et complète.</p>
<p>En plus de ça, certaines fonctionnalités sont elles aussi incomplètes.</p>
<p>Au hasard, le <strong>processus de <acronym title="localisation">l10n</acronym></strong> : à implémenter soi-même et encore, il ne pourra pas couvrir tous les besoins comme les préférences. C&#8217;est d&#8217;autant plus dommage que leur système est particulièrement au point pour l&#8217;interface traduite en une dizaine de langues.<br />
Mais pas les widgets &#8230;</p>
<p>Toute à l&#8217;heure j&#8217;évoquais les mots de passe. Il y a bien un mécanisme qui permet de les stocker mais il agit comme il veut : <strong>on ne peut stocker qu&#8217;un mot de passe par widget</strong> et surtout, on ne peut pas l&#8217;utiliser autrement que dans le cas d&#8217;une identification <acronym title="HyperText Transfer Protocol">HTTP</acronym>.<br />
Autrement dit, le stockage d&#8217;un clé d&#8217;<acronym title="Application Programming Interface">API</acronym> se fera dans un champ texte standard.</p>
<p>Ça ne serait pas gênant si la plupart des widgets étaient exécutés dans une iframe et que cette dite iframe embarquait dans l&#8217;<acronym title="Uniform Resource Locator">URL</acronym> toutes les préférences enregistrées. Donc <em>votre</em> clé d&#8217;<acronym title="Application Programming Interface">API</acronym>.<br />
Pourquoi c&#8217;est gênant ? Car il y a un <em>mécanisme inhérent</em> à tout navigateur Web qui s&#8217;appelle le Referrer. En clair, quand vous affichez une page, votre navigateur envoie l&#8217;adresse de la page appelante.<br />
Je me passerai du dessin &#8230;</p>
<p>Enfin, et pour terminer sur une note un peu moins noire, l&#8217;environnement de développement est un superbe outil pour tester son widget de manière indépendante. C&#8217;est à dire sans se connecter sur netvibes.com.<br />
Enfin là où le bas blesse c&#8217;est que les <strong>comportements et la présentation sont différents</strong> entre l&#8217;environnement de développement et Netvibes.</p>
<p>Ce qui sous-entend des bugs présents en développement et pas en production, la gestion des mots de passe qui diffère en développement de la production et du paramétrage spécifique pas documenté.</p>
<h3>Proxy local pour widget Netvibes</h3>
<p>Le <a href="http://dev.netvibes.com/doc/uwa_faq">proxy de développement Netvibes</a> indiqué dans la <acronym title="Frequently Asked Questions">FAQ</acronym> est fonctionnel mais <em>trop minimaliste</em>. On peut en effet récupérer les données mais dès qu&#8217;il s&#8217;agit d&#8217;en envoyer, c&#8217;est cuit.</p>
<p>J&#8217;ai donc adapté le <a href="http://developer.yahoo.com/javascript/samples/proxy/php_proxy_simple.txt">proxy du Yahoo! Developer Network</a> à mes besoins en ajoutant plusieurs fonctionnalités :</p>
<ul>
<li><strong>mise en cache des requêtes GET</strong> pour accélérer les chargements de page et éviter de cramer trop de requête auprès de fournisseurs les limitant (qui a dit Twitter ?)</li>
<li><strong>transmission des données POST</strong> ; c&#8217;est ce qu&#8217;il manquait le plus à la version fournie par Netvibes</li>
<li><strong>compatible texte/JSON/<acronym title="eXtensible Markup Language">XML</acronym></strong> ; le proxy renvoie les bonnes entêtes en fonction de la demande</li>
</ul>
<pre><code class="php">&lt;?php
define('CACHE_TTL', is_int($_GET['cache']) ? $_GET['cache'] : 3600);
define('CACHE_FOLDER', dirname(__FILE__).'/cache');
//
$session = curl_init($_GET['url']);
// If it's a POST, put the POST data in the body
if (isset($_POST) &amp;&amp; !empty($_POST))
{
  $postvars = '';
  while ($element = current($_POST))
  {
    $postvars .= key($_POST).'='.$element.'&amp;';
    next($_POST);
  }
  curl_setopt ($session, CURLOPT_POST, true);
  curl_setopt ($session, CURLOPT_POSTFIELDS, $postvars);
}
// Play with some cache
$md5sign = md5($_GET['url'].$postvars);
$md5file = CACHE_FOLDER.'/'.$md5sign;
/*
 * Read cache
 */
if (file_exists($md5file) &amp;&amp; filemtime($md5file)+CACHE_TTL &gt; time())
{
  curl_close($session);
  send_headers_content_type($_GET['type']);
  readfile($md5file);
  exit();
}
// Don't return <acronym title="HyperText Transfer Protocol">HTTP</acronym> headers. Do return the contents of the call
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// Make the call
$output = curl_exec($session);
$fp = fopen($md5file, "wb+");
fwrite($fp, $output);
fclose($fp);
send_headers_content_type($_GET['type']);
echo $output;
curl_close($session);
/*
 * Functions
 */
function send_headers_content_type($type)
{
  // Set the Content-Type appropriately
  switch ($type)
  {
    case 'text':
    default:
      header("Content-Type: text/plain");
    break;
    case 'xml':
      header("Content-Type: text/xml");
    break;
    case 'json':
      header('Content-Type: text/x-json');
    break;
  }
}
?&gt;</code></pre>
<p>En revanche, je serais vous, <strong>j&#8217;éviterais de m&#8217;en servir publiquement</strong> car il n&#8217;y a aucune vérification de sécurité donc à moins que vous ayiez envie de servir de relais à spam, le mieux est de n&#8217;utiliser ce proxy que sur une instance locale ou bien de davantage le blinder.</p>
<h3>Conclusion</h3>
<p>On arrive désormais au terme de ce billet fleuve <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Quoique je puisse en dire, <strong>Netvibes <acronym title="Universal Widget API">UWA</acronym> est quand même fort sympathique</strong> et permet d&#8217;aboutir à des temps de développement assez courts une fois la majorité des problèmés rencontrés. Nul doute que <strong>votre premier développement sera le plus compliqué</strong>. Surtout si comme moi vous avez envie de tout utiliser : pagination, onglets et <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> à droite à gauche.</p>
<p>Dans tous les cas, <strong>une bonne conception de l&#8217;application vous sauvera la mise</strong> et évitera trop de réécriture de code.<br />
L&#8217;implémentation de la pagination et des onglets est particulièrement douloureuse si vous n&#8217;utilisez pas de programmation objet. Soyez-en avertis.</p>
<p>Je me suis personnellement bien amusé à développer en utilisant <acronym title="Universal Widget API">UWA</acronym> et en jouant avec l&#8217;<acronym title="Application Programming Interface">API</acronym> Jaiku. Cette dernière met vraiment l&#8217;accent sur le JSON ce qui est très pratique pour manipuler des données distantes de manière minimaliste.</p>
<p><strong>Une fois que ces 2 plateformes arriveront à maturité, il y aura de quoi faire d&#8217;encore plus belles applications</strong>.</p>
<p>N&#8217;hésitez pas à utiliser <a href="http://eco.netvibes.com/subscribe/241591">Jaiku sur Netvibes</a>, à me laisser vos remarques et à partager votre expérience de développement de widgets si le cœur vous en dit <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/widget-jaiku-netvibes-presentation-bilan-developpement/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Conventions de programmation : la nécessaire maturité</title>
		<link>http://case.oncle-tom.net/2008/conventions-de-programmation-necessaire-maturite/</link>
		<comments>http://case.oncle-tom.net/2008/conventions-de-programmation-necessaire-maturite/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 05:00:04 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[coding standards]]></category>
		<category><![CDATA[conventions]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpdoc]]></category>
		<category><![CDATA[symfony]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1014</guid>
		<description><![CDATA[Tout développeur, que ce soit à l&#8217;école ou en apprenant sur le tas, écrit du code. J&#8217;espère n&#8217;avoir perdu personne à ce stade de l&#8217;explication Inconsciemment on cherchera à utiliser un style d&#8217;écriture avec lequel on se sent à l&#8217;aise, qu&#8217;on pourra et saura relire facilement et dans le meilleur des cas, qui pourra être [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img class="size-full wp-image-1028" title="Exemple de code PHP" src="http://case.oncle-tom.net/images/2008/07/sample-php-code.png" alt="Exemple" width="500" height="184" /></p>
<p>Tout développeur, que ce soit à l&#8217;école ou en apprenant sur le tas, écrit du code. J&#8217;espère n&#8217;avoir perdu personne à ce stade de l&#8217;explication <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><strong>Inconsciemment on cherchera à utiliser un style d&#8217;écriture avec lequel on se sent à l&#8217;aise</strong>, qu&#8217;on pourra et saura relire facilement et dans le meilleur des cas, qui pourra être relu par une autre personne sans avoir à engager d&#8217;interprète.</p>
<p>Tout développeur tend donc à utiliser des <a href="http://fr.wikipedia.org/wiki/Convention_de_nommage_(programmation)">conventions de programmation</a> (<em>coding standards</em>), que ce soit en <acronym title="HyperText Markup Language">HTML</acronym>, <acronym title="Pre-Hypertext Processing">PHP</acronym>, <acronym title="Cascading Style Sheets">CSS</acronym>, JavaScript ou même en Cobol. Et <strong>utiliser des conventions, c&#8217;est bien</strong> !</p>
<p><span id="more-1014"></span></p>
<h3>Quelle convention de nommage adopter ?</h3>
<p>Avant de choisir une convention, encore faudrait-il savoir quelles conventions existent :</p>
<ul>
<li>pas de convention</li>
<li><a href="http://fr.wikipedia.org/wiki/Notation_hongroise">convention hongroise</a></li>
<li><a href="http://pear.php.net/manual/fr/standards.php">convention PEAR</a></li>
<li><a href="http://www.symfony-project.org/book/1_0/02-Exploring-Symfony-s-Code">convention symfony</a></li>
<li><a href="http://framework.zend.com/manual/fr/coding-standard.html">convention Zend Framework</a></li>
<li><a href="http://codex.wordpress.org/WordPress_Coding_Standards">convention WordPress</a> (que j&#8217;abhorre)</li>
<li>etc.</li>
</ul>
<p>Autant dire qu&#8217;il y a de tout et pour tous les goûts.<br />
Ce qu&#8217;il faut retenir d&#8217;<strong>une convention c&#8217;est qu&#8217;elle explicite des règles de développement</strong> :</p>
<ul>
<li>sur le nommage des éléments</li>
<li>sur l&#8217;indentation des éléments</li>
<li>sur les structures de contrôle (if, else, tout ça quoi)</li>
<li>sur la syntaxe des commentaires</li>
<li>sur la syntaxe de la documentation (le code auto-documenté c&#8217;est bon !)</li>
<li>sur l&#8217;organisation des fichiers, éventuellement</li>
</ul>
<p>C&#8217;est pour ça que partir sur une <strong>convention parfaite sur le papier mais inapplicable est une vaste fumisterie</strong>. L&#8217;idéal étant de pouvoir reprendre du code dans un projet sans avoir eu besoin de lire la documentation pour en comprendre l&#8217;organisation.</p>
<p>Mon conseil : <strong>essayez, choisissez</strong> mais ne prenez pas non plus trop laxiste en terme de notation.<br />
Une chose est sure : quand on a essayé une belle</p>
<h3>Mes conventions de nommage en <acronym title="Pre-Hypertext Processing">PHP</acronym></h3>
<p style="text-align:center"><a href="http://case.oncle-tom.net/images/2008/07/eclipse-php-code-sample.png"><img class="size-medium wp-image-1022" title="Exemple de code PHP dans Eclipse" src="http://case.oncle-tom.net/images/2008/07/eclipse-php-code-sample-300x207.png" alt="Exemple de code PHP dans Eclipse" width="300" height="207" /></a></p>
<p>J&#8217;avoue, la notation utilisée dans <a href="http://www.symfony-project.org/">symfony</a> m&#8217;a tellement plu que je la réutilise quasiment partout. Ci-dessus, une illustration montrant du code pour un <a href="http://case.oncle-tom.net/code/wordpress/">plugin WordPress</a> (en <acronym title="Pre-Hypertext Processing">PHP</acronym> 4 malheureusement &#8230;). Elle en présente un bon aperçu.</p>
<h4>Notation</h4>
<p>J&#8217;utilise UpperCamelCase pour le nommage des classes <em>sauf</em> s&#8217;il y a un préfixe qui, lui, reste en minuscule.<br />
<em>Exemples</em> : <code>class AmazonWidgetsShortcodes</code>, <code>class sfUploader</code>.</p>
<p>Pour ce qui est méthodes de classes, j&#8217;utilise lowerCamelCase. Comme ça on sait qu&#8217;on reste dans un objet et c&#8217;est pas plus mal.</p>
<p>Enfin, pour les fonctions orphelines, <em>helpers</em> &amp; cie, c&#8217;est tout en minuscule séparé par des underscore (un nom particulier à ça ? <em>lowered_and_underscored</em> ? <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )<br />
<em>Exemple</em> : <code>add_filter()</code></p>
<h4>Indentation</h4>
<p>Dans l&#8217;indentation il y a 2 camps : celui des espaces et celui des tabulations.</p>
<p>J&#8217;ai suivi celui des <strong>espaces</strong> pour une simple et bonne raison : 1 tabulation a une taille différente selon les éditeurs, que ça soit votre IDE, votre shell ou n&#8217;importe quel logiciel de texte. L&#8217;idéal est d&#8217;avoir un rendu identique dans tous les éditeurs sans paramétrage.</p>
<p>En revanche, là encore je suis mais j&#8217;aime, je suis sur une <strong>tabulation à 2 espaces</strong> : c&#8217;est bête mais je trouve ça plus esthétique et on arrive moins rapidement à la limite de 80 caractères.</p>
<p>Cette &laquo;&nbsp;limite&nbsp;&raquo; n&#8217;est que virtuelle mais ouvrez un terminal, 80 lignes par défaut. C&#8217;est plus confortable de rester en-dessous de ce nombre. Ceci dit je fais quelques exceptions, des fois <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h4>Structures de contrôle</h4>
<p>On pourrait résumer à <cite>1 ligne = 1 action</cite> et 2 types d&#8217;utilisation.</p>
<p>Tout d&#8217;abord les structures dans le code à proprement parler :</p>
<ul>
<li>un espace entre l&#8217;opérateur et la parenthèse ouvrante</li>
<li>un retour à la ligne à chaque accolade</li>
<li>pas d&#8217;espaces dans les lignes vides (résidus d&#8217;indentation)</li>
<li>systématiquement les accolades, même en cas de ligne unique après l&#8217;opérateur</li>
<li>opérateur ternaire quand ça reste simple, pas trop long et plus lisible</li>
</ul>
<p>Côté templating en revanche j&#8217;utilise la <a href="http://fr.php.net/manual/fr/control-structures.alternative-syntax.php">syntaxe alternative de <acronym title="Pre-Hypertext Processing">PHP</acronym></a> à raison d&#8217;un opérateur par ligne :</p>
<pre><code class="php">&lt;ol class="posts"&gt;
&lt;?php foreach($posts as $post): ?&gt;
  &lt;li id="post-&lt;?php echo $post-&gt;getId() ?&gt;"&gt;
    &lt;a href="&lt;?php $post-&gt;getPermalink() ?&gt;"&gt;
      &lt;?php echo $post-&gt;getTitle() ?&gt;
    &lt;/a&gt;
  &lt;/li&gt;
&lt;?php endforeach ?&gt;
&lt;/ol&gt;</code></pre>
<h4>Syntaxe de la documentation</h4>
<p>Enfin, pour terminer sur la partie <acronym title="Pre-Hypertext Processing">PHP</acronym>, <a href="http://www.phpdoc.org/">PHPDoc</a> est surpuissante en plus d&#8217;être simple à utiliser. Comble du bonheur, sa syntaxe est réutilisable dans d&#8217;autres langages.</p>
<p>PHPDoc est le principe du <strong>code autodocumenté</strong> :</p>
<ol>
<li>vous commentez votre code avec la syntaxe PHPDoc</li>
<li>vous générez sa documentation avec le programme PHPDoc (en <acronym title="HyperText Markup Language">HTML</acronym>, <acronym title="Portable Document Format">PDF</acronym> etc.)</li>
</ol>
<p>L&#8217;idéal est de <strong>documenter en même temps qu&#8217;on produit le code</strong>. Par principe on revient rarement sur son propre code juste pour le loisir de le décrire, par manque de temps ou par flemme.</p>
<h3>Mes conventions de nommage en JavaScript</h3>
<p style="text-align:center"><a href="http://case.oncle-tom.net/images/2008/07/eclipse-javascript-code-sample.png"><img class="size-medium wp-image-1021" title="Exemple de code JavaScript dans Eclipse" src="http://case.oncle-tom.net/images/2008/07/eclipse-javascript-code-sample-300x288.png" alt="Exemple de code JavaScript dans Eclipse" width="300" height="288" /></a></p>
<p>Ne vous inquiétez pas, je ne vais pas tout recommencer pour JavaScript <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Je suis à peu près la même logique qu&#8217;en <acronym title="Pre-Hypertext Processing">PHP</acronym> à part pour les accolades.</p>
<p>En effet si je conserve un comportement similaire pour les structures de contrôles (1 accolade par ligne) :</p>
<ul>
<li>je ne fais pas de retour à la ligne sur les accolades/parenthèse ouvrante d&#8217;une fonction/objet anonyme</li>
<li>je ne fais pas de retour à la ligne après une accolade/parenthèse fermante s&#8217;il y a une virgule ou parenthèse après</li>
</ul>
<pre><code class="javascript">var OncleTom = {
  age:      25,
  pensee:   function(){
    return this.age * Math.random()
  }
};</code></pre>
<h3>Mes conventions de nommage en <acronym title="Cascading Style Sheets">CSS</acronym></h3>
<p style="text-align:center"><img class="aligncenter size-full wp-image-879" title="Folding en CSS" src="http://case.oncle-tom.net/images/2008/02/css-folding.png" alt="" width="500" height="138" /></p>
<p>Inutile de paraphraser ce que j&#8217;ai déjà écris dans mon article sur les <a href="http://case.oncle-tom.net/2008/02/26/bonnes-pratiques-codage-css/">bonnes pratiques de codage <acronym title="Cascading Style Sheets">CSS</acronym></a>.</p>
<p>Deux lectures en une oui <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Conclusion</h3>
<p>Bon au final on voit que ce n&#8217;est pas si compliqué que ça d&#8217;apporter un brin de rigueur.<br />
On pourra même s&#8217;amuser à compléter le tout par la disposition des méthodes et fonctions d ans un fichier par ordre alphabétique (j&#8217;en connais un que ça fera sourire <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ).</p>
<p>Les vues <em>Outline</em> fournissent un plan du code et certains logiciels ne semblent pas disposer d&#8217;une fonction de tri. Et au cas où un jour vous n&#8217;auriez pas votre IDE favori sous le nez, ça ne mange pas de pain de fonctionner ainsi.</p>
<p style="text-align:center"><img class="size-full wp-image-1020" title="Plan de code dans Eclipse (Outline)" src="http://case.oncle-tom.net/images/2008/07/eclipse-outline.png" alt="Plan de code dans Eclipse (Outline)" width="334" height="288" /></p>
<p>Que l&#8217;on travaille seul à plusieurs, et à plus fortes raison dans ce dernier cas, l&#8217;utilisation de notations et conventions est un gage de qualité. Ça rend le travail plus facilement interopérable avec d&#8217;autres développeurs, plus facile à relire, plus facile à maintenir.</p>
<p><strong>Ça n&#8217;empêchera jamais des bugs</strong> ou de sortir du mauvais code mais c&#8217;est ça, c&#8217;est une autre histoire.</p>
<p>Enfin, j&#8217;aimerais terminer cet article en écrivant qu&#8217;il a fait l&#8217;objet d&#8217;une <a href="http://blog.damienalexandre.fr/index.php?post/2008/07/19/Mes-conventions-de-programmation">chaîne par le Padawan PHPiste Damien Alexandre</a>. C&#8217;était l&#8217;occasion de faire une réponse qui passe inaperçue <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Ça ne m&#8217;empêchera en revanche pas de refiler la patate chaude à <a href="http://prendreuncafe.com/blog/">NicoDePrendreUnCafé</a>, de tenter d&#8217;insuffler de l&#8217;activité au blog de <a href="http://lacot.org/blog">Xavier Lacot</a>, de Spipifier <a href="http://www.gasteroprod.com">Gastero Prod</a>, d&#8217;extirper une technique ninja pyjama à <a href="http://shiii.org/">remouk</a> et pourquoi pas lire avec attention l&#8217;avis pythonien de <a href="http://www.biologeek.com/journal/">David Larlet</a> ?</p>
<p>Et <em>just for fun</em>, un petit coup d&#8217;électrode à un de mes futurs étudiants, <a href="http://blog.thierry.poinot.fr/">Thierry Poinot</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/conventions-de-programmation-necessaire-maturite/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Menu déroulant en rollover semi-accessible avec jQuery</title>
		<link>http://case.oncle-tom.net/2008/menu-deroulant-accessible-en-rollover-avec-jquery/</link>
		<comments>http://case.oncle-tom.net/2008/menu-deroulant-accessible-en-rollover-avec-jquery/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 05:00:50 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[bonne pratique]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[ergonomie]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[rollover]]></category>
		<category><![CDATA[xhtml]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=919</guid>
		<description><![CDATA[Joie : je fais maintenant partie de Planète Accessibilité en plus de Planet Libre. C&#8217;est l&#8217;occasion pour ce premier article dédié d&#8217;allier à la fois logiciels libres et accessibilité pour le plus grand bien du Web Le but de cette explication sera de développer la méthode et le raisonnement pour mettre en place un menu [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img class="aligncenter size-full wp-image-834" title="Logo jQuery" src="http://case.oncle-tom.net/images/2007/12/jquery-logo.png" alt="Logo jQuery" width="117" height="32" /></p>
<p>Joie : je fais maintenant partie de <a href="http://planete-accessibilite.com/">Planète Accessibilité</a> en plus de <a href="http://www.planet-libre.org/">Planet Libre</a>. C&#8217;est l&#8217;occasion pour ce premier article dédié d&#8217;allier à la fois logiciels libres et accessibilité pour le plus grand bien du Web <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Le but de cette explication sera de <strong>développer la méthode et le raisonnement</strong> pour mettre en place un menu en rollover accessible. La difficulté tient essentiellement au fait que tout élément masqué par le biais des <acronym title="Cascading Style Sheets">CSS</acronym> est masqué pour de nombreux clients Web.</p>
<p>Nous verrons aussi pourquoi il est <strong>important de dissocier la présentation et les artifices graphiques</strong> grâce à une dégradation propre du JavaScript. Nous utiliserons pour cela <a href="http://jquery.com">jQuery</a>, <a href="http://case.oncle-tom.net/tag/jquery/">ma librairie JavaScript favorite</a>.<br />
<span id="more-919"></span></p>
<h3>Buts et objectifs de l&#8217;exercice</h3>
<p>J&#8217;ai eu besoin d&#8217;appliquer cette technique sur le site <a href="http://www.emunova.net">Emu Nova</a>. Je souhaitais plusieurs choses :</p>
<ul>
<li>disposer d&#8217;un menu en rollover en haut de page (facilite la navigation sur toutes les pages)</li>
<li>placer le contenu avant les menus dans le flux <acronym title="HyperText Markup Language">HTML</acronym> de la page (améliore le référencement)</li>
<li>une navigation possible sans JavaScript (pour cause de bug ou autre)</li>
</ul>
<p>Autrement dis, j&#8217;ai besoin d&#8217;un <strong>contenu en fin de flux mais visible avant tout le reste</strong>. J&#8217;ai opté pour la solution JavaScript pour éviter un positionnement absolu pénible à gérer (pour cause de conteneur centré) mais aussi pour respecter le <a href="http://code.google.com/p/blueprintcss/">colonnage de Blueprint</a> (puis toutes façons j&#8217;ai raison <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> )</p>
<p>En une image, cela se résume ainsi :</p>
<p style="text-align:center"><a href="http://case.oncle-tom.net/images/2008/06/emunova-menu-accessible.png"><img class="aligncenter size-medium wp-image-920" title="Tentative de menu accessible" src="http://case.oncle-tom.net/images/2008/06/emunova-menu-accessible-150x300.png" alt="Tentative de menu accessible" width="150" height="300" /></a></p>
<p>Nous allons aborder les 3 phases de ce tracé de flèche :</p>
<ol>
<li>la construction du menu (la zone verte)</li>
<li>le déplacement du contenu (la flèche)</li>
<li>la construction de notre nouveau menu (la zone bleue)</li>
</ol>
<h3>Étape 1 : construire le menu en <acronym title="HyperText Markup Language">HTML</acronym></h3>
<p>C&#8217;est l&#8217;étape essentielle. De sa structure dépend le reste de l&#8217;application. On doit <strong>d&#8217;abord penser à présenter le contenu de manière dégradée</strong>. C&#8217;est ainsi que le verront les utilisateur et c&#8217;est important de penser d&#8217;abord au pire des cas avant de mettre en place les paillettes et les artifices.</p>
<p style="text-align:center"><img class="aligncenter size-full wp-image-921" title="Menu accessible (Étape 1)" src="http://case.oncle-tom.net/images/2008/06/menu-accessible-etape-1.png" alt="Menu accessible (Étape 1)" width="427" height="178" /></p>
<p>Cette structure est représentée ainsi en <acronym title="HyperText Markup Language">HTML</acronym> :</p>
<pre><code class="html">&lt;div id="contenu-secondaire"&gt;
  &lt;ul id="navigation"&gt;
    &lt;li class="first column span-6"&gt;
      &lt;h2&gt;Actualités&lt;/h2&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="..."&gt;Actualités&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Newsletter&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Flux <acronym title="Really Simple Syndication">RSS</acronym>&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Twitter&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Réactions à chaud&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li class="column span-6"&gt;
      &lt;h2&gt;Émulation&lt;/h2&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="..."&gt;Émulation&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Tutoriaux&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="..."&gt;Foire aux Questions&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;</code></pre>
<p>Cette version est volontairement tronquée pour faciliter sa lecture.<br />
L&#8217;idée générale de tout ça c&#8217;est de transporter directement la liste <code>#navigation</code> en dehors de son conteneur, <code>#extra-content</code>. C&#8217;est en effet plus rapide et plus performant de transporter une partie du <acronym title="Document Object Model">DOM</acronym> dans un autre endroit que de la recréer séquentiellement.</p>
<p>Ça aura également l&#8217;avantage de limiter au maximum le travail à effectuer en JavaScript par derrière. On notera que jusqu&#8217;à présent, on n&#8217;a pas encore touché à jQuery.</p>
<p>Avec cette structure, on peut dores et déjà deviner que les &lt;ul&gt; de second niveau seront masqués et affichés à la demande.</p>
<h3>Étape 2 : préparer le menu <acronym title="HyperText Markup Language">HTML</acronym></h3>
<p>La deuxième reste assez simple : on transporte <code>#navigation</code> dans son nouveau conteneur (déjà existant) : <code>#welcome-bar.</code></p>
<p>Pour éviter tout aléas graphique, l&#8217;idéal est de masquer tout ce qu&#8217;on ne veut pas voir maintenant. Nous rentrons maintenant dans la partie pure JavaScript.</p>
<p style="text-align:center"><img class="aligncenter size-full wp-image-922" title="Menu accessible (Étape 2)" src="http://case.oncle-tom.net/images/2008/06/menu-accessible-etape-2.png" alt="Menu accessible (Étape 2)" width="304" height="72" /></p>
<p>Pour atteindre ce résultat, on pourrait envisager le code suivant :</p>
<pre><code class="javascript">(function($){
  $(function(){
    /*
     * Étape 2 : préparation du menu
     */
    $('#navigation &gt; li &gt; ul').hide();
    $('#navigation').appendTo('#welcome-bar');
  });
})(jQuery);</code></pre>
<p>En soi, ce n&#8217;est pas excessif du tout :</p>
<ol>
<li>on masque tous les sous-menus</li>
<li>on transporte le contenu de #navigation dans #welcome-bar</li>
</ol>
<p>Tout le travail se situait dans la réflexion il faut croire <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Étape 3 : assigner les évènements</h3>
<p>Maintenant le plus dur c&#8217;est de donner vie à tout ça. C&#8217;est bien beau d&#8217;avoir des menus mais encore faut-il les animer. Là encore nous avons plusieurs contraintes à subir :</p>
<ul>
<li>les <strong>titres doivent être cliquables</strong>. Certaines personnes cliqueront en effet avant de réaliser qu&#8217;il y a un menu déroulant. Par principe, on prendre le premier lien de la liste et on l&#8217;assignera au titre correspondant ;</li>
<li>le <strong>menu doit se dérouler lors du survol du titre</strong> &#8230;</li>
<li>mais il ne doit pas se masquer tant qu&#8217;on n&#8217;a pas quitté le titre NI la liste déroulante</li>
</ul>
<p>La difficulté tient à ces 2 dernières contraintes. On pourrait tout d&#8217;abord penser à l&#8217;utilisation des évènements <code>mouseover</code> et <code>mouseout</code> MAIS, parce qu&#8217;il y a bien un mais, <code>mouseout</code> est un peu capricieux.</p>
<p>Si on imagine un <code>mouseover</code> directement sur <code>li.column</code>, le problème c&#8217;est que survoler un élément comme <em>Actualités</em> ou <em>Newsletter</em> activera le <code>mouseover</code> de ces derniers &#8230; et désactivera, un temps minime certes, le survol de <code>li.column</code>. Autrement dit le menu se repliera alors qu&#8217;on tentera de l&#8217;utiliser.</p>
<p>Heureusement pour nous, jQuery a introduit les évènements <code>mouseenter</code> et <code>mouseleave</code> (présents dans Internet Explorer depuis des lustres, c&#8217;est bien le seul avantage de cette atrocité) depuis la <a title="Notes de version de jQuery 1.2.2" href="http://docs.jquery.com/Release:jQuery_1.2">version 1.2.2</a>. Ces évènements correspondent exactement à ce que l&#8217;on souhaite : maintenir une zone survolée malgré le survol de ses enfants.<br />
Tout est histoire de couches <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="text-align:center"><img class="aligncenter size-full wp-image-923" title="Menu accessible (Étape 3)" src="http://case.oncle-tom.net/images/2008/06/menu-accessible-etape-3.png" alt="Menu accessible (Étape 3)" width="301" height="180" /></p>
<p>Côté code, ça se complique :</p>
<pre><code class="javascript">(function($){
  $(function(){
    /*
     * Étape 3 : assignation des évènements et transformation
     */
    $('#navigation &gt; li')
      .each(function(){
        var title = $('h2:first', this);
        var href = $('a:first', this).clone();
        href.text(title.text()).wrapInner('&lt;span&gt;&lt;/span&gt;');
        title.html(href);
       })
      .find('h2 &gt; a').bind('mouseenter', function(){
        $(this).parents('li.column').find('&gt; ul').slideDown('fast');
      }).end()
      .bind('mouseleave', function(){
        $('&gt; ul', this).slideUp();
      });
  });
})(jQuery);</code></pre>
<p>Plusieurs remarques sur ce code :</p>
<ul>
<li>j&#8217;utilise les <strong>chaînes de jQuery</strong> pour gagner du temps et reparcourir des tableaux déjà connus (le sélecteur n&#8217;est pas réexécuté)</li>
<li>j&#8217;utilise également la <strong>méthode end()</strong> pour revenir au précédent état du sélecteur. Très pratique pour naviguer dans un jeu d&#8217;éléments et gagner en performances</li>
</ul>
<p>Et pour les explications :</p>
<ol>
<li>Pour chaque élément de liste
<ol>
<li>on met de côté le titre de la liste</li>
<li>on clone le premier élément du sous-menu</li>
<li>on modifie le libellé du lien du clone</li>
<li>on remplace le titre par le code <acronym title="HyperText Markup Language">HTML</acronym> du clone</li>
</ol>
</li>
<li>Pour ces liens hypertextes nouvellement créés (plus faciles à styler sans <acronym title="JavaScript">JS</acronym> au rollover), on leur demande de déplier le sous-menu voisin</li>
<li>Ce sous-menu ne sera replié que lorsqu&#8217;on quittera le li.column</li>
</ol>
<h3>Conclusion</h3>
<p>La <strong>mise en œuvre de ce menu est relativement aisée</strong> et surtout, suffisamment souple pour que vous puissiez l&#8217;adapter à vos besoins.<br />
Dans tous les cas on remarquera que les clés de la réussite sont :</p>
<ul>
<li>un <strong>code <acronym title="HyperText Markup Language">HTML</acronym> propre</strong> (facile les sélections <acronym title="JavaScript">JS</acronym> et le stylage <acronym title="Cascading Style Sheets">CSS</acronym>)</li>
<li>une évolution d&#8217;une <strong>base sans artifices vers une interface améliorée</strong> en JavaScript</li>
<li>un <strong>code simple</strong>, facilement maintenable et adaptable</li>
</ul>
<p>Ceci n&#8217;est qu&#8217;un exemple où le JavaScript peut servir à conserver des interfaces accessibles tout en augmentant leur utilisabilité. Qui a dit que le JavaScript c&#8217;était nul ?</p>
<p>Le seul reproche que l&#8217;on peut faire à ce menu accessible c&#8217;est le <em>manque de navigation au clavier</em>. L&#8217;idéal serait de pouvoir naviguer dans le choix des menus entièrement avec les flèches de son clavier.<br />
Rendez-vous dans un autre billet pour ce point ? <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/menu-deroulant-accessible-en-rollover-avec-jquery/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Emu Nova 2.1 : coulisses d&#8217;une refonte ergonomique et visuelle</title>
		<link>http://case.oncle-tom.net/2008/emu-nova-21-coulisses-dune-refonte-ergonomique-et-visuelle/</link>
		<comments>http://case.oncle-tom.net/2008/emu-nova-21-coulisses-dune-refonte-ergonomique-et-visuelle/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 05:00:45 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[blueprint]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[ergonomie]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[rythme vertical]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[xhtml]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=902</guid>
		<description><![CDATA[Mon premier grand fait d&#8217;armes sur le Web aura été le lancement d&#8217;Emu Nova en octobre 2002. Les grandes lignes du site ont toujours été jeux vidéo rétro, émulation et aide aux utilisateurs. J&#8217;ai ainsi décidé d&#8217;offrir une nouvelle garde-robe à Emu Nova le 1er avril 2008 pour renouveler une interface vieille de 3 ans. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img class="aligncenter size-full wp-image-903" src="http://case.oncle-tom.net/images/2008/04/emunova.gif" alt="Emu Nova" width="186" height="48" /></p>
<p>Mon premier grand fait d&#8217;armes sur le Web aura été le lancement d&#8217;<a href="http://www.emunova.net/">Emu Nova</a> en octobre 2002. Les grandes lignes du site ont toujours été <strong>jeux vidéo rétro</strong>, <strong>émulation</strong> et <strong>aide aux utilisateurs</strong>.<br />
J&#8217;ai ainsi décidé d&#8217;offrir une nouvelle garde-robe à Emu Nova le 1<sup>er</sup> avril 2008 pour <strong>renouveler une interface</strong> vieille de 3 ans. 3 ans où le contenu s&#8217;est accumulé, les menus se sont désordonnés et la navigation s&#8217;est complexifiée.</p>
<p>Aujourd&#8217;hui je vous dévoile les <strong>tenants et aboutissants d&#8217;un travail de réflexion</strong> mené sur plusieurs mois tant en terme d&#8217;ergonomie, d&#8217;accessibilité et de respect des standards du Web.<br />
Où l&#8217;on parlera de jQuery, Blueprint et d&#8217;interface orientée utilisateur.<br />
<span id="more-902"></span></p>
<h3 style="text-align: center;"><a href="http://case.oncle-tom.net/images/2008/04/emunova-2010.png"><img class="aligncenter size-medium wp-image-905" src="http://case.oncle-tom.net/images/2008/04/emunova-2010-227x300.png" alt="Emu Nova : version 2" width="227" height="300" /></a></h3>
<h3>Objectifs de la refonte</h3>
<p>Comme je le disais, la plus grosse critique se tournait vers l&#8217;agencement du site : les menus étaient séparés en 2 et étaient peu visible.</p>
<p>Pire, il y avait tellement de contenu accumulé qu&#8217;au final l&#8217;utilisateur était obligé de scroller au mois une fois pour atteindre le contenu demandé.<br />
J&#8217;ai donc opté pour un <strong>choix radical</strong> : tout reprendre de la feuille blanche et ne tenter de conserver que l&#8217;identité du site au travers de ses couleurs et de son logo.</p>
<p>Plusieurs objectifs ont émergé en griffonnant au fur et à mesure l&#8217;interface sur une feuille de papier :</p>
<ul>
<li>offrir une page d&#8217;accueil qui ne fasse <strong>pas doublon</strong> avec le reste du site</li>
<li>offrir une page d&#8217;accueil <strong>mettant en avant du contenu</strong> pour inciter à visiter le site en profondeur (textes courts, images)</li>
<li>davantage <strong>lier les forums et le site</strong> pour susciter l&#8217;interaction avec l&#8217;internaute</li>
<li>offrir une <strong>interface lisible</strong> dont les contenus sont aisément identifiables sans effort cognitif</li>
<li>offrir du <strong>contenu annexe en pied de page</strong> : je suis désormais intimement convaincu que le pied de page est le meilleur moyen de fidéliser un vagabond curieux qui n&#8217;a pas tiré satisfaction de la première lecture</li>
<li>proposer un site conforme au <strong>standard <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> 1 Strict</strong> en bannissant les mises en forme en tableau, entre autre</li>
</ul>
<p>On le voit, les objectifs de surface sont résolument tournés vers l&#8217;interface utilisateur. Derrière il y avait également des objectifs de simplification et de mutualisation du code avec l&#8217;interface d&#8217;administration.</p>
<h3>Choix technologiques</h3>
<p>Plutôt que de réinventer la roue, j&#8217;ai souhaité utiliser les applications en qui je crois le plus. Je peux compter dessus tout en gagnant du temps. N&#8217;est-ce pas là l&#8217;essentiel ?</p>
<h4>JavaScript : jQuery</h4>
<p>Je suis un féroce utilisateur de <a href="http://jquery.com/">jQuery</a> que j&#8217;adore pour sa <strong>souplesse d&#8217;utilisation</strong> et sa <strong>syntaxe vraiment plaisante</strong>. Elle dépassera, à mon avis, largement le vieillissant couple Prototype/Scriptaculous d&#8217;ici la fin de l&#8217;année 2008.</p>
<p>jQuery sert de base à tout le code JavaScript :</p>
<ul>
<li>altérer l&#8217;interface pour <strong>construire le menu de navigation principal</strong> : sans JavaScript ça marche, avec c&#8217;est encore mieux !</li>
<li>affichage des <strong>messages d&#8217;alertes pour les formulaires incomplets</strong> : pas de popup mais un message inséré à même la page</li>
<li><strong>ouverture des liens externes</strong> dans une nouvelle fenêtre</li>
<li><strong>diaporama de photos</strong> avec Lightbox ; personnalisé pour l&#8217;occasion afin de bénéficier de légendes plus détaillées</li>
</ul>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-904" src="http://case.oncle-tom.net/images/2008/04/emunova-jquery-form.png" alt="Emu Nova : formulaire avec erreur par jQuery" width="500" height="199" /></p>
<p>Il ne reste donc plus en tout et pour tout que 2 popup/alert/confirm obligeant à un affreux et désobligeant clic.</p>
<h4><acronym title="Cascading Style Sheets">CSS</acronym> : Blueprint</h4>
<p><a href="http://code.google.com/p/blueprintcss/">Blueprint</a> est la librairie <acronym title="Cascading Style Sheets">CSS</acronym> la plus proche du Saint-Graal : facile d&#8217;utilisation et très puissante. Mon seul regret à l&#8217;heure actuelle est qu&#8217;elle ne fonctionne qu&#8217;en largeur fixe. Mais dans cette configuration elle joue parfaitement son rôle :</p>
<ul>
<li>construction de colonnes les doigts dans le nez</li>
<li><a href="http://www.biologeek.com/journal/index.php/l-importance-du-rythme-vertical-en-design-css">rythme vertical</a> respecté pour un confort de lecture accru</li>
<li>construction typographique prémachée</li>
<li>correctifs liés à Internet Explorer déjà intégrés</li>
</ul>
<p>Une bonne présentation c&#8217;est une présentation sans contrainte : pas de couleur primaire, pas de difficulté à lire, pas de texte trop petit.</p>
<p>Le premier lecteur qui plisse les yeux c&#8217;est qu&#8217;il aura oublié d&#8217;allumer son écran <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h4>Transparence d&#8217;images : <acronym title="Graphics Interchange Format">GIF</acronym> ou <acronym title="Portable Network Graphics">PNG</acronym> ?</h4>
<p>Quitte à trancher dans le vif, le <strong><acronym title="Graphics Interchange Format">GIF</acronym> a été abandonné au profit du <acronym title="Portable Network Graphics">PNG</acronym></strong> pour le logo.</p>
<p>Pour rappel, si la transparence est possible avec le <acronym title="Graphics Interchange Format">GIF</acronym>, il lui manque la <strong>couche alpha</strong> qui permet de mélanger transparence et couleur. Avec le <acronym title="Portable Network Graphics">PNG</acronym> on peut frimer avec des contours ombrés et des reflets qui fusionnent parfaitement avec le décors.</p>
<p>Alors où est le problème ? Le sempiternel Internet Explorer 6 qui commence même à chauffer les oreilles à Microsoft. À tel point qu&#8217;il souhaite s&#8217;en débarrasser au plus tôt en poussant Internet Explorer 7, y compris pour les non-possesseurs du Service Pack 2 de Windows XP.<br />
La transparence est affichée comme du gris. Magnifique. Sauf en utilisant <a href="http://jquery.khurshid.com/ifixpng.php">jQuery.ifixpng</a>, entre autre.</p>
<h3>Emu Nova : carte de chaleurs, avant et après</h3>
<p style="text-align: center;"><a href="http://case.oncle-tom.net/images/2008/04/emunova-2000vs2100-heatmap.jpg"><img class="aligncenter size-medium wp-image-907" title="Heatmap d\'Emu Nova" src="http://case.oncle-tom.net/images/2008/04/emunova-2000vs2100-heatmap-294x300.jpg" alt="Heatmap d\'Emu Nova" width="294" height="300" /></a></p>
<p>Voici une comparaison des cartes de chaleur à 6 mois d&#8217;intervalle.</p>
<p>On remarque aisément que sur la précédente version les clics sont concentrés, notamment sur la partie haute de la page. Les quelques listes existantes mettent peu en valeur le contenu et de ce fait ne sont pas cliquées.</p>
<p>Sur la nouvelle version les clics semblent <strong>moins concentrés mais touchent globalement toute la page</strong>, exception faite des vignettes en image. Un problème ? Non pas vraiment puisqu&#8217;elles sont rafraîchies toutes les 3 heures ce qui fausse le calcul (qui s&#8217;étale sur 1 journée).</p>
<p>Notez aussi les clics en bas de page : <strong>le pied de page compte</strong>. Qui n&#8217;a pas eu envie qu&#8217;on lui suggère du contenu à lire une fois sa lecture terminée ?</p>
<h3>Conclusion</h3>
<p style="text-align: center;"><a href="http://case.oncle-tom.net/images/2008/04/emunova-2101-homepage.png"><img class="aligncenter size-medium wp-image-906" title="Emu Nova 2.1 : page d\'accueil" src="http://case.oncle-tom.net/images/2008/04/emunova-2101-homepage-203x300.png" alt="Emu Nova 2.1 : page d\'accueil" width="203" height="300" /></a></p>
<p style="text-align: left;">Il n&#8217;est pas aisé de refondre une interface, surtout quand il y a derrière toute une troupe d&#8217;utilisateurs attachés à ses habitudes (ce qu&#8217;on peut comprendre).</p>
<p style="text-align: left;">Si on temporise les différentes phases, voici ce que cela donne :</p>
<ul>
<li>analyse des besoins, ressenti de la situation : plusieurs mois</li>
<li>dessin de la nouvelle interface sur papier : plusieurs jours</li>
<li>intégration <acronym title="HyperText Markup Language">HTML</acronym> : plusieurs heures</li>
<li>refonte du code : plusieurs jours</li>
<li>corrections de bugs : plusieurs heures</li>
<li>premières critiques : quelques minutes</li>
</ul>
<p>Pas étonnant que ma régularité sur ce blog en aie pris un coup <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/emu-nova-21-coulisses-dune-refonte-ergonomique-et-visuelle/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Microformats : comment microformater du contenu déjà existant ?</title>
		<link>http://case.oncle-tom.net/2008/microformats-comment-microformater-du-contenu-deja-existant/</link>
		<comments>http://case.oncle-tom.net/2008/microformats-comment-microformater-du-contenu-deja-existant/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 21:07:42 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[adr]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[clever age]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[hatom]]></category>
		<category><![CDATA[hcalendar]]></category>
		<category><![CDATA[hcard]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[microformats]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[tag]]></category>
		<category><![CDATA[wikia]]></category>
		<category><![CDATA[xhtml]]></category>
		<category><![CDATA[xoxo]]></category>
		<category><![CDATA[yahoo]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/2008/04/03/microformats-comment-microformater-du-contenu-deja-existant/</guid>
		<description><![CDATA[Nous avions dressé un panorama des microformats dans un précédent article intitulé « microformats : republier et donner du sens aux contenus ». Nous avions notamment conclu que leur intégration était rapide, peu coûteuse et surtout bénéfique tant pour le visiteur que pour la visibilité du contenu. Nous nous intéresserons cette fois-ci à une partie [...]]]></description>
			<content:encoded><![CDATA[
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/07/logo-microformats.gif" alt="Microformats logo" /></p>
<p>Nous avions dressé un panorama des microformats dans un précédent article intitulé « <a href="http://case.oncle-tom.net/2008/01/29/microformats-republier-donner-sens-aux-contenus/">microformats : republier et donner du sens aux contenus</a> ». Nous avions notamment conclu que leur<strong> intégration était rapide, peu coûteuse et surtout bénéfique</strong> tant pour le visiteur que pour la visibilité du contenu.</p>
<p>Nous nous intéresserons cette fois-ci à une partie plus pratique des microformats : leur <strong>intégration</strong>. Toutefois ce rapide apprentissage sera didactique puisque nous apprendrons à identifier visuellement quels contenus d’une page peuvent être microformatés mais aussi comment microformater du code <acronym title="HyperText Markup Language">HTML</acronym> déjà existant.<br />
<span id="more-896"></span></p>
<h3>Des sites déjà microformatés</h3>
<p>Intéressons-nous toutefois à des sites ayant déjà microformaté leurs contenus. Nous pourrons ainsi éveiller notre curiosité et préparer le travail de réflexion de la prochaine étape.</p>
<p><strong><a href="http://maps.google.fr/?q=clever-age&amp;near=paris">Exemple avec Google Maps</a></strong> :</p>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2008/04/microformats-sites-google-maps.jpg" alt="Microformats sur Google Maps" /></p>
<p>Google Maps est un service de recherche cartographique accessible via un simple navigateur Web. Le moteur donne un accès à des recherches de lieux, de calculs d&#8217;itinéraires mais aussi d&#8217;emplacement d&#8217;entreprises.</p>
<p>Le support des microformats sur Google Maps est relativement léger mais suffisant pour être utile.<br />
Contrairement à ce que l&#8217;on aurait pu penser, Google n&#8217;a pas intégré le <a href="http://microformats.org/wiki/geo">microformat geo</a> pour exporter les coordonnées GPS d&#8217;un point. La société s&#8217;est concentrée sur les données personnelles au moyen de deux microformats combinés :</p>
<ul>
<li> <a href="http://microformats.org/wiki/hcard">microformat hCard</a> (correspond à la réunion des encadrés bleu et vert)</li>
<li> <a href="http://microformats.org/wiki/adr">microformat adr</a> (correspond à l&#8217;encadré vert uniquement)</li>
</ul>
<p>Cette combinaison facilite l&#8217;extraction des adresse postales et des entités (individus ou entreprises).</p>
<p><strong><a href="http://upcoming.yahoo.com/search/?loc=paris">Exemple avec Yahoo ! Upcoming</a></strong> :</p>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2008/04/microformats-sites-yahoo-upcoming.jpg" alt="Microformats sur Yahoo! Upcoming" /></p>
<p>Yahoo ! Upcoming est un service gratuit cataloguant tous les évènements à venir par pays, ville, date et même par catégories (cinéma, concerts, expositions etc.).</p>
<p>Le microformat par excellence à adopter était bien évidemment le <a href="http://microformats.org/wiki/hcalendar">microformat hCalendar</a>. Chaque occurence microformatée est représentée par un rectangle vert et peut contenir ces différents attributs, entre autre :</p>
<ul>
<li> date de début de l&#8217;évènement</li>
<li> date de fin de l&#8217;évènement</li>
<li> titre de l&#8217;évènement</li>
<li> description de l&#8217;évènement</li>
<li> le lieu de l&#8217;évènement (sous forme d&#8217;adresse complète ou pas)</li>
<li> une <acronym title="Uniform Resource Locator">URL</acronym> menant à un descriptif plus approfondi de l&#8217;évènement</li>
</ul>
<p>Ce microformatage permet d&#8217;aller au-delà d&#8217;une lecture classique puisque de manière simple, elle permet au visiteur de récupérer les évènements qui l&#8217;intéresse pour les ajouter à son gestionnaire de temps favoris, qu&#8217;il soit logiciel ou en ligne.</p>
<h3>Identifier visuellement les microformats à intégrer</h3>
<p>Identifier des microformats déjà implémenté est assez simple avec les outils adéquats. En revanche pour décider de microformater du contenu, deux outils sont indispensables :</p>
<ul>
<li> la documentation des microformats pour savoir <strong>quoi implémenter</strong></li>
<li> un peu de jugeotte pour savoir <strong>comment implémenter</strong> <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
<p>Avec un peu de pratique et de connaissance des différents microformats, il ne faut pas plus de 5 à 10 minutes pour identifier les contenus microformatables. La difficulté d&#8217;intégration dépendra uniquement de la structure technique affichant les données : plus elle sera complexe, plus le microformatage pourra être long &#8230; au même titre que toute autre modification basique.</p>
<p><strong><a href="http://re.search.wikia.com/search#clever%20age">Exemple avec Wikia Search</a></strong> :</p>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2008/04/microformats-tomicroformat-wikia-search.jpg" alt="Microformats sur Wikia Search" /></p>
<p>Wikia Search est un moteur de recherche lancé au tout début de l&#8217;année 2008 par un des fondateurs de l&#8217;encyclopédie en ligne Wikipédia. Ce moteur en reprend d&#8217;ailleurs le principe du wiki pour contribuer à l&#8217;élaboration et la notation de meilleurs résultats.</p>
<p>Il est d&#8217;ailleurs étonnant de voir qu&#8217;aucun microformat ne soit présent malgré de tels objectifs. La capture d&#8217;écran ci-dessus découpe la page en 3 zones microformatables distinctes :</p>
<ol>
<li> le lien sur logo aurait pu se voir agrémenter d&#8217;un <a href="http://microformats.org/wiki/rel-home">rel-home</a> pour signifier un retour vers la page d&#8217;accueil ;</li>
<li> les résultats auraient pu quant à eux embarquer :
<ul>
<li> le <a href="http://microformats.org/wiki/hatom">microformat hAtom</a> pour faciliter la syndication de contenu et l&#8217;extraction des résultats.</li>
<li> le <a href="http://microformats.org/wiki/hreview">microformat hReview</a> ou <a href="http://microformats.org/wiki/vote-links">VoteLinks</a> sur les encadrés orangés identifiant les zones de votes.</li>
</ul>
</li>
<li> enfin le <a href="http://microformats.org/wiki/hcard">microformat hCard</a> aurait été le bienvenu sur la liste des résultats correspond à des personnes.</li>
</ol>
<p>On peut constater que plus il y a d&#8217;emplacement représentant des contenus différents sur une page, plus on a de chances qu&#8217;un microformat corresponde.</p>
<p><strong><a href="http://www.clever-age.com/">Exemple avec Clever Age</a></strong> :</p>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2008/04/microformats-tomicroformat-cleverage.jpg" alt="Microformats sur Clever Age" /></p>
<p>J&#8217;ai dénombré pas moins de 5 zones pouvant accueillir des microformats :</p>
<ol>
<li> les dernières actualités pourraient utiliser le <a href="http://microformats.org/wiki/hatom">microformat hAtom</a>. Un flux <acronym title="Really Simple Syndication">RSS</acronym> est déjà disponible sur la page mais ce serait offrir un chemin de traverse pour les visiteurs et les moteurs d&#8217;indexation ;</li>
<li> le <a href="http://microformats.org/wiki/hcalendar">microformat hCalendar</a> aiderait à la réutilisation des données dans les gestionnaires de temps. Imaginez un chef d&#8217;entreprise affairé désireux de transmettre à ses collaborateurs une ressource contenant toutes les informations de leur future formation : peu d&#8217;effort et un gain de communication ;</li>
<li> ajouter facilement Clever Age dans votre carnet de contacts et de prestataires serait également facilité si le <a href="http://microformats.org/wiki/hcard">microformat hCard</a> redistribuait le nom et les moyens de contact de la société ;</li>
<li> en complément au moyen de contact, l&#8217;emplacement géographique des agences serait à portée de clic avec le <a href="http://microformats.org/wiki/geo">microformat geo</a>. Après tout, Google Maps proposera peut-être un jour d&#8217;importer des <acronym title="Uniform Resource Locator">URL</acronym> microformatée en plus des fichiers KMZ (Google Earth) <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ;</li>
<li> enfin, le microformatage de la dernière partie dépend de ce qu&#8217;on aimerait redistribuer :
<ul>
<li> le <a href="http://microformats.org/wiki/hatom">microformat hAtom</a> pour offrir 3 flux de syndication mais le peu d&#8217;éléments (2 à chaque fois) tende à infirmer la pertinence de ce microformat dans le cas présent ;</li>
<li> le <a href="http://microformats.org/wiki/xoxo">microformat XOXO</a> est adapté à décrire des types de contenus embarqués dans une page ; ici des flux <acronym title="Really Simple Syndication">RSS</acronym>. Il serait à placer sur chaque lien pointant vers les flux <acronym title="Really Simple Syndication">RSS</acronym> ;</li>
<li> le <a href="http://microformats.org/wiki/xfolk">microformat Xfolk</a> est adapté aux collections d&#8217;<acronym title="Uniform Resource Locator">URL</acronym> plus communément appelés « favoris » ou « marque-pages »</li>
</ul>
</li>
</ol>
<p>Avec ce dernier exemple, nous venons de voir que le microformatage était facilement adaptable à un site Web de société. Dans ce cas précis, il y a énormément de contenu republiable mais pas systématiquement de manière pertinente.</p>
<h3>Intégrer les microformats dans du (X)<acronym title="HyperText Markup Language">HTML</acronym></h3>
<p>Les précédents exemples, sur de l&#8217;existant et ce qui pourrait exister, avaient pour but de former notre esprit à reconnaitre des zones susceptibles d&#8217;être microformatées.</p>
<p>La difficulté de l&#8217;exercice est d&#8217;ajouter du balisage sans altérer la présentation actuelle. Je traiterai du site de Clever Age dont nous avons parlé précédemment.</p>
<p><strong>Microformater des données d&#8217;entités</strong></p>
<p>Voici le code de départ, repris tel quel :</p>
<pre><code>Clever Age - Siège social : 01.53.34.66.10</code></pre>
<p>Comme nous avons pu le voir, la gestion d&#8217;identités passe par le <a href="http://microformats.org/wiki/hcard">microformat hCard</a> :</p>
<pre><code>&lt;span class="vcard"&gt;
&lt;span class="fn org"&gt;Clever Age&lt;/span&gt; - Siège social : &lt;span class="tel"&gt;&lt;span class="value"&gt;01.53.34.66.10&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;</code></pre>
<p>La balise <em>span</em> est une balise en-ligne neutre au sens où &#8230; n&#8217;en a pas justement. <em>div</em> est son pendant de type bloc.</p>
<p><strong>Microformater des ressources syndiquées</strong><br />
Voici le code de départ (simplifié par rapport à l&#8217;exemple afin de réduire le code à lire) :</p>
<pre><code>&lt;dl&gt;
&lt;dt&gt;&lt;a href="/rss/blog.xml"&gt;derniers billets du blog&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;...&lt;/dd&gt;
&lt;dt&gt;&lt;a href="/rss/publications.xml"&gt;dernières publications&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;...&lt;/dd&gt;
&lt;dt&gt;&lt;a href="/rss/cleverlink.xml"&gt;derniers Clever Links&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;...&lt;/dd&gt;
&lt;/dl&gt;</code></pre>
<p>Le <a href="http://microformats.org/wiki/xoxo">microformat XOXO</a> nous permet de définir une liste d&#8217;éléments en fonction des <a href="http://microformats.org/wiki/xoxo#The_XOXO_Document_Type">modules <acronym title="eXtensible HyperText Markup Language">XHTML</acronym></a> :</p>
<pre><code>&lt;dl class="xoxo"&gt;
&lt;dt&gt;&lt;a href="/rss/blog.xml" rel="feed" type="text/xml"&gt;derniers billets du blog&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;...&lt;/dd&gt;
&lt;dt&gt;&lt;a href="/rss/publications.xml" rel="feed" type="text/xml"&gt;dernières publications&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;...&lt;/dd&gt;
&lt;dt&gt;&lt;a href="/rss/cleverlink.xml" rel="feed" type="text/xml"&gt;derniers Clever Links&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;...&lt;/dd&gt;
&lt;/dl&gt;</code></pre>
<p>Le microformatage a été rendu possible uniquement en utilisant de manière standardisée des attributs définis par <acronym title="eXtensible HyperText Markup Language">XHTML</acronym>.<br />
Malgré cet aspect de simplicité, il faut s&#8217;investir dans la compréhension des spécifications <acronym title="eXtensible HyperText Markup Language">XHTML</acronym>. Ce n&#8217;est un problème que pour les personnes produisant du code <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> non-conforme.</p>
<h3>Valider l&#8217;intégration des microformats</h3>
<p>La question qui se pose toujours après avoir produit un code quelconque c&#8217;est comment le tester ? Il existe à l&#8217;heure actuelle trois outils gratuits :</p>
<ul>
<li> la relecture manuelle avec la documentation à côté <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li> l&#8217;<a href="https://addons.mozilla.org/firefox/addon/4106">extension Operator pour Firefox</a>. Elle n&#8217;est toutefois pas complète et ne permettra pas de tester tous les microformats existants. Cette extension propose dans ses options un <em>mode débogage</em> très utile ;</li>
<li> le service en ligne <a href="http://microformatique.com/optimus/">Optimus</a>. Ce service polyvalent est capable de retourner sous forme de flux <acronym title="eXtensible Markup Language">XML</acronym> ou JSON les microformats présents dans une page Web. Il propose également un validateur, toujours pour une page Web, décrivant les erreurs de microformatage.</li>
</ul>
<h3>Conclusion</h3>
<p>Il est difficile d&#8217;infuser en un article la manière de microformater du contenu. Fort heureusement la documentation des microformats abonde d&#8217;exemples en traitant des cas de figure concrets. Les spécifications restent là pour savoir quels sont les attributs, obligatoires ou pas.</p>
<p>De manière générale <strong>l&#8217;intégration des microformats est relativement aisée</strong> mais il existe 3 difficultés principales à l&#8217;intégration des microformats :</p>
<ul>
<li> difficultés liées à la <strong>plate-forme technique</strong> d&#8217;intégration ;</li>
<li> difficultés liées à un <strong>manque de données</strong>. Certaines spécifications exigent la présence de données particulières que l&#8217;on n&#8217;a pas ou que l&#8217;on ne peut afficher, rendant invalide le contenu ;</li>
<li> difficultés liées à un <strong>code <acronym title="HyperText Markup Language">HTML</acronym> désorganisé</strong>. L&#8217;abus de <em>div</em> et le non-respect de hiérarchie est une source de problèmes et si elle rend pénible l&#8217;intégration des microformats, elle pose problème à la maintenance du code et des <acronym title="Cascading Style Sheets">CSS</acronym>.</li>
</ul>
<p>Intégrer les microformats c&#8217;est finalement mener une <strong>réflexion sur la qualité du code produit</strong>. Un bon code, respectueux des standards et sémantique sera pérenne dans le temps, facilitera le microformatage et aura davantage de chances d&#8217;être accessible.</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/microformats-comment-microformater-du-contenu-deja-existant/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BlogCamp Bordeaux #3 : le dessous des cartes</title>
		<link>http://case.oncle-tom.net/2008/blogcamp-bordeaux-3-le-dessous-des-cartes/</link>
		<comments>http://case.oncle-tom.net/2008/blogcamp-bordeaux-3-le-dessous-des-cartes/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 06:00:29 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Projets]]></category>
		<category><![CDATA[atelier]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[blogcamp bordeaux]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[bordeaux]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[france]]></category>
		<category><![CDATA[OpenOffice]]></category>
		<category><![CDATA[seo]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/2008/03/04/blogcamp-bordeaux-3-le-dessous-des-cartes/</guid>
		<description><![CDATA[J&#8217;ai tenu ma première conférence vendredi 29 février 2008 à l&#8217;occasion de BlogCamp Bordeaux #3. Petite conférence car il n&#8217;y avait &#171;&#160;qu&#8217;une trentaine&#160;&#187; de personnes face à moi. Une fréquentation plus qu&#8217;honorable si on tient compte de la jeunesse de BlogCamp France, à savoir 3 mois. C&#8217;est l&#8217;occasion pour moi d&#8217;aborder cette session par un [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2008/02/blogcamp-france-logo.png" alt="Logo BlogCamp France" /></p>
<p>J&#8217;ai tenu ma première conférence vendredi 29 février 2008 à l&#8217;occasion de <strong>BlogCamp Bordeaux #3</strong>. Petite conférence car il n&#8217;y avait &laquo;&nbsp;qu&#8217;une trentaine&nbsp;&raquo; de personnes face à moi. Une fréquentation plus qu&#8217;honorable si on tient compte de la jeunesse de <a href="http://blogcamp.fr/">BlogCamp France</a>, à savoir 3 mois.</p>
<p>C&#8217;est l&#8217;occasion pour moi d&#8217;aborder cette session par un angle un peu différent, en parlant notamment de l&#8217;aspect présentation : où, quand, comment et surtout combien de temps. Ce sera un bon <a href="http://blogcamp.fr/2008/03/04/compte-rendu-blogcamp-bordeaux-3/">complément du résumé officiel</a> et du <a href="http://blogcamp.fr/wiki/bordeaux/blogcamp3">wiki BlogCamp Bordeaux #3</a>.<br />
<span id="more-881"></span></p>
<h3>L&#8217;atelier BlogCamp Bordeaux #3</h3>
<div style="text-align:center"><object width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=blogcamp-bordeaux-3-latelier-1204382639117599-4"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=blogcamp-bordeaux-3-latelier-1204382639117599-4" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p>Cette présentation m&#8217;a pris à peu près 8h de travail, en comptant le temps de recherche de la mise en page. On utilisait en effet pour la première fois un modèle commun. Ces 8 heures ont été réparties de la sorte :</p>
<ul>
<li>2 heures de recherche &laquo;&nbsp;artistique&nbsp;&raquo; <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  et de manipulations d&#8217;OpenOffice Impress infructueuses</li>
<li>3 heures consacrées aux grosses questions (au nombre de 2)</li>
<li>3 heures consacrées aux petites questions (au nombre de 3)</li>
</ul>
<p>8 heures de préparation pour &#8230; 45 minutes de présentation. J&#8217;avais une crainte là-dessus mais si la présentation avait duré 5 à 10 minutes de moins ça aurait été mieux. C&#8217;est noté pour la prochaine fois <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Comme toujours, une présentation en direct est autrement plus parlante puisque les <em>slides</em> ne sont qu&#8217;un support à la discussion.</p>
<p>L&#8217;exercice consistait à répondre à des questions posées au préalable : de la gestion générale à du très précis ciblant la présentation d&#8217;un blog particulier. L&#8217;occasion de vulgariser au maximum des concepts tels que les sauvegardes, le référencement et les feuilles de style.</p>
<h3>Les faits marquants de BlogCamp Bordeaux #3</h3>
<p>Outre la razzia sur les boissons (après 1h il n&#8217;y avait déjà plus rien à boire), j&#8217;ai noté une <strong>grande mixité des participants</strong> : étudiants, salariés, patrons &#8230; tous liés au Web &#8230; ou pas. Le dénominateur commun de toutes ces personnes était clairement la curiosité de découvrir un évènement lié au Web à Bordeaux.<br />
C&#8217;est d&#8217;autant plus satisfaisant que ces personnes en sont reparties le sourire aux lèvres, ravies d&#8217;avoir rencontré de nouveaux contacts et constaté qu&#8217;à Bordeaux, ça bougeait enfin un peu. Une progression à suivre.</p>
<p>Je note aussi la <strong>présence de la &laquo;&nbsp;Dream Team&nbsp;&raquo; bordelaise</strong> avec des représentants des sociétés <a href="http://www.addeo.com/">ADDEO</a>, <a href="http://www.websiteburo.com/">Websiteburo</a>, <a href="http://www.clever-age.com/">Clever Age</a> mais surtout <a href="http://www.temesis.com/">Temesis</a>. J&#8217;espère très sincèrement que la prochaine fois on pourra davantage discuter et échanger tous ensemble sur le Web à Bordeaux.</p>
<p>La rumeur du jour serait qu&#8217;un <strong>blog commun aux sociétés des TIC</strong> serait en cours de création pour diffuser de l&#8217;information liée à l&#8217;économie du Web à Bordeaux. J&#8217;espère que ça se concrétisera et contribuera à dynamiser l&#8217;économie numérique de la région.</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/blogcamp-bordeaux-3-le-dessous-des-cartes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Bonnes pratiques de codage CSS</title>
		<link>http://case.oncle-tom.net/2008/bonnes-pratiques-codage-css/</link>
		<comments>http://case.oncle-tom.net/2008/bonnes-pratiques-codage-css/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 06:00:18 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[aptana]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[coding standards]]></category>
		<category><![CDATA[compresseur]]></category>
		<category><![CDATA[conventions]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[CSSDoc]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[feuille de style]]></category>
		<category><![CDATA[indentation]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[optimisation]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/2008/02/26/bonnes-pratiques-codage-css/</guid>
		<description><![CDATA[J&#8217;y songeais mais l&#8217;article «De l&#8217;ordre, que diable !» m&#8217;a incité à m&#8217;y atteler plus tôt que prévu. Il n&#8217;y a en effet pas de méthode universelle pour programmer les CSS mais après plusieurs années d&#8217;expérience, j&#8217;ai affiné ma réflexion que je vous livre aujourd&#8217;hui. Où l&#8217;on parlera de présentation en 1 ligne, de CSSDoc [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2008/02/css-url-import.png" alt="CSS URL @import" /></p>
<p>J&#8217;y songeais mais l&#8217;article «<a href="http://blog.alsacreations.com/2008/02/21/411-de-lordre-que-diable-">De l&#8217;ordre, que diable !</a>» m&#8217;a incité à m&#8217;y atteler plus tôt que prévu.<br />
Il n&#8217;y a en effet <strong>pas de méthode universelle pour programmer</strong> les <acronym title="Cascading Style Sheets"><acronym title="Cascading Style Sheets">CSS</acronym></acronym> mais après plusieurs années d&#8217;expérience, j&#8217;ai affiné ma réflexion que je vous livre aujourd&#8217;hui.</p>
<p>Où l&#8217;on parlera de présentation en 1 ligne, de CSSDoc mais aussi de <em>folding</em> et d&#8217;indentation. <strong>En clair, tout plein de bonnes pratiques</strong> de développement en <acronym title="Cascading Style Sheets">CSS</acronym> qui vous feront gagner du temps, vous éviterons de la sueur et sentent bon le travail de qualité.<br />
<span id="more-878"></span></p>
<h3>Halte là et retour à la ligne !</h3>
<p>J&#8217;ai utilisé pendant un moment la technique dite du <a href="http://orderedlist.com/articles/single-line-css">single line <acronym title="Cascading Style Sheets">CSS</acronym></a> ; à savoir 1 ligne par déclaration.<br />
Je n&#8217;hésiterai pas une seconde à dire que je déconseille fortement cette écriture pour les raisons suivantes :</p>
<ul>
<li>si on souhaite gagner de la place, il y a des compresseurs (je recommande <a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a>): pas la peine de réaliser ce travail nous-même ;</li>
<li>l&#8217;ajout de commentaires n&#8217;en est que plus compliqué : on a tous besoin de commenter certains passages cruciaux, notamment les <em>hacks</em> et autres <em>fix</em> ;</li>
<li>c&#8217;est tout bonnement illisible dès qu&#8217;on s&#8217;y replonge quelques semaines plus tard : imaginez pour quelqu&#8217;un qui n&#8217;a pas écrit le code !</li>
</ul>
<p>Les arguments avancés pour cette technique ne tiennent pas la route : <strong>on recherche avant tout la qualité et la facilité de relecture</strong>. Les quelques kilo-octets à perdre se feront par le biais de programmes. Ça ne doit certainement pas entraver le développement.</p>
<h3>L&#8217;auto-documentation avec la syntaxe CSSDoc</h3>
<p>Les habitués de Java connaissent <a href="http://java.sun.com/j2se/javadoc/">JavaDoc</a>.<br />
Les habitués de <acronym title="Pre-Hypertext Processing">PHP</acronym> connaissent <a href="http://www.phpdoc.org/">PHPDoc</a>.<br />
Les habitués de JavaScript connaissent <a href="http://code.google.com/p/jsdoc-toolkit/">JsDoc Toolkit</a> (dérivé de <a href="http://jsdoc.sourceforge.net/">JsDoc</a>).</p>
<p>Il était donc tout naturel que cette syntaxe de commentaires et d&#8217;auto-documentation soit utilisable en <acronym title="Cascading Style Sheets">CSS</acronym> avec <a href="http://cssdoc.net">CSSDoc</a>. Il n&#8217;y a pas d&#8217;inconvénient à l&#8217;utiliser, au contraire, que des avantages :</p>
<ul>
<li>la syntaxe permet d&#8217;<strong>harmoniser les commentaires</strong> sur les projets impliquant plusieurs développeurs ;</li>
<li>sa syntaxe <strong>facilite la relecture</strong> puisqu&#8217;elle est connue et employée dans de nombreux langages, autres que les <acronym title="Cascading Style Sheets">CSS</acronym> ;</li>
<li>l&#8217;<strong>auto-documentation du code</strong> c&#8217;est faciliter la génération d&#8217;une documentation externe en automatisant le processus ;</li>
<li>documenter en même temps que l&#8217;on écrit c&#8217;est <strong>comprendre ce que l&#8217;on fait</strong> et gagner du temps en évitant une écriture <em>a posteriori</em> ;</li>
</ul>
<p><a href="http://cssdoc.net/wiki/CssdocDraft">La syntaxe CSSDoc est documentée</a>,  aisément reconnaissable et est supportée par les meilleurs éditeurs <acronym title="Cascading Style Sheets">CSS</acronym>, dont <a href="http://www.aptana.com/">Aptana IDE</a> :</p>
<pre><code class="css">/**
 * @author Oncle Tom
 * @lastmodified Fev, 26 2008
 * @media print, screen
 * @site http://www.oncle-tom.net/
 */
/**
 * Redéfinition des balises <acronym title="HyperText Markup Language">HTML</acronym>
 *
 * @section html
 * @todo utiliser un reset.css conforme
 */
html,
*{
  margin: 0;
  padding: 0;
}</code></pre>
<h3>L&#8217;organisation hiérarchique</h3>
<p>J&#8217;ai pour habitude de travailler avec une seule feuille de style par media. Comme je travaille sur des <strong>hiérarchies thématiques</strong>, leur découpage en plusieurs fichiers ne consiste qu&#8217;à du copier/coller. On peut ainsi facilement passer d&#8217;une mono-feuille à du multi-feuilles. Je ne suis pas un fervent utilisateur de ces dernières car un code bien lisible sur une seule page n&#8217;est pas problématique.<br />
Je ne l&#8217;emploie que pour faciliter la réutilisation des <acronym title="Cascading Style Sheets">CSS</acronym> sur plusieurs projets partageant la même base graphique.</p>
<p>Concrètement, je vais d&#8217;abord organiser ma feuille pour redéfinir les éléments <acronym title="HyperText Markup Language">HTML</acronym> génériques puis créer autant de sections qu&#8217;il n&#8217;y en a sur ma page (navigation, contenu, navigation de contenu, contenus annexes etc.).<br />
Plus je m&#8217;avancerai dans la profondeur du balisage <acronym title="HyperText Markup Language">HTML</acronym> et plus j&#8217;indenterai mon code. Cette indentation fait penser à celle utilisée par le <a href="http://www.python.org/">langage Python</a>.</p>
<p>On pourrait résumer cette convention à ceci :</p>
<ul>
<li><strong>pas de tabulation</strong>, que des espaces pour avoir le même affichage peu importe les éditeurs</li>
<li>2 espaces par tabulation</li>
<li><strong>attributs classés par ordre alphabétique</strong> (même logique pour tout le monde)</li>
<li>une ligne d&#8217;espace entre les définitions ; pas de ligne entre les définitions proches/liées</li>
</ul>
<p>C&#8217;est simple et voici un exemple de résultat :</p>
<pre><code class="css">/**
 * Redéfinition du <acronym title="HyperText Markup Language">HTML</acronym>
 */
a{
  text-decoration: underline;
}
  a img{
    border: none;
  }
p{
  line-height: 1.5em;
}
  p img{
    margin: 1.5em
  }
  p img.top{
    margin-top: 0;
  }
/**
 * Contenu
 */
#main-content{
  clear: both;
  width: 100%;
}
  /**
   * Articles
   */
  #articles{
    margin-bottom: 2em;
  }
    #articles h2{
      font-size: 1.5em;
      font-weight: bold;
    }</code></pre>
<p>Les mieux organisés d&#8217;entre vous ajouteront un <strong>tri par fréquence d&#8217;utilisation</strong> afin d&#8217;optimiser les va-et-vient : on met en haut ce qu&#8217;on est susceptible de modifier le plus souvent, en bas ce à quoi on touchera rarement. Je ne vais pas jusque là mais ça reste envisageable, pertinent et surtout adapté aux plus chevronnés de l&#8217;optimisation.</p>
<h3>Autres conseils et astuces</h3>
<h4>Utilisation de raccourcis</h4>
<p>Les <em>aficionados</em> de l&#8217;optimisation et du gain de temps apprécieront cette méthode, s&#8217;ils ne l&#8217;utilisent pas déjà. J&#8217;ai pour habitude de placer des raccourcis dans mes sections pour <strong>faciliter l&#8217;utilisation d&#8217;une recherche via le raccourci clavier</strong> <kbd>Control+F</kbd>.<br />
Je préfixe chaque raccourci d&#8217;un symbole <kbd>=</kbd> :</p>
<pre><code class="css">/**
 * Liens d'évitement
 * =evitement
 */</code></pre>
<p>Je trouve cette méthode très pratique pour atteindre des portions de code. On évite ainsi un appel à la touche <kbd>Alt Gr</kbd> pour appuyer sur le # d&#8217;un ID (pour peu que l&#8217;on n&#8217;ait que des ID en tant que sections). On évite aussi les collisions de nom ou les recherches infructueuses pour cause de changement de nom de classes ou d&#8217;ID.</p>
<h4>De la sémantique, que diable !</h4>
<p>Je suis particulièrement attaché à cette bonne pratique d&#8217;autant plus qu&#8217;elle ne tombe pas forcément sous le sens de tout le monde : <strong>nommez vos ID et classes en fonction de leur <em>signification</em>, pas de leur <em>représentation</em></strong>. C&#8217;est la suite logique de la séparation fond et forme du <acronym title="HyperText Markup Language">HTML</acronym> et des <acronym title="Cascading Style Sheets">CSS</acronym>.</p>
<p><strong>Mauvaise sémantique</strong> :</p>
<pre><code class="css">.rouge{
  color: red;
}
#sidebar{
  /* ... */
}
#top-links{
  /* ... */
}</code></pre>
<p><strong>Bonne/meilleure sémantique</strong> :</p>
<pre><code class="css">.important{
  color: red;
}
#alternate-navigation{
  /* ... */
}
#main-links{
  /* ... */
}</code></pre>
<p><code>#sidebar</code> pourra être renommé différemment selon son contenu, selon que l&#8217;encart contienne des éléments de navigation supplémentaires, des informations utilisateur (<code>#user-content</code>) ou encore des widgets (<code>#widgets</code>).<br />
En conservant votre <acronym title="HyperText Markup Language">HTML</acronym> intact et en jouant sur les <acronym title="Cascading Style Sheets">CSS</acronym>, la <code>#sidebar</code> peut en effet se retrouver tout en bas, à l&#8217;horizontale. Aurez-vous toujours envie de l&#8217;appeler pareil ? Pas forcément. <strong>Un bon nommage est un nommage qui se conserve peu importe l&#8217;aspect de la présentation</strong>.</p>
<h4>Du choix de la langue</h4>
<p>Cette bonne pratique s&#8217;applique aussi bien aux <acronym title="Cascading Style Sheets">CSS</acronym> qu&#8217;à d&#8217;autres langages. Il faut partir du principe qu&#8217;<strong>il ne faut pas mélanger les langues dans le code</strong>, tant dans les commentaires que dans le nommage des classes et ID. <strong>Choisissez-une langue et restez avec</strong>.<br />
Certaines contraintes peuvent faciliter le choix de la langue : le travail avec une équipe internationale ou la redistribution du code. Dans ce cas l&#8217;anglais sera à 99% votre langue de prédilection.</p>
<p>Il n&#8217;y a pas de choix idéal : certains préféreront le tout français, d&#8217;autres le tout anglais. L&#8217;essentiel est que ce <strong>choix soit motivé par des arguments objectifs, pas une préférence personnelle</strong>.</p>
<h4>Recours au <em>folding</em></h4>
<p>J&#8217;en parle succintement mais le <em>folding</em> consiste à utiliser votre éditeur <acronym title="Cascading Style Sheets">CSS</acronym> pour <strong>masquer une partie de code</strong>. Eclipse propose par exemple de masquer toutes les définitions et tous les commentaires : leur contenu n&#8217;est révélé qu&#8217;en le dépliant.</p>
<p>Je ne suis pas un fervent utilisateur de cette pratique bien que je respecte son utilisation. Je trouve qu&#8217;en utilisation les précédentes astuces (hiérarchie + recherche) on s&#8217;y retrouve très bien.</p>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2008/02/css-folding.png" alt="Folding en CSS" /></p>
<h3>Conclusion</h3>
<p>Ma méthodologie n&#8217;est pas parfaite, peut être perfectible et ne conviendra pas à tout le monde, par goûts ou par habitudes. Ces dernières sont cependant à combattre pour améliorer son travail. <strong>Quoi de mieux qu&#8217;un code propre, bien documenté et où l&#8217;on trouvera facilement ce que l&#8217;on cherche</strong> ?</p>
<p>C&#8217;est ce qui importe. <strong>Il y a autant de façons de coder qu&#8217;il n&#8217;y a de développeurs</strong>. Le tout est d&#8217;être ouvert aux améliorations possibles, aux méthodes existantes et à l&#8217;intérêt de leurs utilisations. Je trouverai peut-être cet article obsolète dans 1 an mais il aura été un point de passage.</p>
<p>J&#8217;espère qu&#8217;il le sera au moins en partie pour vous, développeur en herbe ou féru des pseudo-classes <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/bonnes-pratiques-codage-css/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

