<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://dascritch.net/feed/rss2/xslt" ?><rss version="2.0"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>da scritch net works - Mot-clé - regex</title>
	<link>https://dascritch.net/</link>
	<description>Ma vie et tous ses ridicules petits à-côtés : mes émissions “CPU” sur Radio FMR, les standards web, le code et ce qui me passe par la tête.</description>
	<language>fr</language>
	<pubDate>Mon, 08 Jun 2026 17:32:52 +0200</pubDate>
	<copyright>CC pour les textes</copyright>
	<docs>http://blogs.law.harvard.edu/tech/rss</docs>
	<generator>Dotclear</generator>

	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<sy:updateBase>2026-06-08T17:32:52+02:00</sy:updateBase>

	
	<item>
		<title>En 20 lignes pas plus : gérer les options d'appel de tes scripts bash</title>
		<link>https://dascritch.net/post/2018/01/08/En-20-lignes-pas-plus-%3A-g%C3%A9rer-les-options-d-appel-de-tes-scripts-bash</link>
		<guid isPermaLink="false">urn:md5:0aa526a1cf7b586db711bbe7faef546d</guid>
		<dc:date>2018-01-08T05:07:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Quitte à avoir des scripts bash de plus en plus sérieux, on va appliquer les standards d'interface pour que tout le monde s'y retrouve.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Quitte à avoir des scripts bash de plus en plus sérieux, on va appliquer les standards d'interface pour que tout le monde s'y retrouve.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
Cette petite série est &lt;a href=&quot;https://github.com/dascritch/En-20-lignes-pas-plus/blob/master/2_Options.bash&quot;&gt;aussi disponible sur Github, avec le &lt;em lang=&quot;en&quot;&gt;snippet&lt;/em&gt; du code commenté dans ce billet.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://dascritch.net/tag/bash&quot;&gt;Bash n'est pas un langage facile&lt;/a&gt;.&lt;br /&gt;
Ou plutôt, il y est incroyablement facile d'y faire une erreur dont les conséquences seront catastrophiques. Écrire un script bash demande vite une énorme rigueur et des ruses de sioux. De fait, sa puissance est méconnue&amp;nbsp;: &lt;a href=&quot;https://dascritch.net/post/2014/11/04/Retours-sur-Agile-Tour-Toulouse#bashentdd&quot;&gt;Certains font même du &lt;abbr&gt;TDD&lt;/abbr&gt; avec&amp;nbsp;!&lt;/a&gt;
&lt;p&gt;
&lt;/p&gt;
Pour l'instant, on va partir dans l'idée que vous avez un serveur applicatif professionnel, que des scripts tournent dessus (par exemple en &lt;em lang=&quot;en&quot;&gt;cron&lt;/em&gt;), ou sont disponibles pour une administration en &lt;em lang=&quot;en&quot;&gt;remote&lt;/em&gt;. On va voir comment rendre vos programmes plus pratiques et professionnels en y proposant une interface en ligne de commande digne de ce nom, avec &lt;a href=&quot;http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html&quot;&gt;des options dans le style &lt;abbr&gt;POSIX&lt;/abbr&gt;&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Et on va se concentrer sur les options &lt;em lang=&quot;en&quot;&gt;&lt;abbr&gt;GNU&lt;/abbr&gt;-style&lt;/em&gt;, c'est à dire explicites. Parce que le &lt;em lang=&quot;en&quot;&gt;one-letter porridge&lt;/em&gt; &lt;code&gt;-lhAzkjfsoplS&lt;/code&gt;… au secours.
&lt;/p&gt;
&lt;p&gt;
Alors, de suite, une question : Pourquoi l'avoir fait en &lt;em&gt;bash&lt;/em&gt;&amp;nbsp;?&lt;br /&gt;
Parce que des fois on ne maitrise absolument pas ce qui tourne sur l'ordinateur où il va être déployé, ou même son architecture (y'a pas que x86 dans la vie), et plutôt que réinventer un récupérateur de données via https:// ou écrire un parseur json, il est plus facile de demander à ce que deux/trois utilitaires standards soient installés. Et d'une manière étonnante, &lt;em&gt;bash&lt;/em&gt; est souvent mésestimée. Oui, &lt;em&gt;zsh&lt;/em&gt; et bien plus puissant, mais il ne fait pas tout, et n'est pas disponible partout.
&lt;/p&gt;

&lt;h3 id=&quot;le_code&quot;&gt;&lt;abbr lang=&quot;en&quot; title=&quot;Too long ; didn't read&quot;&gt;TL;DR&lt;/abbr&gt; Montre ton code !&lt;/h3&gt;

&lt;p&gt;
Attention : ce &lt;em lang=&quot;en&quot;&gt;snippet&lt;/em&gt; doit être dans le code principal, pas en fonction. Le script doit absolument fonctionner en &lt;em&gt;bash&lt;/em&gt;, &lt;a href=&quot;https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html#Invoked-with-name-sh&quot;&gt;précisez donc bien &lt;code&gt;#!/bin/bash&lt;/code&gt;&lt;/a&gt; dans votre entête.
&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;
set &lt;var&gt;-e&lt;/var&gt;
&lt;strong&gt;while&lt;/strong&gt; [ &lt;em&gt;'&lt;var&gt;-&lt;/var&gt;' == &quot;${1:0:1}&quot;&lt;/em&gt; ] ; &lt;strong&gt;do&lt;/strong&gt;
    &lt;strong&gt;case&lt;/strong&gt; &quot;&lt;em&gt;${1}&lt;/em&gt;&quot; &lt;strong&gt;in&lt;/strong&gt;
        &lt;em&gt;-h|--help&lt;/em&gt;)
            echo &quot;&lt;var&gt;${HELP}&lt;/var&gt;&quot;
            &lt;strong&gt;exit &lt;var&gt;0&lt;/var&gt;&lt;/strong&gt;
        ;;
        &lt;em&gt;-u|--unlock&lt;/em&gt;)
            _unlock_script
            &lt;strong&gt;exit &lt;var&gt;0&lt;/var&gt;&lt;/strong&gt;
        ;;
        &lt;em&gt;-v|--verbose&lt;/em&gt;)
            VERBOSE=&quot;&lt;var&gt;y&lt;/var&gt;&quot;
            option_sub_script=&quot;&lt;var&gt;${option_sub_script} --verbose&lt;/var&gt;&quot;
        ;;
        &lt;em&gt;-i|--interactive&lt;/em&gt;)
            ALWAYS_AUTO=&quot;&lt;var&gt;n&lt;/var&gt;&quot;
            option_sub_script=&quot;&lt;var&gt;${option_sub_script} --interactive&lt;/var&gt;&quot;
        ;;
        &lt;em&gt;--&lt;/em&gt;)
            shift
            &lt;strong&gt;break&lt;/strong&gt;
        ;;
        &lt;em&gt;*&lt;/em&gt;)
          echo &quot;&lt;var&gt;Invalid \&quot;${1}\&quot; option. See ${0} --help&lt;/var&gt;&quot;
          &lt;strong&gt;exit &lt;var&gt;1&lt;/var&gt;&lt;/strong&gt;
       ;;
    &lt;strong&gt;esac&lt;/strong&gt;
    shift
&lt;strong&gt;done&lt;/strong&gt;
&lt;/pre&gt;&lt;/code&gt;

&lt;h3 id=&quot;simple_basique&quot;&gt;Simple et basique&lt;/h3&gt;

&lt;p&gt;
&lt;strong&gt;&lt;code&gt;set -e&lt;/code&gt; forcera votre script bash à crasher au moindre bug&lt;/strong&gt;. C'est un comportement nettement plus acceptable si vous faites des opérations destructives en fin de traitement, ou s'il manque un exécutable important. Sérieux, invoquez-le le plus souvent possible. Cette option est réversible avec &lt;code&gt;set +e&lt;/code&gt;, &lt;a href=&quot;http://tldp.org/LDP/abs/html/options.html&quot;&gt;les autres options de bash devraient aussi vous intéresser.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;J'encapsule et j'échappe toujours&lt;/strong&gt; les chaines de caractères.
&lt;/p&gt;

&lt;p&gt;
Quand j'utilise une variable, je fais toujours en sorte d'&lt;strong&gt;utiliser la notation échappée &lt;code&gt;${VAR}&lt;/code&gt;&lt;/strong&gt;, c'est un réflexe à prendre qui peut vous être bien utile.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Nommez explicitement vos variables, vos constantes et vos valeurs magiques&lt;/strong&gt;, dit le mec qui utilise extensivement &lt;code&gt;${1}&lt;/code&gt; dans cette démo.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Je préfixe les fonctions internes&lt;/strong&gt; par un &lt;kbd&gt;_&lt;/kbd&gt;. Parfois je le fais pas &lt;a href=&quot;https://dascritch.net/post/2017/09/25/En-20-lignes-pas-plus-%3A-un-verrou-non-concurrentiel-pour-tes-scripts-bash&quot;&gt;(voir le script de lock)&lt;/a&gt;, quand c'est non pas le script principal, mais une inclusion d'utilitaires.
&lt;/p&gt;

&lt;p&gt;
Le bash étant encore plus susceptible de vous faire des blagues à la moindre typo qu'un javascript, il est bienvenu &lt;strong&gt;dans une comparaison de mettre la constante comme premier argument&lt;/strong&gt;. Donc &lt;code&gt;if [ 'y' == ${VERBOSE} ] ; then&lt;/code&gt;, ce qui se montre parfois plus lisible que l'inverse.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Soyez très discipliné avec l'indentation&lt;/strong&gt;, sinon vous allez vous y perdre... La coloration syntaxique d'un IDE ou de vim ne fait pas tout.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Les arguments, ou paramètres d'une ligne d'appel d'un script shell, sont découpés par les espaces, et classés dans &lt;code&gt;${1}&lt;/code&gt;, &lt;code&gt;${2}&lt;/code&gt;, &lt;code&gt;${3}&lt;/code&gt;...&lt;/strong&gt; Ainsi dans &lt;q&gt;truc.sh muche bidule&lt;/q&gt;, &lt;code&gt;${2}&lt;/code&gt; retournera &lt;q&gt;bidule&lt;/q&gt;&lt;br /&gt; Attention : &lt;ul&gt;
&lt;li&gt;Si vous êtes dans une déclaration de fonction, ces paramètres font référence à &lt;/em&gt;l'appel de la fonction&lt;/em&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;${0}&lt;/code&gt; est l'appel à votre programme,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2018/01/08/En-20-lignes-pas-plus-%3A-g%C3%A9rer-les-options-d-appel-de-tes-scripts-bash#todo&quot;&gt;Il y a une autre méthode, &lt;code&gt;getopt&lt;/code&gt;, mais je l'ai écartée car elle incite à de mauvaise pratiques&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Les options sont en début de train de paramétrage&lt;/strong&gt;, on va donc faire une boucle tant qu'on a un argument dont le premier caractère commence par &lt;kbd&gt;-&lt;/kbd&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;strong&gt;La notation étendue des variables permet des choses assez magiques&lt;/strong&gt; comme &lt;a href=&quot;https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html&quot;&gt;la substitution ou encore de n'utiliser qu'une partie de la chaine de caractère&lt;/a&gt;. &lt;code&gt;${VAR:0:1}&lt;/code&gt; est une manière habile de ne récupérer que le premier caractère de la variable &lt;code&gt;${VAR}&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Boucle &lt;q&gt;si jamais, tant que&lt;/q&gt;&lt;/strong&gt;  : &lt;br /&gt;
&lt;code&gt;&lt;strong&gt;While&lt;/strong&gt; [ &lt;em&gt;condition&lt;/em&gt; ] ; &lt;strong&gt;do&lt;/strong&gt;&lt;br /&gt;
 &amp;nbsp; […] &lt;br /&gt;
&lt;strong&gt;done&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt; . dont on peut &lt;strong&gt;s'échapper avec &lt;code&gt;break&lt;/code&gt;&lt;/strong&gt;. Ici, tant que le paramètre analysé a comme premier caractère un &lt;kbd&gt;-&lt;/kbd&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;code&gt;shift&lt;/code&gt; est &lt;a href=&quot;http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_07.html&quot;&gt;une commande qui décale/dépile les paramètres positionnels&lt;/a&gt;&lt;/strong&gt;, à rapprocher dans l'idée d'un &lt;code&gt;Array.pop()&lt;/code&gt; dans tout langage plus structuré. Ainsi &lt;code&gt;${2}&lt;/code&gt; devient &lt;code&gt;${1}&lt;/code&gt; ... Une fonction particulièrement magique pour faire des boucles sur les paramètres 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;&lt;code&gt;case &lt;var&gt;&amp;lt;var&amp;gt;&lt;/var&gt; in&lt;/code&gt; est un &lt;q&gt;switch&lt;/q&gt;-like&lt;/strong&gt; . À noter sa syntaxe très alambiquée, comme tout ce qui est un peu technique en bash. Ainsi, il se termine avec son mot clé renversé, &lt;code&gt;esac&lt;/code&gt;, comme &lt;code&gt;fi&lt;/code&gt; pour un &lt;code&gt;if&lt;/code&gt;...  C'était quel &lt;a href=&quot;https://fr.wikipedia.org/wiki/Mr_Mxyztplk&quot;&gt;personnage DC qui prononce des invocations à l'envers pour les annuler&amp;nbsp;?&lt;/a&gt;
&lt;br /&gt;
&lt;strong&gt;Chaque cas commence par &lt;code&gt;&lt;em&gt;&amp;lt;regex&amp;gt;&lt;/em&gt;)&lt;/code&gt;&lt;/strong&gt;. Nous avons donc pour le premier cas une règle qui accepte &lt;q&gt;-h&lt;/q&gt; ou &lt;q&gt;--help&lt;/q&gt;, puisque &lt;code&gt;|&lt;/code&gt; est une alternative logique, un &lt;q&gt;ou&lt;/q&gt;.&lt;br /&gt;
La fin du cas est symbolisée par &lt;code&gt;;;&lt;/code&gt;.&lt;br /&gt;
Le traitement d'un cas non expressivement décrit se fait via &lt;code&gt;*)&lt;/code&gt;, &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;regex&lt;/a&gt; oblige ;) 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Rédigez toujours un message d'aide en début de votre script&lt;/strong&gt;. La documentation atomique toujours au plus près de votre code atomique, ce qui permet de le lier directement à vos commits git. Je le déclare en multiligne dans la variable &lt;code&gt;HELP&lt;/code&gt;, que je ressors dans le programme avec l'option &lt;code&gt;--help&lt;/code&gt;, ou &lt;code&gt;-h&lt;/code&gt; pour les personnes pressées.&lt;br /&gt;
Inspirez-vous des autres programmes pour faire une jolie sortie d'aide en ligne, avec la mise en forme, les rubriques et les chapitres les plus standards possibles. Plus elle informera l'utilisateur, moins vous chercherez rageusement à faire un &lt;code&gt;man&lt;/code&gt;, un &lt;code&gt;help&lt;/code&gt;, un &lt;code&gt;lynx bing.com/search?q=site:stackoverflow&lt;/code&gt;...&lt;br /&gt;
Avec ça, vous pourrez vous passer de créer une manpage, un .rst spécifique et autre help files exotiques.
&lt;/p&gt;

&lt;p&gt;
option &lt;code&gt;--unlock&lt;/code&gt; parce que si votre script est global, pensez toujours à &lt;a href=&quot;https://dascritch.net/post/2017/09/25/En-20-lignes-pas-plus-%3A-un-verrou-non-concurrentiel-pour-tes-scripts-bash&quot;&gt;mettre un &lt;em lang=&quot;en&quot;&gt;lock&lt;/em&gt; pour éviter une désastreuse exécution concurrentielle&lt;/a&gt;. J'ai expliqué précédemment comment. L'intérêt de cette option est de &lt;strong&gt;ne pas avoir à chercher&lt;/strong&gt; comme un fou où est ce &lt;del&gt;foutu&lt;/del&gt; satané &lt;em lang=&quot;en&quot;&gt;lock&lt;/em&gt; s'il n'est pas dans &lt;code&gt;/var/run&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
option &lt;code&gt;--verbose&lt;/code&gt; parce que si votre script est assez tarabiscoté, &lt;strong&gt;pensez à documenter ce que fait chaque fonction dans la sortie standard&lt;/strong&gt;, et à passer ce paramètre à chaque programme important que vous utilisez
&lt;/p&gt;


&lt;p&gt;
option &lt;code&gt;--interactive&lt;/code&gt; pour &lt;strong&gt;que le pupitreur puisse valider&lt;/strong&gt; ou sauter des étapes internes à votre script sans pleurer à tout commenter. Voici typiquement l'invite que cela produit sur mes scripts d'administrations :
&lt;/p&gt;
&lt;blockquote&gt;
Dump de la base vers /backup/2018-01-05-07h15.sql : [E]xécuter, [S]auter, [C]ontinuer automatiquement, [Q]uitter ?  
&lt;/blockquote&gt;
&lt;p&gt;
Croyez-moi que mes collègues me bénissent quand ils découvrent cette option.
&lt;/p&gt;


&lt;p&gt;
option &lt;strong&gt;&lt;code&gt;--&lt;/code&gt;  , une excellente &lt;a href=&quot;https://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html&quot;&gt;convention des utilitaires GNU&lt;/a&gt;&lt;/strong&gt; pour éviter qu'un fichier qui s'appelle &lt;code&gt;--truc&lt;/code&gt; ou &lt;code&gt;-h&lt;/code&gt; ne vous mettent un bazar incroyable dans votre ligne de commande parce qu'elle est interprétée comme une option. Oui, cela arrive. Méfiez-vous des &lt;code&gt;rm *&lt;/code&gt; dans un répertoire avec beaucoup de fichiers. #protip&lt;br /&gt;
Je sors de ma boucle &lt;code&gt;while&lt;/code&gt; avec un &lt;code&gt;break&lt;/code&gt; en toute tranquillité.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Plantez à la moindre option d'appel inconnue&lt;/strong&gt;, sauf en mode &lt;code&gt;--help&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Pour terminer votre script, &lt;strong&gt;&lt;code&gt;exit&lt;/code&gt; accepte un paramètre numérique pour informer d'une fin normale ou malheureuse&lt;/strong&gt;&amp;nbsp;:&lt;ul&gt;
&lt;li&gt;&lt;var&gt;0&lt;/var&gt; si tout va bien&lt;/li&gt;
&lt;li&gt;Tout autre nombre, mais de préférence entre &lt;var&gt;1&lt;/var&gt; et &lt;var&gt;255&lt;/var&gt;, si vous avez un bug&amp;nbsp; ce qui fera aussi planter un éventuel script bash parent si &lt;code&gt;set -e&lt;/code&gt; est présent. &lt;a href=&quot;http://tldp.org/LDP/abs/html/exitcodes.html&quot;&gt;La signification de ces valeurs magique manque singulièrement de standardisation.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/p&gt;

&lt;h3 id=&quot;todo&quot;&gt;À améliorer&lt;/h3&gt;
&lt;p&gt;
Le code actuel ne gère pas les options paramétriques du type &lt;code&gt;--verbose=8&lt;/code&gt;&lt;br /&gt;
J'ai &lt;em&gt;volontairement&lt;/em&gt; écarté pour cet exemple &lt;code&gt;getopt&lt;/code&gt; car
&lt;ul&gt;
&lt;li&gt;il n'est pas toujours facile à lire par tous les devs,&lt;/li&gt;
&lt;li&gt;sa syntaxe incite plus à écrire des options en un caractère, et donc d'être beaucoup moins explicite.&lt;/li&gt;
&lt;/ul&gt;
À sa décharge, l'accusé a néanmoins une très bonne prise en charge des valeurs d'arguments, ce que ne fait pas ce script. &lt;a href=&quot;https://www.quennec.fr/book/export/html/341&quot;&gt;Si vous préférez &lt;code&gt;getopt&lt;/code&gt;, je vous recommande cette excellente ressource en français&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
L'ensemble est très nettement perfectible, j'en suis absolument sûr. Mais &lt;a href=&quot;http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_03.html#sect_07_03_02&quot;&gt;pour les &lt;q&gt;antiques&lt;/q&gt; scripts init, cette construction était parfaite.&lt;/a&gt;
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Brand new podcast</title>
		<link>https://dascritch.net/post/2014/09/30/Brand-new-podcast</link>
		<guid isPermaLink="false">urn:md5:bec7698a24f7d74459c6c50df3371e1b</guid>
		<dc:date>2014-09-30T07:20:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Radio</dc:subject>
        
    <description>Ça y est, les sonores @HalluFMR arrivent !		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Radio"&gt;Radio&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Ça y est, les sonores @HalluFMR arrivent !&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Radio"&gt;
			Radio&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
Oui, &lt;a href=&quot;http://supplementweekend.fr&quot;&gt;le &lt;strong&gt;Supplément Week-End&lt;/strong&gt;&lt;/a&gt; est terminé, mais au même horaire, Ultimatom, Dusport et tous leurs comparses vous attendent pour leur émission &lt;strong&gt;Cross/Over&lt;/strong&gt;. Toujours le Samedi de 12 à 14h, sur &lt;a href=&quot;http://radio-fmr.net&quot;&gt;Radio &amp;lt;FMR&amp;gt;&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Et de mon côté, ce parano foutraque d'Eugène Lawn m'a demandé d'animer une petite rubrique dans son 17/19 du Mercredi, aka &lt;strong&gt;L'Hallucinarium&lt;/strong&gt;. Occasion trop belle pour parler aux masses des enjeux du numérique, oui, mais attention&amp;nbsp;: avec un ton pédant.
&lt;/p&gt;
&lt;p&gt;
&lt;img class=&quot;r&quot; alt=&quot;&quot; src=&quot;http://dascritch.net/vrac/.blog2/radio/.1409-Hallucinarium-FMR_s.jpg&quot; /&gt;
Je viens enfin de recevoir les sonores, pour 3 des 4 premières émissions. Profitez&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/09/03/micro-%40HalluFMR-1-%3A-Rebecca-purple&quot;&gt;Rebecca purple (3/09)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/09/10/micro-%40HalluFMR-2-%3A-Le-dilemme-Apple&quot;&gt;Le dilemme Apple (10/09)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/09/17/%40Hallucinarium-3-%3A-Loi-de-Lutte-contre-le-Terrorisme&quot;&gt;Loi de Lutte contre le terrorisme (17/09)&lt;/a&gt;, sonore à venir&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/09/24/%40HalluFMR-4-%3A-Les-prix-IgNobel&quot;&gt;Les prix IgNobel (24/09)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Mes rubriques restent en licence Creative Commons, permettant par exemple à &lt;a href=&quot;http://jukast.com/#login&quot;&gt;Jukast&lt;/a&gt; de proposer prochainement ma rubrique pour réveiller des gens au hasard sur Facebook.
&lt;/p&gt;
&lt;h3 id=&quot;poildecode&quot;&gt;Un petit poil de code&lt;/h3&gt;
&lt;p&gt;
(et là, normalement, je largue tout le monde, mouahahaha)
&lt;/p&gt;
&lt;p&gt;
Pour être définitivement honnête, il existe une multitude d'outils et de services en ligne qui gèrent très bien les podcast. Mais dans l'immédiat, je préfère en garder la gestion, et donc héberger les sonores et faire le code qui va avec.
&lt;/p&gt;
&lt;p&gt;
Pour mes amis, Thomas, Olivier, etc... voici un petit script qui à partir du &lt;code&gt;raw.wav&lt;/code&gt; me fait les deux fichiers nécessaires prêts-à-diffuser. Sachant que le format ogg vorbis est préféré au mp3 quand on reprend une archive en radio. &lt;a href=&quot;http://dascritch.net/post/2012/01/24/Pour-une-compression-mieux-g%C3%A9r%C3%A9e#inutile&quot;&gt;J'ai déjà écrit sur les encodeurs Franhoffer, la connerie ambiante sur le MP3,&lt;/a&gt; sachant qu'on en retrouve beaucoup d'héritages dans la famille AAC, là où le ogg vorbis est prévu pour un bitrate variable et n'a pas été conçu par une équipe de sourds.
&lt;/p&gt;
&lt;p&gt;
MP3 est le format le plus utilisé, mais non libre, Ogg Vorbis est mon format de préférence en html5 et passe sur pratiquement tous les navigateurs modernes, excepté Safari.
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;strong&gt;#!/bin/bash&lt;/strong&gt;

&lt;em&gt;NUMERO=&lt;/em&gt;&lt;i&gt;&amp;quot;4&amp;quot;&lt;/i&gt;
&lt;em&gt;DDTMMTYY=&lt;/em&gt;&lt;i&gt;&amp;quot;24-09-14&amp;quot;&lt;/i&gt;
&lt;em&gt;DDSMMSYY=&lt;/em&gt;&lt;i&gt;&amp;quot;24/09/2014&amp;quot;&lt;/i&gt;
&lt;em&gt;SUJET=&lt;/em&gt;&lt;i&gt;&amp;quot;Les prix IgNobel&amp;quot;&lt;/i&gt;
&lt;em&gt;YEAR=&lt;/em&gt;&lt;i&gt;&amp;quot;2014&amp;quot;&lt;/i&gt;
&lt;em&gt;TRIGGER=&lt;/em&gt;&lt;i&gt;&amp;quot;AtHalluFMR&amp;quot;&lt;/i&gt;
&lt;em&gt;EMISSION=&lt;/em&gt;&lt;i&gt;&amp;quot;Da Scritch @HalluFMR&amp;quot;&lt;/i&gt;
&lt;em&gt;COPYRIGHT=&lt;/em&gt;&lt;i&gt;&amp;quot;DaScritch &amp;amp; co pour Radio FMR&amp;quot;&lt;/i&gt;
&lt;em&gt;SITE=&lt;/em&gt;&lt;i&gt;&amp;quot;http://dascritch.net&amp;quot;&lt;/i&gt;
&lt;em&gt;PADWAV=&lt;/em&gt;&lt;i&gt;&amp;quot;pad.wav&amp;quot;&lt;/i&gt;
&lt;strong&gt;oggenc&lt;/strong&gt; -o &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$NUMERO&lt;/em&gt;&lt;i&gt;-&lt;/i&gt;&lt;em&gt;$TRIGGER&lt;/em&gt;&lt;i&gt;(&lt;/i&gt;&lt;em&gt;$DDTMMTYY&lt;/em&gt;&lt;i&gt;).ogg&amp;quot;&lt;/i&gt; -t &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$EMISSION&lt;/em&gt;&lt;i&gt;: &lt;/i&gt;&lt;em&gt;$SUJET&lt;/em&gt;&lt;i&gt; (&lt;/i&gt;&lt;em&gt;$DDSMMSYY&lt;/em&gt;&lt;i&gt;)&amp;quot;&lt;/i&gt; -d &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$DDSMMSYY&lt;/em&gt;&lt;i&gt;&amp;quot;&lt;/i&gt; -N &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$NUMERO&lt;/em&gt;&lt;i&gt;&amp;quot;&lt;/i&gt; -a &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$COPYRIGHT&lt;/em&gt;&lt;i&gt;&amp;quot;&lt;/i&gt; -G &lt;i&gt;&amp;quot;radio&amp;quot;&lt;/i&gt; -l &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$SITE&lt;/em&gt;&lt;i&gt;&amp;quot;&lt;/i&gt; -c &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$SUJET&lt;/em&gt;&lt;i&gt;&amp;quot;&lt;/i&gt; -q 6 &lt;em&gt;$PADWAV&lt;/em&gt;
&lt;strong&gt;lame&lt;/strong&gt; -b 128 --tt &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$EMISSION&lt;/em&gt;&lt;i&gt; (&lt;/i&gt;&lt;em&gt;$DDSMMSYY&lt;/em&gt;&lt;i&gt;)&amp;quot;&lt;/i&gt; --tn &lt;em&gt;$NUMERO&lt;/em&gt; --ta &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$COPYRIGHT&lt;/em&gt;&lt;i&gt;&amp;quot;&lt;/i&gt; --tl &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$SITE&lt;/em&gt;&lt;i&gt;&amp;quot;&lt;/i&gt; --ty &lt;em&gt;$YEAR&lt;/em&gt; --tg 20 &lt;em&gt;$PADWAV&lt;/em&gt; &lt;i&gt;&amp;quot;podcast/&lt;/i&gt;&lt;em&gt;$NUMERO&lt;/em&gt;&lt;i&gt;-&lt;/i&gt;&lt;em&gt;$TRIGGER&lt;/em&gt;&lt;i&gt;(&lt;/i&gt;&lt;em&gt;$DDTMMTYY&lt;/em&gt;&lt;i&gt;).mp3&amp;quot;&lt;/i&gt; --tc &lt;i&gt;&amp;quot;&lt;/i&gt;&lt;em&gt;$SUJET&lt;/em&gt;&lt;i&gt;&amp;quot;&lt;/i&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
Vous retrouverez sur github &lt;a href=&quot;https://github.com/dascritch/DSN13/blob/master/tpl/_mp3_player.html&quot;&gt;le snippet de template qui me sert à inclure les podcast&lt;/a&gt; dans &lt;a href=&quot;https://github.com/dascritch/DSN13/&quot;&gt;mon thème dotclear,&lt;/a&gt; mais qui doit être accompagné d'&lt;a href=&quot;https://github.com/dascritch/DSN13/blob/master/_public.php&quot;&gt;une extension spécifique au langage de template.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Je l'ai écrit un peu trop vite, il manque notamment une regex pour automatiser le passage de &lt;code&gt;DDTMMTYY&lt;/code&gt; à &lt;code&gt;DDSMMSYY&lt;/code&gt; . Pardon, de &lt;code&gt;(\d{2})\-(\d{2})\-(\d{2})&lt;/code&gt; à &lt;code&gt;$1/$2/20$3&lt;/code&gt;, et une sortie qui me donne le code HTML à mettre en entête de billet, j'irais nettement plus vite.
&lt;/p&gt;
&lt;p&gt;
Mais là, ce soir, j'ai la flemme : y'a Castle à la tv.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Formulaire de contact ou mailto: ?</title>
		<link>https://dascritch.net/post/2014/08/19/Formulaire-de-contact-ou-mailto</link>
		<guid isPermaLink="false">urn:md5:7b824f9010752271da1c27be1f363d0a</guid>
		<dc:date>2014-08-19T09:40:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Qu'aviez-vous prévu pour que les visiteurs de votre site puisse prendre contact avec vous&amp;nbsp;? Un formulaire Facebook&amp;nbsp;? Ou une pop-in d'assistante virtuelle à balconnet pigeonnant&amp;nbsp;?		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Qu'aviez-vous prévu pour que les visiteurs de votre site puisse prendre contact avec vous&amp;nbsp;? Un formulaire Facebook&amp;nbsp;? Ou une pop-in d'assistante virtuelle à balconnet pigeonnant&amp;nbsp;?&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/.1408-FormulaireDeContact-boitesuggestions_t.jpg&quot; alt=&quot;Boîte à suggestions. En bois.&quot; /&gt;
&lt;figcaption&gt;
&lt;small&gt;&lt;a href=&quot;http://www.demco.fr/efr-entretien-maintenance-des-locaux/efr-boites-a-suggestions/suggestions-box-1.html&quot;&gt;Source : Demco.fr&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Durant &lt;a href=&quot;http://dascritch.com&quot;&gt;mon activité de développeur indépendant (et en tant que salarié aussi)&lt;/a&gt;, on m'a régulièrement demandé de mettre en place un formulaire de contact sur un site web. Ce que j'ai toujours fait sans rechigner.&lt;br /&gt;
Il faut que j'avoue qu'il n'y a rien de sorcier derrière&amp;nbsp;: demander au visiteur de laisser un message, une adresse de contact, et envoyer le tout par e-mail.
&lt;/p&gt;
&lt;p&gt;
&lt;a class=&quot;l&quot; href=&quot;mailto:xav.com@.gmail-iermd+fromweb?subject=j'ai%20lu%20votre%20blog&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/.1408-FormulaireDeContact-mecontacter_s.jpg&quot; alt=&quot;me contacter : lien mailto: vers gmail&quot; /&gt;&lt;/a&gt;
Personnellement, si un formulaire de contact est du Porcinet —&amp;nbsp;l'enfance de lard, bandes d'incultes&amp;nbsp;— j'ai préféré utiliser la solution primitive d'un lien &lt;code&gt;&lt;strong&gt;mailto:&lt;/strong&gt;&lt;/code&gt; pour mon blog et mon site pro. Ce n'est pas par flemme, vous en comprendrez les raisons quand vous arriverez à &lt;a href=&quot;https://dascritch.net/post/2014/08/19/Formulaire-de-contact-ou-mailto#message&quot;&gt;la &lt;abbr title=&quot;Trop long ! Je ne lirai pas en entier&quot;&gt;[TL;DR]&lt;/abbr&gt; conclusion&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Ce billet est mon hommage personnel à &lt;a href=&quot;http://so-use.fr/&quot;&gt;So-Use!, société toulousaine spécialisée dans l'UX&lt;/a&gt;, qui vient malheureusement de clore son activité.&lt;br /&gt;
Bonus :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1055950&quot;&gt;(Firefox) Bug 1055950 - Form with mailto: action is wrongly escaping spaces chars&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;cl&quot; id=&quot;lestandard&quot;&gt;Ce que dit le standard&lt;/h3&gt;
&lt;p&gt;
J'aimerais rappeler un point tellement important qu'il en est évident, &lt;code&gt;&lt;strong&gt;mailto:&lt;/strong&gt;&lt;/code&gt; est &lt;a href=&quot;http://tools.ietf.org/html/rfc2368&quot; title=&quot;The mailto URL scheme&quot; hreflang=&quot;en&quot;&gt;une URL normalisée dans la RFC 2368 et acceptée partout&lt;/a&gt;.
&lt;/p&gt;
&lt;figure&gt;
&lt;figcaption&gt;Merci &lt;del&gt;Capitaine Évidence&lt;/del&gt; Captain Obvious !&lt;/figcaption&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1408-FormulaireDeContact-CaptainObvious.jpg&quot; alt=&quot;&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
Quand vous écrivez &lt;code&gt;&amp;lt;&lt;strong&gt;a&lt;/strong&gt; &lt;i&gt;href&lt;/i&gt;=&quot;&lt;strong&gt;mailto:&lt;/strong&gt;&lt;i&gt;contact@example.com&lt;/i&gt;&quot;&amp;gt;&lt;/code&gt;, vous utilisez une notation URL raccourcie, qui s'écrit de manière développée comme suit&amp;nbsp;: &lt;code&gt;&lt;strong&gt;mailto:&lt;/strong&gt;?&lt;em&gt;to&lt;/em&gt;=&lt;i&gt;contact@example.com&lt;/i&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Oui, cela ressemble très fortement à une requête GET de formulaire. &lt;a href=&quot;http://support.microsoft.com/kb/279460&quot;&gt;Étonnant, non&amp;nbsp;?&lt;/a&gt; Et justement, parmi les paramètres sur lesquels vous pouvez compter&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;?&lt;em&gt;subject&lt;/em&gt;=&lt;i&gt;…&lt;/i&gt;&lt;/code&gt; permet d'ajouter un titre qui reste éditable par l'utilisateur,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;?&lt;em&gt;body&lt;/em&gt;=&lt;i&gt;…&lt;/i&gt;&lt;/code&gt; permet de définir un template de corps de message,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;?&lt;em&gt;cc&lt;/em&gt;=&lt;i&gt;…&lt;/i&gt;&lt;/code&gt; permet d'ajouter d'autres destinataires en copie carbone,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Ce sont les plus utiles dans votre affaire.
&lt;/p&gt;
&lt;figure&gt;
&lt;figcaption&gt;
Pour votre info, vous en avez un exemple &lt;a href=&quot;http://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage&quot;&gt;sur l'icône sociale&lt;/a&gt; &lt;q&gt;Envoyer par e-mail&lt;/q&gt;,&lt;br /&gt;
posé &lt;a href=&quot;https://dascritch.net/post/2014/08/19/Formulaire-de-contact-ou-mailto#content&quot;&gt;plus haut sur cette page&lt;/a&gt;.
&lt;/figcaption&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1408-FormulaireDeContact-exemple-ici.png&quot; alt=&quot;&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
Alors certes, cette RFC comporte des limitations, notamment sur les caractères en 8&amp;nbsp;bits et &lt;a href=&quot;https://dascritch.net/tag/unicode&quot;&gt;l'unicode&lt;/a&gt;, mais dans les faits même ces exceptions sont implémentées partout.&lt;br /&gt;
Bien souvent, les demandes clients spécifiques pour un formulaire de contact venaient de l'ignorance de ces possibilités. Comme quoi, on ne relit jamais assez les standards.
&lt;/p&gt;
&lt;p&gt;
Maintenant, comparons les deux possibilités&amp;nbsp;:
&lt;/p&gt;

&lt;h3 id=&quot;anatomie&quot;&gt;Anatomie visuelle d'un formulaire de contact&lt;/h3&gt;
&lt;form action=&quot;https://dascritch.net/post/2014/08/19/Formulaire-de-contact-ou-mailto#&quot; method=&quot;post&quot;&gt;
&lt;style&gt;
form[action=&quot;https://dascritch.net/post/2014/08/19/Formulaire-de-contact-ou-mailto#&quot;] textarea { width:90% }
&lt;/style&gt;
&lt;p&gt;
Réduit à son strict minimum, le formulaire de contact comporte un champ e-mail, une zone de texte et un bouton de validation. Comme suit&amp;nbsp;:
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;label&gt;Votre e-mail : &lt;input type=&quot;email&quot; required=&quot;required&quot; placeholder=&quot;visiteur@example.com&quot; /&gt;&lt;/label&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;label&gt;Votre message :&lt;br /&gt;&lt;textarea required=&quot;required&quot; placeholder=&quot;Vous faites de la glace au concombre ?&quot;&gt;&lt;/textarea&gt;&lt;/label&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;button type=&quot;submit&quot;&gt;Envoyer&lt;/button&gt;
&lt;/p&gt;

&lt;/blockquote&gt;
&lt;p&gt;
En général, il est complété d'un champ pour avoir le nom de la personne, et parfois d'un titre éditable ou dans un choix limité&amp;nbsp;:
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;label&gt;Sujet : &lt;select&gt;
&lt;option&gt;Demande de renseignement&lt;/option&gt;
&lt;option&gt;Réclamation&lt;/option&gt;
&lt;option&gt;Partenariat&lt;/option&gt;
&lt;/select&gt;&lt;/label&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Pour pouvoir fonctionner, le formulaire de contact est forcément lié à un script côté serveur, qui s'occupe de l'envoi en e-mail, et/ou de stocker le message dans une base de données. Il arrive parfois &lt;a href=&quot;http://blog.codinghorror.com/so-youd-like-to-send-some-email-through-code/&quot;&gt;qu'envoyer un e-mail à partir d'un serveur n'est pas trivial du tout&amp;nbsp;!&lt;/a&gt;
&lt;/p&gt;
&lt;/form&gt;
&lt;h3 id=&quot;form_etendu&quot;&gt;Le formulaire, usage avancé&lt;/h3&gt;
&lt;p&gt;
Le traitement côté serveur permet des petits bonus, notamment de stocker le message dans la base de données et d'&lt;strong&gt;être accessible directement en &lt;i&gt;backoffice&lt;/i&gt;&lt;/strong&gt;. De là, on peut le lier à une commande, &lt;a href=&quot;http://dascritch.net/post/2013/12/10/I-love-bug-reports&quot;&gt;à un ticket interne&lt;/a&gt; voire y accoler différents métriques comme le temps de réponse à la demande client ou le taux de satisfaction. Il peut aussi être ventilé sur plusieurs e-mails d'un coup, voire (ça, c'est ma fonction préférée sur mon application dagence) de constituer un &lt;i&gt;digest&lt;/i&gt; quotidien afin de ne pas encombrer votre e-mail.&lt;br /&gt;
De telles fonctions sont aussi envisageables avec &lt;code&gt;mailto:&lt;/code&gt; mais construire une passerelle de réception d'e-mail est autrement plus compliquée.
&lt;/p&gt;
&lt;p&gt;
Si votre service web n'est pas un véritable intranet ou un &lt;i&gt;backoffice&lt;/i&gt; industriel, vous pouvez le faire via un service tiers comme &lt;a href=&quot;http://www.formsite.com/&quot;&gt;Formsite&lt;/a&gt;, le bien conçu &lt;a href=&quot;http://www.wufoo.com/gallery/templates/forms/contact-form/&quot;&gt;Wufoo&lt;/a&gt; ou même un bête formulaire Google Drive.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1408-FormulaireDeContact-backoffWufoo.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Exemple de &lt;a href=&quot;https://examples.wufoo.com/reports/example-contact-form-report/&quot;&gt;reporting de formulaires de contacts par Wufoo&lt;/a&gt;.&lt;br /&gt;
N'oubliez pas que &lt;a href=&quot;https://aws.amazon.com/customerapps/Amazon-Mechanical-Turk/1289&quot;&gt;ces services sont souvent basés hors Europe&lt;/a&gt;. Donc si les données récoltées sont exploitées commercialement à votre insu, vous en êtes juridiquement responsable, ce qui peut faire très mal.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Attention car &lt;strong&gt;si vous constituez une base de données à partir des e-mails, vous devez vous mettre en conformité en faisant &lt;a href=&quot;https://www.declaration.cnil.fr/declarations/declaration/declarant.display.action&quot;&gt;une déclaration CNIL&lt;/a&gt;&lt;/strong&gt;, en ajoutant des déclarations légales, un formulaire de rectification/désinscription sur votre site et bien sûr en ajoutant une checkbox à votre formulaire&amp;nbsp;:
&lt;/p&gt;
&lt;blockquote&gt;
&lt;label&gt;&lt;input type=&quot;checkbox&quot; /&gt; Je ne souhaite pas être démarché commercialement&lt;/label&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Si vous devez le faire, c'est que votre site manipule suffisamment de données privées et vous l'avez &lt;strong&gt;normalement&lt;/strong&gt; prévu.
&lt;/p&gt;
&lt;h3 id=&quot;form_pragmatique&quot;&gt;Le formulaire, côté pragmatique&lt;/h3&gt;
&lt;p&gt;
Maintenant, regardons à l'usage ce que donne un formulaire de contact&amp;nbsp;:
&lt;/p&gt;
&lt;p&gt;
D'abord, sur le champ e-mail, qu'est-ce qui vous assure que &lt;strong&gt;votre interlocuteur donne son e-mail réel&amp;nbsp;?&lt;/strong&gt; ou qu'il n'a pas fait une faute de frappe&amp;nbsp;? Comparée à l'envoi standard d'un e-mail, ce champ est une saisie inutile.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;L'espace &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt; ne va-t-il pas frustrer&lt;/strong&gt; votre interlocuteur&amp;nbsp;? Notamment sur les dimensions, puisqu'elles sont fixées par design. Ceci dit, depuis 4 ans, la question se pose moins puisque tous les navigateurs proposent de redimensionner à la volée un tel champ. Encore faut-il comprendre à quoi sert cette poignée, et ensuite que le graphiste n'aie pas supprimé cette fonctionnalité &lt;a href=&quot;http://stackoverflow.com/questions/5235142/how-to-disable-resizable-property-of-textarea&quot;&gt;qui casse tout son design&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Le champ texte est simple. &lt;strong&gt;Il manque l'édition riche&lt;/strong&gt; qui peut parfois être utile par exemple pour insérer un lien, et la possibilité de joindre des documents, notamment image, pdf ou vcard. C'est bête, mais vous imaginez mal combien une vcard est pratique en prospection commerciale.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://trve.ru/metal-kartinki/metal-kapchi/&quot;&gt;&lt;img class=&quot;r&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1408-FormulaireDeContact-captcha.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
À court terme, le formulaire va commencer à se faire &lt;strong&gt;repérer par des spammeurs&lt;/strong&gt;, et vous commencerez à avoir des messages indésirables, et un bruit de fond non négligeable. Soit vous avez l'énergie et les moyens pour construire des services de filtrage sur votre serveur (je l'ai fait pour des clients de dagence et c'est vraiment épuisant), ou vous vous basez sur des services tiers genre &lt;a href=&quot;http://akismet.com/plans/&quot;&gt;Askimet&lt;/a&gt; avec les risques très importants de faux-positifs/faux-négatifs. Soit vous comptez sur l'installation économique d'un test de Turing, un captcha donc, qui sera tout sauf une incitation à vous laisser un message. Et encore, j'ai pas parlé &lt;a href=&quot;http://www.urbandictionary.com/define.php?term=Voight-Kampff%20machine&quot;&gt;des machines de Voight-Kampff…&lt;/a&gt;&lt;br /&gt;
Qui plus est, côté script serveur, il existe une multitude de possibilité d'attaques, de détournement du service d'envoi. Combien savent qu'&lt;a href=&quot;http://resources.infosecinstitute.com/email-injection/&quot;&gt;il faut vraiment protéger la commande PHP &lt;code&gt;sendmail()&lt;/code&gt;&lt;/a&gt;&amp;nbsp;? Et d'ailleurs pas qu'en PHP, car j'ai vu ce genre de vulnérabilité en Ruby.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Les gens aiment avoir une trace dans leur client e-mail&lt;/strong&gt; ce qui est normal puisqu'un compte e-mail tient la trace de votre correspondance. Souvent nous profitons des systèmes de tris par discussion, par date, par mots-clés, par étiquettes. Un formulaire de contact est en dehors de cette correspondance. Sauf  si le script côté serveur vous renvoie le message envoyé à votre adresse.
&lt;br /&gt;
Mais &lt;strong&gt;ce genre de rappels est souvent exploité par des spammeurs. Oui, encore.&lt;/strong&gt; Il faut dire que c'est facile : on automatise l'envoi d'un message, mais c'est le serveur exploité qui va se faire bannir et l'entreprise qui le loue va voir sa réputation descendre en flèche. Ce n'est pas un scénario de science-fiction, je l'ai vu chez un client moins de 3 mois après la mise en place du formulaire.
&lt;/p&gt;
&lt;p&gt;
Au final, si vous ne prenez pas proprement en compte le risque de spam, &lt;strong&gt;votre site web pourrait être marqué comme spammeur&lt;/strong&gt; par des serveurs d'e-mail, bloqué par des antivirus, se prendre une mauvaise réputation et vous ne recevrez plus du tout de demande de contacts.&lt;br /&gt;
Une fois qu'on se retrouve dans une telle situation, en général suite à une négligence qu'on a laissé traîner très longtemps, il en est difficile d'en sortir.
&lt;/p&gt;

&lt;h3 id=&quot;mailto_pragmatique&quot;&gt;Le lien &lt;code&gt;mailto:&lt;/code&gt;, côté pragmatique&lt;/h3&gt;

&lt;p&gt;
On ne va pas reparler de la mécanique d'envoi d'un e-mail&amp;nbsp;: en usage depuis 40 ans, &lt;strong&gt;le système est parfaitement maîtrisé&lt;/strong&gt;, on peut donc lui faire confiance.
&lt;/p&gt;
&lt;p&gt;
Hélas, depuis le début des années 1980s, &lt;strong&gt;l'e-mail est encombré de spams&lt;/strong&gt;. Et depuis 15 ans, il existe des robots spiders qui ne font qu'une chose&amp;nbsp;: récolter le plus d'adresses e-mail possibles pour spammer plus. La précaution élémentaire est de ne pas donner une adresse e-mail liée à une personne, mais de créer un compte ou un alias jetable.
&lt;br /&gt;
Néanmoins, on peut se reposer tranquillement sur la cascade de &lt;a href=&quot;http://www.altospam.com/glossaire/filtres-bayesiens.php&quot;&gt;filtres bayésien&lt;/a&gt; et autres qui seront en place entre votre interlocuteur, son FAI, votre FAI et dans votre client e-mail. Et avec l'avantage que tout est déjà configuré, fonctionnel et d'un coût quasi-nul.
&lt;/p&gt;
&lt;p&gt;
Je répète : sauf pour un site personnel, &lt;strong&gt;n'exposez jamais en &lt;code&gt;mailto:&lt;/code&gt; une adresse e-mail nominative&lt;/strong&gt;. Une entreprise, collectivité ou association doit songer qu'une demande de contact peut être reprise par une toute autre personne qu'actuellement. Rien n'est immuable&amp;nbsp;: comme tout corps vivant, ces entités morales sont destinées à changer pour rester en vie. Et &lt;a href=&quot;http://wiki.gandi.net/fr/mail&quot;&gt;au coût actuel d'un alias e-mail chez Gandi&lt;/a&gt;, pourquoi s'en priver&amp;nbsp;?
&lt;/p&gt;
&lt;p&gt;
&lt;img class=&quot;r&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/.1408-FormulaireDeContact-emailmobile_s.png&quot; alt=&quot;interface d'envoi d'e-mail à partir d'un smartphone&quot; /&gt;
Un lien e-mail a un avantage énorme, difficilement quantifiable&amp;nbsp;: contrairement à un formulaire web, il est forcément &lt;strong&gt;adapté au mieux suivant le type d'appareil&lt;/strong&gt; qui accède à votre site&amp;nbsp;: mobile, tablette braille, tout est forcément pris en compte au mieux.&lt;br /&gt;
Et avec les fonctionnalités manquantes, notamment texte enrichi ou ajout de pièces jointes, voire même une gestion automatisée de la signature électronique.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Le client de-mail natif sera forcément plus fonctionnel que n'importe quelle recréation en page web&lt;/strong&gt;. Sauf si vous avez les moyens de payer des dizaines de spécialistes comme Google, Yahoo ou Microsoft.
&lt;/p&gt;
&lt;p&gt;
Mais &lt;strong&gt;si votre visiteur n'a pas de compte e-mail sur cette machine&lt;/strong&gt;, par exemple au travail, dans un web-café ou sur une machine qu'il ne peut juger de confiance, oui cela peut être frustrant.&lt;br /&gt;
Et &lt;strong&gt;il ne peut facilement employer une autre adresse&lt;/strong&gt; e-mail, par exemple une adresse personnelle, un compte jetable ou celui d'une entreprise en cours de création, nous aurons le même souci.
&lt;/p&gt;
&lt;p&gt;
Un lien vers &lt;strong&gt;une adresse e-mail demande le minimum de technologie, inutile d'avoir un script côté serveur&lt;/strong&gt;. Le protocole &lt;code&gt;mailto:&lt;/code&gt; marche vraiment partout. Et en cas d'absence, il &lt;a href=&quot;https://developer.mozilla.org/en/docs/Web-based_protocol_handlers&quot;&gt;peut même s'enregistrer par une application tierce&lt;/a&gt;, et d'ailleurs, gmail le fait.
&lt;/p&gt;
&lt;p&gt;
&lt;img class=&quot;l&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/.1408-FormulaireDeContact-thunderbird_s.jpg&quot; alt=&quot;le logo de Mozilla Thunderbird&quot; /&gt;
Côté réception, &lt;strong&gt;un e-mail peut tout à fait entrer dans un flux de gestion&lt;/strong&gt;, et un compte e-mail en Imap peut parfaitement être partagé entre plusieurs personnes. À vraie dire, je suis très surpris du nombre de gens qui utilisent quotidiennement un client e-mail comme Thunderbird ou Microsoft Outlook sans se rendre compte qu'ils pourraient &lt;a href=&quot;http://fr.wikibooks.org/wiki/Mozilla_Thunderbird/Gestion_des_filtres_de_messages&quot;&gt;se faciliter la vie en paramétrant un tri automatique&lt;/a&gt; et pallier à l'absence d'un outil de gestion documentaire tiers.&lt;br /&gt;
Là aussi, &lt;strong&gt;il vaut mieux se reposer sur l'existant, c'est nettement plus économique et fiable&lt;/strong&gt;, même s'il faut passer deux heures à lire la documentation.
&lt;/p&gt;
&lt;h3 id=&quot;message&quot;&gt;Message envoyé&lt;/h3&gt;
&lt;p&gt;
Le formulaire de contact pose d'innombrables questions d'interface, de sécurité et d'utilisabilité. Celles-ci sont toutes répondues avec la solution la plus standard, la plus simple, le bête lien &lt;code&gt;mailto:&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
La seule utilité réelle du formulaire est l'absence d'e-mail direct, ce qui veut dire qu'il répond à une non-question. 
&lt;/p&gt;
&lt;p&gt;
Si vous devez vous poser la question, et que nous ne construisez pas une importante solution d'e-commerce, ne vous embêtez plus&amp;nbsp;: &lt;strong&gt;les réponses les plus simples sont souvent les plus pertinentes.&lt;/strong&gt;
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Travaux d'été</title>
		<link>https://dascritch.net/post/2014/07/08/Travaux-d-%C3%A9t%C3%A9</link>
		<guid isPermaLink="false">urn:md5:2c1f9b00e325a8305920a0f200ee1436</guid>
		<dc:date>2014-07-08T14:23:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Profitons de ce temps superbement maussade pour refaire son site “pro”, et vous inonder à la rentrée avec plein de nouveaux articles techniques. Ça m'oblige à m'ouvrir, à apprendre de nouvelles langues et &lt;q&gt;si visse pas sème, part à Belloume&lt;/q&gt; comme disais je ne sais plus qui…		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Profitons de ce temps superbement maussade pour refaire son site “pro”, et vous inonder à la rentrée avec plein de nouveaux articles techniques. Ça m'oblige à m'ouvrir, à apprendre de nouvelles langues et &lt;q&gt;si visse pas sème, part à Belloume&lt;/q&gt; comme disais je ne sais plus qui…&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
C'est comme ça.&lt;br /&gt;
Ça vous démange pendant un bail, mais vous êtes intimidés ou peu motivé. Et d'un coup, vous avez envie de refaire ce câblage électrique qui a eu chaud, de couper ce lierre en petites bûchettes, de refaire cette tuyauterie qui donnait des signes de faiblesses et de ressouder ces prises bourrées de faux-contacts à force de manips.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1407-travauxdete/RipolineZeWeb1.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Moi, repeignant mon plafond et m'accrochant au pinceau. Selfie de 2006.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Ben c'est un peu ce qui m'arrive cet été.
&lt;/p&gt;
&lt;h3 id=&quot;refasmonsitecorporate&quot;&gt;Je refais mon site corporate&lt;/h3&gt;
&lt;img class=&quot;r&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1407-travauxdete/.1407-dascritchcom-ancien_s.png&quot; alt=&quot;capture du site dascritch.com en juillet 2014&quot; /&gt;
&lt;p&gt;
Le design actuel de &lt;a href=&quot;http://dascritch.com&quot;&gt;dascritch.com&lt;/a&gt; date de 2011. Oui, il était déjà en &lt;em&gt;responsive web design&lt;/em&gt;, mais de nouveaux éléments méritaient d'y être intégrés, notamment mes conférences et plus de textes explicatifs.&lt;br /&gt;
Et aussi d'être un poil plus habillé, même si les css ne sont toujours pas mon fort.
&lt;/p&gt;
&lt;p&gt;
La différence, c'est que j'ai voulu le faire sur un serveur statique. L'actuel &lt;a href=&quot;http://dascritch.net/vrac/.blog2/webdev/1407-travauxdete/dascritchcom.html&quot;&gt;(backup de la page web)&lt;/a&gt; fonctionne sur dAgence, et utilise son moteur de pages, &lt;a href=&quot;http://dascritch.net/post/2014/05/12/Bricolages-en-img#forcement&quot;&gt;de sous-images&lt;/a&gt; et de news grâce à l'extension de feeds. Le code front est quasi-intégralement statique. Difficile de faire un code plus lisible à intégrer&amp;nbsp;:
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;

&amp;lt;section id=&quot;rea&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;  &amp;lt;h3&amp;gt;Quelques réalisations récentes&amp;amp;thinsp;:&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;  &amp;lt;&lt;strong&gt;T:Pages&lt;/strong&gt; &lt;em&gt;limit&lt;/em&gt;=&quot;&lt;i&gt;5&lt;/i&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;lt;article&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;lt;a href=&quot;https://dascritch.net/post/2014/07/08/{{&lt;strong&gt;T:PageText&lt;/strong&gt; &lt;em&gt;name&lt;/em&gt;=&quot;&lt;i&gt;lien&lt;/i&gt;&quot;}}&quot;&amp;gt;&amp;lt;img src=&quot;https://dascritch.net/post/2014/07/08/{{&lt;strong&gt;T:PageImage&lt;/strong&gt; &lt;em&gt;format&lt;/em&gt;=&quot;&lt;i&gt;realisat&lt;/i&gt;&quot;}}&quot; alt=&quot;{{&lt;strong&gt;T:PageTitle&lt;/strong&gt;}}&quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;lt;div&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;lt;h4&amp;gt;{{&lt;strong&gt;T:PageTitle&lt;/strong&gt;}}&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  {{&lt;strong&gt;T:PageText&lt;/strong&gt;}}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp;  &amp;lt;/article&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;  &amp;lt;/&lt;strong&gt;T:Pages&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;

&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
Seulement, dAgence est en fin de vie, son code n'a pas bougé depuis 2 ans. Avec Nicolas Guilhou, j'y ai mis beaucoup de cœur, de travail et j'aurais beaucoup à écrire sur ce qu'on y a fait, mais je n'ai ni l'envie de le continuer, ni de l'ouvrir. Ce dernier point à cause d'un client qui m'a dégoûte et aussi la qualité de mon propre code en 2007.
&lt;/p&gt;
&lt;p&gt;
J'ai alors pris une décision bizarre&amp;nbsp;:  Je me suis rendu compte que pratiquement personne n'a vu de code de ma part. Je suis très timide et j'ai pas eu l'occasion de travailler sur des projets open-sourcés. J'ai donc décidé d'utiliser &lt;a href=&quot;https://github.com/dascritch?tab=repositories&quot;&gt;mon github&lt;/a&gt; pour cette refactorisation. Accessoirement, cela facilite mon boulot quand je suis entre plusieurs machines.
&lt;/p&gt;
&lt;h3 id=&quot;fairesimple&quot;&gt;Mais pourquoi faire simple ?&lt;/h3&gt;
&lt;p&gt;
J'ai donc inversé le concept&amp;nbsp;: le backend est statique, le frontend puisera ses données.
&lt;/p&gt;
&lt;p&gt;
J'ai tenté &lt;a href=&quot;https://github.com/dascritch/dascritchcom-bootstraped-angularized&quot;&gt;une version AngularJS&amp;nbsp;+&amp;nbsp;Bootstrap&lt;/a&gt; volontairement pas codex, je l'avoue ;), une autre en ReactsJS&amp;nbsp;+&amp;nbsp;Foundation&amp;nbsp;+&amp;nbsp;Sass stupidement bloquée pour les raisons ci-dessous. Finalement, je suis reparti sur mon squelette, j'ai intégré le &lt;a href=&quot;http://tinytypo.tetue.net/&quot;&gt;TinyTypo de la fabuleuse  Romy “Tétue” Duhem-Verdière&lt;/a&gt;. J'en viens à la même conclusion que &lt;a href=&quot;http://paulrouget.com/&quot;&gt;Paul Rouget&lt;/a&gt; et &lt;a href=&quot;http://moox.io/&quot;&gt;Maxime Thirouin&lt;/a&gt;&amp;nbsp;: des fois, on va nettement plus vite sans s'encombrer de frameworks-couteau-suisse.
&lt;/p&gt;
&lt;figure&gt;
&lt;img class=&quot;r&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1407-travauxdete/1407-dascritchcom-memeIE9.png&quot; alt=&quot;capture du future site dascritch.com sous MSIE9 avec une alerte d'erreur windows&quot; /&gt;
&lt;figcaption&gt;
Et maintenant, ça marche comme je le voulais en MSIE9. Oui oui. Merci &lt;a href=&quot;http://netrenderer.com/&quot;&gt;IE Net Renderer&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Bon, par contre, le design RWD liquide avec 5 breakpoints de largeurs différents, je doute que ça soit une solution viable à terme ^^;
&lt;/p&gt;
&lt;p&gt;
Je voulais faire des requêtes cross-sites, mais les mesures de sécurité prophylactiques (CSP + CORS) que je loue tant me posent des soucis en développement local ou &lt;a href=&quot;http://dascritch.github.io/dascritchcom/&quot;&gt;en hébergement github.io&lt;/a&gt;. J'en ai donc profité pour écrire un parser pour récupérer mes derniers articles. Et plutôt que le faire en Javascript, en PHP ou même avec des &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;regex&lt;/a&gt; via le shell, j'ai tenté de le faire en python pour sortir de ma zone de confort. &lt;a href=&quot;https://github.com/dascritch/dascritchcom/blob/master/data/parse.py&quot;&gt;Oui, le code est crade&lt;/a&gt;, mais il &lt;a href=&quot;http://blog.kaelig.fr/post/50999705308/bbc-news-responsive-web-design-and-mustard&quot;&gt;coupe la moutarde&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Normalement, je devrais déployer cette nouvelle version avant la fin du mois. &lt;strong&gt;Vous pouvez toujours &lt;a href=&quot;https://dascritch.net/post/2014/07/08/Travaux-d-%C3%A9t%C3%A9#comment-form&quot;&gt;commenter en bas&lt;/a&gt; ou ouvrir un &lt;a href=&quot;https://github.com/dascritch/dascritchcom/issues?state=open&quot;&gt;ticket bug/suggestion sur github&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Le truc rageant, c'est que quand tu termines ton site, &lt;a href=&quot;http://jsonresume.org/&quot;&gt;tu tombes sur jsonresume&lt;/a&gt;.&lt;br /&gt;
Ah ben flute.
&lt;/p&gt;
&lt;h3 id=&quot;fauxcalme&quot;&gt;Le faux calme&lt;/h3&gt;
&lt;p&gt;
Vous verrez moins d'articles techniques publiés cet été. Des articles comme &lt;a href=&quot;http://dascritch.net/post/2013/12/10/I-love-bug-reports&quot;&gt;les bug reports&lt;/a&gt;, &lt;a href=&quot;http://dascritch.net/post/2014/01/07/Json-ou-l-histoire-d-une-licence-presque-libre&quot;&gt;la licence JSON,&lt;/a&gt; &lt;a href=&quot;http://dascritch.net/post/2014/03/25/Histoires-en-img&quot;&gt;la balise &amp;lt;img&amp;nbsp;/&amp;gt;&lt;/a&gt;, &lt;a href=&quot;http://dascritch.net/post/2014/03/11/Refaire-des-commentaires&quot;&gt;les floating labels&lt;/a&gt;, &lt;a href=&quot;http://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage&quot;&gt;les boutons de partage &lt;q&gt;sociaux&lt;/q&gt;&lt;/a&gt; et d'autres peuvent demander de la recherche. J'ai décidé de prendre le temps là-dessus pour gaver vos listes d'articles à lire en urgence.
&lt;/p&gt;
&lt;p&gt;
J'en profite aussi pour essayer différents projets qui justement vont me servir à écrire ces articles. Certains projets sont déjà consultables sur github pendant leur construction&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;lI&gt;Une bibliothèque javascript pour faire &lt;a href=&quot;https://github.com/dascritch/timecodehash&quot;&gt;des ancres timecode dans les pages web incluant sonore ou vidéo&lt;/a&gt;, par exemple un podcast&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dascritch/ramrod&quot;&gt;Un jeu de programmation robotique&lt;/a&gt; sur une idée et avec &lt;a href=&quot;https://twitter.com/FTregan&quot;&gt;Fabien Tregan&lt;/a&gt;,  &lt;/li&gt;
&lt;li&gt;Un addon Firefox pour les auteurs utilisant dotclear&lt;/li&gt;
&lt;li&gt;Bricoler un peu pour me forcer à apprendre Dart, Python (c'est déjà parti), Ruby, Rust et Go&lt;/li&gt;
&lt;li&gt;Écrire des composants web-components avec &lt;a href=&quot;http://bosonic.github.io/&quot;&gt;la fantabuleuse bibliothèque Bosonic&lt;/a&gt; de &lt;a href=&quot;http://www.raphael-rougeron.com&quot;&gt;Maître Raphaël Rougeron&lt;/a&gt; &amp;amp; associates&lt;/li&gt;
&lt;li&gt;Ré-implémenter en js, php, ruby et python avec tests uniformes le système de numéro de commande de dagence&lt;/li&gt;
&lt;li&gt;Améliorer encore &lt;a href=&quot;https://github.com/dascritch/DSN13&quot;&gt;le thème de mon blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Parler des implémentations des systèmes de login sur les sites webs, et du faux conflit UX/Sécurité&lt;/li&gt;
&lt;li&gt;Reprendre après son long hiatus &lt;a href=&quot;http://dascritch.net/post/2008/10/21/Psychanalyse-du-clavier-la-premiere-consultation&quot;&gt;ma Psychanalyse du Clavier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Disséquer la navigation documentaire&lt;/li&gt;
&lt;li&gt;Comparer BBCode-like et Wysiwyg HTML (je sais qu'il est très attendu, ce dossier)&lt;/li&gt;
&lt;li&gt;IPv6 sans pleurer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Ça va m'occuper.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Proposals about ‹img /›</title>
		<link>https://dascritch.net/post/2014/06/18/Proposals-about-img</link>
		<guid isPermaLink="false">urn:md5:90f14da5e73d47a1f2148714b63f6fb8</guid>
		<dc:date>2014-06-18T09:51:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>This is the translated final part of a series about the ‹img /› tag. I'm focusing on the srcset=&quot;https://dascritch.net/post/2014/06/18/&quot; attribute,  created to resolve the problem to load a source accordingly to the device pixel density. I believe in a better solution. So let's try to make a proposal to the W3C…		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;This is the translated final part of a series about the ‹img /› tag. I'm focusing on the srcset=&quot;https://dascritch.net/post/2014/06/18/&quot; attribute,  created to resolve the problem to load a source accordingly to the device pixel density. I believe in a better solution. So let's try to make a proposal to the W3C…&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1403-Img-iconograp_ie.png&quot; alt=&quot;Placer iconographie du dossier ici&quot; class=&quot;r&quot; /&gt;
&lt;p&gt;
This article is &lt;a href=&quot;http://dascritch.net/post/2014/06/17/Propositions-en-img&quot;&gt;the engrish translation of the last of a 7 parts series&lt;/a&gt;. Sorry my bad French, yell any corrections &lt;a href=&quot;https://dascritch.net/post/2014/06/18/Proposals-about-img#comment-form&quot;&gt;by commenting&lt;/a&gt;, thanks.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://dascritch.net/post/2014/06/12/Finesse-en-img&quot;&gt;In the previous post,&lt;/a&gt; i've explained &lt;a href=&quot;http://dascritch.net/post/2014/06/12/Finesse-en-img#riendeneuf&quot;&gt;why bothering the display of an image according to the logical/physical pixel ratio of the support (&lt;em&gt;a problem dating since you were able to print a page in Netscape 1&lt;/em&gt;)&lt;/a&gt; and showed some hacks to do so. Let's see the W3C proposal, why it bother me… and let's try to build a better thing.
&lt;/p&gt;
&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/Img-1406-Sherlock.gif&quot; alt=&quot;Sherlock with its magnifier&quot; /&gt;
&lt;figcaption&gt;
&lt;small&gt;&lt;a href=&quot;http://perfectbenny.tumblr.com/post/32805689760/abcs-of-sherlock-microscope-magnifying-glass&quot;&gt;© BBC. Source : Perfect Benny&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.w3.org/community/respimg/&quot;&gt;Within W3C communities, the &lt;strong&gt;Responsive Image&lt;/strong&gt; working group&lt;/a&gt; is trying to build an elegant and standard solution to that very one problem. After lot of conversations came the &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&amp;nbsp;/&amp;gt;&lt;/code&gt; attribute. Its function is to change on the fly the source named in &lt;code&gt;&lt;em&gt;src&lt;/em&gt;=&quot;&quot;&lt;/code&gt; according to different display rules, including the pixel density. &lt;a href=&quot;http://lists.w3.org/Archives/Public/public-whatwg-archive/2012May/0138.html&quot;&gt;It was the only concern of the first proposal.&lt;/a&gt;
&lt;/p&gt;
&lt;h3 id=&quot;attr_srcset&quot;&gt;srcset=&quot;https://dascritch.net/post/2014/06/18/&quot; according to its documentation&lt;/h3&gt;

&lt;p&gt;
&lt;strong&gt;Warning : &lt;a href=&quot;http://www.w3.org/html/wg/drafts/srcset/w3c-srcset/&quot;&gt;This attribute is still in its infancy&lt;/a&gt;&lt;/strong&gt;, neither its syntax or implementation are fixed, &lt;a href=&quot;http://picture.responsiveimages.org/#parse-srcset-attr&quot;&gt;its most up-to-date version is actually published at the &lt;em&gt;Responsive Image Community Group&lt;/em&gt;&lt;/a&gt;. Today, you must use it with the same precautions as an experiment and &lt;a href=&quot;http://dascritch.net/post/2013/10/02/Dirty-Hacky-VIII-%3A-Pr%C3%A9fixes-frelat%C3%A9s&quot;&gt;as if it was prefixed in javascript or css&lt;/a&gt;, as this kind of experimentation syntax is, alas, still missing in html.
&lt;/p&gt;
&lt;p&gt;
The content of this attribute is a list, comma-separated. Each entry of the list is an url source, then a space and application rules like the available width (&lt;code&gt;640w&lt;/code&gt;) or the pixel density of the display resolution (&lt;code&gt;4x&lt;/code&gt;).
&lt;/p&gt;
&lt;p&gt;
So, i quote here &lt;a href=&quot;http://www.w3.org/html/wg/drafts/srcset/w3c-srcset/#adaptive-images&quot;&gt;the W3C reference draft&lt;/a&gt;, you can get a rule by the containing width&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;pear-desktop.jpeg&lt;/i&gt;&quot; &lt;em&gt;srcset&lt;/em&gt;=&quot;&lt;i&gt;pear-mobile.jpeg 720w, pear-tablet.jpeg 1280w&lt;/i&gt;&quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;
or the logical/physical pixel ratio&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;pear-desktop.jpeg&lt;/i&gt;&quot; &lt;em&gt;srcset&lt;/em&gt;=&quot;&lt;i&gt;pear-mobile.jpeg 2x, pear-tablet.jpeg 4x&lt;/i&gt;&quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;
or both&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;pear-desktop.jpeg&lt;/i&gt;&quot; &lt;em&gt;srcset&lt;/em&gt;=&quot;&lt;i&gt;pear-mobile.jpeg 720w, pear-tablet.jpeg 1280w, pear-desktop.jpeg 1x&lt;/i&gt;&quot; /&amp;gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Yes, we have repetitions and mixed pixel density and responsive webdesign issues. In a so so confusion, you can't be sure what was done, even a mother cat will lost her kitties.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-KittyPrinter_s.jpg&quot; srcset=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-KittyPrinter_m.jpg 2x , /vrac/.blog2/webdev/1403-Img/1406-Img-KittyPrinter.jpg 4x&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;/vrac/.blog2/webdev/1403-Img/.1406-Img-KittyPrinter_s.jpg&lt;/i&gt;&quot; &lt;em&gt;srcset&lt;/em&gt;=&quot;&lt;i&gt;/vrac/.blog2/webdev/1403-Img/.1406-Img-KittyPrinter_m.jpg 2x , /vrac/.blog2/webdev/1403-Img/1406-Img-KittyPrinter.jpg 4x&lt;/i&gt;&quot; &lt;em&gt;alt&lt;/em&gt;=&quot;&quot;&amp;nbsp;/&amp;gt;&lt;/code&gt;
&lt;br /&gt;
«&amp;nbsp;&lt;em&gt;Our kitty printer is running out of toner&lt;/em&gt;&amp;nbsp;»
&lt;br /&gt;
Sure.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;wtf_srcset&quot;&gt;A bright idea that might goes dark&lt;/h3&gt;
&lt;p&gt;
This attribute is already living in some browsers. Well, in fact, mainly Chrome when they were still &lt;a href=&quot;http://www.webkit.org/demos/srcset/&quot;&gt;using webkit&lt;/a&gt;. Firefox just installed it in Nightly the last week, so we'll probably got it in Firefox 32 in 3 monthes. Apple made an iOS8 promise and &lt;a href=&quot;http://status.modern.ie/imgsrcset&quot;&gt;the Microsoft IETeam is still considering it.&lt;/a&gt;
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-srcset-firefox.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Screenshot, part of &lt;a href=&quot;https://twitter.com/addyosmani/status/476667618641068032&quot;&gt;the Addy Osmani's tweet announcing it in Firefox Nightly&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Sincerely, &lt;a href=&quot;http://ericportis.com/posts/2014/srcset-sizes/&quot;&gt;when I read that &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; is the very best way to manage HiDPI issues,&lt;/a&gt; I can't believe it. &lt;a href=&quot;http://www.alsacreations.com/article/lire/1621-responsive-images-srcset.html&quot;&gt;Geoffroy Crofte from Alsacréations is also concluding that the syntax is not so good.&lt;/a&gt; And the question is still bothering &lt;a href=&quot;http://blog.cloudfour.com/the-real-conflict-behind-picture-and-srcset/&quot;&gt;for two years.&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;
And reading it again, I fear the very same problem that we already inherited in favicons declarations. &lt;a href=&quot;http://dascritch.net/post/2008/12/11/Microsoft-Internet-Explorer-ou-linflation-dans-la-head&quot;&gt;The one that give you very bad &lt;code&gt;&amp;lt;&lt;strong&gt;head&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt;-eaches&lt;/a&gt;&amp;nbsp;:
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-favicon-inflation.png&quot; alt=&quot;very long snippet to put in your source code for every favicon declaration&quot; /&gt;
&lt;figcaption&gt;
15 icon subformats, and so many different declarations for the very same one resource&amp;nbsp;!&lt;br /&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/judofyr/status/474878311924264960/photo/1&quot;&gt;Source : Tweet from @Judofyr&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
IMHO, this html attribute will be more a problem than resolving one. First of all, it is more about presentation than document semantics itself so &lt;strong&gt;pal, why did thou let thy piggy in thy html's dinnin' room&amp;nbsp;?&lt;/strong&gt;. Add it &lt;a href=&quot;https://github.com/igrigorik/http-client-hints&quot;&gt;the &lt;code&gt;&amp;lt;&lt;strong&gt;picture&lt;/strong&gt;&amp;gt;/&amp;lt;/&amp;gt;&lt;/code&gt; tag&lt;/a&gt; to the recipe, you will get &lt;a href=&quot;http://picture.responsiveimages.org/&quot;&gt;a worrying level of verbosity&lt;/a&gt;, but you can avoid it before.
&lt;/p&gt;
&lt;p&gt;
When you know &lt;a href=&quot;http://dascritch.net/post/2012/07/31/HTML-wars%2C-la-vengeance-se-venge#rupture&quot;&gt;html “conventions” code from Google&lt;/a&gt;, so abbreviated that you've got implicit html everywhere, I'm really surprised that Chrome accepts so many repetitions, &lt;q&gt;autant de redites&lt;/q&gt;, redudant informations. Decide or take again a little time for…
&lt;/p&gt;

&lt;h3 id=&quot;usagesactuels&quot;&gt;Thinking about the current uses of images&lt;/h3&gt;
&lt;p&gt;
Oh please, don't believe I'll chat about sociologically or whatever, I'm talking about assets distribution in a website, as it's done in the state of the Art. In the pictures, we have the ones describing something, and the ones that are insignificant decoration…
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-Trahisondesimages.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Variations about «&amp;nbsp;&lt;em&gt;The Treachery of Images&lt;/em&gt;&amp;nbsp;» by Magritte.&lt;br /&gt;
&lt;small&gt;&lt;a href=&quot;http://dubleudansmesnuages.com/?p=8300&quot;&gt;Source : the very good writing about this painting in &lt;em&gt;Du bleu dans mes nuages&lt;/em&gt;&lt;/a&gt; (french speaking) blog&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
We have &lt;del&gt;four&lt;/del&gt; three main image sources&amp;nbsp;:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;the ones called by css, &lt;strong&gt;strictly decoration&lt;/strong&gt; and not intented to be changed by the website users&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;the ones in &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; /&amp;gt;&lt;/code&gt; but &lt;strong&gt;called via templates&lt;/strong&gt; or created by DOM manipulations&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://dascritch.net/post/2012/03/06/Des-emojis-dans-l-Unicode-1&quot;&gt;the emoji ones, sinked in the text by any hypster who believe living in 原宿&amp;nbsp;;&lt;/a&gt;&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;
the ones in &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; /&amp;gt;&lt;/code&gt;, being &lt;strong&gt;sent by users&lt;/strong&gt; via a CMS (or the front of a social service, or small ads sites) and that are processed in backend (anti-XSS, resizing, watermarking, optimization…).
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
In the first case, &lt;code&gt;&lt;em&gt;background-image&lt;/em&gt;&lt;/code&gt; populated, we don't bother about it&amp;nbsp;: CSS &lt;em&gt;media-queries&lt;/em&gt; can &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries#resolution&quot;&gt;work in relation with the physical pixel density using &lt;code&gt;&lt;strong&gt;resolution&lt;/strong&gt;&lt;/code&gt;&lt;/a&gt;, or &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_svg&quot;&gt;directly using the .svg furbished by the artist designer&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
In the last case lies the &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; attribute where it's becoming a complicated nightmare&amp;nbsp;: How to deal with the existing&amp;nbsp;? How updating all the holdings if newer resolutions must be supported by the website&amp;nbsp;?&lt;br /&gt;
We are obviously more often working with CMS (or so), as the &lt;a href=&quot;http://dotclear.net&quot;&gt;one motoring my blog&lt;/a&gt; by example. &lt;a href=&quot;http://dascritch.net/post/2014/05/12/Bricolages-en-img#classique&quot;&gt;Creating on the fly lots of sub-formats from any picture accordingly to some programmed parameters &lt;strong&gt;is a classical job for any CMS&lt;/strong&gt;&lt;/a&gt;. If you were using direct html edition, you can't easily put this attribute &lt;strong&gt;without an important rewrite of all the back-catalog pages&lt;/strong&gt;. I already see how long it will be for my blog, having 2000&amp;nbsp;posts in 10 &amp;nbsp;years, and I don't have high-def source for all the illustrations. So think about it for a e-commerce business having dozen of thousands references or any daily newspaper that publish hundred of stories every single day.&lt;br /&gt;
&lt;small&gt;(Insert here a joke about your regional newspaper, the one having in front page a “email jokes” category.)&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Just take this very single post, hand-made html crafted, and think that every picture I made reference should have multiple definitions, while any sub-formats was automated/normalized &lt;a href=&quot;http://fr.dotclear.org/documentation/2.0/usage/media#types-de-fichier-particuliers&quot;&gt;by its CMS.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
NO F☵⚧⚼☭G NO &lt;a href=&quot;http://www.smashingmagazine.com/2013/08/21/webkit-implements-srcset-and-why-its-a-good-thing/&quot;&gt;&lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; is NOT at all «&amp;nbsp;&lt;em&gt;…a good thing&lt;/em&gt;&amp;nbsp;»&lt;/a&gt; by that way.
&lt;/p&gt;

&lt;h3 id=&quot;cdc&quot;&gt;What should the specifications have been&lt;/h3&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-cdc.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
&lt;small&gt;So typical : Life cycle of specifications&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Here are what would be the basic rules in my humble opinion&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No repetitions&lt;/strong&gt;, the source URL should not be demultiplicated in the html code, moreover when those URLs are automatically generated. The less verbosity, the more users will use it&lt;/li&gt;
&lt;li&gt;The number of DOM constructed elements should be &lt;strong&gt;the lesser&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;In being simple, html code should &lt;strong&gt;encourage good practices&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dimensions should be implied&lt;/strong&gt;, as the browser will know them in decoding the image file, and css may change them presentation constraints. Forcing sizes may lead to unsolvable issues&lt;/li&gt;
&lt;li&gt;All that is about resolution and &lt;strong&gt;pixel finesse should be managed by the browser alone&lt;/strong&gt;.
As it is not about semantics but about presentation, any mention of it must be in the CSS&lt;/li&gt;
&lt;li&gt;
For being &lt;strong&gt;futureproof&lt;/strong&gt;, adding new sub-formats lied to the resolution must be solved in no more 5 lines, even if you have thousands of pictures.&lt;/li&gt;
&lt;li&gt;The solution must be &lt;strong&gt;protocol independent&lt;/strong&gt;, never asking back-end recoding or parameterizing. Yes, it must work on any dynamic server but also any static one or locally hosted.&lt;/li&gt;
&lt;li&gt;It should be &lt;strong&gt;feasible&lt;/strong&gt; by any lambda webmaster&lt;/li&gt;
&lt;li&gt;And, last bu not the least, it must be &lt;strong&gt;easy to implement&lt;/strong&gt; for browsers' coders, elsewhere don't think about it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you compare with &lt;a href=&quot;http://dascritch.net/post/2014/06/12/Finesse-en-img&quot;&gt;each trick explained in French in the previous post&lt;/a&gt;, you'll see that &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; is not so well placed...
&lt;/p&gt;


&lt;h3 id=&quot;par_les_css&quot;&gt;So why not using CSS&amp;nbsp;?&lt;/h3&gt;
&lt;figure class=&quot;l&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-Chat-Bonneteau_s.jpg&quot; alt=&quot;a cat playing and winning street beting&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=EppdVuV0z8I&quot;&gt;&lt;small&gt;Source : Vancoosh, starring Frida&lt;/small&gt;&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
If i moved my ass sooner, chatted in the W3C WG and put my 2 cents, I would have done this proposal&amp;nbsp;: we must be able to change URL source on the fly via a &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;regular expression&lt;/a&gt;, as the greatest majority of subformat pictures are automated even in their naming.
&lt;/p&gt;
&lt;p&gt;
OK, but you'll have to implement lot of brand new parts&amp;nbsp;:
&lt;/p&gt;
&lt;h3 id=&quot;proposition_srcset_css&quot;&gt;Proposal : srcset in css&lt;/h3&gt;

&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-socks_s.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
All of my socks at the same place.&lt;br /&gt;&lt;small&gt;&lt;a href=&quot;https://www.flickr.com/photos/angryjuliemonday/8191485739/lightbox/&quot;&gt;Source&amp;nbsp;: AngryJulieMonday&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
The best way is having a resource rule by the pixel density of the screen. So as we have &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; implemented in html, why not do it in css&amp;nbsp;?
&lt;/p&gt;
&lt;code&gt;&lt;em&gt;srcset&lt;/em&gt; : &quot;&lt;i&gt;img-4x.jpg&lt;/i&gt;&quot; 4x;&lt;/code&gt;
&lt;p&gt;
And we can chain other scenarii&amp;nbsp;:
&lt;/p&gt;
&lt;code&gt;&lt;em&gt;srcset&lt;/em&gt; : &quot;&lt;i&gt;img-2x.jpg&lt;/i&gt;&quot; 2x , &quot;&lt;i&gt;img-4x.jpg&lt;/i&gt;&quot; 4x;&lt;/code&gt;
&lt;p&gt;
This property would dictate both the substitution and the scale to apply to your image. We would have a generic declaration, more easy to change as you edit css rules, example&amp;nbsp;: when you have to change a responsive design theme. So the width-available notation would be past and forgotten.
&lt;/p&gt;
&lt;p&gt;
As I mean it, if the resource is missing, the property must be ignored.&lt;br /&gt;
In CSS, it will be also useful for other tags as &lt;code&gt;&amp;lt;&lt;strong&gt;video&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;&lt;strong&gt;iframe&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt;
&lt;/p&gt;


&lt;h3 id=&quot;proposition_regex&quot;&gt;Proposal : Using regex into css&lt;/h3&gt;
&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-RegEx_s.jpg&quot; alt=&quot;1406-Img-RegEx.gif&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;http://halibutstuff.com/&quot;&gt;&lt;small&gt;Source&amp;nbsp;: Halibustuff.com&lt;/small&gt;&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
I mean, creating a brand new css operator, namely a regex and its replacement pattern. Nearly every browser have a javascript engine, so a standardized regex library. I think this is the biggest piece of work to do, to debate and to code, as we will have to adapt css parsers to accept a brand new unknown syntax for them.
&lt;/p&gt;
&lt;p&gt;
Example : &lt;code&gt;regex(attr(&lt;i&gt;src&lt;/i&gt;) , &quot;&lt;i&gt;^/images(.*)/([^/]+)$&lt;/i&gt;&quot; , &quot;&lt;i&gt;/images\1/.\2,x2&lt;/i&gt;&quot;)&lt;/code&gt;.&lt;br /&gt;
First parameter is the string to operate, here the content of the &lt;code&gt;&lt;em&gt;src&lt;/em&gt;=&quot;&quot;&lt;/code&gt; attribute in the html code, the second one is the regex formula, and the third one is the replacement formula. In this example, &lt;code&gt;/images/examples/test.jpg&lt;/code&gt; would be substituted by &lt;code&gt;/images/examples/&lt;strong&gt;.&lt;/strong&gt;test.jpg&lt;strong&gt;,x2&lt;/strong&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
So, as any integrator, you will just have to describe once the naming strategy of the subformat pictures, if the variation is in the repertory (“&lt;code&gt;/x1/img.jpg&lt;/code&gt;”), by internal suffix (“&lt;code&gt;img_x1.jpg&lt;/code&gt;”) or final (“&lt;code&gt;img.jpg,x1&lt;/code&gt;”).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The relief code would be enormous on most of the websites&lt;/strong&gt; compared to the &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt;-in-each-tag strategy.
&lt;/p&gt;

&lt;h3 id=&quot;proposition_sync&quot;&gt;Proposal : async=&quot;no&quot;&lt;/h3&gt;
&lt;figure class=&quot;l&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-FeuRouge_s.jpg&quot; alt=&quot;un feu rouge&quot; /&gt;
&lt;figcaption&gt;
&lt;small&gt;&lt;a href=&quot;http://pixabay.com/fr/feux-de-circulation-la-lumi%C3%A8re-rouge-6008/&quot;&gt;CC0 author&amp;nbsp;: Hans. Source&amp;nbsp;: Pixabay.&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;

If we want to avoid the browser to load the &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&quot;&amp;nbsp;/&amp;gt;&lt;/code&gt; default resources, then the “good” ones afterwards, we need to flag for the browser that an asset (css or javascript) should not be parsed asynchronously. So having &lt;code&gt;&lt;em&gt;async&lt;/em&gt;=&quot;&lt;i&gt;no&lt;/i&gt;&quot;&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
Yep. I know.
&lt;/p&gt;
&lt;p&gt;
From my sunny hometown in the South of France, I can hear you shouting that my proposal is a completely stupid and inefficient one, I can see you wanting to thrown rotten fruits to my face, and dialing &lt;a href=&quot;https://www.youtube.com/watch?v=vt0Y39eMvpI&quot;&gt;the Spaninsh Inquisition for a surprise inquiry&lt;/a&gt;.&lt;br /&gt;
You're 
&lt;em&gt;almost&lt;/em&gt; right&amp;nbsp;: 
This property would help avoiding that the browser load a file that might be invalidated by a stylesheet later. But it goes completely backwards what everyone have done in performance. Yes, &lt;strong&gt;there is a abuse risk, but web integrators will learn by failing&lt;/strong&gt;. &lt;small&gt;And if I don't have a completely messy proposal, I risked to be eared seriously by you.&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Currently, the most used solution for that is direct inclusion of js/css in the html source. I can't tell for you, but it hurts my eyes every time I see that.
&lt;/p&gt;


&lt;h3 id=&quot;infine&quot;&gt;In fine&lt;/h3&gt;
&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-WaterFrog_s.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;http://agnatha3141.deviantart.com/art/jumping-water-frog-287597882&quot;&gt;&lt;small&gt;&lt;em&gt;Jumping water frog&lt;/em&gt; by agnatha3141&lt;/small&gt;&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Yes i know this is very pretentious to have so many proposals, as a part of them are completely rotten ones. So I have to present each one independently, eventually having them accepted by W3C and WHAT-WG, seeing perhaps implementations in browsers... and fight against their misuses. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://vimeo.com/36198553&quot;&gt;&lt;em&gt;Bref.&lt;/em&gt;&lt;/a&gt; There is work to do, but I believe these proposals would help a lot &lt;strong&gt;to get the html syntax less verbose&lt;/strong&gt;, to ease a lot resource maintenance and to extend easely for the very very high density screen yet to be marketed. I can't believe someone will soon selling me a 3200&amp;nbsp;dpi screen device…
&lt;/p&gt;

&lt;p&gt;
Just imagine&amp;nbsp;:
&lt;/p&gt;
&lt;code&gt;
&lt;strong&gt;article&lt;/strong&gt; &lt;strong&gt;img&lt;/strong&gt; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;em&gt;srcset&lt;/em&gt; : regex(attr(&lt;i&gt;src&lt;/i&gt;) , &quot;&lt;i&gt;^/images/articles/(.*)/([^/]+)$&lt;/i&gt;&quot; , &quot;&lt;i&gt;/images/articles/\1/.\2,x2&lt;/i&gt;&quot;) x2,&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; regex(attr(&lt;i&gt;src&lt;/i&gt;) , &quot;&lt;i&gt;^/images/articles/(.*)/([^/]+)$&lt;/i&gt;&quot; , &quot;&lt;i&gt;/images/articles/\1/.\2,x4&lt;/i&gt;&quot;) x4;&lt;br /&gt;
}&lt;br /&gt; 
.decor &lt;strong&gt;img&lt;/strong&gt; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;em&gt;srcset&lt;/em&gt; : regex(attr(&lt;i&gt;src&lt;/i&gt;) , &quot;&lt;i&gt;^/images/layout/(.*)/([^/]+)$&lt;/i&gt;&quot; , &quot;&lt;i&gt;/images/layout/\1/.\2,x2&lt;/i&gt;&quot;) x2,&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; regex(attr(&lt;i&gt;src&lt;/i&gt;) , &quot;&lt;i&gt;^/images/layout/(.*)/([^/]+)$&lt;/i&gt;&quot; , &quot;&lt;i&gt;/images/layout/\1/.\2,x4&lt;/i&gt;&quot;) x4;&lt;br /&gt;
}
&lt;/code&gt;
&lt;p&gt;
Hard to be simplier…
&lt;/p&gt;

&lt;h3 id=&quot;thankyou&quot;&gt;And thank you for all the fish&lt;/h3&gt;
&lt;p&gt;
Writing the whole &lt;a href=&quot;http://dascritch.net/post/2014/03/25/Histoires-en-img&quot;&gt;&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; tag series&lt;/a&gt; was very long, and I cannot claim to be exhaustive or perfect. I have to thank every one that re-read me, advised, or corrected in the comments. &lt;strong&gt;Writing on a subject is an occasion to question yourself&lt;/strong&gt;, to document and having again fun to learn and writing not only crappy puns.
&lt;/p&gt;
&lt;p&gt;
I have to thank a thousand times the &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; syntax that gave me inspiration to write on it.
&lt;/p&gt;
&lt;p&gt;
Hope you so ;)
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Propositions en ‹img /›</title>
		<link>https://dascritch.net/post/2014/06/17/Propositions-en-img</link>
		<guid isPermaLink="false">urn:md5:0f3be13da1ad3677facf96d7c2c1c81b</guid>
		<dc:date>2014-06-17T10:57:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Fin du dossier sur la balise ‹img /› avec l'attribut srcset=&quot;https://dascritch.net/post/2014/06/17/&quot;, sensé résoudre le problème de source en fonction de la finesse d'image. Oui, mais je pense qu'on pouvait faire bien mieux. Bien bien mieux. Cela mérite proposition au W3C…		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Fin du dossier sur la balise ‹img /› avec l'attribut srcset=&quot;https://dascritch.net/post/2014/06/17/&quot;, sensé résoudre le problème de source en fonction de la finesse d'image. Oui, mais je pense qu'on pouvait faire bien mieux. Bien bien mieux. Cela mérite proposition au W3C…&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1403-Img-iconograp_ie.png&quot; alt=&quot;Placer iconographie du dossier ici&quot; class=&quot;r&quot; /&gt;
&lt;strong&gt;English speaking audience&amp;nbsp;: &lt;a href=&quot;http://dascritch.net/post/2014/06/18/Proposals-about-img&quot;&gt;a translation is available here&lt;/a&gt;.&lt;/strong&gt;
&lt;br /&gt;
Ce billet fait partie de la série &lt;strong&gt;en &amp;lt;img /&amp;gt;&lt;/strong&gt;&amp;nbsp;: 
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/03/25/Histoires-en-img&quot;&gt;Histoires en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/09/Manuel-en-img&quot;&gt;Manuel en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img&quot;&gt;Ressources en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/05/12/Bricolages-en-img&quot;&gt;Bricolages en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/06/10/Progressivement-en-img&quot;&gt;Progressivement en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/06/12/Finesse-en-img&quot;&gt;Finesse en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proposition en &amp;lt;img /&amp;gt;&lt;/strong&gt; / &lt;a href=&quot;http://dascritch.net/post/2014/06/18/Proposals-about-img&quot;&gt;English version&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;
&lt;style&gt;
.avecfond {
background : url(http://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-background.png);
}
.avecfond img {
margin : auto;
}
&lt;/style&gt;
&lt;p&gt;
Maintenant que j'ai bien expliqué &lt;a href=&quot;http://dascritch.net/post/2014/06/12/Finesse-en-img#riendeneuf&quot;&gt;les soucis de l'affichage d'une image en fonction de la finesse du support&lt;/a&gt;, et présenté différents hacks pour y arriver, voyons la proposition du W3C, là où elle me fait tiquer… et proposons quelque chose de constructif.
&lt;/p&gt;
&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/Img-1406-Sherlock.gif&quot; alt=&quot;Sherlock à la loupe en contreplongée&quot; /&gt;
&lt;figcaption&gt;
&lt;small&gt;&lt;a href=&quot;http://perfectbenny.tumblr.com/post/32805689760/abcs-of-sherlock-microscope-magnifying-glass&quot;&gt;© BBC. Source : Perfect Benny&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.w3.org/community/respimg/&quot;&gt;Au sein des communautés W3C, le groupe &lt;strong&gt;Responsive Image&lt;/strong&gt;&lt;/a&gt; réfléchit à trouver une solution élégante au problème des finesses d'images. C'est comme ça qu'après de nombreuses négociations est arrivé l'attribut &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&amp;nbsp;/&amp;gt;&lt;/code&gt;. La fonction de l'attribut consiste à remplacer à la volée la ressource indiquée en &lt;code&gt;&lt;em&gt;src&lt;/em&gt;=&quot;&quot;&lt;/code&gt; en fonction de différentes règles d'affichage, dont la finesse de la résolution. &lt;a href=&quot;http://lists.w3.org/Archives/Public/public-whatwg-archive/2012May/0138.html&quot;&gt;L'idée originelle ne travaillait que cette question.&lt;/a&gt;
&lt;/p&gt;

&lt;h3 id=&quot;attr_srcset&quot;&gt;srcset=&quot;https://dascritch.net/post/2014/06/17/&quot; selon sa doc&lt;/h3&gt;

&lt;p&gt;
&lt;strong&gt;Attention : &lt;a href=&quot;http://www.w3.org/html/wg/drafts/srcset/w3c-srcset/&quot;&gt;Cet attribut est en chantier&lt;/a&gt;&lt;/strong&gt;, ni sa notation, ni son adoption ne sont définitives, et &lt;a href=&quot;http://picture.responsiveimages.org/#parse-srcset-attr&quot;&gt;la version la plus récente est actuellement chez le &lt;em&gt;Responsive Image Community Group&lt;/em&gt;&lt;/a&gt;. En fait, il doit être vu avec la même précaution qu'une expérimentation et &lt;a href=&quot;http://dascritch.net/post/2013/10/02/Dirty-Hacky-VIII-%3A-Pr%C3%A9fixes-frelat%C3%A9s&quot;&gt;avec les mêmes retenues que pour tout préfixe propriétaire javascript ou css&lt;/a&gt;, dont il n'existe malheureusement pas de notation expérimentale en html5.
&lt;/p&gt;
&lt;p&gt;
La syntaxe de l'attribut repose sur une liste, séparée par des &lt;code&gt;,&lt;/code&gt;. Chaque élément de la liste est une url ressource, suivi par des règles en fonction de la largeur disponible (&lt;code&gt;640w&lt;/code&gt;) ou de la finesse de la résolution d'affichage (&lt;code&gt;4x&lt;/code&gt;)
&lt;/p&gt;
&lt;p&gt;
Si je reprends &lt;a href=&quot;http://www.w3.org/html/wg/drafts/srcset/w3c-srcset/#adaptive-images&quot;&gt;le brouillon de référence du W3C&lt;/a&gt;, on peut donc avoir soit une discrimination en fonction de la largeur disponible&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;pear-desktop.jpeg&lt;/i&gt;&quot; &lt;em&gt;srcset&lt;/em&gt;=&quot;&lt;i&gt;pear-mobile.jpeg 720w, pear-tablet.jpeg 1280w&lt;/i&gt;&quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;
soit du pitch de l'écran&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;pear-desktop.jpeg&lt;/i&gt;&quot; &lt;em&gt;srcset&lt;/em&gt;=&quot;&lt;i&gt;pear-mobile.jpeg 2x, pear-tablet.jpeg 4x&lt;/i&gt;&quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;
soit des deux&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;pear-desktop.jpeg&lt;/i&gt;&quot; &lt;em&gt;srcset&lt;/em&gt;=&quot;&lt;i&gt;pear-mobile.jpeg 720w, pear-tablet.jpeg 1280w, pear-desktop.jpeg 1x&lt;/i&gt;&quot; /&amp;gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Vous l'avez compris, on a à la fois des redites, et mélangé les problématiques de finesse d'affichage et de &lt;em&gt;responsive webdesign&lt;/em&gt;. Avouez que dans une telle cafouillade, on n'est vraiment sûr de rien, une chatte y perdrait ses petits.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-KittyPrinter_s.jpg&quot; srcset=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-KittyPrinter_m.jpg 2x , /vrac/.blog2/webdev/1403-Img/1406-Img-KittyPrinter.jpg 4x&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;/vrac/.blog2/webdev/1403-Img/.1406-Img-KittyPrinter_s.jpg&lt;/i&gt;&quot; &lt;em&gt;srcset&lt;/em&gt;=&quot;&lt;i&gt;/vrac/.blog2/webdev/1403-Img/.1406-Img-KittyPrinter_m.jpg 2x , /vrac/.blog2/webdev/1403-Img/1406-Img-KittyPrinter.jpg 4x&lt;/i&gt;&quot; &lt;em&gt;alt&lt;/em&gt;=&quot;&quot;&amp;nbsp;/&amp;gt;&lt;/code&gt;
&lt;br /&gt;
«&amp;nbsp;&lt;em&gt;Our kitty printer is running out of toner&lt;/em&gt;&amp;nbsp;»
&lt;br /&gt;
Tu m'étonnes.
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&quot;wtf_srcset&quot;&gt;Une idée qui risque de tourner à l'échec&lt;/h3&gt;
&lt;p&gt;
L'attribut est déjà implémenté sur certains navigateurs, enfin surtout Chrome quand ils étaient encore &lt;a href=&quot;http://www.webkit.org/demos/srcset/&quot;&gt;avec le moteur webkit&lt;/a&gt;. Firefox vient de le mettre en place en Nightly la semaine dernière, donc arrivera probablement avec Firefox 32 dans 3 mois, Apple le promet pour iOS8. &lt;a href=&quot;http://status.modern.ie/imgsrcset&quot;&gt;L'équipe IETeam de Microsoft considère d'implémenter l'attribut.&lt;/a&gt;
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-srcset-firefox.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Capture d'une partie d'écran, extrait &lt;a href=&quot;https://twitter.com/addyosmani/status/476667618641068032&quot;&gt;du tweet d'Addy Osmani annonçant la fonction dans Firefox Nightly&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Franchement, &lt;a href=&quot;http://ericportis.com/posts/2014/srcset-sizes/&quot;&gt;dire que &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; est la meilleure alternative sur la gestion du HiDPI,&lt;/a&gt; j'ai vraiment du mal à le croire et &lt;a href=&quot;http://www.alsacreations.com/article/lire/1621-responsive-images-srcset.html&quot;&gt;Geoffroy Crofte d'Alsacréations trouve lui aussi la syntaxe contre-intuitive.&lt;/a&gt; La question titille de nombreuses personnes &lt;a href=&quot;http://blog.cloudfour.com/the-real-conflict-behind-picture-and-srcset/&quot;&gt;depuis deux ans.&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;
À relire, j'ai peur que nous ne retombons dans les mêmes travers que les déclarations de favicons. &lt;a href=&quot;http://dascritch.net/post/2008/12/11/Microsoft-Internet-Explorer-ou-linflation-dans-la-head&quot;&gt;Celle qui entraîne une inflation de la &lt;code&gt;&amp;lt;&lt;strong&gt;head&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; qui fait peur&lt;/a&gt;&amp;nbsp;:
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-favicon-inflation.png&quot; alt=&quot;code source imposant à mettre pour toutes les déclarations&quot; /&gt;
&lt;figcaption&gt;
15 formats, autant de déclarations différentes pour exactement la même ressource&amp;nbsp;!&lt;br /&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/judofyr/status/474878311924264960/photo/1&quot;&gt;Source : Tweet de @Judofyr&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
À mon sens, cet attribut html risque n'engendrer plus de problèmes qu'en résoudre. Déjà, il parle plus de cas de présentation que de sémantique du document lui-même, donc &lt;strong&gt;kesk'il me fout là en n'html, purin&amp;nbsp;?&lt;/strong&gt;. Si on &lt;a href=&quot;https://github.com/igrigorik/http-client-hints&quot;&gt;ajoute la balise &lt;code&gt;&amp;lt;&lt;strong&gt;picture&lt;/strong&gt;&amp;gt;/&amp;lt;/&amp;gt;&lt;/code&gt;&lt;/a&gt;, on arrive à &lt;a href=&quot;http://picture.responsiveimages.org/&quot;&gt;un niveau inquiétant de verbosité&lt;/a&gt;, alors que cela pourrait être évitée.
&lt;/p&gt;
&lt;p&gt;
Et quand on connaît &lt;a href=&quot;http://dascritch.net/post/2012/07/31/HTML-wars%2C-la-vengeance-se-venge#rupture&quot;&gt;les conventions de code html qu'utilise Google&lt;/a&gt;, tellement concis qu'il ne reste plus grand chose, on est surpris que Chrome accepte autant de redites. Décidez-vous, ou prenez le temps de réfléchir...
&lt;/p&gt;
&lt;h3 id=&quot;usagesactuels&quot;&gt;Réfléchir aux usages actuels d'images&lt;/h3&gt;
&lt;p&gt;
Et attention, je ne parle pas sociologie ou quoi que ce soit, je parle de l'organisation des assets dans un site web, tel qu'il est monté en l'état de l'art. Dans les images, nous avons celles qui nous décrivent quelque chose, et celles qui ne sont qu'un insignifiant décor…
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-Trahisondesimages.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Variation autour de «&amp;nbsp;&lt;em&gt;La Trahison des images&lt;/em&gt;&amp;nbsp;» de Magritte.&lt;br /&gt;
&lt;small&gt;&lt;a href=&quot;http://dubleudansmesnuages.com/?p=8300&quot;&gt;Source : l'excellent billet sur le sujet par le blog &lt;em&gt;Du bleu dans mes nuages&lt;/em&gt;&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Nous avons &lt;del&gt;quatre&lt;/del&gt; trois principales sources d'images&amp;nbsp;:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;celles appelées en CSS, &lt;strong&gt;purement décoratives&lt;/strong&gt; et qui ne sont pas destinées à être modifiées par les utilisateurs du site&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;celles en &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; /&amp;gt;&lt;/code&gt; mais qui sont &lt;strong&gt;appelées via des templates&lt;/strong&gt; ou des manipulations d'éléments DOM du document&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://dascritch.net/post/2012/03/06/Des-emojis-dans-l-Unicode-1&quot;&gt;les emoji, noyés dans le texte par quelque hypster qui se croit à 原宿&amp;nbsp;;&lt;/a&gt;&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;celles en &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; /&amp;gt;&lt;/code&gt; résultantes d'un &lt;strong&gt;envoi par l'utilisateur&lt;/strong&gt; via un CMS (ou parfois front-office pour les réseaux sociaux ou les sites de petites annonces) et qui sont conformées par le site (anti-intrusion, retaillage, éventuellement filigranage,…).
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Dans le premier cas qui regorge de &lt;code&gt;&lt;em&gt;background-image&lt;/em&gt;&lt;/code&gt;, on ne se pose pas de questions puisque les &lt;em&gt;media-queries&lt;/em&gt; CSS peuvent &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries#resolution&quot;&gt;détecter la densité des pixels logiques via le paramètre &lt;code&gt;&lt;strong&gt;resolution&lt;/strong&gt;&lt;/code&gt;&lt;/a&gt;, ou alors &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_svg&quot;&gt;utiliser directement les .svg de l'artiste designer&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
C'est surtout dans ce dernier cas que la balise &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; devient particulièrement compliqué et contre-productif&amp;nbsp;: Comment gérer l'existant&amp;nbsp;? Comment mettre à jour si de nouvelles finesses de résolution doivent être gérées pour ce site&amp;nbsp;?&lt;br /&gt;
Nous travaillons nettement plus souvent avec des CMS, comme &lt;a href=&quot;http://dotclear.net&quot;&gt;le moteur de ce blog&lt;/a&gt; par exemple, qui &lt;a href=&quot;http://dascritch.net/post/2014/05/12/Bricolages-en-img#classique&quot;&gt;génèrent à la volée plein de sous-formats d'images selon des contraintes d'aspects programmables, &lt;strong&gt;un classique des CMS&lt;/strong&gt;&lt;/a&gt;. On ne peut mettre en place rapidement cet attribut &lt;strong&gt;sans un important travail de re-conformation du contenu existant&lt;/strong&gt;. J'imagine déjà la complexité pour mon blog qui comporte plus de 2000&amp;nbsp;billets en 10&amp;nbsp;ans, et dont toutes les sources en très hautes résolutions ne sont pas forcément disponibles. Alors imaginez la situation pour un site d'e-commerce qui possède plus de 10&amp;nbsp;000&amp;nbsp;références ou pour un quotidien régional qui produit des dizaines d'articles par jour.&lt;br /&gt;
&lt;small&gt;Et encore, &lt;a href=&quot;http://ladepeche.fr/&quot;&gt;La Dépêche&lt;/a&gt; a arrêté la rubrique des blagues mails &lt;a href=&quot;http://ladechedumidi.com/&quot;&gt;suite à la concurrence frontale&lt;/a&gt;.&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Sincèrement, ne prenez que cet article et imaginez que chaque image dont j'ai fait mention dans sa source doit avoir des définitions multiples, alors que la création de ses sous-formats a été automatisée/normalisée &lt;a href=&quot;http://fr.dotclear.org/documentation/2.0/usage/media#types-de-fichier-particuliers&quot;&gt;par le CMS que j'utilise.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
NON P☵⚧⚼☭N NON &lt;a href=&quot;http://www.smashingmagazine.com/2013/08/21/webkit-implements-srcset-and-why-its-a-good-thing/&quot;&gt;&lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; n'est pas du tout «&amp;nbsp;&lt;em&gt;…a good thing&lt;/em&gt;&amp;nbsp;»&lt;/a&gt; de cette manière-là&lt;/a&gt;.
&lt;/p&gt;
&lt;h3 id=&quot;cdc&quot;&gt;Ce qu'aurait dû être le cahier des charges&lt;/h3&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-cdc.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
&lt;small&gt;Un grand classique : Le cahier des charges tel qu'il a été compris&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Pour moi, les règles de bases devraient être&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pas de redites&lt;/strong&gt;, l'URL de la ressource ne devrait pas être démultipliée dans le code source, surtout quand ces multiples adresses sont générées automatiquement. Moins on a de verbosité, plus on a de chance de convertir des utilisateurs&lt;/li&gt;
&lt;li&gt;Le nombre d'éléments construits en DOM doit rester &lt;strong&gt;succinct&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;En restant simple, le code doit aussi &lt;strong&gt;inciter aux bonnes pratiques&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les dimensions doivent être implicites&lt;/strong&gt;, le navigateur les connaît forcément en décodant le fichier image, et les css peuvent les changer pour des contraintes de présentation. Forcer les dimensions peut générer des aberrations insolubles&lt;/li&gt;
&lt;li&gt;Tout ce qui concerne la gestion de résolution en fonction de &lt;strong&gt;la finesse de l'écran devrait être gérée naturellement&lt;/strong&gt;. Comme cela fait partie non pas de la sémantique du document, mais de la présentation, cela devrait être délégué à la CSS&lt;/li&gt;
&lt;li&gt;En termes de &lt;strong&gt;maintenabilité&lt;/strong&gt;, l'ajout d'un nouveau sous-format d'images en fonction de la finesse de l'écran ne devrait pas demander plus de 5 lignes en tout et pour tout, même si on parle de milliers d'images.&lt;/li&gt;
&lt;li&gt;La solution doit être &lt;strong&gt;indépendante du protocole&lt;/strong&gt;, ne pas demander de modifications côté serveur, ni même de reconfiguration. Il faut que cela marche aussi bien sur un serveur dynamique, qu'un serveur statique ou en ressource stockée localement.&lt;/li&gt;
&lt;li&gt;Elle doit être facilement &lt;strong&gt;réalisable&lt;/strong&gt; par un webmestre lambda&lt;/li&gt;
&lt;li&gt;Et évidemment, elle doit être &lt;strong&gt;facile à coder&lt;/strong&gt; pour ceux qui écrivent les navigateurs, parce que sinon, c'est peine perdue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Si on reprend &lt;a href=&quot;http://dascritch.net/post/2014/06/12/Finesse-en-img&quot;&gt;les astuces présentées dans le précédent chapitre&lt;/a&gt;, on verrait que &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; ne score pas forcément mieux...
&lt;/p&gt;

&lt;h3 id=&quot;par_les_css&quot;&gt;Et si plutôt on passait par les CSS&amp;nbsp;?&lt;/h3&gt;
&lt;figure class=&quot;l&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-Chat-Bonneteau_s.jpg&quot; alt=&quot;un chat qui joue et gagne au bonneteau&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=EppdVuV0z8I&quot;&gt;&lt;small&gt;Source : Vancoosh, starring Frida&lt;/small&gt;&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Si je m'étais bougé dans les temps, que j'aurais choppé les discussions du W3C et mis mon ptit grain de sel de Guérande, j'aurais fait la proposition suivante&amp;nbsp;: on devrait proposer de pouvoir modifier à la volée l'URL de source par une &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;regex&lt;/a&gt;, puisque la grande majorité des sous-formats d'images sont automatisés jusqu'à leur stratégie de nommage.
&lt;/p&gt;
&lt;p&gt;
Cela demande beaucoup de nouveautés&amp;nbsp;:
&lt;/p&gt;
&lt;h3 id=&quot;proposition_srcset_css&quot;&gt;Proposition : srcset en css&lt;/h3&gt;

&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-socks_s.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Toutes nos chaussettes au même endroit.&lt;br /&gt;&lt;small&gt;&lt;a href=&quot;https://www.flickr.com/photos/angryjuliemonday/8191485739/lightbox/&quot;&gt;Source&amp;nbsp;: AngryJulieMonday&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
En fait, le mieux serait d'indiquer une règle de ressource en fonction de la finesse de l'écran. Et quitte à avoir &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; en html, autant le remonter en css, non&amp;nbsp;?
&lt;/p&gt;
&lt;code&gt;&lt;em&gt;srcset&lt;/em&gt; : &quot;&lt;i&gt;img-4x.jpg&lt;/i&gt;&quot; 4x;&lt;/code&gt;
&lt;p&gt;
Où l'on pourrait chaîner plusieurs scénarii&amp;nbsp;:
&lt;/p&gt;
&lt;code&gt;&lt;em&gt;srcset&lt;/em&gt; : &quot;&lt;i&gt;img-2x.jpg&lt;/i&gt;&quot; 2x , &quot;&lt;i&gt;img-4x.jpg&lt;/i&gt;&quot; 4x;&lt;/code&gt;
&lt;p&gt;
Ce qui fait que cette propriété gérerait à la fois la substitution de source et l'échelle à y appliquer. Nous aurions une déclaration générale et beaucoup plus facilement modifiable en cas de modification des règles css, par exemple en cas de changement d'un thème &lt;em&gt;responsive design&lt;/em&gt;. D'ailleurs la notation en fonction de la largeur disponible deviendrait caduque.
&lt;/p&gt;
&lt;p&gt;
Bien évidemment, en cas de ressource absente, la propriété serait ignorée.&lt;br /&gt;
Nous aurions aussi un gain pour d'autres balises, telles que &lt;code&gt;&amp;lt;&lt;strong&gt;video&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; ou &lt;code&gt;&amp;lt;&lt;strong&gt;iframe&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt;
&lt;/p&gt;

&lt;h3 id=&quot;proposition_regex&quot;&gt;Proposition : Intégrer les regex en css&lt;/h3&gt;
&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-RegEx_s.jpg&quot; alt=&quot;1406-Img-RegEx.gif&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;http://halibutstuff.com/&quot;&gt;&lt;small&gt;Source&amp;nbsp;: Halibustuff.com&lt;/small&gt;&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
La gestion d'un nouveau type d'opération en css, à savoir une regex et son pattern de remplacement. Tous les navigateurs possèdent forcément un moteur javascript, et donc une bibliothèque regex standard. Je pense néanmoins que c'est là qu'il y aura le plus de travail, de débats et de code à écrire car il demandera d'adapter les parsers css à une syntaxe qui leur est inédite.
&lt;/p&gt;
&lt;p&gt;
Par exemple : &lt;code&gt;regex(attr(&lt;i&gt;src&lt;/i&gt;) , &quot;&lt;i&gt;^/images(.*)/([^/]+)$&lt;/i&gt;&quot; , &quot;&lt;i&gt;/images\1/.\2,x2&lt;/i&gt;&quot;)&lt;/code&gt;.&lt;br /&gt;
Le premier paramètre indique la chaîne de caractère à traiter, ici le contenu de l'attribut &lt;code&gt;&lt;em&gt;src&lt;/em&gt;=&quot;&quot;&lt;/code&gt; dans le code html, le deuxième indique la formule de travail, et la troisième la formule de remplacement. Dans cet exemple, &lt;code&gt;/images/examples/test.jpg&lt;/code&gt; serait remplacé en &lt;code&gt;/images/examples/&lt;strong&gt;.&lt;/strong&gt;test.jpg&lt;strong&gt;,x2&lt;/strong&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Du coup, il suffit de ne décrire qu'en une seule fois les stratégies de nommage des sous-formats d'images, selon que l'on a choisi par sous-répertoires (“&lt;code&gt;/x1/img.jpg&lt;/code&gt;”), par suffixe interne (“&lt;code&gt;img_x1.jpg&lt;/code&gt;”) ou externe (“&lt;code&gt;img.jpg,x1&lt;/code&gt;”).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;L'allègement de code du source html serait phénoménal sur bien des sites&lt;/strong&gt; par rapport à la stratégie &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; dans chaque balise.
&lt;/p&gt;

&lt;h3 id=&quot;proposition_sync&quot;&gt;Proposition : async=&quot;no&quot;&lt;/h3&gt;
&lt;figure class=&quot;l&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-FeuRouge_s.jpg&quot; alt=&quot;un feu rouge&quot; /&gt;
&lt;figcaption&gt;
&lt;small&gt;&lt;a href=&quot;http://pixabay.com/fr/feux-de-circulation-la-lumi%C3%A8re-rouge-6008/&quot;&gt;CC0 Auteur&amp;nbsp;: Hans. Source&amp;nbsp;: Pixabay.&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Si nous ne voulons pas que le navigateur charge les ressources &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&quot;&amp;nbsp;/&amp;gt;&lt;/code&gt; par défaut, puis charge celles à la bonne résolution après coup, il faut avoir la possibilité d'indiquer au navigateur qu'un asset (css ou javascript) ne doit pas être traité de façon asynchrone. Et donc proposer un &lt;code&gt;&lt;em&gt;async&lt;/em&gt;=&quot;&lt;i&gt;no&lt;/i&gt;&quot;&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
Ouais, je sais.
&lt;/p&gt;
&lt;p&gt;
D'ici, je vous entends hurler que cette proposition est totalement contre-productive, vous voulez me jeter à la figure des fruits pas frais, et vous me menacez d'&lt;a href=&quot;https://www.youtube.com/watch?v=vt0Y39eMvpI&quot;&gt;une visite de l'Inquisition Espagnole&lt;/a&gt;.&lt;br /&gt;
Vous avez 
&lt;em&gt;presque&lt;/em&gt; raison&amp;nbsp;: Cette propriété éviterait que le navigateur appelle des sources d'images qui sont destinées à être invalidées dans une feuille de style. Évidemment, cela va complètement à rebours de tout ce qui est tenté en termes de performances, et &lt;strong&gt;il y a des risques d'abus, mais les intégrateurs apprendront à faire attention à leurs dépends&lt;/strong&gt;. &lt;small&gt;Et puis, si je ne fais pas une proposition totalement ridicule, vous risqueriez de me prendre au sérieux.&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Actuellement, la solution adoptée est l'inclusion de js/css dans le html source. Et je ne sais pas pour vous, mais pour moi aussi, ça pique un peu les yeux.
&lt;/p&gt;


&lt;h3 id=&quot;infine&quot;&gt;In fine&lt;/h3&gt;
&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-WaterFrog_s.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;http://agnatha3141.deviantart.com/art/jumping-water-frog-287597882&quot;&gt;&lt;small&gt;&lt;em&gt;Jumping water frog&lt;/em&gt; par agnatha3141&lt;/small&gt;&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Je sais, c'est extrêmement prétentieux de faire autant de propositions, et une partie de celles-ci sont à coup sûr complètement erronées. Ensuite, il faudra les proposer indépendemment, les faire éventuellement accepter par les groupes du W3C et du WHAT-WG, les voir peut-être arriver dans les navigateurs et en éviter les abus.
&lt;/p&gt;
&lt;p&gt;
Bref, il y avait du boulot, mais elles aideraiement à &lt;strong&gt;rendre la syntaxe html nettement moins verbeuse&lt;/strong&gt;, l'entretien nettement facilité des ressources et la possibilité d'étendre très facilement pour les très très fortes densités encore à venir. J'ose à peine imaginer des malades capable de nous vendre des écrans à 3200&amp;nbsp;dpi…
&lt;/p&gt;

&lt;p&gt;
Imaginez&amp;nbsp;:
&lt;/p&gt;
&lt;code&gt;
&lt;strong&gt;article&lt;/strong&gt; &lt;strong&gt;img&lt;/strong&gt; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;em&gt;srcset&lt;/em&gt; : regex(attr(&lt;i&gt;src&lt;/i&gt;) , &quot;&lt;i&gt;^/images/articles/(.*)/([^/]+)$&lt;/i&gt;&quot; , &quot;&lt;i&gt;/images/articles/\1/.\2,x2&lt;/i&gt;&quot;) x2,&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; regex(attr(&lt;i&gt;src&lt;/i&gt;) , &quot;&lt;i&gt;^/images/articles/(.*)/([^/]+)$&lt;/i&gt;&quot; , &quot;&lt;i&gt;/images/articles/\1/.\2,x4&lt;/i&gt;&quot;) x4;&lt;br /&gt;
}&lt;br /&gt; 
.decor &lt;strong&gt;img&lt;/strong&gt; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;em&gt;srcset&lt;/em&gt; : regex(attr(&lt;i&gt;src&lt;/i&gt;) , &quot;&lt;i&gt;^/images/layout/(.*)/([^/]+)$&lt;/i&gt;&quot; , &quot;&lt;i&gt;/images/layout/\1/.\2,x2&lt;/i&gt;&quot;) x2,&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; regex(attr(&lt;i&gt;src&lt;/i&gt;) , &quot;&lt;i&gt;^/images/layout/(.*)/([^/]+)$&lt;/i&gt;&quot; , &quot;&lt;i&gt;/images/layout/\1/.\2,x4&lt;/i&gt;&quot;) x4;&lt;br /&gt;
}
&lt;/code&gt;
&lt;p&gt;
On ferait difficilement plus simple…
&lt;/p&gt;

&lt;h3 id=&quot;thankyou&quot;&gt;And thank you for all the fish&lt;/h3&gt;
&lt;p&gt;
Ce dossier sur la balise &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; fut un travail long, et qui n'a pas la prétention d'être exhaustif ou parfait. Donc je remercie tous ceux qui m'auront relus, conseillé, corrigé dans les commentaires. &lt;strong&gt;Écrire sur un sujet exige de se remettre en question&lt;/strong&gt;, de se documenter et à reprendre le désir d'apprendre et de rédiger sans se limiter à caler des jeux de mots foireux.
&lt;/p&gt;
&lt;p&gt;
Je remercie milles fois la syntaxe de l'attribut &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; qui m'a donné l'inspiration de m'exprimer à ce sujet.
&lt;/p&gt;
&lt;p&gt;
Sans rancune ;)
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Bricolages en ‹img /›</title>
		<link>https://dascritch.net/post/2014/05/12/Bricolages-en-img</link>
		<guid isPermaLink="false">urn:md5:fe4e899d193fef9369e4450edcc51e12</guid>
		<dc:date>2014-05-12T10:15:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Où l'on apprendra comment les images sont gérées par les serveur web, et comment les navigateurs utilisent le document et ses méta-données header http. Avec une très belle astuce pour les CMS.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Où l'on apprendra comment les images sont gérées par les serveur web, et comment les navigateurs utilisent le document et ses méta-données header http. Avec une très belle astuce pour les CMS.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1403-Img-iconograp_ie.png&quot; alt=&quot;Placer iconographie du dossier ici&quot; class=&quot;r&quot; /&gt;
Ce billet fait partie de la série &lt;strong&gt;en &amp;lt;img /&amp;gt;&lt;/strong&gt;&amp;nbsp;: 
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/03/25/Histoires-en-img&quot;&gt;Histoires en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/09/Manuel-en-img&quot;&gt;Manuel en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img&quot;&gt;Ressources en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bricolages en &amp;lt;img /&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/06/10/Progressivement-en-img&quot;&gt;Progressivement en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/06/12/Finesse-en-img&quot;&gt;Finesse en &amp;lt;img /&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/06/17/Propositions-en-img&quot;&gt;Propositions en &amp;lt;img /&amp;gt;&lt;/a&gt; / &lt;a href=&quot;http://dascritch.net/post/2014/06/18/Proposals-about-img&quot;&gt;English version&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;
&lt;style&gt;
.avecfond {
background : url(http://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-background.png);
}
.avecfond img {
margin : auto;
}
.post-content td img { border : none; vertical-align : bottom}
@media only screen and (max-width:700px) {
#tests thead th:nth-child(2), #tests thead th:nth-child(5), #tests thead th:nth-child(6), 
#tests td:nth-child(2), #tests td:nth-child(5), #tests td:nth-child(6) { display:none }
}
&lt;/style&gt;
&lt;script&gt;
document.addEventListener('DOMContentLoaded', function() {
$(function() {
  $('#tests img').on('error',function(){
    // oui, bizarrement, l'événement 'error' ne bulle pas vers les parents :( j'avais prévenu que cette méthode manquait de sens
    $(this).replaceWith($('&lt;a&gt;',{'href':this.src}).html('non'));
  });
});
});
&lt;/script&gt;

&lt;p&gt;
Maintenant que nous avons défini la méthode d'appel dans &lt;a href=&quot;https://dascritch.net/tag/html&quot;&gt;la syntaxe html&lt;/a&gt; et que nous connaissons les formats d'images actuellement supportés, intéressons-nous sur la manière dont les navigateurs web travaillent, avec en prime un petit hack amusant.
&lt;/p&gt;
&lt;h3 id=&quot;reverse-engineering&quot;&gt;Reverse engineering : comment les navigateurs gèrent &amp;lt;img&amp;nbsp;/&amp;gt;&lt;/h3&gt;
&lt;p&gt;
Le plus important à savoir est que pour les clients web &lt;strong&gt;l'extension du nom de fichier n'a aucune influence&lt;/strong&gt;.&lt;br /&gt;
Croire qu'il faut un &lt;code&gt;.gif&lt;/code&gt; en fin de nom de fichier pour mettre votre truc animé, c'est un peu la même croyance que croire mordicus que &lt;code&gt;.html&lt;/code&gt; en fin d'url aide précieusement votre référencement. Le W3C, l'IETF et toutes &lt;a href=&quot;http://boingboing.net/2010/07/16/mad-mustachioed-dad.html&quot;&gt;les cyberpolices&lt;/a&gt; qui définissent internet se foutent de chaque charlatan qui professe le contraire. Ces derniers sont des SEO-LOL qui travaillent exclusivement sous Windows et qui ne connaissent rien au web, ni à internet, ni à l'informatique. 
&lt;/p&gt;
&lt;figure class=&quot;c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1405-Img-seoclown.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Un spécialiste SEO diplômé Sup-De-LOL avec son appeau à &lt;em&gt;crawlers&lt;/em&gt;.&lt;br /&gt;
&lt;a href=&quot;https://www.flickr.com/photos/fotosdelrupert/205108754&quot;&gt;Photo CC de Rodrigo Álvarez avec Oscar Zimmerman&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Parce que cela n'a &lt;strong&gt;jamais&lt;/strong&gt; été le cas&amp;nbsp;: Il n'est pas rare dans la vie d'un &lt;em&gt;crawler&lt;/em&gt; de moteur de recherche de tomber sur du texte ou des images générés dynamiquement et servis par des URL se terminant en &lt;code&gt;.pl&lt;/code&gt;, &lt;code&gt;.php&lt;/code&gt; ou &lt;code&gt;.aspx&lt;/code&gt;. &lt;strong&gt;Une extension de nom de fichier n'est jamais une information fiable&lt;/strong&gt; pour identifier un type de document.&lt;br /&gt;
Dans le protocole HTTP, si un logiciel client, qu'il soit navigateur web ou &lt;em&gt;crawler&lt;/em&gt;, doit identifier le type de document (si c'est une image ou une page de texte) autrement que par son contenu, il doit se référer &lt;a href=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17&quot;&gt;au type-mime indiqué dans l'entête &lt;code&gt;Content-type:&lt;/code&gt; par le serveur&lt;/a&gt;. Si cette information ne semble pas fiable, on passe alors à &lt;a href=&quot;http://www.delafond.org/traducmanfr/man/man1/file.1.html&quot;&gt;une analyse divinatoire du type de document, familièrement appelée &lt;q&gt;magic&lt;/q&gt;&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Le format réel de la ressource image est devinée par la bibliothèque de décodage graphique embarquée par le navigateur&lt;/strong&gt;. GIF&amp;nbsp;? JFIF&amp;nbsp;? PNG&amp;nbsp;? Pas de souci&amp;nbsp;: ces bibliothèques procèdent à une divination &lt;em&gt;magic&lt;/em&gt; optimisée, testant les formats de documents qu'elle supportent. Elles sauront très bien se dépatouiller avec l'image.
&lt;/p&gt;

&lt;p&gt;
Mais je vais être honnête&amp;nbsp;: Dans les faits, quand il faut construire l'header d'une ressource à servir, les serveurs web en production correctement paramétrés ne se basent pas sur les définitions &lt;em&gt;magic&lt;/em&gt; des fichiers, mais… sur l'extension de leur nom. Nettement plus rapide qu'analyser le contenu du document et le confronter à plusieurs milliers de règles regex.&lt;br /&gt;
Arrêtez de pouffer dans le fond, nous verrons &lt;a href=&quot;https://dascritch.net/post/2014/05/12/Bricolages-en-img#letstest&quot;&gt;plus bas&lt;/a&gt; que son utilité est toute relative pour &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt;.
&lt;/p&gt;
&lt;h3 id=&quot;trou&quot;&gt;C'est l'histoire d'un trou de fort beau gabarit&lt;/h3&gt;
&lt;p&gt;
Et puisqu'on parle de cela, il que je vous conte l'histoire d'un trou de sécurité qui resta très longtemps béant.&lt;br /&gt;
Il était une fois &lt;a href=&quot;http://dascritch.net/post/2006/10/13/562-la-seconde-guerre-du-web-n-aura-pas-lieu&quot;&gt;un navigateur qui avait gagné une guerre&lt;/a&gt;, et qui fut le plus populaire des navigateurs de son temps&amp;nbsp;: MSIE (MSIE&amp;nbsp;6 inclus jusqu'à la XP SP1).
&lt;/p&gt;
&lt;p&gt;
En ce temps-là, le navigateur fourni d'office par Microsoft était tellement imbriqué dans Ms-Windows qu'il demandait aux procédures standards de l'OS de deviner à sa place les fichiers images. Jusqu'ici rien d'anormal&amp;nbsp;: les équipes de développement Microsoft utilisaient &lt;a href=&quot;http://pragprog.com/the-pragmatic-programmer&quot;&gt;pragmatiquement sans le savoir&lt;/a&gt; l'approche &lt;abbr&gt;DRY&lt;/abbr&gt;. &lt;q&gt;Do not Repeat Yourself&lt;/q&gt; (il est inutile de répéter les mêmes fonctions) est une très bonne pratique de développement de projet.
&lt;/p&gt;
&lt;p&gt;
MSIE n'étant disponible que dans l'OS de Microsoft (l'équipe de la version Mac mourrait d'inanition), la IETeam n'allait pas s'embêter à ré-inventer la roue et se baser sur la gestion des types de documents propre à Ms-Windows.&lt;br /&gt;
Du coup, si le système hôte supporte un nouveau type de document qui est un format d'image, le gestionnaire de document tout comme le navigateur imbriqué vont aussi le gérer, comme tout logiciel de cet éditeur. Ce mode de conception se retrouve dans d'autres OS et navigateurs&amp;nbsp;: &lt;a href=&quot;http://rekonq.kde.org/&quot;&gt;Rekonq se base sur les bibliothèques Qt&lt;/a&gt; de &lt;a href=&quot;http://kde.org/&quot;&gt;l'environnement KDE&lt;/a&gt;, et Safari se reposait en défaut sur &lt;a href=&quot;https://developer.apple.com/quicktime/&quot;&gt;Quicktime&lt;/a&gt; pour les ressources qu'il ne comprenait pas.&lt;br /&gt;
On y retrouve d'ailleurs le même manque fonctionnel par construction&amp;nbsp;: l'affichage durant le chargement du &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_gif&quot;&gt;gif 89a entrelacé&lt;/a&gt; et du &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_jpeg&quot;&gt;jpeg progressif&lt;/a&gt; n'est pas possible, toute image n'est affichée qu'une fois complètement décodée.
&lt;/p&gt;
&lt;p&gt;
Sauf que &lt;strong&gt;dans l'écosystème de Microsoft, cette procédure était trop permissive&lt;/strong&gt;&amp;nbsp;: Gestion par extension de fichier plus oubli de limite de périmètre fonctionnel. Les documents “images” appelés via &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; se finissant en &lt;code&gt;.exe&lt;/code&gt; ou &lt;code&gt;.dll&lt;/code&gt; étaient… &lt;strong&gt;exécutés… avec le plus haut niveau de privilège possible…&lt;/strong&gt;
&lt;/p&gt;
&lt;figure class=&quot;c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1405-DoubleFacepalm.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Double facepalm, quand un seul ne suffit pas.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Si je vous dis qu'il était à l'époque “courant” de piéger des pages web qui changaient par ce biais le numéro d'appel du modem pour accéder à Internet en un 08 99… soigneusement surfacturé. Oui, Monsieur le Président, je plaide la complicité.
&lt;/p&gt;
&lt;p&gt;
Ce fut la dernière fois qu'un navigateur se basait sur une extension de nom de fichier pour gérer les éléments d'une page web au lieu de vérifier son contenu effectif. Et depuis, MSIE fait comme tout le monde et utilise une bibliothèque compartimentée pour le décodage et l'affichage des images.
&lt;/p&gt;
&lt;p&gt;
D'ailleurs, c'est suite au comblement de cette faille qu'on a commencé à voir arriver &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_ico&quot;&gt;des favicons&lt;/a&gt; animées. La recette est simple&amp;nbsp;: renommer une animation gif de taille 16×16 en &lt;code&gt;favicon.ico&lt;/code&gt; et le mettre à la racine du site. &lt;a href=&quot;https://www.youtube.com/watch?v=I_hMTRRH0hM&quot;&gt;Encore une fois&lt;/a&gt; terriblement efficace.
&lt;/p&gt;
&lt;p&gt;
C'est cette astuce qui allait me donner l'idée d'un hack…
&lt;/p&gt;

&lt;p&gt;
(teasing)
&lt;/p&gt;
&lt;h3 id=&quot;classique&quot;&gt;Classique des CMS : Image source et sous-formats&lt;/h3&gt;
&lt;p&gt;
&lt;strong&gt;Quand vous construisez un CMS&lt;/strong&gt; ou n'importe quel service qui doit servir des images fournies par des utilisateurs dans un contexte formaté, &lt;strong&gt;l'exercice de style archi-classique est la gestion des sous-formats d'images&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
Tout outil de blogging ou d'e-commerce doit forcément gérer le fait qu'un contenu texte ou qu'un item soit enrichi d'une image. Il est dans les faits extrêmement rare que l'utilisateur qui crée le contenu envoie au serveur une image aux dimensions exactes préconisées par le designer.
&lt;/p&gt;
&lt;figure class=&quot;c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1405-Img-media-mockup.png&quot; alt=&quot;mockup&quot; /&gt;
&lt;figcaption&gt;
Mock-up d'un design d'article magazine. Flottant à gauche, un espace &lt;strong&gt;contraint&lt;/strong&gt; est prévu pour des images.&lt;br /&gt;
&lt;a href=&quot;http://web.communications.uci.edu/2012/02/23/news-uci-edu-first-draft-of-final-page-level/&quot;&gt;Source : Étude de redesign du site news.uci.edu&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Et il est probable que cette image d'illustration soit reprise dans d'autres contextes, par exemple &lt;a href=&quot;http://dascritch.net/&quot;&gt;une page de une&lt;/a&gt;, de &lt;a href=&quot;http://dascritch.net/category/Webdev&quot;&gt;sommaire&lt;/a&gt; ou de &lt;a href=&quot;http://dascritch.net/?q=img&quot;&gt;recherche&lt;/a&gt; mais dans d'autres dimensions contraintes. Cette image doit donc être réduite ou/et coupée par l'interface d'édition afin de tenir dans un ou plusieurs certain canevas. Une opération &lt;a href=&quot;http://dascritch.net/post/2014/04/09/Manuel-en-img#attr_dimensions&quot;&gt;plus cohérente et largement meilleure que de faire de la sur/sous-résolution&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Le CMS crée à partir de cette image source (ou &lt;q&gt;master&lt;/q&gt;) des sous-images qu'on a conformé aux dimensions du design graphique du site. Ces sous-formats sont parfois optimisés pour le transfert en jouant sur les paramètres de compression, en suppression des métadonnées embarquées, etc…
&lt;/p&gt;

&lt;h3 id=&quot;ecueil&quot;&gt;L'écueil du nommage des sous-formats&lt;/h3&gt;
&lt;p&gt;
«&amp;nbsp;&lt;em&gt;Qui amat bene, castigat bene.&lt;/em&gt;&amp;nbsp;» (maxime latine qui explique qu'au rugby, on aime beaucoup ses adversaires).&lt;br /&gt;
Pour l'avoir beaucoup trituré dans tous les sens, je vais parler du &lt;a href=&quot;http://dascritch.net/post/2013/08/13/Ma-plus-belle-histoire-avec-Dotclear&quot;&gt;moteur de blog qui motorise mon site depuis 10 ans. Dotclear&lt;/a&gt;, dans sa version 1 n'avait qu'un seul format de sous-images. Si j'envoyai &lt;code&gt;capture.jpg&lt;/code&gt;, le script créait &lt;code&gt;capture.TN__.jpg&lt;/code&gt;. Ce qui posait un souci de lisibilité dans les répertoires, puisque les entrées étaient doublées dans les gestionnaires de transfert.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://fr.dotclear.org/documentation/2.0/usage/blog-parameters#medias-et-images&quot;&gt;Dotclear 2 propose une gestion paramétrables de multiples sous-formats&lt;/a&gt;. Cette fois-ci, &lt;a href=&quot;http://neokraft.net/&quot;&gt;Dieu&lt;/a&gt; décida de cacher le sous-formats d'images en préfixant par un point le nom de fichier (le standard Unix pour cacher un document, dans l'univers MS-DOS, c'est un bit d'état dans les métadonnées). Ainsi, on passait d'une structure&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;capture.png&lt;/li&gt;
&lt;li&gt;capture.__TN.jpg&lt;/li&gt;
&lt;/ul&gt;
à
&lt;ul&gt;
&lt;li&gt;capture.png&lt;/li&gt;
&lt;li&gt;.capture_m.jpg&lt;/li&gt;
&lt;li&gt;.capture_s.jpg&lt;/li&gt;
&lt;li&gt;.capture_sq.jpg&lt;/li&gt;
&lt;li&gt;.capture_t.jpg&lt;/li&gt;
&lt;/ul&gt;
La génération de certains sous-formats ne se fait pas si l'image &lt;em&gt;master&lt;/em&gt; est en-dessous des tailles maximales du canevas de ce format.
&lt;/p&gt;
&lt;figure class=&quot;c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1405-Img-arborescence.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Extrait d'une vue de l'arborescence des illustrations de ce dossier. À droite, les documents originaux que j'ai envoyé, à gauche, les sous-formats générés par Dotclear. Ces derniers sont en sous-opacité car ils sont “cachés”.
&lt;figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Mais il reste un souci : jusqu'à la version 2.5, les sous-formats générés par le moteur de blog sont forcément des jpeg. Imaginez que vous envoyiez &lt;code&gt;exemple.jpg&lt;/code&gt; et &lt;code&gt;exemple.jpeg&lt;/code&gt;, si les masters sont bien différenciés, vous aurez forcément &lt;strong&gt;une collision parce que le nom du document hors extension est le même&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
Pour moi, cette imprécision n'était pas acceptable car j'ai régulièrement eu des utilisateurs qui se plantaient à l'extension. Et je ne vais pas les en blâmer&amp;nbsp;: mes clients humains étaient des chefs d'entreprises dont le métier n'est pas l'informatique, je devais donc m'adapter, ou &lt;a href=&quot;http://dascritch.net/post/2013/12/10/I-love-bug-reports&quot;&gt;en suer à gérer le “bug” par téléphone.&lt;/a&gt;
&lt;/p&gt;
&lt;h3 id=&quot;forcement&quot;&gt;Forcément, quand j'ai créé le mien…&lt;/h3&gt;
&lt;p&gt;
Pour mon service dAgence, je souhaitais avoir la plus grande plasticité possible pour générer les sous-formats à partir d'une image originale. Comme nous (&lt;a href=&quot;http://nicolas-guilhou.com/&quot;&gt;Nicolas “Xylpho” Guilhou&lt;/a&gt; au design et moi au code) construisions une solution B2B destinée à des &lt;em&gt;freelances&lt;/em&gt; et des agences web, il fallait avoir un service générique, exhaustif capable de répondre à leurs demandes en étant le plus souple possible.
&lt;/p&gt;
&lt;p&gt;
Le problème de collision de nom de document hors extension était, croyez-moi, le moins pire de nos soucis&amp;nbsp;:
Vous ne pouvez pas imaginer de quoi est capable un client, surtout s'il est &lt;strong&gt;conseillé par un &lt;q&gt;spécialiste design&lt;/q&gt; qui n'a jamais fait de css de sa vie.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Pour illustrer, voici les paramétrages de sous-formats d'images utilisés pour &lt;a href=&quot;http://dascritch.com&quot;&gt;mon site corporate dascritch.com&lt;/a&gt;, actuellement toujours hébergé sur dAgence.
&lt;/p&gt;
&lt;figure class=&quot;c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1403-Img-ExempleFormatsDagence.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Capture du backoffice béta, sur la liste des sous-formats d'images générées
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
En clair, si j'envoie un &lt;code&gt;capture.png&lt;/code&gt;, j'aurais forcément pour les besoins du backoffice, un sous-format &lt;q&gt;favicon&lt;/q&gt; (qui tronque en 16×16 et exporte en png) et &lt;q&gt;icone&lt;/q&gt; (qui réduit en 128×128, en jpeg). Sur cette portion capturée, on ne le voit pas très bien mais ces formats ne sont pas modifiables.
&lt;/p&gt;
&lt;p&gt;
En frontal (le site accessible à tous, quoi), je crée et paramètre autant de sous-formats que je le souhaite. Ainsi, sur mon site, j'ai le &lt;q&gt;dsn&lt;/q&gt; (qui ne modifie pas la taille, mais transcode jpeg à 80%, sans métas) et &lt;q&gt;realisat&lt;/q&gt;, générée à partir des paramétrages suivants&amp;nbsp;:
&lt;/p&gt;
&lt;figure class=&quot;c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1403-Img-ExempleFormatEditDagence.png&quot; alt=&quot;capture du backoffice sur le sous-format d'image “realisat”&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
Comme le laisse deviner le titre de la dernière section que je n'ai pas inclus, on peut aussi y surimposer une image en filigrane ou en tampon.
&lt;/p&gt;
&lt;p&gt;
Ce qui me rappelle un projet magnifique&amp;nbsp;: Un client avait prévu que son site web soit disponible en au moins 7 langues, et que les images aient des versions avec un tampon &lt;q&gt;nouveau&amp;nbsp;!&lt;/q&gt;, un avec &lt;q&gt;promo&amp;nbsp;!&lt;/q&gt; dans chacune des versions linguistiques. 14 filigranes, plus l'original multiplié par les 4 formats minimum designés, ça faisait un joli paquet.&lt;br /&gt;
Oui, le client voulait absolument que toutes ses images soient filigranées, au cas où un concurrent parse son catalogue pour remplir le sien, comme lui-même a dû le faire pendant des années.&lt;br /&gt;
Petit coquinou.
&lt;/p&gt;

&lt;h3 id=&quot;alorsjemesuisgratte&quot;&gt;Alors je me suis gratté la tête&lt;/h3&gt;
&lt;p&gt;
Donc, quand j'en étais à créer un gestionnaire de média, j'ai dû faire un choix sur la stratégie de nommage des sous-formats d'images. J'avais écarté l'idée de créer dans chaque répertoire un sous-répertoire par sous-formats, car c'était reculer pour mieux se planter. Je voulais rester dans l'idée de sous-formats dans le même répertoire que le document original. Il fallait trouver une solution en jouant sur les standards et pratiques courantes.&lt;br /&gt;
Et je me suis dit que malgré toutes les bêtises que mes clients humains aient pu faire, je n'avais jamais vu un élément sans extension se terminer par une virgule puis un mot.
&lt;/p&gt;
&lt;p&gt;
Bingo. 
&lt;/p&gt;
&lt;p&gt;
Pour m'assurer que les navigateurs un peu problématiques de l'époque ne soient pas perdus (de mémoire, des navigateurs pour &lt;em&gt;feature-phones&lt;/em&gt; comme Open-Wave), je leur envoie un type-mime d'image universellement supporté, mais sans support de chargement progressif. Donc forcément un png. Je demande donc au serveur http du service de fournir les documents avec le type-mime &lt;code&gt;image/png&lt;/code&gt; sans se baser sur le contenu interne du document servi mais sur le nom de fichier (ce qu'il fait quand même… eh oui).
&lt;/p&gt;
&lt;p&gt;
Paramétrages pour un serveur Apache&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;
&amp;lt;&lt;strong&gt;FilesMatch&lt;/strong&gt; &lt;em&gt;,[A-Za-z0-9_\-]+$&lt;/em&gt;&amp;gt;&lt;br /&gt;
 &amp;nbsp;  &amp;nbsp; ForceType &lt;em&gt;image/png&lt;/em&gt;&lt;br /&gt;
&amp;lt;/&lt;strong&gt;FilesMatch&lt;/strong&gt;&amp;gt;
&lt;/code&gt;
&lt;br /&gt;
Pour un serveur nginx&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;
&lt;strong&gt;location&lt;/strong&gt;  &lt;em&gt;,[A-Za-z0-9_\-]+$&lt;/em&gt; {&lt;br /&gt;
 &amp;nbsp; &amp;nbsp; &lt;i&gt;default_type&lt;/i&gt;  &lt;em&gt;image/png&lt;/em&gt;;&lt;br /&gt;
}
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Et voilà&lt;/em&gt; *.&lt;br /&gt;
Peu importe le type d'image généré, que cela soit un gif, png ou jpeg, votre serveur web déclarera dans les headers http un &lt;code&gt;Content-Type: &lt;em&gt;image/png&lt;/em&gt;&lt;/code&gt;, les navigateurs clients qui le récupèrent comme ressource &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; ou composante css laissent à leur bibliothèque de gestion des images le soin de se dépatouiller avec. Et tous les navigateurs l'ont très bien supporté, même MSIE6.
&lt;br /&gt;
&lt;small&gt;(* En Français dans le texte)&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Avant de tester ce dernier fait, petits rappels : &lt;ul&gt;
&lt;li&gt;les directives apache ou nginx, moins il y en a, mieux c'est&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;les directives avec des &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;expressions régulières dedans&lt;/a&gt;, c'est une chute de performance annoncée. Mais comme les méthodes &lt;em&gt;magic&lt;/em&gt; en sont farcies, ici, au contraire, on peut faire gagner du temps au serveur&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;sur &lt;a href=&quot;https://dascritch.net/tag/apache&quot;&gt;serveur apache&lt;/a&gt;, évitez autant que possible de mettre des directives en &lt;code&gt;.htaccess&lt;/code&gt;&amp;nbsp;: si elles ne sont pas destinées à bouger sans un redémarrage serveur, préférez les mettre dans votre arborescence &lt;code&gt;/etc/apache2/&lt;/code&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
Ainsi, si j'envoie dans le backoffice de mon site pro, une image appelée &lt;code&gt;capture.png&lt;/code&gt;, mon serveur va construire dans un répertoire les documents&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;capture.png&lt;/li&gt;
&lt;li&gt;capture.png,demo&lt;/li&gt;
&lt;li&gt;capture.png,dsn&lt;/li&gt;
&lt;li&gt;capture.png,favicon&lt;/li&gt;
&lt;li&gt;capture.png,icone&lt;/li&gt;
&lt;li&gt;capture.png,realisat&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;h3 id=&quot;letstest&quot;&gt;Let's test !&lt;/h3&gt;
&lt;p&gt;
Il s'agit du même test dynamique que &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img&quot;&gt;pour le chapitre précédent&lt;/a&gt;&amp;nbsp;: Si l'image “oui” s'affiche, c'est que le navigateur le supporte.
&lt;/p&gt;

&lt;table class=&quot;cl&quot; id=&quot;tests&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot;&gt;Format&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;Type/mime standard&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;support&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;forcé en&lt;br /&gt;&lt;em&gt;image/png&lt;/em&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;&lt;em&gt;text/xml&lt;/em&gt;&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;&lt;em&gt;application/binary&lt;/em&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;xbm&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/x-xbitmap
&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.xbm&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.xbm,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.xbm,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.xbm,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;xpm&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/x-pixmap&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.xpm&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.xpm,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.xpm,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.xpm,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;pbm&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/x-portable-bitmap&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.pbm&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.pbm,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.pbm,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.pbm,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;pgm&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/x-portable-graymap&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.pgm&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.pgm,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.pgm,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.pgm,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;ppm&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/x-portable-pixmap&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.ppm&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.ppm,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.ppm,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.ppm,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_bmp&quot;&gt;bmp&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/x-ms-bmp&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.bmp&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.bmp,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.bmp,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.bmp,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_gif&quot;&gt;gif&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/gif&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.gif&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.gif,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.gif,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.gif,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_ico&quot;&gt;ico&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/vnd.microsoft.icon&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.ico&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.ico,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.ico,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.ico,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_jpeg&quot;&gt;jpeg/jfif&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/jpeg&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.jpg&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.jpg,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.jpg,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.jpg,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_jpeg&quot;&gt;jpeg2000&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/jp2&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.jp2&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.jp2,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.jp2,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.jp2,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_jpeg&quot;&gt;jpeg XR&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/vnd.ms-photo&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.exr&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.exr,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.exr,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.exr,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;na href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_tga&quot;&gt;tga&lt;/na&gt;&lt;/th&gt;&lt;td&gt;image/x-targa&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.tga&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.tga,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.tga,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.tga,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;png&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/png&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.png,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.png,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.png,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;mng/jng&lt;/a&gt;&lt;/th&gt;&lt;td&gt;video/x-mng&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.mng&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.mng,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.mng,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.mng,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;apng&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/png&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.apng&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.apng,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.apng,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.apng,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_svg&quot;&gt;svg&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/svg+xml&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.svg&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.svg,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.svg,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.svg,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_webp&quot;&gt;webp&lt;/a&gt;&lt;/th&gt;&lt;td&gt;image/x-webp&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.webp&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.webp,png&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.webp,xml&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-oui.webp,app&quot; alt=&quot;non&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Quels que soient les navigateurs web, pour que la ressource d'une &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; soit parfaitement interprétée, le seul besoin impérieux est que le fichier doit être correct. &lt;strong&gt;La seule exception où nous avons besoin d'un type-mime exact concerne &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_svg&quot;&gt;le format svg&lt;/a&gt;&lt;/strong&gt;.
&lt;br /&gt;
La raison est évidente&amp;nbsp;: la nature vectorielle du svg le fait passer par le moteur de rendu “normal” du navigateur, donc &lt;a href=&quot;https://dascritch.net/tag/dom&quot;&gt;un arbre dom&lt;/a&gt;. À l'usage, une image svg n'a pas &lt;a href=&quot;http://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage#ilyadeuxtypes&quot;&gt;une consommation mémoire aussi indécente qu'une &lt;code&gt;&amp;lt;&lt;strong&gt;iframe&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt;&lt;/a&gt;, puisque les navigateurs très récents ne chargent pas un interpréteur complet.
&lt;br /&gt;
Pas fous.
&lt;/p&gt;
&lt;p&gt;
Ceci dit, même si &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_svg&quot;&gt;le format svg&lt;/a&gt; est celui dont la gestion des éléments est le plus aléatoire dans les navigateurs, les corrections avancent. Je ne serais pas surpris que le tableau fasse mentir le paragraphe qui le suit dans les mois qui viennent.
&lt;/p&gt;
&lt;h3 id=&quot;retours&quot;&gt;Vos retours sur le hack&lt;/h3&gt;
&lt;p&gt;
&lt;img src=&quot;http://dascritch.net/vrac/.blog2/webdev/1303-DirtyHacky/.1303-DirtyHacky_s.jpg&quot; class=&quot;r&quot; /&gt;
Est-ce que mon hack est propre ou dégueulasse&amp;nbsp;? Survivra-t-il à l'épreuve du temps et de l'élégance&amp;nbsp;? Est-ce que &lt;a href=&quot;http://dascritch.net/post/2013/03/26/Dirty-Hacky-%3A-je-parse-en-HTML-.357-SW&quot;&gt;l'Inspecteur Dirty Hacky doit dégainer et flinguer&lt;/a&gt;&amp;nbsp;?
&lt;/p&gt;
&lt;p&gt;
Je serais curieux d'avoir votre retour. Positif, négatif, analyses… On pourrait peut-être en parler IRL à la prochaine &lt;a href=&quot;http://dascritch.net/post/2014/03/19/HTML-sur-table&quot;&gt;soirée &lt;q&gt;HTML Sur &amp;lt;Table&amp;gt;&lt;/a&gt;&lt;/q&gt;
&lt;/p&gt;
&lt;p class=&quot;cl&quot;&gt;
Dans le prochain épisode, &lt;a href=&quot;http://dascritch.net/post/2014/06/10/Progressivement-en-img&quot;&gt;l'épineux problème du chargement progressif pour qu'il soit ni trop lent, ni trop rapide. Si. Si.&lt;/a&gt;
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>« La BD de Soledad : La compile de l'année »</title>
		<link>https://dascritch.net/post/2013/10/21/%C2%AB-La-BD-de-Soledad-%3A-La-compile-de-l-ann%C3%A9e-%C2%BB</link>
		<guid isPermaLink="false">urn:md5:ef7547ad5508c1bec8bfe724beff7aec</guid>
		<dc:date>2013-10-21T13:30:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Lu</dc:subject>
        
    <description>Chronique dédiée à toutes celles qui me suivent : Soledad Bravi adapte en album ses chroniques dans Elle, et se fait chroniquer par un horrible mysogine. Une compilation annuelle qu'on retrouve Rue de Sèvres et ailleurs.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Lu"&gt;Lu&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Chronique dédiée à toutes celles qui me suivent : Soledad Bravi adapte en album ses chroniques dans Elle, et se fait chroniquer par un horrible mysogine. Une compilation annuelle qu'on retrouve Rue de Sèvres et ailleurs.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Lu"&gt;
			Lu&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;a href=&quot;https://dascritch.net/vrac/.blog2/lu2/1310-LaBDdeSoledad-1.jpg&quot; class=&quot;r&quot; rel=&quot;lightbox[]&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/lu2/.1310-LaBDdeSoledad-1_s.jpg&quot;  /&gt;&lt;/a&gt;&lt;p&gt;
&lt;a href=&quot;http://supplementweekend.fr&quot;&gt;&lt;img src=&quot;https://dascritch.net/statiques/swe-saison5-small.png&quot; alt=&quot;Supplément Week-End, le magazine des cultures geeks&quot; class=&quot;l&quot; /&gt;&lt;/a&gt;
Notes de direct pour l'émission &lt;a href=&quot;http://dascritch.net/post/2013/10/05/Suppl%C3%A9ment-Week-End,-samedi-5-Octobre-2013&quot;&gt;«&amp;nbsp;&lt;em&gt;Supplément Week-End&lt;/em&gt;&amp;nbsp;» du Samedi 5 Octobre 2013.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Ce livre est la compilation des planches pré-publiées dans &lt;i&gt;Elle&lt;/i&gt;, où l'auteur donne ses réflexions et ses tranches de vies. Il y a un trait simple, de l'humour et… non, en fait, il y a une vacuité.
&lt;/p&gt;
&lt;p&gt;
Ami(e?)s audit[eurs|rices], ami(e?)s lect[eurs|rices], je dois peut être vous avouer quelque chose d'intime sur ma personne&amp;nbsp;: Je pense, mais ce n'est bien sûr qu'une supposition, je pense que je ne suis pas dans la cible du public visé par l'éditeur.&lt;br /&gt;
Déjà, je lis rarement &lt;i&gt;Elle&lt;/i&gt;. Je lis cette revue de temps à autres, tout comme je lis &lt;i&gt;Le magazine de la Gynécologie&lt;/i&gt;&amp;nbsp;: à pures fins de culture générale et de curiosité intellectuelle.
&lt;/p&gt;
&lt;p&gt;
Mais revenons à l'album que je chronique présentement. Chaque planche se suffit à elle-même et répond à une question existentielle&amp;nbsp;: «&amp;nbsp;&lt;cite&gt;pourquoi avoir un petit sac&lt;/cite&gt;&amp;nbsp;», «&amp;nbsp;&lt;cite&gt;êtes-vous prête pour les soldes&lt;/cite&gt;&amp;nbsp;», «&amp;nbsp;&lt;cite&gt;c'est quoi une fille “bonne”&lt;/cite&gt;&amp;nbsp;», «&amp;nbsp;&lt;cite&gt;pourquoi devenir un homme&lt;/cite&gt;&amp;nbsp;». J'ai choisi de manière intentionnelle ces titres, car ils montrent bien ce que je pense être un gros problème dans notre société&amp;nbsp;: le sexisme crétin d'une certaine presse. Aux mecs le bricolage, les grosses bagnoles et le sport. Aux meufs la mode, l'horoscope et les régimes avant l'été. Ça m’horripile d'autant plus que &lt;a href=&quot;http://www.lagardere.com/centre-presse/communiques-de-presse/communiques-de-presse-122.html&amp;amp;idpress=6251&quot;&gt;le groupe Lagardère a lancé [la semaine de cette émission] un &lt;i&gt;spin-off&lt;/i&gt; pour nous, les hommes&amp;nbsp;: &lt;i&gt;Elle man&lt;/i&gt;&lt;/a&gt;. Non franchement, c'est quoi ce nom à la con&amp;nbsp;?
&lt;/p&gt;
&lt;p&gt;
En fait, je comprends tout à fait qu'il y a cette littérature car il y a un lectorat, et pas qu'occasionnel. Le problème, c'est que &lt;a href=&quot;http://dascritch.net/post/2013/07/10/Jouets-de-filles&quot;&gt;nous manquons de mixité dans les métiers technologiques&lt;/a&gt;, qu'il y a inégalité des salaires à carrière identique entre hommes et femmes, que &lt;a href=&quot;http://femmes.gouv.fr/parite-dans-les-entreprises-un-palmares-pour-aller-vers-plus-de-transparence-et-creer-de-lemulation/&quot;&gt;la position des femmes dans les postes de décision est trop rare&lt;/a&gt; et je ne parle pas des religions monothéistes qui les relèguent en dessous des hommes. D'ailleurs, y'a pas de femme curé dans not' bon pays.
&lt;/p&gt;
&lt;p&gt;
Oui, Soledad, je sais, tu fus directrice artistique en agence de publicité, &lt;a href=&quot;http://blogdesoledadbravi.com&quot;&gt;ton blog blogdesoledadbravi.com cartonne&lt;/a&gt;, tu as forgé une licence autour de ton nom et de ton trait schématique et épuré. Tant mieux.
&lt;/p&gt;
&lt;p&gt;
Allez, j'avoue avoir ri sur la planche que tu consacres à Lourdes, la fille de Madonna, ou quand on arrive trop en avance à l'aéroport mais… je crois que je ne fais pas partie de la cible de ton lectorat. Et surtout celui de &lt;i&gt;Elle&lt;/i&gt;&amp;nbsp;: les fashionista qui consacrent une partie majoritaire de leur découvert bancaire aux achats de fringues et aux régimes avant l'été.&lt;br /&gt;
Je sais, ça fait mal. Alors traite-moi de sale misogyne frustré. Tu as du talent, mais je n'ai pas accroché, et ce n'est pas parce que je suis un mec.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Un nouveau défi : écrire le web pour dix ans</title>
		<link>https://dascritch.net/post/2013/04/30/Un-nouveau-d%C3%A9fi-%3A-%C3%A9crire-le-web-pour-dix-ans</link>
		<guid isPermaLink="false">urn:md5:fcaa3cd00a08bd138bd13cfcce5cb67a</guid>
		<dc:date>2013-04-30T08:13:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Ma vie est une sitcom</dc:subject>
        
    <description>Bonjour, je suis à nouveau salarié. Et mon employeur doit être aussi fou que moi.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Ma-vie-est-une-sitcom"&gt;Ma vie est une sitcom&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Bonjour, je suis à nouveau salarié. Et mon employeur doit être aussi fou que moi.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Ma-vie-est-une-sitcom"&gt;
			Ma vie est une sitcom&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
Voilà, c'est officiel : j'ai repris une activité de salarié, d'employé, d'ouvrier du code.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://notalus.fr/&quot;&gt;&lt;strong&gt;Notalus&lt;/strong&gt;&lt;/a&gt;, c'est l'histoire d'une belle aventure familiale, d'une entreprise qui transforme vos paquets de papiers administratifs en superbes reliures. Ils ont des clients prestigieux et l'âge de la raison. Et ils font un double pari&amp;nbsp;: proposer un nouveau service sur internet, et passer à un mode de gestion Agile.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://simtie.com/&quot;&gt;&lt;strong&gt;Simtie&lt;/strong&gt;&lt;/a&gt; est un projet de service web pour la gestion documentaire. À l'usage des petites structures, et dans l'idée de penser plus comme elles que de se bloquer à un mode de pensé qui ne conviendrait qu'à une minorité. Et ce projet doit tenir une décennie.&lt;br /&gt;
Notalus m'a proposé de devenir leur &lt;i&gt;lead developer&lt;/i&gt; sur ce projet. De concevoir avec leur équipe d'une manière souple, solide, extensible et ingénieuse.
&lt;/p&gt;
&lt;p&gt;
Le défi est beau.
&lt;/p&gt;

&lt;h3&gt;J'ai tenté d'être mon patron&lt;/h3&gt;
&lt;p&gt;
Être indépendant fut une très belle aventure, mais trop épuisante, éreintante.
&lt;/p&gt;
&lt;p&gt;
Quand je me suis lancé en indépendant en 2007, &lt;a href=&quot;http://dascritch.net/post/2007/02/28/702-allons-voir-ailleurs-si-les-billets-sont-plus-verts&quot;&gt;je sortais de 7 années en tant que &lt;cite&gt;concepteur rédacteur en &lt;del&gt;publicité&lt;del&gt; multimédia&lt;/cite&gt;&lt;/a&gt;. J'écrivais parfois sur la sécurité informatique, et je voulais me prouver que j'étais un développeur. J'avais juste oublié que dans «&amp;nbsp;&lt;cite&gt;web-développeur freelance&lt;/cite&gt;&amp;nbsp;», le deuxième terme impliquait d'être un commercial. Un très bon commercial. Et là, je dois avouer que je n'ai pas su.
&lt;/p&gt;

&lt;p&gt;
 La difficulté à obtenir certains marchés parce que je ne suis pas un commercial, le comportement prédateur de certains “clients” parce qu'ils vous voient comme une variable d'ajustement à leurs mauvais calculs, les gestions de projets catastrophiques sur lesquels vous êtes appelé en pompier quand y'a plus grand-chose à sauver.
&lt;br /&gt;
Tous ces problèmes furent plus fort que les très beaux projets réalisés comme la construction de &lt;a href=&quot;http://dagence.pro&quot;&gt;dAgence&lt;/a&gt;, la collaboration avec &lt;a href=&quot;http://phonitive.com&quot;&gt;Phonitive&lt;/a&gt; et bien d'autres encore…
&lt;/p&gt;


&lt;p&gt;
Non, dAgence n'est pas abandonné. Il tourne, il y a des clients dessus, l'infrastructure est solide, et j'ai des plans d'améliorations. Donc ce travail n'est pas perdu. Il m'a permis d'expérimenter les WebForms2 dès 2007, les PDO, les surcharges, le MVC, les tests, l'extensibilité, les délégations de responsabilité sécurité, le SVG, les API, et d'autres avancées “HTML5” comme le mode strict, CSS3, etc…
&lt;br /&gt;
Je ne peux que remercier mes partenaires, notamment Nicolas Guilhou et Kairn car ce projet est un très beau bébé.
&lt;/p&gt;


&lt;p&gt;
Mais tout n'est pas perdu : Mon expérience sur plusieurs projets de web applications, dans différentes tailles et structures, semble séduire. Mon carnet d'adresse, et mes différente expériences, permettent d'imaginer des solutions différentes à des problématiques.
&lt;/p&gt;

&lt;h3&gt;Tartine beurrée + sol ⇒ —&lt;/h3&gt;

&lt;p&gt;
Évidemment, je souffre du syndrome Facebook. Suffit que mettre sur Facebook que vous êtes en couple pour que les filles gravitent autour de vous. Ben dans mon cas, depuis que j'ai annoncé à certains que j'entre dans une boîte, j'ai des offres d'emplois qui se réveillent. Des grosses agences Parisiennes ou Berlinoises, une de brillantes startups toulousaines qui vous disent ouvertement qu'il n'ont pas su vous appeler assez vite, et là, tout récemment, un superbe &lt;i&gt;London calling&lt;/i&gt;.
&lt;/p&gt;

&lt;p&gt;
Mais j'ai foi dans le projet Simtie. C'est un “classique” mais il y a réellement la volonté de le faire sous un angle moderne et neuf.
&lt;/p&gt;
&lt;p&gt;
Et puis surtout, je reste un allumé exigeant, et complètement frappé. Et je ne suis pas sûr qu'au bout de 4 mois, même si je suis accompagné d&quot;'un ex-collègue d'Index Multimédia, mes coworkers imaginent jusqu'où je suis capable d'aller en exigence technique. 
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>No comment</title>
		<link>https://dascritch.net/post/2012/08/22/No-comment</link>
		<guid isPermaLink="false">urn:md5:ff3cc4a0910e011dc158d672e8b53d84</guid>
		<dc:date>2012-08-22T14:59:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>/** et on ne peut pas s'en passer **/		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;/** et on ne peut pas s'en passer **/&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;!-- BRAVO ! Vous avez trouvé la hiddène palace ! --&gt;
&lt;p&gt;
En milieu d'été, &lt;a href=&quot;http://www.linkedin.com/in/antoinevernois&quot;&gt;&lt;strong&gt;Antoine Vernois&lt;/strong&gt;&lt;/a&gt; a publié un superbe article sur l'usage du commentaire dans le code : &lt;a href=&quot;http://blog.crafting-labs.fr/?post/2012/08/06/Mythe-%3A-un-code-de-qualit%C3%A9-est-largement-comment%C3%A9&quot;&gt;«&amp;nbsp;&lt;strong&gt;Mythe&amp;nbsp;: un code de qualité est largement commenté&lt;/strong&gt;&amp;nbsp;»&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Et il avait tout à fait raison.
&lt;/p&gt;
&lt;!-- Surtout quand il fourni l'alcool --&gt;
&lt;p&gt;
Néanmoins, il manquait quelques éléments.&lt;br /&gt;
Dans le code source Unix originel, un commentaire a fait longtemps beaucoup glosé de lui, plus que du code qui l'entoure&amp;nbsp;: 
&lt;blockquote&gt;
&lt;a href=&quot;http://cm.bell-labs.com/who/dmr/odd.html&quot; hreflang=&quot;en&quot; title=&quot;Odd Comments and Strange Doings in Unix&quot;&gt;/* &lt;span class=&quot;aide&quot; title=&quot;Vous n'êtes pas supposé comprendre ce que je fais là.&quot;&gt;You are not expected to understand this&lt;/span&gt; */&lt;/a&gt;
&lt;/blockquote&gt;
&lt;!-- Unix version 5 --&gt;
&lt;p&gt;
La raison est historique, vestigiale, même&amp;nbsp;: Le code en question date de 1975, intervient sur un élément relativement bas niveau, et à l'époque, on ne faisait pas de tests unitaire. Donc c'était à la fois une remarque pour dire que c'était un peu inutile de tenter à toucher ceci, surtout qu'il s'agissait d'un patch pour contrer un bug système.
&lt;/p&gt;
&lt;p&gt;
Mais à cette époque, Unix tournait que sur d'immenses machines. Et il était possible d'en consulter le code source, contre une somme assez conséquente à verser aux Bell Labs. Vous imaginez la frustration des gens, non pas devant le côté frustre du patch en question, mais surtout devant ce commentaire qui a été vu à tord comme hautain.
&lt;/p&gt;


&lt;p&gt;
Exemple récent dans un de mes javascripts :
&lt;/p&gt;
&lt;!-- C'est pas exactement ce coded source, c'est juste un exemple --&gt;
&lt;blockquote&gt;&lt;pre&gt;
for(var i= 1 ; i&amp;lt;4 ; i++,c+='-')
{
	// ça c'est uniquement pour que Closure perde pas les pédales
}
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;a href=&quot;http://closure-compiler.appspot.com/&quot;&gt;Le compilateur Google Closure&lt;/a&gt; va supprimer le commentaire, et le bloc accolade qui est en fait inutile. Seulement, si je reviens deux ans après dessus, je me serais posé la question pourquoi je n'ai pas écrit beaucoup plus simplement &lt;code&gt;for(var i= 1 ; i&amp;lt;4 ; i++,c+='-');&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
Ce type de commentaire est là pour que quand je revienne des heures, jours, mois, années après, je comprenne pourquoi j'ai commis une telle aberration.&lt;br /&gt;
La réponse ne sera jamais de faire long, prolixe, verbeux, pompeux. Elle m'économisera de nombreuses minutes.
&lt;/p&gt;
&lt;!-- qui font refroidir le café, lequel était la raison de vos 5 minutes d'absence --&gt;
&lt;p&gt;
Mais si seulement il y avait que ça...
&lt;/p&gt;

&lt;h3&gt;Là où manquent les commentaires&lt;/h3&gt;

&lt;p&gt;
Parce que les projets devenaient immenses et qu'on avait de multiples intervenant autour d'un code source, on vit se populariser dans les années 1980s &lt;a href=&quot;http://c2.com/cgi/wiki?SelfDocumentingCode&quot;&gt;l'idée du code auto-documenté&lt;/a&gt;. L'idée était louable&amp;nbsp;: obliger à des convention  d'écritures, à une rigueur de nommage, et ceci indépendamment des langages et des frameworks utilisés.
&lt;/p&gt;
&lt;!-- En gros, cela consiste à nommer les fonctions, classes,constantes, variables, documents d'une manière explicite--&gt;
&lt;p&gt;
Hélas, l'enfer est pavé de bonnes intentions, et on a vu n'importe quoi arriver. À savoir, la suppression pure et simple de tout commentaire. J'ai vu du code pondu comme ça, et comment dire… Je me suis mis dans le cerveau de la poule qui trouve un couteau (cela n'a rien à voir &lt;a href=&quot;http://dascritch.net/post/2008/08/20/More-Sexual-Testimonies&quot;&gt;avec Clara Morgane&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
Je vous jure que sur un projet, j'ai perdu une demi-journée à cause d'un idiot qui a très mal compris le concept du code auto-documenté, et qu'il l'a appliqué d'une manière quasi intégriste.
&lt;/p&gt;

&lt;!-- gag obligé --&gt;

&lt;p class=&quot;c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1208-codesource.jpg&quot; alt=&quot;couverture des éditions francophone des deux romans de Gibson&quot; title=&quot;couverture des éditions francophone des deux romans de Gibson&quot; /&gt;
&lt;br /&gt;
«&amp;nbsp;&lt;i&gt;Code source&lt;/i&gt;&amp;nbsp;»
est la suite de
«&amp;nbsp;&lt;i&gt;Identification des schémas&lt;/i&gt;&amp;nbsp;».&lt;br /&gt;
Ce ne sont pas des manuels, mais des polars de &lt;a href=&quot;http://www.williamgibsonbooks.com&quot;&gt;William Gibson, pape cyberpunk vénéré&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Actuellement, je suis super emmerdé quand je me retrouve face à des langages descriptifs qui n'acceptent pas les commentaires.&lt;br /&gt;
Si, cela existe. Exemple&amp;nbsp;: le format JSON. À moins de space-encoder votre commentaire, point d'issue pour y mettre une information contextuelle.
&lt;/p&gt;
&lt;!-- et encore, je parle pas des commentaires en SQL ou en RegEx, dont je trouve la notation absolument absconde et lourde --&gt;
&lt;p&gt;
Ou alors les méta-données du document source, mais même les éditeurs sous Mac n'ont pas ça.
&lt;/p&gt;

&lt;p&gt;
Ça me fait penser qu'une interface “auto-documentée”, donc sans documentation, ben ça peut marcher. Néanmoins, il faut rester réaliste&amp;nbsp;: au-delà d'une certaine échelle, c'est même pas envisageable. Songez aux utilisateurs qui n'ont  &lt;i&gt;forcément&lt;/i&gt; pas le code sous-jacent en tête&amp;nbsp;: documentez toujours.
&lt;/p&gt;

&lt;h3&gt;On peut commenter pour ne rien faire avancer&lt;/h3&gt;

&lt;!-- ce chapitre pour le GAG --&gt;
&lt;p&gt;
Tiens, dans le cadre d'un travail en équipe, faut-il que vos collègues qui ne travaillent pas la mécanique comprennent vos commentaires&amp;nbsp;? Bien sûr que non&amp;nbsp;: 
&lt;/p&gt;

&lt;p class=&quot;c&quot;&gt;
(NOTE&amp;nbsp;: ce qui suit est une fiction)
&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet tw-align-center tw-hide-thread&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/dascritch&quot;&gt;&lt;s&gt;@&lt;/s&gt;&lt;b&gt;dascritch&lt;/b&gt;&lt;/a&gt; ton code, je comprends que dalle, tu fais chier&lt;/p&gt;&amp;mdash; nicolas (@xylpho) &lt;a href=&quot;https://twitter.com/xylpho/status/238252577861550080&quot; data-datetime=&quot;2012-08-22T12:33:35+00:00&quot;&gt;August 22, 2012&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=&quot;twitter-tweet tw-align-center tw-hide-thread&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/xylpho&quot;&gt;&lt;s&gt;@&lt;/s&gt;&lt;b&gt;xylpho&lt;/b&gt;&lt;/a&gt; Pourtant, c'est commenté. Tu dois pas comprendre mon niveau technique&lt;/p&gt;&amp;mdash; Xavier Mouton-Dubosc (@dascritch) &lt;a href=&quot;https://twitter.com/dascritch/status/238252676012445696&quot; data-datetime=&quot;2012-08-22T12:33:59+00:00&quot;&gt;August 22, 2012&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=&quot;twitter-tweet tw-align-center tw-hide-thread&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/dascritch&quot;&gt;&lt;s&gt;@&lt;/s&gt;&lt;b&gt;dascritch&lt;/b&gt;&lt;/a&gt; on fait surtout pas le même métier :)&lt;/p&gt;&amp;mdash; nicolas (@xylpho) &lt;a href=&quot;https://twitter.com/xylpho/status/238252792970629120&quot; data-datetime=&quot;2012-08-22T12:34:27+00:00&quot;&gt;August 22, 2012&lt;/a&gt;&lt;/blockquote&gt;

&lt;!-- bonus : .tw-hide-thread est une classe non documentée de twitter qui explique bien ce qu'elle fait. de l'auto-documentation  --&gt;

&lt;p&gt;
Grâce à ce genre de commentaires, vous gagnez l'estime muette de vos collaborateurs qui en restent admirativement coïts devant tant &lt;del&gt;d'auto-suffisance&lt;/del&gt; de sagesse. &lt;strong&gt;Les commentaires évitent les questions stupides&lt;/strong&gt;.
&lt;/p&gt;
&lt;!--  Enfin, en théorie --&gt;
&lt;p&gt;
C'est comme l'écriture d'un médecin : c'est illisible, cela entretient le mystère.
&lt;/p&gt;
&lt;!--  Vous savez qu'ils prennent des cours sur l'importance d'avoir une écriture de chat ?--&gt;

&lt;h3&gt;Ce qu'il y a dans mes commentaires&lt;/h3&gt;

&lt;!-- ah oui, mais vous les lisez, là --&gt;
&lt;p&gt;
Le commentaire ? J'en mets.&lt;br /&gt;
J'use et j'abuse de &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html&quot;&gt;JavaDoc, la notation qui permet aux IDE de comprendre ce que font vos fonctions&lt;/a&gt;. C'est un réflexe (quoique pas systématique), et il m'est bien utile.
&lt;/p&gt;
&lt;p&gt;
Souvent, mes commentaires dans le code source comportent des indications techniques, des liens vers des url de référence, vers des rapports de bugs. Il comporte aussi extrêmement souvent du code mort, même en cas de versionnage. C'est &lt;a href=&quot;http://fr.wikipedia.org/wiki/Intron&quot;&gt;un intron de l'ADN&lt;/a&gt; de mes productions, à l'importance non-dite. Voyez-y des ratures, &lt;a href=&quot;http://dascritch.net/post/2009/10/26/%5BInsert%5D-Overwrite-ta-mere&quot;&gt;du Tipp-Ex&lt;/a&gt;, des notes au crayon sur le tapuscrit d'un roman. Et des fois, il n'est pas inutile de prendre &lt;a href=&quot;http://fr.wikipedia.org/wiki/Dernier_th%C3%A9or%C3%A8me_de_Fermat#Fermat_l.27avait-il_d.C3.A9montr.C3.A9_.3F&quot;&gt;la place que rêvait Fermat&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Les commentaires dans un code source sont aussi utiles que les &lt;i&gt;README&lt;/i&gt; d'un tgz, les messages de commits d'un projet sous Git, un rapport de bug.
&lt;/p&gt;
&lt;!-- je suis sûr qu'Aaron a supprimé ses notes de bas de page quand Moïse lui a dicté la Genèse --&gt;

&lt;p&gt;
&lt;strong&gt;Le commentaire du code source est une enluminure&lt;/strong&gt;. Celui du code généré, une information qui n'intéressera que les mainteneurs du site.
&lt;/p&gt;
&lt;!-- Poke Marc Olanié --&gt;
&lt;p&gt;
Quoique…&lt;br /&gt;
Je viens de mettre un commentaire &lt;a href=&quot;http://dascritch.com&quot;&gt;dans mon site corporate&lt;/a&gt;. On ne sait jamais, si un curieux de la profession y jette un œil…
&lt;/p&gt;
&lt;script src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Y'a-t-il un Sud Par Sud Ouest qui s'ignore ?</title>
		<link>https://dascritch.net/post/2012/05/02/Y-a-t-il-un-Sud-Par-Sud-Ouest-qui-s-ignore</link>
		<guid isPermaLink="false">urn:md5:f27bc4f3b98df3b908c9be66ac26523a</guid>
		<dc:date>2012-05-02T09:46:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Sortons</dc:subject>
        
    <description>Viendez à Toulouse ! Venez ouvrir toutes grandes vos esgourdes et goûtez le plaisir que nous avons à exercer nos métiers.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Sortons"&gt;Sortons&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Viendez à Toulouse ! Venez ouvrir toutes grandes vos esgourdes et goûtez le plaisir que nous avons à exercer nos métiers.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Sortons"&gt;
			Sortons&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
SXSW (prononcez «&amp;nbsp;&lt;cite&gt;South By South West&lt;/cite&gt;&amp;nbsp;») est un festival incroyable qui a lieu à Austin, Texas. Les artistes et la technologie se rencontrent ensemble. Il y a donc des concerts, des performances, des projections, mais aussi des conférences techniques, des showcases technologiques. C'est un peu comme si un festival de musique s'était allié à un de cinéma indépendant et un d'art moderne plus un de salon industriel avec une part importante de bidouilleurs.&lt;br /&gt;
En fait, c'est exactement ça.
&lt;/p&gt;
&lt;p&gt;
L'impact de SXSW est énorme.&lt;br /&gt;
La chaîne musicale européenne MTV2 y installe un studio permanent. Les journalistes aussi bien musicaux que technique y accourent. Les cinéastes projettent à un public très différent des festivals comme Tribeca ou Sundance. Les musiciens jouent dans une multitude de salles et de bars et signent parfois avec des labels indies.&lt;br /&gt;
Économiquement et culturellement, Austin est un poumon important pour le Texas, et la ville doit énormément à ce festival établi depuis maintenant 25 ans.
&lt;/p&gt;
&lt;p&gt;
C'est exactement l'événement qui nous fait &lt;i&gt;kiffer&lt;/i&gt;, et qui donne envie de créer, d'innover, de construire et de rencontrer.
&lt;/p&gt;
&lt;p&gt;
Ça me manque de n'avoir pas un tel foisonnement pluridisciplinaire en France.
&lt;/p&gt;
&lt;h3&gt;Pourtant&lt;/h3&gt;
&lt;p&gt;
C'est exactement ce qui pourrait arriver à la fin de ce mois&amp;nbsp;: 
&lt;/p&gt;
&lt;p&gt;
Le même week-end à Toulouse a lieue la seconde édition de &lt;a href=&quot;http://sudweb.fr&quot;&gt;&lt;strong&gt;Sud Web&lt;/strong&gt;&lt;/a&gt; et la troisième du &lt;a href=&quot;http://thsf.tetalab.org/&quot;&gt;&lt;strong&gt;Toulouse Hacker Space Factory (THSF)&lt;/strong&gt;&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Or vous savez qu'on a couvert avec beaucoup de passion et de bonheur &lt;a href=&quot;http://dascritch.net/post/2011/05/29/Le-THSF-2011-en-photos&quot;&gt;l'édition précédente du THSF&lt;/a&gt;, et que je suis très heureux de me retrouver &lt;a href=&quot;http://dascritch.net/post/2012/03/13/Me-voici-%C3%A0-Sud-Web&quot;&gt;orateur à cette édition de Sud Web&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
En fait, ça serait vraiment dommage que vous ne participiez qu'à un seul événement. Faites coup double&amp;nbsp;! Avec un peu de chance, nous aurons très beau temps, et vous rencontrerez des gens formidables et stimulants.
&lt;/p&gt;
&lt;h3&gt;Vendredi 25 et Samedi 26 : Sud Web&lt;/h3&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a href=&quot;http://sudweb.fr&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/sortons/1205-SudWeb-jYserais.png&quot; alt=&quot;1205-SudWeb-jYserais.png&quot; title=&quot;1205-SudWeb-jYserais.png, mai 2012&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Où des orateurs parlent de cas concrets en rapport avec leur profession. C'est extrêmement intéressant car on ne parle pas de théories, mais de réels retours d'expériences. Et donc les avancées telles que le html5, les méthodes agiles, l'accessibilité voient leurs objectifs confrontés au quotidien. Sans langue de bois.
&lt;/p&gt;
&lt;p&gt;
Ruez-vous pour vos places : il n'en reste pas beaucoup !
&lt;/p&gt;
&lt;h3&gt;Vendredi 25 à Dimanche 27 : THSF&lt;/h3&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a href=&quot;http://thsf.tetalab.org/&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/sortons/1205-THSF.jpg&quot; alt=&quot;1205-THSF.jpg&quot; title=&quot;1205-THSF.jpg, mai 2012&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Des badges sociaux zombies, des androïdes à réparer, apprendre à hacker des caméras ou se créer un réseau WiFi mesh, transformer une Kinect pour jouer sur un grand mur, voir des concerts ou les musiciens jouent avec les éthers… Ouvert pour adultes et aussi pour enfants.
&lt;/p&gt;
&lt;h3&gt;Lundi 28&lt;/h3&gt;
&lt;p&gt;
Sera férié, et c'est encore l'occasion de discuter. Pour ceux qui n'auront rien à démonter dans l'immédiat ni un besoin impérieux de prendre un train, ça sera l'occasion de prolonger les rencontres par des boustifailles improvisées dans les jardins. &lt;a href=&quot;http://weworkintoulouse.net/groups/5&quot;&gt;Au hasard... qui sait&amp;nbsp;?&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Il y a donc un week-end formidable à la fin de ce mois de Mai&lt;/h3&gt;
&lt;p&gt;
Si justement vous cherchez votre voie, un job ou un partenaire, vous aurez bien plus de chance de trouver avec bonne humeur sous un riant soleil, qu'en poireautant sous de tristes néons. Plaisir d'apprendre, d'expérimenter et de rencontrer. SudWeb et THSF sont deux opportunités de relance d'activité.
&lt;/p&gt;
&lt;p&gt;
Et ça, je le pense sincèrement.
&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;
PS : Je crois que je n'ai jamais mis autant de mots-clés sur un billet. Mais difficile d'en retirer un seul ;)
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Me voici à Sud Web</title>
		<link>https://dascritch.net/post/2012/03/13/Me-voici-%C3%A0-Sud-Web</link>
		<guid isPermaLink="false">urn:md5:9bda9685c5caf9fc7e8b694f784ede73</guid>
		<dc:date>2012-03-13T13:47:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Sortons</dc:subject>
        
    <description>Et bang ! J'ai encore du mal à y croire. Mais fin Mai, je devrais aussi assurer le show.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Sortons"&gt;Sortons&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Et bang ! J'ai encore du mal à y croire. Mais fin Mai, je devrais aussi assurer le show.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Sortons"&gt;
			Sortons&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p class=&quot;c&quot;&gt;
&lt;a href=&quot;http://sudweb.fr&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1203-SudWeb.png&quot; alt=&quot;1203-SudWeb.png&quot; title=&quot;1203-SudWeb.png, mar. 2012&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Me voici orateur à &lt;strong&gt;&lt;a href=&quot;http://sudweb.fr&quot;&gt;Sud Web&lt;/a&gt;&lt;/strong&gt;, la plus grande conférence concernant les technologies du web au sud de Paris.&lt;br /&gt;
Un festival de rock stars du web jouant de vertigineux solos de normes, standards et bonnes pratiques , un &lt;a href=&quot;http://www.w3.org/participate/eventscal.html#otherevents&quot;&gt;événement officiellement soutenue par le W3C&lt;/a&gt;, un &lt;i&gt;comedy-club&lt;/i&gt; de geeks ponctuées de blagues en &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;regex&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
C'est Vendredi 25 et Samedi 26 Mai, et vaut mieux &lt;a href=&quot;http://sudweb.fr/2012/inscription/&quot;&gt;s'inscrire à l'avance&lt;/a&gt; vu le &lt;a href=&quot;http://sudweb.fr/2012/programme/&quot;&gt;&lt;i&gt;line-up&lt;/i&gt; de folie pour ce festival technique&lt;/a&gt;.
&lt;/p&gt;

&lt;h3&gt;C'est pas mes sujets qui manquent&lt;/h3&gt;
&lt;p&gt;
Parmi la multitude de &lt;a href=&quot;https://dascritch.net/category/Webdev&quot;&gt;sujets que j'aborde&lt;/a&gt; régulièrement, j'aurais pu proposer &lt;a href=&quot;http://dascritch.net/post/2012/02/21/Validations-complexes-de-HTML5-farcies-au-Javascript&quot;&gt;les trous dans la gestion de formulaire dans l'API&lt;/a&gt; de ce que l'on appelle abusivement le HTML5, &lt;a href=&quot;http://dascritch.net/post/2012/01/24/Pour-une-compression-mieux-g%C3%A9r%C3%A9e&quot;&gt;les évolutions des compressions lousy&lt;/a&gt; de formats d'images/son/vidéos, le &lt;a href=&quot;http://dascritch.net/post/2011/10/04/jQuery-pour-SVG-%3A-How-To-ins%C3%A9rer-un-%C3%A9l%C3%A9ment&quot;&gt;bricolage d'un framework javascript pour braficoter du SVG&lt;/a&gt;, &lt;a href=&quot;http://dascritch.net/post/2012/02/14/Il-pulse-des-c%C5%93urs&quot;&gt;sucrer un site&lt;/a&gt; donne-t-il le diabète, le &lt;a href=&quot;http://dascritch.net/post/2011/09/15/SSL-est-elle&quot;&gt;théâtre de la sécurité qu'est devenu la certification SSL&lt;/a&gt; malheureusement à la base du HTTPS, pourquoi un &lt;a href=&quot;http://dascritch.net/post/2011/08/09/Quand-un-pro-a-cru-descendre-Dotclear%E2%80%A6&quot;&gt;moteur de blog n'est pas une panacée ni l'avis d'un SEO&lt;/a&gt;, comment &lt;a href=&quot;http://dascritch.net/post/2011/07/22/La-Question-du-jour-du-Parisien&quot;&gt;ruiner sa réputation avec un comportement de bot sur les réseaux sociaux&lt;/a&gt;, la taille des &lt;a href=&quot;http://dascritch.net/post/2011/05/09/Les-espacements-unicodes&quot;&gt;différentes espaces en Unicode&lt;/a&gt; …
&lt;/p&gt;

&lt;p&gt;
Finalement, j'en ai ressorti 3.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://dascritch.net/post/2008/10/23/Les-dix-ans-dun-bug&quot;&gt;Mon vieux problème de tables&lt;/a&gt; HTML4 au support incomplet toujours d'actualité, et &lt;a href=&quot;http://tables.dagence.pro/&quot;&gt;qu'on complète dans un coin&lt;/a&gt;, un dossier sur &lt;a href=&quot;http://dascritch.net/post/2012/03/06/Des-emojis-dans-l-Unicode-1&quot;&gt;les &lt;i&gt;emoji&lt;/i&gt; en cours de publication&lt;/a&gt; qui a mûri pendant 10 ans.
&lt;/p&gt;
&lt;p&gt;
C'est finalement &lt;a href=&quot;http://dascritch.net/post/2011/08/16/Testez-vos-connaissances-de-d%C3%A9veloppeur&quot;&gt;ma gueulante sur les tests de recrutement&lt;/a&gt; qui a été retenu.
&lt;/p&gt;
&lt;h3&gt;Mauvaise foi ?&lt;/h3&gt;
&lt;p&gt;
Car j'y jouais le rôle de la personne qui se présente avec un niveau convenable pour un poste, mais qui tombe sur des tests totalement aberrants, datant d'une autre ère. Sauf que je n'ai pas tenu ma langue dans ma poche.
&lt;/p&gt;
&lt;p&gt;
Cette expérience hallucinante, je l'ai vécue plus d'une fois en moins d'un an. J'en ai donc parlé sur mon blog, et pas avec des pincettes.
&lt;/p&gt;
&lt;p&gt;
Avec un retour incroyable : celui d'&lt;a href=&quot;http://dascritch.net/post/2011/08/16/Testez-vos-connaissances-de-d%C3%A9veloppeur#c3734&quot;&gt;un cabinet de recrutement et pas des moindres, Expectra qui fait amende honorable&lt;/a&gt;&amp;nbsp;! Au point que ce groupe s'est engagé dans une refonte de ses tests, et que ma participation a été demandée.
&lt;/p&gt;


&lt;p&gt;
En fait, le plus difficile a été d'expliquer aux organisateurs de Sud Web que je ne souhaite surtout pas parler d'une technologie en particulier. La plupart des tests que j'ai passé concernaient PHP, une technologie &lt;i&gt;server-side&lt;/i&gt;, mais qui ne constitue pas l'exclusivité du web&amp;nbsp;:  en langage de génération de page existe aussi Perl, ASP, Java, Ruby, NodeJS,… sans oublier les bases de données (MySQL, PgSQL, MSSQL, Oracle, NoSQL), l'administration serveur, l'encodage des données, la conformation et bien évidemment les technologies client-side comme CSS, javascript et HTML.
&lt;/p&gt;
&lt;p&gt;
Je souhaite réellement passer au-delà d'un quelconque troll sur une technologie, et parler purement de la distance entre ces tests théoriques et le domaine réels qu'ils sont censés quantifier.
&lt;/p&gt;
&lt;h3&gt;Refaire le monde&lt;/h3&gt;
&lt;p&gt;
Le fait que ce sujet soit pris pour un &lt;i&gt;lighting talk&lt;/i&gt; suivi d'un atelier est une opportunité unique&amp;nbsp;: celle d'un débat de groupe sur l'évolution que l'on peut donner à ces tests, de méthodes de recrutement différents. Mais surtout, de ce que ces tests dévoilent sur l'organisation interne de l'entreprise recrutrice.
&lt;/p&gt;
&lt;p&gt;
Sud Web me propose donc d'animer le Samedi une rencontre qui permettra de croiser le regard des recruteurs et des postulants sur des méthodes qui évoluent beaucoup trop lentement en regard des changements techniques incessants que nous voyons dans notre profession. Et aussi de la difficulté de conduire une campagne de recrutement et un deuxième tri (après celui du CV) sur des critères objectifs, à des coûts raisonnables et quantifiables pour des directions non-techniques (au hasard, les ressources humaines).
&lt;/p&gt;



&lt;h3&gt;Bonus de fin de stage&lt;/h3&gt;
&lt;p&gt;
Sachez que si vous venez à Toulouse, profitez pour y rester aussi le Dimanche, car ce même week-end aura lieu &lt;a href=&quot;http://thsf.tetalab.org/&quot;&gt;l'excellent THSF, organisé par le hackerspace Tetalab&lt;/a&gt;. J'en reparle cette semaine.
&lt;/p&gt;
&lt;h3&gt;Note de service&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://dascritch.net/post/2012/03/06/Des-emojis-dans-l-Unicode-1&quot;&gt;La suite de la série sur les &lt;i&gt;emoji&lt;/i&gt;&lt;/a&gt; est fort opportunément reportée à la semaine prochaine.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Validations complexes de HTML5 farcies au Javascript</title>
		<link>https://dascritch.net/post/2012/02/21/Validations-complexes-de-HTML5-farcies-au-Javascript</link>
		<guid isPermaLink="false">urn:md5:380f5b6635bfdcf26c5f22405546a220</guid>
		<dc:date>2012-02-21T09:23:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Aujourd'hui, notre billet culinaire va vous montrer un trou de définition des standards dans la gestion interactive d'erreurs. Retour d'expérience chez un client.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Aujourd'hui, notre billet culinaire va vous montrer un trou de définition des standards dans la gestion interactive d'erreurs. Retour d'expérience chez un client.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p class=&quot;masquee&quot; id=&quot;avertissement_m&quot;&gt;&lt;span  class=&quot;masqueur never&quot; id=&quot;avertissement&quot;&gt;&lt;/span&gt;&lt;strong&gt;Attention : &lt;a href=&quot;http://dascritch.net/post/2012/02/21/Validations-complexes-de-HTML5-farcies-au-Javascript&quot;&gt;Il est recommandé de lire ce billet sur sa page originale pour profiter des exemples&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Notice for non-french-speaking readers&lt;/strong&gt;&amp;nbsp;: This page was written &lt;a href=&quot;https://dascritch.net/post/2012/02/21/Validations-complexes-de-HTML5-farcies-au-Javascript#messageinabottle&quot;&gt;after some messages&lt;/a&gt;. The pratical example of this miss &lt;a href=&quot;https://dascritch.net/post/2012/02/21/Validations-complexes-de-HTML5-farcies-au-Javascript#demo_perso&quot;&gt;is here&lt;/a&gt;, and &lt;a href=&quot;http://jsfiddle.net/bz88V/&quot;&gt;a jsfiddle hosted example is documented in both languages&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Parmi les nombreuses et bienvenues nouveautés introduites par le HTML5, nombres d'entre elles concernent les formulaires. Je les testais depuis 2007 &lt;a href=&quot;http://code.google.com/p/webforms2/&quot;&gt;grâce à la bibliothèque WebForms2&lt;/a&gt;, aujourd'hui défunte.
&lt;/p&gt;
&lt;p&gt;
Les nouveautés les plus intéressantes pour les concepteurs d'interfaces complexes concernent les contraintes de champs. Exemple, on peut décider qu'un champ &lt;code&gt;&amp;lt;input /&amp;gt;&lt;/code&gt; doit être obligatoirement rempli par l'attribut &lt;code&gt;required&lt;/code&gt;, et que le type de données est une adresse e-mail avec &lt;code&gt;type=&quot;email&quot;&lt;/code&gt;. Cela donne ceci&amp;nbsp;:
&lt;/p&gt;
&lt;form&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;input type=&quot;email&quot; required=&quot;required&quot; /&gt;
&lt;button type=&quot;submit&quot;&gt;Valider&lt;/button&gt;
&lt;/p&gt;
&lt;/form&gt;
&lt;p&gt;
Si vous tentez de valider un champ vide avec un navigateur récent, celui-ci va vous envoyer paître. Idem si vous le faîtes avec une valeur qui n'est pas une adresse e-mail.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Legal Disclaimer&lt;/strong&gt; : Bien évidemment, de telles possibilités ne vous dispense nullement de faire des tests de validation côté serveur. Ils sont pratiques car ils permettent d'éviter une étape de rafraîchissement d'écran, ce qui dans certains formulaires complexes, n'est franchement pas désirable.
&lt;/p&gt;
&lt;h3&gt;Avantages en images&lt;/h3&gt;

&lt;p&gt;
L'autre avantage est de standardiser le dialogue avec l'utilisateur sur les erreurs de saisies. Dans le sens que, selon le type de navigateur que vous utilisez, un message interactif apparaît. Sur les navigateurs conventionnels, vous aurez souvent une infobulle, mais le mécanisme peut être différent pour un téléphone portable, ou pour une tablette braille.
&lt;/p&gt;
&lt;p&gt;
Pour les &lt;del&gt;connards&lt;/del&gt; ignares qui se demandent pourquoi on en fait tant pour les handicapés, je leur rappelle qu'ils utilisent tous les jours une technologie assistive originellement prévue pour eux&amp;nbsp;: la télécommande de télévision.&lt;br /&gt;
Une autre raison de toujours utiliser les fonctions au plus proche du navigateur sans trop les modifier, c'est tout simplement l'évolutivité. Qui peut prédire ce que les versions à vernir de votre navigateur, voire un simple plugin pourra faire&amp;nbsp;? Une assistance de validation étape par étape&amp;nbsp;? Ça sera vachement utile pour tous ceux qui ont dû mal à voir certaines choses…&lt;br /&gt;
Non, je ne vise aucun de mes utilisateurs en particulier.
&lt;/p&gt;
&lt;p&gt;
Allez, je suis gentil pour ceux qui ont vraiment un navigateur &lt;em&gt;Bontosaurus extinctus&lt;/em&gt;. Voici les rendus avec Firefox&amp;nbsp;10 et Chrome&amp;nbsp;17&amp;nbsp;:
&lt;/p&gt;
&lt;table class=&quot;datas&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot;&gt;Type d'erreur&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Firefox 10&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Chrome 17&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Champ vide&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1202-Formulaires-empty-Fx.jpg&quot; alt=&quot;message d'erreur&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1202-Formulaires-empty-Cr.jpg&quot; alt=&quot;message d'erreur&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Valeur non e-mail&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1202-Formulaires-notemail-Fx.jpg&quot; alt=&quot;message d'erreur&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1202-Formulaires-notemail-Cr.jpg&quot; alt=&quot;message d'erreur&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Le message disparaît en cas de clic ou de changement de valeur, et le liseré rouge dans Firefox quand la valeur est correcte.
&lt;/p&gt;
&lt;p&gt;
Pour en savoir plus, il se trouve que la semaine dernière, &lt;a href=&quot;http://www.alsacreations.com/tuto/lire/1370-formulaire-html5-placeholder-required-pattern.html&quot;&gt;Geoffrey Crofte me fait de l'ombre sur le blog de l'officine Alsacréations en publiant un billet sur le sujet&lt;/a&gt;. Eh oui, c'est les élections pour &lt;a href=&quot;http://sudweb.fr&quot;&gt;Sud&amp;nbsp;Web&lt;/a&gt;, tous les coups-bas sont permis.
&lt;/p&gt;
&lt;h3 id=&quot;demo_perso&quot;&gt;Maintenant, on y va dans les messages persos&lt;/h3&gt;
&lt;p&gt;
On peut connaître en Javascript soit au niveau d'un input si sa valeur est valide, soit sur l'ensemble d'un formulaire si celui-ci ne comporte que des valeurs valides. Pour ceci, on utilise la méthode &lt;code&gt;.checkValidity()&lt;/code&gt; sur soit l'input, soit le formulaire.
&lt;/p&gt;
&lt;p&gt;
Le texte du message peut être modifiable via &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;Javascript&lt;/a&gt;. Il est recommandé à cet effet d'utiliser la méthode &lt;code&gt;.setCustomValidity()&lt;/code&gt; sur l'input à impacter
&lt;/p&gt;
&lt;p&gt;
Cela est très pratique car cela permet de tester plus précisément la validation, si un typage, une plage de valeurs ou une règle &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;regex&lt;/a&gt; ne suffit pas avant de valider. Cela permet aussi de pouvoir tester les valeurs côté serveur et donc de remonter les éventuels messages d'erreurs qui demande des vérifications de cohérence en base, de collision de données, et bien d'autres. Évidemment, si la validation est confirmée, on en profite, toujours côté serveur, pour faire les opérations voulues, et on changera l'interface côté utilisateur.
&lt;/p&gt;
&lt;p&gt;
Pour ceci, je reprends le formulaire plus haut&amp;nbsp;:
&lt;/p&gt;
&lt;form id=&quot;test2&quot;&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;label&gt;Entrez une adresse e-mail du &lt;a href=&quot;http://groland.com&quot;&gt;Groland&lt;/a&gt; (.grd)&lt;br /&gt;
please enter an e-mail address with .grd TLD&lt;br /&gt;
&lt;input  id=&quot;test3&quot; type=&quot;email&quot; required=&quot;required&quot; /&gt;&lt;/label&gt;
&lt;button type=&quot;reset&quot;&gt;Effacer&lt;/button&gt;
&lt;button type=&quot;submit&quot;&gt;Valider&lt;/button&gt;
&lt;/p&gt;
&lt;/form&gt;
&lt;p&gt;
Oui, pour cet exemple je feins d'ignorer la possibilité de laisser le navigateur valider par une &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;regex&lt;/a&gt;, je vais le faire en &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;Javascript&lt;/a&gt;.
&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;
&lt;script id=&quot;demo&quot;&gt;
window.addEventListener('load',function()
{
  var ceform = document.getElementById('test2');
  var ceinput = document.getElementById('test3');
  function interactif()
  {
      // revenir au mode interactif des messages d'erreurs du navigateur
  }

  ceform.addEventListener('submit',function(e)
  {
    ceinput.setCustomValidity(''); // cavalier, mais je fais vite
    // je teste la validité du formulaire
    if (ceform.checkValidity())
    {
      // le formulaire est valide
      // on crée donc notre propre gestionnaire complémentaire de validation
      // ici, je fais simple, mais cela peut être un appel XHR, etc…
      if (!/\.grd$/.test(ceinput.value))
      {
        ceinput.setCustomValidity('Groland Telecom ne permet d\'utiliser que les adresses e-mails du Groland.');
        interactif();
        // j'annule la soumission du formulaire, puisqu'il est faux
        e.preventDefault();
      }
    }
  },false);
  ['change','click','keypress'].forEach(function(ev)
  {
    // on efface le message d'erreur sur tout événement susceptible de changer cet élément
    ceinput.addEventListener(ev,function(e)
    {
      ceinput.setCustomValidity('');
    },false);
  });
},false);
&lt;/script&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;
&lt;style&gt;
#demo { display : block ; }
&lt;/style&gt;
&lt;p&gt;
Pour ceux qui ont vraiment un navigateur d'un autre âge (ou pour les dinos des temps futurs), voici ce que c'est &lt;strong&gt;sensé&lt;/strong&gt; donner&amp;nbsp;:
&lt;/p&gt;
&lt;table class=&quot;datas&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot;&gt;Type d'erreur&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Firefox 10&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Chrome 17&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Erreur personnalisée&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1202-Formulaires-notgroland-Fx.jpg&quot; alt=&quot;message d'erreur&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1202-Formulaires-notgroland-Cr.jpg&quot; alt=&quot;message d'erreur&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Et là, il manque un truc !&lt;/h3&gt;
&lt;p&gt;
En fait, il manque la possibilité de revenir à la gestion interactive des erreurs. Le meilleur exemple, c'est que le message n'apparaît qu'en double cliquant sur le bouton de validation, et jamais sur le premier.&lt;br /&gt;
Dans mon implémentation qui m'a bloqué cette semaine, j'étais coincé sur un retour d'information après un XHR POST. Et là, pour utiliser un &lt;code&gt;.preventDefault()&lt;/code&gt;, je crois qu'on est un peu trop loin…
&lt;/p&gt;
&lt;p&gt;
Or si je ne préviens pas la suite d'exécution avec &lt;code&gt;.preventDefault()&lt;/code&gt;, l'événement “submit” est immédiatement exécutée, peut importe si le formulaire a une entrée non valide.
&lt;/p&gt;
&lt;p&gt;
J'ai tout tenté&amp;nbsp;: lancé un &lt;i&gt;trigger&lt;/i&gt;, continuer la suite des événements, cherché dans &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#dom-cva-setcustomvalidity&quot;&gt;les docs du WHAT-WG&lt;/a&gt;, la &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#statically-validate-the-constraints&quot;&gt;description événementielle par ce même groupe&lt;/a&gt;, celles du W3, les différentes &lt;i&gt;mailing-list&lt;/i&gt;.&lt;br /&gt;
Rien&lt;br /&gt;
Absolument rien ne me permet de faire revenir le navigateur en mode interactif.
&lt;/p&gt;
&lt;p&gt;
Ce n'est donc pas un défaut d'implémentation de navigateur, mais bien &lt;strong&gt;un oubli dans le standard&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
C'est dommage car pour y palier, j'ai dû créer mon propre gestionnaire d'affichage. Et quand il y a beaucoup d'éléments &lt;code&gt;&amp;lt;input&amp;nbsp;/&amp;gt;&lt;/code&gt;, ben forcément ça se bouscule et ça s'empiètre, alors que les navigateurs le faisaient très bien en mode natif…
&lt;/p&gt;
&lt;p&gt;
Donc il y a trois choses à faire&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;convaincre la communauté des développeurs de navigateurs&lt;/li&gt;
&lt;li&gt;trouver une place dans les standards&lt;/li&gt;
&lt;li&gt;l'avoir implémenté dans les navigateurs&lt;/li&gt;
&lt;/ul&gt;
Inutile de vous dire que pour l'immédiat, va falloir réinventer la roue, ce que justement est censé éviter cette section du HTML5.
&lt;/p&gt;
&lt;h3 id=&quot;messageinabottle&quot;&gt;Message in a bottle&lt;/h3&gt;
&lt;p&gt;
Ce message a été posté sur&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://groups.google.com/group/mozilla.dev.tech.dom/browse_thread/thread/f95cb797b4689890?pli=1&quot;&gt;le newsgroup mozilla.dev.tech.dom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/html5rocks/issues/detail?id=826#c0&quot;&gt;Google project html5rocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.w3.org/Bugs/Public/show_bug.cgi?id=16051&quot;&gt;bugzilla W3C&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=729023&quot;&gt;bugzilla Mozilla.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/support/forum/p/Chrome/thread?tid=75ce915a2b427837&amp;hl=en&quot;&gt;Chrome discussions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.opera.com/wizarddesktop/&quot;&gt;Opera wizard report (en attente de validation)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jsfiddle.net/bz88V/&quot;&gt;JSfiddle hosted example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Les espacements unicodes</title>
		<link>https://dascritch.net/post/2011/05/09/Les-espacements-unicodes</link>
		<guid isPermaLink="false">urn:md5:230a664a1617670bd98f2ac88149d30d</guid>
		<dc:date>2011-05-09T09:55:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Espace, frontière mal définie, mais aux multiples dimensions...		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Espace, frontière mal définie, mais aux multiples dimensions...&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p class=&quot;masquee&quot; id=&quot;avertissement_m&quot;&gt;&lt;span  class=&quot;masqueur never&quot; id=&quot;avertissement&quot;&gt;&lt;/span&gt;&lt;strong&gt;Attention : &lt;a href=&quot;http://dascritch.net/post/2011/05/09/Les-espacements-unicodes&quot;&gt;la lecture de ce billet est probablement plus aisée sur sa page originale&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;
Suite à des échanges sur Twitter avec &lt;a href=&quot;http://lasoeurkaramazov.net/&quot;&gt;Mitternacht&lt;/a&gt;, et surtout la lecture d'un article proposant une &lt;i&gt;presque&lt;/i&gt; bonne idée, je me suis proposé pour faire la liste des caractères spéciaux d'espacements disponibles en Unicode, dans l'idée d'en faire parler sur le génialissime &lt;a href=&quot;http://typographisme.net/&quot;&gt;Typographisme.net&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Tout partait d'un article qui tentait d'aller plus loin que le simple espace (que l'on note&amp;nbsp;␣ et dans les tables techniques par&amp;nbsp;␠ pour faire le gars qui s'y connaît devant les clients) et l'espace insécable à peu près connu de tous (là, vous utilisez&amp;nbsp;⍽ comme signe cabalistique qui finira de mystifier votre interlocuteur).
&lt;/p&gt;
&lt;p&gt;
Il faut dire qu'on peut avoir un besoin plus que ponctuel pour un espace spécial. Par exemple, toute ponctuation à deux-traits en Français, c'est à dire autres que le point ou la virgule, doit être précédée d'un espace, si possible insécable, à l'exception des guillemets où ils l'entourent. (Faudrait déjà que je parle comment le gérer au quotidien &lt;a href=&quot;http://dascritch.net/post/2008/10/21/Psychanalyse-du-clavier-la-premiere-consultation&quot;&gt;dans ma psychanalyse du clavier&lt;/a&gt;)&lt;br /&gt;
Vous pourriez considérer comme plus lisible d'utiliser un espace moins long d'une demi-largeur, mais au comportement insécable, c'est-à-dire n'entrainant pas un retour à la ligne.
&lt;/p&gt;
&lt;p&gt;
Le billet qui a entraîné l'écriture de celui-ci préconisait l'usage d'une balise HTML &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;stylée&lt;/a&gt;&amp;nbsp;: &lt;code&gt;&amp;lt;&lt;span class=&quot;balise&quot;&gt;span&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;param&quot;&gt;&quot;demiespace&quot;&lt;/span&gt;&amp;gt;&lt;span class=&quot;doctype&quot;&gt;&amp;amp;nbsp;&lt;/span&gt;&amp;lt;/&lt;span class=&quot;balise&quot;&gt;span&lt;/span&gt;&amp;gt;&lt;/code&gt;.&lt;br /&gt;
Un usage du HTML qui ressemble plus à une contrainte et à un usage disgracieux de la sémantique. Ni franchement à faire, ni franchement pratique pour l'utilisateur lambda (songez à un copié-collé vers un éditeur).&lt;br /&gt;
Alors que l'Unicode dispose d'une incroyable palette de caractères &lt;i&gt;ad hoc&lt;/i&gt;, parfois à l'absurde...
&lt;/p&gt;
&lt;p&gt;
Car, il y a bien une chose très importante à savoir quand on touche du &lt;a href=&quot;https://dascritch.net/tag/html&quot;&gt;HTML&lt;/a&gt; aussi bien côté programmation, côté design que côté contenu, et avant même de connaître ses balises HTML par cœur ou les subtilités entre &lt;a href=&quot;https://dascritch.net/tag/xml&quot;&gt;XHTML&lt;/a&gt; et HTML, c'est bien les caractères eux-mêmes&amp;nbsp;!
&lt;/p&gt;
&lt;p&gt;
Cela veut dire que si vos sites servent de l'Unicode (et qu'importe la variation d'encodage du &lt;i&gt;charset&lt;/i&gt;, UTF-7, UTF-8 ou UCS-2, c'est à votre choix et à vos usages, voire UTF-32, UCS-4,...), tout va bien. Si vous êtes encore en jeux de caractères ISO-Latin ou pire, en Windows-1522, aux uniques exceptions de l'espace standard et du NBSP qui eux sont présents dans tous les jeux de caractères (“&lt;i&gt;charsets&lt;/i&gt;”) 8&amp;nbsp;bits “simples”, il faudra utiliser les entités HTML (Je vais pas vous rappeler à quoi servent les entités HTML&amp;nbsp;?).&lt;/p&gt;

&lt;h3 id=&quot;aspro&quot;&gt;Hein⍽? Quoi⍽? vous avez déjà dégainé l'aspirine⍽?&lt;/h3&gt;

&lt;p&gt;Les entités HTML, c'est-à-dire la notation &lt;code&gt;&amp;amp;nbsp;&lt;/code&gt;, ne sont pas toutes reconnues, alors que le code-point numérique ou “entité décimale” ou encore &lt;a href=&quot;https://dascritch.net/tag/xml&quot;&gt;entité XML&lt;/a&gt; a plus de chances de passer&amp;nbsp;: La notation &lt;code&gt;&amp;amp;#180;&lt;/code&gt; faisant &lt;i&gt;théoriquement&lt;/i&gt; appel directement à l'index numérique de la police de caractère elle-même.&lt;br /&gt;
Malheureusement, il se trouve que ça ne marche pas partout (Opera, du moins) et absolument pas garantie en dehors d'un &lt;i&gt;charset&lt;/i&gt; Unicode.&lt;br /&gt;
Au moins, je vous aurais prévenu.
&lt;/p&gt;
&lt;p&gt;
Il est très important aussi de noter que le support des caractères, voire des entités varie fortement selon l'encodage du document, mais aussi selon le système d'exploitation (très rare, mais Ms-Win XP est toujours là), les bibliothèques logicielles (si vous devez coder une &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;regex&lt;/a&gt;, cela peut vous poser souci, ne parlons pas d'un Direct2D très vieux…), les logiciels eux-mêmes (MsIE6), les polices générales de votre OS qui ont été installées selon votre locale linguistique (principalement pour gérer une &lt;i&gt;fallback&lt;/i&gt;), ou encore la police de caractère choisie pour l'affichage.
&lt;/p&gt;
&lt;h3 id=&quot;fallbacks&quot;&gt;Fallbacks (solutions de replis)&lt;/h3&gt;
&lt;p&gt;
Dans ce dernier cas, méfiez-vous car le navigateur web peut se retrouver à afficher en lieu et place, au “hasard”&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;soit le caractère attendu, mais dans une autre police que prévue (et là, vous avez &lt;u&gt;vraiment&lt;/u&gt; de la chance, ou votre ordi a tout simplement trop de polices systèmes),&lt;/li&gt;
&lt;li&gt;soit un espace blanc plus ou moins de la bonne taille (dans le cas où vous tentez de faire afficher à MsIE un des espaces ci-dessous, ce qui N'est PAS le comportement attendu),&lt;/li&gt;
&lt;li&gt;soit le code en clair de l'entité HTML si c'est ce que vous avez utilisé (ce qui est le comportement prévu en HTML en cas d'incompréhension),&lt;/li&gt;
&lt;li&gt;soit ⬚​, le &lt;i&gt;placeholder&lt;/i&gt; indiquant un point Unicode non-affiché, donnant fort obligeamment le code point en 4 chiffres hexa dans un carré (du ㍑ quoi),&lt;/li&gt;
&lt;li&gt;soit ▯, le &lt;i&gt;placeholder&lt;/i&gt; d'un caractère inconnu​,&lt;/li&gt;
&lt;li&gt;soit �, le &lt;i&gt;placeholder&lt;/i&gt; officiel d'un caractère invalide.&lt;/li&gt;
&lt;/ul&gt;
Ce qui n'arrangera pas la lisibilité de votre texte...
&lt;/p&gt;
&lt;p&gt;
Le dernier point très important, c'est que les logiciels se réfèrent bien évidemment à &lt;a href=&quot;http://www.unicode.org/reports/tr29/&quot; hreflang=&quot;en&quot; title=&quot;Unicode Standard Annex #29 : Unicode Text Segmentation&quot;&gt;la norme Unicode concernant la segmentation de texte&lt;/a&gt; pour ensuite appliquer les séparations que sont les espaces. Il est arrivé plus d'une fois de découvrir des petites surprises en lisant ce que l'industrie a prévu (&lt;a href=&quot;http://www.unicode.org/versions/Unicode6.0.0/ch16.pdf&quot; hreflang=&quot;en&quot; title=&quot;Unicode v6.0 : Special Areas and Format Characters&quot;&gt;dans ce PDF, chapitre 16.2&lt;/a&gt;).
&lt;/p&gt;
&lt;h3 id=&quot;aveclargeurs&quot;&gt;Une table, des espaces… qui ont une largeur&lt;/h3&gt;
&lt;p&gt;
Les boutons de tests permettent de vérifier le résultat &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#test&quot;&gt;sur ce paragraphe&lt;/a&gt;.
&lt;/p&gt;
&lt;script&gt;//&lt;[CDATA[/
// Ooooooh que c'est laid ! Je déteste faire ça, des inclusions directes de style et de script. C'est pas bon les enfants, ne reproduisez jamais ça chez vous.
window.addEventListener('load', function() {
var master;$(function(){master=$('#test1').html();$('#test2').keydown(function(e){if(e.keyCode=='13'){e.preventDefault();return false;}});$('button','td').click(function(){$('#test1').text(master.replace(/\s+/g,this.value));$('#test2').text($('#test2').text().replace(/[\s\u2800\u2060\u200B\u200C\u200D\u034F\uFEFF]+/g,this.value));});});
});
//]]&gt;
&lt;/script&gt;
&lt;style&gt;
.article code .balise {color:black;font-weight:bold} .article code .doctype {color:#800000;font-weight:bold} .article code .comment {font-style: italic;color: #808080;} .article code .errxml {text-decoration: %1;color: #ff0000;} .article code .attr { color : #008000 } .article code .param {color:#a00} .article code .js {color:purple} .article code .cssnot {font-weight: bold;font-style: italic;color: black;} .article code .com {color:gray;font-weight: bold;font-style: italic;}
.post td , .post #test1 , .post #test2 {text-align:left;} .post #test1 , .post #test2 {overflow:hidden;} tr &gt; td:first-child {text-align:right;} tr &gt; td:nth-child(7) {white-space:nowrap;} tr &gt; td:first-child span {background:yellow;border:red 2px solid;}
&lt;/style&gt;
&lt;table class=&quot;datas&quot;&gt;
&lt;thead&gt;&lt;tr&gt;
&lt;th scope=&quot;col&quot;&gt;char&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Nom usuel&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;&lt;abbr title=&quot;Taille relative à un espace standard&quot;&gt;T.R.&lt;/abbr&gt;&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Entité&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Point Unicode&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Plan/Jeu&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Codage UTF-8&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Insécable&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Compatible&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#test&quot;&gt;Tests&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8193;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Em Quad&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&amp;amp;#8193;&lt;/td&gt;
&lt;td&gt;U+2001&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x81&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;EMSP est recommandé&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#8193;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8195;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;EMSP: Espace Em&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://code.google.com/p/doctype/wiki/EmspCharacterEntity&quot;&gt;&amp;amp;emsp;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;U+2003&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x83&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Tous&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;emsp;&quot;&gt;HTML&lt;/button&gt;&lt;button value=&quot;&amp;#8195;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#12288;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Espace d'idéogramme&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&amp;amp;#12288;&lt;/td&gt;
&lt;td&gt;U+3000&lt;/td&gt;&lt;td&gt;Idéogrammes &lt;abbr title=&quot;Chinois, Japonais, Coréen&quot;&gt;CJK&lt;/abbr&gt;&lt;/td&gt;
&lt;td&gt;0xE3 0x80 0x80&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;? &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot; class=&quot;aide&quot; title=&quot;Support conditionné de plus selon les locales systèmes et/ou les polices installées&quot;&gt;⚐&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot;　&quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#12288;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8199;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Espace largeur de figure&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&amp;amp;#8199;&lt;/td&gt;
&lt;td&gt;U+2007&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x87&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#8199;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#10240;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Espace braille&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&amp;amp;#10240;&lt;/td&gt;
&lt;td&gt;U+2800&lt;/td&gt;&lt;td&gt;Braille&lt;/td&gt;
&lt;td&gt;0xE2 0xA0 0x80&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;? sauf &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot;&gt;ⓐⓁ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot;⠀&quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#10240;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8192;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;En Quad&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&amp;amp;#8192;&lt;/td&gt;
&lt;td&gt;U+2000&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x80&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;ENSP est recommandé&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#8192;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8194;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;ENSP: Espace En&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://code.google.com/p/doctype/wiki/EnspCharacterEntity&quot;&gt;&amp;amp;ensp;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;U+2002&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x82&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Tous&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;ensp;&quot;&gt;HTML&lt;/button&gt;&lt;button value=&quot;&amp;#8194;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;emsp13;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Espace Tiers d'Em&lt;/td&gt;
&lt;td&gt;1⅓&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://code.google.com/p/doctype/wiki/Emsp13CharacterEntity&quot;&gt;&amp;amp;emsp13;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;U+2004&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x84&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Tous, sauf &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot; title=&quot;Safari et certains webkits&quot; class=&quot;aide&quot;&gt;ⓢⓐ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;emsp13;&quot;&gt;HTML&lt;/button&gt;&lt;button value=&quot;&amp;#8196;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8200;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Espace largeur de ponctuation&lt;/td&gt;
&lt;td&gt;1⅓&lt;/td&gt;
&lt;td&gt;&amp;amp;#8200;&lt;/td&gt;
&lt;td&gt;U+2008&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x88&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#8200;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Espace standard&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&amp;amp;#32;&lt;/td&gt;
&lt;td&gt;U+0020&lt;/td&gt;&lt;td&gt;ASCII&lt;/td&gt;
&lt;td&gt;0x20&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Tous&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#32;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;NBSP: Espace insécable&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&amp;amp;nbsp;&lt;/td&gt;
&lt;td&gt;U+00A0&lt;/td&gt;&lt;td&gt;Latin-1&lt;/td&gt;
&lt;td&gt;0xC2 0xA0&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Tous. &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot; title=&quot;Filtré par copié-collé&quot; class=&quot;aide&quot;&gt;✁&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot;&amp;nbsp;&quot;&gt;HTML&lt;/button&gt;&lt;button value=&quot;&amp;#160;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;emsp14;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Espace Quart d'Em&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://code.google.com/p/doctype/wiki/Emsp14CharacterEntity&quot;&gt;&amp;amp;emsp14;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;U+2005&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x85&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Tous, sauf &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot; title=&quot;Safari et certains webkits&quot; class=&quot;aide&quot;&gt;ⓢⓐ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;emsp14;&quot;&gt;HTML&lt;/button&gt;&lt;button value=&quot;&amp;#8197;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8198;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Espace Sixième d'Em&lt;/td&gt;
&lt;td&gt;⅔&lt;/td&gt;
&lt;td&gt;&amp;amp;#8198;&lt;/td&gt;
&lt;td&gt;U+2006&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x86&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#8198;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;thinsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Espace maigre&lt;/td&gt;
&lt;td&gt;½&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://code.google.com/p/doctype/wiki/ThinspCharacterEntity&quot;&gt;&amp;amp;thinsp;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;U+2009&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x89&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;Tous sauf &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot; title=&quot;MsIE 6&quot; class=&quot;aide&quot;&gt;†&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;thinsp;&quot;&gt;HTML&lt;/button&gt;&lt;button value=&quot;&amp;#8201;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8239;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;NNBSP: Espace maigre insécable&lt;/td&gt;
&lt;td&gt;½&lt;/td&gt;
&lt;td&gt;&amp;amp;#8239;&lt;/td&gt;
&lt;td&gt;U+202F&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x8F&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;? sauf &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot;&gt;ⓐⓁ† (eh bé google?) et Opera&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#8239;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8287;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;MMSP: Espace mathématique&lt;/td&gt;
&lt;td&gt;½&lt;/td&gt;
&lt;td&gt;&amp;amp;#8287;&lt;/td&gt;
&lt;td&gt;U+205F&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x81 0x9F&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;? sauf &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot; title=&quot;Safari et certains webkits&quot; class=&quot;aide&quot;&gt;ⓐⓁ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#8287;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8202;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Espace fin&lt;/td&gt;
&lt;td&gt;¼&lt;/td&gt;
&lt;td&gt;&amp;amp;#8202;&lt;/td&gt;
&lt;td&gt;U+200A&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x8A&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot; &quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#8202;&quot;&gt;HTML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#6158;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;MVS: Séparateur de voyelles Mongol&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;&amp;amp;#6158;&lt;/td&gt;
&lt;td&gt;U+180E&lt;/td&gt;&lt;td&gt;Mongol&lt;/td&gt;
&lt;td&gt;0xE1 0xA0 0x8E&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;? &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot; class=&quot;aide&quot; title=&quot;Support conditionné de plus selon les locales systèmes et/ou les polices installées&quot;&gt;⚐&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot;᠎&quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#6158;&quot;&gt;HTML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;


&lt;/tbody&gt;
&lt;/table&gt;


&lt;h3 id=&quot;test&quot;&gt;Texte de test&lt;/h3&gt;
&lt;p id=&quot;test1&quot;&gt;
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
&lt;/p&gt;
&lt;p  id=&quot;test2&quot; contentEditable title=&quot;cliquez pour éditer ce texte&quot;&gt;
(Allez-y, vous pouvez éditer ce paragraphe : la suite n'est que du faux-texte pour essayer les espaces)... Ah non attention, premièrement, il faut toute la splendeur du aware et je ne cherche pas ici à mettre un point ! C'est pour ça que j'ai fait des films avec des replicants. Si je t'emmerde, tu me le dis, ce n'est pas un simple sport car en vérité, la vérité, il n'y a pas de vérité et finalement tout refaire depuis le début Je ne voudrais pas rentrer dans des choses trop dimensionnelles, mais, je sais que, grâce à ma propre vérité le cycle du cosmos dans la vie... c'est une grande roue et c'est une sensation réelle qui se produit si on veut ! Et j'ai toujours grandi parmi les chiens. Et là, vraiment, j'essaie de tout coeur de donner la plus belle réponse de la terre ! Après il faut s'intégrer tout ça dans les environnements et il faut se recréer... pour recréer... a better you et c'est une sensation réelle qui se produit si on veut ! Ça respire le meuble de Provence, hein ? 
&lt;/p&gt;

&lt;h3 id=&quot;sanslargeurs&quot;&gt;La suite du tableau&lt;/h3&gt;
&lt;p&gt;
Pour votre culture générale, voici les caractères d'espacement de largeur… nulle&amp;nbsp;! Pourquoi et en quoi de telles entités pourraient vous être utiles&amp;nbsp;?
&lt;/p&gt;
&lt;p&gt;
Comme pour le &lt;a href=&quot;https://dascritch.net/tag/html&quot;&gt;HTML&lt;/a&gt;, ce n'est pas parce que la taille est nulle que la signification est quelconque&amp;nbsp;: ces caractères ont une réelle signification sémantique (en fait, j'ai surtout coupé le tableau en deux pour pouvoir lire le texte de test en essayant les espacements que vous aurez le plus de chance d'utiliser).&lt;br /&gt;
Par exemple, vous pourriez avoir à indiquer où dans un mot une césure peut se faire, c'est-à-dire entre les syllabes. Cela peut surprendre, mais oui, j'ai eu recours à ZWSP dans des cas très précis (placer par jeu un mot très très long dans un article, sans faire pêter la mise-en-forme par un dépassement de colonne). C'est là qu'on est content d'avoir été civilement présenté à ce type de “symboles”.&lt;/p&gt;
&lt;table class=&quot;datas&quot;&gt;
&lt;thead&gt;&lt;tr&gt;
&lt;th&gt;char&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Nom usuel&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;&lt;abbr title=&quot;Taille relative à un espace standard&quot;&gt;T.R.&lt;/abbr&gt;&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Entité&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Point Unicode&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Plan/Jeu&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Codage UTF-8&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Insécable&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Compatible&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#test&quot;&gt;Tests&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8288;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;WJ: Séparateur de mots&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&amp;amp;#8288;&lt;/td&gt;
&lt;td&gt;U+2060&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x81 0xA0&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;? sauf &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot;&gt;ⓐ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot;⁠&quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#8288;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#8203;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;ZWSP: Espace nul&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&amp;amp;#8203;&lt;/td&gt;
&lt;td&gt;U+200B&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x8B&lt;/td&gt;
&lt;td&gt;Non&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot;​&quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#8203;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;zwnj;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;ZWNJ: Espace nul non-joint&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&amp;amp;zwnj;&lt;/td&gt;
&lt;td&gt;U+200C&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x8C&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;? &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot; title=&quot;filtré par copié-collé&quot; class=&quot;aide&quot;&gt;✁&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot;&amp;zwnj;&quot;&gt;HTML&lt;/button&gt;&lt;button value=&quot;&amp;#8204;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;zwj;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;ZWJ: Espace nul joint&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&amp;amp;zwj;&lt;/td&gt;
&lt;td&gt;U+200D&lt;/td&gt;&lt;td&gt;Ponctuation&lt;/td&gt;
&lt;td&gt;0xE2 0x80 0x8D&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;? &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot; title=&quot;filtré par copié-collé&quot; class=&quot;aide&quot;&gt;✁&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot;&amp;zwj;&quot;&gt;HTML&lt;/button&gt;&lt;button value=&quot;&amp;#8204;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#847;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;CGJ: Combo-jointeur de graphème&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&amp;amp;#847;&lt;/td&gt;
&lt;td&gt;U+034F&lt;/td&gt;&lt;td&gt;Combinaisons diatriques&lt;/td&gt;
&lt;td&gt;0xCD 0x8F&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;? sauf &lt;a href=&quot;https://dascritch.net/post/2011/05/09/Les-espacements-unicodes#chap-tests&quot; title=&quot;filtré par copié-collé&quot; class=&quot;aide&quot;&gt;ⓐ. ✁&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot;&amp;#847;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;#65279;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;ZWNBSP: Espace nul insécable,&lt;br /&gt;BOM: Détrompeur d'encodage (mérite un billet)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&amp;amp;#65279;&lt;/td&gt;
&lt;td&gt;U+FEFF&lt;/td&gt;&lt;td&gt;Mise en forme Arabe-B,&lt;br /&gt;Zone technique&lt;/td&gt;
&lt;td&gt;0xEF 0xBB 0xBF&lt;/td&gt;
&lt;td&gt;Oui&lt;/td&gt;
&lt;td&gt;Tous mais déprécié&lt;/td&gt;
&lt;td&gt;&lt;button value=&quot;﻿&quot;&gt;char&lt;/button&gt;&lt;button value=&quot;&amp;#65279;&quot;&gt;XML&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
D'une manière assez amusante, en &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;regex&lt;/a&gt;, aucun des caractères de ce deuxième tableau n'est un espace compris par le meta &lt;code&gt;\s&lt;/code&gt;, (du moins pour mes libs)&amp;nbsp;; tout comme NBSP ce que je conçois, mais bizarrement aussi l'espace Braille en est exclu. Logique…? Néanmoins, le support Unicode dans les regex est censé apporter &lt;a href=&quot;http://www.unicode.org/reports/tr18/#Categories&quot;&gt;un jeu de propriétés étendues&lt;/a&gt;. J'avoue que j'ai eu la flemme de tester car là aussi, le support est très variable, mâme s'il s'agit d'un standard industriel.
&lt;/p&gt;

&lt;h3 id=&quot;chap-tests&quot;&gt;Tests réalisés&lt;/h3&gt;
&lt;p&gt;
J'ai conduit une batterie de tests assez limité, faute de temps. Le projet Doctype sur Google Code m'a été utile, et quelques relecteurs m'ont remonté des cas ésotériques. Pour pas trop agrandir la table, j'ai dû utiliser des symboles, désolé pour ceux qui ont une police système incomplète.  
&lt;ul&gt;
&lt;li&gt;Firefox 4.0.1 sous Linux. ✁ indique un filtrage par copié-collé ⌈&amp;nbsp;&lt;kbd&gt;^&lt;/kbd&gt;+&lt;kbd&gt;C&lt;/kbd&gt;&amp;nbsp;, &lt;kbd&gt;^&lt;/kbd&gt;+&lt;kbd&gt;V&lt;/kbd&gt;&amp;nbsp;⌋&lt;/li&gt;
&lt;li&gt;Chrome 11 sous Linux&lt;/li&gt;
&lt;li&gt;Ⓛ Links 2.3 en terminal X sous Linux&lt;/li&gt;
&lt;li&gt;ⓐ Webkit sur Android 2.2, Samsung Galaxy S&lt;/li&gt;
&lt;li&gt;ⓢ Safari 3, selon les références Google&lt;/li&gt;
&lt;li&gt;† MsIE6, selon les références Google&lt;/li&gt;
&lt;li&gt;⚐ Indique un affichage conditionné soit par la locale système, soit par les polices installées, en plus du support selon les logiciels.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;h3 id=&quot;references&quot;&gt;Références&lt;/h3&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://unicode.org&quot;&gt;Le standard de l'Unicode Consortium&lt;/a&gt;, (une partie est &lt;a href=&quot;http://www.unicode.org/fr/&quot;&gt;traduite en Français&lt;/a&gt;, pas forcément &lt;cite&gt;up-to-date&lt;/cite&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://utils.kde.org/projects/kcharselect/&quot;&gt;KCharSelect&lt;/a&gt; (outil système de &lt;a href=&quot;http://www.kde.org/&quot;&gt;l'environnement graphique KDE4&lt;/a&gt; sur Unix/Linux/*BSD),&lt;/li&gt;
&lt;li&gt;le &lt;a href=&quot;http://code.google.com/p/doctype/wiki/CharacterEntities&quot;&gt;projet Doctype&lt;/a&gt; sur Google Code,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Space_%28punctuation%29&quot;&gt;Wikipedia anglophone&lt;/a&gt;,&lt;/li&gt; 
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Le texte du paragraphe de test généré par &lt;a href=&quot;http://www.faux-texte.com/jean-claude-3.htm&quot;&gt;faux-texte.com&lt;/a&gt;. &lt;a href=&quot;http://dascritch.net/post/2006/10/04/553-loghorree-stupefiante&quot;&gt;Total respect à JCVD&lt;/a&gt;, j'ai adoré &lt;a href=&quot;http://dascritch.net/post/2007/11/06/Le-roi-des-Belges-JCVD&quot;&gt;ton film&lt;/a&gt; mais j'avais la flemme...
&lt;/p&gt;
&lt;p&gt;
Commentaires et observations fortement bienvenus.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Les sites des codeurs sont les plus mals codés</title>
		<link>https://dascritch.net/post/2011/04/15/Les-sites-des-codeurs-sont-les-plus-mals-cod%C3%A9s</link>
		<guid isPermaLink="false">urn:md5:8e79b69860d773f878d2ed9d43694452</guid>
		<dc:date>2011-04-15T13:47:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Oh mince... y'a un accroc dans mon plan.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Oh mince... y'a un accroc dans mon plan.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
&lt;a href=&quot;http://dascritch.net/post/2007/07/25/Ooops-I-switched-again&quot;&gt;Contrairement à la dernière fois&lt;/a&gt;, cela s'appelle une transition à l'arrache.
&lt;/p&gt;
&lt;p&gt;
Le serveur qui héberge mon blog est en fait co-loué avec une bande de comparses. Cela nous permet d'avoir du dédié à un prix très intéressant, et je remercie Zorel de s'occuper de la gestion administrative et technique. Zorel est aussi un fin négociateur, et il l'a obtenu un bon rabais auprès de notre salle blanche &lt;del&gt;suite à une nuit de beuv&lt;/del&gt; pour un nouveau serveur. Je pensais qu'on restait dans la même Debian avec des numéros de versions anciens (mais avec les patches idoines de sécu), et donc on est parti faire des interviewes au &lt;a href=&quot;http://tgs-ohanami.fr&quot;&gt;TGS Ohanami&lt;/a&gt; innocemment ce week-end.&lt;br /&gt;
&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1104-migrate-innocent-tgs.jpg&quot; rel=&quot;lightbox[oups]&quot; class=&quot;c&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/.1104-migrate-innocent-tgs_m.jpg&quot; alt=&quot;1104-migrate-innocent-tgs.jpg&quot; title=&quot;1104-migrate-innocent-tgs.jpg, avr. 2011&quot; /&gt;&lt;br /&gt;&lt;small&gt;Ça fait le con en costard devant un cameraman en marcel alors que le codeur aurait mieux fait de vérifier avant la version de son nouveau serveur (photo&amp;nbsp;: ©&amp;nbsp;Enflammée)&lt;/small&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Ouch, les textes ont disparus !&lt;/h3&gt;
&lt;p&gt;
Seulement, en début de semaine, il y a eu un hic au moment de changer effectivement de serveur&amp;nbsp;: on est passé à PHP version 5.3. &lt;a href=&quot;http://enflammee.net&quot;&gt;Le blog d'Enflammée&lt;/a&gt; était &lt;i&gt;clean&lt;/i&gt; (comprenez que c'était un &lt;a href=&quot;http://dotclear.net&quot;&gt;dotclear&lt;/a&gt; sans modifications) et donc est reparti sans un pet mais mon site perso s'est effondré. Il se trouve que &lt;a href=&quot;http://dascritch.net&quot;&gt;dascritch.net&lt;/a&gt; était depuis un temps certain architecturé avec un dotclear 2.0 version béta (eh oui, c'est pas bien du tout) qui a été greffé de force dans du code qui date parfois de 2001… Tant que cela marchait (et vu que mon code possédait suffisamment de blindage, remis à jour), et comme j'avais vraiment d'autres priorités (entres autres, &lt;a href=&quot;http://dagence.pro&quot;&gt;dAgence&lt;/a&gt;, écrit quasi de zéro), ça ne posait aucun problème. Et forcément, ça me pendant au nez. Le passage en &lt;a href=&quot;https://dascritch.net/tag/php&quot;&gt;PHP&lt;/a&gt; 5.3 a cassé bien des fonctions obsolètes (entres autres, &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;les fonctions regex&lt;/a&gt; &lt;code&gt;ereg&lt;/code&gt;, car oui, comme pour le &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt;, les &lt;a href=&quot;http://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex&quot;&gt;libs regex sont très différentes&lt;/a&gt;), ce qui a fait disparaitre les textes des billets (en fait, ils n'étaient plus affichés) et mis mon site en verrouillage par sécurité.
&lt;/p&gt;
&lt;p&gt;
Il était franchement temps de remettre tout ça d'équerre.
&lt;/p&gt;
&lt;p&gt;
Donc, je suis revenu au &lt;a href=&quot;http://dotclear.net&quot;&gt;Dotclear&lt;/a&gt; &lt;i&gt;vanilla&lt;/i&gt; (2.2.3), cette fois-ci intégrant les fonctions persos dans un plugin écrit dans les règles (qui reprend mes améliorations, notamment de sécurité). Ce qui permet de garder la souplesse des mises à jour, et aussi une unicité de gestion de l'aspect graphique. Mais cela m'a demandé deux jours, puisque je suis en pleine livraison entre deux clients, des demandes urgentes de devis, bref, j'ai pas franchement dormi ces deux dernières nuits.
&lt;/p&gt;
&lt;p&gt;
Du coup, plein de modifications sont apparues au grand jour… qui étaient prêtes à être déployées&amp;nbsp;! Cela faisait aussi 4 ans (eh&amp;nbsp;!) qu'en fait la version de mon blog vue à la maison n'utilisait plus la lib &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt; mootools mais jquery (pour info, la version 1.0.3, chargée le 27 Octobre 2006... je sais, j'ai honte) Une partie du code tentait de gérer MsIE 5.5 (eh oui), et disposait d'un chargeur asynchrone maison de librairies javascript. Le truc plus vraiment nécessaire. La &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;CSS&lt;/a&gt; avait aussi gagné un sacré nettoyage, pas forcément visible. Dans l'ensemble, pour moi, ça fait pas grand-chose de neuf. Pour vous, ça semblera nettement plus actuel que &lt;a href=&quot;https://dascritch.net/tag/cssr07&quot;&gt;la précédente version dite “cssr07”&lt;/a&gt;. Mais je compte néanmoins retravailler “graphiquement” mon header.
&lt;/p&gt;
&lt;h3&gt;Ça… on jette… ça… on jette…&lt;/h3&gt;
&lt;p&gt;
La colonne à droite de navigation (&lt;i&gt;sidebar&lt;/i&gt;) a aussi vécu un sacré nettoyage. Fini le double moteur de recherche (l'un envoyant les résultats Dotclear, l'autre ceux de Google). Fini aussi &lt;a href=&quot;http://dascritch.net/post/2009/01/09/Viadeo-has-been&quot;&gt;le lien vers Viadeo, je vous laisse deviner pourquoi&lt;/a&gt;. Le &lt;a href=&quot;http://dascritch.net/post/2004/11/25/76-delicious-via-rss&quot;&gt;résumé de del.icio.us&lt;/a&gt; a &lt;i&gt;provisoirement&lt;/i&gt; disparu. Il est &lt;a href=&quot;http://del.icio.us/dascritch&quot;&gt;toujours consultable sur le site d'origine&lt;/a&gt; Il risque de revenir, mais sous la forme d'une compilation mensuelle, tant que Yahoo le tue pas. Ce fut un crève-cœur car le développement de ce code m'avait permis de discuter avec &lt;a href=&quot;http://joshua.schachter.org/&quot;&gt;Joshua Schachter&lt;/a&gt;, notamment de micro-formats embarqués dans le &lt;a href=&quot;https://dascritch.net/tag/html&quot;&gt;html&lt;/a&gt; dès.... 2004&amp;nbsp;!
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://dascritch.net/post/2004/08/23/26-apres-le-vrac-les-favoris&quot;&gt;Disparue aussi ma liste de liens&lt;/a&gt;. les raisons sont multiples&amp;nbsp;: 
&lt;ul&gt;
&lt;li&gt;elle n'était plus à jour depuis que &lt;a href=&quot;http://dascritch.net/post/2004/08/23/26-apres-le-vrac-les-favoris&quot;&gt;le dernier plugin de Firefox capable d'exporter les bookmarks en format xml/XBel a disparu&lt;/a&gt;, lors de la sortie de Firefox&amp;nbsp;2.0. &lt;a href=&quot;http://dascritch.net/vrac/xbel.xml&quot;&gt;Le fichier master du site est toujours présent mais plus à jour depuis belle lurette&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;impossible de s'occuper de gérer les liens morts et tout le reste, même DMOZ n'y arrivait pas manuellement&lt;/li&gt;
&lt;li&gt;point de vue référencement, j'ai sacrément perdu en 6 mois, puisque cette rubrique me montrait comme un farmeur de liens...&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Le plan d'adressage est en cours de simplification, puisque tout le rendu est un pur MVC de Dotclear, et pas un mix immonde entre deux blocs de librairies, dont un perso vraiment trop ancien. J'avais fait disparaitre la version mobile de mon site en 2009 (ça mérite un papier, car certaines choses y sont pleinement d'actu), je compte plutôt faire un style pour les téléphones et petites tablettes. Les vieux sites archivés vont rentrer dans Dotclear, quand j'aurais un peu de temps pour ça, ce qui justifiera la disparition de la recherche Google locale. Des pages statiques virent, notamment mon CV, intégralement chez &lt;a href=&quot;http://www.linkedin.com/in/dascritch&quot;&gt;LinkedIn&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
L'aspect général du site ne bouge pas dans l'immédiat, mais ça viendra. Un premier jet concerne déjà les écrans mobiles. 
&lt;/p&gt;
&lt;p&gt;Faut dire que je veux vous éviter le traumatisme de la perte de l'ancien style. Vous vous souveniez du look de mon blog entre 2003 et 2007&amp;nbsp;?
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/707-csscolumns-1.png&quot; rel=&quot;lightbox[oups]&quot; title=&quot;dascritch.net en 2006&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/.707-csscolumns-1_m.jpg&quot;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Moralité : &lt;a href=&quot;https://dascritch.net/post/2011/04/15/Les-sites-des-codeurs-sont-les-plus-mals-cod%C3%A9s#&quot;&gt;lire le titre&lt;/a&gt;.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Badges</title>
		<link>https://dascritch.net/post/2011/01/19/Badges</link>
		<guid isPermaLink="false">urn:md5:d77fb749359104352f3ec2132a337968</guid>
		<dc:date>2011-01-19T20:23:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Je n'ai pas fait mon service militaire, donc ça ne peut que me rappeler mes années boy-scout, mais voici mes décorations HTML5 certifiées norme W3C.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Je n'ai pas fait mon service militaire, donc ça ne peut que me rappeler mes années boy-scout, mais voici mes décorations HTML5 certifiées norme W3C.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p class=&quot;c&quot;&gt;
&lt;img src=&quot;http://dascritch.net/vrac/.blog2/webdev/1101-html5logo.jpg&quot; alt=&quot;Glorieux HTML5&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
HTML5 est le mot hyper-hype en ce moment. Faut dire qu'on oublie qu'en plus de la sémantique &lt;a href=&quot;https://dascritch.net/blog.php/tag/html&quot;&gt;HTML&lt;/a&gt;, il intègre aussi &lt;a href=&quot;https://dascritch.net/blog.php/tag/css&quot;&gt;CSS3&lt;/a&gt;, &lt;a href=&quot;https://dascritch.net/blog.php/tag/javascript&quot;&gt;ECMA script 5&lt;/a&gt;, &lt;a href=&quot;https://dascritch.net/tag/dom&quot;&gt;DOM level 3&lt;/a&gt; &lt;a href=&quot;https://dascritch.net/tag/xml&quot;&gt;SVG&lt;/a&gt;, &lt;a href=&quot;https://dascritch.net/tag/rss&quot;&gt;les micro-formats&lt;/a&gt;, etc... Et, il est important de le noter, on ne parle que des technologies côté navigateur (clients), pour les serveurs webs, je parle d'autres langues (&lt;a href=&quot;https://dascritch.net/tag/apache&quot;&gt;Apache&lt;/a&gt;, &lt;a href=&quot;https://dascritch.net/tag/php&quot;&gt;PHP&lt;/a&gt;, Bash, &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;expressions régulières&lt;/a&gt;, bases de données,...) .&lt;br /&gt;
Donc selon la classification du W3C accompagnant &lt;a href=&quot;http://www.w3.org/html/logo/&quot;&gt;le nouveau logo du HTML5&lt;/a&gt;, voici mes &lt;a href=&quot;http://dascritch.net/category/Webdev&quot;&gt;compétences supposées dans la matière&lt;/a&gt;&amp;nbsp;:
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a href=&quot;http://www.w3.org/html/logo/&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1101-html5-badge-h-css3-multimedia-performance-semantics-storage.png&quot; width=&quot;261&quot; height=&quot;64&quot; alt=&quot;HTML5 Powered with CSS3 / Styling, Multimedia, Performance &amp;amp; Integration, Semantics, and Offline &amp;amp; Storage&quot; title=&quot;HTML5 Powered with CSS3 / Styling, Multimedia, Performance &amp;amp; Integration, Semantics, and Offline &amp;amp; Storage&quot;&gt;
&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
C'est totalement partial, il y a un manque très important qui me tient à coeur (le volet sécurité client, qui il est vrai n'est pas encore standardisé) et mon niveau varie fortement selon les compétences. Je dois reconnaitre qu'une expérience récente m'a rendu particulièrement humble. &lt;a href=&quot;http://dascritch.com&quot;&gt;En plus d'être en indépendant&lt;/a&gt;, je développe &lt;a href=&quot;http://dagence.pro&quot;&gt;dAgence, une application d'hébergement (avec Nicolas Guilhou et Kairn)&lt;/a&gt; dont le &lt;i&gt;backoffice&lt;/i&gt; est conçu pour être totalement HTML5 depuis 2 ans à l'origine... 
&lt;/p&gt;
&lt;p&gt;
Pour ceux qui trouvent le logo W3C moche (des goûts, des #rrggbbaa),
ils peuvent en ricaner en faisant &lt;a href=&quot;http://graphism.fr/dj-les-parodies-du-logo-pour-le-html5&quot;&gt;d'excellentes parodies&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
Pour la petite histoire, et ce que je ne raconte pas dans &lt;a href=&quot;https://www.linkedin.com/in/dascritch&quot;&gt;mon profil LinkedIn&lt;/a&gt;, mon premier badge de boyscout, c'était “&lt;i&gt;cuisinier&lt;/i&gt;”. Là aussi, maintenant, j'ai de quoi être humble...
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Oui, PHP est lent</title>
		<link>https://dascritch.net/post/2009/06/19/Oui-PHP-est-lent</link>
		<guid isPermaLink="false">urn:md5:65983383e7d54c87f4f557ca3a9bb9fa</guid>
		<dc:date>2009-06-19T11:25:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>M'enfin, c'est quand même pas un développeur en ASPX.NET♯ qui va me contredire, non ?		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;M'enfin, c'est quand même pas un développeur en ASPX.NET♯ qui va me contredire, non ?&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
&lt;a href=&quot;https://www.blogger.com/comment.g?blogID=111658602890372617&amp;postID=3920323361677023274&quot;&gt;À ma demande&lt;/a&gt;, 
&lt;a href=&quot;http://marc-chouteau.blogspot.com/2009/06/marc-chouteau-erp-360-comment-creer-des.html&quot;&gt;Marc Chouteau a écrit :&lt;/a&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;a href=&quot;http://naspinski.net/post/AspNet-vs-php--speed-comparison.aspx&quot;&gt;A la demande générale, voici un petit troll ;)&lt;/a&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Il progresse, ce garçon, il apprend à générer un trafic conséquent via la polémique sur son blog... qui est motorisé en PHP.
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
Bon. comme promis, je te réponds :&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;http://dascritch.net/blog.php/tag/php&quot;&gt;PHP&lt;/a&gt; est intrinsèquement LENT&lt;/b&gt;.&lt;br /&gt;
Oui, car c'est un langage interprété à la base.&lt;br /&gt;
Néanmoins, il peut être précompilé au &lt;i&gt;runtime&lt;/i&gt;. Et à partir de là, précompilé de manière permanente.
&lt;/p&gt;
&lt;p&gt;
Ensuite, il a différentes astuces d'accélération. Certaines fonctions ou manières d'écrire entraîne des temps d'exécutions plus lents que d'autres. Un appel statique sera toujours plus rapide qu'une classe instanciée, mais c'est à toi de voir si tu acceptes un code spaghetti. Avoir de multiples inclusions est un facteur de ralentissement comme pour Javascript, car il est soumis aux mêmes problématiques. Certaines fonctions de débug (comme &lt;a href=&quot;http://www.firephp.org/&quot;&gt;FirePHP&lt;/a&gt;) entraînent de très forts ralentissements, ce qui fait que malgré les services inestimables de cette bilbiothèque, il vaut mieux ne jamais le laisser sur un service en live. (de toutes façons, il ne faut JAMAIS le laisser car c'est un trou potentiel de par les informations qu'il divulgue)
&lt;/p&gt;
&lt;p&gt;
Certaines bibliothèques extérieures, pourtant en binaire, peuvent ralentir sensiblement le service (comme GDlib, ou les libs OpenOffice), d'autres l'accélèrent grandement.
&lt;/p&gt;
&lt;p&gt;
Et puis surtout il y a les méthodes de programmation. L'exécution déférée, la préparation de requêtes SQL (me fait gagner en vitesse et sécurité de manière prodigieuse), voire même préférer à de trop puissantes fonctions &lt;a href=&quot;http://dascritch.net/blog.php/tag/regex&quot;&gt;regex&lt;/a&gt; leurs équivalents précompilées.
&lt;/p&gt;
&lt;p&gt;
Intrinsèquement, le PHP est lent, mais il suffit d'étudier certains aspects fondamentaux du développement d'un langage, de se plonger dans le code source et d'abandonner ses méthodes de script-kidding pour arriver à des gains monumentaux. Le simple fait d'avoir la compression gzip en sortie de flux (hint&amp;nbsp;: gratuit sur PHP, activable dans les prefs), donne une impression de rapidité non négligeable.
&lt;/p&gt;
&lt;p&gt;
Marc, comme je sais que tu abandonnes le Visual Basic™ pour tes sites web, voici un site qui est d'une lecture très utile&amp;nbsp;: &lt;a href=&quot;http://phpbench.com/&quot;&gt;http://phpbench.com/&lt;/a&gt;. Ma liste de liens n'est pas très à jour, mais elle comporte &lt;a href=&quot;http://dascritch.net/lien.php/Webediting/PHP&quot;&gt;quelques articles passionnants&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
(Et hop.... j'ai même pas besoin de publier une chronique BD aujourd'hui)
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Javascript, l'accent d'la regex</title>
		<link>https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex</link>
		<guid isPermaLink="false">urn:md5:8699857d20052c29c35e2a4511204cc3</guid>
		<dc:date>2007-09-06T11:28:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>“Javascript comme un dialecte”, acte II. Entre le professeur Louis De Funès : « mmmmh les expressions régulières, mmmmmhhh... vous allez en bouffer... mmmmmhhhh »		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;“Javascript comme un dialecte”, acte II. Entre le professeur Louis De Funès : « mmmmh les expressions régulières, mmmmmhhh... vous allez en bouffer... mmmmmhhhh »&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;style&gt;&lt;!--
code .balise {color:black;font-weight:bold}
code .attr { color : green }
code .param {color:#2F4F4F}
code .js {color:red}
--&gt;&lt;/style&gt;
&lt;p&gt;&lt;a href=&quot;http://dascritch.net/blog.php/post/2007/07/05/818-javascript-comme-un-dialecte&quot;&gt;Dans un précédent article, j'avais glosé des difficultés à écrire des javascripts au comportement cohérent&lt;/a&gt; sur l'ensemble des “principaux” navigateurs web dans la gestion des &lt;a href=&quot;https://dascritch.net/blog.php/tag/dom&quot;&gt;arbres DOM&lt;/a&gt;. Cette fois-ci, c'est un autre souci qui a été pointé cet été par Bojan Zdrnja, information qui aura sûrement échappé à la plupart des webdev... à leurs tords.&lt;br /&gt;
Relevant de nouvelles méthodes d'infecter d'innocentes machines par des virus, ce chercheur en sécurité du &lt;a href=&quot;https://www.sans.org/&quot;&gt;SANS&lt;/a&gt; a isolé un specimen de Javascript infectieux découvert par Daniel Kluge et mis sous son microscope afin de comprendre pourquoi il est si méchant. Malgré qu'il soit écrit dans un langage théoriquement “ouvert” (car interprété) et même en ayant son code source sous les yeux, il est difficile à disséquer, obfusquant son ADN source afin de protéger ses patrons maffieux. Rapidement, notre expert remarque que ce malicieux code Javascript ne peut s'exécuter que dans Internet Explorer. Pourquoi&amp;nbsp;? Ce n'est pas la grammaire, ni l'arbre DOM, ni une extension propriétaire de Microsoft qui est en cause, mais... les expressions régulières.&lt;/p&gt;
&lt;p&gt;
Pour  “simplifier”, ces expressions rationnelles correspondent aux théories de Kurt Gödel &lt;a class=&quot;up&quot; href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#nb1&quot; name=&quot;in1&quot;&gt;&lt;b&gt;[NB1]&lt;/b&gt;&lt;/a&gt;, mais &lt;a href=&quot;http://fr.wikipedia.org/wiki/Th%C3%A9orie_des_expressions_rationnelles&quot;&gt;appliqués à un alphabet&lt;/a&gt;. C'est &lt;abbr title=&quot;À mon humble avis&quot;&gt;ÀMHA&lt;/abbr&gt; la meilleure explication jamais trouvée pour pondre le code le plus imbitable pondu histoire de faire criser les collègues de l'&lt;i&gt;openspace&lt;/i&gt; &lt;a class=&quot;up&quot; href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#nb2&quot; name=&quot;in2&quot;&gt;&lt;b&gt;[NB2]&lt;/b&gt;&lt;/a&gt;. Pourtant, je m'en sers pas mal, comme on peut le voir dans &lt;a href=&quot;https://dascritch.net/lien.php/Webediting/PHP&quot;&gt;mes marques-pages, section PHP&lt;/a&gt;. La lecture d'un regex tient à la fois du bénédictin décryptage de langue morte digne de Champollion mais aussi d'une pointe de mystère religieux dans la contemplation de l'arc-en-ciel de votre éditeur à coloration syntaxique, aux motifs ressemblants à une rosace romane &lt;a class=&quot;up&quot; href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#nb3&quot; name=&quot;in3&quot;&gt;&lt;b&gt;[NB3]&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;
Objectivement, le regex est l'ultime solution thermonucléaire pour un question que vous ne vous êtes jamais posée.&lt;/p&gt;
&lt;p&gt;Pouf&amp;nbsp;! Pouf&amp;nbsp;! Je reprends...&lt;/p&gt;
&lt;h3&gt;Où le Javascript, c'est comme une Tour de Babel...&lt;/h3&gt;
&lt;p&gt;Donc, dans cette publication «&amp;nbsp;&lt;b&gt;&lt;a href=&quot;http://isc.sans.org/diary.html?storyid=3219&quot; title=&quot;Raising the bar: dynamic JavaScript obfuscation&quot;&gt;Raising the bar: dynamic JavaScript obfuscation&lt;/a&gt;&lt;/b&gt;&amp;nbsp;», Daniel Kluge et Bojan Zdrnja mettent en évidence plusieurs bugs, ou plutôt des différences comportementales dans les regex selon les navigateurs&amp;nbsp;! Le comportement peut se &lt;a href=&quot;http://handlers.sans.org/bzdrnja/test.html&quot;&gt;tester sur cette page&lt;/a&gt;. Le premier nombre de la popup d'alerte est à surveiller&amp;nbsp;: S'il indique une valeur de “&lt;code&gt;94&lt;/code&gt;”, c'est que l'interprétation de regex est correcte dans votre navigateur.
&lt;/p&gt;
&lt;p&gt;
Ainsi, &lt;b&gt;le moteur JScript de MSIE&lt;/b&gt; retourne “&lt;code&gt;98&lt;/code&gt;”, indépendamment de MSIE6 et MSIE7. Il considère qu'il peut faire précéder un nombre de plusieurs 0 sans que cela prête à conséquences...  ou presque puisque JScript peut considérer qu'un nombre précédé de zéro non significatifs est en fait une chaîne de caractères. C'est le cas dans certaines versions du langage de macro d'Excel.&lt;br /&gt;
&lt;b&gt;Safari (versions 2 et antérieures)&lt;/b&gt; retourne “&lt;code&gt;93&lt;/code&gt;”. En fait, il voit mal le commutateur «&amp;nbsp;&lt;code&gt;/g&lt;/code&gt;&amp;nbsp;», signifiant de répéter plusieurs fois l'opération. Ce qui est un bug (corrigé dans Safari 3) et qui fout potentiellement en l'air &lt;a href=&quot;http://dascritch.net/blog.php/post/2007/07/05/818-javascript-comme-un-dialecte&quot;&gt;mon soit-disant script universel déblatéré ici&lt;/a&gt;. Ce bug est propre au moteur d'Apple puisqu'aucune des versions de Konqueror que j'ai sous la main (KHTML est la base utilisée par Apple pour son WebKit) ne retourne cette valeur erronée.
&lt;/p&gt;&lt;p&gt;
Mais c'est surtout un élément très important&amp;nbsp;: Qu'un code supposé être universel peut subir des différences d'interprétation. Quelque chose à ne pas négliger quand il s'agit de “compresser/obfusquer” sa bibliothèque JS. Et une des raisons pour laquelle &lt;a href=&quot;http://dascritch.net/blog.php/post/2007/08/22/Tassons-les-Javascripts#chap-3&quot;&gt;je déconseille cette pratique&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
Contrairement à ce que l'on pourrait croire, les auteurs de ce virus jouent &lt;i&gt;intentionnellement&lt;/i&gt; sur ce bug&amp;nbsp;: La suite de leur infection ne fonctionne que sur MSIE, et les débuggueurs Javascripts travaillant plutôt avec un moteur Gecko (donc Firefox), toute personne qui tentera de comprendre leur code (pour justement le bloquer), aura encore plus de mal à le comprendre.
&lt;/p&gt;
&lt;p&gt;
Là où on ne s'en sort plus, c'est quand on se souvient que les regex furent créés à une époque où les ordinateurs avaient rarement des caractères accentués. De cette vénérable histoire, ils ont gardé l'héritage curieux de travailler parfaitement avec les 128 premières caractères de l'alphabet informatique. Et après&amp;nbsp;? Point de salut&amp;nbsp;: ISO-Latin (16 versions), MS-Dos page, Mac, et pire... Unicode (en UCS-2, UCS-4, UTF-7, UTF-8,...). Vous avez bien peu de chances d'être sûr de votre résultat... L'article Wikipédia a une &lt;a href=&quot;http://fr.wikipedia.org/wiki/Expression_rationnelle#Expressions_rationnelles_et_Unicode&quot;&gt;section qui résume bien le problème&lt;/a&gt; &lt;a class=&quot;up&quot; href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#nb4&quot; name=&quot;in4&quot;&gt;&lt;b&gt;[NB4]&lt;/b&gt;&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
L'autre souci, et non le moindre, c'est que les regex sont extrêmement pratiques, souvent utilisés dans le cas de projets compliqués (import/export de &lt;a href=&quot;https://dascritch.net/blog.php/tag/xml&quot;&gt;xml&lt;/a&gt;, analyse de texte,...) et avec une syntaxe... vague. Car de leur très longue histoire, ils ont hérités d'une généalogie très compliquée. Personne n'a jamais normalisé le langage regex, mais chacun y est allé de sa petite touche. Donc un programme, une fonction, voire une formule en regex est susceptibles de différences subtiles suivant où il tourne.&lt;br /&gt;
Tout dépend qui a fourni la bibliothèque et qui s'en sert&amp;nbsp;: TCL, Python, Perl, Grep,... Ainsi  Microsoft utilise des dialectes très différents&amp;nbsp;; sa notation dans JScript du navigateur MSIE diffère sensiblement de celle de ses serveurs ASP.NET ou de C#. Certains sites (&lt;a href=&quot;http://www.regular-expressions.info/&quot; hreflang=&quot;en&quot;&gt;comme celui-ci&lt;/a&gt;) s'emploient à proposer des codes universels. Personnellement, la plupart du temps, j'utilise l'éditeur de remplacement de &lt;a href=&quot;http://www.kde-apps.org/content/show.php?content=9901&quot;&gt;&lt;i&gt;kwrite&lt;/i&gt;&lt;/a&gt; pour écrire et tester mes regex, mais ça ne fonctionne pas toujours. Arg.
&lt;/p&gt;

&lt;h3&gt;Transition PHP ? Prépare-toi à des nervousses breakdownes&lt;/h3&gt;
&lt;p&gt;
Quand j'ai refait le design de mon site dascritch.net, comme vous le savez, j'en ai profité pour changer complètement le code (moteur blog, mais aussi &lt;a href=&quot;https://dascritch.net/vrac.php&quot;&gt;présentation de fichiers&lt;/a&gt;, &lt;a href=&quot;https://dascritch.net/lien.php&quot;&gt;de liens&lt;/a&gt;, &lt;a href=&quot;https://dascritch.net/planet.php&quot;&gt;planet&lt;/a&gt;, et le reste...) mais aussi de serveur. Et c'est ainsi que je suis passé de PHP4.3 à PHP5. Mais là... surprise&amp;nbsp;! Entre les deux versions majeures de PHP, le moteur regex a changé... subtilement.
&lt;/p&gt;
&lt;p&gt;
Ainsi, dans ma &lt;a href=&quot;https://dascritch.net/planet.php&quot;&gt;planet&lt;/a&gt;, pour classer les flux &lt;a href=&quot;https://dascritch.net/blog.php/tag/rss&quot;&gt;rss&lt;/a&gt; en fonction de la date de chaque billet, je décodais la balise date, &lt;a hreflang=&quot;en|xx-g33k&quot; title=&quot;Date and Time Formats, propositions pour le W3C sur la norme ISO 8601&quot; href=&quot;http://www.w3.org/TR/NOTE-datetime&quot;&gt;écrite dans un format très spécifique&lt;/a&gt; (l'écriture d'une date dans un document &lt;a href=&quot;https://dascritch.net/blog.php/tag/rss&quot;&gt;RSS&lt;/a&gt; mérite un billet tellement que c'est le bazar).&lt;br /&gt;
Le code (basé sur magpieRSS) se présentait ainsi :
&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;
&lt;span class=&quot;attr&quot;&gt;$regex_de_date&lt;/span&gt; = &quot;&lt;span class=&quot;param&quot;&gt;/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/&lt;/span&gt;&quot;;&lt;br /&gt;
if ( &lt;span class=&quot;js&quot;&gt;preg_match&lt;/span&gt;( $regex_de_date, $date_str, $blocules ) ) {&lt;br /&gt;
&lt;span class=&quot;js&quot;&gt;list&lt;/span&gt;( $annee, $mois, $jours, $heures, $minutes, $secondes) = 
			&lt;span class=&quot;js&quot;&gt;array&lt;/span&gt;( $blocules[1], $blocules[2], $blocules[3], $blocules[4], $blocules[5], $blocules[6]);&lt;br /&gt;
&lt;/code&gt;[...]&lt;code&gt;&lt;br /&gt;
}
&lt;/code&gt;&lt;/blockquote&gt;
&lt;p&gt;
Et ben, vous allez rire &lt;a class=&quot;up&quot; href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#nb5&quot; name=&quot;in5&quot;&gt;&lt;b&gt;[NB5]&lt;/b&gt;&lt;/a&gt;, mais entre PHP4 et PHP5, le singleton &lt;code&gt;([-+])&lt;/code&gt; &lt;a class=&quot;up&quot; href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#nb6&quot; name=&quot;in6&quot;&gt;&lt;b&gt;[NB6]&lt;/b&gt;&lt;/a&gt; est devenu “significatif”. Ce qui veut dire que dans mon tableau renvoyé par mon regex, les secondes n'étaient plus en  &lt;code&gt;$blocules[6]&lt;/code&gt; mais en &lt;code&gt;$blocules[7]&lt;/code&gt; si mon code est interprété par PHP5.
&lt;/p&gt;&lt;p&gt;
Visiblement, cela me semble être un bug d'interprétation de la bibliothèque &lt;abbr title=&quot;Perl-compatible regular expressions&quot;&gt;PCRE&lt;/abbr&gt; qui a été corrigé, mais ceux qui avaient été confrontés à lui s'étaient plus ou moins arrangé avec ce comportement irrationnel &lt;a class=&quot;up&quot; href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#nb7&quot; name=&quot;in7&quot;&gt;&lt;b&gt;[NB7]&lt;/b&gt;&lt;/a&gt;.  Et donc des milliers de scripts, de programmes, d'applicatifs, de sites métiers,... sont basés dessus et vont avoir un comportement “incohérent” lors de leur passage à une infrastructure PHP5. C'est justement pour éviter la fronde des développeurs que Microsoft a instauré la compatibilité des &lt;strike&gt;bugs&lt;/strike&gt; features comme une religion sacro-sainte. Avec fanatisme, donc avec absurdité.
&lt;/p&gt;

&lt;h3&gt;Pour en revenir avec la sale bête&lt;/h3&gt;

&lt;p&gt;Dernier élément intéressant de l'étude du SANS&amp;nbsp;: la faille exploitée par le virus réside dans la méthode d'appel d'un logiciel tiers. Un problème qui a valu à Firefox &lt;a title=&quot;Mozilla Firefox 2.0.0.6 Released&quot;  hreflang=&quot;en&quot; href=&quot;http://www.mozillazine.org/talkback.html?article=22256&quot;&gt;deux version successives (les 2.0.0.5 et 2.0.0.6)&lt;/a&gt;, en fait dû à une &lt;a hreflang=&quot;en&quot;  href=&quot;http://www.kb.cert.org/vuls/id/403150&quot; title=&quot;Vulnerability Note VU#403150 : Microsoft Windows URI protocol handling vulnerability&quot;&gt;très mauvaise habitude de Microsoft Windows dans la gestion des URI&lt;/a&gt;. Ce qui ouvre la voie à de nouvelles méthodes d'attaques par document audio ou vidéo malformé. Ce que l'on appelle du “&lt;i&gt;fuzzing&lt;/i&gt;”, c'est-à-dire qu'on fait ouvrir des documents mals foutus exprès à un logiciel pour voir s'il plante. Rien de neuf sous le soleil, Windows Media Player était déjà connu pour être sensible à ce genre d'attaques, alors que MS Word et MS Excel sont plutôt bien écrits et très très bien testés de ce côté-là. La nouveauté, c'est que la moindre de ces applications de “lecture” est potentiellement victime d'erreurs de programmations. Des petites failles où le script décrit plus haut pourrait se nicher. Ou tout simplement de très mauvaise méthodes de programmation &lt;a title=&quot;Flash Sucks&quot; hreflang=&quot;en&quot; href=&quot;http://immike.net/blog/2007/07/31/flash-sucks/&quot;&gt;comme dans le plugin Flash&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;À noter que l'équipe Firefox a justement développé &lt;a hreflang=&quot;en&quot; title=&quot;jsfunfuzz in news and blogs&quot; href=&quot;http://www.squarefree.com/2007/08/03/jsfunfuzz-in-news-and-blogs/&quot;&gt;un outil de &lt;i&gt;fuzzing&lt;/i&gt;&lt;/a&gt; pour tester la solidité de leur moteur javascript. Présenté publiquement lors du même évènement (la Black Hat Convention à Las Vegas cet été), l'outil conçu à ces fins a été mis à la libre disposition de tous... les navigateurs. Et comme bien souvent l'interprétation d'un code source en Javascript est écrit en regex...&lt;/p&gt;
&lt;h3&gt;Une horreur de slash&lt;/h3&gt;
&lt;p&gt;
Ce qui est grave, c'est que ce n'est plus une extension qui est attaquable, mais l'implémentation dans la syntaxe de base d'un autre langage supposé lui aussi être quasi-universel. Sauf que les deux erreurs pointées le sont sur des règles de base qui sont uniformes partout ailleurs, et dont l'interprétation fantaisiste étonne les rédacteurs de l'article du SANS.&lt;br /&gt;
Un tel oubli chez deux importants constructeurs de navigateur montre qu'il y a encore des choses très importantes à tester dans les moteurs Javascripts. Alors que, contrairement aux DOM, les regex sont décrits avec précision dans la norme &lt;a hreflang=&quot;en&quot; title=&quot;ECMAScript Language Specification (pdf)&quot; href=&quot;http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf&quot;&gt;ECMA 262&lt;/a&gt;. La norme dont tous les moteurs Javascripts se targuent d'être parfaitement compatibles.
&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://dascritch.net/blog.php/post/2007/07/05/818-javascript-comme-un-dialecte&quot; title=&quot;Javascript comme un dialecte&quot;&gt;Encore une pierre de plus&lt;/a&gt; dans &lt;a href=&quot;http://ejohn.org/blog/javascript-as-a-language/&quot; hreflang=&quot;en&quot; title=&quot;Javascript azs a language&quot;&gt;le jardin de John Resig&lt;/a&gt;. Pas de quoi le démonter dans son inoxydable enthousiasme sur le Javascript, puisqu'il annonce &lt;a href=&quot;http://ejohn.org/blog/the-browser-scripting-revolution/&quot;&gt;l'arrivée les nouveaux moteurs ECMAScript&lt;/a&gt;. Enfin conformes&amp;nbsp;?
&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;b&gt;Notes de bas de pages.&lt;/b&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#in1&quot; name=&quot;nb1&quot;&gt;&lt;b&gt;↑Kurt Gödel&lt;/b&gt; : &lt;/a&gt;
Malgré son patronyme, et le fait qu'Hitler aie changé la nationalité de ses compatriotes, tu noteras, chère Katell, que son nom se prononce avec une pointe d'accent Tchèque plutôt que Germanique. &lt;a href=&quot;http://dascritch.net/blog.php/post/2007/07/09/821-l-age-du-capitaine&quot;&gt;Ce que tu n'avais pas compris la première fois&lt;/a&gt;.
 &lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#in2&quot; name=&quot;nb2&quot;&gt;&lt;b&gt;↑&lt;/b&gt; : &lt;/a&gt; D'ailleurs, ce langage est tellement l33t que &lt;a href=&quot;http://www.pcre.org/pcre.txt&quot;&gt;la doc web de la lib PCRE&lt;/a&gt; est sciemment présentée comme si elle sortait sur un vieux terminal texte avec la commande &lt;code&gt;man&lt;/code&gt;. C'est vraiment du terrorisme social pour empêcher les petits jeunôts de se croire plus compétents que vous parce qu'ils sortent d'une formation quelconque... Hinhinhin...&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#in3&quot; name=&quot;nb3&quot;&gt;&lt;b&gt;↑ coloration syntaxique d'un regex&lt;/b&gt; : &lt;/a&gt;
Très honnêtement, si &lt;a href=&quot;http://www.vim.org/&quot; hreflang=&quot;en|xx-g33k&quot;&gt;&lt;i&gt;vim&lt;/i&gt;&lt;/a&gt; ne me proposait pas la coloration syntaxique, jamais j'aurais compris que le code en perl proposé dans le roman &lt;a href=&quot;http://www.cryptonomicon.com/&quot;&gt;«&amp;nbsp;&lt;i&gt;Le Cryptonomicon&lt;/i&gt;&amp;nbsp;»&lt;/a&gt; pour décoder du cryptage Enigma était erroné suite à un oubli d'un “/” dans une règle de substitution. Pour les curieux, page 227 du tome &lt;span class=&quot;serif&quot;&gt;II&lt;/span&gt;, «&amp;nbsp;&lt;i&gt;Le réseau Kinakuta&lt;/i&gt;&amp;nbsp;» de la première édition Francophone chez Payot SF.
&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#in4&quot; name=&quot;nb4&quot;&gt;&lt;b&gt;↑ référence Wikipédia&lt;/b&gt; : &lt;/a&gt; Pour ceux qui me liront plus tard, la &lt;a href=&quot;http://fr.wikipedia.org/w/index.php?title=Expression_rationnelle&amp;amp;oldid=19684798&quot;&gt;version de l'article au moment de l'écriture de ce billet&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#in5&quot; name=&quot;nb5&quot;&gt;&lt;b&gt;↑ « vous allez rire »&lt;/b&gt; : &lt;/a&gt;humour geek au 0xFE degré, forcément.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#in6&quot; name=&quot;nb6&quot;&gt;&lt;b&gt;↑ &lt;code&gt;([-+])&lt;/code&gt;&lt;/b&gt; : &lt;/a&gt; Ce bout de regex signifie qu'à cette position, il y a un caractère unique pouvant avoir la valeur “&lt;code&gt;+&lt;/code&gt;” ou “&lt;code&gt;-&lt;/code&gt;”. Et uniquement celles-ci. Si ça marche pas, la fonction regex est fausse, &lt;code&gt;preg_match()&lt;/code&gt; retourne la valeur &lt;code&gt;false&lt;/code&gt; et donc la partie suivante du script est ignorée. Ce bug me semble être lié &lt;a href=&quot;http://bugs.php.net/bug.php?id=40195&quot;&gt;à celui-ci&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2007/08/06/Javascript-laccent-d-la-regex#in7&quot; name=&quot;nb7&quot;&gt;&lt;b&gt;↑ « ceux qui [...] »&lt;/b&gt; : &lt;/a&gt;
ou plus probablement, ces développeurs perçoivent les regex comme de la sorcellerie. Ils ont chacun dû bidouiller au pif un code pioché dans un “Grand Albert” quelconque, formule magique se trouvait être fonctionnelle, et faute d'expertise, n'ont même pas relevé un comportement incohérent. Après tout, les gens qui invoquent pour eux des regex en égorgeant un coq noir par une nuit de pleine lune autour de braises de VT100 n'ont pas d'explication à donner. D'ailleurs, la syntaxe des rituels sacrés regex n'accorde aucune facilité de commentaires, qui pourraient briser l'invocation. Généralement, on évite soigneusement de provoquer leur ire par une question qu'ils pourraient trouver offensante. D'abord ça brise la magie, et ensuite si le sorcier voudou vous jette un œil noir, ça pourrait vous faire partir en sucette votre config Apache... Ugh.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Javascript comme un dialecte</title>
		<link>https://dascritch.net/post/2007/07/05/818-javascript-comme-un-dialecte</link>
		<guid isPermaLink="false">urn:md5:77a9513d929a3a9eaaad1c088000c99f</guid>
		<dc:date>2007-07-05T10:23:00+00:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Où il est question de la différence fondamentale entre le Bescherelle nouvelle édition et la collection complète des petits Littrés des langues régionales.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Où il est question de la différence fondamentale entre le Bescherelle nouvelle édition et la collection complète des petits Littrés des langues régionales.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
J'ai lu hier un article du blog de John Resig, &lt;a hreflang=&quot;en,xx-g33k&quot; href=&quot;http://ejohn.org/blog/javascript-as-a-language/&quot;&gt;«&amp;nbsp;&lt;strong&gt;Javascript as a language&lt;/strong&gt;&amp;nbsp;»&lt;/a&gt;. J'étais en plein dans des soucis de &lt;a href=&quot;http://dascritch.net/blog.php/tag/javascript&quot;&gt;code Javacript&lt;/a&gt; sur &lt;a href=&quot;http://dascritch.net/blog.php/tag/cssr07&quot;&gt;la nouvelle version de dascritch.net&lt;/a&gt;, justement...
&lt;/p&gt;
&lt;p&gt;
Alors oui, Javascript 2 amène des nouveautés alléchantes, notamment sur les boucles itératives, ou encore le &lt;abbr title=&quot;Just In Time&quot;&gt;JIT&lt;/abbr&gt; (la compilation à la volée) qui va permettre d'accélérer les applications web... mais JS2 n'est implémenté que dans Firefox...3.&lt;br /&gt;
Seulement, dans son article, John Resig ne parle que des fonctions de base de Javascript, en occultant ce qui fait (à la louche) 60% de son usage actuel&amp;nbsp;: La manipulation d'un &lt;a href=&quot;http://dascritch.net/blog.php/tag/dom&quot;&gt;arbre DOM&lt;/a&gt; d'un &lt;a href=&quot;http://dascritch.net/blog.php/tag/html&quot;&gt;document HTML&lt;/a&gt; pour le rendre “dynamique”, comme les applications AJAX (exemple ultime&amp;nbsp;: Gmail) ou les XML enrichi (Firefox, Thunderbird,... ont leur interface en XML/XUL qui est programmée en javascript). Et c'est là que le bât blesse&amp;nbsp;: là, rien n'est standard.
&lt;/p&gt;
&lt;p&gt;
En fait, il y a tellement d'interprétations différentes du Javascript d'un &lt;a href=&quot;http://dascritch.net/blog.php/tag/html&quot;&gt;arbre DOM&lt;/a&gt; qu'aujourd'hui je peux certifier ceci&amp;nbsp;: Le Javascript est une collection de dialectes comme le fut à son époque de Basic. Et Microsoft dans les deux cas n'avait pas arrangé la situation.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://ejohn.org/&quot;&gt;John Resig&lt;/a&gt; est très actif dans l'intégration de Javascript 2 dans Mozilla (Firefox) et l'auteur de la bibliothèque &lt;a href=&quot;http://jquery.com/&quot;&gt;Jquery.js&lt;/a&gt;&amp;nbsp;; il a beau être une pointure dans le domaine mais son enthousiasme ne peut nier la réalité, coder du Javascript reste un immonde foutoir. Firefox est le navigateur qui a le meilleur support Javascript et DOM, mais il est vrai que &lt;a href=&quot;http://fr.wikipedia.org/wiki/Brendan_Eich&quot;&gt;quand on a le créateur dans ses rangs&lt;/a&gt;, on peut difficilement être en-deça. &lt;br /&gt;
Safari ne peut en dire autant (quoique les bétas de la version 3 semblent enfin prometteurs), et à priori en codant dans KHTML, on est à 85% compatible à coup de sueurs froides.&lt;br /&gt;
Mais pour mettre à rude épreuve vos nerfs, MSIE est le pire de tous.
&lt;/p&gt;
&lt;p&gt;
Par exemple, soit dans votre HTML une &lt;code&gt;&amp;lt;balise title=&quot;&quot; /&amp;gt;&lt;/code&gt;, que vous associez en javascript à votre variable &lt;code&gt;balise&lt;/code&gt; . Si vous appelez &lt;code&gt;balise.title&lt;/code&gt;, vous vous attendez bien sûr que les navigateurs web répondent logiquement une chaîne de caractère vide. &lt;br /&gt;
Pourtant, si vous mettez &lt;code&gt;if (balise.title=='')&lt;/code&gt; , la conditionnelle sera fausse dans MSIE. Car cet abruti vous dira que &lt;code&gt;balise.title=='null'&lt;/code&gt;&amp;nbsp;! Au lieu de renvoyer une chaîne vide, cet incapable crée une chaîne non-vide pour dire qu'elle est vide. Résultat&amp;nbsp;: pour faire proprement votre test, il faudra ruser avec le support de MSIE d'une fonction proprio, par exemple &lt;code&gt;document.all&lt;/code&gt;&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;if ((balise.title=='')||((balise.title=='null')&amp;amp;&amp;amp;(document.all)))&lt;/code&gt;&lt;br /&gt;
Je ne veux pas persifler, mais on a quand même fait mieux comme langage de programmation pour tester si une chaine de caractère est &lt;em&gt;vide&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
Maintenant, supposons que vous voulez récupérer le texte dans &lt;code&gt;&amp;lt;balise&amp;gt;texte &amp;lt;em&amp;gt;embarqué&amp;lt;/em&amp;gt;&amp;lt;/balise&amp;gt;&lt;/code&gt; sans le balisage. Vous avez la possibilité de récupérer comme suit (cliquez pour tester)&amp;nbsp;:&lt;span style=&quot;visibility: hidden; display: none;&quot; id=&quot;demojs&quot;&gt;&lt;code&gt;texte &lt;em&gt;embarqué&lt;/em&gt;&lt;/code&gt;&lt;/span&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
balise=document.getElementById('demojs').getElementsByTagName('code')[0];
&lt;/script&gt;
&lt;table class=&quot;datas&quot;&gt;
&lt;thead&gt;&lt;tr&gt;&lt;td&gt;fonction suffixiale javascript&lt;/td&gt;&lt;td&gt;résultat escompté&lt;/td&gt;&lt;td&gt;navigateurs supportés&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;javascript:alert(balise.innerHTML);&quot;&gt;&lt;code&gt;balise.innerHTML&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&quot;texte &amp;lt;em&amp;gt;embarqué&amp;lt;/em&amp;gt;&quot;&lt;/td&gt;&lt;td&gt;Compatible chez tout le monde, mais hélas, comporte les balises HTML embarquées&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;javascript:alert(balise.innerText);&quot;&gt;&lt;code&gt;balise.innerText&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&quot;texte embarqué&quot;&lt;/td&gt;&lt;td&gt;MSIE, Konqueror, Safari, mais pas Firefox&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;javascript:alert(balise.outerHTML);&quot;&gt;&lt;code&gt;balise.outerHTML&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&quot;&amp;lt;balise&amp;gt;texte &amp;lt;em&amp;gt;embarqué&amp;lt;/em&amp;gt;&amp;lt;/balise&amp;gt;&quot;&lt;/td&gt;&lt;td&gt;Exclusivement MSIE, avec tout le balisage dont on veux pas&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;javascript:alert(balise.textContent);&quot;&gt;&lt;code&gt;balise.textContent&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&quot;texte embarqué&quot;&lt;/td&gt;&lt;td&gt;Uniquement Firefox, mais Safari 3 va enfin le comprendre&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
Donc si vous voulez faire un code “efficace” marchant “à coup sûr”, il va falloir utiliser &lt;code&gt;innerHTML&lt;/code&gt;, mais avec une regexp («&amp;nbsp;&lt;cite&gt;mmmmhhh les expressions régulières... mmmhhhh&lt;/cite&gt;&amp;nbsp;» comme dirait De Funès). Une soupe à la grimace genre ça (je garanti pas que ça marche... ah ben si, cliquez)&amp;nbsp;: &lt;a href=&quot;javascript:alert(balise.innerHTML.replace(/&lt;[^&lt;&gt;]+&gt;/g,''));&quot;&gt;&lt;code&gt;balise.innerHTML.replace(/&amp;lt;[^&amp;lt;&amp;gt;]+&amp;gt;/g,&quot;&quot;)&lt;/code&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Vous croyez en avoir fini&amp;nbsp;? Reste à trouver les versions de MSIE... car les comportements changent entre 5.5, 6, 6SP2 et 7&amp;nbsp;!&lt;br /&gt;
Si un &lt;a href=&quot;javascript:alert(document.all?true:false);&quot;&gt;&lt;code&gt;if (document.all)&lt;/code&gt;&lt;/a&gt; permet de démasquer MSIE et sa bande, le &lt;em&gt;User Agent sniffing&lt;/em&gt; ne marche pas sur des faux navigateurs (comme Avant Browser, PhaseOut ou Maxthon, &lt;a href=&quot;http://www.usenet-fr.net/fur/www/liste-browsers.html&quot;&gt;une bonne liste ici&lt;/a&gt;). Impossible d'être exactement sûr de la version du moteur MSIE utilisée sans un commentaire conditionnel, genre &lt;code&gt;&amp;lt;!--[if lt IE 7] --&amp;gt;&lt;/code&gt; niché dans le HTML, rendant illusoire l'idée de dissocier le code de la structure comme on a pu le faire avec le style.
&lt;/p&gt;
&lt;p&gt;
Pire que tout, MSIE 7 dans ses toutes premières bétas montrait des comportements très différents dans le Javascript et les manips DOM. Vous développez votre site aux petits oignons, mixant PHP5, sHTML, CSS, règles Apache, xHTML, DOM et Javascript. Votre site se charge, les Javascripts de votre page sont quasi complètement interprétées... jusqu'à ce qu'une fenêtre d'alerte arrive&amp;nbsp;: &lt;cite&gt;«&amp;nbsp;Internet Explorer ne peut afficher le site http://...&amp;nbsp;»&lt;/cite&gt;. Cliquer dessus efface votre page et mène à une page d'erreur.
&lt;/p&gt;
&lt;p&gt;
Coup de poignard dans le dos, ajoutant l'insulte à l'injure, cette page indique vaguement que MSIE n'arrive pas à contacter le site, ce qui est totalement faux. &lt;a href=&quot;http://support.microsoft.com/kb/926431/fr&quot;&gt;La réponse de la base d'information MS est risible&lt;/a&gt;.&lt;br /&gt;
Cette manie d'afficher un message bloquant (pour débugger) et mensonger (sur votre travail) a été backporté dans les MSIE6 SP2. super agréable.
&lt;/p&gt;
&lt;p&gt;
Un des exemples de comportement changeant radicalement, MSIE considère désormais que le SEUL endroit où l'on peut insérer dynamique une librairie javascript c'est dans le &amp;lt;HEAD&amp;gt; de votre HTML. C'est à la fois logique, mais pas trop. Ce souci sans aucune documentation existante m'a empêché d'avancer pendant un an,  surtout sans MS-Windows sous la main.
&lt;/p&gt;
&lt;p&gt;
Et là, j'ai encore un autre problème avec exactement les mes symptômes. Je peux délayer mes problèmes de programmation dans Dotclear2, mais que mon site ne soit pas lisible par 70% du marché alors que je cherche un emploi, ça non. Strictement impossible. Cela m'a tellement gâché la journée que je me suis passé les nerfs en ré-installant l'interphone. Si ça continue, je vais faire du ciment d'ici ce soir.
&lt;/p&gt;
&lt;p&gt;
Pour en revenir à John Resig, il a presque raison. Mais hélas, en l'absence de &lt;a href=&quot;http://www.w3.org/DOM/&quot;&gt;standard DOM parfaitement appliqué&lt;/a&gt;, tout comme le CSS2 et les extensions Microsoft, on est actuellement dans la même situation que le Basic du début des années 1980s&amp;nbsp;: la grammaire est identique pour tous, mais les mots varient suivant les dialectes.&lt;br /&gt;
Et rien que pour ça, j'en viens à regretter quand je faisais des pages WAP1.1, c'est dire&amp;nbsp;!
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Déplacer son blog</title>
		<link>https://dascritch.net/post/2005/04/24/127-deplacer-son-blog</link>
		<guid isPermaLink="false">urn:md5:5e79259da69cf39db26d3f70f57ec475</guid>
		<dc:date>2005-04-24T23:45:00+00:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Suite à mon passage à un hébergeur en coloc', comment j'ai changé l'URL de mon blog. En complément du un billet du “petit dotclear enchantier” dont le traitement est incomplet.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Suite à mon passage à un hébergeur en coloc', comment j'ai changé l'URL de mon blog. En complément du un billet du “petit dotclear enchantier” dont le traitement est incomplet.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
Merci à la talentueuse rédactrice du &lt;a hreflang=&quot;fr&quot; ritle=&quot;rediriger son blog&quot; href=&quot;http://kozlika.free.fr/dotclear-chantier/?2005/03/25/70-rediriger-son-blog&quot;&gt;“Petit Dotclear Enchantier”&lt;/a&gt; qui m'a donné la force de ce coming-out, ceci est la publication d'un mail initialement pour mes amis.
&lt;/p&gt;&lt;p&gt;
Mon problème&amp;nbsp;: faire comprendre à Google et aux utilisateurs de rss que &lt;a href=&quot;http://www.dascritch.net/blog.php/2005/01/07/81-bonne-annee-2005-joyeux-nouveau-serveur&quot; title=&quot;Bonne année 2005 ! Joyeux nouveau serveur.&quot;&gt;j'ai déplacé l'url de mon site&lt;/a&gt; de &lt;a href=&quot;http://dascritch.ath.cx&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;http://dascritch.ath.cx&lt;/code&gt;&lt;/a&gt; en &lt;a href=&quot;http://dascritch.net&quot;&gt;&lt;code&gt;http://dascritch.net&lt;/code&gt;&lt;/a&gt;, passant parla même de mon pc à côté de mon lit à un prestataire de service.
&lt;/p&gt;&lt;p&gt;
J'ai rouvert mon ancien site, avec un serveur apache à poil, sans interpréteur php (ni cgi-bin qui m'avait troué mon pc chez moi avec un LMZ, oui, me suis fait piraté mon pc comme un con à cause d'un vieux awstat oublié dans une arbo mal patchée... &lt;a href=&quot;http://www.reseaux-telecoms.com/cso_btree/05_04_15_150329_947/CSO/Newscso_view&quot; hreflang=&quot;fr&quot; title=&quot;Les blogs, repères de malwares… (CSO)&quot;&gt;Comme quoi, Marc, ça arrive même aux “consciencieux”...&lt;/a&gt;)
&lt;p&gt;&lt;/p&gt;
Dans la racine de son répertoire web, &lt;b&gt;.htaccess&lt;/b&gt;
&lt;pre&gt;
&lt;span style=&quot;color: #000000&quot;&gt;&lt;b&gt;&amp;lt;FilesMatch&lt;/b&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff0000&quot;&gt;&quot;[^rss.php]&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;b&gt;&amp;gt;
&lt;/b&gt;Redirect 301 / http://dascritch.net/
&lt;b&gt;&amp;lt;/FilesMatch&amp;gt;
&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;
un petit regex qui redirige définitivement (code 301*) toute requête vers le nouveau site. Sauf pour les fichiers &quot;rss.php&quot;
&lt;/p&gt;&lt;p&gt;
dans un répertoire dotclear vierge, fichier &lt;b&gt;.htaccess&lt;/b&gt;
&lt;pre&gt;
AddType text/xml .php
&lt;/pre&gt;
donnera automatiquement un &quot;bon&quot; mime-type de rss (çui là n'est pas le bon,mais ça semble convenir) en servant un fichier texte qui ne sera pas interprété). Et l'accompagnant, à la même url que l'ancien fil rss, le fichier invitant à une redirection&amp;nbsp;:
&lt;/p&gt;&lt;p&gt;
&lt;pre&gt;
&lt;span style=&quot;color: #000000&quot;&gt;&lt;b&gt;&amp;lt;?xml&lt;/b&gt; version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; &lt;b&gt;?&amp;gt;
&amp;lt;rdf:RDF
&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;  xmlns:rdf=&lt;/span&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;
&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;  xmlns:dc=&lt;/span&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&quot;http://purl.org/dc/elements/1.1/&quot;
&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;  xmlns:sy=&lt;/span&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&quot;http://purl.org/rss/1.0/modules/syndication/&quot;
&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;  xmlns:admin=&lt;/span&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&quot;http://webns.net/mvcb/&quot;
&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;  xmlns:content=&lt;/span&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&quot;http://purl.org/rss/1.0/modules/content/&quot;
&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;  xmlns=&lt;/span&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&quot;http://purl.org/rss/1.0/&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;b&gt;&amp;gt;

&amp;lt;channel&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt; rdf:about=&lt;/span&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&quot;http://www.dascritch.net/blog.php/&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;b&gt;&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;title&amp;gt;&lt;/b&gt;da scritch blog zone&lt;b&gt;&amp;lt;/title&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;description&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #008080&quot;&gt;&lt;b&gt;&amp;lt;![CDATA[]]&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;b&gt;&amp;lt;/description&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;link&amp;gt;&lt;/b&gt;http://www.dascritch.net/blog.php/&lt;b&gt;&amp;lt;/link&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;dc:language&amp;gt;&lt;/b&gt;fr&lt;b&gt;&amp;lt;/dc:language&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;dc:creator&amp;gt;&amp;lt;/dc:creator&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;dc:rights&amp;gt;&amp;lt;/dc:rights&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;dc:date&amp;gt;&lt;/b&gt;2006-04-10T22:20:53+00:00&lt;b&gt;&amp;lt;/dc:date&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;admin:generatorAgent&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt; rdf:resource=&lt;/span&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&quot;http://www.dotclear.net/&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;b&gt;/&amp;gt;

&lt;/b&gt;  &lt;b&gt;&amp;lt;sy:updatePeriod&amp;gt;&lt;/b&gt;daily&lt;b&gt;&amp;lt;/sy:updatePeriod&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;sy:updateFrequency&amp;gt;&lt;/b&gt;1&lt;b&gt;&amp;lt;/sy:updateFrequency&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;sy:updateBase&amp;gt;&lt;/b&gt;2006-04-10T22:20:53+00:00&lt;b&gt;&amp;lt;/sy:updateBase&amp;gt;

&lt;/b&gt;  &lt;b&gt;&amp;lt;items&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;rdf:Seq&amp;gt;
&lt;/b&gt;    &lt;b&gt;&amp;lt;rdf:li&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt; rdf:resource=&lt;/span&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&quot;http://www.dascritch.net/&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;b&gt;/&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;/rdf:Seq&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;/items&amp;gt;
&amp;lt;/channel&amp;gt;

&amp;lt;item&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt; rdf:about=&lt;/span&gt;&lt;span style=&quot;color: #aa0000&quot;&gt;&quot;http://www.dascritch.net/&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;b&gt;&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;title&amp;gt;&lt;/b&gt;L'URL DU SITE A CHANGÉ&lt;b&gt;&amp;lt;/title&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;link&amp;gt;&lt;/b&gt;http://www.dascritch.net/&lt;b&gt;&amp;lt;/link&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;dc:date&amp;gt;&lt;/b&gt;2006-04-11T22:20:53+00:00&lt;b&gt;&amp;lt;/dc:date&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;dc:language&amp;gt;&lt;/b&gt;fr&lt;b&gt;&amp;lt;/dc:language&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;dc:creator&amp;gt;&lt;/b&gt;Da Scritch&lt;b&gt;&amp;lt;/dc:creator&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;dc:subject&amp;gt;&amp;lt;/dc:subject&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;description&amp;gt;&lt;/b&gt;Rendez-vous désormais sur www.dascritch.net.
Et mettez à jours vos fils rss !&lt;b&gt;&amp;lt;/description&amp;gt;
&lt;/b&gt;  &lt;b&gt;&amp;lt;content:encoded&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #008080&quot;&gt;&lt;b&gt;&amp;lt;![CDATA[&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;lt;p&amp;gt;&amp;lt;a href=&quot;http://dascritch.net/&quot;&amp;gt;Rendez-vous
désormais sur www.dascritch.net. Et mettez à jour vos fils rss !&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&lt;/span&gt;&lt;span style=&quot;color: #008080&quot;&gt;&lt;b&gt;]]&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;b&gt;&amp;lt;/content:encoded&amp;gt;
&amp;lt;/item&amp;gt;
&amp;lt;/rdf:RDF&amp;gt;
&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
Une seule entrée, datée de dans un an (à indiquer trois fois, &lt;a href=&quot;http://www.w3.org/TR/NOTE-datetime&quot; hreflang=&quot;en&quot; title=&quot;Date and Time Formats&quot;&gt;format ISO 8601 recommandé par le W3C&lt;/a&gt;) pour qu'il soit toujours en tête des classements chronologiques des aggrégateurs, indiquant bien quelle est la nouvelle adresse. Radical&amp;nbsp;: En trois jours, les 9 agents qui n'avaient toujours pas changés d'adresse sont sur le nouveau site. (À ce sujet, ceux qui &lt;a href=&quot;http://dascritch.net/planet.php&quot; title=&quot;Ma planète (aggrégateurs de rss de potes)&quot;&gt;comme moi ont un aggrégateur en ligne&lt;/a&gt;, si on faisait comme les spidder, à savoir mettre une url dans le User Agent des requêtes&amp;nbsp;?)
&lt;/p&gt;&lt;p&gt;
Voilà, normalement, c'est blindé et ça devrait marcher. le site &lt;code&gt;.ath.cx&lt;/code&gt; est sur un serveur en ip flottante. Essayez &lt;a href=&quot;http://dascritch.ath.cx&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;http://dascritch.ath.cx&lt;/code&gt;&lt;/a&gt; puis &lt;a href=&quot;http://dascritch.ath.cx/dotclear/rss.php&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;http://dascritch.ath.cx/dotclear/rss.php&lt;/code&gt;&lt;/a&gt;. pour les “vrais” utilisateurs du net sous unix, à essayer avec la commande &lt;code&gt;curl -i http://adresse&lt;/code&gt;, ce qui donne l'entête http en prime.
&lt;/p&gt;&lt;p&gt;
* Le redirect standard (code 302) n'entraîne pas une màj de Google. À ce jour, Google est le seul à ne pas parser mon site, s'arrêtant à la racine et au &lt;b&gt;&lt;a href=&quot;https://dascritch.net/robots.txt&quot;&gt;robots.txt&lt;/a&gt;&lt;/b&gt; sans réelle explication... frustrant.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
    
</channel>
</rss>