<?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é - dom</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>Tue, 09 Jun 2026 06:56:56 +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-09T06:56:56+02:00</sy:updateBase>

	
	<item>
		<title>cpu-audio.js enfin en 7.0</title>
		<link>https://dascritch.net/post/2021/04/28/cpu-audio.js-enfin-en-7.0</link>
		<guid isPermaLink="false">urn:md5:eafb4fbe4f9d9e81326929186044593d</guid>
		<dc:date>2021-04-28T06:51:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Ouais, j'avais d'autres billets techniques sur le même sujet, mais là, j'ai avancé sur le code plutôt que l'explication de texte ;)		&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;Ouais, j'avais d'autres billets techniques sur le même sujet, mais là, j'ai avancé sur le code plutôt que l'explication de texte ;)&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;
Commençons par un exemple avec une émission sur le son&amp;nbsp;:
&lt;/p&gt;
&lt;cpu-audio
    title=&quot;Ex0117 À la source du son&quot;
    poster=&quot;https://cpu.dascritch.net/public/Images/Emissions/.1910-Ex0117-SourceDuSon_s.jpg&quot;
    canonical=&quot;https://cpu.dascritch.net/post/2019/10/17/Ex0117-%C3%80-la-source-du-son&quot;
    waveform=&quot;https://cpu.dascritch.net/public/Sonores/Emissions/waveforms/0117-CPU%2817-10-19%29.png&quot;
    twitter=&quot;@cpuprogramme&quot;&gt;
    &lt;audio controls id=&quot;emission&quot;&gt;
        &lt;source src=&quot;https://cpu.dascritch.net/public/Sonores/Emissions/hls/0117-CPU%2817-10-19%29/index.m3u8&quot; type=&quot;application/x-mpegurl&quot; /&gt; 
        &lt;source src=&quot;https://cpu.dascritch.net/public/Sonores/Emissions/0117-CPU%2817-10-19%29.ogg&quot; type=&quot;audio/ogg&quot; /&gt;
        &lt;source src=&quot;https://cpu.dascritch.net/public/Sonores/Emissions/podcast/0117-CPU%2817-10-19%29.mp3&quot; type=&quot;audio/mpeg&quot; data-downloadable /&gt;
        &lt;track kind=&quot;chapters&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/0117-CPU_17-10-19_.vtt&quot; default /&gt;
    &lt;/audio&gt;
   &lt;p&gt;(S'il n'a pas encore démarré, un peu de patience, sinon le lecteur reste utilisable, c'est de la dégradation élégante)&lt;/p&gt;
&lt;/cpu-audio&gt;

&lt;p&gt;
Cela faisait un peu de temps que je n'avais pas donné de nouvelles de mon lecteur audio. Alors que pourtant j'avais écrit toute une série de billets à son sujet&amp;nbsp;: 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Mettre-de-l-audio-dans-le-web-n-a-pas-%C3%A9t%C3%A9-simple&quot;&gt;Mettre de l'audio dans le web n'a pas été simple&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web&quot;&gt;Reconstruire son lecteur audio pour le web&lt;/a&gt; (sur la version 5)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2019/06/05/Retravailler-un-lecteur-web-audio-dans-les-petites-largeurs&quot;&gt;Retravailler un lecteur web audio dans les petites largeurs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2019/06/18/Le-blues-du-navigator.share&quot;&gt;Le blues du Web Share&lt;/a&gt;  (&lt;a href=&quot;https://dascritch.net/post/2019/06/26/We-need-Web-Share&quot;&gt;english version&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2019/11/13/Deux-couleurs-bizarres-en-CSS&quot;&gt;Deux couleurs bizarres en CSS&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
&lt;a href=&quot;https://github.com/dascritch/cpu-audio/releases/tag/7.0&quot;&gt;&lt;em&gt;cpu-audio.js&lt;/em&gt; vient de passer en version 7.0.&lt;/a&gt; Le player audio de &lt;a href=&quot;http://cpu.pm&quot;&gt;l'émission CPU&lt;/a&gt; en WebComponent a été revu en profondeur, &lt;a href=&quot;https://github.com/dascritch/cpu-audio/releases/tag/7.0&quot;&gt;avec moult corrections et notamment l'arrivée des thèmes graphiques&lt;/a&gt; en plus du &lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/live_config.html&quot;&gt;système simple de configuration&lt;/a&gt;&lt;/p&gt;


&lt;p class=&quot;c&quot;&gt;&lt;a href=&quot;https://dascritch.github.io/cpu-audio/&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/.2104-cpuaudio-7_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;L'idée d'origine de cette bibliothèque était de pouvoir donner une URL qui puisse pointer à un instant précis d'un audio dans une page web. Car le standard existe mais n'est pas implémenté par les principaux navigateurs. Or il est bien utile &lt;a href=&quot;https://cpu.pm/0069&quot;&gt;pour les émissions de 5h30&lt;/a&gt;. Et quitte à le faire, le faire avec un minimum de dépendances et un maximum de souplesse.&lt;/p&gt;

&lt;p&gt;Par la suite, les principales API sont arrivées pour enfin stabiliser les Web-components, ce qi m'a permis d'enfin réaliser une bibliothèque javascript isolée, transportable, agnostique, petite (sous les 50ko) et toujours en &lt;em lang=&quot;en&quot;&gt;vanilla&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;J'ai donc déjà longuement raconté sur ce blog &lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web&quot;&gt;les démarches de conception qui m'ont permis d'y arriver&lt;/a&gt; et de le faire dans la licence GPL.&lt;/p&gt;

&lt;p&gt;J'avais besoin de refondre complètement la bibliothèque pour la rendre plus maintenable, plus facile aussi pour que n'importe quel dev ou intégrateur front s'en empare. Il est ainsi possible de créer des thèmes graphiques sans toucher au code JS, ce dernier ayant même une tolérance d'implémentation.&lt;/p&gt;

&lt;p&gt;Il reste toujours les idées qu'on avait jeté au début, que je ne réaliserai jamais seul mais que j'espère donner une base saine pour construire :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;des thèmes plus aboutis et jolis&lt;/li&gt;
&lt;li&gt;une WebExtension pour lire n'importe quel audio tranquillement&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dascritch/cpu-audio/issues/8&quot;&gt;créer des playlist décentralisées&lt;/a&gt; pour montrer que le web est beau car remixable&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dascritch/cpu-audio/issues/76&quot;&gt;créer des commentaires à la SoundCloud/MixCloud mais décentralisés&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;des outils encore plus poussés que &lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/chapters_editor.html&quot;&gt;l'éditeur de chapitre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dascritch/cpu-audio/issues/117&quot;&gt;ajouter un spectrogramme via add-on&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Étendre pour l'utiliser aussi sur de la vidéo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et n'hésitez pas à me contacter si vous avez besoin d'aide.&lt;/p&gt;

&lt;p&gt;J'ai encore beaucoup de choses à dire, mais surtout beaucoup à remercier&amp;nbsp;; d'abord toute l'équipe de l'émission et ceux de la radio qui font qu'on reste très impertinents depuis 1981. Avec une pensée spéciale pour le Tetalab et Mixart Myrys où nous avions enregistré de nombreuses émissions et &lt;a href=&quot;https://linuxfr.org/users/dascritch/journaux/mixart-myrys-lutte-pour-sa-survie&quot;&gt;dans une panade noire.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensuite ceux qui m'ont aidé spécialement sur ce projet de code :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://oncletom.io/&quot;&gt;Thomas Parisot&lt;/a&gt;  pour le standard Media Fragment, qui permet à ce player de créer des liens hypertextes temporels&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/chibani&quot;&gt;Loïc Gerbaud&lt;/a&gt; pour des corrections&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;http://www.phonitive.fr/&quot;&gt;Guillaume Lemoine&lt;/a&gt; qui m'a bien aidé avec du prêt de matos au début&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://twitter.com/infestedgrunt&quot;&gt;Benoît Salles&lt;/a&gt; et &lt;a href=&quot;https://twitter.com/MichelPoulain&quot;&gt;Michel Poulain&lt;/a&gt; pour les tests, &lt;a href=&quot;https://twitter.com/GabiBoyer&quot;&gt;Gabi Boyer&lt;/a&gt; pour m'avoir passé un iPhone SE, téléphone qui est certes toujours mis à jour, mais Apple n'arrive vraiment pas à tenir Safari aux standards.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://twitter.com/mariejulien/status/1047827583126183937&quot;&gt;@mariejulien&lt;/a&gt; pour m'avoir donné envie de ré-écrire un &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md plus accessible&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://twitter.com/porteneuve&quot;&gt;Christophe Porteneuve&lt;/a&gt; de &lt;a href=&quot;http://delicious-insights.com/&quot;&gt;Delicious Insights&lt;/a&gt;, un ami et un formateur JS qui m'a donné un magistral coup de pied au cul. Ses formations JS sont de sérieux cadeaux pour les devs webs.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/scombat/react-cpu-audio&quot;&gt;scombat qui a écrit une intégration minimale de cpu-audio.js dans React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/edas&quot;&gt;Éric Daspet pour ses précieuses remarques sur la documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;N'hésitez pas à le faire connaitre, si vous avez un projet audio dans le web qui nécessite un lecteur.&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>We need Web Share</title>
		<link>https://dascritch.net/post/2019/06/26/We-need-Web-Share</link>
		<guid isPermaLink="false">urn:md5:827c3a2b8b5db491bf772a91792c78c7</guid>
		<dc:date>2019-06-26T05:21:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>We finally get a way to add share buttons without forgetting a service or use. And respecting the privacy of our public. Go into all the world wide web and preach the method to all creation ! Well… who can use it, because, alas, that function is not everywhere.		&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;We finally get a way to add share buttons without forgetting a service or use. And respecting the privacy of our public. Go into all the world wide web and preach the method to all creation ! Well… who can use it, because, alas, that function is not everywhere.&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;
This article is translated &lt;a href=&quot;https://dascritch.net/post/2019/06/18/Le-blues-du-navigator.share&quot;&gt; from french, namely «&amp;nbsp;&lt;em lang=&quot;fr&quot;&gt;Le blues du Web Share&lt;/em&gt;&amp;nbsp;»&lt;/a&gt;, in &lt;a href=&quot;https://dascritch.net/serie/cpu-audio&quot;&gt;a series describing&lt;/a&gt; the development of &lt;a href=&quot;https://dascritch.github.io/cpu-audio/&quot;&gt;the cpu-audio.js webcomponent.&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=aU-3oiB9E54&quot;&gt;&lt;q lang=&quot;fr&quot;&gt;Excuse my French&lt;/q&gt;&lt;/a&gt; as we say in… French.
&lt;/p&gt;
&lt;style&gt;
#share_but {
display : inline-block; height:16px;width:16px;vertical-align: bottom; fill:currentColor
}
&lt;/style&gt;
&lt;p&gt;
Today, I talk about what lies behind the  &lt;button type=&quot;button&quot; onclick=&quot;document.querySelector('cpu-audio').CPU.show_actions();&quot;&gt;&lt;svg viewBox=&quot;-8 -8 40 40&quot; id=&quot;share_but&quot;&gt;&lt;path d=&quot;M 21 0 C 18.2 0 16 2.2 16 5 C 16 5.1 16 5.2 16.0 5.2 L 8.2 9.2 C 7.3 8.4 6.2 8 5 8 C 2.2 8 0 10.2 0 13 C 0 15.8 2.2 18 5 18 C 6.2 18 7.3 17.5 8.2 16.8 L 16 20.8 C 16.0 20.8 16 20.9 16 21 C 16 23.8 18.2 26 21 26 C 23.8 26 26 23.8 26 21 C 26 18.2 23.8 16 21 16 C 19.8 16 18.7 16.4 17.8 17.2 L 10 13.3 C 10 13.2 10 13.1 10 13 C 10 12.9 10 12.8 10 12.8 L 17.8 8.8 C 18.7 9.6 19.8 10 21 10 C 23.8 10 26 7.8 26 5 C 26 2.2 23.8 0 21 0 Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; action&lt;/button&gt; button.
&lt;/p&gt;

&lt;p&gt;
Here is my player, in its last development version. You can  &lt;a href=&quot;https://dascritch.net/post/2019/06/26/We-need-Web-Share#the_switch&quot;&gt;⇓ jump ⇓ to ⇓ the ⇓ next ⇓ chapter ⇓&lt;/a&gt;
&lt;/p&gt;

&lt;cpu-audio title=&quot;En attendant Le Supplément Week-End (09/06/2009)&quot; poster=&quot;https://dascritch.net/vrac/.blog2/radio/swe-saison5.png&quot; canonical=&quot;https://dascritch.net/post/2009/06/20/En-attendant-le-Supplement-Week-End&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;https://dascritch.net&quot;&gt;You will need to go on my dascritch.net websit to read and experience my post. If you can read this text, you may probably not be on it.&lt;/a&gt;&lt;/strong&gt;
&lt;audio controls id=&quot;exemple&quot;&gt;
      &lt;source src=&quot;https://dascritch.net/vrac/Emissions/Speciales/090620-En-attendant-le-SWE.ogg&quot; type=&quot;audio/ogg&quot; /&gt;
      &lt;source src=&quot;https://dascritch.net/vrac/Emissions/Speciales/podcast/090620-En-attendant-le-SWE.mp3&quot; type=&quot;audio/mpeg&quot; /&gt;
&lt;/audio&gt;
&lt;/cpu-audio&gt;
&lt;p&gt;
&lt;small&gt;Yes, I know, I’m talking in French and this show is 5 years old, but I’m not sure to be a better radio host today. Yes, the interface is in French here, because my blog usually gets contents in French. &lt;a href=&quot;https://dascritch.github.io/cpu-audio/&quot;&gt;It may be started in English.&lt;/a&gt;&lt;/small&gt;
&lt;/p&gt;

&lt;h3 id=&quot;the_switch&quot; lang=&quot;en&quot;&gt;The switch&lt;/h3&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-interfacenormale.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;The main interface of the player&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
This button (on the right of the main interface) will switch it to a share one. It is possible &lt;a href=&quot;https://dascritch.github.io/cpu-audio/INSTALL#attributes-references&quot;&gt;to hide this button and so denying access to the share interface&lt;/a&gt; via &lt;code&gt;hide=&quot;&lt;em&gt;actions&lt;/em&gt;&quot;&lt;/code&gt; attribute. It may be useful, by example when your website already have a share system.
&lt;/p&gt;

&lt;p&gt;
Once the button clicked, you get some possible actions, on the whole width of the main interface of the web component&amp;nbsp;:
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-interfacepartage-full.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Seen in full width. If you don’t see exactly that, there is no problem : it’s the subject of my post.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
This panel has some different actions as direct downloading the media file (&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web#codecs_libres_vs_payants&quot;&gt;according to which  codec can be read by the browser&lt;/a&gt;, as we still get &lt;a href=&quot;https://caniuse.com/#feat=ogg-vorbis&quot;&gt;some old guns as Safari&lt;/a&gt;) and also share the sound via e-mail, twitter or facebook to relatives, sending them the canonical URL of the sound’s page. Due to limitations on those social networks, only e-mail gets &lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web#pointer_dans_le_temps&quot;&gt;a working media-fragment starting the play at the exact moment&lt;/a&gt; you were listening.&lt;br /&gt;
From left to right :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a copy of the cover, going back to the main interface,&lt;/li&gt;
&lt;li&gt;share on Twitter &lt;a href=&quot;https://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage#ilyadeuxtypes&quot;&gt;(vanilla link)&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;share on Facebook &lt;a href=&quot;https://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage#ilyadeuxtypes&quot;&gt;(vanilla link)&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;share by e-mail &lt;a href=&quot;https://dascritch.net/post/2014/08/19/Formulaire-de-contact-ou-mailto&quot;&gt;(&lt;code&gt;mailto:&lt;/code&gt; link)&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;download the media (according to which codec can be read),&lt;/li&gt;
&lt;li&gt;cancel, going back to the main interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
As my web component is in liquid design and mobile first, the interface is simplified on small width&amp;nbsp;: cover and text labels are hidden.
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-interfacepartage-small.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Yes I know. For any critics on icon’s design, please commit me better ones. &lt;a href=&quot;http://www.st-minutiae.com/humor/doctorisms.html&quot;&gt;I'm a coder, not Picasso.&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
&lt;q&gt;Canonical URL&lt;/q&gt; means that if you want to share the radio show &lt;a href=&quot;http://cpu.pm/&quot;&gt;on cpu.pm front page,&lt;/a&gt; as i’m only showing the last broadcasted episode, its audio tag will be removed after next one is broadcasted, so there is a better choice&amp;nbsp;: providing the page of the episode. And please, don’t look  like you don’t &lt;a href=&quot;https://www.yakaferci.com/link-rel-canonical/&quot;&gt;use this useful tag.&lt;/a&gt; &lt;small&gt;Yes, even if, as I do, you don’t code a website optimized for desktops, and a &lt;code&gt;.m&lt;/code&gt; one for mobiles, because, you know, it’s a loss of time.&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
If the canonical URL is not the one where is hosted the player, &lt;a href=&quot;https://dascritch.github.io/cpu-audio/INSTALL#attributes-references&quot;&gt;the &lt;code&gt;canonical=&quot;&quot;&lt;/code&gt; attribute will do the job.&lt;/a&gt;
&lt;/p&gt;

&lt;h3 id=&quot;the_wish&quot; lang=&quot;en&quot;&gt;The wish&lt;/h3&gt;

&lt;p&gt;
We already have browsers with a &lt;q&gt;share on social networks&lt;/q&gt; menu on mobile platforms. I’ve explained &lt;a href=&quot;https://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage&quot;&gt;in a 2014 post in French about why I put again share buttons on my blog.&lt;/a&gt; It was 5 years ago, and, even if the general interface of the browsers moved, this over useful interface is still here.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/.1402-BoutonsSociaux-Firefox_m.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Seen there in Firefox on Android in 2014, and was literally rocking, getting you directly in their respecting function in the native apps.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Cool. Except that your browser will take the title of the page, a title encumbered with unmeaningful   elements as separation glyphs, name of the site before title of the page, &lt;em lang=&quot;la&quot;&gt;in extenso&lt;/em&gt; description of old-school SEO &lt;small&gt;with a bunch of keywords &lt;small&gt;names verbs persons &lt;small&gt;marks important&lt;/small&gt;&lt;/small&gt;&lt;/small&gt; etc… Up to the user to clean it up and rephrase it.
&lt;/p&gt;

&lt;h3 id=&quot;the_witch&quot; lang=&quot;en&quot;&gt;The witch&lt;/h3&gt;

&lt;p&gt;
Here enter the good fairies of the web standards&amp;nbsp;:
&lt;a href=&quot;https://wicg.github.io/web-share/&quot;&gt;The W3C introduced &lt;code&gt;&lt;strong&gt;navigator&lt;/strong&gt;.share()&lt;/code&gt; aka WebShare&lt;/a&gt;, a function standardizing how to do it and allowing to suggest a bit longer description.
&lt;/p&gt;

&lt;p&gt;
This function has numerous wins&amp;nbsp;:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;being &lt;strong&gt;standard&lt;/strong&gt; (in theory, I’ll explain later)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;not forgetting a service&lt;/strong&gt; used by your reader (instead of the facebook/twitter classical duo)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;use &lt;strong&gt;a native control&lt;/strong&gt; of the host OS, really more useful on smartphones&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;deep sending you to the share function in the native app&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;not tracking the users as do social networks&lt;/strong&gt; with rich buttons (this is a shared win with &lt;a href=&quot;https://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage#ilyadeuxtypes&quot;&gt;classical HTML links&lt;/a&gt;)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;not tracking the users by the hosting website&lt;/strong&gt;, guessing which sharing service they use&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;not encumbering the small screen&lt;/strong&gt; of a smartphone with gazillions of services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;Calling it is damn simple&lt;/strong&gt;.&lt;br /&gt;
&lt;a href=&quot;https://css-tricks.com/how-to-use-the-web-share-api/&quot;&gt;I’m really delighted having a so lean and perfectly thought process&lt;/a&gt;, instead to construct an instance builder with parameters set by another class serving a specific object and call it via an event dispatcher.
&lt;/p&gt;
&lt;p&gt;
♫ In a webpage, &lt;code&gt;https://&lt;/code&gt; served , on a user action (as  &lt;button type=&quot;button&quot; onmouseover=&quot;this.disabled=!navigator.share&quot; onclick=&quot;navigator.share({title: document.title,text: document.querySelector('meta[name=description]').content,url: window.location.href});&quot;&gt;click on this button&lt;/button&gt;), cook&amp;nbsp;*&amp;nbsp;:
&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;&lt;strong&gt;navigator&lt;/strong&gt;.share({
            '&lt;em&gt;title&lt;/em&gt;': &lt;strong&gt;document&lt;/strong&gt;.title,
            '&lt;em&gt;text&lt;/em&gt;': &lt;strong&gt;document&lt;/strong&gt;.querySelector('&lt;em&gt;meta[name=&quot;description&quot;]&lt;/em&gt;').content,
            '&lt;em&gt;url&lt;/em&gt;': &lt;strong&gt;window&lt;/strong&gt;.location.href
        });&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;
&lt;small&gt;* in French, it sings as the &lt;a href=&quot;https://www.youtube.com/watch?v=lckuX1aaslg&amp;amp;t=84&quot;&gt;Cake d'Amour song in the famous  «&amp;nbsp;&lt;em&gt;Peau d'Âne&lt;/em&gt;&amp;nbsp;» movie, directed by Jacques Demy.&lt;/a&gt; That’s what I call &lt;q&gt;love&lt;/q&gt;.&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
If you have a clean coded html page, &lt;a href=&quot;https://alligator.io/js/web-share-api/&quot;&gt;your whole job is done&lt;/a&gt;. If it’s a piggy mess, you should start to not forget the &lt;code&gt;&amp;lt;&lt;strong&gt;meta&lt;/strong&gt;...&lt;/code&gt; description tag.&lt;br /&gt;
By the way, you can &lt;a href=&quot;https://wicg.github.io/web-share/level-2/&quot;&gt;share files with this standard’s level 2&lt;/a&gt;, and an &lt;abbr&gt;API&lt;/abbr&gt; to test the share (&lt;code&gt;&lt;strong&gt;navigator&lt;/strong&gt;.canShare()&lt;/code&gt;).&lt;br /&gt;
Pure genius&amp;nbsp;!
&lt;/p&gt;

&lt;h3 id=&quot;the_twist&quot; lang=&quot;en&quot;&gt;The twist&lt;/h3&gt;

&lt;p&gt;
Except :
&lt;/p&gt;

&lt;figure&gt;
&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-CanIUse.png&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/.1906-WebShare-CanIUse_m.png&quot; alt=&quot;Seulement Chrome sur Android et Safari sur le tout dernier iOS&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;a href=&quot;https://caniuse.com/#feat=web-share&quot;&gt;CanIUse.com support stats&lt;/a&gt; as taken when I wrote the original french post.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;This &lt;abbr&gt;API&lt;/abbr&gt; is &lt;strong&gt;not available on desktop computers&lt;/strong&gt; (except Safari Mac)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;It is also &lt;strong&gt;not available on Chrome Desktop, even in &lt;q&gt;responsive&lt;/q&gt; mode&lt;/strong&gt; (by the way, not a real mobile emulation, and may induce you in error)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;This &lt;abbr&gt;API&lt;/abbr&gt; is &lt;strong&gt;as today only on iOS and Chrome Android&lt;/strong&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;On iOS, each native app should carry its own sharing list, so we had a lot of missing ones due to the lack of a system-wide registry. We have it finally with, guess what ? &lt;a href=&quot;https://webkit.org/status/#feature-web-share&quot;&gt;Experimental support of &lt;code&gt;&lt;strong&gt;navigator&lt;/strong&gt;.share&lt;/code&gt;&lt;/a&gt;&amp;nbsp;!&lt;/li&gt;
&lt;li&gt;It is &lt;strong&gt;still not possible of a online service accessed via a browser to be registered&lt;/strong&gt;, &lt;a href=&quot;https://github.com/WICG/web-share-target&quot;&gt;as long Web Share Target API&lt;/a&gt; is nowhere implemented (and if it will be somewhere, we need to have it accepted by the user via a specific interface, to avoid spam attempts).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
We have a very volatile scene of social networks, and the landing of &lt;a href=&quot;https://carlchenet.com/de-limportance-de-bien-choisir-son-instance-mastodon/&quot;&gt;decentralized hives, where inhabitants is supposed to easily migrate&lt;/a&gt; from an instance to another one. For 3 years Web Share is so under-esteemed and only usable on one platform is a real shame. I’m deeply convinced we have technical ability to build a WebExtension doing that job on desktop browsers.
&lt;/p&gt;
&lt;p&gt;
I have some request to add, or being able to add, sharing option for a lambda website. Sure, I’d only put Facebook and Twitter, some people shamed me for forgetting &lt;a href=&quot;https://diasporafoundation.org/&quot;&gt; Diaspora*&lt;/a&gt;, &lt;a href=&quot;https://vk.com/&quot;&gt;VKontakte&lt;/a&gt;, &lt;a href=&quot;https://mastodon.social/about&quot;&gt;Mastodon&lt;/a&gt;, &lt;a href=&quot;http://perdu.com/&quot;&gt;etc.social.random()&lt;/a&gt; in the action interface of my player. They are right.&lt;br /&gt;
Except &lt;strong&gt;the more you get in a limited place, smaller each button will be&lt;/strong&gt; and all those services will be tight on the bench a wide as a smartphone. And, whatever we can do, there is no way to keep an exhaustive list of any available share services, even for specialized audience, for a real obvious point&amp;nbsp;: &lt;strong&gt;New services appear each day.&lt;/strong&gt;
&lt;/p&gt;


&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/805-SocialBookmarkingBadges.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
So I’m re-using this really lame joke, again.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Looking this image again, we note that a lot of those &lt;q&gt;social&lt;/q&gt; services that died during the last 5 years. And having so much begging puppies makes the whole page unreadable.
&lt;/p&gt;

&lt;h3 id=&quot;the_tweet&quot; lang=&quot;en&quot;&gt;The tweet&lt;/h3&gt;

&lt;p&gt;
Well, I can not declare those missing services in the webcomponent code, and create an &lt;abbr&gt;API&lt;/abbr&gt;  permitting the web-developer to add some&amp;nbsp;?
&lt;/p&gt;
&lt;blockquote&gt;
­Ahem. No. Wrong idea.
&lt;/blockquote&gt;
&lt;p&gt;
Because a such function will induce other problems&amp;nbsp;: charging the work &lt;strong&gt;to whom will include my webcomponent in his website&lt;/strong&gt;, asking to have some &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt; knowledge and read &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/master/API.md&quot;&gt;my &lt;abbr&gt;API&lt;/abbr&gt;'s documentation.&lt;/a&gt; I can hear you, noisy kids&amp;nbsp;: even with a big &lt;abbr&gt;RTFM&lt;/abbr&gt;, you won’t.&lt;br /&gt;
And I can bet that the web operator will forget some sharing services.
&lt;/p&gt;
&lt;p&gt;
It also means giving to the integrator some parameters that may be harmful&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;describing a color, injecting it via the &lt;code&gt;style=&quot;&lt;em&gt;background-color&lt;/em&gt;&quot;&lt;/code&gt; attribute&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;describing a monochromatic &lt;a href=&quot;https://dascritch.net/tag/svg&quot;&gt;SVG&lt;/a&gt; logo, needed because of the color inversion on  &lt;code&gt;:hover&lt;/code&gt; and &lt;code&gt;:focus&lt;/code&gt;, and betting the image will be exactly matching my template constraints and is not having an embedded javascript&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;describing an URL canvas where to send for that sharing service, if a such URL exists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Yes, I’m talking about you, social services with sharing systems that don’t support a simple link for that job. With the main motive to force your users using your mobile app full of tracking ads. You, nasty boys.
&lt;/p&gt;

&lt;h3 id=&quot;ben_alors&quot; lang=&quot;en&quot;&gt;So what ?&lt;/h3&gt;
&lt;p&gt;
I don't know what to tell.
&lt;/p&gt;
&lt;p&gt;
Today, a feature detection replaces the facebook/twitter/e-mail buttons by a unique button, launching the  &lt;code&gt;&lt;strong&gt;navigator&lt;/strong&gt;.share()&lt;/code&gt; function. You can see it only on Chrome Android and Safari.
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-interfacewebshare.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
The action interfaces, with the &lt;code&gt;&lt;strong&gt;navigator&lt;/strong&gt;.share()&lt;/code&gt; button
&lt;/figcaption&gt;
&lt;/figure&gt;



&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-effet-safari-mac.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Screenshoted on Safari Mac by Hadrien Lanneau. It pops up a contextual menu where the mouse is.
&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;
And later, yes, &lt;strong&gt;build a polyfill WebExtension may be a great idea&lt;/strong&gt; (in a more generic and without jQuery way, compared to &lt;a href=&quot;https://shgysk8zer0.github.io/posts/javascript/2017/10/19/web-share-api/&quot;&gt;web-share-api by C. Zuber&lt;/a&gt;). As long as sharing services will collaborate without pollute it with &lt;q&gt;analytics&lt;/q&gt; and other ad-tracking.
&lt;/p&gt;
&lt;p&gt;
For me, the best looking interface to add a share service in my browser is to re-use &lt;a href=&quot;https://support.mozilla.org/en-US/kb/add-or-remove-search-engine-firefox&quot;&gt;what already exists in Firefox to add a search engine.&lt;/a&gt; Because it's a lean interface, explicit one, standard-based and most of the work is already done there.
&lt;/p&gt;
&lt;p&gt;
It’s up to you to build it, now. &lt;abbr&gt;IMHO&lt;/abbr&gt;, this is not a over-difficult job to complete, and will be still a future-proof solution instead of &lt;a href=&quot;https://dascritch.net/post/2008/05/28/Bookmark-moi-cette-page&quot;&gt;any old AddThis script.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
You can also support initiatives to add WebShare into&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.chromestatus.com/feature/5668769141620736&quot;&gt;Chrome Desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mozilla/standards-positions/issues/27&quot;&gt;Firefox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Again, it was a long post talking about code, standard, implementations, but, for me, it worth it because this issue is not limited to my cpu-audio.js.&lt;br /&gt;
My next post in this series will be in French and talks about &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;CSS&lt;/a&gt;, standards and implementations for some… strange colors.&lt;br /&gt;
&lt;small&gt;May be it’s a frightening title, may be related to a horror story, so I have to say the killing sentence&amp;nbsp;:&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
I’ll be back… soon !
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Le blues du Web Share</title>
		<link>https://dascritch.net/post/2019/06/18/Le-blues-du-navigator.share</link>
		<guid isPermaLink="false">urn:md5:81bd96d1b9b6ccdee974287c66ef443f</guid>
		<dc:date>2019-06-18T06:52:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Il y a enfin un moyen pour mettre des boutons de partage sans oublier une plateforme ou un usage et ceci, en assurant le respect de la confidentialité de vos ouailles. Allez et partagez la bonne nouvelle ! Enfin, ceux qui l'ont, car évidemment, la fonction est très peu répandue.		&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;Il y a enfin un moyen pour mettre des boutons de partage sans oublier une plateforme ou un usage et ceci, en assurant le respect de la confidentialité de vos ouailles. Allez et partagez la bonne nouvelle ! Enfin, ceux qui l'ont, car évidemment, la fonction est très peu répandue.&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://dascritch.net/post/2019/06/26/We-need-Web-Share&quot;&gt;&lt;strong&gt;An english translation is available.&lt;/strong&gt;&lt;/a&gt;
&lt;br /&gt;
Cet article est dans &lt;a href=&quot;https://dascritch.net/serie/cpu-audio&quot;&gt;la série consacrée au développement&lt;/a&gt; de la bibliothèque &lt;a  href=&quot;https://dascritch.github.io/cpu-audio/&quot;&gt;cpu-audio.js&lt;/a&gt; et documente les affres de &lt;a href=&quot;https://github.com/dascritch/cpu-audio/releases/tag/6.0&quot;&gt;sa version 6.&lt;/a&gt; (enfin, &lt;a href=&quot;https://github.com/dascritch/cpu-audio/releases/tag/6.1&quot;&gt;la 6.1, car j'ai dû modifier l'icône dont il est question&lt;/a&gt;).
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Mettre-de-l-audio-dans-le-web-n-a-pas-%C3%A9t%C3%A9-simple&quot;&gt;Mettre de l'audio dans le web n'a pas été simple&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web&quot;&gt;Reconstruire son lecteur audio pour le web&lt;/a&gt; (sur la version 5)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2019/06/05/Retravailler-un-lecteur-web-audio-dans-les-petites-largeurs&quot;&gt;Retravailler un lecteur web audio dans les petites largeurs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le blues du Web Share&lt;/strong&gt;  (&lt;a href=&quot;https://dascritch.net/post/2019/06/26/We-need-Web-Share&quot;&gt;english version&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2019/11/13/Deux-couleurs-bizarres-en-CSS&quot;&gt;Deux couleurs bizarres en CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2021/04/28/cpu-audio.js-enfin-en-7.0&quot;&gt;cpu-audio.js enfin en 7.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tout-terrain WebVTT pour de l'audio&lt;/li&gt;
&lt;li&gt;Dichotomie entre podcast et web sur l'audience&lt;/li&gt;
&lt;/ol&gt;
&lt;style&gt;
#share_but {
display : inline-block; height:16px;width:16px;vertical-align: bottom; fill:currentColor
}
&lt;/style&gt;
&lt;p&gt;
Je continue le tour des coulisses du &lt;a href=&quot;https://dascritch.github.io/cpu-audio/&quot;&gt;webcomponent cpu-audio.js&lt;/a&gt;. Et aujourd'hui, on va parler de ce qu'il y a derrière son bouton &lt;button type=&quot;button&quot; onclick=&quot;document.querySelector('cpu-audio').CPU.show_actions();&quot;&gt;&lt;svg viewBox=&quot;-8 -8 40 40&quot; id=&quot;share_but&quot;&gt;&lt;path d=&quot;M 21 0 C 18.2 0 16 2.2 16 5 C 16 5.1 16 5.2 16.0 5.2 L 8.2 9.2 C 7.3 8.4 6.2 8 5 8 C 2.2 8 0 10.2 0 13 C 0 15.8 2.2 18 5 18 C 6.2 18 7.3 17.5 8.2 16.8 L 16 20.8 C 16.0 20.8 16 20.9 16 21 C 16 23.8 18.2 26 21 26 C 23.8 26 26 23.8 26 21 C 26 18.2 23.8 16 21 16 C 19.8 16 18.7 16.4 17.8 17.2 L 10 13.3 C 10 13.2 10 13.1 10 13 C 10 12.9 10 12.8 10 12.8 L 17.8 8.8 C 18.7 9.6 19.8 10 21 10 C 23.8 10 26 7.8 26 5 C 26 2.2 23.8 0 21 0 Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt; action&lt;/button&gt;
&lt;/p&gt;

&lt;p&gt;
Je vous remets le &lt;em lang=&quot;en&quot;&gt;player&lt;/em&gt;, dans la dernière version de dev. Sinon, &lt;a href=&quot;https://dascritch.net/post/2019/06/18/Le-blues-du-navigator.share#the_switch&quot;&gt;⇓ sautez ⇓ directement ⇓ au chapitre suivant ⇓&lt;/a&gt;
&lt;/p&gt;

&lt;cpu-audio title=&quot;En attendant Le Supplément Week-End (09/06/2009)&quot; poster=&quot;https://dascritch.net/vrac/.blog2/radio/swe-saison5.png&quot; canonical=&quot;https://dascritch.net/post/2009/06/20/En-attendant-le-Supplement-Week-End&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;https://dascritch.net&quot;&gt;Pour lire ce billet, il est conseiller d'aller sur mon site dascritch.net. Si vous lisez ce texte, c'est que probablement vous n'y êtes pas.&lt;/a&gt;&lt;/strong&gt;
&lt;audio controls id=&quot;exemple&quot;&gt;
      &lt;source src=&quot;https://dascritch.net/vrac/Emissions/Speciales/090620-En-attendant-le-SWE.ogg&quot; type=&quot;audio/ogg&quot; /&gt;
      &lt;source src=&quot;https://dascritch.net/vrac/Emissions/Speciales/podcast/090620-En-attendant-le-SWE.mp3&quot; type=&quot;audio/mpeg&quot; /&gt;
&lt;/audio&gt;
&lt;/cpu-audio&gt;
&lt;p&gt;
&lt;small&gt;Ouais, le sonore date un peu, mais c'est pour illustrer et de toutes façons, je ne fais pas mieux en radio depuis.&lt;/small&gt;
&lt;/p&gt;

&lt;h3 id=&quot;the_switch&quot; lang=&quot;en&quot;&gt;The switch&lt;/h3&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-interfacenormale.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;L'interface normale du lecteur ci-dessus&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Ce bouton (à droite de l'interface normale) bascule l'interface de lecture, vers une interface de partage. À noter qu'il est possible de &lt;a href=&quot;https://dascritch.github.io/cpu-audio/INSTALL#attributes-references&quot;&gt;cacher ce bouton et rendre l'interface d'action inaccessible&lt;/a&gt; via l'attribut &lt;code&gt;hide=&quot;&lt;em&gt;actions&lt;/em&gt;&quot;&lt;/code&gt;, ce qui peut se comprendre, par exemple si le site a déjà sa propre interface de partage.
&lt;/p&gt;

&lt;p&gt;
Une fois le  bouton cliqué, on se retrouve sur le panneau d'actions qui prend toute la largeur du panneau principal du &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt;&amp;nbsp;:
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-interfacepartage-full.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Vue en pleine largeur. Pas de panique si vous ne voyez pas exactement ça&amp;nbsp;: c'est le sujet de l'article.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Ce panneau propose différentes actions comme la possibilité de charger directement le sonore (&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web#codecs_libres_vs_payants&quot;&gt;en fonction du format qui est supporté par le navigateur&lt;/a&gt;, parce qu'&lt;a href=&quot;https://caniuse.com/#feat=ogg-vorbis&quot;&gt;il reste des vieux tromblons comme Safari&lt;/a&gt;), et aussi celui de partager le sonore par e-mail, sur twitter et sur facebook à des amis en renvoyant vers l'URL canonique de la page du sonore. À cause des limitations imposées pour les partages sur les réseaux sociaux sus-mentionnés, seul le partage par e-mail permet en l'état &lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web#pointer_dans_le_temps&quot;&gt;de profiter du &lt;em lang=&quot;en&quot;&gt;media fragment&lt;/em&gt; pour pointer exactement au même moment.&lt;/a&gt;&lt;br /&gt;
De gauche à droite : 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;reprise de la &lt;em lang=&quot;en&quot;&gt;cover&lt;/em&gt; pour revenir à l'interface de base,&lt;/li&gt;
&lt;li&gt;partager sur Twitter &lt;a href=&quot;https://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage#ilyadeuxtypes&quot;&gt;(lien simple)&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;partager sur Facebook &lt;a href=&quot;https://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage#ilyadeuxtypes&quot;&gt;(lien simple)&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;partager par e-mail &lt;a href=&quot;https://dascritch.net/post/2014/08/19/Formulaire-de-contact-ou-mailto&quot;&gt;(lien &lt;code&gt;mailto:&lt;/code&gt;)&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;télécharger le sonore (en fonction du codec accepté par le navigateur),&lt;/li&gt;
&lt;li&gt;annuler, revenir à l'interface normale.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Comme le &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt; est en interface liquide et en &lt;em lang=&quot;en&quot;&gt;mobile first&lt;/em&gt;, l'interface est simplifiée sur les petites largeurs&amp;nbsp;: la &lt;em lang=&quot;en&quot;&gt;cover&lt;/em&gt; disparaît, et les textes aussi.
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-interfacepartage-small.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Oui, alors, si vous avez des remarques sur le design des icônes, rien ne vous empêche de proposer mieux. &lt;a href=&quot;http://www.st-minutiae.com/humor/doctorisms.html&quot;&gt;Je suis programmeur, pas Picasso.&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
&lt;q&gt;URL canonique&lt;/q&gt; voulant dire que si par exemple vous partagez l'émission qui est &lt;a href=&quot;http://cpu.pm&quot;&gt;en une du site cpu.pm&lt;/a&gt;, vu que c'est la dernière émission diffusée, elle y disparaîtra à l'émission suivante, donc il vaut mieux directement renvoyer vers la page de l'émission. Et ne faites pas ceux qui ne connaissent pas, &lt;a href=&quot;https://www.yakaferci.com/link-rel-canonical/&quot;&gt;vous devriez utiliser le tag&lt;/a&gt;. &lt;small&gt;Oui, même si, comme moi, vous ne doublez pas un site prévu pour desktop avec un &lt;code&gt;m.&lt;/code&gt; pour mobile parce que ça fait trop perdre de temps.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
Si l'URL canonique de ce sonore n'est pas celle de la page où est intégré le &lt;em lang=&quot;en&quot;&gt;player&lt;/em&gt;, &lt;a href=&quot;https://dascritch.github.io/cpu-audio/INSTALL#attributes-references&quot;&gt;l'attribut &lt;code&gt;canonical=&quot;&quot;&lt;/code&gt; est là pour ça&lt;/a&gt;.
&lt;/p&gt;

&lt;h3 id=&quot;the_wish&quot; lang=&quot;en&quot;&gt;The wish&lt;/h3&gt;

&lt;p&gt;
Il existe déjà sur les navigateurs des plateformes mobiles un menu de partage de lien vers les réseaux sociaux. Je l'avais déjà fait remarquer &lt;a href=&quot;https://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage&quot;&gt;dans le billet où je parlais de la réapparition des boutons de partage sur mon blog.&lt;/a&gt; C'était y'a 5&amp;nbsp;ans, et si le design général des navigateurs a changé, cette interface hyper pratique est toujours là.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/.1402-BoutonsSociaux-Firefox_m.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Ici, dans Firefox Android en 2014, et ça déchirait déjà pas mal, renvoyant sur les applications natives correspondantes.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
C'est cool, sauf que, bien souvent le navigateur va reprendre le titre de la page, lequel est bien souvent encombrée d'éléments inutiles genre glyphes de séparation, titre du site en plus de la page, description &lt;em lang=&quot;la&quot;&gt;in extenso&lt;/em&gt; pour du SEO à la papa &lt;small&gt;bourrée de mots-clés &lt;small&gt;mot-clé keyword &lt;small&gt;key word terme important&lt;/small&gt;&lt;/small&gt; &lt;/small&gt;, etc… Ce qui laisse le boulot à l'utilisateur de nettoyer et de remettre en forme.
&lt;/p&gt;

&lt;h3 id=&quot;the_witch&quot; lang=&quot;en&quot;&gt;The witch&lt;/h3&gt;

&lt;p&gt;
Arrivent les bonnes fées des standards du web&amp;nbsp;:
&lt;a href=&quot;https://wicg.github.io/web-share/&quot;&gt;Le W3C a introduit &lt;code&gt;&lt;strong&gt;navigator&lt;/strong&gt;.share()&lt;/code&gt; aka WebShare&lt;/a&gt;, une fonction qui standardise l'action et permet de  proposer un texte descriptif un poil plus long.
&lt;/p&gt;

&lt;p&gt;
Cette fonction présente plusieurs avantages&amp;nbsp;:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;être &lt;strong&gt;standard&lt;/strong&gt; (théoriquement, on verra plus loin)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ne pas oublier un service&lt;/strong&gt; de l'utilisateur (au lieu de rester sur le diptyque facebook/twitter)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;utiliser &lt;strong&gt;un contrôle natif&lt;/strong&gt; de l'OS beaucoup plus pratique sur les smartphones&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;envoyer directement le lien à l'application native installée dans son interface idoine&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ne pas pister les utilisateurs par les réseaux sociaux&lt;/strong&gt; en proposant les boutons enrichis (avantage partagé si vous &lt;a href=&quot;https://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage#ilyadeuxtypes&quot;&gt;utilisez les liens HTML classiques&lt;/a&gt;)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ne pas pister les utilisateurs par le site web&lt;/strong&gt; en devinant quels services de partage l'utilisateur emploie&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ne pas encombrer l'écran&lt;/strong&gt; du smartphone avec trouzemillions de services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;L'appel est hyper simple&lt;/strong&gt;.&lt;br /&gt;
&lt;a href=&quot;https://css-tricks.com/how-to-use-the-web-share-api/&quot;&gt;Ça fait même hyper plaisir d'avoir quelque chose d'aussi simple et correctement pensé&lt;/a&gt;, au lieu de devoir faire appel à un constructeur de classe, à des paramètres instanciés par un autre constructeur pour un objet spécifique, et d'envoyer via un diffuseur d'événement.
&lt;/p&gt;
&lt;p&gt;
♫ Dans une page… ♬ dans une page web *, ♫ servie en &lt;code&gt;h&lt;/code&gt;… ♬ servie en &lt;code&gt;https://&lt;/code&gt;, sur une action utilisateur (genre &lt;button type=&quot;button&quot; onmouseover=&quot;this.disabled=!navigator.share&quot; onclick=&quot;navigator.share({title: document.title,text: document.querySelector('meta[name=description]').content,url: window.location.href});&quot;&gt;clique sur ce bouton&lt;/button&gt;), lancer&amp;nbsp;:
&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;&lt;strong&gt;navigator&lt;/strong&gt;.share({
            '&lt;em&gt;title&lt;/em&gt;': &lt;strong&gt;document&lt;/strong&gt;.title,
            '&lt;em&gt;text&lt;/em&gt;': &lt;strong&gt;document&lt;/strong&gt;.querySelector('&lt;em&gt;meta[name=&quot;description&quot;]&lt;/em&gt;').content,
            '&lt;em&gt;url&lt;/em&gt;': &lt;strong&gt;window&lt;/strong&gt;.location.href
        });&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;
&lt;small&gt;* Honte à moi, oui, j'ai bien chanté ce paragraphe sur l'air du &lt;a href=&quot;https://www.youtube.com/watch?v=lckuX1aaslg&amp;amp;t=84&quot;&gt;Cake d'Amour dans «&amp;nbsp;&lt;em&gt;Peau d'Âne&lt;/em&gt;&amp;nbsp;» de Jacques Demy.&lt;/a&gt; Et maintenant, vous l'avez dans votre tête, votre journée sera foutue. &lt;a href=&quot;https://dascritch.net/post/2019/06/18/Le-blues-du-navigator.share#comment-form&quot;&gt;Plaintes en commentaires ↓, merci&lt;/a&gt;&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Si votre site est déjà bien conçu, &lt;a href=&quot;https://alligator.io/js/web-share-api/&quot;&gt;vous n'avez quasi plus de boulot à faire&lt;/a&gt;. Si votre site est conçu comme un cochon, il va déjà falloir apprendre à ne plus oublier les balises &lt;code&gt;&amp;lt;&lt;strong&gt;meta&lt;/strong&gt;...&lt;/code&gt; descriptives.&lt;br /&gt;
D'ailleurs, on pourra aussi &lt;a href=&quot;https://wicg.github.io/web-share/level-2/&quot;&gt;partager des fichiers avec le niveau 2 de ce standard&lt;/a&gt; et une &lt;abbr title=&quot;interface de programmation&quot;&gt;API&lt;/abbr&gt; pour tester l'envoi (&lt;code&gt;&lt;strong&gt;navigator&lt;/strong&gt;.canShare()&lt;/code&gt;).&lt;br /&gt;
C'est génial&amp;nbsp;!
&lt;/p&gt;

&lt;h3 id=&quot;the_twist&quot; lang=&quot;en&quot;&gt;The twist&lt;/h3&gt;

&lt;p&gt;
Sauf que :
&lt;/p&gt;

&lt;figure&gt;
&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-CanIUse.png&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/.1906-WebShare-CanIUse_m.png&quot; alt=&quot;Seulement Chrome sur Android et Safari sur le tout dernier iOS&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;a href=&quot;https://caniuse.com/#feat=web-share&quot;&gt;Les chiffres de support par CanIUse.com&lt;/a&gt; relevés à l'écriture de ce billet.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;Cette &lt;abbr title=&quot;interface de programmation&quot;&gt;API&lt;/abbr&gt; &lt;strong&gt;n'existe pas sur ordinateurs de bureau&lt;/strong&gt; (excepté Safari Mac)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Elle est aussi &lt;strong&gt;indisponible sur Chrome Desktop, même en mode &lt;q&gt;responsive&lt;/q&gt;&lt;/strong&gt; (qui n'est pas un vrai émulateur mobile, et n'est pas toujours fiable pour tester réellement)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Cette &lt;abbr title=&quot;interface de programmation&quot;&gt;API&lt;/abbr&gt; n'est &lt;strong&gt;pour l'instant supportée que par Chrome sur Android et iOS&lt;/strong&gt; (eh&amp;nbsp;!)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Sur iOS , chaque application devait prévoir sa propre liste de partage, il y a donc souvent des oublis faute de registre commun au système. C'est enfin arrangé depuis la dernière version d'iOS avec, devinez quoi&amp;nbsp;? &lt;a href=&quot;https://webkit.org/status/#feature-web-share&quot;&gt;Le support expérimental de &lt;code&gt;&lt;strong&gt;navigator&lt;/strong&gt;.share&lt;/code&gt;&lt;/a&gt;&amp;nbsp;!&lt;/li&gt;
&lt;li&gt;Il n'est &lt;strong&gt;pas possible pour un service en ligne accédé via le navigateur de s'inscrire&lt;/strong&gt;, &lt;a href=&quot;https://github.com/WICG/web-share-target&quot;&gt;tant que l'API Web Share Target&lt;/a&gt; n'est implémentée nulle part (et si elle l'est, il sera impératif de demander l'autorisation à l'utilisateur par une interface de validation, afin d'éviter le spam).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Devant la volatilité des réseaux sociaux, et surtout l'arrivée &lt;a href=&quot;https://carlchenet.com/de-limportance-de-bien-choisir-son-instance-mastodon/&quot;&gt;des ruches décentralisées où un habitant est supposé pouvoir migrer facilement&lt;/a&gt; vers un autre service, il est vraiment dommage de Web Share soit si peu considéré depuis 3 ans, et cantonné que sur une plateforme. Il y a pourtant sûrement le moyen de créer une WebExtension qui fasse le taf pour les ordinateurs de bureaux.
&lt;/p&gt;
&lt;p&gt;
Alors, on m'a souvent demandé la possibilité de rajouter dans le lecteur une option de partage vers un site particulier. Ben oui, j'avais mis que Facebook et Twitter, beaucoup me reprochent de ne pas avoir mis &lt;a href=&quot;https://diasporafoundation.org/&quot;&gt;Diaspora*&lt;/a&gt;, &lt;a href=&quot;https://vk.com/&quot;&gt;VKontakte&lt;/a&gt;, &lt;a href=&quot;https://mastodon.social/about&quot;&gt;Mastodon&lt;/a&gt;, &lt;a href=&quot;http://perdu.com/&quot;&gt;etc.social.random()&lt;/a&gt; dans l'interface d'action de mon &lt;em lang=&quot;en&quot;&gt;player&lt;/em&gt;.&lt;br /&gt;
Sauf que, évidemment, &lt;strong&gt;plus on en met dans un espace délimité, plus les boutons de chaque site sont petits&lt;/strong&gt; et les services sont serrés sur une banquette large comme un écran de smartphone.  Et quoique l'on fasse, impossible de couvrir toutes les solutions de partage, même pour les sites spécialisés, ne serait-ce que pour une raison évidente&amp;nbsp;: &lt;strong&gt;Chaque jour naissent de nouveaux sites.&lt;/strong&gt;
&lt;/p&gt;


&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/805-SocialBookmarkingBadges.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Et du coup, je ressors du même billet précédent cette image à l'humour douteux. .
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
À revoir cette illustration, on remarque immédiatement que nombre de ces services &lt;q&gt;sociaux&lt;/q&gt; ont disparu dans les 10&amp;nbsp;ans. Et qu'un tel foisonnement rend la page totalement illisible.
&lt;/p&gt;

&lt;h3 id=&quot;the_tweet&quot; lang=&quot;en&quot;&gt;The tweet&lt;/h3&gt;

&lt;p&gt;
Donc si je met pas les services dans le code du composant, peut-être pourrais-je créer une &lt;abbr title=&quot;interface de programmation&quot;&gt;API&lt;/abbr&gt; pour que l'intégrateur puisse en rajouter&amp;nbsp;?
&lt;/p&gt;
&lt;blockquote&gt;
­— HIN ! HIN ! &lt;a href=&quot;https://www.youtube.com/watch?v=Q4FamibkUH4&quot;&gt;&lt;strong&gt;F.B.I. Fausse Bonne Idée !&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
— Hein ? Quoi ? &lt;a href=&quot;https://dascritch.net/post/2019/06/05/Retravailler-un-lecteur-web-audio-dans-les-petites-largeurs#jog_shuttle&quot;&gt;Encore ?&lt;/a&gt;&lt;br /&gt;
­— Ben oui, je ne m'en lasse pas.
&lt;/blockquote&gt;
&lt;p&gt;
Car cette possibilité induirait un autre problème&amp;nbsp;: elle laisse le travail &lt;strong&gt;à la charge de celui qui intègrera le composant sur son site&lt;/strong&gt;, ce qui induit le prérequis qu'il s'y connaisse en &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt; et &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/master/API.md&quot;&gt;&lt;strong&gt;qu'il lise la doc de mon &lt;abbr title=&quot;interface de programmation&quot;&gt;API&lt;/abbr&gt;&lt;/strong&gt;&lt;/a&gt;. Je vous connais bande de petits coquinous&amp;nbsp;: même avec un &lt;abbr title=&quot;Mais lisez donc la documentation, rah !&quot;&gt;RTFM&lt;/abbr&gt;, vous ne le faites jamais.&lt;br /&gt;
Et évidemment, invariablement, l'opérateur du site oubliera d'autres sites de partage.
&lt;/p&gt;
&lt;p&gt;
Cela induisait aussi d'inclure des paramètres par l'intégrateur qui pouvaient poser soucis&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;intégrer une couleur en l'injectant via l'attribut &lt;code&gt;style=&quot;&lt;em&gt;background-color&lt;/em&gt;&quot;&lt;/code&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;intégrer un logo monochrome en &lt;a href=&quot;https://dascritch.net/tag/svg&quot;&gt;SVG&lt;/a&gt;, et on est obligé d'être monochrome à cause de l'inversion de couleur au &lt;code&gt;:hover&lt;/code&gt; et &lt;code&gt;:focus&lt;/code&gt;, sans compter le pari que l'image soit ajustée aux contraintes de mon canvas et que l'intégrateur n'aura pas mis de js embarqué quelconque&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;intégrer un motif d'URL où renvoyer pour le service ciblé, à condition qu'une telle URL existe.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Oui, je pense à vous, les sites de partages sur réseaux sociaux qui n'ont pas de possibilité d'enregistrer par un lien simple. Souvent par volonté d'obliger leurs utilisateurs de passer par une appli mobile native bourrée de traceurs publicitaires.
&lt;/p&gt;

&lt;h3 id=&quot;ben_alors&quot; lang=&quot;en&quot;&gt;Ben alors, on fait rien ?&lt;/h3&gt;
&lt;p&gt;
Je ne sais quoi vous dire…
&lt;/p&gt;
&lt;p&gt;
Pour l'instant, je fais une &lt;em lang=&quot;en&quot;&gt;feature detection&lt;/em&gt;, qui fait que les boutons vers facebook, twitter et e-mail sont remplacés par un bouton unique lançant la fonction &lt;code&gt;&lt;strong&gt;navigator&lt;/strong&gt;.share()&lt;/code&gt;. Une solution qui n'apparait uniquement que sur Chrome Android et Safari.
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-interfacewebshare.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Le panneau d'actions, avec le bouton unique lançant &lt;code&gt;&lt;strong&gt;navigator&lt;/strong&gt;.share()&lt;/code&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;



&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-effet-safari-mac.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Capture d'écran sur Safari Mac par Hadrien Lanneau. La fonction ouvre un menu contextuel à la position de la souris.
&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;
Et pour les autres, oui, &lt;strong&gt;construire une WebExtension &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt; serait une bonne idée&lt;/strong&gt; (dans une version plus générique et sans jQuery que &lt;a href=&quot;https://shgysk8zer0.github.io/posts/javascript/2017/10/19/web-share-api/&quot;&gt;web-share-api de C. Zuber&lt;/a&gt;). À condition que les sites de partage participent au mouvement sans vouloir y embarquer du script &lt;q&gt;analytics&lt;/q&gt; de traçage publicitaire.
&lt;/p&gt;
&lt;p&gt;
Personnellement, je pense que la meilleure interface possible pour inscrire un site de partage en plus dans son navigateur est de reprendre &lt;a href=&quot;https://support.mozilla.org/fr/kb/ajouter-ou-supprimer-un-moteur-de-recherche-dans-firefox&quot;&gt;ce qui existe déjà pour ajouter un moteur de recherche.&lt;/a&gt; Parce que cette interface est propre, elle est explicite, elle est standardisée, et les évolutions à y faire apporter ne sont pas énormes.
&lt;/p&gt;
&lt;p&gt;
Pour la réalisation, à vous de tenter, je ne crois pas que cela soit hyper-compliqué, et ça sera toujours mieux à long terme qu'&lt;a href=&quot;https://dascritch.net/post/2008/05/28/Bookmark-moi-cette-page&quot;&gt;un antique script à la AddThis.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Et en attendant, soutenez les initiatives pour ajouter WebShare dans&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.chromestatus.com/feature/5668769141620736&quot;&gt;Chrome sur Desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mozilla/standards-positions/issues/27&quot;&gt;Firefox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Ce billet fut un poil long là aussi, et j'ai causé de code, de standard et d'implémentation, mais je pense que cela le valait, surtout que ce problème ne s'applique pas, loin de là, uniquement à mon cpu-audio.js. Prochain épisode, on va plutôt parler de &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;CSS&lt;/a&gt;, et là aussi, on parlera standard et implémentations pour… des couleurs bizaaaaaaaarres&amp;nbsp;!&lt;br /&gt;
&lt;small&gt;Si le titre vous fait peur, c'est que je tiens sûrement le titre d'un film d'horreur, et donc je me dois de sortir la réplique qui tue&amp;nbsp;:&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Prochaine épisode : &lt;a href=&quot;https://dascritch.net/post/2019/11/13/Deux-couleurs-bizarres-en-CSS&quot;&gt;Des couleurs impossibles&lt;/a&gt;
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Retravailler un lecteur web audio dans les petites largeurs</title>
		<link>https://dascritch.net/post/2019/06/05/Retravailler-un-lecteur-web-audio-dans-les-petites-largeurs</link>
		<guid isPermaLink="false">urn:md5:fd937ab4c0bc767fa6ceaa37f477846f</guid>
		<dc:date>2019-06-05T07:32:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Parce que les chiffres ne mentent pas : nous sommes de plus en plus nombreux à avoir un smartphone. (Essayez de prononcer cette phrase d'un ton concerné en public sans rire, ça vous fera l'après-midi)		&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;Parce que les chiffres ne mentent pas : nous sommes de plus en plus nombreux à avoir un smartphone. (Essayez de prononcer cette phrase d'un ton concerné en public sans rire, ça vous fera l'après-midi)&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;
Cet article est dans &lt;a href=&quot;https://dascritch.net/serie/cpu-audio&quot;&gt;la série consacrée au développement&lt;/a&gt; de la bibliothèque &lt;a  href=&quot;https://dascritch.github.io/cpu-audio/&quot;&gt;cpu-audio.js&lt;/a&gt; et documente les affres de &lt;a href=&quot;https://github.com/dascritch/cpu-audio/releases/tag/6.0&quot;&gt;sa version 6.&lt;/a&gt; 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Mettre-de-l-audio-dans-le-web-n-a-pas-%C3%A9t%C3%A9-simple&quot;&gt;Mettre de l'audio dans le web n'a pas été simple&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web&quot;&gt;Reconstruire son lecteur audio pour le web&lt;/a&gt; (sur la version 5)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Retravailler un lecteur web audio dans les petites largeurs&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2019/06/18/Le-blues-du-navigator.share&quot;&gt;Le blues du Web Share&lt;/a&gt; (&lt;a href=&quot;https://dascritch.net/post/2019/06/26/We-need-Web-Share&quot;&gt;english version&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2019/11/13/Deux-couleurs-bizarres-en-CSS&quot;&gt;Deux couleurs bizarres en CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2021/04/28/cpu-audio.js-enfin-en-7.0&quot;&gt;cpu-audio.js enfin en 7.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tout-terrain WebVTT pour de l'audio&lt;/li&gt;
&lt;li&gt;Dichotomie entre podcast et web sur l'audience&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Et cet article est long, car &lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web&quot;&gt;comme le premier, je tiens à documenter ma démarche.&lt;/a&gt; Et comme j'aborderais plusieurs thématiques, vous aurez plusieurs épisodes. Vous pouvez tester l'application ici ↓ dans sa &lt;em&gt;version de travail en cours.&lt;/em&gt;
&lt;/p&gt;

&lt;cpu-audio title=&quot;Extrait de la performance “La Radio du Bout de la Nuit”&quot;&gt;
&lt;strong&gt;&lt;a href=&quot;https://dascritch.net&quot;&gt;Pour lire ce billet, il est conseiller d'aller sur mon site dascritch.net. Si vous lisez ce texte, c'est que probablement vous n'y êtes pas.&lt;/a&gt;&lt;/strong&gt;
	&lt;audio controls src=&quot;https://dascritch.net/vrac/Emissions/Speciales/podcast/1009-LaRadioDuBoutDeLaNuit.mp3&quot;&gt;
	&lt;/audio&gt;
&lt;/cpu-audio&gt;
&lt;p&gt;
	&lt;small&gt;&lt;a href=&quot;http://www.printempsdeseptembre.com/fr/le-festival/avant/2011/la-radio-du-bout-de-la-nuit/757&quot;&gt;Performance de Jean-Yves Jouannais et le Chevalier de Rinchy avec Kinou et DJ No Breakfast lors du festival Printemps de Septembre 2010, tous droits réservés &lt;/a&gt;.&lt;/small&gt;
&lt;/p&gt; 

&lt;p&gt;
Avant d'entrer dans le vif du sujet, je rappelle que &lt;strong&gt;je ne suis pas &lt;em lang=&quot;en&quot;&gt; web-designer&lt;/em&gt;, mais un développeur d'applications web&lt;/strong&gt; et que je n'ai qu'un minimum de bagages pour construire un &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt; faisant office de &lt;em lang=&quot;en&quot;&gt;player&lt;/em&gt; audio. Que &lt;strong&gt;ce composant a été écrit afin de l'intégrer &lt;a href=&quot;http://cpu.pm&quot;&gt;dans un site d'une émission radio&lt;/a&gt;, ceci dans le but de lier et de lire des sonores&lt;/strong&gt; &lt;a href=&quot;https://cpu.dascritch.net/category/Programmes&quot;&gt;qui durent en moyenne une bonne heure&lt;/a&gt;. La &lt;a href=&quot;https://cpu.dascritch.net/post/2017/12/14/Ex0069-How-deep-learning-is-your-love&quot;&gt;plus longue des émissions de CPU dure 5h30&lt;/a&gt;, un exemple &lt;abbr title=&quot;pas franchement recommandé devant un public prude, mineur ou non-consentant&quot;&gt;NSFW&lt;/abbr&gt; qui montre à l'extrême les contraintes. 
&lt;/p&gt;
&lt;p&gt;
J'ai qu'un minimum de culture en design, mais j'ai eu la chance d'avoir fréquenté depuis 2000 des designers web (des vrais) qui étaient exigeants et m'ont beaucoup appris à &lt;del&gt;coups de b&lt;/del&gt; la dure.
&lt;/p&gt;

&lt;h3 id=&quot;petit_poche_gros_contrainte&quot;&gt;Petits dans la poche, gros dans les contraintes&lt;/h3&gt;

&lt;p&gt;
L'un des gros gros chantiers évolutifs de &lt;a href=&quot;https://dascritch.github.io/cpu-audio/&quot;&gt;CPU-Audio.js&lt;/a&gt; pour cette version fut la mise au point d'une interface confortable pour les smartphones.
&lt;/p&gt;
&lt;p&gt;
Par rapport à ceux dits &lt;q&gt;de bureau&lt;/q&gt;, on a sur ce type d'ordinateurs deux problématiques supplémentaires&amp;nbsp;:
&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Un écran nettement plus petit,&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;un dispositif de pointage bien moins précis.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Voici la comparaison avec mon &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt; sur mon propre blog dans sa version de Janvier 2019, tel que vu sur un ordinateur de bureau (1920&amp;nbsp;px de large) avec un pointeur de souris.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-pointer-ordinateur.png&quot; alt=&quot;&quot; /&gt;
    &lt;figcaption&gt;la souris a une précision au pixel et son curseur ne cache pas tout l'environnement immédiat&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
… et le même composant, mais vu sur un smartphone d'une largeur de 320&amp;nbsp;px (virtuels, résolution typique d'un iPhone&amp;nbsp;5 en mode portrait, &lt;a href=&quot;http://dpi.lv/&quot;&gt;en fait l'écran fait dans les 1080&amp;nbsp;pixels physiques&lt;/a&gt;, mais expliquer &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/resolution#dpi&quot;&gt;les &lt;code&gt;dppx&lt;/code&gt; dans la foulée serait trop long&lt;/a&gt;).&lt;br /&gt;
Le disque rouge est une simulation l'espace d'appui d'&lt;a href=&quot;https://www.atlantico.fr/decryptage/3289888/connaissez-vous-le-syndrome-du-gros-doigt--il-risque-pourtant-d-affecter-de-plus-en-plus-nos-vies-a-tous&quot;&gt;un gros doigt normal prompt à la bourde&lt;/a&gt;.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-pointer-smartphone.png&quot; alt=&quot;&quot; /&gt;
    &lt;figcaption&gt;environ 50&amp;nbsp;pixels de diamètre, sans compter l'imprécision dû au virage effectué par votre bus à une certaine vitesse&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
    Il existe un certain nombre de règles de bonnes pratiques pour y palier&amp;nbsp;: 
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://www.uxpin.com/studio/blog/a-hands-on-guide-to-mobile-first-design/&quot;&gt;&lt;strong&gt;&lt;em lang=&quot;en&quot;&gt;mobile first&lt;/em&gt;&lt;/strong&gt; : On présente en priorité les éléments les plus importants&lt;/a&gt; de la fonctionnalité voulue&amp;nbsp;;&lt;/li&gt;
    &lt;li&gt;On aménage des &lt;strong&gt;zones cliquables suffisamment grandes et espacées&lt;/strong&gt;&amp;nbsp;;&lt;/li&gt;
    &lt;li&gt;Le composant doit s'afficher très très vite, et donc &lt;strong&gt;avoir un code très léger avec le moins de dépendances&lt;/strong&gt; possibles, si possible aucune&amp;nbsp;;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://www.alsacreations.com/article/lire/1615-cest-quoi-le-responsive-web-design.html&quot;&gt;&lt;strong&gt;&lt;em lang=&quot;en&quot;&gt;Responsive Web Design&lt;/em&gt;&lt;/strong&gt; (&lt;abbr&gt;RWD&lt;/abbr&gt;) : On ajoute l'accessoire quand on a plus de largeur&lt;/a&gt; disponible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
J'étais déjà parti avec &lt;a href=&quot;https://learn.onemonth.com/responsive-vs-adaptive-vs-fluid-design/&quot;&gt;un design liquide (ou &lt;q&gt;fluide&lt;/q&gt; ou &lt;q&gt;coulant&lt;/q&gt;)&lt;/a&gt; pour être le plus confortable, dans l'idée que mon composant puisse être intégré quels que soient les choix sur le design du &lt;em lang=&quot;en&quot;&gt;layout&lt;/em&gt; des sites. Pour la légèreté, je tente de maintenir le code compilé sous les 50&amp;nbsp;kB, même s'il a pris 20% de poids en plus entre la v5 et la v6.
&lt;/p&gt;
&lt;p&gt;
Mais il y avait encore quelques manques dans &lt;a href=&quot;https://github.com/dascritch/cpu-audio/releases/tag/5.4&quot;&gt;la version 5&lt;/a&gt; pour que mon &lt;em lang=&quot;en&quot;&gt;player&lt;/em&gt; audio soit vraiment confortable à utiliser sur smartphones.
&lt;/p&gt;

&lt;h3 id=&quot;soucis_en_def&quot;&gt;Et déjà un premier souci avec les CSS &lt;em lang=&quot;en&quot;&gt;media queries breakpoints&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;
Car effectivement, il est possible de cibler des définitions &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;CSS&lt;/a&gt; par des règles &lt;em lang=&quot;en&quot;&gt;media queries&lt;/em&gt; qui s'activent en fonction de la largeur de l'écran ou de la finesse de l'afficheur physique (via l'unité de ratio &lt;code&gt;dppx&lt;/code&gt; évoquée plus haut entre parenthèses, oui je sais, ça fait lourd à lire tous ces apartés). Pour les définitions en fonction de la largeur d'écran, cela revient à définir un &lt;em lang=&quot;en&quot;&gt;breakpoint&lt;/em&gt;, une dimension critique d'une &lt;em lang=&quot;en&quot;&gt;media query&lt;/em&gt; ou le chouïa qui fait changer l'aspect, des propriétés peuvent changer plus ou moins radicalement. J'ai choisi cette stratégie car c'est la plus pratique pour une conception en design liquide.
&lt;/p&gt;
&lt;p&gt;
Mais il y a un gros problème dans l'idée de concevoir un &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt; installable partout&amp;nbsp;: Il n'est pas possible d'appliquer lesdites règles en fonction de l'espace disponible dans un élément parent en pur CSS. C'est faisable &lt;a href=&quot;https://webdesign.tutsplus.com/articles/the-current-state-of-element-queries--cms-29690&quot;&gt;mais avec des &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt; en &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt; particulièrement lourdingues&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Je m'explique : Si l'écran est d'une largeur d'écran de bureau (&lt;a href=&quot;https://www.youtube.com/watch?v=hUxRkuL_LMU&quot;&gt;vers 2000 et au-delàààààà&lt;/a&gt;), mais qu'un intégrateur installe mon composant sur un site, dans une gouttière qui fait 320&amp;nbsp;pixels de large, l'aspect de mon composant ne sera pas adapté car les boutons seront trop gros, et par exemple pour les titres, ils ne rentreront pas dedans.&lt;br /&gt;
Autre exemple : supposons que la mise en forme du site est entre un bloc principal à largeur variable, et une colonne à taille fixe de 200&amp;nbsp;pixels. Si le lecteur est dans le bloc principal, il serait logique qu'il change de forme pour une largeur inférieure à 320&amp;nbsp;pixels quand la fenêtre tombe en dessous de 520&amp;nbsp;pixels…
&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;@media (max-width: &lt;em&gt;320px&lt;/em&gt;) {
    dommage, hein ?
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;
Tommy Hodgins a fait une proposition auprès du W3C qui me serait super utile et totalement indiquée dans mon cas&amp;nbsp;: Les &lt;a href=&quot;https://tomhodgins.github.io/element-queries-spec/element-queries.html&quot;&gt;&lt;strong&gt;CSS Element Queries&lt;/strong&gt; qui proposent de définir en &lt;em lang=&quot;en&quot;&gt;breakpoints&lt;/em&gt; la dimension d'un élément englobant&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
La proposition CSS Element Queries permettrait de définir des règles appliquées &lt;q&gt;si la largeur de l'écran fait 320&amp;nbsp;pixels ou moins ou que l'élément &lt;code&gt;#conteneur&lt;/code&gt; a une largeur de 320&amp;nbsp;pixels ou moins&lt;/q&gt;&amp;nbsp;:
&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;@media (max-width: &lt;em&gt;320px&lt;/em&gt;) , @element #conteneur and (max-width: &lt;em&gt;320px&lt;/em&gt;) {
    J'en rêve, mais j'en rêve ! &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/5/src/scoped.css#L409&quot;&gt;(c'est déjà dans mon code)&lt;/a&gt;
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;
Hélas, cette proposition ne semble pas être au programme du CSS &lt;em lang=&quot;en&quot;&gt;working group&lt;/em&gt; du W3C et donc pas près d'être implémentée nativement. Et évidemment, tout &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt; est lourd, même avec l'arrivée prochaine de l'API &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver&quot;&gt;ResizeObserver&lt;/a&gt;. &lt;br /&gt;
Pourquoi ? Imaginez que vous chargez 4 ou 5 &lt;em lang=&quot;en&quot;&gt;web components&lt;/em&gt; dans la même philosophie de conception, qui chacune lance son &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt;… Ouais, évitez le &lt;em lang=&quot;en&quot;&gt;CSS-in-JS&lt;/em&gt; dans ce cas-là&amp;nbsp;: vous risquez de ne plus rien contrôler correctement.
&lt;/p&gt;

&lt;p&gt;
Autre frustration&amp;nbsp;: il n'est pas possible d'utiliser des variables CSS pour définir des &lt;em lang=&quot;en&quot;&gt;breakpoints&lt;/em&gt;, des changements de résolutions significatifs. Dans mon projet, &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/master/src/scoped.css&quot;&gt;le style est défini est dans une CSS locale&lt;/a&gt;, tandis que &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/master/src/global.css&quot;&gt;les variables reparamétrables par l'utilisateur sont dans une CSS globale&lt;/a&gt;, normalement, toutes les variables qui intéressent les graphistes sont dans la CSS globale… sauf ce qui défini les &lt;em lang=&quot;en&quot;&gt;breakpoints&lt;/em&gt;&amp;nbsp;!&lt;br /&gt;
C'est pour ça qu'&lt;a href=&quot;https://github.com/dascritch/cpu-audio/issues/51&quot;&gt;ils sont codés en dur à 640&amp;nbsp;px, 480&amp;nbsp;px et 320&amp;nbsp;px&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Pourquoi une telle frustration&amp;nbsp;? En fait, ce manque est intentionnel&amp;nbsp;: les variables sont justement variables selon les usages et leur définition, pouvant vite devenir un casse-tête pour les navigateurs web à recalculer dans un &lt;em lang=&quot;en&quot;&gt;media query&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
Et on pourrait aussi avoir des… maladresses genre&amp;nbsp;: 
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;var&gt;--largeur&lt;/var&gt; : &lt;em&gt;1000px&lt;/em&gt;;
@media (max-width: var(&lt;var&gt;--largeur&lt;/var&gt;)) {
    &lt;var&gt;--largeur&lt;/var&gt; : &lt;em&gt;500px&lt;/em&gt;;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;a href=&quot;https://knowyourmeme.com/memes/do-want-do-not-want&quot;&gt;&lt;q lang=&quot;en-CN&quot;&gt;Do not want&lt;/q&gt;&lt;/a&gt; comme on dit dans le secteur.
&lt;/p&gt;

&lt;p&gt;
Il tourne actuellement au W3C une autre proposition, &lt;a href=&quot;https://drafts.csswg.org/css-env-1/#env-function&quot;&gt;définir des &lt;strong&gt;constantes CSS d'environnement&lt;/strong&gt;&lt;/a&gt; définissant des informations pour l'ensemble du document. Ces constantes peuvent être définies par le système hôte, le navigateur web ou dans la &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;CSS&lt;/a&gt; (et on imagine, idéalement sur le sélecteur &lt;code&gt;:root&lt;/code&gt;).&lt;br /&gt;
À leur appel en lecture, ces constantes peuvent prendre un paramètre optionnel qui sert de &lt;em lang=&quot;en&quot;&gt;fallback&lt;/em&gt;. L'invariance de la valeur représentée en quelqu'endroit du &lt;a href=&quot;https://dascritch.net/tag/dom&quot;&gt;DOM&lt;/a&gt; le rend alors utilisable pour définir un &lt;em lang=&quot;en&quot;&gt;breakpoint&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
Là aussi l'idée est géniale, et le dossier semble un poil plus avancé, &lt;a href=&quot;https://caniuse.com/#feat=css-env-function&quot;&gt;l'implémentation native étant satisfaisante&lt;/a&gt; pour être jugée comme générale l'année prochaine. On a la lecture, pas encore la déclaration
&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;&lt;var&gt;:root {
    --largeur&lt;/var&gt; : &lt;em&gt;1000px&lt;/em&gt;;
}

@media (max-width: env(&lt;var&gt;--largeur&lt;/var&gt;, 320px)) {
    ooooh ouuuuiiiii
}&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;comme_un_porc&quot;&gt;&lt;em lang=&quot;en&quot;&gt;breakpoint&lt;/em&gt; sur un élément, comme on peut, comme un porc&lt;/h3&gt;

&lt;p&gt;
Dans l'immédiat, &lt;a href=&quot;https://dascritch.github.io/cpu-audio/FEATURES&quot;&gt;je suis arrivé à le faire sur le mini-site de présentation du projet&lt;/a&gt; &lt;q&gt;grâce&lt;/q&gt; à une &lt;q&gt;astuce&lt;/q&gt; limite du crade à faire &lt;a href=&quot;https://dascritch.net/post/2013/03/26/Dirty-Hacky-%3A-je-parse-en-HTML-.357-SW&quot;&gt;dégainer l'Inspecteur Dirty Hacky&lt;/a&gt;
&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-hack-iframe.png&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-hack-iframe_m.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;Pièce à conviction n°1, faites entrer l'accusé&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
&lt;a href=&quot;https://github.com/dascritch/cpu-audio/blame/5.4/FEATURES.md#L28&quot;&gt;J'ai utilisé&lt;/a&gt; des &lt;code&gt;&amp;lt;&lt;strong&gt;iframe&lt;/strong&gt;&amp;gt;&lt;/code&gt;. Et pourquoi est-ce crade&amp;nbsp;? 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il faut créer une ressource indépendant pour chaque instance appelée, ici 3 documents html de plus&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Évidemment, il faut recharger le script &lt;code&gt;cpu-audio.js&lt;/code&gt;, donc le charger et l'instancier 4 fois pour cette page&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Idem pour la feuille de style&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;On instancie 3 objets &lt;a href=&quot;https://dascritch.net/tag/dom&quot;&gt;DOM&lt;/a&gt; de page en plus, bouffant de la RAM&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;C'est impossible de faire un design liquide propre dedans sans pleurer sur certains cas&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Et on perd des fonctionnalités comme :&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web#pointer_dans_le_temps&quot;&gt;le lien avec media-fragment (c'est très très con&amp;nbsp;: &lt;strong&gt;c'est la fonction qui a motivé l'écriture de mon script&lt;/strong&gt;),&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;l'anti-cacophonie (un seul sonore lu à la fois dans la page),&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.github.io/cpu-audio/FEATURES#playlists&quot;&gt;les &lt;em lang=&quot;en&quot;&gt;playlists&lt;/em&gt;,&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;et &lt;a href=&quot;https://dascritch.github.io/cpu-audio/FEATURES#global-page-controller&quot;&gt;le contrôleur global&lt;/a&gt; (le bouton &lt;kbd&gt; ▸︎play&lt;/kbd&gt;  dans l'encart à fond noir à gauche sur ma capture) ne voit pas ces instances.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Je ne l'ai utilisé que pour faire la démo des largeurs. &lt;strong&gt;Ne faites jamais ça chez vous, les enfants&amp;nbsp;!&lt;/strong&gt;
&lt;/p&gt;

&lt;h3 id=&quot;fine_fine&quot;&gt;Le problème de la navigation fine sur une largeur fine&lt;/h3&gt;

&lt;p&gt;
Revenons sur les problèmes fonctionnels de mon &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt; sur les ordinateurs de poche.
&lt;/p&gt;
&lt;p&gt;
Le manque qui me semblait le plus gênant était de revenir en arrière d'une phrase dans un sonore d'une heure. Le lecteur peut interpréter certaines touches comme &lt;kbd&gt;←&lt;/kbd&gt; et &lt;kbd&gt;→&lt;/kbd&gt;, mais aucun smartphone n'a de clavier avec des touches fléchées depuis la mort &lt;a href=&quot;https://www.zdnet.com/product/blackberry-key2/&quot;&gt;du dernier Blackberry à touches physiques&lt;/a&gt;. Reste le positionnement au doigt &lt;del&gt;levé&lt;/del&gt; posé, et donc la navigation dite &lt;q&gt;fine&lt;/q&gt; s'y révèle imprécise.&lt;br /&gt;
Améliorer ma &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; était indispensable. 
&lt;/p&gt;

&lt;figure&gt;
&lt;figcaption&gt;Une &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; c'est ÇA&amp;nbsp;: &lt;/figcaption&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-wtf-la-time-line.png&quot; alt=&quot;&quot; /&gt;
&lt;/figure&gt;

&lt;p&gt;
N'oublions pas que mon &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt; est prévu pour être utilisé dans une page web, et qu'il a été conçu en design liquide, donc si on passe son smartphone de l'orientation portrait à paysage et que sa dimension n'est pas fixée, le visiteur gagne autant de largeur, donc de précision pour naviguer dans la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt;. Mais la prise en main me semblait toujours insuffisante.
&lt;/p&gt;

&lt;p&gt;
Dans pratiquement tous les lecteurs audios, &lt;strong&gt;la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; est à la fois un indicateur et un élément de contrôle&lt;/strong&gt; auquel on s'attend pour tout média audio ou vidéo d'une certaine durée. Elle indique à la fois la position en cours de lecture, la partie préchargée immédiatement lisible sans avoir à attendre, et permet à l'auditeur de sauter à une position. &lt;strong&gt;Plus cette &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; est large, plus le positionnement au pointeur par l'utilisateur est précis. Plus le sonore est long, moins ce positionnement est précis.&lt;/strong&gt;
&lt;br /&gt;
Je ne saurais dater son apparition, mais il me semble qu'elle est apparue avec le premier Quicktime (1991) en tant qu'adaptation de la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; des éditeurs de sons qui présentaient la forme d'onde du sonore en cours d'édition, et ceci depuis les années 1970s.
&lt;/p&gt;
&lt;p&gt;
Avant de me remettre &lt;del&gt;au redesign&lt;/del&gt; à la refactorisation de mon lecteur, et vu que moi-même je ne suis pas parfait, j'ai regardé ailleurs et essayé des applications natives sur smartphones. En me concentrant sur son comportement lors du passage d'une disposition portrait à paysage. Certains choix y sont surprenants, et pas uniquement sur les durées affichées (passée, restante ou totale).
&lt;/p&gt;

&lt;h3 id=&quot;exemples_natifs&quot;&gt;Quatre exemples de &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; en natif&lt;/h3&gt;

    &lt;p id=&quot;exemple_youtube&quot;&gt;
        L'application &lt;strong&gt;Youtube&lt;/strong&gt; l'agrandi aussi en passant en mode paysage. En mode portrait, elle utilise le maximum de largeur d'écran. 
    &lt;/p&gt;
&lt;figure&gt;
&lt;a rel=&quot;lightbox[largeur]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-podcastaddict-youtube-portrait.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-podcastaddict-youtube-portrait_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[largeur]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-podcastaddict-youtube-paysage.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-podcastaddict-youtube-paysage_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;small&gt;Mais pourquoi ai-je pris une vidéo d'&lt;a href=&quot;https://cpu.dascritch.net/category/Chroniques/Eug%C3%A8ne-r%C3%AAve&quot;&gt;Eugène Lawn&lt;/a&gt;&amp;nbsp;?&lt;/small&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

    &lt;p id=&quot;exemple_henrymp&quot;&gt;
        &lt;strong&gt;HenryMP&lt;/strong&gt;, héritier d'un excellent player audio (Appollo sur Cyanogen OS), se montre encore moins aisé&amp;nbsp;: si on décide de basculer l'écran du mode portrait au paysage.... la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; n'est pas plus grande pour autant. Frustrant.
    &lt;/p&gt;

&lt;p&gt;
J'imagine que la logique y est plus d'écouter des &lt;em lang=&quot;en&quot;&gt;singles&lt;/em&gt; d'environ 4 minutes et de mieux voir la pochette de l'album, pas forcément de naviguer dans un DJ-set de 2 heures ou dans une conférence au Collège de France
&lt;/p&gt;

&lt;figure&gt;
&lt;a rel=&quot;lightbox[largeur]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-mphenry-portrait.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-mphenry-portrait_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[largeur]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-podcastaddict-mphenry-paysage.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-podcastaddict-mphenry-paysage_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;Note : Cette application n'est plus maintenue depuis 4 ans, elle est présentée ici pour l'exemple.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p id=&quot;exemple_podcastaddict&quot;&gt;
    &lt;strong&gt;Podcast Addict&lt;/strong&gt;, qui est une excellente application orientée podcast (merci Capitaine Évidence), a quelques manques dans sa prise en main pour naviguer. En gros, si l'émission n'est pas chapitrée ou n'a pas de liens explicatifs dans son texte descriptif, on pointe sur la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; puis on utilise des boutons pour se positionner plus finement.
    &lt;/p&gt;

&lt;figure&gt;
&lt;a rel=&quot;lightbox[largeur]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-podcastaddict-page-portrait.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-podcastaddict-page-portrait_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[largeur]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-podcastaddict-page-paysage.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-podcastaddict-page-paysage_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;Dans la vue présentation d'un épisode, basculer en mode paysage étend la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;a rel=&quot;lightbox[largeur]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-podcastaddict-sonore-portrait.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-podcastaddict-sonore-portrait_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[largeur]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-podcastaddict-sonore-paysage.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-podcastaddict-sonore-paysage_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;Sauf que, petite inconsistance : sur la vue propre à un sonore, en mode paysage, la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; est… plus courte. Oups.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p  id=&quot;exemple_lescroissants&quot;&gt;
    Je termine ce tour avec &lt;a href=&quot;https://www.lescroissants.fr/&quot;&gt;une application très particulière, celle de &lt;strong&gt;Les Croissants&lt;/strong&gt;, qui propose une matinale par modules, composée en fonction de vos centres d'intérêts.&lt;/a&gt;&lt;br /&gt;
(Manque de bol : &lt;a href=&quot;https://www.lescroissants.fr/&quot;&gt;La société Les Croissants a fermé la veille de la publication programmée de cet article.&lt;/a&gt; Pas d'bol.)
&lt;/p&gt;
&lt;figure&gt;
&lt;a rel=&quot;lightbox[largeur]&quot;  href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-lescroissants.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-lescroissants_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;En haut, vous avez une vue sur l'ensemble de l'émission dans une &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; globale, et au milieu, chaque chapitre a sa propre barre de défilement, mais à la verticale, sur la gauche.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
On a certes une redite de la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; entre la vue totale (horizontale) et celle par chapitre, mais ce qui est nettement plus notable et bizarre est que la progression des &lt;em lang=&quot;en&quot;&gt;time-lines&lt;/em&gt; des chapitres n'est pas constante, puisque la hauteur de cet élément est fixe, mais que la durée peut varier (entre 3mn et 7mn). Mais ces bizarreries sont plus une signature et non gênantes à l'usage.
&lt;/p&gt;

&lt;p&gt;
On a vu quelques outils de consultation destinés au public, j'aimerais vous présenter un outil professionnel de lecture de média&amp;nbsp;:
&lt;/p&gt;


&lt;h3 id=&quot;jog_shuttle&quot;&gt;Le &lt;em lang=&quot;en&quot;&gt;jog shuttle&lt;/em&gt; du Beta SP&lt;/h3&gt; 

&lt;p&gt;
    Le magnétoscope Beta SP de Sony est avec sa cassette Betacam un engin de chantier de l'audiovisuel des années 1980s-2000s. Costaud, robuste, très cher et indispensable pour toute production de qualité. La première fois que j'ai pu en utiliser un, j'ai immédiatement adoré l'usage du bouton &lt;em lang=&quot;en&quot;&gt;jog shuttle&lt;/em&gt;&amp;nbsp;! Oui, &lt;a href=&quot;https://dascritch.net/post/2006/11/03/582-mighty-moshin-emo-rangers&quot;&gt;même en pleine &lt;q&gt;frustrajoie&lt;/q&gt;&lt;/a&gt;.
&lt;/p&gt;

&lt;figure&gt;
&lt;a rel=&quot;lightbox[largeur]&quot;  href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-beta-sp.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-beta-sp_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;

    &lt;figcaption&gt;Vous ne pouvez pas louper le &lt;em lang=&quot;en&quot;&gt;jog shuttle&lt;/em&gt;&amp;nbsp;: c'est ce gros bouton rond noir proéminent idéalement placé sous votre main droite sur le panneau inférieur.&lt;br /&gt;&lt;small&gt;&lt;a href=&quot;https://www.pinterest.com/pin/368450813255454681/&quot;&gt;Photo non créditée sur Pinterest&lt;/a&gt;&lt;/small&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Dans le mode &lt;q lang=&quot;en&quot;&gt;shuttle&lt;/q&gt; en pause ou pendant la lecture, vous pivotez le bouton rotatif, la bande défile alors vers l'avant ou l'arrière plus ou moins rapidement, entre le ralenti et l'accélération ×8 en fonction de l'angle de rotation. Relâchez, le bouton rotatif revient en position neutre.&lt;br /&gt;
&lt;strong&gt;Mais&lt;/strong&gt; si vous cliquez sur le bouton, le ressort est désactivé, et le mode de fonctionnement passe en &lt;q lang=&quot;en&quot;&gt;jog&lt;/q&gt;, où vous faites défiler les images en  tournant le bouton. Comme si vous bougiez manuellement la bobine de la bande &lt;a href=&quot;http://fr.traxmag.com/article/33539-revox-annonce-un-nouveau-magneto-a-bande-reel-to-reel&quot;&gt;sur un bon vieux &lt;em lang=&quot;en&quot;&gt;reel-to-reel&lt;/em&gt; ReVox&lt;/a&gt;, ou que vous caliez un disque vinyle (étant &lt;a href=&quot;https://www.radio-fmr.net&quot;&gt;à Radio &amp;lt;FMR&amp;gt;&lt;/a&gt;, j'ai voulu être DJ). Ce qui permet un calage à l'image près, indispensable pour le monteur vidéo.
&lt;/p&gt;
&lt;p&gt;
On a donc un outil de calage qui passe d'un clic d'un positionnement grossier au calage à l'image élémentaire. La prise en main est incroyablement intuitive une fois qu'elle vous a été montrée.
&lt;/p&gt;

&lt;figure&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/B1HGrqLQu3Q?start=102&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;
    &lt;figcaption&gt;À 1m42s, une petite démo avec un lecteur XDCam portable, mais il s'agit d'un bouton combo (voir le paragraphe suivant). &lt;a href=&quot;https://www.shutterstock.com/fr/video/clip-3103627-editor-working-on-betacam-sp-recorder-tv&quot;&gt;Pour 60€, je vous aurais intégré cette vidéo éclairante avec un vrai BetaSP&lt;/a&gt;. Et y'a celle-là &lt;a href=&quot;https://www.pond5.com/fr/stock-footage/12721187/editeur-travaille-sur-betacam-sp-enregistreur.html&quot;&gt;montrant un autre point de vue&lt;/a&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;
À noter que &lt;a href=&quot;https://www.transfert-films-dvd.com/magnetoscopes-vhs-de-salon/&quot;&gt;certains magnétoscopes très haut de gamme&lt;/a&gt; des années 1990s avaient un combo bouton central &lt;em lang=&quot;en&quot;&gt;shuttle&lt;/em&gt; rotatif et pourtour &lt;em lang=&quot;en&quot;&gt;jog&lt;/em&gt; à ressort. Peut-être fut-il utile pour &lt;a href=&quot;http://www.bitoman.net/french/bitoweb/histoire.htm&quot;&gt;monter les Sept Premiers &lt;q&gt;Bitoman&lt;/q&gt;s.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Depuis, la génération Betacam est passée.&lt;br /&gt;
Au prix de la bande, les BetaSP sont devenus des pièces de musée, et on monte au clavier et au &lt;em lang=&quot;en&quot;&gt;trackpad&lt;/em&gt;. Mais le &lt;em lang=&quot;en&quot;&gt;jog shuttle&lt;/em&gt; est resté dans cette micro-culture industrielle pour ceux qui ont connu avant l'informatisation totale du banc de montage. Pas mal de monteurs vidéos, qui ont &lt;a href=&quot;http://xahlee.info/kbd/jog_wheel_shuttle_control.html&quot;&gt;un &lt;q lang=&quot;en&quot;&gt;jog shuttle wheel&lt;/q&gt; sur leur poste de montage&lt;/a&gt;. Les &lt;a href=&quot;https://www.microsoft.com/en-us/p/surface-dial/925r551sktgn?activetab=pivot%3aoverviewtab&quot;&gt;&lt;q lang=&quot;en&quot;&gt;control knob&lt;/q&gt; prévus pour Windows&amp;nbsp;10 tels le Surface Dial&lt;/a&gt; s'en approchent mais n'ont pas le retour haptique avec ressort, si intuitif.
&lt;/p&gt;

&lt;p&gt;
Et dans les logiciels&amp;nbsp;?&lt;br /&gt;
Il me semble qu'une version (bêta&amp;nbsp;?) de QuickTime Pro avait tenté à la fin des années 1990s d'ajouter dans un panneau de son interface une molette de défilement… qui ressemblait trop furieusement au &lt;em lang=&quot;en&quot;&gt;jog-dial&lt;/em&gt;, une molette crantée cliquable que Sony incrustait absolument partout. Et quand je dis partout, ce &lt;em lang=&quot;en&quot;&gt;jog-dial&lt;/em&gt;&amp;nbsp; a été la signature des produits Sony de la fin des années 1990s&amp;nbsp;: sur &lt;a href=&quot;https://fr.audiofanzine.com/platine-md/sony/MZ-R35/&quot;&gt;les baladeurs Mini-Discs (utile pour titrer un MD, mais dont l'usage bourrait de saletés l'intérieur de mon MZ-R35)&lt;/a&gt;, &lt;a href=&quot;https://www.gsmarena.com/sony_cmd_z5-pictures-133.php&quot;&gt;le téléphone Z5 (celui de l'An 2000)&lt;/a&gt; ou encore &lt;a href=&quot;https://www.fnac.com/Sony-Clie-PEG-T625C/a1298600/w-4&quot;&gt;les PDA Clié&lt;/a&gt;. Il me semble que les designers de Sony se soient retenus pour les télés et playstations.&lt;br /&gt;
Apple a retiré l'interface avant un procès prévisible, ou peut-être en souvenir de &lt;a href=&quot;http://hallofshame.gp.co.at/qtime.htm&quot;&gt;l'échec de la molette de volume du Quicktime 4&amp;nbsp;?&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Mais je m'égare dans mes &lt;em lang=&quot;en&quot;&gt;rushes&lt;/em&gt;.&lt;br /&gt;
Alors l'idée d'un &lt;em lang=&quot;en&quot;&gt;jog shuttle dial&lt;/em&gt; est super, mais non-intuitive pour le visiteur lambda d'un site à qui il faudrait lui expliquer le manuel, or, rappelons la règle d'or du design réussi&amp;nbsp;:
&lt;/p&gt;
&lt;blockquote&gt;
&lt;strong&gt;S'il faut expliquer le fonctionnement d'une interface &lt;q&gt;grand public&lt;/q&gt;&lt;br /&gt; &amp;nbsp; &amp;nbsp; ⇒ c'est que ton design est loupé&lt;br /&gt; &amp;nbsp; &amp;nbsp; ⇒ &lt;a href=&quot;https://www.youtube.com/watch?v=Q4FamibkUH4&quot;&gt;&lt;abbr&gt;F.B.I.&lt;/abbr&gt; Fausse Bonne Idée&lt;/a&gt;.&lt;/strong&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Accessoirement, elle est aussi un poil lourd à écrire &lt;em lang=&quot;en&quot;&gt;from scratch&lt;/em&gt;. Pas infaisable, juste lourd. Et prendrait de la place sur l'écran.
&lt;/p&gt;

&lt;p&gt;
Maintenant qu'on a fait ce petit tour de l'État de l'Art pour se mettre en appétit, passons à l'action&amp;nbsp;!
&lt;/p&gt;


&lt;h3 id=&quot;bord_rond&quot;&gt;Supprimer les bords ronds&lt;/h3&gt;
&lt;p&gt;
    Un truc totalement idiot où j'ai pêché par coquetterie&amp;nbsp;: j'ai mis des bords ronds au début et à la fin de la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt;. En fait, cela rend moins facile de viser le début d'un sonore (oui, les recherches avancées ont prouvé que statistiquement, nous cherchons plus souvent à revenir au début qu'à aller dans les 5 dernières secondes d'une émission d'une heure). Donc tant pis pour les bords ronds, on revient au bon vieux rectangle.
&lt;/p&gt;

&lt;p&gt;
    Je vais prendre exemple sur mon propre blog, avec une de mes émissions actuelles qui ne dure qu'une heure&amp;nbsp;: Sur 320&amp;nbsp;pixels de large, le &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt; fait 291&amp;nbsp;pixels de large à cause de la mise en page. 
    &lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-timeline-bords-ronds.png&quot; alt=&quot;&quot; /&gt;
    &lt;figcaption&gt;La &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; fait 195&amp;nbsp;pixels de large, les bords ronds en bouffent 2×4&amp;nbsp;pixels. &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
    Je me suis appliqué &lt;a href=&quot;https://www.qualiblog.fr/outils-et-methodes/la-methode-des-5-pourquoi-pour-eradiquer-vos-problemes/&quot;&gt;la &lt;q&gt;Règle des Cinq Pourquois&lt;/q&gt; pour chercher la vraie raison&lt;/a&gt; de ma décision graphique. Alors, euuuuuh… &lt;small&gt;&lt;q&gt;les bords ronds sont moins agressifs&lt;/q&gt;, &lt;small&gt;&lt;q&gt;parce qu'il y a trop de rectangles&lt;/q&gt;, &lt;small&gt;&lt;q&gt;&lt;a href=&quot;https://hightech.bfmtv.com/smartphone/forme-rectangle-aux-coins-arrondis-appartient-a-apple-379106.html&quot;&gt;Steve Jobs a inventé les rectangles arrondis&lt;/a&gt;&lt;/q&gt;&lt;/small&gt;&lt;/small&gt;&lt;/small&gt;… Au final, &lt;strong&gt;j'avais mis ces bords ronds sans aucune raison valable&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
Bon ben, &lt;strong&gt;on vire&amp;nbsp;!&lt;/strong&gt;
&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-timeline-entre-boutons.png&quot; alt=&quot;&quot; /&gt;
    &lt;figcaption&gt;À 18&amp;nbsp;secondes par pixels pour un sonore d'une heure, cela faisait 2'27&quot; rabotées par pure coquetterie, et non pas par design.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
    Parce que, oui, il faut se rappeler que &lt;strong&gt;le design n'est pas qu'une question de couleurs et de formes mais surtout de praticité pour tous.&lt;/strong&gt; Faire du décor ne suffit pas et n'est pas du design.
    &lt;/p&gt;

&lt;h3 id=&quot;agrandir_timeline&quot;&gt;Agrandir la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;
Passer de la souris à la précision d'un pixel sur un écran de 52&amp;nbsp;cm de large (1920&amp;nbsp;px soit 96&amp;nbsp;dpi) à un écran tactile de 8&amp;nbsp;cm de large (1080&amp;nbsp;px soit 400&amp;nbsp;dpi, plus qu'un album de bd&amp;nbsp;!) avec la précision d'un gros pouce… inutile de dire que sur smartphones, une telle précision peut entrainer autant de dégâts collatéraux qu'une &lt;q&gt;guerre chirurgicale&lt;/q&gt;. Et cette imprécision devient de plus en plus problématique quand on a mis en ligne un podcast qui dure une heure (&lt;a href=&quot;https://cpu.dascritch.net/post/2017/12/14/Ex0069-How-deep-learning-is-your-love&quot;&gt;voire 5h30&lt;/a&gt;), rendant encore plus problématique un bête besoin comme celui de revenir d'une minute en arrière dans une interview.
&lt;/p&gt;
&lt;p&gt;
Il était évident que garder la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; contrainte entre les deux boutons &lt;kbd&gt;▸︎play/⏸︎pause&lt;/kbd&gt; et &lt;kbd&gt;action&lt;/kbd&gt; n'était pas une super idée graphique&amp;nbsp;: Je perdais environ 2×48&amp;nbsp;px en largeur disponible, ce qui n'est pas négligeable quand on a moins de 320&amp;nbsp;px de large.
&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-timeline-entre-boutons.png&quot; alt=&quot;&quot; /&gt;
    &lt;figcaption&gt;Pour reprendre l'exemple de mon blog, la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; fait 195&amp;nbsp;pixels de large soit 18&amp;nbsp;secondes par pixel pour un sonore d'une heure&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt; Il m'a fallu jouer une fugue en CSS mineure pour que cette barre bascule en-dessous de ces boutons pour gagner en largeur. Comme je voulais aussi garder l'indication des longueurs de chapitres (les lignes noires discontinues), je considère qu'elles deviennent transparentes aux actions pointeurs en dessous d'une certaine largeur d'écran, pour éviter un appui malheureux dessus.&lt;br /&gt;
Oui, si c'est conditionné avec un &lt;em leng=&quot;en&quot;&gt;breakpoint&lt;/em&gt;, c'est que j'ai utilisé &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/pointer-events&quot;&gt;une propriété CSS qui influe les interactions du curseur avec des éléments. Cette propriété qui tient de la magie vaudou mérite votre attention&lt;/a&gt;&amp;nbsp;: &lt;code&gt;pointer-events : &lt;em&gt;none&lt;/em&gt;&lt;/code&gt;;
&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-timeline-sous-boutons.png&quot; alt=&quot;&quot; /&gt;
    &lt;figcaption&gt;Retravaillée la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; fait toute la largeur du &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt;, 291&amp;nbsp;pixels de large soit 12,4&amp;nbsp;secondes par pixel pour un sonore d'une heure.&lt;br /&gt;Vous noterez aussi que les deux boutons ont perdu un poil de hauteur et que la place laissée au timecode dans la liste des chapitres est devenue élastique ce qui permet de gagner des lignes dès la première entrée.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
    Comme l'utilité d'une telle finesse est moins pressante sur de plus grandes largeurs, qui correspondent en général à des ordinateurs avec des dispositifs de pointages plus précis (le doigt occupant une fraction moins importante de l'écran, ou ayant un stylet voire la souris), la disposition entre les deux boutons revient au-delà d'une certaine largeur.
&lt;/p&gt;


&lt;h3 id=&quot;coup_oeil&quot;&gt;Deviner où l'on vise d'un coup d'œil&lt;/h3&gt;

&lt;p&gt;
On le voit sur la capture au-dessus, j'ai fait apparaitre sous la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; une indication pointilliste des chapitres. Elle existait depuis un an, mais uniquement dans les grandes largeurs. Celle-ci est désormais aussi visible sur les petites largeurs, mais il n'est pas dit que tous les utilisateurs de mon script vont penser à renseigner &lt;a href=&quot;https://www.w3.org/TR/webvtt1/&quot;&gt;un manifeste de chapitrage au format WebVTT&lt;/a&gt;. On en reparlera dans un chapitre à part, j'ai beaucoup à dire sur le sujet&amp;nbsp;; si cela vous intéresse, vous pouvez déjà &lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/chapters_editor.html&quot;&gt;vous amuser avec mon éditeur en ligne&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Pour aider visuellement à sa navigation, j'ai ajouté une fonctionnalité qui permet d'afficher l'enveloppe du son. Il s'agit d'une option, disponible via l'attribut &lt;code&gt;waveform=&quot;&quot;&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
    Pour des raisons évidentes de performances, l'image de l'enveloppe en question est pré-générée au moment de la compression du sonore en &lt;abbr&gt;PÀD&lt;/abbr&gt; (prêt à diffuser). Afin de tester la fonction et de donner un exemple fonctionnel dans ma doc, j'ai profité d'une fonction méconnue de &lt;a href=&quot;http://sox.sourceforge.net/&quot;&gt;l'utilitaire en ligne de commande &lt;code&gt;sox&lt;/code&gt;, véritable couteau suisse pour travailler du son&lt;/a&gt; avec le minimum de dépendances. Un script qu'on trouve souvent dans des chaines de publication audio industrialisées sur des serveurs de rendus.&lt;br /&gt;
&lt;small&gt;Anecdote : j'ai utilisé cet outil en 2004 pour faire des messages de répondeurs personnalisé par prénoms et pour biper des &lt;em lang=&quot;en&quot;&gt;ringback tones&lt;/em&gt;. Un script de 20 lignes permettait à des ingés son de gagner des journées de travail en supprimant des silences superflus, concaténant des sons et normalisant le rendu.&lt;/small&gt;&lt;br /&gt;
L'option pour générer ce graphique est &lt;code&gt;&lt;em&gt;spectrogram&lt;/em&gt;&lt;/code&gt;. Par rapport à la traditionnelle vue de la courbe, elle permet de mieux distinguer les voix et les musiques sur une très petite hauteur, ici 8&amp;nbsp;pixels de haut. C'est pas toujours vrai et c'est surtout un choix personnel, il est susceptible d'évoluer plus tard.
&lt;/p&gt;

&lt;figure&gt;
&lt;a rel=&quot;lightbox[largeur]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-formdonde-spectre.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/.1906-PetiteTaille-playerv5-formdonde-spectre_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;Comparaison entre une vue d'une forme d'onde (en haut, niveau sonore en ordonnée) et un spectrogramme (en bas, fréquence en ordonnée) de l'émission &lt;a href=&quot;https://cpu.dascritch.net/post/2019/04/04/Ex0107-%F0%9F%8D%BA-Bi%C3%A8re&quot;&gt;🍺 Bière&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;



&lt;h3 id=&quot;navigeur_finement&quot;&gt;Naviguer plus finement&lt;/h3&gt;

&lt;p&gt; 
    Reprenons les problématiques de la navigation sur smartphone&amp;nbsp;: L'écran est tout petit, et notre doigt est démesurément gros pour essayer de se placer précisément. Et donc nous avons toujours le problème de la navigation fine, quand on veut revenir de quelques secondes en arrière.
&lt;/p&gt;

&lt;p&gt;
J'étais parti sur l'idée qu'un appui long sur ma &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; est une tentative pour se placer finement. Ben oui, ça m'arrivait plusieurs fois d'appuyer à un endroit du player, puis de bouger délicatement mon doigt en le faisant pivoter, tout en approchant de près mon smartphone et en tirant la langue afin de contrebalancer le manque de précision… ce qui me rendait totalement idiot dans le bus.
&lt;/p&gt;

&lt;p&gt;
    AHEM&amp;nbsp;!&lt;br /&gt;
Une requête pour afficher la navigation alternative, nous disions.
&lt;/p&gt;

&lt;p&gt;
L'idée étant évidemment de &lt;a href=&quot;https://uxdesign.cc/a-comprehensive-and-honest-list-of-ux-clich%C3%A9s-96e2a08fb2e9&quot;&gt;suivre l'analogie UX de la blague de l'interface&lt;/a&gt;&amp;nbsp;: s'il faut l'expliquer à l'utilisateur, c'est que ton interface n'est pas bonne.
&lt;/p&gt;

&lt;p&gt;
j'ai mis des boutons, juste pour voir si la requête en question marchait. Mais j'avais pas forcément idée de le garder. J'avais même réfléchi à zoomer la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; avec des mouvements genre &lt;em lang=&quot;en&quot;&gt;pinch-in&lt;/em&gt;/&lt;em lang=&quot;en&quot;&gt;pinch-out&lt;/em&gt; (pincer/étendre), mais je me suis rendu compte que ce n'était ni intuitif, ni pratique, voire complètement frustrant sur iOS&amp;nbsp;: le &lt;em lang=&quot;en&quot;&gt;pinch-out&lt;/em&gt; à une certaine ampleur peut vous sortir du navigateur web pour aller vers un sélecteur d'applications (Un parti-pris d'Apple très con et totalement frustrant quand votre appli utilise le &lt;em lang=&quot;en&quot;&gt;pinch&lt;/em&gt;, justement).&lt;br /&gt;
Et comme mon &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt; a aussi pour objectif d'être repris, hors de question de risquer une contradiction parce que le site hôte a déjà son usage du &lt;em lang=&quot;en&quot;&gt;pinch-in&lt;/em&gt;/&lt;em lang=&quot;en&quot;&gt;pinch-out&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
Donc finalement, supposer qu'un appui long sur la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; est une demande explicite de l'utilisateur vers plus de précision, me semble pas trop erroné.
&lt;/p&gt;
&lt;p&gt;
Mettre des boutons &lt;kbd&gt;⏮&lt;/kbd&gt; &lt;kbd&gt;◂◂◂&lt;/kbd&gt; &lt;kbd&gt;◂◂&lt;/kbd&gt; &lt;kbd&gt;▸︎▸︎&lt;/kbd&gt; &lt;kbd&gt;▸︎▸︎▸︎&lt;/kbd&gt; semblait pas trop pourri.

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-alt-handheld-full.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
J'ai dit &lt;q&gt;semblait&lt;/q&gt;, une fois de plus, je dis pas avoir raison.
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&quot;mauvaise_surprise_time&quot;&gt;La mauvaise surprise du temps&lt;/h3&gt;


J'ai tenté de mettre une entrée de temps, utilisant un champ &lt;code&gt;&amp;lt;&lt;strong&gt;input&lt;/strong&gt; type=&quot;&lt;em&gt;time&lt;/em&gt;&quot;&amp;gt;&lt;/code&gt;, yep, icelui&amp;nbsp;: &lt;input type=&quot;time&quot; step=&quot;1&quot;&gt;. Après tout, les smartphones ont en général un excellent sélecteur de date et d'heure.
&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-chrome-android-time.png&quot; alt=&quot;&quot; /&gt;
    &lt;figcaption&gt;Le sélecteur d'heure d'Android, extrait de &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/HTML/Element/Input/time&quot;&gt;l'excellent article sur &lt;code&gt;&amp;lt;&lt;strong&gt;input&lt;/strong&gt; type=&quot;&lt;em&gt;time&lt;/em&gt;&quot;&amp;gt;&lt;/code&gt; de Mozilla Developer Network&lt;/a&gt;.&lt;br /&gt;Une chouette analogie aux &lt;q&gt;vieilles&lt;/q&gt; horloges à aiguilles, compréhensible parce que des équipes de Google (comme Microsoft, Apple et Mozilla) ont investi des milliers d'heures sur ce problème à votre place.&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;
Sauf qu'il y avait un os&amp;nbsp;! J'ai pris &lt;strong&gt;un sélecteur d'heure, faute d'avoir un sélecteur en HTML5 pour exprimer une durée&lt;/strong&gt;. Ce qui veut dire que… l'heure peut afficher au format 12&amp;nbsp;heures avec une locale américaine&amp;nbsp;! Et impossible de le &lt;q&gt;localiser&lt;/q&gt; de force avec un attribut comme &lt;code&gt;lang=&quot;&lt;em&gt;fr&lt;/em&gt;&quot;&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
Tiens, si je règle un champ &lt;em lang=&quot;en&quot;&gt;time&lt;/em&gt; à &lt;var&gt;0h1mn23s&lt;/var&gt;, dans Firefox avec l'interface paramétrée en Français, vous aurez&amp;nbsp;:
&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-firefox-locale-fr.png&quot; alt=&quot;00:01:23&quot; /&gt;
    &lt;figcaption&gt;bon là, vous m'comprenez si vous me lisez en Français&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Et avec l'interface paramétrée en Anglais Américain (en-US), qui est l'interface par défaut pour beaucoup de monde&amp;nbsp;:
&lt;/p&gt;

&lt;figure&gt;
        &lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-firefox-locale-enUS.png&quot; alt=&quot;12:01:23 AM&quot; /&gt;
    &lt;figcaption&gt;&lt;em lang=&quot;la-CUISINE&quot;&gt;&lt;a href=&quot;https://fr.wikiquote.org/wiki/Kaamelott/Loth&quot;&gt;Tempora mori, tempora mundis recorda&lt;/em&gt; comme dirait le roi de Loth&lt;/a&gt;,&lt;br /&gt;ça veut pas du tout dire la même chose, et surtout pas une durée&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
En fait, &lt;a href=&quot;https://stackoverflow.com/questions/13523060/html5-time-inputs-shows-12-hours#answer-13525154&quot;&gt;il n'y a pas de règle uniforme&lt;/a&gt; du comportement basculant entre les affichages en 12&amp;nbsp;h ou 24&amp;nbsp;h &amp;nbsp;: certains navigateurs se basent sur la langue de leur interface, d'autres celles du système d'exploitation &lt;small&gt;(heureusement, le &lt;a href=&quot;https://dascritch.net/tag/dom&quot;&gt;DOM&lt;/a&gt; expose au &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt; une représentation unique au format 24&amp;nbsp;heures, idem pour l'envoi d'un formulaire à un serveur, sinon je serais devenu fou)&lt;/small&gt;.
&lt;/p&gt;
&lt;p&gt;
J'avais le même souci &lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/chapters_editor.html&quot;&gt;dans mon éditeur de chapitrage&lt;/a&gt; puisqu'il utilisait le même type de champ. Pour le résoudre, il &lt;q&gt;suffirait&lt;/q&gt; &lt;a href=&quot;https://github.com/dascritch/cpu-audio/issues/63 &quot;&gt;d'écrire un &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt; d'affichage&lt;/a&gt; agissant sur un champ &lt;code&gt;&amp;lt;&lt;strong&gt;input&lt;/strong&gt; type=&quot;&lt;em&gt;time&lt;/em&gt;&quot;&amp;gt;&lt;/code&gt; caché… ouaip, ça craint.&lt;br /&gt;
Ben j'ai écrit une mécanique différente.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;En résumé, pour un champ natif de durée, il manque&lt;/strong&gt; :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;soit un type de champ&lt;/strong&gt; &lt;code&gt;&amp;lt;&lt;strong&gt;input&lt;/strong&gt;&amp;gt;&lt;/code&gt; pour gérer la durée, une décision à prendre au niveau du W3C&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;soit le respect de la propriété &lt;code&gt;lang=&quot;&quot;&lt;/code&gt; dans les contrôles&lt;/strong&gt;, ce qui peut être implémenté par les navigateurs mais peut poser des soucis d'UX&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;soit la possibilité de styliser un champ &lt;code&gt;&amp;lt;input type=&quot;&lt;em&gt;time&lt;/em&gt;&quot;&amp;gt;&lt;/code&gt;&lt;/strong&gt; dans sa présentation et son interface pour basculer entre les modes 12 et 24&amp;nbsp;heures, une décision qui peut être testée par les navigateurs &lt;a href=&quot;https://dascritch.net/post/2013/10/02/Dirty-Hacky-VIII-%3A-Pr%C3%A9fixes-frelat%C3%A9s&quot;&gt;par une propriété CSS préfixée expérimentale&lt;/a&gt; avant standardisation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Néanmoins, je n'étais pas satisfait de cette navigation alternative.
&lt;/p&gt;

&lt;h3 id=&quot;enfer_petits_details&quot;&gt;L'enfer des petits détails&lt;/h3&gt;

&lt;p&gt;
La barre de navigation alternative apparaît quand on clique plus de 400&amp;nbsp;ms&amp;nbsp;: au-delà, Chrome sur Android et surtout l'affreux iOS considèrent que l'utilisateur veut une autre fonction, genre sélectionner du texte. Alors qu'on a déjà désactivé la sélection de texte. Le pire étant iOS qui va lancer un sélecteur d'application qui n'a rien à voir.&lt;br/ &gt;
À noter que pour les ordinateurs de bureau, il est possible de l'afficher en faisant un clic droit à la souris sur la &lt;em lang=&quot;en&quot;&gt;time-line&lt;/em&gt; (la fonction normale est disponible en combinaison avec &lt;kbd&gt;⇧Shift&lt;/kbd&gt;).
&lt;/p&gt;

&lt;figure&gt;
        &lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-alt-handheld-small.png&quot; alt=&quot;&quot; /&gt;
    &lt;figcaption&gt;Voilà où en était mon brouillon, que j'ai finalement gardé. Ici en faisant abstraction du champ &lt;code&gt;&lt;strong&gt;input&lt;/strong&gt; type=&quot;&lt;em&gt;time&lt;/em&gt;&quot;&lt;/code&gt; pour ne pas plus vous distraire avec…&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Pour être le plus standard possible, j'ai créé des boutons &lt;kbd&gt;◂◂&lt;/kbd&gt; et &lt;kbd&gt;▸︎▸︎&lt;/kbd&gt;, calqués sur les appuis de touches &lt;kbd&gt;←&lt;/kbd&gt; et &lt;kbd&gt;→&lt;/kbd&gt; tels qu'interprétés dans mon &lt;em lang=&quot;en&quot;&gt;web component&lt;/em&gt; (faisant des sauts de 5&amp;nbsp;secondes, durée paramétrable) , ainsi que &lt;kbd&gt;⏮&lt;/kbd&gt; sur la touche &lt;kbd&gt;↖&lt;/kbd&gt;. Puis j'ai ajouté &lt;kbd&gt;◂◂◂&lt;/kbd&gt; et &lt;kbd&gt;▸︎▸︎▸︎&lt;/kbd&gt;, qui font comme &lt;kbd&gt;◂◂&lt;/kbd&gt; et &lt;kbd&gt;▸︎▸︎&lt;/kbd&gt;, mais répétés 4 fois.
&lt;/p&gt;
&lt;p&gt;
J'ai tenté ce sélecteur, mais design liquide oblige, j'étais obligé de cacher certains boutons qui me semblaient moins &lt;q&gt;utiles&lt;/q&gt;, d'un usage moins fréquent. notamment &lt;kbd&gt;◂◂&lt;/kbd&gt;, &lt;small&gt;un choix décidé grâce à une technique scientifique de pifométrie, ce qui une fois de plus, vaut ce qu'il vaut et que je n'ai pas forcément eu raison.&lt;/small&gt;
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-petiteslargeurs/1906-PetiteTaille-playerv5-alt-handheld-smallest.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Dans la plus petite largeur recommandée (320&amp;nbsp;px de large, soit un iPhone 5 en portrait), on a l'essentiel &lt;q&gt;utilisable&lt;/q&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Mais ces boutons étaient câblés sur l'événement &lt;code&gt;click&lt;/code&gt; (clic de souris). Vous cliquez, l'avance se fera. Une fois. Ça serait cool de rajouter la répétition, non&amp;nbsp;? Tant que vous ne relâchez pas, l'action continue au même rythme. 
&lt;/p&gt;
&lt;p&gt;
Donc au final, j'ai dû écrire un gestionnaire d'appui-long/répétition pour 4 boutons, avec un mode de fonctionnement proche d'un clavier de bureau&amp;nbsp;: Une première attente (400&amp;nbsp;ms) avant de commencer à répéter, puis répéter l'action sur des intervalles nettement plus courts (100&amp;nbsp;ms). Des durées paramétrables par le site, car je déteste les constantes &lt;q&gt;magiques&lt;/q&gt; au milieu du code, et pour qu'un webmaster qui n'aime pas les réglages puisse faire mumuse avec, comme ça, il se sentira plus fort.&lt;br /&gt;
&lt;small&gt;Ouarf.&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
Peut-être pouvait-on faire une accélération de l'avancée en fonction du temps qu'on appuie sur le bouton, mais je ne suis pas sûr qu'un tel système à accélération progressive soit pratique.
&lt;/p&gt;

&lt;h3 id=&quot;reference_obligee&quot;&gt;Bref…&lt;/h3&gt;
&lt;p&gt;
&lt;em lang=&quot;la&quot;&gt;In fine&lt;/em&gt;, j'ai travaillé les fonctionnalités sur mon lecteur audio pour qu'il soit aussi pratique à utiliser sur un ordinateur &lt;q&gt;de bureau&lt;/q&gt; que sur smartphone.
&lt;/p&gt;
&lt;p&gt;
Je ne garantis rien. Maintenant reste le plus difficile : en faire autant sur la navigation fine pour l'accessibilité.
&lt;/p&gt;

&lt;p&gt;
En plus de la navigation fine, il faudrait aussi parler du chapitrage audio, mais le sujet est très vaste, il interviendra après qu'on ait &lt;a href=&quot;https://dascritch.net/post/2019/06/18/Le-blues-du-navigator.share&quot;&gt;parlé de Web Share&lt;/a&gt;...
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>En 20 lignes pas plus : Le focus sur le champ de recherche</title>
		<link>https://dascritch.net/post/2018/08/17/En-20-lignes-pas-plus-%3A-Le-focus-sur-le-champ-de-recherche</link>
		<guid isPermaLink="false">urn:md5:0295e2f606fc0628f68ed664c9baafec</guid>
		<dc:date>2018-08-17T13:42:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Tout est une question d'accessibilité, donc de praticité de votre site web : moins y'a de clics, mieux c'est.		&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;Tout est une question d'accessibilité, donc de praticité de votre site web : moins y'a de clics, mieux c'est.&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://cpu.pm&quot;&gt;Le site de mon émission CPU&lt;/a&gt; me demande parfois bien du temps pour résoudre des problèmes. Des problèmes d'interactions, des problèmes d'aspects ou d'accessibilité. Et pas uniquement parce que je fais ça sur mon temps de loisir, mais aussi parce qu'il vient &lt;em&gt;après&lt;/em&gt; l'objectif de publication hebdo de mon émission, laquelle émission demande énormément de temps de préparation. Alors certes, je pourrais d'autant plus déléguer que &lt;a href=&quot;https://github.com/dascritch/cpu-15&quot;&gt;je publie le source du thème Dotclear modifié&lt;/a&gt;, mais je fais aussi mes sites web pour acquérir de l'expérience, voire pour expérimenter.
&lt;/p&gt;
&lt;p&gt;
Le problème dont je vais vous parler aujourd'hui, j'étais persuadé que j'allais le résoudre avec des &lt;a href=&quot;https://dascritch.net/tag/html&quot;&gt;déclarations HTML&lt;/a&gt; et du &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;stylage CSS&lt;/a&gt;. Cela me semblait évident.
&lt;/p&gt;
&lt;p&gt;
Et en fait, non.
&lt;/p&gt;
&lt;h3 id=&quot;vous_etes_ici&quot;&gt;Vous êtes ici&lt;/h3&gt;
&lt;p&gt;
Dans le site de CPU, comme pour la plupart des sites à contenus, comporte 3 grandes régions fonctionnelles&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il y a un &lt;em lang=&quot;en&quot;&gt;layout&lt;/em&gt; de présentation générale&lt;small&gt;, qui se veut minimaliste&lt;/small&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;une partie centrale de contenu, &lt;small&gt;qui est l'intérêt de votre passage sur mon site, normalement ;)&lt;/small&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;et une partie secondaire de navigation &lt;small&gt;censée permettre au visiteur de farfouiller dans le site si icelui l'intéresse (on peut toujours rêver)&lt;/small&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1808-Cpu-Focus/1808-cpu-focus-layout.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Les 3 zones, dans une résolution confortable de bureau.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Cette partie secondaire se présente en &lt;em lang=&quot;en&quot;&gt;sidebar&lt;/em&gt; si la largeur du navigateur le permet, sinon, elle est tout en bas de page, parce que je suis un fanatique du &lt;a href=&quot;https://www.alsacreations.com/article/lire/1615-cest-quoi-le-responsive-web-design.html&quot;&gt;&lt;em lang=&quot;en&quot;&gt;liquid responsive web-design&lt;/em&gt;&lt;/a&gt;. Peut-être que cette partie de navigation secondaire est trop présente et qu'il faille alléger son contenu, mais le débat n'est pas là.
&lt;/p&gt;
&lt;p&gt;
La partie &lt;em lang=&quot;en&quot;&gt;layout&lt;/em&gt; comporte un entête du site, un bandeau horizontal dont la hauteur est limité au logo de l'émission, et qui &lt;a href=&quot;https://forum.alsacreations.com/topic-4-80151-1-A-propos-de-la-position-sticky.html&quot;&gt;reste fixe en scrollant (merci &lt;code&gt;&lt;strong&gt;display&lt;/strong&gt; : &lt;em&gt;sticky&lt;/em&gt;&lt;/code&gt;)&lt;/a&gt;. Et comporte aussi une ligne de navigation rapide en 5 segments qui chapeaute le contenu et la navigation secondaire, laquelle disparait normalement en défilant. 
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1808-Cpu-Focus/1808-cpu-focus-header.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Le header, la navigation rapide, et un exemple de contenu précédé de sa navigation contextuelle&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;problematique&quot;&gt;La problématique&lt;/h3&gt;
&lt;p&gt;
Ce qui m'intéresse, c'est mon lien &lt;q&gt;Chercher&lt;/q&gt;, qui est un lien interne à la page et doit renvoyer sur le champ de recherche texte, lequel est situé dans la navigation secondaire. Et ce que je veux, c'est qu'en cliquant dessus, on voit le champ de recherche et qu'il aie le focus, pour qu'on n'aie plus qu'à rentrer des mots clés.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1808-Cpu-Focus/1808-cpu-focus-lien-ideal.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Je veux ça : Le champ de recherche visible, avec le focus.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Seulement, quand on cible un élément avec une ancre dans un lien, suivre celui-ci est censé faire ne sorte que l'élément entre dans la partie visible du viewport, et autant que possible, les navigateurs le mettront en haut à gauche. Et c'est pas le cas à cause de notre entête &lt;em lang=&quot;en&quot;&gt;sticky&lt;/em&gt; qui cache le champ.
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1808-Cpu-Focus/1808-cpu-focus-lien-par-defaut.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Du coup, on ne voit pas le champ texte. C'est ballot.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Note pour les experts : Cela aurait mérité de regarder comment se comporte &lt;a href=&quot;https://caniuse.com/#feat=scrollintoview&quot;&gt;la méthode &lt;code&gt;Element.ScrollIntoView()&lt;/code&gt;&lt;/a&gt; et la toute nouvelle &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/API/Intersection_Observer_API&quot;&gt;API IntersectionObserver&lt;/a&gt;.
&lt;/p&gt;

&lt;h3 id=&quot;dexter_lab&quot;&gt;Le laboratoire de Dexter&lt;/h3&gt;
&lt;p&gt;
Donc, je me suis dit, tentons en appliquant une marge sur l'élément, pour qu'il sorte de sous le header. 
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1808-Cpu-Focus/1808-cpu-focus-input-margin-top.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;&lt;code&gt;#q { […] &lt;strong&gt;margin-top&lt;/strong&gt; : &lt;em&gt;100px;&lt;/em&gt;;  }&lt;/code&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Sauf que : 1, c'est moche, le bouton &lt;q&gt;OK&lt;/q&gt; se déforme, et 2, c'est inutile car le navigateur place l'élément sur le coin haut-gauche de son bord. excluant la marge.
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1808-Cpu-Focus/1808-cpu-focus-boxmodel.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;du coup, le navigateur fera en sorte que le &lt;q lang=&quot;en&quot;&gt;border&lt;/q&gt; soit collé en haut à gauche, mettant &lt;q lang=&quot;en&quot;&gt;margin&lt;/q&gt; hors limites.&lt;/figcaption&gt;
&lt;/figure&gt;

Donc, je me suis dit, &lt;q&gt;appliquons les translations&lt;/q&gt;… pour voir…

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1808-Cpu-Focus/1808-cpu-focus-translation.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;&lt;code&gt;#q { […] &lt;strong&gt;transform&lt;/strong&gt; : &lt;em&gt;translateY(&lt;em&gt;200px&lt;/em&gt;)&lt;/em&gt;;  }&lt;/code&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Ha ben oui, j'ai vu : ça fait effectivement le job, mais il faut alors appliquer tout un bazar pour décaler l'ensemble des autres éléments. On commence à entrer &lt;a href=&quot;https://dascritch.net/post/2013/03/26/Dirty-Hacky-%3A-je-parse-en-HTML-.357-SW&quot;&gt;dans des crâderies qui feraient dégainer l'Inspecteur Dirty Hacky&lt;/a&gt;. Et il aurait raison tellement que ça pue.&lt;br /&gt;
Et puis, même si j'y serais arrivé, il faudrait toute la patience d'un vrai spécialiste CSS pour tout me remettre d'équerre. Donc, &lt;a href=&quot;https://youtu.be/shi6I6mkJAk?t=4m34s&quot;&gt;&lt;q&gt;&lt;abbr&gt;FBI&lt;/abbr&gt;&amp;nbsp;: Fausse Bonne Idée&lt;/q&gt;&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Il existe une autre méthode, celle d'&lt;a href=&quot;http://nicolasgallagher.com/jump-links-and-viewport-positioning/&quot;&gt;utiliser le pseudo-element &lt;code&gt;:before&lt;/code&gt;, et du coup de lui appliquer une translation.&lt;/a&gt; Alors oui, cela marche, mais là aussi, j'ai un problème&amp;nbsp;: le code n'a rien d'élégant à mes yeux.
&lt;/p&gt;


&lt;p&gt;
Il y a &lt;a href=&quot;https://css-tricks.com/introducing-css-scroll-snap-points/&quot;&gt;un ensemble de propriétés CSS, scroll-snap points&lt;/a&gt;, qui semblaient intéressante, mais absolument pas pour ce que je voulais. L'idée est plus de faire une sorte de pagination et toucher le nirvâna du &lt;em lang=&quot;en&quot;&gt;smooth-scrolling&lt;/em&gt; natif, ou, comme dans la démo du lien, faire des diapositives pour une présentation.&lt;br /&gt;
Note pour les experts, encore : &lt;a href=&quot;https://www.w3.org/TR/css-scroll-snap-1/&quot;&gt;le standard est encore en état de brouillon&lt;/a&gt; mais &lt;a href=&quot;https://caniuse.com/#feat=css-snappoints&quot;&gt;sa couverture commence à être correcte&lt;/a&gt; pour envisager de remplacer &lt;a href=&quot;https://framablog.org/2013/11/06/revealjs-alternative-libre-powerpoint/&quot;&gt;Reveal.JS&lt;/a&gt; EDIT : &lt;a href=&quot;https://www.nicolas-hoffmann.net/source/1712-Creer-un-RevealJS-light-avec-CSS-Scroll-Snap-Points.html&quot;&gt;Cela a été fait par l'immense Nicolas Hoffmann. Je suis confus.&lt;/a&gt;
&lt;/p&gt;

&lt;h3 id=&quot;le_truc&quot;&gt;Le truc&lt;/h3&gt;
&lt;p&gt;
Le truc n'est pas de cibler l'ancre de l'&lt;code&gt;&amp;lt;&lt;strong&gt;input&lt;/strong&gt;&amp;gt;&lt;/code&gt;, mais de son propre &lt;code&gt;&amp;lt;&lt;strong&gt;label&lt;/strong&gt;&amp;gt;&lt;/code&gt;, lequel a un &lt;code&gt;padding-top&lt;/code&gt; confortable. Parce que vous avez été propre, et que vous avez positionné l'attribut &lt;code&gt;for=&lt;/code&gt; pour lier le label à son champ, ce qui permet qu'en cliquant sur ce label, le champ prenne le focus clavier.
&lt;/p&gt;

&lt;blockquote&gt;&lt;code&gt;
&amp;lt;&lt;strong&gt;form&lt;/strong&gt; […]&amp;gt;&lt;br /&gt;
&amp;nbsp;  &amp;lt;&lt;strong&gt;label&lt;/strong&gt; for=&quot;&lt;em&gt;q&lt;/em&gt;&quot; id=&quot;&lt;em&gt;search&lt;/em&gt;&quot;&amp;gt;Chercher avec un mot&amp;lt;/&lt;strong&gt;label&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;&lt;strong&gt;fieldset&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;&lt;strong&gt;input&lt;/strong&gt; type=&quot;&lt;em&gt;search&lt;/em&gt;&quot; id=&quot;&lt;em&gt;q&lt;/em&gt;&quot; name=&quot;&lt;em&gt;q&lt;/em&gt;&quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;&lt;strong&gt;button&lt;/strong&gt; type=&quot;&lt;em&gt;submit&lt;/em&gt;&quot;&amp;gt;ok&amp;lt;/&lt;strong&gt;button&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;/&lt;strong&gt;fieldset&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;lt;/&lt;strong&gt;form&lt;/strong&gt;&amp;gt;
&lt;/code&gt;&lt;/blockquote&gt;

&lt;p&gt;
 Le problème, c'est qu'&lt;strong&gt;aucun navigateur ne songe à passer le focus&lt;/strong&gt; au champ &lt;code&gt;&amp;lt;&lt;strong&gt;input&lt;/strong&gt;&amp;gt;&lt;/code&gt; quand vous ciblez son &lt;code&gt;&amp;lt;&lt;strong&gt;label&lt;/strong&gt;&amp;gt;&lt;/code&gt;, ce qui est &lt;strong&gt;un comble en manière d'accessibilité&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
En fait, j'ai même remarqué que Firefox ne donnait même pas le focus quand on ciblait directement &lt;code&gt;&amp;lt;&lt;strong&gt;input&lt;/strong&gt;&amp;gt;&lt;/code&gt;, et j'en suis resté stupéfait &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1484185&quot;&gt;J'ai ouvert un rapport bugzilla&lt;/a&gt; où vous trouverez &lt;a href=&quot;https://bug1484185.bmoattachments.org/attachment.cgi?id=9001953&quot;&gt;un &lt;em lang=&quot;en&quot;&gt;test-case&lt;/em&gt;.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Du coup, j'ai dû écrire un petit &lt;em lang=&quot;en&quot;&gt;snippet&lt;/em&gt; javascript de ce qui pourrait bien être un &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt; pour une accessibilité évidente et &lt;em lang=&quot;en&quot;&gt;mobile first&lt;/em&gt;.
&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;

&lt;strong&gt;function&lt;/strong&gt; focus_on_label_moves_to_input() {
    let focused_on = document.getElementById(location.hash.substr(1));
    if  (focused_on === null) {
        &lt;strong&gt;return&lt;/strong&gt;;
    }
    let focus_for = focused_on.getAttribute('&lt;em&gt;for&lt;/em&gt;');
    if (focus_for === null) {
        &lt;strong&gt;return&lt;/strong&gt;;
    }
    let new_target = document.getElementById(focus_for);
    if (new_target === null) {
        &lt;strong&gt;return&lt;/strong&gt;;
    }
    new_target.focus();
}

window.addEventListener('&lt;em&gt;hashchange&lt;/em&gt;', focus_on_label_moves_to_input);

&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;h3 id=&quot;sous_le_capot&quot;&gt;Sous le capot&lt;/h3&gt;

&lt;p&gt;
L'événement &lt;code&gt;hashchange&lt;/code&gt; a lieu si vous changez la partie après le &lt;var&gt;#&lt;/var&gt; dans l'adresse d'une page, donc sur une modification du &lt;a href=&quot;https://www.w3.org/TR/html4/intro/intro.html#fragment-uri&quot;&gt;&lt;em lang=&quot;en&quot;&gt;fragment identifier&lt;/em&gt;&lt;/a&gt;. &lt;a href=&quot;https://dascritch.net/post/2014/09/03/Timecodehash-%3A-Lier-vers-un-moment-d-un-sonore&quot;&gt;J'ai déjà fait joujou avec pour cibler un temps précis&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Pour l'événement lancé, inutile de se référer à &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/API/Event&quot;&gt;un objet &lt;code&gt;event&lt;/code&gt;&lt;/a&gt;, la propriété &lt;code&gt;location.hash&lt;/code&gt; vous donnera &lt;a href=&quot;https://dascritch.net/post/2007/09/17/RIP-URL-URI-IRI-INRI-W3C&quot;&gt;la partie &lt;em lang=&quot;en&quot;&gt;hash&lt;/em&gt; (ou fragment) de votre URL&lt;/a&gt;, auquel on soustrait le premier caractère, forcément un &lt;var&gt;#&lt;/var&gt; avec un  &lt;code&gt;.substr(1)&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
On va chercher l'élément cible du label, on voit s'il a un &lt;code&gt;for=&quot;&quot;&lt;/code&gt; avec la méthode &lt;code&gt;.getAttribute('&lt;em&gt;for&lt;/em&gt;')&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
À chaque étape où on frise l'incertitude, on vérifie qu'on a bien un objet et pas rien (&lt;var&gt;null&lt;/var&gt;), sinon on &lt;code&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/code&gt; proprement, pour laisser la fonction suivante gérer l'événement. Je vous déconseille fortement de tout cacher &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/try...catch&quot;&gt;derrière un &lt;code&gt;try { } catch (e) { }&lt;/code&gt;&lt;/a&gt;&amp;nbsp;: une telle structure doit rester exceptionnelle, sinon vous aurez vite d'immonde plats de spaghettis.
&lt;/p&gt;
&lt;p&gt;
À la fin, on crée un événement &lt;code&gt;&lt;em&gt;focus&lt;/em&gt;&lt;/code&gt; en invoquant simplement la méthode &lt;code&gt;.focus()&lt;/code&gt; de l'élément DOM du champ de recherche, parce que construire un &lt;em lang=&quot;en&quot;&gt;trigger&lt;/em&gt; d'un &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/Events/focus&quot;&gt;focus&lt;/a&gt;, j'avais grave la flemme&amp;nbsp;: il était 3h30 passées.
&lt;/p&gt;
&lt;p&gt;
Moralité : ça fait le taf et le code n'est pas affreux.
&lt;/p&gt;


&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1808-Cpu-Focus/.1808-cpu-focus-final_m.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;C'était tout ce que je voulais. C'était si compliqué que ça ?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Bonus : le code est suffisament générique pour servir pour tout champ de formulaire : login, entrée de commentaire, formulaire d'adresse ou &lt;em lang=&quot;en&quot;&gt;fishing&lt;/em&gt; de carte-bleue. 
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Firefox, l'invisible</title>
		<link>https://dascritch.net/post/2017/01/12/Firefox%2C-l-invisible</link>
		<guid isPermaLink="false">urn:md5:58ea069231657ddaba7379efc17a78d8</guid>
		<dc:date>2017-01-12T06:26:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Est-ce que le navigateur Firefox n'aurait pas une audience sous-estimée ? Pourquoi ? Et si certains se contentaient de chiffres d'audience biaisés ?		&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;Est-ce que le navigateur Firefox n'aurait pas une audience sous-estimée ? Pourquoi ? Et si certains se contentaient de chiffres d'audience biaisés ?&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/1701-FirefoxInvisible/.1701-FirefoxInvisible-FFblueprint_square_s.jpg&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;

&lt;p&gt;
Mon discours sera un peu long. Il n'est pas étayé de chiffres, mais si quelqu'un veut étayer mon hypothèse, je lui donne les éléments qui lui permettrait de faire l'analyse. Seule condition, il faut les logs serveurs d'un site qui a une audience significative.
&lt;/p&gt;

&lt;h3 id=&quot;publicite_sur_le_web&quot;&gt;Parlons de la publicité sur le web&lt;/h3&gt;
&lt;p&gt;
C'est un fait, &lt;strong&gt;la publicité est devenue incontrôlable&lt;/strong&gt;, au point que &lt;a href=&quot;http://adage.com/article/digitalnext/ad-blocking-unnecessary-internet-apocalypse/300470/&quot;&gt;même l'IAB, l'association des publicitaires sur internet, reconnait que ces abus sont devenus dangereux&lt;/a&gt; pour leur secteur économique&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;La publicité est devenue trop distractive&lt;/strong&gt; entre les animations, les couleurs criardes, le son voire la vidéo. Apparaissant des fois en plein milieu du contenu alors qu'on déroule un article, elle donne plus envie de fuir que de persévérer&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Elle a pris ses aises avec le support et &lt;strong&gt;se substitue au contenu du site&lt;/strong&gt;, avec des encarts en &lt;em lang=&quot;en&quot;&gt;pop-over&lt;/em&gt;, &lt;em lang=&quot;en&quot;&gt;pop-under&lt;/em&gt;, des vidéos en &lt;em lang=&quot;en&quot;&gt;pre-roll&lt;/em&gt;…&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les publicités sont extrêmement lourdes&lt;/strong&gt; à charger et à jouer. On frise parfois le délire avec des spots vidéos en HD pas optimisées, des polices de caractères dépassant la dizaine de Mo, un &lt;q&gt;contenu&lt;/q&gt; 600 fois plus lourd que le reste de la page, impactant la réactivité du navigateur, les performances de l'ordinateur et l'autonomie de la batterie. Une machine qui peut faire tourner un FPS sans sourciller devient brusquement un veau en allant lire un article d'un quotidien&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Le javascript des encarts est souvent de mauvaise qualité et &lt;strong&gt;peut faire planter la page hôte&lt;/strong&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Elles sont très indiscrètes, &lt;a href=&quot;https://www.mozilla.org/fr/lightbeam/&quot;&gt;profilant le plus possible le visiteur, souvent au mépris des lois Européennes&lt;/a&gt;&lt;/strong&gt;. Pourquoi les quotidiens français veulent connaître ma position géographique&amp;nbsp;? Sans compter &lt;a href=&quot;https://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage&quot;&gt;une multitude de &lt;em lang=&quot;en&quot;&gt;trackers&lt;/em&gt; posés par des réseaux sociaux&lt;/a&gt;, des régies publicitaires et autres&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Les publicités posées s'affichent souvent avec retard, &lt;strong&gt;entrainant le phénomène de &lt;em lang=&quot;en&quot;&gt;reflow&lt;/em&gt; d'une page&lt;/strong&gt;. Outre leur poids, certaines régies travaillent avec un système d'enchères sur l'audience acquise, dans le but de vendre au plus cher l'écran du visiteur &lt;a href=&quot;https://borisschapira.com/2017/01/j-entre-dans-un-magasin/&quot;&gt;en fonction des intérêts qu'il a &lt;q&gt;manifestés&lt;/q&gt;&lt;/a&gt;. Résultat&amp;nbsp;: une pénalisation de la lecture par le délai d'attente, créant un effet de clignotement/déplacement de la mise en page&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Elles sont devenues &lt;strong&gt;un vecteur d'attaque très prisé pour les virus et autres logiciels malicieux&lt;/strong&gt;, et même &lt;a href=&quot;https://www.proofpoint.com/fr/threat-insight/post/home-routers-under-attack-malvertising-windows-android-devices&quot;&gt;indirectement les autres utilisateurs du réseau&lt;/a&gt;&amp;nbsp;! Le &lt;em lang=&quot;en&quot;&gt;malvertising&lt;/em&gt; joue sur le fait que des sites réputés servent du code extérieur sans aucun contrôle, et même &lt;a href=&quot;https://krebsonsecurity.com/2011/11/attemped-malvertising-on-krebsonsecurity-com/&quot;&gt;les experts sécurités peuvent se retrouver vecteurs d'infection malgré eux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Il ne faut donc pas  s'étonner de la part importante de personnes qui surfent sur internet avec un bloqueur de publicités, pas uniquement pour avoir un ordinateur plus réactif, ni pour protéger un minimum sa vie privée, mais carrément pour se protéger les logiciels malveillants&amp;nbsp;! 
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1701-FirefoxInvisible/1701-FirefoxInvisible-timeline-guardian.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Un exemple de taxe à la performance dû aux publicités et outils de tracking sur un article du journal Guardian, &lt;a href=&quot;https://gist.github.com/paulirish/5d52fb081b3570c81e3a&quot;&gt;relevé par Paul Irish&lt;/a&gt; dans un article où il liste les éléments forçant un &lt;em lang=&quot;en&quot;&gt;repaint&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;h3&gt;Et c'est ainsi que naquirent les filtreurs de pubs&lt;/h3&gt;

&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1701-FirefoxInvisible/.1701-FirefoxInvisible-boite-a-lettre_s.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;&lt;a href=&quot;http://www.stpo.fr/blog/operation-stickers-des-autocollants-anti-pub-gratuits-pour-votre-boite-aux-lettres/&quot;&gt;&lt;small&gt;Illustration&amp;nbsp;: Christophe Andrieu&lt;/small&gt;&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Sur internet, il ne suffit pas d'apposer un petit sticker &lt;q&gt;Pas de pubs, merci&lt;/q&gt; sur sa boîte aux lettres… une page web part d'un document HTML, de là, votre navigateur va charger ses &lt;em lang=&quot;en&quot;&gt;assets&lt;/em&gt; (&lt;a href=&quot;https://dascritch.net/post/2014/03/25/Histoires-en-img&quot;&gt;images&lt;/a&gt;, style, &lt;a href=&quot;https://dascritch.net/post/2013/09/17/Dirty-Hacky-VII-:-Le-script-des-bas-fonds&quot;&gt;scripts&lt;/a&gt;,…), et dans ces derniers sont présents les éléments publicitaires. Il faut donc trier pour pouvoir les retirer.
&lt;/p&gt;
&lt;p&gt;
À noter que le choix de ne pas charger/afficher des pubs est légale en Europe, mais réprimandable aux États-Unis. C'est même une des bases du fameux &lt;a href=&quot;https://en.wikipedia.org/wiki/Sony_Corp._of_America_v._Universal_City_Studios,_Inc.&quot;&gt;procès Betamax qui avait opposé studios de productions et fabricants de magnétoscopes&lt;/a&gt;, qui furent ravivées 30 ans après avec &lt;a href=&quot;http://mashable.com/2015/09/30/tivo-bolt/#_v.IORs2WEq5&quot;&gt;TiVo, l'enregistreur numérique  capable de sauter les pubs&lt;/a&gt;.
&lt;/p&gt;


&lt;p&gt;
D'abord, il y eu &lt;strong&gt;les filtrages écrit à la main&lt;/strong&gt; par des utilisateurs développeurs… Soit en définissant localement certains noms de domaines dans &lt;code&gt;/etc/hosts&lt;/code&gt;, soit en injectant spécifiquement des règles dans les navigateurs. 
&lt;/p&gt;

&lt;p&gt;
Puis arrivèrent &lt;strong&gt;les premières extensions de navigateurs&lt;/strong&gt;, afin de permettre à d'autres utilisateurs de profiter de la fonctionnalité.
&lt;/p&gt;

&lt;p&gt;
Puis une industrie se construisit, avec &lt;strong&gt;les filtreurs de publicités qui en ont fait un &lt;em lang=&quot;en&quot;&gt;business model&lt;/em&gt;&lt;/strong&gt;, comme Ad Block Plus, et dont le comportement est clairement prédateur, avec un chantage d'extorsion envers les régies publicitaires et les annonceurs.
&lt;/p&gt;

&lt;p&gt;
Mais maintenant, avec Firefox (et &lt;a href=&quot;https://brave.com/&quot;&gt;tout récemment Brave&lt;/a&gt;), des &lt;strong&gt;navigateurs précablent des fonctions de filtrage&lt;/strong&gt; et &lt;a href=&quot;http://donottrack.us/&quot;&gt;le signal &lt;q lang=&quot;en&quot;&gt;Do Not Track&lt;/q&gt;&lt;/a&gt;, le jeu change car il implique une décision par défaut d'utilisateurs d'un logiciel.
&lt;/p&gt;

&lt;p&gt;
Or, justement, je veux faire le parallèle avec une autre tendance, qui me semble contemporaine&amp;nbsp;: la perception de la chute d'audience des pages web vues via le navigateur Firefox.
&lt;/p&gt;

&lt;h3&gt;Apple a sa culture insulaire et a oublié le web&lt;/h3&gt;

&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1701-FirefoxInvisible/.1701-FirefoxInvisible-connect-iTunes_s.jpg&quot; alt=&quot;&quot; class=&quot;l&quot; /&gt;

&lt;p&gt;
Cette chute d'audience n'a pas été commentée pour Safari, alors qu'Apple a lui aussi largement favorisé le blocage des publicités.&lt;br /&gt;
Et pour cause&amp;nbsp;: sur l'audience des ordinateurs purs, Safari n'a jamais dépassé les 10%. Par contre, dans le domaine des tablettes et des smartphones, Apple est dans une position de force, et donc Safari en monopole dans son écosystème. Car le fabricant Apple refuse totalement qu'un autre moteur de rendu que Safari puisse être installé sur les appareils de sa marque. Je rappelle que les apps &lt;q&gt;Chrome pour iOS&lt;/q&gt; et &lt;q&gt;Firefox pour iOS&lt;/q&gt; ne sont que des recarrossages du moteur de Safari, et qu'ils en ont les mêmes limitations techniques.
&lt;/p&gt;

&lt;p&gt;
La position d'&lt;strong&gt;Apple est encore plus extrémiste que celle que s'autorisait Microsoft&lt;/strong&gt; il y a 15 ans et qui lui a pourtant valut des procès pour abus de position dominante..
&lt;/p&gt;

&lt;p&gt;
Et comme l'époque ou MSIE régnait sans partage, &lt;strong&gt;Safari est un navigateur indigent&lt;/strong&gt;, une catastrophe&amp;nbsp;: Il lui manque plein d'API du W3C, de &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;fonctions javascript&lt;/a&gt;, de &lt;a href=&quot;https://dascritch.net/tag/dom&quot;&gt;propriétés  DOM&lt;/a&gt; ou &lt;a href=&quot;https://dascritch.net/tag/svg&quot;&gt;SVG&lt;/a&gt; qui sont déjà implémentées dans Microsoft Edge. Un comble&amp;nbsp;!
&lt;/p&gt;
&lt;p&gt;
Apple a certes remis une équipe de développement sur son navigateur pour iOS9, mais le retard reste titanesque.&lt;br /&gt;
Mais est-ce que le constructeur est motivé à avoir un navigateur web dans les canons actuels&amp;nbsp;? Car la firme de Cupertino fait principalement sa marge via la vente d'applications natives sur son App Store. &lt;a href=&quot;https://blog.elao.com/fr/dev/la-revanche-du-web-par-les-progressive-web-apps/&quot;&gt;Avoir la possibilité de faire des applications à partir du navigateur web en &lt;em lang=&quot;en&quot;&gt;single page application&lt;/em&gt; ou en  &lt;em lang=&quot;en&quot;&gt;progressive web app&lt;/em&gt;&lt;/a&gt; n'est absolument pas dans l'intérêt de la firme à la Pomme. Par une culture forte de la marque (et la qualité du matériel, il faut bien l'avouer), ses consommateurs sont bien peu enclins d'aller voir ailleurs. Il reste donc très difficile de faire une application web universelle qui puisse se comparer avec les applications natives.
&lt;/p&gt;

&lt;p&gt;
D'un autre côté, sous prétexte de protection de ses usagers, &lt;a href=&quot;http://www.lefigaro.fr/secteur/high-tech/2015/06/11/32001-20150611ARTFIG00158-apple-ouvre-la-voie-aux-bloqueurs-de-publicite-sur-iphone.php&quot;&gt;Apple a autorisé les bloqueurs de publicité à être installés comme extension de Safari mobile&lt;/a&gt;. Ce qui fait réduire mécaniquement le nombre d'utilisateurs de Safari mobile dans les rapports d'audiences des sites. La situation n'est pas pour déplaire à Apple, puisqu'il entretient l'illusion que les utilisateurs préféreront toujours avoir une application native plutôt que passer par un navigateur web, et que Safari Mobile n'a strictement aucune concurrence face à qui se mesurer.&lt;br /&gt;
Alors que &lt;a href=&quot;http://www.blogdumoderateur.com/comscore-app-mobile-2016/&quot;&gt;les statistiques montrent que les applications installées sont très vites boudées&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Et puis, la publicité dans les pages web, Apple avait tenté de s'y aventurer &lt;a href=&quot;http://www.igen.fr/ios/2016/01/iad-apple-annonce-la-fermeture-de-sa-regie-publicitaire-94484&quot;&gt;en rachetant plusieurs régisseurs d'encarts et en construisant iAd&lt;/a&gt;. Mais ils n'ont pu faire jeu égal avec un mastodonte qui regroupe réseau publicitaire, outils d'analyse de trafic, profilage et surtout un écosystème mobile concurrent.
&lt;/p&gt;
&lt;p&gt;
En faisant rejeter la pub par ses afficionados, Apple attaque via le porte-monnaie &lt;a href=&quot;https://www.youtube.com/watch?v=7yeA7a0uS3A&quot;&gt;le Maître de l'Univers&lt;/a&gt; Android…
&lt;/p&gt;
&lt;h3 id=&quot;ecosysteme_google&quot;&gt;L'écosystème global de Google&lt;/h3&gt;

&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1701-FirefoxInvisible/.1701-FirefoxInvisible-Google-Ecosystem_s.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;https://shortblacktechie.com/2014/11/01/smartphone-guide-part-1-its-all-about-ecosystem/&quot;&gt;&lt;small&gt;Source&amp;nbsp;: shortblacktechie.com&lt;/small&gt;&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Google édite un navigateur, Chrome.&lt;br /&gt;
Il a gagné la bataille des &lt;em lang=&quot;en&quot;&gt;features&lt;/em&gt;, il a gagné la bataille de la vitesse avec son moteur javascript V8, il a gagné le cœur des développeurs avec son mode développeur &lt;kbd&gt;F12&lt;/kbd&gt;. Puis Google a attiré les développeurs avec d'autres technologies, notamment AngularJS (même dépassé, l'attrait existe toujours), Dart (abandonné), Polymer (qui sert de &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt; aux &lt;a href=&quot;https://www.webcomponents.org/&quot;&gt;web components&lt;/a&gt; mais avec moins de respect au standard que &lt;a href=&quot;http://bosonic.github.io/&quot;&gt;Bosonic&lt;/a&gt; les dernières fois que je les aient comparés) et Go (un langage principalement serveur)…
&lt;/p&gt;
&lt;p&gt;
Personnellement, je n'ai absolument rien contre&amp;nbsp;: Google est un acteur très important qui fait énormément de R&amp;amp;D, contribue énormément aux standards en respectant les règles, libère très souvent publiquement les sources et ses technologies web,… et moi même, je suis un grand fan de nombres d'entre elles.&lt;br /&gt;
Google est un des rares contributeurs du web à continuellement le faire avancer, tout comme la Mozilla Foundation.
&lt;/p&gt;
&lt;p&gt;
Mais &lt;strong&gt;trop de développeurs oublient de tester leurs sites ailleurs que sur Chrome&lt;/strong&gt;. Certains développeurs livrent encore &lt;a href=&quot;https://dascritch.net/post/2013/10/02/Dirty-Hacky-VIII-%3A-Pr%C3%A9fixes-frelat%C3%A9s&quot;&gt;des propriétés dans leur version expérimentales préfixées &lt;code&gt;-webkit-&lt;/code&gt;&lt;/a&gt; sans avoir vérifié que celles-ci étaient retirées de Chrome depuis plus de 2 ans. Pire que tout, j'ai vu récemment un développeur essayer sa création sur Opera pour se donner une bonne conscience… sauf qu'Opera a abandonné son propre moteur et utilise le Blink qui motorise Chrome. Bref, un coup dans l'eau.
&lt;/p&gt;
&lt;p&gt;
La plupart de ces développeurs tiers me sortent le fait que Chrome représente actuellement plus de 60% de la fréquentation de leurs sites, selon leurs chiffres d'audience.&lt;br /&gt;
Et, forcément, si leur site très riche en javascript se montre moins utilisable avec d'autres navigateurs, leur prophétie est auto-réalisatrice.
&lt;/p&gt;
&lt;p&gt;
Mais reprenons les chiffres de fréquentation. Si Google Chrome a effectivement une place de &lt;em&gt;leader&lt;/em&gt;, j'ai un doute&amp;nbsp;: celui que Google Analytics  sous-évalue les parts de marchés de Firefox.
&lt;/p&gt;
&lt;p&gt;
Et étonnement, les deux font exactement le travail qui leur a été confié en toute bonne foi.
&lt;/p&gt;
&lt;h3 id=&quot;the_mission&quot;&gt;The mission&lt;/h3&gt;
&lt;p&gt;
Par défaut, Firefox demande désormais que le trafic de son utilisateur ne soit plus pris en compte, entres autres &lt;a href=&quot;http://donottrack.us/&quot;&gt;via le signal &lt;em lang=&quot;en&quot;&gt;Do Not Track&lt;/em&gt;&lt;/a&gt;, et dans les dernières versions via une bibliothèque qui bloque par défaut les &lt;em lang=&quot;en&quot;&gt;trackers&lt;/em&gt; et les &lt;em lang=&quot;en&quot;&gt;malwares&lt;/em&gt; en se basant sur la liste maintenue par &lt;a href=&quot;https://github.com/gorhill/uBlock/&quot;&gt;uBlock Origin&lt;/a&gt;. D'ailleurs, &lt;a href=&quot;about:addons&quot;&gt;en accédant aux paramètres des &lt;em lang=&quot;en&quot;&gt;add-ons&lt;/em&gt;&lt;/a&gt;, c'est la deuxième suggestion proposée, après un thème graphique, et il démarre sans redémarrer l'application. 
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1701-FirefoxInvisible/.1701-FirefoxInvisible-addons-firefox_m.jpg&quot; alt=&quot;&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
Google tente à l'inverse de tracer au mieux les usages de son navigateur, les liant au plus vite nativement avec les identités de ses utilisateurs. Avoir Chrome qui ne remonte pas par défaut son trafic vers Google Analytics est contre-productif pour Google, surtout que leur source principale de revenus est leur régie publicitaire. (Et je ne parle pas du fait qu'il n'est pas possible d'empêcher un &lt;em lang=&quot;en&quot;&gt;tracker&lt;/em&gt; d'audience faire son travail dans une application native)
&lt;/p&gt;
&lt;p&gt;
Voilà pourquoi j'en suis venu à la conclusion que la position dominante de Chrome dans le statistiques d'usage me semble un poil sur-évaluée, et Google n'est évidemment pas bien pressé de corriger les chiffres qui sont en sa faveur.
&lt;/p&gt;

&lt;h3 id=&quot;bref&quot;&gt;Bref, j'abandonne l'audience-turfing&lt;/h3&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1701-FirefoxInvisible/.1701-FirefoxInvisible-analytics-turfing_s.jpg&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;
&lt;p&gt;
J'ai (enfin) viré Google Analytics de mon blog.
&lt;/p&gt;
&lt;p&gt;
Depuis plusieurs mois, voyant une certaine dissymétrie entre les visites de Firefox relevées dans mes logs apache et ce qu'il me rapporte, ses chiffres ne me semblaient plus assez exacts. Ils me rappelle le flou &lt;a href=&quot;http://www.michelleblanc.com/2006/12/19/ce-blogue-sous-les-100000-d-alexa/#comment-2151&quot;&gt;des chiffres de la Alexa Toolbar à ses hautes heures il y a une décennie&lt;/a&gt;, laquelle ne comptabilisait que le trafic des utilisateurs anglophones sous Windows...&lt;br /&gt;
Analyser quels sont les sujets qui intéressent le plus les gens qui viennent me lire, c'était grisant il y a 10 ans, mais comme je ne fais pas une activité commerciale de mon blog, il y a peu d'intérêt (sinon le bonus supposé d'indexation dans le moteur de recherche Google)
&lt;/p&gt;
&lt;p&gt;
Alors certes, je gardais Google Analytics pour faire des démonstrations de traçage publicitaire aux &lt;a href=&quot;https://dascritch.net/post/2014/05/07/Je-suis-un-Bagger&quot;&gt;&lt;em lang=&quot;en&quot;&gt;Brown Bag Lunch&lt;/em&gt; vie privée&lt;/a&gt; et des &lt;a href=&quot;https://dascritch.net/tag/privacy&quot;&gt;cryptoparties&lt;/a&gt;,… Mais finalement, je faisais rarement ces démonstrations.
&lt;/p&gt;
&lt;p&gt;
De plus, &lt;a href=&quot;https://www.optimizesmart.com/geek-guide-removing-referrer-spam-google-analytics/&quot;&gt;les rapports de Google Analytics sont de plus en plus encombrés par les &lt;em lang=&quot;en&quot;&gt;spam-referrer&lt;/em&gt;&lt;/a&gt;, au point d'avoir des résultats de moins en moins précis.
&lt;/p&gt;

&lt;figure&gt;
&lt;figcaption&gt;
Je déconne à peine&amp;nbsp;: dans mes statistiques par langue de navigateur, j'ai 20% de pollution avec des entrées qui ne sont clairement pas &lt;a href=&quot;http://data.okfn.org/data/core/language-codes#resource-ietf-language-tags&quot;&gt;au format IETF&lt;/a&gt;. Le tableau a été édité pour mieux voir les déchets.
&lt;/figcaption&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1701-FirefoxInvisible/1701-FirefoxInvisible-GoogleAnalytics-langue.jpg&quot; alt=&quot;&quot; /&gt;
&lt;/figure&gt;


&lt;h3 id=&quot;verifier&quot;&gt;Comment vérifier cette intuition&lt;/h3&gt;
&lt;p&gt;
Sur cette idée que Firefox (et sûrement aussi Brave et Safari) sont sous-estimés par les outils d'analyse de trafic, j'ai regardé mes logs de serveur web, mais l'audience de mon site est beaucoup trop typé et anecdotique pour être une mesure concluante.
&lt;/p&gt;
&lt;p&gt;
Si vous comptez vérifier de votre côté, sachez qu'il va falloir pas mal travailler dans le filtrage des données de vos logs&amp;nbsp;:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Il faudrait un site qui enregistre selon plusieurs outils de mesures (Piwik et Google Analytics), au moins 500 visites quotidiennes.&lt;/li&gt;
&lt;li&gt;Filtrez les IP des administrateurs (et donc la votre, on compte pas, c'est tricher)&lt;/li&gt;
&lt;li&gt;À partir des logs du serveur web, isoler les visites qui semblent réelles&amp;nbsp;: les chargement de pages canoniques (donc écartez les miroirs, les repompeurs et les lecteurs de flux rss), accédées par le verbe &lt;code&gt;GET&lt;/code&gt;, accompagnées du chargement d'&lt;em lang=&quot;en&quot;&gt;assets&lt;/em&gt; statiques (CSS, js, webfonts, svg, images) et dynamiques (si vous chargez des éléments en asynchrone, par exemple lors de &lt;code&gt;DOMContentLoaded&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Écartez les &lt;em lang=&quot;en&quot;&gt;user-agent&lt;/em&gt; qui annoncent clairement un &lt;em lang=&quot;en&quot;&gt;bot&lt;/em&gt; ou un &lt;em lang=&quot;en&quot;&gt;crawler&lt;/em&gt; (on ne sait jamais, si un vous a échappé).&lt;/li&gt;
&lt;li&gt;À partir du &lt;em lang=&quot;en&quot;&gt;user-agent&lt;/em&gt;, comptabiliser chaque navigateur&lt;/li&gt;
&lt;li&gt;Et de là, vous aurez des métriques à comparer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Si en termes de proportion, la différence est flagrante, vous saurez quoi penser des chiffres analytics.
&lt;/p&gt;
&lt;h3 id=&quot;recommandations&quot;&gt;Si j'avais des recommandations&lt;/h3&gt;
&lt;p&gt;
Apple relance timidement le développement de Safari, qui reste le navigateur &lt;q&gt;moderne&lt;/q&gt; le plus en retard. Il faut l'encourager dans cette voie en refaisant &lt;strong&gt;un procès pour abus de position dominante&lt;/strong&gt;. Si vous êtes propriétaire de votre ordinateur, vous avez le droit d'installer n'importe quel logiciel. Et vous êtes bien propriétaire de votre smartphone, non&amp;nbsp;? Forcer Apple à accepter que ses clients puissent avoir le choix d'un autre navigateur web, indépendamment des moteurs de rendus vieillissants &lt;em&gt;webkit&lt;/em&gt;. Qu'enfin nous puissions construire des web-apps complètes qui tournent aussi sur iPhone. Songez que Firefox sur Android est capable &lt;a href=&quot;https://github.com/autonome/aframe-ar&quot;&gt;d'incrustation 3D sur une image de caméra&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Ensuite, La publicité est très utile pour les contenus gratuits, mais elle est devenue un vrai fléau. Il faut libérer de la dictature de la publicité certains sites, en s'y abonnant. Oui, &lt;strong&gt;reconnaissez la valeur de ce que vous utilisez gratuitement&lt;/strong&gt;. Abonnez-vous à &lt;a href=&quot;https://lapresselibre.fr/&quot;&gt;la Presse Libre&lt;/a&gt; pour mutualiser des abonnements (Ou laissez &lt;a href=&quot;http://mediapart.fr&quot;&gt;La Moustache vous hypnotiser&lt;/a&gt;), soutenez Wikipédia, et donnez aux projets open-source. &lt;a href=&quot;https://brave.com/publishers.html&quot;&gt;Le navigateur Brave propose de filtrer les publicités, et en contrepartie de centraliser des abonnements&lt;/a&gt;. Si vous utilisez régulièrement un service, reconnaissez-en le prix. (et je ne dis pas ça &lt;a href=&quot;https://dascritch.net/post/2014/06/11/Merci-%C3%A0-vous%2C-vils-Flattr-s&quot;&gt;pour mon compte Flattr&amp;nbsp;: il n'a connu des versements que quatre mois&lt;/a&gt;).
&lt;/p&gt;
&lt;o&gt;
Et enfin, &lt;strong&gt;n'utilisez pas le même navigateur&lt;/strong&gt; que &lt;q&gt;tout le monde&lt;/q&gt;. Sinon, nous allons revenir vers &lt;a href=&quot;https://dascritch.net/post/2006/10/13/562-la-seconde-guerre-du-web-n-aura-pas-lieu&quot;&gt;les mêmes travers que l'époque où MSIE avait gagné une guerre&lt;/a&gt;&amp;nbsp;: une monoculture et la perte d'interopérabilité du web. Ça serait dommage.
&lt;/p&gt;

&lt;h3 id=&quot;stop_ou_encore&quot;&gt;Alors&amp;nbsp;? Stop ou encore&amp;nbsp;?&lt;/h3&gt;

&lt;p class=&quot;c&quot;&gt;
Soutenons le web que nous voulons.&lt;br /&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1701-FirefoxInvisible/1701-FirefoxInvisible-browsers.jpg&quot; alt=&quot;&quot; /&gt;
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>CPU Ex0045 Bonjour à toi, Enfant du Futur immédiat : Sans les yeux</title>
		<link>https://dascritch.net/post/2016/12/09/CPU-Ex0045-Bonjour-%C3%A0-toi%2C-Enfant-du-Futur-imm%C3%A9diat-%3A-Sans-les-yeux</link>
		<guid isPermaLink="false">urn:md5:a62a34632ea4a8afe9242e6e372d9023</guid>
		<dc:date>2016-12-09T06:45:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Radio</dc:subject>
        
    <description>Une émission qui a été très éprouvante à cause du chat dans la gorge. Et n'ayant pu enregistrer un reportage sur un utilisateur de synthèse vocale, j'ai téléchargé Pico, le moteur de la synthèse vocale d'Android, pour lire mon texte à ma place. Le programme a été intégralement pigé par Stéphane Deschamps sur la page de l'émission, milles mercis à lui.		&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;Une émission qui a été très éprouvante à cause du chat dans la gorge. Et n'ayant pu enregistrer un reportage sur un utilisateur de synthèse vocale, j'ai téléchargé Pico, le moteur de la synthèse vocale d'Android, pour lire mon texte à ma place. Le programme a été intégralement pigé par Stéphane Deschamps sur la page de l'émission, milles mercis à lui.&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;
&lt;a href=&quot;https://cpu.dascritch.net/post/2016/12/08/Ex0045-Sans-regarder&quot;&gt;Ceci est une partie du script de la &lt;em lang=&quot;en&quot;&gt;release&lt;/em&gt; Ex0045 du programme CPU, diffusé le Jeudi 8/12 à 11h. Plus d'infos sur le site de l'émission. &lt;img src=&quot;https://dascritch.net/vrac/.blog2/radio/cpu_logo_liseret.png&quot; alt=&quot;logo de l'émission CPU&quot; class=&quot;r&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Bonjour à toi, enfant du futur immédiat, toi qui n'a peut-être pas eu la chance de découvrir la clarté quand tu as ouvert tes yeux sur le monde.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.corps.dufouraubin.com/sens/sens.htm&quot;&gt;De nos sens&lt;/a&gt;, celui qui semble le plus essentiel à la majorité des humains, est &lt;a href=&quot;http://www.giaa-aquitaine.fr/aveugle-ou-malvoyant-les-questions-que-vous-vous-posez/&quot;&gt;la vue&lt;/a&gt;. La vision permet de percevoir notre environnement lointain, même au-delà de notre atmosphère. C'est notre sens le plus exact, au sens qu'un événement distant observé est précisément orienté et à peu près placé dans l'espace.&lt;br /&gt;
Perdre ou manquer l'usage de ses yeux pose un sacré handicap pour percevoir le monde, plus que la perte de la sensation du goût sucré ou de l'ironie. 
&lt;/p&gt;
&lt;p&gt;
Alors oui, &lt;a href=&quot;https://cpu.dascritch.net/post/2016/11/03/Ex0041-Couleurs&quot;&gt;récemment, nous avons fait une émission sur les couleurs&lt;/a&gt;. Aujourd'hui, pas de couleurs, ni de noir et blanc. Rien. Zilch. Nada. Pendant une heure , tu n'auras que du son, de la radio pure.
&lt;/p&gt;
&lt;p&gt;
L'ingéniosité de notre cerveau l'amène à développer les autres sens pour compenser l'absence de la vue. Les aveugles peuvent être des super-héros. Non, je ne pense pas forcément à Daredevil, rien n'est moins sexy que &lt;del&gt;Matt Damon&lt;/del&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=LmP3YFk_YHA&quot;&gt;Ben Affleck obligé de cachetonner sur grand écran dans un nanar&lt;/a&gt; histoire de payer ses impôts... Bon, allez, je reconnais que &lt;a href=&quot;https://www.youtube.com/watch?v=jAy6NJ_D5vU&quot;&gt;la série actuelle m'a tapé dans l'œil&lt;/a&gt;, mais revenons à nos non-voyants.
&lt;/p&gt;
&lt;p&gt;
Le pouvoir le plus intéressant que développent par la force des choses les personnes malvoyantes est dans la concentration : les technologies assistives qu'on leur a créé sont imparfaites pour donner une vision globale d'un écran, ils avancent donc à tâtons (désolé) pour découvrir chaque élément affiché. Leur compréhension de l'ensemble passe par leur capacité à construire une image mentale de l'environnement. 
&lt;/p&gt;
&lt;p&gt;
Comme la moitié du chemin était fait par les utilisateurs improprement dits &lt;q&gt;déficients&lt;/q&gt;, les technologies pouvaient leur proposer des alternatives viables&amp;nbsp;: &lt;a href=&quot;http://www.eurobraille.fr/fr/catalogue&quot;&gt;l'écran à aiguilles Braille&lt;/a&gt; et &lt;a href=&quot;https://doc.ubuntu-fr.org/synthese_vocale&quot;&gt;la synthèse vocale&lt;/a&gt;.&lt;br /&gt;
Mais alors il n'y a pas de vision globale ou géométrique, il fallait que ces interfaces dictent une priorisation des contenus aux programmes qui étaient d'abord prévus pour une interface graphique.
&lt;/p&gt;
&lt;p&gt;
Et croyez-moi que devoir &lt;a href=&quot;http://www.accede-web.com/notices/html-css-javascript/1-structure/&quot;&gt;repenser une interface graphique en terme de priorisation plutôt qu'en esthétique&lt;/a&gt; n'est pas simple. Pourtant, il y a un réel gain à faire ce travail&amp;nbsp;: il permet de se poser et de songer à l'essentiel et à être clairement explicite, &lt;a href=&quot;https://insidegovuk.blog.gov.uk/2016/07/20/changes-to-the-style-guide-no-more-eg-and-ie-etc/&quot;&gt;jusque dans les termes utilisés&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Enfant du futur immédiat, les concepteurs d'interface travaillent souvent dans le noir, jusqu'à ce qu'ils réfléchissent à ne pas voir le résultat, mais à songer à le rendre accessible. Car oui, le paradoxe est qu'il ne faut jamais perdre de vue que le handicap peut aussi être une chance pour tous. On ne voit bien qu'avec le cœur. L'essentiel est invisible pour les yeux…*
&lt;/p&gt;
&lt;p&gt;
* «&amp;nbsp;&lt;em&gt;Le petit prince&lt;/em&gt;&amp;nbsp;», Antoine de Saint-Exupéry
&lt;/p&gt;</content:encoded>
    
    
      <enclosure url="/vrac/Emissions/CPU/podcast/0045-CPU%2808-12-16%29.mp3"
      length="57909078" type="audio/mpeg3" />
    
    
      </item>
  
	<item>
		<title>Ressuscitez le bouton du milieu !</title>
		<link>https://dascritch.net/post/2016/12/06/Ressuscitez-le-bouton-du-milieu</link>
		<guid isPermaLink="false">urn:md5:b6df6d3dffc6bf2605ff8f8308252877</guid>
		<dc:date>2016-12-06T12:32:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Je dois être vieux, j'aime bien les détails, les outils qui sont finalisés avec amour, et quand mes instruments jouent parfaitement leur partition. J'ai la même attente du bouton du milieu de ma souris. Or, il est sacrément important, ce bougre de centriste : il ouvre le lien dans une nouvelle tab !		&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 dois être vieux, j'aime bien les détails, les outils qui sont finalisés avec amour, et quand mes instruments jouent parfaitement leur partition. J'ai la même attente du bouton du milieu de ma souris. Or, il est sacrément important, ce bougre de centriste : il ouvre le lien dans une nouvelle tab !&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;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1205-historyofcursor2.jpg&quot; rel=&quot;lightbox[milieu]&quot; class=&quot;r&quot; &gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/.1205-historyofcursor2_s.jpg&quot; /&gt;&lt;/a&gt;
&lt;p&gt;
Il y a très longtemps que je voulais écrire ce billet.&lt;br /&gt;
Je me le réservais pour &lt;a href=&quot;http://www.24joursdeweb.fr/&quot;&gt;les 24 Jours de Web&lt;/a&gt;, devenus &lt;a href=&quot;https://www.hteumeuleu.fr/en-decembre-ecrivez-partagez-hashtag-nowwwel/&quot;&gt;#Nowwwel&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Il raconte une situation qui me gêne.&lt;br /&gt;
Elle me démange, me gratte, me met dans la même situation d'inconfort qui m'a poussé à écrire &lt;a href=&quot;https://dascritch.net/post/2013/03/26/Dirty-Hacky-%3A-je-parse-en-HTML-.357-SW&quot;&gt;ma série «&amp;nbsp;&lt;em lan=&quot;en&quot;&gt;Dirty Hacky&lt;/em&gt;&amp;nbsp;»&lt;/a&gt;&amp;nbsp;: j'ai la forte impression qu'elle est crade, qu'elle heurte profondément mes convictions religieuses qui me font vénérer &lt;a href=&quot;https://www.w3.org/&quot;&gt;la Très Sainte W3C&lt;/a&gt;, &lt;a href=&quot;https://whatwg.org/&quot;&gt;WhatWG&lt;/a&gt; au plus haut des validateurs.
&lt;p&gt;
&lt;p&gt;
Cette situation est l'objet d'une intense frustration personnelle, car, &lt;a href=&quot;https://dascritch.net/category/Webdev&quot;&gt;dans ma jeunesse professionnelle&lt;/a&gt; et laborieuse &lt;a href=&quot;https://www.w3.org/standards/webdesign/accessibility&quot;&gt;du déchiffrement des Saintes Écritures&lt;/a&gt;, j'ai conçu quelques &lt;em lang=&quot;en&quot;&gt;back-offices&lt;/em&gt; et que je remarque que nombre d'interfaces se voulant aussi primordiales pour les entreprises présentent ce qui est pour moi un défaut, une économie qui montre un certain irrespect du client.
&lt;/p&gt;

&lt;p&gt;
Mais avant que je parle de ce clic du milieu…
&lt;/p&gt;

&lt;h3 id=&quot;parlons_de_la_souris&quot;&gt;Parlons de la souris&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.liberation.fr/cahier-special/1997/12/22/1997-mot-a-mot-mulot_223010&quot;&gt;Oui, oui, le &lt;q&gt;mulot&lt;/q&gt; !&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Il fut une époque où la souris avait deux boutons, et qu'un troisième niveau de fonction était accessible en appuyant sur les deux à la fois. 
&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/1612-ClicDuMilieu-SourisAmiga.jpg&quot; rel=&quot;lightbox[milieu]&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/.1612-ClicDuMilieu-SourisAmiga_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;L'iconique souris de l'Amiga. &lt;span lang=&quot;en&quot;&gt;Forever&lt;/span&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Alors arriva le troisième bouton.
&lt;/p&gt;
&lt;figure&gt; 
&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/1612-ClicDuMilieu-SourisTroisBoutons.jpg&quot; rel=&quot;lightbox[milieu]&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/.1612-ClicDuMilieu-SourisTroisBoutons_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;La souris du Xerox Alto.... qui date d'avant la précédente. C'est à cause d'elle que X Window demandait par défaut une souris 3 boutons&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Que l'on remplaça par une molette de défilement vertical, mais le bouton se cachait dedans : on pouvait cliquer sur la molette.
&lt;/p&gt;
&lt;figure&gt;

&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/1612-ClicDuMilieu-SourisMolette.jpg&quot; rel=&quot;lightbox[milieu]&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/.1612-ClicDuMilieu-SourisMolette_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;&lt;span lang=&quot;en&quot;&gt;Got this&lt;/span&gt;. Elle a 10 ans. Oui, c'est une Microsoft.&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;h3 id=&quot;a_quoi_servaient_ces_boutons&quot;&gt;À quoi servaient ces boutons ?&lt;/h3&gt;

&lt;p&gt;
&lt;small&gt;
Oui, parce qu'un jour, quand nous n'aurons plus que des interfaces tactiles et même plus de clavier physique, il faudra bien se souvenir de l'intérêt d'une souris…)
&lt;/small&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://dascritch.net/post/2005/06/09/151-la-tapette-cette-arme-mortelle-pour-les-rongeurs&quot;&gt;Sans souris, les environnements fenêtrés auraient été bien plus difficiles à mettre en place&lt;/a&gt;. Pas impossible, mais très difficiles.&lt;br /&gt;
Si le bouton gauche a toujours eu une fonction d'action directe (appuyer sur un bouton, suivre un lien), le bouton droit faisait ouvrir un menu contextuel à l'objet qui était pointé par la souris. Le bouton du milieu, dans l'environnement X&amp;nbsp;Window a eu une fonction plus ou moins dérivée de l'Alto, encore une fois, celle de &lt;em&gt;copier&lt;/em&gt;&amp;nbsp;: Copier le texte qui a été surligné au bouton gauche, ou, &lt;strong&gt;dans le cas des navigateurs, le clic du milieu ouvre le lien dans une nouvelle fenêtre&lt;/strong&gt;, puis dans un nouvel onglet.
&lt;/p&gt;


  &lt;p&gt;
(Et un jour, je vous parlerais des boutons 4 à 7, de la molette de défilement horizontal et de &lt;a href=&quot;http://www.computinghistory.org.uk/det/12416/Logitech-Cyberman/&quot;&gt;l'indication d'élévation de la souris Logitech Cyberman&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
&lt;del&gt;Du côté de chez snob, chez les riches&lt;/del&gt; Dans l'environnement Macintosh, les souris n'avaient qu'un seul bouton, gauche. En chef de projet tyrannique et gaucher, Steve Jobs avait décrété que la politique du Bouton Unique était suffisante. Mais ses ingénieurs et bien des développeurs d'utilitaires en avaient décidé autrement dans une dissidence polie et fonctionnelle, et les utilitaires rentrèrent dans le système sans que la hiérarchie ne fut tenue au courant. Les boutons droits et central sont accessibles et même fonctionnels, c'est plus simple en branchant une souris de PC.
&lt;/p&gt;

&lt;h3 id=&quot;j_utilise_des_outils_de_GAFAM&quot;&gt;je dois le confesser, j'utilise des outils de &lt;abbr&gt;GAFAM&lt;/abbr&gt;&lt;/h3&gt;
&lt;p&gt;
&lt;small&gt;J'en connais plein qui vont me railler, me jeter la pierre, prononcer publiquement mon anathème, mais mieux vaut connaître son ennemi pour mieux l'affronter.&lt;/small&gt;&lt;br /&gt;
J'utilise tous les jours les outils &lt;a href=&quot;https://www.google.com/intl/fr_fr/drive/&quot;&gt;Google Drive&lt;/a&gt; et &lt;a href=&quot;https://aws.amazon.com/&quot;&gt;Amazon Web Services&lt;/a&gt;. Parce que c'est mon travail, parce que j'ai pas pu faire un choix, et aussi, il faut le reconnaître, parce qu'ils sont pratiques.
&lt;/p&gt;
&lt;p&gt;
Je trouve leur interface terriblement limitée, j'ai même l'impression d'être bridé dans ma productivité parce que je sais que mon navigateur peut faire des choses formidables, mais que les interfaces de ces deux géants du web ne sont absolument pas capables de le gérer.
&lt;/p&gt;


&lt;h3 id=&quot;exemple_aws&quot;&gt;Exemple numéro 1 : la console &lt;abbr&gt;AWS&lt;/abbr&gt;&lt;/h3&gt;
&lt;p&gt;
J'ai la &lt;q&gt;chance&lt;/q&gt; d'avoir avec mes collègues une flotte conséquente de serveurs à administrer, &lt;q&gt;EC2&lt;/q&gt; dans le jargon Amazon Web Services. Or, quand je gère via l'interface d'&lt;abbr&gt;AWS&lt;/abbr&gt;, Il m'est impossible d'ouvrir de dérouler plus d'une instance à la fois. Des fois, j'aimerais justement utiliser le clic du milieu pour ouvrir plusieurs onglets afin de comparer/grouper les serveurs… sauf que… Eh ben non, le clic du milieu sur les liens ne marche pas&amp;nbsp;!
&lt;br /&gt;
Et ce manque se retrouve dans pratiquement tous les outils de l'univers &lt;abbr&gt;AWS&lt;/abbr&gt;.
&lt;/p&gt;
&lt;p&gt;
Autre surprise, tant que vous êtes dans la console &lt;abbr&gt;EC2&lt;/abbr&gt;, si vous regardez les détails d'un de vos serveurs, les &lt;em lang=&quot;en&quot;&gt;devices&lt;/em&gt; qui y sont montés ont des liens qui sont des… faux liens&amp;nbsp;: ils sont interceptés par le code &lt;abbr&gt;JS&lt;/abbr&gt;, et donc ne peuvent être compris par un clic du milieu, ni être partagés aux collègues via la messagerie interne.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/1612-ClicDuMilieu-AWS-fauxlien.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Il a l'aspect, le balisage d'un lien, mais non, c'est un faux-nez&amp;nbsp;!&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;h3 id=&quot;exemple_google_drive&quot;&gt;Exemple numéro 2 : Google drive&lt;/h3&gt;
&lt;p&gt;
Je consomme aussi énormément Google Drive, où l'on retrouve toute une suite bureautique, mais aussi ce qui ressemble très fortement à un navigateur de fichiers. Et comme dans mon équipe, nous créons énormément de fichiers, nous les classons par sous-répertoires. Et plus d'une fois, j'aimerais ouvrir chaque sous-répertoire dans un onglet différent, ou transmettre dans via messagerie un sous-répertoire particulier à un collègue.
&lt;/p&gt;
&lt;p&gt;
Que nenni !&lt;br /&gt;
Toutes les entrées sont des &lt;code&gt;&amp;lt;&lt;strong&gt;span&lt;/strong&gt;&amp;gt;&lt;/code&gt; dans des &lt;code&gt;&amp;lt;&lt;strong&gt;div&lt;/strong&gt;&amp;gt;&lt;/code&gt;, dont le fonctionnement ressemble très fortement à des liens, mais dont la gestion est purement javascript. Il est donc impossible d'utiliser le clic du milieu pour ouvrir vers de nouveaux onglets, et le fonctionnement du bouton droit est émulé pour avoir une fonction équivalente à &lt;q&gt;Copier l'URL du lien&lt;/q&gt;.
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/1612-ClicDuMilieu-GT-fauxlien.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Ici aussi, aussi bien le menu à gauche que les sous-répertoires ne sont pas des liens&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&quot;empire_du_clic_du_milieu&quot;&gt;Le Dernier Empereur de L'Empire du Clic du Milieu&lt;/h3&gt;
&lt;p&gt;
Certes, à l'heure des interfaces tactiles, le bouton du milieu est vu par une curiosité ou est totalement inconnu de &lt;em&gt;la plupart&lt;/em&gt; des macophiles. Mais, à la différence du &lt;a href=&quot;https://dascritch.net/post/2012/05/12/Chamedi-pointeur&quot;&gt;comportement de survol du pointer&lt;/a&gt;, le &lt;code&gt;&lt;em&gt;:hover&lt;/em&gt;&lt;/code&gt; devenu infâme à cause d'usages catastrophiques, le bouton du milieu a été jusqu'ici plutôt constant car son usage était moins flagrant, donc moins prioritaire à bidouiller/braficoter par des donneurs d'ordres trop enthousiastes.
&lt;/p&gt;
&lt;p&gt;
Et il faut reconnaître que les interfaces tactiles nous ont fait nous concentrer sur l'essentiel et la praticité immédiate.&lt;br /&gt;
L'adjectif &lt;q&gt;immédiat&lt;/q&gt; fut à la fois sain, mais aussi porteur de risque.
&lt;/p&gt;
&lt;p&gt;
Qui dit &lt;q&gt;professionnel&lt;/q&gt; dit interaction avec une foule d'outils et d'utilisateurs, du novice au &lt;q lang=&quot;en&quot;&gt;power user&lt;/q&gt;, qui tous en feront une consommation industrielle, 8 heures par jour, 39 payées 35 par semaine, et qui chercheront toujours à en améliorer leur pratique afin de grappiller de précieuses minutes pour fumer plus longtemps en se gelant les miches dehors. Je ne dois donc pas être le seul à m'attendre à profiter de mon usage avancé de mon navigateur web sur ces outils supposés industriels.
&lt;/p&gt;

&lt;p&gt;
Très sincèrement, mes considérations de &lt;q lang=&quot;en&quot;&gt;power-user&lt;/q&gt; semblent intéresser surtout qu'une minorité de personnes.&lt;br /&gt;
Sauf que &lt;strong&gt;l'absence de gestion du clic du milieu dans certains sites révèle un symptôme&amp;nbsp;: nous faisons l'impasse sur de réelles problématiques d'accessibilité et d'utilisabilité.&lt;/strong&gt; Et ces questions deviennent vite crispantes dans une situation de productique. Et justement, il se trouve que &lt;abbr&gt;AWS&lt;/abbr&gt; et les Google Tools sont marketés comme des outils de production professionnels. 
&lt;/p&gt;

&lt;p&gt;
Sauf qu'au lieu d'avoir des vrais liens, on y trouve des aspects de liens posés sur des &lt;code&gt;&amp;lt;&lt;strong&gt;div&lt;/strong&gt;&amp;gt;&lt;/code&gt;, donnant lieu à des frustrations pile poil au moment de faire cette livraison ultra-urgente.
&lt;/p&gt;


&lt;p&gt;
Mais comment sommes-nous en venus là ?
&lt;/p&gt;
&lt;h3 id=&quot;du_web_document_au_web_applicatif&quot;&gt;Nous sommes passés du Web document au Web applicatif&lt;/h3&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/1612-ClicDuMilieu-web_tool.png&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;

&lt;p&gt;
Cette révolution a réellement éclaté avec l'arrivée de G-Mail. Pour la première fois, nous avions le concept de &lt;abbr&gt;XHR&lt;/abbr&gt; (qu'on appelait alors &lt;abbr&gt;AJAX&lt;/abbr&gt;, nous étions innocents et faisions encore du &lt;a href=&quot;https://dascritch.net/tag/xml&quot;&gt;XML&lt;/a&gt; et pas du &lt;abbr&gt;JSON&lt;/abbr&gt;) et de &lt;span lang=&quot;en&quot;&gt;Single Page Application&lt;/span&gt; ou &lt;q&gt;page persistante&lt;/q&gt;, qui n'a pas besoin d'être rechargée pour toutes les fonctions.
&lt;/p&gt;
&lt;p&gt;
Et avec notre enthousiasme le plus communicatif, nous nous sommes tous mis à fond dans &lt;a href=&quot;https://dascritch.net/tag/dom&quot;&gt;la manipulation des arbres DOM, des objets générés par le document HTML via le javascript&lt;/a&gt; au point que nous essayons maintenant de ne plus jamais arriver à la situation où une page web complète doit être rechargée durant la navigation sur un site.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://limi.net/checkboxes-that-kill/&quot;&gt;Dans son article «&amp;nbsp;&lt;em lang=&quot;en&quot;&gt;Checkboxes that kill your product&lt;/em&gt;&amp;nbsp;», Alex Limi supposait que seulement 2% des utilisateurs ont JS désactivé.&lt;/a&gt; Non seulement il avait raison, mais ce pourcentage a sûrement baissé depuis. Sauf que… 
&lt;/p&gt;
&lt;p&gt;
Sauf que l'on oublie que le point d'accès d'un site internet peut être n'importe quel endroit. Et en soi, il n'y a meilleure méthode pour se rendre compte des risques qu'en désactivant Javascript.&lt;br /&gt;
Nous avons oublié &lt;strong&gt;le principe d'un accès aléatoire&lt;/strong&gt;. Ce que j'appelle un &lt;q&gt;accès aléatoire&lt;/q&gt;, c'est que n'importe quelle position de votre application doit pouvoir être reprise à un point arbitraire. Songez que l'ordinateur peut tomber à court de batterie, ou la connectivité perdue, ou encore la session de navigation partagée entre plusieurs ordinateurs, et que votre application web doit pouvoir reprendre depuis ce point, comme si elle avait été suspendue.&lt;br /&gt;
Je ne demande pas à ce que nous puissions nous passer totalement de javascript, mais qu'il y aie cette réflexion du point d'entrée aléatoire, et donc de réfléchir à nouveau nos applications &lt;a href=&quot;https://dascritch.net/post/2007/09/17/RIP-URL-URI-IRI-INRI-W3C&quot;&gt;en termes d'URL&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
En soi, que nous puissions encore utiliser une navigation standard doit garantir que votre site fonctionne, même si votre javascript part en panique. Pourquoi&amp;nbsp;? Parce qu'en cliquant sur un lien, la page sera entièrement rechargée et donc votre applicatif &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt; redémarré. Vous gagnez en solution de redressement.
&lt;/p&gt;

&lt;h3 id=&quot;la_culture_du_document_web_disparait&quot;&gt;
La  culture du document web échappe à la nouvelle génération
&lt;/h3&gt;

&lt;a rel=&quot;lightbox[milieu]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/1612-ClicDuMilieu-googletv.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/.1612-ClicDuMilieu-googletv_t.jpg&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;&lt;/a&gt;
&lt;p&gt;
Il n'y a qu'à voir un applicatif AngularJS à nu : c'est un &lt;em lang=&quot;en&quot;&gt;template&lt;/em&gt;. Un canevas, un modèle à trous. On expose une composante de source directement au lieu de le ranger à part&amp;nbsp;!&lt;br /&gt;
Super.
&lt;/p&gt;
&lt;p&gt;
En 2010, j'avais été chargé d'intervenir sur une application web &lt;a href=&quot;http://lifehacker.com/5917646/google-tv-its-actually-awesome-and-heres-how-to-get-the-most-out-of-it&quot;&gt;pour la Google TV, alors en pleine &lt;em lang=&quot;en&quot;&gt;hype&lt;/em&gt;&lt;/a&gt;. À l'époque, on réfléchissait encore aux boîtiers &lt;em lang=&quot;en&quot;&gt;set-top box&lt;/em&gt; posés &lt;del&gt;sur&lt;/del&gt; sous votre dalle immense comme des PC complets avec une interface graphique foisonnante et avec une télécommande... aussi complexe.
&lt;/p&gt;

&lt;figure class=&quot;cl&quot;&gt;
&lt;a rel=&quot;lightbox[milieu]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/1612-ClicDuMilieu-sony-recto.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/.1612-ClicDuMilieu-sony-recto_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[milieu]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/1612-ClicDuMilieu-sony-verso.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1612-ClicDuMilieu/.1612-ClicDuMilieu-sony-verso_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;a href=&quot;http://www.androidcentral.com/sony-shows-new-android-powered-set-top-box-singapore&quot;&gt;La télécommande de la Google TV présentée par Sony&lt;/a&gt;. Recto, verso.
Sans trucages.
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Nos ChromeCast actuelles se pilotent au smartphone, ce qui résout bien des problématiques et a épuré interface, boutons et points noirs. Mais revenons à il y a 6 ans et notre engin pré-Biactol &amp;nbsp;:&lt;br /&gt;
&lt;a href=&quot;http://www.androidcentral.com/google-tv&quot;&gt;La Google TV consistait en un OS Android sertie d'une interface purement web (plus Flash) embarquée dans des téléviseurs haut-de-gamme&lt;/a&gt; et avec un &lt;em lang=&quot;en&quot;&gt;app-store&lt;/em&gt; dédié.
&lt;/p&gt;
&lt;p&gt;
Je m'attendais donc à ce que le vocabulaire HTML soit correctement géré. Première mauvaise surprise&amp;nbsp;: la documentation officielle de Google TV recommandait d'éviter la balise &lt;code&gt;&amp;lt;&lt;strong&gt;a&lt;/strong&gt; &lt;em&gt;href=&quot;https://dascritch.net/post/2016/12/06/&quot;&lt;/em&gt;&amp;gt;&lt;/code&gt; pour un &lt;code&gt;&amp;lt;&lt;strong&gt;div&lt;/strong&gt; &lt;em&gt;class=&quot;tv-link&quot; href=&quot;https://dascritch.net/post/2016/12/06/&quot;&lt;/em&gt;&amp;gt;&lt;/code&gt;. &lt;a href=&quot;https://books.google.fr/books?id=A7ERxFJvnuEC&amp;amp;pg=PA42&amp;amp;lpg=PA42&amp;amp;dq=div+class+link+google+tv&amp;amp;source=bl&amp;amp;ots=PfBEN070v3&amp;amp;sig=0Pb0rWwIE_Flc2nCBQnd_Uh52f0&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwib_qiSyd3QAhXGDxoKHcJ7BgIQ6AEIIDAA#v=onepage&amp;amp;q=div class link google tv&amp;amp;f=false&quot;&gt;La raison invoquée était assez oiseuse&amp;nbsp;: le changement de couleur des liens déjà visités&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
«&amp;nbsp;&lt;strong&gt;what the fuuuu ???&lt;/strong&gt;&amp;nbsp;» marmonnèrent mes yeux exorbités &lt;small&gt;par une nuit où le café ne suffisait plus&lt;/small&gt;.
&lt;/p&gt;
&lt;p&gt;
Plutôt que d'inclure dans son &lt;em lang=&quot;en&quot;&gt;framework&lt;/em&gt; d'application TV &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;une règle CSS&lt;/a&gt; qui fasse le job, Google poussait à &lt;a href=&quot;https://dascritch.net/tag/html&quot;&gt;une balise HTML&lt;/a&gt; bricolée, fermant par là-même la porte à un portage simple des applications GoogleTV au Grand Internet.
&lt;/p&gt;
&lt;p&gt;
Et la situation est encore plus démentielle dans la plupart des frameworks &lt;q&gt;modernes&lt;/q&gt;, tel &lt;a href=&quot;https://docs.angularjs.org/api/ng/directive/ngHref&quot;&gt;dans AngularJS avec la directive&lt;/a&gt; &lt;code&gt;&lt;em&gt;ng-href=&quot;https://dascritch.net/post/2016/12/06/&quot;&lt;/em&gt;&lt;/code&gt;. Si la raison originelle était de ne pas casser de lien après la &lt;em lang=&quot;en&quot;&gt;build&lt;/em&gt;, son usage est vite devenu n'importe quoi et a même pénalisé nombre de sites dans leur indexation.  
&lt;/p&gt;
&lt;p&gt;
Nous avons abandonné les standards &lt;a href=&quot;https://blog.daftcode.pl/hype-driven-development-3469fc2e9b22&quot;&gt;pour cause de &lt;em lang=&quot;en&quot;&gt;Hype Driven Development&lt;/em&gt;&lt;/a&gt; en oubliant les problèmes qu'ils résolvaient.
&lt;/p&gt;

&lt;h3 id=&quot;parait_que_je_ne_suis_pas_seul&quot;&gt;Parait que je ne suis pas seul (à râler)&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://moox.fr/&quot;&gt;Maxime Thirouin, développeur d'applications web&lt;/a&gt; doué et loin d'être allergique aux dernières nouveautés javascript, a professé &lt;a href=&quot;https://www.dotjs.io/&quot;&gt;lors du dernier DotJS&lt;/a&gt; qu'une &lt;a href=&quot;https://twitter.com/dcarral/status/805760531214766080&quot;&gt;page web doit pouvoir être consulté sans forcément avoir javascript activé&lt;/a&gt;. Une position qui me plaît. Mais est-elle trop conservatrice&amp;nbsp;? Suis-je un vieux croûton qui râle que c'était mieux à vents&amp;nbsp;? &lt;small&gt;(prout)&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Récemment, j'ai conçu une &lt;span lang=&quot;en&quot;&gt;web-app&lt;/span&gt; en page persistante avec un &lt;abbr&gt;JS&lt;/abbr&gt; assez… complexe. Comme il ne peut être utilisé qu'avec du javascript, j'avais commencé &lt;em lang=&quot;en&quot;&gt;quick &amp;amp; dirty&lt;/em&gt; avec des boutons et une gestion de navigation par des variables internes. J'ai décidé de ré-écrire sa navigation afin de remplacer tous les &lt;code&gt;&amp;lt;&lt;strong&gt;button&lt;/strong&gt;&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;&lt;strong&gt;div&lt;/strong&gt;&amp;gt;&lt;/code&gt; par des liens &lt;code&gt;&amp;lt;&lt;strong&gt;a&lt;/strong&gt; &lt;em&gt;href=&quot;https://dascritch.net/...&quot;&lt;/em&gt;&amp;gt;&lt;/code&gt; internes aux événements interceptés.

&lt;/p&gt;
&lt;p&gt;
Et bien vous savez quoi ? &lt;strong&gt;J'ai gagné&lt;/strong&gt; sur deux points&amp;nbsp;:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;en accessibilité&lt;/strong&gt;, puisque les &lt;code&gt;&amp;lt;&lt;strong&gt;div&lt;/strong&gt;&amp;gt;&lt;/code&gt; étaient remplacés par de vrais liens et l'historique navigateur redevint fonctionnel sans avoir à le ré-écrire&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;en fonctionnalité&lt;/strong&gt;, puisque les liens profonds dans mon application devenaient partageables.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Typiquement le genre de détails que je suis le seul à remarquer, mais ce détail a été aperçu par un autre, et il m'a dit que c'était diablement pratique d'y avoir songé. 
&lt;/p&gt;
&lt;p&gt;
Songez-y : supporter le clic du milieu peut être utile à d'autres.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Moralité : Laissez le navigateur fonctionner&lt;/strong&gt;, ne tentez pas de recréer la roue&amp;nbsp;; en 25 ans, ils auront pensé à bien plus de choses que vous.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Timecodehash : Lier vers un moment d'un sonore</title>
		<link>https://dascritch.net/post/2014/09/03/Timecodehash-%3A-Lier-vers-un-moment-d-un-sonore</link>
		<guid isPermaLink="false">urn:md5:6130075be274c9e3f44d905be2cc052e</guid>
		<dc:date>2014-09-03T10:04:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Un petit javascript autonome qui va plaire aux podcasteurs, aux musiciens et aux médias. Enfin, s'ils acceptent de jouer le jeu du web et des hypertextes.		&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;Un petit javascript autonome qui va plaire aux podcasteurs, aux musiciens et aux médias. Enfin, s'ils acceptent de jouer le jeu du web et des hypertextes.&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'avais précédemment écrit une petite &lt;a href=&quot;http://dascritch.net/post/2014/06/24/Sniffeur-d-ancre&quot;&gt;bibliothèque javascript qui permet de voir les ancres d'une page web&lt;/a&gt;, ceci à fins de faire des liens sur le bon chapitre (s'il est indexé) dans un très long article. J'ai ensuite monté &lt;a href=&quot;https://addons.mozilla.org/fr/firefox/addon/anchors-reveal/&quot;&gt;Anchors Reveal en add-on pour Firefox,&lt;/a&gt; qui se montre redoutablement efficace.
&lt;/p&gt;
&lt;p&gt;
Or, depuis le temps que je monte et &lt;a href=&quot;http://supplementweekend.fr&quot;&gt;héberge le &lt;em&gt;Supplément Week-End&lt;/em&gt;&lt;/a&gt; —&amp;nbsp;l'un des plus vieux podcast francophone qui s'arrête cette semaine&amp;nbsp;— je regrettais qu'il manque un dispositif équivalent pour un sonore ou une vidéo embarquée dans une page distante. Un truc aussi simple qu'un &lt;code&gt;&amp;lt;&lt;strong&gt;a&lt;/strong&gt; &lt;em&gt;href&lt;/em&gt;=&quot;&lt;i&gt;page#element&lt;/i&gt;&quot;&amp;gt;&lt;/code&gt;…
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1410-TimecodeHash-Audacity.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Il existe néanmoins la possibilité de chapitrer dans certains formats containers, comme le mp4. Mais cette possibilité est très rarement implémentée et le problème reste entier dans le contexte d'une page web.&lt;br /&gt;
Ici, une piste marqueur dans &lt;a href=&quot;http://audacity.sourceforge.net/&quot;&gt;le logiciel d'édition Audacity.&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Tiens, encore ce matin, dans un e-mail, je voulais pointer &lt;a href=&quot;https://vimeo.com/81314505&quot;&gt;la séance des lightning talks du dernier Paris Web&lt;/a&gt; les passages de David Rousset et David Catuhe, ben Vimeo ne propose pas de pouvoir pointer à un point temporel précis.
&lt;/p&gt;
&lt;p&gt;
Et comme que des fois, on enchaîne beaucoup d'interviewes dans une émission qui dure deux heures. Et qu'on ne veut pointer que sur une seule à partir d'une autre page. Ouais, il me manquait de pouvoir faire ça&amp;nbsp;:
&lt;/p&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/05/31/Suppl%C3%A9ment-Week-End%2C-samedi-31-Mai-2014#&amp;amp;t=26m20s&quot;&gt;0:26:20&lt;/a&gt; : &lt;strong&gt;David Tsang-Hin Sun et Joseph Saint-Pierre&lt;/strong&gt; pour &lt;strong&gt;&lt;a href=&quot;https://twitter.com/fablabups&quot;&gt;le Campus Fab&lt;/a&gt;&lt;/strong&gt;, fablab de l'Université Paul Sabatier&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/05/31/Suppl%C3%A9ment-Week-End%2C-samedi-31-Mai-2014#&amp;amp;t=56m35s&quot;&gt;0:56:35&lt;/a&gt; : &lt;strong&gt;Laurent Guerby&lt;/strong&gt; pour &lt;a href=&quot;http://tetaneutral.net/&quot;&gt;&lt;strong&gt;Tetaneutral&lt;/strong&gt;&lt;/a&gt; et co-organisateur du TSHF&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/05/31/Suppl%C3%A9ment-Week-End%2C-samedi-31-Mai-2014#&amp;amp;t=1h17m41s&quot;&gt;1:17:41&lt;/a&gt; : &lt;strong&gt;Philippe&lt;/strong&gt; pour le &lt;a href=&quot;http://tetalab.org/&quot;&gt;&lt;strong&gt;Tetalab&lt;/strong&gt;&lt;/a&gt;, co-organisateur du THSF et pour le badge programmable à souder&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://dascritch.net/post/2014/05/31/Suppl%C3%A9ment-Week-End%2C-samedi-31-Mai-2014#&amp;amp;t=1h25m28s&quot;&gt;1:25:28&lt;/a&gt; : &lt;strong&gt;Julien Peccoud&lt;/strong&gt; pour &lt;a href=&quot;http://cortecs.org/&quot;&gt;&lt;strong&gt;le collectif Cortecs&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;h3 id=&quot;dontacte&quot;&gt;Dont acte :&lt;/h3&gt;
&lt;/p&gt;
&lt;ul class=&quot;bonus&quot;&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/dascritch/timecodehash&quot;&gt;Repository Github&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dascritch/timecodehash/issues&quot;&gt;Todo-list et bugs actuels&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 id=&quot;chainonmanquant&quot;&gt;Chaînon manquant&lt;/h3&gt;
&lt;p&gt;
Je me suis lancé dans l'écriture d'une petite bibliothèque javascript, à appeler à partir des pages qui seront appelées. L'idée est qu'il suffit de simplement insérer l'appel, et tout se fera tout seul&amp;nbsp;:
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
&amp;lt;&lt;strong&gt;script&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;…/&lt;a href=&quot;https://github.com/dascritch/timecodehash/blob/master/src/timecodehash.js&quot;&gt;&lt;strong&gt;timecodehash.js&lt;/strong&gt;&lt;/a&gt;&lt;/i&gt;&quot;&amp;gt;&amp;lt;/&lt;strong&gt;script&lt;/strong&gt;&amp;gt;
&lt;/code&gt;&lt;br /&gt;
&lt;small&gt;Rappel : ne liez jamais ce genre de ressource extérieure à votre site ! Copiez la lib chez vous, elle est GPL&amp;nbsp;!&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Le code est du pur javascript, parfum &lt;em&gt;vanilla&lt;/em&gt;. Vous n'aurez donc besoin d'aucune autre bibliothèque &lt;a rel=&quot;nofollow&quot; href=&quot;http://www.anthony-brard.com/le-framework-jquery&quot;&gt;&lt;del&gt;ou framework&lt;/del&gt; tel que jQuery&lt;/a&gt;. À une unique exception, à savoir si vous voulez vérifier les tests, le développement a été commencé en TDD. &lt;small&gt;J'ai craqué car il fallait des promesses à QUnit. Oui, je suis faible.&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
J'ai aussi tenté d'avoir une syntaxe d'URL la plus propre possible, qu'elle n'interfère pas avec les standards et que les ancres soient relativement transparentes. J'ai fait l'impasse sur un &lt;em&gt;fallback&lt;/em&gt;, donc en cas de plantage javascript, il ne se passera rien.
&lt;/p&gt;
&lt;p&gt;
Autre chose sur le développement : j'étais aussi en déploiement continu sur mon propre blog. Donc vous ne l'aviez pas vu passé, mais &lt;a href=&quot;http://dascritch.net/post/2014/05/31/Supplément-Week-End%2C-samedi-31-Mai-2014&quot;&gt;il y tourne depuis le podcast du THSF 2014.&lt;/a&gt;
&lt;/p&gt;
&lt;h3 id=&quot;ilyaunstandard&quot;&gt;Il y a un standard&lt;/h3&gt;
&lt;p&gt;
Mon script utilise strictement les API de base. Non seulement les éléments natifs sont gérés, mais tout &lt;em&gt;polyfill&lt;/em&gt;, script, add-ons ou plugins (ben oui) qui peuvent les prendre en charge sont du coup aussi compatibles.
&lt;/p&gt;
&lt;p&gt;
Il y a peut-être une petite vérification à faire, car oui, il existe encore des vieux tromblons à travers notre vaste mode, que &lt;a href=&quot;http://benramsey.com/blog/2008/05/206-partial-content-and-range-requests/&quot;&gt;votre serveur web supporte bien les requêtes HTTP &lt;code&gt;Content-range&lt;/code&gt;&lt;/a&gt; et réponde bien par le status code &lt;code&gt;206 Partial content&lt;/code&gt;. Le chargement par morceaux de ressources n'est d'ailleurs pas toujours supportés par certains &lt;em&gt;reverse-proxy&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
Grâce à &lt;a href=&quot;https://oncletom.io/&quot;&gt;Thomas Parisot&lt;/a&gt;, qui fait moult &lt;a href=&quot;http://www.bbc.co.uk/rd/people/thomas-parisot&quot;&gt;tours de magie javascript à la BBC&lt;/a&gt;, j'ai redécouvert &lt;a href=&quot;http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/&quot;&gt;le standard &lt;strong&gt;media fragment&lt;/strong&gt;&lt;/a&gt;. Oui, je l'avais lue à une époque et je l'avais stupidement oubliée.&lt;br /&gt;
Il permet d'adresser et de n'utiliser qu'une partie d'une ressource média, du type image, audio ou vidéo. Mais il manquait la gestion du lien vers la page où cette ressource est embarquée. C'est pour ça que j'ai construit ce petit bout de code.
&lt;/p&gt;
&lt;p&gt;
Dans les faits, à son implémentation, j'ai parfois une invalidation de cache. Je tente donc d'abord de forcer le lecteur à se positionner au timecode demandé et en cas d'échec, je tente avec la syntaxe que j'utilisais jusqu'ici, à savoir en changeant la propriété &lt;code&gt;element.&lt;em&gt;currentTime&lt;/em&gt;&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
Comme ces manipulations risquent de lever une erreur, j'ai utilisé non sans honte un &lt;code&gt;&lt;strong&gt;try&lt;/strong&gt; {&amp;nbsp;…&amp;nbsp;} &lt;strong&gt;catch&lt;/strong&gt;(e) {&amp;nbsp;…&amp;nbsp;}&lt;/code&gt;. Oui, je sais que &lt;a href=&quot;http://programmers.stackexchange.com/questions/144326/try-catch-in-javascript-isnt-it-a-good-practice&quot;&gt;cette structure est l'œuvre de Satan, qu'elle n'est pas Bien™ du tout et que ce démon tue les performances,&lt;/a&gt; mais je vous fais remarquer qu'on risque pas la dizaine d'appels par seconde pour cette fonction, donc le besoin avoir des perfs de F1 n'est pas ici un facteur de décision.
&lt;/p&gt;

&lt;h3 id=&quot;autoplaysalemanie&quot;&gt;Autoplay, la sale manie&lt;/h3&gt;
&lt;p&gt;
Rien n'est plus insupportable que les sons/vidéos qui se lancent toutes seules, sans demander d'autorisation. Pourtant ... si vous venez d'une autre page, j'ai considéré que mettre le sonore à une position précise équivalait à une lecture automatique.
&lt;/p&gt;
&lt;p&gt;
Je me demande si c'est raisonnable…
&lt;/p&gt;
&lt;p&gt;
&lt;small&gt;Enfin, là, ça ne marche pas à cause d'un souci d'événement. Assez pénible.&lt;/small&gt;
&lt;/p&gt;
&lt;h3 id=&quot;lasyntaxe&quot;&gt;La syntaxe&lt;/h3&gt;
&lt;p&gt;
Elle est très simple : l'URL de la page, suivi du hash de l'élément multimédia (au aucun pour le premier), d'un séparateur (par défaut &lt;code&gt;&amp;amp;t=&lt;/code&gt;) et le timecode, exprimé en secondes (&lt;code&gt;123&lt;/code&gt;), deux-points séparateur (&lt;code&gt;00:02:03&lt;/code&gt;) ou unités (&lt;code&gt;2m3s&lt;/code&gt;)
&lt;/p&gt;
&lt;p&gt;
Ce qui donne ceci :
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://dascritch.net/post/2014/05/31/Suppl%C3%A9ment-Week-End%2C-samedi-31-Mai-2014#&amp;amp;t=2m3s&quot;&gt;
&lt;code&gt;
&amp;lt;&lt;strong&gt;a&lt;/strong&gt; &lt;em&gt;href&lt;/em&gt;=&quot;&lt;i&gt;http://dascritch.net/post/2014/05/31/Suppl%C3%A9ment-Week-End%2C-samedi-31-Mai-2014&lt;strong&gt;#&amp;amp;t=2m3s&lt;/strong&gt;&lt;/i&gt;&quot;&amp;gt;
&lt;/code&gt;…&lt;/a&gt;
&lt;/p&gt;

&lt;h3 id=&quot;thanksandtodo&quot;&gt;Remerciements et TODO list&lt;/h3&gt;

&lt;p&gt;
En plus de &lt;a href=&quot;https://oncletom.io/&quot;&gt;Thomas Parisot&lt;/a&gt; et des débuggueurs &lt;a href=&quot;https://github.com/chibani&quot;&gt;Loïc Gerbaud&lt;/a&gt; et &lt;a href=&quot;https://twitter.com/infestedgrunt&quot;&gt;Benoît Salles&lt;/a&gt;, il me faut aussi remercier &lt;a href=&quot;http://www.touchalize.com/&quot;&gt;l'équipe éditrice de Touchalize&lt;/a&gt;, à savoir &lt;a href=&quot;http://www.phonitive.fr&quot;&gt;Phonitive&lt;/a&gt; et son créateur Guillaume Lemoine, pour m'avoir prêté de l'équipement afin de faire différents tests. Ce qui m'a permis de vérifier qu'effectivement Safari est vraiment &lt;del&gt;bugué à la moelle&lt;/del&gt; capricieux au possible.
&lt;/p&gt;

&lt;p&gt;
Tout n'est pas terminé : il manque encore le support des éléments AV non indexés (je rappelle que c'est pas franchement l'idéal), et &lt;a href=&quot;https://hacks.mozilla.org/2014/08/building-interactive-html5-videos/&quot;&gt;des chapitrages déjà existants.&lt;/a&gt;
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1409-TimecodeHash-FirefoxContext.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Cadeau !
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Petit bonus propre à Firefox : le menu contextuel sur l'élément (clic droit ou appui prolongé sur l'élément média) permet de récupérer le lien vers la position en cours de lecture. Mais comme on n'a &lt;a href=&quot;https://support.mozilla.org/fr/questions/1000877&quot;&gt;plus le droit de modifier le presse-papier comme on veut pour d'évidentes raisons de sécurité&lt;/a&gt;, vous aurez alors l'interface &lt;q&gt;roots&lt;/q&gt; d'un bon vieux &lt;code&gt;alert()&lt;/code&gt; des familles.
&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>Finesse en ‹img /›</title>
		<link>https://dascritch.net/post/2014/06/12/Finesse-en-img</link>
		<guid isPermaLink="false">urn:md5:097a03a6ecb87ba2b3fe3d266f99edcf</guid>
		<dc:date>2014-06-12T10:47:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Plus gros, plus gros, plus gros, encore plus gros, plus gros, vous pouvez mettre encore plus gros ? Parce que j'ai un écran très très fin et vos images ont un grain beaucoup trop gros…		&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;Plus gros, plus gros, plus gros, encore plus gros, plus gros, vous pouvez mettre encore plus gros ? Parce que j'ai un écran très très fin et vos images ont un grain beaucoup trop gros…&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;
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;strong&gt;Finesse 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/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;
}
&lt;/style&gt;

&lt;p&gt;
Après &lt;a href=&quot;http://dascritch.net/post/2014/06/10/Progressivement-en-img&quot;&gt;le problème de l'affichage progressif des images&lt;/a&gt; qui correspondait à l'époque des modems RTC, attaquons notre souci actuel de riches&amp;nbsp;: &lt;strong&gt;Comment adapter une image en fonction de la finesse du support client&amp;nbsp;?&lt;/strong&gt; De votre écran, quoi.&lt;br /&gt;
Un problème de finesse des écrans, des millions d'insultes proférées par tous les intégrateurs qui tentent de faire du &lt;em&gt;responsive web-design&lt;/em&gt; beau et soyeux sur des supports en &lt;q&gt;High-DPI&lt;/q&gt; (&lt;q&gt;densité conséquente de pixels&lt;/q&gt;). 
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-Retina-test-ipad.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Comparaison de la finesse d'écran entre iPhone 3G et le 4 dit à &lt;q&gt;écran Retina&lt;/q&gt;.&lt;br /&gt;
&lt;small&gt;&lt;a href=&quot;http://www.iphone3gsystem.fr/13048/news-un-dernier-comparatif-entre-lecran-de-liphone-3gs-et-lecran-retina/&quot;&gt;Source : iphone3gsystem.fr&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
La situation s'était brusquement aggravée depuis que le pixel décrit dans nos documents HTML/CSS/JS n'est plus le pixel physique d'un écran, la triplette de photophores de couleur primaire. Non, maintenant, ce qu'on décrit avec l'unité &lt;code&gt;px&lt;/code&gt; est un &lt;strong&gt;pixel logique&lt;/strong&gt;, le multiple divisible de pixels affichés. &lt;a href=&quot;http://www.w3.org/Style/Examples/007/units.en.html&quot;&gt;La dernière unité quasi-&lt;q&gt;certaine&lt;/q&gt; en notation css est devenue aussi abstraite que les autres.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Vous croyiez ne pas avoir tout compris au paragraphe précédent, mais la situation est encore pire&amp;nbsp;! Tentez d'inclure un SVG dans un HTML et là, vous allez commencez à perdre la raison comme si vous aviez entrevu le nom d'un dieu plus ancien que l'Humanité dans le code source&amp;nbsp; On peut même arriver à définir des pixels non-carrés sans le faire exprès.  J͔͖̗͇͒ͫ̒͒͝e̸̬̠̟͎̥̬̙ͥͨ͑̅͂̅ ̸͚̞̫͕͇̠̊́̔ͩͪ̏v̥́̋̇a̷̺ͩi̭̙̥̩̜ͩ̚s͌͌̈ ̖̙̪̯̣͎͒ͅd̡̖͊̄̆e̸̱̎̊̈ͭ͊ͅv̙̺̱̻͖͕̫̀̏͒̍̾̚e̎͐̔n̛̹̺̩̬i̼̙̩̣ͤͦ́ͬ͒ͩr̈́͑ͥ҉̹͈ ̞̯̯̫̪̥̰̽̇f͎̹̲̆̽͂̂ͧ̑o̩̓͛u̵͈̰̗ͤͅ ̱̘ͮͥ̆̄ ̳͈͔̜͚̦̯͒̓͛͊ͦ͗̀g͒̑ͩ̉҉̯̮̫̣͓̼lo͚̯͖̻̥͙̻̓ͯ̊̋i̮̤͕͖̲̐̒̂͗͋̓rͬ̉̽ẹ͎̹̜͙̮͑ͭ͋ ̼͎̾ͬͫ͑̀ạ͍͔̳̀ͥ̽̏̇͗ͧ ̢̽̽ͨ̍̈́Ĉ̤͈̗̼̘͕ͪt͎͚h̜̪͕͍̭ͬͩ͞ͅu̲̫͆ͥ̑ͮ̂͑l̂̿͞ḫ̙̹̞ͣ͌̐ͫụ̪͇̫̝͗̅ͦ͛̕ͅ
&lt;/p&gt;
&lt;p&gt;
Et pourtant…
&lt;/p&gt;

&lt;h3 id=&quot;riendeneuf&quot;&gt;Le problème &lt;q&gt;Retina&lt;/q&gt;&amp;nbsp;? En fait, rien de nouveau&lt;/h3&gt;
&lt;p&gt;
Le fameux souci d'avoir des images plus précises en fonction de la finesse de résolution de l'affichage existe depuis qu'il est possible d'imprimer &lt;a href=&quot;http://dascritch.net/post/2014/03/25/Histoires-en-img&quot;&gt;une page web comportant des images, donc depuis… 1993&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
À cette époque, &lt;strong&gt;les imprimantes laser proposaient déjà une résolution de 300&amp;nbsp;dpi&lt;/strong&gt;. &lt;q&gt;300&amp;nbsp;dpi&lt;/q&gt;, c'est-à-dire 300&amp;nbsp;points (ou pixels) indépendants par pouce sur une ligne horizontale ou verticale, ou, parce que nous sommes civilisés,  modernes, &lt;a href=&quot;http://www.metrologie-francaise.fr/fr/histoire/histoire-mesure.asp&quot;&gt;éclairés et donc métriques&lt;/a&gt;, &lt;strong&gt;118&amp;nbsp;pixels par centimètre linéaire&lt;/strong&gt;.&lt;br /&gt;
Du côté des écrans d'ordinateurs, le Macintosh présentera systématiquement &lt;del&gt;à son heureux pigeo&lt;/del&gt; 72&amp;nbsp;dpi, &lt;a href=&quot;http://www.folklore.org/StoryView.py?project=Macintosh&amp;story=Square_Dots.txt&amp;amp;sortOrder=Sort+by+Date&amp;amp;topic=Hardware+Design&quot;&gt;finesse empiriquement choisie à la conception du tout premier Mac de 1984, d'une résolution de 512×342 sur son écran de 9&quot; de diagonale&lt;/a&gt;&amp;nbsp;; cette finesse de résolution restera en vigueur dans l'univers Apple jusqu'à la popularisation de Mac OSX en 2003.&lt;br /&gt;
Du côté des PC, rien n'est standard mais la moyenne sera d'environ 96&amp;nbsp;dpi à la fin des années 1990s, selon les études marchés menées par Microsoft, et restera dans ces eaux-là jusqu'à la mort des tubes cathodiques. Et j'oublie de préciser que &lt;strong&gt;&lt;a href=&quot;http://msdn.microsoft.com/fr-fr/library/cc294571.aspx&quot;&gt;le pixel carré n'est pas une évidence&lt;/a&gt;&lt;/strong&gt;…
&lt;/p&gt;
&lt;p&gt;
Donc à l'impression d'une page web, &lt;strong&gt;tous les navigateurs ajustaient les images par rapport à la taille rendue des polices imprimées en les zoomant&lt;/strong&gt;. En fait, le processus passait par l'OS, le service d'impression, &lt;/small&gt;le &lt;em&gt;driver&lt;/em&gt;, voire l'imprimante elle-même… &lt;small&gt;mais ne nous encombrons pas de détails bien oiseux&lt;/small&gt;&lt;/small&gt;. Plouf… plouf…
&lt;/p&gt;
&lt;p&gt;
Pour vous donner une idée, voici une simulation de rendu où je passe un extrait &lt;a href=&quot;http://dascritch.net/post/2014/05/12/Bricolages-en-img&quot;&gt;d'une page web prise au hasard&lt;/a&gt; de 100&amp;nbsp;dpi à 300&amp;nbsp;dpi. Les polices suivent, les images sont lissées, la plupart du temps par interpolation cubique. 
&lt;br /&gt;
Imprimer les images comme si elles étaient en 96&amp;nbsp;dpi donnera donc ce résultat magnifique comme si un graphiste avait oublié d'inclure ses images sources dans son document Quark XPress™ avant de l'envoyer chez l'imprimeur. &lt;small&gt;Et &lt;a href=&quot;http://dascritch.net/post/2011/06/14/Le-%C2%AB-bon-%C3%A0-tirer-%C2%BB&quot;&gt;en oubliant de vérifier le BAT&lt;/a&gt;, tant qu'on y est. Ne rigolez pas&amp;nbsp;: j'ai déjà vu cet incident arriver chez des éditeurs de BD.&lt;/small&gt;.
&lt;/p&gt;
&lt;figure class=&quot;avecfond&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-finesse-ecran.png&quot; alt=&quot;image à résolution d'écran&quot; /&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-finesse-print.png&quot; alt=&quot;image à résolution print&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
Cela ne vous rappelle rien&amp;nbsp;? Ben si, c'est &lt;b&gt;très exactement ce que nous avons avec un écran &lt;q&gt;High-DPI&lt;/q&gt;&lt;/b&gt; comme ceux des smartphones, des tablettes et des portables haut-de-gamme.
&lt;/p&gt;
&lt;p&gt;
La question n'a donc absolument rien de neuf, sauf que l'impression des pages webs a de manière générale toujours été négligée. Il existe parfois des feuilles de styles spéciales &lt;code&gt;@media print&lt;/code&gt;, mais bien peu de personnes ont considéré que les images ne devaient pas être mosaïquées à 72&amp;nbsp;dpi quand elles sortent en papier.&lt;br /&gt;
Sachant que désormais les imprimantes lasers couleurs peuvent largement monter à une résolution de 1200&amp;nbsp;dpi, on peut en déduire le postulat suivant&amp;nbsp;:
&lt;/p&gt;
&lt;blockquote&gt;
La résolution &lt;q&gt;Retina™&lt;/q&gt; professée par Apple révèle juste que les intégrateurs de sites web ne se soucient que maintenant d'&lt;strong&gt;un problème vieux comme le premier navigateur Netscape&lt;/strong&gt;.
&lt;/blockquote&gt;
&lt;p&gt;
Faut avouer que c'est un peu dommage&amp;nbsp;: on s'y serait attaqué nettement plus tôt, on aurait déjà les bonnes réponses, standards, utilisables, éprouvées et tout ça…
&lt;/p&gt;
&lt;figure&gt;
&lt;figcaption&gt;
Comme a ultime-soupiré &lt;a href=&quot;http://www.mozinor.com/anthologie_du_detournement.htm&quot;&gt;George Abitbol&lt;/a&gt; tout en finesse&amp;nbsp;:
&lt;/figcaption&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-MondeDeMerde.jpg&quot; alt=&quot;Monde de merde…&quot; /&gt;
&lt;/figure&gt;

&lt;p&gt;
Heureusement, on a presque les bonnes réponses.
&lt;/p&gt;

&lt;h3 id=&quot;surresolution&quot;&gt;La sur-résolution&lt;/h3&gt;
&lt;p&gt;
La sur-résolution semble être la méthode actuellement la moins honnie. Elle fonctionne naturellement et fait confiance au navigateur pour que son moteur fasse le travail. 
&lt;/p&gt;
&lt;p&gt;
Le principe est d'envoyer une image qui contient largement plus de pixels que les dimensions dans lesquelles elle sera insérée, Par exemple, à envoyer une image qui fait 1200×900, mais la contraindre dans sa balise d'appel à 300×225, comme suit&amp;nbsp;:
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;image.jpg&lt;/i&gt;&quot; &lt;em&gt;width&lt;/em&gt;=&quot;&lt;i&gt;300&lt;/i&gt;&quot; &lt;em&gt;height&lt;/em&gt;=&quot;&lt;i&gt;225&lt;/i&gt;&quot; &lt;em&gt;alt&lt;/em&gt;=&quot;&lt;i&gt;&lt;/i&gt;&quot; /&amp;gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Pour un navigateur qui a un pixel physique pour un pixel logique, il fera un rendu adouci en &lt;q&gt;moyennant&lt;/q&gt; 16 pixels pour en afficher un. Sur les (très vieux) navigateurs, le redimensionnement naturel de l'image peut être traité à la serpe (je ne prend que le premier pixel du carré, et j'oublie les autres), ce qui donne &lt;a href=&quot;http://dascritch.net/post/2014/04/09/Manuel-en-img#attr_dimensions&quot;&gt;un rendu un peu rustre que j'avais parlé justement en abordant les attributs de dimension&lt;/a&gt;.&lt;br /&gt;
Pour les écrans très fins où les navigateurs utilisent 16&amp;nbsp;pixels physiques (4×4) pour un logique, nous aurons l'image dans toute sa finesse.
&lt;/p&gt;

&lt;p&gt;
La technique de la sur-résolution peut mener à des réglages très fins. &lt;a href=&quot;http://www.reddit.com/r/typography/comments/26fgq6/google_updated_their_logo_they_moved_the/chqk2a7&quot;&gt;Google a récemment finement raboté d'un pixel son logo à cause du rendu en sous-résolution sur Chrome&amp;nbsp;:&lt;/a&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-GoogleSurez.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;La différence de rendu entre les deux images, réduites à 50% sur Chrome.&lt;br /&gt;Le flou du &lt;q&gt;L&lt;/q&gt; sur la barre du haut ou du bas, &lt;a href=&quot;http://fr.tintin.com/albums/show/id/19/page/0/0/coke-en-stock&quot;&gt;c'est comme la barbe de Haddock&lt;/a&gt;&amp;nbsp;:&lt;br /&gt;Vous n'en dormirez pas&amp;nbsp;!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;
Le principal inconvénient de cette méthode est qu'évidemment les images sont nettement plus lourdes, et peuvent prendre un temps plus que conséquent à se charger dans certaines conditions (genre smartphone en GPRS ou sur la 3G parisienne). Et, &lt;a href=&quot;http://dascritch.net/post/2012/01/17/Free-r%C3%A9volution&quot;&gt;réalité que nous avons oubliée depuis Free Mobile&lt;/a&gt;, le volume de données transférées peut coûter cher dans certains cas à l'utilisateur, et donc attirer une mauvaise réputation pour certains sites.&lt;br /&gt;
&lt;strong&gt;Les graphistes consciencieux pensent à &lt;a href=&quot;http://filamentgroup.com/lab/compressive-images.html&quot;&gt;réduire la qualité des images &lt;em&gt;lossy&lt;/em&gt; générées, par exemple en passant le jpeg de 85% à 75%&lt;/a&gt;&lt;/strong&gt;. Vu que 300&amp;nbsp;dpi est la limite perceptible pour l'œil humain, &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_jpeg&quot;&gt;les artefacts résultants&lt;/a&gt; ne se voient pas trop. Une autre astuce courante est de &lt;a href=&quot;http://dascritch.net/post/2012/01/24/Pour-une-compression-mieux-g%C3%A9r%C3%A9e&quot;&gt;préciser au compresseur quelles sont les zones les plus humainement importantes en terme de détails&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Un autre inconvénient est la maintenance&amp;nbsp;: le style est embarqué dans l'image, mais en cas de changement de la ressource et de sa dimension, il faut repasser derrière tous les appel &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; pour corriger les attributs de dimension. De la maintenabilité digne des années 1990s, quoi…
&lt;/p&gt;

&lt;h3 id=&quot;images_vectorielles&quot;&gt;Les images vectorielles&lt;/h3&gt;
&lt;figure class=&quot;r&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-vectoriserUnePhoto.jpg&quot; alt=&quot;photo vectorisée&quot; /&gt;
&lt;figcaption&gt;
&lt;small&gt;&lt;a href=&quot;http://www.vectorise.fr/vectoriser_image.htm&quot;&gt;Source : vectorise.fr&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Ce serait l'idéal.
&lt;/p&gt;
&lt;p&gt;
Malheureusement, une large partie des images qui composent le web sont issues de photos, scans ou captures vidéos. Si on converti une image raster pour &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_svg&quot;&gt;le format vectoriel svg&lt;/a&gt;, on atteint un poids délirant, des pertes de qualité conséquentes et…
&lt;/p&gt;
&lt;p&gt;
Bref : Contre-productif, passons.
&lt;/p&gt;

&lt;h3 id=&quot;formats_multiples&quot;&gt;Les images à formats multiples&lt;/h3&gt;
&lt;p&gt;
Comme &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_ico&quot;&gt;le format .ico qui peut contenir des images à de multiples résolutions différentes&lt;/a&gt;. Les éventuels soucis de brevets détenus par Microsoft sont nuls et non-avenus vu son âge canonique. Sauf que ce format d'image n'est pas du tout supporté par Apple, et que son support n'est pas consistant entre Chrome et Firefox.
&lt;br /&gt;
On peut rester dans la même idée d'utiliser un format d'image conteneur, à savoir le PNG, mais il faudrait là aussi que tous les navigateurs puissent en adresser une ressource interne particulière, soit via l'URL, soit via une propriété DOM.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;http://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-ico.png&quot; alt=&quot;Décomposition d'un document .ico&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
On peut alternativement jouer avec &lt;a href=&quot;http://dascritch.net/post/2014/06/10/Progressivement-en-img#chargementprogressif&quot;&gt;les formats d'images à chargement progressif&lt;/a&gt;, le &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;PNG&lt;/a&gt; en mode progressif Adam7 ou encore le &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_jpeg&quot;&gt;jpeg/jfif&lt;/a&gt; progressif. On garde une compatibilité parfaite avec l'ensemble des navigateurs. Le problème est que nous envoyons une quantité de données aux clients qui ne sera jamais entièrement exploitée. Ce souci pourrait être indirectement résolu par une transmission partielle interrompu des données. Techniquement, on le fait déjà depuis 2007 via &lt;a href=&quot;http://benramsey.com/blog/2008/05/206-partial-content-and-range-requests/&quot;&gt;un &lt;code&gt;Request-Range&lt;/code&gt; et les retours de requêtes HTTP code &lt;code&gt;206 partial content&lt;/code&gt;&lt;/a&gt;, donc c'est faisable.
&lt;/p&gt;
&lt;p&gt;
Mais pour le faire proprement, il faudrait modifier les infrastructures côté serveur. Cette solution demande donc beaucoup d'huile de coude sur les serveurs et les proxies en plus d'adapter les navigateurs. Beaucoup de &lt;q&gt;si&lt;/q&gt; avant d'arriver au résultat escompté on est loin de l'économie espérée…
&lt;/p&gt;

&lt;h3 id=&quot;methode_noscript&quot;&gt;La méthode &amp;lt;noscript&amp;gt;&lt;/h3&gt;
&lt;p&gt;
Il existe une méthode intermédiaire qui consiste à charger l'image avec la bonne finesse par javascript. 
Je n'aurais jamais découvert cette méthode &lt;a href=&quot;http://dascritch.net/post/2014/05/20/Un-Sud-Web-en-hauteur#pointofview&quot;&gt;sans Sud-Web où &lt;del&gt;Thomas Parisot&lt;/del&gt; les éditions Eyrolles m'ont offert&lt;/a&gt; l'excellent livre &lt;a href=&quot;http://www.eyrolles.com/Informatique/Livre/integration-web-les-bonnes-pratiques-9782212133707&quot;&gt;«&amp;nbsp;&lt;strong&gt;Intégration web&amp;nbsp;: les bonnes pratiques&lt;/strong&gt;&amp;nbsp;» de Corinne Schillinger&lt;/a&gt;. 
&lt;br /&gt;
Je vous laisse goûter la syntaxe de l'astuce&amp;nbsp;:
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
&amp;lt;&lt;strong&gt;span&lt;/strong&gt; &lt;em&gt;class&lt;/em&gt;=&quot;&lt;i&gt;retina-holding&lt;/i&gt;&quot; &lt;em&gt;data-width&lt;/em&gt;=&quot;&lt;i&gt;600&lt;/i&gt;&quot; &lt;em&gt;data-height&lt;/em&gt;=&quot;&lt;i&gt;400&lt;/i&gt;&quot; &lt;em&gt;data-lowres&lt;/em&gt;=&quot;&lt;i&gt;img-x1.jpg&lt;/i&gt;&quot; &lt;em&gt;data-hires&lt;/em&gt;=&quot;&lt;i&gt;img-x2.jpg&lt;/i&gt;&quot; &lt;em&gt;data-hireszoom&lt;/em&gt;=&quot;&lt;i&gt;2&lt;/i&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;&lt;strong&gt;noscript&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;img-x1.jpg&lt;/i&gt;&quot; &lt;em&gt;width&lt;/em&gt;=&quot;&lt;i&gt;600&lt;/i&gt;&quot; &lt;em&gt;height&lt;/em&gt;=&quot;&lt;i&gt;400&lt;/i&gt;&quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;strong&gt;noscript&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;lt;/&lt;strong&gt;span&lt;/strong&gt;&amp;gt;
&lt;/code&gt;
&lt;/p&gt;
&lt;a href=&quot;http://floate.com.au/2012/05/high-res-images-for-retina-displays/&quot;&gt;Le hack peut sembler “élégant” par rapport à d'autres&lt;/a&gt; mais&lt;br /&gt;
… Cela ne vous rappelle rien&amp;nbsp;?
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-AsterixEnCorse.jpg&quot; alt=&quot;Quatre corses très âgés assis sur un banc&quot; /&gt;
&lt;figcaption&gt;&lt;small&gt;Source : «&amp;nbsp;&lt;em&gt;Astérix en Corse&lt;/em&gt;&amp;nbsp;» par René Goscinny et Albert Uderzo, &lt;a href=&quot;http://asterixofficiel.tumblr.com/&quot;&gt;cité sur le tumblr officiel&lt;/a&gt;. © Éditions Albert René&lt;/small&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Eeeeeehh si&amp;nbsp;!&lt;br /&gt;
&lt;a href=&quot;http://dascritch.net/post/2014/06/10/Progressivement-en-img#lazyloading&quot;&gt;Le &lt;em&gt;lazy loading&lt;/em&gt; qui nous a tant fait hurler &lt;del&gt;de rire&lt;/del&gt; dans le précédent épisode&lt;/a&gt;. Et comme lui, cette méthode possède de nombreux inconvénients&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;À moins que javascript ne soit désactivé par le navigateur, l'image n'est pas chargée naturellement et donc peut ne jamais apparaître en cas de plantage&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;La syntaxe ne se montre pas de la plus belle des légèretés, même si elle tente de respecter approximativement la sémantique. Malgré tout, le référencement et les outils de lecture différés tels que &lt;a href=&quot;https://www.wallabag.org/&quot;&gt;Wallabag&lt;/a&gt; ou &lt;a href=&quot;http://getpocket.com/&quot;&gt;Pocket&lt;/a&gt; ne trouveront pas l'image&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Comme pour &lt;a href=&quot;https://dascritch.net/post/2014/06/12/Finesse-en-img#surresolution&quot;&gt;la sur-résolution&lt;/a&gt;, il faut déclarer explicitement les dimensions logiques de l'image, ce qui alourdi la notation et n'aidera pas à la maintenance&amp;nbsp;;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;webcomponent&quot;&gt;Le Web Component&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.w3.org/TR/components-intro/&quot;&gt;Le Web Component est une proposition de standard du W3C&lt;/a&gt; pour construire ses propres balises HTML. Vous pouvez les définir comme des macros côté client pour du code html, javascript et css. Une partie du html généré peut même être caché en &lt;em&gt;shadow-DOM&lt;/em&gt;.&lt;br /&gt;
La méthode n'existe pas encore en natif dans les navigateurs, mais je vous fais le pari que sa généralisation native ne va pas tarder car elle est vraiment très pratique. En attendant, des bibliothèques &lt;em&gt;polyfill&lt;/em&gt; comme &lt;a href=&quot;http://www.polymer-project.org/&quot;&gt;Polymer&lt;/a&gt; ou &lt;a href=&quot;http://bosonic.github.io/&quot;&gt;Bosonic&lt;/a&gt; peuvent facilement vous aider à implémenter ce nouveau standard.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-Maquereau.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Oui, bon, j'aurais tenté de vous faire passer un maquereau pour une macro…&lt;br /&gt;Je voudrais vous y voir à illustrer un sujet technique. &lt;small&gt;&lt;a href=&quot;http://cuisine.larousse.fr/lecon-experts/ingredients/detail/maquereau&quot;&gt;Source : La rousse&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Utiliser un Web Component peut pénaliser votre indexation si vous créez une mauvaise sémantique, et là aussi, il deviendra impossible aux outils tiers de voir vos images ou en cas de plantage javascript. C'est là encore un comportement à éviter pour tout ce qui est publication, blog ou site d'e-commerce.&lt;br /&gt;
Néanmoins, si je devais implémenter l'exemple précédent de la manière la plus propre possible, j'arriverai à&amp;nbsp;:
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
&amp;lt;&lt;strong&gt;responsive-img&lt;/strong&gt; &lt;em&gt;data-x2&lt;/em&gt;=&quot;&lt;i&gt;img-x2.jpg&lt;/i&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;img-x1.jpg&lt;/i&gt;&quot; &lt;em&gt;width&lt;/em&gt;=&quot;&lt;i&gt;600&lt;/i&gt;&quot; &lt;em&gt;height&lt;/em&gt;=&quot;&lt;i&gt;400&lt;/i&gt;&quot;  &lt;em&gt;alt&lt;/em&gt;=&quot;&lt;i&gt;&lt;/i&gt;&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;&lt;strong&gt;/responsive-img&lt;/strong&gt;&amp;gt;
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Une balise &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; standard dont l'appel n'est pas bloqué, à priori, je ferais difficilement plus propre. Et je peux me passer des attributs de dimension si je fais &lt;a href=&quot;http://youtu.be/X_EaLZka9ZE?t=15s&quot;&gt;excessivement confiance aux dimensions servies &lt;small&gt;comme on dit en Côte d'Ivoire&lt;/small&gt;&lt;/a&gt;. En fait non, je ne peux pas. RAAAHHH&amp;nbsp;!
&lt;/p&gt;

&lt;h3 id=&quot;content-negotiation&quot;&gt;Via Content negotiation&lt;/h3&gt;
&lt;p&gt;
La solution serait théoriquement transparente dans le code HTML, puisque tout se passe dans l'étape de négociation HTTP entre le navigateur et le serveur. Effectivement, quand le navigateur demande une ressource à un serveur, il dit ce qu'il peut accepter comme format de document pour cette ressource.&lt;br /&gt;
Ainsi, pour les ressources images, mon navigateur indique au serveur ce qu'il attend, et ses préférences&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;Accept: image/png,image/*&lt;i&gt;;q=0.8&lt;/i&gt;,*/*&lt;i&gt;;q=0.5&lt;/i&gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
La solution me semble élégante. Mais elle réclamerait beaucoup d'adaptation côté serveur, et aussi beaucoup de technicité car il faudra travailler les fichiers de configuration de vos Apache, n'ginx&amp;nbsp;! Or qui dit bricoler dans la configuration serveur, dit solution inatteignable dans un très grand nombre de situations, ce qui serait très frustrant. Sans compter qu'une nouvelle finesse d'écran sur le marché demandera de reparamétrer à nouveau les serveurs. Et elle ne résoudrait pas le problème de la différence de dimensions à prendre en compte par le navigateur.&lt;br /&gt;
En clair, &lt;strong&gt;ce n'est pas la meilleure car elle ne peut fonctionner que sur un hébergement dynamique&lt;/strong&gt;. 
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-content-negotiation-graph.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Exemple de négociation de contenu&amp;nbsp;: ici un texte est disponible entre différentes versions linguistiques, mais celui qui est servi dépend de la langue de l'ordinateur du client.&lt;br /&gt;&lt;a href=&quot;http://www.w3.org/blog/2006/02/content-negotiation/&quot;&gt;Source&amp;nbsp;: Blog W3C, «&amp;nbsp;&lt;em&gt;Content Negotiation&amp;nbsp;: why it is useful, and how to make it work.&lt;/em&gt;&amp;nbsp;»&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Si je devais la construire, voici comment fonctionnerait mon &lt;i&gt;polyfill&lt;/i&gt;&amp;nbsp;:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Un javascript côté client stocke un cookie pour le domaine indiquant la finesse d'écran attendue. Disons &lt;code&gt;X-pitch=&lt;i&gt;4&lt;/i&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Un &lt;code&gt;.htaccess&lt;/code&gt; peut rediriger la requête en fonction de la cookie et de la disponibilité de la ressource, en indiquant la finesse servie par un paramètre GET &lt;code&gt;image.jpg?pitch=4&lt;/code&gt; ou &lt;a href=&quot;http://dascritch.net/post/2014/05/12/Bricolages-en-img#alorsjemesuisgratte&quot;&gt;une sur-extension&lt;/a&gt;&lt;code&gt;image.jpg,pitch_4&lt;/code&gt;.&lt;br /&gt;
Si jamais la finesse demandée n'existe pas, la redirection se fait vers une finesse moindre, par ex.: &lt;code&gt;image.jpg,pitch_2&lt;/code&gt;.&lt;br /&gt;
Si aucune autre finesse que l'image par défaut n'est disponible, aucune redirection n'est effectuée.
&lt;/li&gt;
&lt;li&gt;Côté navigateur, à la réception de l'image, le javascript (ou la css en &lt;em&gt;trickant&lt;/em&gt; comme un taré&amp;nbsp;?) applique le ratio de réduction correspondant si l'url de  ressource d'image chargée comporte cette indication de finesse&lt;/li&gt; 
&lt;/ol&gt;
&lt;p&gt;
Ce que j'aime dans ce scénario, c'est que si nous avons un souci de javascript ou côté serveur, le comportement par défaut du navigateur n'est pas impacté. De même, nous n'aurons aucun souci de syntaxe et pour les outils tiers.
&lt;/p&gt;
&lt;p&gt;
Enfin bon, c'est juste une idée jetée comme ça à 2&amp;nbsp;h du matin, sans même en vérifier la faisabilité. Il y a sûrement un os quelque part si personne n'y avait pensé jusqu'ici, non&amp;nbsp;?&lt;br /&gt;
Genre, comment fais-tu quand la requête vient de la CSS et pas de &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt;&amp;nbsp;?
&lt;/p&gt;
&lt;h3&gt;La proposition du W3C : srcset=&quot;https://dascritch.net/post/2014/06/12/&quot;&lt;/h3&gt;
&lt;p&gt;
Vue la longueur de mon billet uniquement sur les hacks possibles, et vu ce que j'ai à écrire sur la proposition de cet attribut, &lt;a href=&quot;http://dascritch.net/post/2014/06/17/Propositions-en-img&quot;&gt;je vais réserver ça pour un dernier chapitre.&lt;br /&gt;
Parce que, il y en a à dire, mais surtout à proposer.&lt;/a&gt;
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Progressivement en ‹img /›</title>
		<link>https://dascritch.net/post/2014/06/10/Progressivement-en-img</link>
		<guid isPermaLink="false">urn:md5:e37fd31dc22fd1c0f857cf466a3777e7</guid>
		<dc:date>2014-06-10T09:18:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Que faire quand on a trop d'images ou qu'elles sont trop lourdes pour les tuyaux d'internets&amp;nbsp;? Comment donner l'illusion qu'elles arrivent dans un délai raisonnable&amp;nbsp;? Jouer avec l'affichage plus tôt ou plus tard d'une image, bonne ou mauvaise idée&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;Que faire quand on a trop d'images ou qu'elles sont trop lourdes pour les tuyaux d'internets&amp;nbsp;? Comment donner l'illusion qu'elles arrivent dans un délai raisonnable&amp;nbsp;? Jouer avec l'affichage plus tôt ou plus tard d'une image, bonne ou mauvaise idée&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;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;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;strong&gt;Progressivement 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/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;
}
&lt;/style&gt;

&lt;p&gt;
Dites-moi, les jeunes, quelle est la vitesse de votre débit&amp;nbsp;? 12&amp;nbsp;Mbds&amp;nbsp;? 20&amp;nbsp;Mbds&amp;nbsp;? 500&amp;nbsp;Mbds&amp;nbsp;? Eh bien dites vous qu'il fut une époque où la vitesse moyenne de téléchargement plafonnait à 4,8&amp;nbsp;kbds&amp;nbsp;! À cette vitesse, cela voulait dire qu'un document de &lt;strong&gt;100&amp;nbsp;ko mettait au mieux plus de 3 p☠♝☈➿ns de minutes à arriver&lt;/strong&gt; en entier&amp;nbsp;!
&lt;/p&gt;
&lt;p&gt;
Internet, n'a pas toujours connu le haut-débit.&lt;br /&gt;
Des fois, les images sont chargées trop lentement alors on tente de les afficher prématurément. D'autres fois, on retarde &lt;strong&gt;exprès&lt;/strong&gt; son chargement.
&lt;/p&gt;

&lt;p&gt;
Ce dernier comportement peut se justifier, mais comporte de multiples erreurs.
&lt;/p&gt;

&lt;h3 id=&quot;chargementprogressif&quot;&gt;Les images à chargement progressif&lt;/h3&gt;
&lt;p&gt;
Donc, lors de sa préhistoire, le web n'arrivait à des débits de 1&amp;nbsp;Mbds que dans certains laboratoires, c'est à dire à moins de 10&amp;nbsp;mètres du serveur. La plupart du temps, quand on chargeait une image, ça se passait comme ça&amp;nbsp;:
&lt;/p&gt;
&lt;figure class=&quot;avecfond&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-png-normal.gif&quot; alt=&quot;png normal&quot; /&gt;
&lt;figcaption&gt;
Image fortement accélérée : Parfois ça prenait plus d'une minute…
&lt;br /&gt;
&lt;small&gt;Source : voir plus bas&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Certains formats de fichiers ont été spécialement conçus pour être transmis et affichés progressivement. Dans ce cas, l'algorithme de compression de l'image ne peut être optimum, mais cela permet un meilleur confort côté utilisateur si son modem est très lent.
&lt;/p&gt;
&lt;p&gt;
À la haute époque dinosauriale des BBS, les serveurs qui se contactaient en RTC (donc par téléphone avec des modems qui allaient de 300&amp;nbsp;bauds à 4&amp;nbsp;kbds), &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_gif&quot;&gt;un format a émergé en 1987, le GIF&lt;/a&gt;.&lt;br /&gt;
Le format GIF avait donc à la fois &lt;a href=&quot;https://www.cs.duke.edu/csed/curious/compression/lzw.html&quot;&gt;un excellent format de compression d'image pour l'époque (LZW)&lt;/a&gt; et un mode progressif d'affichage de l'image. Son principe était simple&amp;nbsp;: au lieu d'enregistrer chaque ligne horizontale l'une après l'autre, on enregistre chaque ligne en en sautant 8, arrivé en bas de l'image, on repart du haut en prenant la ligne non-enregistrée suivante avec un pas deux fois plus fin. C'est &lt;strong&gt;un format entrelacé&lt;/strong&gt;, dans un concept plus évolué que la télévision analogique qui alternait les lignes paires et impaires. L'idée étant de permettre d'avoir un aperçu (certes très pixelisé) global de l'image avant qu'elle ne soit complètement chargée.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Comme l'image ainsi enregistrée était plus lourde, eh bien on attendait moins longtemps. Logique.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Pour les logiciels clients qui pouvaient le gérer, nous obtenions un effet de stores vénitiens qui s'ouvraient progressivement. L'image complète se reconstituait en 4 “passes”.
&lt;/p&gt;
&lt;figure class=&quot;avecfond&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-Gif_interlace_wikipedia.gif&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Excellente recréation de l'effet avec le logo de la Wikipédia.&lt;br /&gt;
&lt;small&gt;Source : &lt;a href=&quot;http://en.wikipedia.org/wiki/File:Gif_interlace_wikipedia.gif&quot;&gt;Dominique Toussaint sur Wikimedia&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
À noter que le PNG possède aussi un mode entrelacé, un algorithme appelé “Adam7”, pour 7 passes&amp;nbsp;:
&lt;/p&gt;
&lt;figure class=&quot;avecfond&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-Adam7_passes.gif&quot; alt=&quot;1406-Img-Adam7_passes.gif&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
Ce qui, dans les faits, donne un effet de mosaïque inverse&amp;nbsp;:
&lt;/p&gt;
&lt;figure class=&quot;avecfond&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-png-progressif.gif&quot; alt=&quot;png progressif&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;http://blog.codinghorror.com/progressive-image-rendering/&quot;&gt;Source : Le toujours excellent blog technique Coding Horror&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#format_jpeg&quot;&gt;Le format JPEG&lt;/a&gt; n'était pas prévu pour être un format de transmission bas débit, mais une fois qu'il fut supporté dans Netscape 1, il fut lui aussi doté d'un mode d'enregistrement progressif. Ce dernier tire parti du mode de compression par macroblocs, suivi d'un affinage par vaguelettes. Mais là encore, il se paie&amp;nbsp;: le poids du document est sensiblement plus lourd.
&lt;/p&gt;
&lt;figure class=&quot;avecfond&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-jpeg-progressif.jpg&quot; alt=&quot;jpeg progressif&quot; /&gt;
&lt;figcaption&gt;
L'affichage d'un JPEG enregistré  en mode progressif.&lt;br /&gt;
&lt;a href=&quot;http://www.yuiblog.com/blog/2008/12/05/imageopt-4/&quot;&gt;Source&amp;nbsp;: l'excellent article de Stoyan Stefanov sur le YUI-blog&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Comme j'en ai déjà parlé dans &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img&quot;&gt;un précédent chapitre de ce dossier&lt;/a&gt;, il se trouve que MSIE n'a jamais pris en compte l'affichage progressif d'une image. Et &lt;a href=&quot;http://dascritch.net/post/2006/10/13/562-la-seconde-guerre-du-web-n-aura-pas-lieu&quot;&gt;comme MSIE était devenu le navigateur dominant de l'ère proto-ADSL&lt;/a&gt;, enregistrer une image en mode progressif était devenu complètement contre-productif.
&lt;/p&gt;
&lt;p&gt;
Cette solution du chargement progressif des images fut traité très différemment dans le cadre du son et de la vidéo, puisque lesdits types de documents sont techniquement conçus pour un décodage à la volée des données, au fur et à mesure de la temporalité du document, avec parfois une capacité à s'adapter à la vélocité de la transmission.
&lt;br /&gt;
&lt;small&gt;Vous ne m'avez pas compris ? Raaaah flûte !&lt;/small&gt;
&lt;/p&gt;
&lt;h3 id=&quot;attribut_lowsrc&quot;&gt;L'attribut lowsrc=&quot;https://dascritch.net/post/2014/06/10/&quot;&lt;/h3&gt;
&lt;p&gt;
Une autre solution fut proposée par les constructeurs de navigateurs, l'attribut &lt;code&gt;&lt;em&gt;lowsrc&lt;/em&gt;=&quot;&quot;&lt;/code&gt;. &lt;a href=&quot;http://dascritch.net/post/2014/04/09/Manuel-en-img#attr_lowsrc&quot;&gt;Oui, j'en ai déjà parlé dans le deuxième volet&lt;/a&gt;, mais il mérite d'être mieux expliqué ici.
&lt;/p&gt;
&lt;p&gt;
Donc, je vous en rappelle le principe, une image est appelée comme suit :
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;lowsrc&lt;/em&gt;=&quot;&lt;i&gt;preview.gif&lt;/i&gt;&quot; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;image.jpg&lt;/i&gt;&quot;&amp;gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
L'idée étant que le navigateur commence par charger &lt;code&gt;&lt;i&gt;preview.gif&lt;/i&gt;&lt;/code&gt; qui est une version monochrome de l'image normale et donc largement plus rapide à télécharger, une ombre théoriquement fugace qui ne persiste que les 4 minutes nécessaires pour récupérer tout les autres éléments de la page.&lt;br /&gt;
Cela demande forcément de traiter en avance l'image, puisque dans les années 1990s, vous n'aviez pratiquement pas de solution pour éditer une image côté serveur.
&lt;/p&gt;
&lt;p&gt;
Si je reprends l'image du dessus, ça donne ça&amp;nbsp;: 
&lt;/p&gt;
&lt;figure class=&quot;avecfond&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-lowsrc.png&quot; alt=&quot;chargement avec préchargement avant&quot; /&gt;
&lt;figcaption&gt;
&lt;small&gt;Aaaah, &lt;a href=&quot;http://caca.zoy.org/study/part3.html&quot;&gt;ce bon vieux Floyd-Steinberg&lt;/a&gt;. J'espère que tu m'excuseras de t'avoir trompé avec le true-color, qui, je sais, n'est qu'un mirage devant l'infinité des nuances de la vie… Oui, je t'ai aimé et je t'ai quitté…&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
À noter que l'apparition progressive de l'image pouvait avoir lieu selon certaines conditions passant de &lt;q&gt;vaudou&lt;/q&gt; à &lt;q&gt;black magic&lt;/q&gt; &lt;strong&gt;jusqu'au fatidique &lt;q&gt;en fait, non, arrête&amp;nbsp;: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=92453#c4&quot;&gt;ça ne sert strictement à rien&lt;/a&gt;&lt;/q&gt;…&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
La troisième capture simulée n'est pas complète&amp;nbsp;?&lt;br /&gt;
Eh ben oui, forcément, comme il faut charger &lt;strong&gt;deux fois l'image&lt;/strong&gt;, ça prend largement plus de temps pour l'afficher proprement au final. Or c'est justement cette double négociation qui peut prendre le plus de temps dans certains cas. Finalement, cet attribut a plus ralenti les navigateurs que donner une impression de rendu &lt;q&gt;accéléré&lt;/q&gt;, il s'est montré contre-productif. &lt;code&gt;&lt;em&gt;lowsrc&lt;/em&gt;=&quot;&quot;&lt;/code&gt; n'a d'ailleurs jamais été standardisé par le W3C, et a disparu dans les cendres d'une époque pré-CSS. Il a été oublié par tous les navigateurs qui l'avaient implémentés, à ma connaissance, Netscape, Opera et quelques navigateurs embarqués dans des &lt;i&gt;feature phones&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;small&gt;
Sauf quelque SEO-LOL qui me soutenait mordicus qu'il faut déclarer deux fois la même ressource &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;lowsrc&lt;/em&gt;=&quot;&lt;i&gt;image.jpg&lt;/i&gt;&quot; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;image.jpg&lt;/i&gt;&quot;&amp;gt;&lt;/code&gt; parce que «&amp;nbsp;&lt;em&gt;Ça donne plus d'importance à l'image pour les moteurs de recherche&lt;/em&gt;&amp;nbsp;». Si&amp;nbsp! Si&amp;nbsp;! Il y croyait fermement. Facepalm dans sa tronche.
&lt;/small&gt;
&lt;/p&gt;

&lt;h3 id=&quot;lazyloading&quot;&gt;Lazy loading : Le chargement volontairement différé&lt;/h3&gt;

&lt;p&gt;
&lt;a href=&quot;http://jquery.eisbehr.de/lazy/index.php?c=loading&quot;&gt;&lt;img class=&quot;r&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-delayed-lazyloading_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Le &lt;em&gt;lazy loading&lt;/em&gt; est une “mode” apparue en 2010. Elle consiste à ne pas laisser les navigateurs charger naturellement les images, mais attendre que l'endroit où l'image doit apparaître soit visible dans le &lt;em&gt;viewport&lt;/em&gt;. &lt;a href=&quot;http://jquery.eisbehr.de/lazy/&quot;&gt;Ce comportement est réalisé par une bibliothèque javascript&lt;/a&gt;. Une idée qui fonctionne pour les pages web qui ont une certaine longueur.
&lt;/p&gt;
&lt;p&gt;
Attention : nous ne sommes pas dans le concept de scroll infini, où des portions complètes de contenus sont chargées au fur et à mesure qu'on descend dans la page. Ici, l'ensemble du texte, &lt;a href=&quot;https://dascritch.net/tag/dom&quot;&gt;du layout, du DOM&lt;/a&gt;, des éléments du document sont chargées, SAUF les images, et donc &lt;a href=&quot;http://jquery.eisbehr.de/lazy/index.php?c=loading&quot;&gt;il faut descendre pour que le chargement se déclenche&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Sincèrement, je trouve ce système extrêmement désagréable. Je prends par exemple un article que je commence à lire. Au bout d'une minute, souhaitant lire la suite, je scrolle avec &lt;kbd&gt;⇟&amp;nbsp;Page&amp;nbsp;down&lt;/kbd&gt;, des espaces blancs apparaissent brusquement dans le texte, puis des images arrivent. Cela distrait le lecteur, et donne une forte impression de lenteur au site. T'avais pas le temps de tout charger alors que je lisais tes premiers paragraphes&amp;nbsp;? SRSLY
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1406-Img-delayed-load_m.jpg&quot; alt=&quot;ah tiens ? il manque des images&quot; /&gt;
&lt;figcaption&gt;
Flickr fait un &lt;em&gt;infinite scroll&lt;/em&gt; totalement justifié, mais qui ressemble à ce dont je veux illustrer&amp;nbsp;: une impression de lenteur.&lt;br /&gt;
&lt;small&gt;&lt;a href=&quot;https://www.flickr.com/groups/2671607@N21/pool/&quot;&gt;Source : pool flickr de Sud Web 2014&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
&lt;strong&gt;Pourquoi &lt;a href=&quot;http://dascritch.net/post/2013/03/26/Dirty-Hacky-%3A-je-parse-en-HTML-.357-SW&quot;&gt;Dirty Hacky va dégainer et tirer sans sommations&lt;/a&gt;&amp;nbsp;? Parce que la sémantique html de votre page est cassée&lt;/strong&gt;, elle perd de son sens. Un peu comme si je mettais une passoire à un endroit, et que si je la regarde, au bout de 3 secondes, une casserole apparaît à sa place.
&lt;/p&gt;
&lt;p&gt;
Les navigateurs chargent toutes les ressources sans chercher à voir s'il y en a immédiatement besoin. Oui, bravo, tu viens de définir exactement le principe d'intégrité d'un document. Mais peut-être ne sais-tu pas que le web est utilisé bien au-delà de ton navigateur web&amp;nbsp;?&lt;br /&gt;
Forcément, ignorer la sémantique casse beaucoup de fonctions normales du web&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si votre javascript ne se charge pas ou plante brusquement, les images n'apparaissent absolument pas&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;L'indexation de votre page par les moteurs de recherches risque de devenir incohérente voire fortement pénalisée&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;L'indexation des images par ces mêmes moteurs ne se fait plus&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Cela gâche l'impression d'une page, puisque les images ne sont pas chargées par défaut, il faut faire défiler entièrement la page dans son navigateur avant, et encore…&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;
En cassant le web sémantique, on casse aussi l'usage de services tiers comme &lt;a href=&quot;https://dascritch.net/tag/rss&quot;&gt;les flux RSS&lt;/a&gt;, ou encore les lecteurs différés comme &lt;a href=&quot;https://www.wallabag.org/&quot;&gt;Wallabag&lt;/a&gt; ou &lt;a href=&quot;http://getpocket.com/&quot;&gt;Pocket&lt;/a&gt; puisque les images n'y apparaîtront jamais&amp;nbsp;;
&lt;/li&gt;
&lt;li&gt;Les avantages à venir des navigateurs, notamment un éventuel chargement intelligent des ressources selon leur position géométrique, ne sera jamais exploitable&amp;nbsp;;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Je me suis rendu compte que la plupart des sites qui utilisent de genre d'artifice ont du texte au kilomètre, suivi d'un nombre très conséquent d'images, le tout préfixé par un titre dans le genre «&amp;nbsp;&lt;cite&gt;Les 500 images de clowns se cassant la gueule qui font rire&lt;/cite&gt;&amp;nbsp;» ce qui leur assure un fort trafic.&lt;br /&gt;
Après avoir longuement tortionné à l'épluche-légume une des personnes qui l'utilise &lt;small&gt;(Oui, l'épluche-légume m'a semblé être l'outil le plus à même de faire comprendre la torture induite par ce genre de script à la con)&lt;/small&gt;, j'ai enfin eu des raisons “valables”&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;«&amp;nbsp;&lt;em&gt;Parce que j'ai une page trop lourde donc elle met trop de temps à se charger.&lt;/em&gt;&amp;nbsp;» Déjà, enlève 50% de tes javascripts de pubs, &lt;a href=&quot;http://dascritch.net/post/2007/08/22/Tassons-les-Javascripts&quot;&gt;tasse tes assets&lt;/a&gt;, optimise la compression de tes images et surtout simplifie au maximum ta maquette&amp;nbsp;: elle est sûrement trop complexe&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;«&amp;nbsp;&lt;em&gt;Parce que mon serveur a beaucoup trop de traffic à encaisser.&lt;/em&gt;&amp;nbsp;» Alors commence à investir dans un serveur auxiliaire, fait appel à un vrai CDN, voire commence à faire du &lt;em&gt;load balancing&lt;/em&gt; au cas où ton serveur crashe&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;«&amp;nbsp;&lt;em&gt;Parce que je me fais sans cesse piquer mes images.&lt;/em&gt;&amp;nbsp;» C'est le principe du web, même si tu bloques l'accès à “Voir le code source” ou à &quot;Enregistrer l'image sous&quot; &lt;a href=&quot;http://www.e-monsite.com/pages/tutoriels/trucs-et-astuces-pour-debuter/empecher-le-clic-droit-sur-votre-site.html&quot;&gt;par le menu contextuel&lt;/a&gt;, tu n'as aucune chance d'empêcher ni le &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;U&lt;/kbd&gt;, ni le &lt;kbd&gt;F12&lt;/kbd&gt;. Alors un &lt;code&gt;wget&lt;/code&gt; des familles, n'en parlons pas. Peine perdue&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Et enfin ce p'tit con qui est trop jeune pour avoir eu un modem 28kb de chez US Robotics, il me dit que «&amp;nbsp;&lt;em&gt;mais c'est trop génial, ça donne un effet totalement inédit…&lt;/em&gt;&amp;nbsp;».&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href=&quot;http://dascritch.net/post/2013/03/26/Dirty-Hacky-%3A-je-parse-en-HTML-.357-SW&quot;&gt;&lt;img src=&quot;http://dascritch.net/vrac/.blog2/webdev/1303-DirtyHacky/.1303-DirtyHacky_s.jpg&quot; class=&quot;r&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
C'est à ce moment-là qu'il a perdu d'une manière inédite ses dernières dents, dommage collatéral à cette enquête de terrain par votre serviteur. Dirty Hacky conclu l'interrogatoire avec sa phrase habituelle&amp;nbsp;:&lt;br /&gt;
&lt;strong&gt;BANG&amp;nbsp! BANG&amp;nbsp! &amp;nbsp; &amp;nbsp; &amp;nbsp; BANG&amp;nbsp!&lt;/strong&gt;
&lt;/p&gt;
&lt;h3 id=&quot;viaiframe&quot;&gt;Le chargement avec… une iframe ?!?&lt;/h3&gt;
&lt;p&gt;
Ça, c'est tout récent, et c'est surtout le fait de Getty Images. Getty Images comporte le plus important fonds de photos historiques et un des plus importants en &lt;a href=&quot;http://danslavielibrededroits.tumblr.com/&quot;&gt;images d'illustrations, ce qu'on appelle improprement le &lt;q&gt;libre de droit&lt;/q&gt;&lt;/a&gt;. En temps normal, l'usage de ce trésor est loué à prix d'or aux professionnels et &lt;q&gt;l'achat d'art&lt;/q&gt; est un poste souvent négligé par des web-agencies d'amateurs. &lt;a href=&quot;http://www.copyrightinfringement.org.uk/&quot;&gt;Getty a d'ailleurs une réputation agressive&lt;/a&gt; à pousser son copyright parfois très loin.
&lt;/p&gt;
&lt;p&gt;
Depuis Mars dernier, &lt;a href=&quot;http://www.gettyimages.fr/embed&quot;&gt;Getty Images met gracieusement à disposition des blogueurs&lt;/a&gt; une partie de son catalogue d'image, &lt;a href=&quot;http://blog.hubspot.com/marketing/getty-free-stock-photos-price&quot;&gt;mais avec d'importantes contreparties&lt;/a&gt;. Notamment l'insertion doit être fait avec &lt;code&gt;&amp;lt;&lt;strong&gt;iframe&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt;. Avantage : le design est conservé, les crédits de l'image aussi et l'agence peut parfaitement tracer l'usage et l'audience de son catalogue. Et, oui, nous avons bien un chargement différé de ce contenu par rapport au reste du document, puisqu'une iframe est souvent chargé en tout dernier par rapport aux autres assets de la page.
&lt;/p&gt;
&lt;figure&gt;
&lt;div style=&quot;background-color:#fff;display:inline-block;font-family:'Helvetica Neue',Arial,sans-serif;color:#a7a7a7;font-size:11px;width:100%;max-width:594px;&quot;&gt;&lt;div style=&quot;overflow:hidden;position:relative;height:0;padding:72.895623% 0 49px 0;width:100%;&quot;&gt;&lt;iframe src=&quot;//embed.gettyimages.com/embed/79989152?et=aPPYtV4EQxJ_ATOoCJBH7A&amp;sig=ETKPVJWzsosb8jVWgS6Njo8xYGgjUYItSljDpplHT4I=&quot; width=&quot;594&quot; height=&quot;482&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;display:inline-block;position:absolute;top:0;left:0;width:100%;height:100%;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p style=&quot;margin:0;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;padding:0;margin:0 0 0 10px;text-align:left;&quot;&gt;&lt;a href=&quot;http://www.gettyimages.com/detail/79989152&quot; target=&quot;_blank&quot; style=&quot;color:#a7a7a7;text-decoration:none;font-weight:normal !important;border:none;&quot;&gt;#79989152&lt;/a&gt; / &lt;a href=&quot;http://www.gettyimages.com&quot; target=&quot;_blank&quot; style=&quot;color:#a7a7a7;text-decoration:none;font-weight:normal !important;border:none;&quot;&gt;gettyimages.com&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p&gt;
Pour embarquer l'image précédente, voici le code source totalement &lt;em&gt;overkill&lt;/em&gt; que Getty Image me propose d'insérer&amp;nbsp;:&lt;br /&gt;
&lt;code&gt;
&amp;lt;&lt;strong&gt;div&lt;/strong&gt; &lt;em&gt;style&lt;/em&gt;=&quot;&lt;i&gt;[…]&lt;/i&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;strong&gt;div&lt;/strong&gt; &lt;em&gt;style&lt;/em&gt;=&quot;&lt;i&gt;[…]&lt;/i&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;strong&gt;iframe&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;//embed.gettyimages.com/embed/79989152?[…]&lt;/i&gt;&quot; &lt;em&gt;width&lt;/em&gt;=&quot;&lt;i&gt;594&lt;/i&gt;&quot; &lt;em&gt;height&lt;/em&gt;=&quot;&lt;i&gt;482&lt;/i&gt;&quot; &lt;em&gt;scrolling&lt;/em&gt;=&quot;&lt;i&gt;no&lt;/i&gt;&quot; &lt;em&gt;frameborder&lt;/em&gt;=&quot;&lt;i&gt;0&lt;/i&gt;&quot; &lt;em&gt;style&lt;/em&gt;=&quot;&lt;i&gt;[…]&lt;/i&gt;&quot;&amp;gt;&amp;lt;/&lt;strong&gt;iframe&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;lt;/&lt;strong&gt;div&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;strong&gt;p&lt;/strong&gt; &lt;em&gt;style&lt;/em&gt;=&quot;&lt;i&gt;[…]&lt;/i&gt;&quot;&amp;gt;&amp;lt;/&lt;strong&gt;p&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;strong&gt;div&lt;/strong&gt; &lt;em&gt;style&lt;/em&gt;=&quot;&lt;i&gt;[…]&lt;/i&gt;&quot;&amp;gt;&amp;lt;&lt;strong&gt;a&lt;/strong&gt; &lt;em&gt;href&lt;/em&gt;=&quot;&lt;i&gt;http://www.gettyimages.com/detail/79989152&lt;/i&gt;&quot; &lt;em&gt;target&lt;/em&gt;=&quot;&lt;i&gt;_blank&lt;/i&gt;&quot; &lt;em&gt;style&lt;/em&gt;=&quot;&lt;i&gt;[…]&lt;/i&gt;&quot;&amp;gt;#79989152&amp;lt;/&lt;strong&gt;a&lt;/strong&gt;&amp;gt; / &amp;lt;&lt;strong&gt;a&lt;/strong&gt; &lt;em&gt;href&lt;/em&gt;=&quot;&lt;i&gt;http://www.gettyimages.com&lt;/i&gt;&quot; &lt;em&gt;target&lt;/em&gt;=&quot;&lt;i&gt;_blank&lt;/i&gt;&quot; &lt;em&gt;style&lt;/em&gt;=&quot;&lt;i&gt;[…]&lt;/i&gt;&quot;&amp;gt;gettyimages.com&amp;lt;/&lt;strong&gt;a&lt;/strong&gt;&amp;gt;&amp;lt;/&lt;strong&gt;div&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;lt;/&lt;strong&gt;div&lt;/strong&gt;&amp;gt;
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;small&gt;Je me demande si je n'aurais pas dû prendre comme illustration l'image d'un garçon &lt;a href=&quot;http://www.gettyimages.fr/detail/photo/overweight-boy-licking-finger-eating-image-libre-de-droits/101940731&quot;&gt;présentant une obésité morbide…&lt;/a&gt;&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Là, c'est même pas moi qui va m'énerver, mais les constructeurs de navigateurs web, car une insertion d'&lt;code&gt;&amp;lt;&lt;strong&gt;iframe&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; est loin d'être gratuite en terme de consommation mémoire&amp;nbsp;; j'ai &lt;a href=&quot;http://dascritch.net/post/2014/02/25/Le-retour-des-boutons-de-partage#ilyadeuxtypes&quot;&gt;rapidement abordé ce sujet à propos des boutons de partage sur les réseaux sociaux&lt;/a&gt;. Alors imaginez quand une page en comporte une cinquantaine… L'abus d' &lt;code&gt;&amp;lt;&lt;strong&gt;iframe&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; est actuellement l'une des principales causes de crash de navigateurs. 
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1406-Img-Chrome-il-est-mort-jim.png&quot; alt=&quot;Chrome affichant la page d'erreur «il est mort Jim»&quot; /&gt;
&lt;figcaption&gt;
Ce qui explique que vous voyez souvent cette erreur quand vous visitez certains sites.&lt;br /&gt;
&lt;small&gt;&lt;a href=&quot;http://www.astuceshebdo.com/2014/02/google-chrome-il-est-mort-jim.html&quot;&gt;Source de la capture : astucehebdo&lt;/a&gt;&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;bientotlafin&quot;&gt;Bientôt la fin ?&lt;/h3&gt;
&lt;p&gt;
Dans le chapitre suivant, je parlerai &lt;strong&gt;enfin&lt;/strong&gt; du problème qui m'a motivé à écrire ce dossier&amp;nbsp;: &lt;a href=&quot;http://dascritch.net/post/2014/06/12/Finesse-en-img&quot;&gt;le problème de l'affichage d'une image en fonction de la résolution de son support&lt;/a&gt;. Vous verrez qu'on va parler à la fois des formats ésotériques, d'un retour du &lt;em&gt;lazy-loading&lt;/em&gt; et ce d'une proposition que &lt;a href=&quot;http://glazman.org/&quot;&gt;Daniel&lt;/a&gt; ne peut pas refuser…
&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>Ressources en ‹img /›</title>
		<link>https://dascritch.net/post/2014/04/29/Ressources-en-img</link>
		<guid isPermaLink="false">urn:md5:928c7d78de5b53d114ec3f3c72fe4adb</guid>
		<dc:date>2014-04-29T08:37:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Bon, coco, ton logo, je te l'exporte en quel format ? en bitmap ? dégradé ? paletté ? avec alpha-transparence ? sans animation ? ni support MSIE 7 ?		&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;Bon, coco, ton logo, je te l'exporte en quel format ? en bitmap ? dégradé ? paletté ? avec alpha-transparence ? sans animation ? ni support MSIE 7 ?&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;strong&gt;Ressources en &amp;lt;img /&amp;gt;&lt;/strong&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;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:540px) {
#tests thead th:nth-child(2), #tests thead th:nth-child(3), #tests thead th:nth-child(4), #tests thead th:nth-child(5), 
#tests td:nth-child(2), #tests td:nth-child(3), #tests td:nth-child(4), #tests td:nth-child(5) { 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;
On va aborder maintenant le support des formats d'images par les navigateurs, indépendamment de la balise &lt;code&gt; &amp;lt;&lt;strong&gt;img&lt;/strong&gt; /&amp;gt;&lt;/code&gt; puisqu'il concerne aussi les css. &lt;strong&gt;Si de nos jours, tu ignores un truc dans ce chapitre, c'est que t'as sûrement loupé ta vie de webmaster.&lt;/strong&gt;
&lt;br /&gt;
Aussi étonnant que celui puisse paraître, &lt;strong&gt;le W3C n'a jamais défini de format d'images que les navigateurs devaient supporter&lt;/strong&gt; &lt;a href=&quot;http://dascritch.net/post/2014/04/09/Manuel-en-img#attr_src&quot;&gt;dans l'attribut &lt;code&gt;&lt;em&gt;src&lt;/em&gt;=&quot;&quot;&lt;/code&gt;&lt;/a&gt;.&lt;br /&gt;
Non&amp;nbsp;: rien, nada, zilch, que dalle, même pas une recommandation.
&lt;/p&gt;
&lt;p&gt;
Et en l'absence de gestion de &lt;em&gt;fallback&lt;/em&gt; natif en cas de non-support par le navigateur client, il serait plus heureux de vérifier le support par &lt;a href=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1&quot;&gt;l'entête &lt;code&gt;Accept:&lt;/code&gt; envoyé par le navigateur&lt;/a&gt; durant le &lt;em&gt;content negociation&lt;/em&gt;, mais cela suppose avoir la main sur le serveur hôte, savoir administrer celui-ci et s'embêter à générer des sous-images par type de formats. Vous pouvez vérifier si une image s'est bien chargée par un événement &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt; &lt;small&gt;comme moi&lt;/small&gt; mais ça sera &lt;strong&gt;débile&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
Cette table rassemble les infos sur tous les formats d'images qui furent un jour susceptibles d'être gérés par un navigateur, avec en bonus un test. Pour les fans du &lt;abbr title=&quot;Ton texte est vraiment immense, je vais pas tout lire&quot;&gt;TL;DR&lt;/abbr&gt;, cette table leur fera oublier qu'ils ont jamais cliqué &lt;q&gt;Sommaire de ce billet&lt;/q&gt;&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&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;Couleurs&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;Transparence&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;Animé&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;Support*&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;chez vous&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tfoot&gt;
&lt;tr&gt;&lt;td colspan=&quot;7&quot;&gt;* Je parle du support navigateur. Le support serveur peut varier énormément&amp;nbsp;: je doute que Facebook supporte du SVG comme photo de profil. Il ne faut pas se voiler la face.
&lt;/tr&gt;
&lt;/tfoot&gt;

&lt;tbody&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;xbm&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;n&amp;amp;b&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;oublié&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;xpm&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;oublié&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;pbm&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;n&amp;amp;b&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;oublié&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;pgm&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;oublié&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;ppm&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;oublié&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_bmp&quot;&gt;bmp&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;oublié&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_gif&quot;&gt;gif&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;256⚠&lt;/td&gt;&lt;td&gt;binaire&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;SÛR&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_ico&quot;&gt;ico&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;répandu&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_jpeg&quot;&gt;jpeg/jfif&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossy ⚠&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;SÛR&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_jpeg&quot;&gt;jpeg2000&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossy&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;peu répandu&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_jpeg&quot;&gt;jpeg XR&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossy&lt;/td&gt;&lt;td&gt;281Bn&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;MSIE 9+&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;na href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_tga&quot;&gt;tga&lt;/na&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;oublié&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;png&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless &lt;small&gt;&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#c11309&quot;&gt;[edit]&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td&gt;281Bn&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;SÛR&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;mng/jng&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;281Bn&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;oublié&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;apng&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossless&lt;/td&gt;&lt;td&gt;281Bn&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;Firefox&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_vml&quot;&gt;vml&lt;/a&gt;&lt;/th&gt;&lt;td&gt;vectoriel&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;css&lt;/a&gt;&lt;/td&gt;&lt;td&gt;oui&lt;/td&gt;&lt;td&gt;non&lt;/td&gt;&lt;td&gt;oublié&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_svg&quot;&gt;svg&lt;/a&gt;&lt;/th&gt;&lt;td&gt;vectoriel&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;css&lt;/a&gt;&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;oui ⚠&lt;/td&gt;&lt;td&gt;tous les modernes&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;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_webp&quot;&gt;webp&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bitmap lossy ou lossless&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;OUI&lt;/td&gt;&lt;td&gt;oui ⚠&lt;/td&gt;&lt;td&gt;Chrome, Safari&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;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;format_xbm&quot;&gt;La famille xbm (X BitMap) et ses enfants xpm,…&lt;/h3&gt;
&lt;p&gt;
On en a déjà parlé dans &lt;a href=&quot;http://dascritch.net/post/2014/03/25/Histoires-en-img#audebut&quot;&gt;le premier chapitre de cette série&lt;/a&gt;. Tout comme les formats .pbm et affiliées, cette famille de formats ésotériques en texte et sans aucune compression avait surtout un intérêt pour le développement logiciel, mais strictement aucune pour la transmission réseau. Le support de ces formats fut retiré de la plupart des navigateurs.
&lt;/p&gt;
&lt;figure class=&quot;avecfond c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/post/2014/04/29/&quot; alt=&quot;le format xbm n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
Si ça charge, votre navigateur a du code antique. &lt;a href=&quot;http://www.fileformat.info/format/xbm/sample/index.htm&quot;&gt;source FileFormat.info&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Pour info, vous pouvez l'ouvrir avec un éditeur de texte&amp;nbsp;: c'est un bête fichier source .c contenant une définition de tableau. Pang.
&lt;/p&gt;
&lt;h3 id=&quot;format_bmp&quot;&gt;Le bmp : device-independent BitMaP format&lt;/h3&gt;
&lt;p&gt;
C'est un antique format d'image principalement utilisé pour l'usage d'un interface graphique, comme pour &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;la famille XBM&lt;/a&gt;. Et si je vous dit qu'il fut popularisé par Microsoft, n'en jetez plus par les fenêtres.
&lt;/p&gt;
&lt;p&gt;
Testons… Oui, ça peut surprendre, le format est encore bien supporté.
&lt;/p&gt;

&lt;figure class=&quot;avecfond c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-test.bmp&quot; alt=&quot;le format bmp n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
Microsoft à l'époque de sa splendeur&amp;nbsp;: 600ko pour 500×400 en 256 couleurs, les malades…&lt;br /&gt;
&lt;a href=&quot;http://victori.uploadbooth.com/misc&quot;&gt;source victori.uploadbooth.com&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Le format d'image accepte à la fois un mode paletté (256 couleurs et moins) et un mode &lt;q&gt;true-color&lt;/q&gt; (au moins 16 millions de couleurs) pouvant accepter l'alpha-transparence (au moins 256 niveaux de transparence). L'image peut être compressée sans perte, mais &lt;strong&gt;uniquement&lt;/strong&gt; en mode paletté et le support dépend des bibliothèques. La plupart des bmp sont donc non compressées et atteignent alors une taille délirante. C'est pour ça qu'il n'a  &lt;strong&gt;quasiment jamais été utilisé sur le web&lt;/strong&gt;. Même par Microsoft.
&lt;/p&gt;
&lt;p&gt;
Pas fous.
&lt;/p&gt;

&lt;h3 id=&quot;format_gif&quot;&gt;Le gif : Graphic Interchange Format&lt;/h3&gt;
&lt;p&gt;
Pour &lt;a href=&quot;http://edition.cnn.com/2013/05/22/tech/web/pronounce-gif/&quot;&gt;des raisons juridiques et de neutralité politique&lt;/a&gt;, je me refuse de prendre position entre les deux prononciations possibles de &lt;q&gt;GIF&lt;/q&gt;, alors /ˈɡɪf/ ou /ˈdʒɪf/, vous choisissez à vos risques et périls&amp;nbsp;: c'est vous qui &lt;a href=&quot;http://www.futura-sciences.com/magazines/sante/infos/actu/d/corps-humain-science-decalee-vient-petite-voix-lit-notre-tete-47899/&quot;&gt;lisez dans votre tête&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Le gif&lt;/strong&gt; est un format d'image lossless paletté, qui ne peut accepter que 256 couleurs maximum (moins une en cas de transparence), même s'il existe &lt;a href=&quot;http://phil.ipal.org/tc.html&quot;&gt;un mode ésotérique &lt;em&gt;true-color&lt;/em&gt; que je ne vous recommande pas&lt;/a&gt;. La compression d'image utilise l'algorithme LZW qui n'est devenu réellement libre d'usage qu'en 2003, puisqu'il était l'objet d'un brevet détenu par Unisys. C'est ce risque de taxation qui a mené par la plupart des acteurs du web à la recommandation d'utiliser &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;le format PNG&lt;/a&gt; à sa place, nettement plus performant.
&lt;/p&gt;
&lt;p&gt;
La première version de ce format, appelé GIF87 date de… 1987 et a été originellement conçu par CompuServe un service fournisseur de services BBS, c'est-à-dire un ancêtre de FAI à portail captif. Deux années plus tard est proposé l'extension GIF89a, qui permet d'inclure des animations, d'avoir une transparence binaire et même un affichage progressif par entrelacement. Ce format a fait pendant 15 longues années &lt;a href=&quot;http://www.cinegif.com/&quot;&gt;le bonheur des publicitaires&lt;/a&gt; qui ont commencé avec &lt;a href=&quot;http://www.goldnuggetwebs.com/worstweb-fr/index.html&quot;&gt;un site sur GeoCities&lt;/a&gt; avant qu'ils nous les brisent menues &lt;a href=&quot;http://dascritch.net/post/2007/10/19/Pardonnons-a-ce-Flash-qui-nous-agacent&quot;&gt;avec la daube Flash&lt;/a&gt; (&lt;a href=&quot;http://lesjoiesducode.fr/post/82775068221/quand-le-boss-se-range-de-mon-cote-lorsque-jexplique&quot;&gt;hehehe&lt;/a&gt;).
&lt;/p&gt;
&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img class=&quot;c&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1403-Img-cliquez1.gif&quot; alt=&quot;Cliquez ici&quot; /&gt;
&lt;figcaption&gt;
Non mais arrêtez de cliquer cette image, c'est juste un exemple.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
À noter que l'animation en gif comporte plein de subtilités comme un compteur de boucles, l'animation réduite d'une région et peut même permettre d'afficher plusieurs palettes, dépassant les 256 couleurs simultanées théoriques. Le regretté &lt;em&gt;Microsoft GIF Animator&lt;/em&gt; permettait de jouer avec toutes les subtilités du format. Actuellement, les logiciels graphiques comme Photoshop ou Gimp jouent sur les empilements de calques mais ne proposent pas ces options avancées (&lt;a href=&quot;http://probertson.tumblr.com/&quot;&gt;mais certains artisans nous émerveillent quand même&lt;/a&gt;). Et ayons une pensée émue pour ces logiciels qui transforment des sections de vidéos en gif animés prêts à poster sur son tumblr.
&lt;/p&gt;
&lt;p&gt;
Malgré son âge vénérable, &lt;strong&gt;gif reste le moyen le plus &lt;em&gt;terriblement efficace&lt;/em&gt; pour une image animée&lt;/strong&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=I_hMTRRH0hM&quot; title=&quot;♬ lilalilalilali.&quot;&gt;qui ne soit pas une vidéo&lt;/a&gt;.
&lt;/p&gt;

&lt;h3 id=&quot;format_ico&quot;&gt;Le ico : format d'icône de Microsoft Windows&lt;/h3&gt;
&lt;p&gt;
Le format ICO est arrivé avec MS-Windows 1.0 en 1985 pour stocker les curseurs de souris et les icônes du bureau. Il a subit de multiples révisions dont &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms997538.aspx&quot;&gt;une ré-écriture sérieuse pour Windows 95&lt;/a&gt;, qui propose notamment une propriété très utile&amp;nbsp;: la gestion de multiples dimensions. Microsoft a constamment fait évoluer son format d'image propriétaire. De simple encapsuleur du &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_bmp&quot;&gt;format BMP&lt;/a&gt;, il a accepté par la suite le bien plus performant &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;format PNG&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Ce format d'image est apparu dans le web avec l'arrivée des &lt;em&gt;favicon&lt;/em&gt; dans MSIE&amp;nbsp;5. Contrairement à une croyance maintes fois répandue, il était compliqué de faire apparaître cette image dans ce navigateur&amp;nbsp;: le &lt;em&gt;favicon&lt;/em&gt; n'apparaissait dans MSIE &lt;em&gt;si et seulement si&lt;/em&gt; le site de la page était parmi les marques-pages (accessoirement, une &lt;q&gt;bonne&lt;/q&gt; mesure anti-&lt;em&gt;fishing&lt;/em&gt;). Cela a donné lieu à des quiproquos immenses dans la plupart des e-web-@gency qui ne comprenaient pas pourquoi le site du client n'affichait pas son logo contrairement à Wanadoo. Qu'est-ce qu'on a ri en repensant aux heures à expliquer ça au client.
&lt;br /&gt;
Facepalm.&lt;br /&gt;
Ce &lt;q&gt;comportement&lt;/q&gt; fut &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms537656%28v=vs.85%29.aspx&quot;&gt;simplifié dans MSIE&amp;nbsp;7&lt;/a&gt; car Firefox et Safari affichaient systématiquement les favicons.
&lt;/p&gt;

&lt;figure class=&quot;avecfond c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-favicones.ico&quot; alt=&quot;le format .ico n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
Des favicons dans MSIE&amp;nbsp;7 en barre d'adresse, onglets et marques-pages.&lt;br /&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms537656%28v=vs.85%29.aspx&quot;&gt;source Microsoft, réenregistré en .ico pour test&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;p&gt;
Si supporter ce format était important pour le chargement des &lt;code&gt;/favicon.ico&lt;/code&gt; des sites, il devint un héritage obsolète avec l'arrivée de la balise &lt;code&gt;&amp;lt;&lt;strong&gt;link&lt;/strong&gt; &lt;em&gt;rel&lt;/em&gt;=&quot;&lt;i&gt;shortcut icon&lt;/i&gt;&quot; /&amp;gt;&lt;/code&gt;. Car cette balise avait plein d'avantages&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sortir l'image de la racine du site et de son adresse fixe,&lt;/li&gt;
&lt;li&gt;la rendre contextuelle à la page appelée (par exemple avoir des favicons différentes si vous êtes en vue publique, en accès adhérent ou en mode administration),&lt;/li&gt;
&lt;li&gt;ne pas être liée à un format d'image spécifique, mais permettre gif, jpeg ou png (et souvent le png est le préféré).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Sauf qu'on a enterré le .ICO beaucoup trop vite ! Ce format d'image est le seul à pouvoir supporter de multiples résolutions en un seul document&lt;/strong&gt; (si on excepte le mode miniature/&lt;q&gt;preview&lt;/q&gt; du jpeg, qu'aucun navigateur ne gère), et à résoudre le problème actuel des résolutions possibles d'écrans. Il est même nettement plus élégant que la soupasse des balises possibles. Alors que &lt;a href=&quot;http://dascritch.net/post/2008/12/11/Microsoft-Internet-Explorer-ou-linflation-dans-la-head&quot;&gt;Microsoft était connu pour conduire à l'inflation de la &lt;code&gt;&amp;lt;&lt;strong&gt;head&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; dans des proportions délirantes&lt;/a&gt;, il avait la réponse à un problème qui s'est posé par la suite avec &lt;code&gt;&amp;lt;&lt;strong&gt;link&lt;/strong&gt; &lt;em&gt;rel&lt;/em&gt;=&quot;&lt;i&gt;icon&lt;/i&gt;&quot; &lt;em&gt;sizes&lt;/em&gt;=&quot;&quot; /&amp;gt;&lt;/code&gt; où l'attribut &lt;code&gt;&lt;em&gt;sizes&lt;/em&gt;=&quot;&quot;&lt;/code&gt; sur certains sites &lt;a href=&quot;http://theksmith.com/technology/howto-website-icons-browsersdevices-favicon-apple-touch-icon-etc/&quot;&gt;va du 16×16 au 128×128 en passant par les ésotériques 57×57, 72×72 et 114×114 demandés par Apple&lt;/a&gt;&amp;nbsp;! Si on veut être &lt;q&gt;complet&lt;/q&gt;, ça fait 8, donc 7 fois trop.
&lt;/p&gt;
&lt;figure class=&quot;avecfond c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-groupicon_112.ico&quot; alt=&quot;le format .ico n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
Une image extraite du set d'icônes fournies dans Windows Vista. © Microsoft
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Ce format d'image est encore supporté par pas mal de navigateurs et peut marcher dans la balise &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;&amp;gt;&lt;/code&gt;. Si vous développez le N&lt;sup&gt;ième&lt;/sup&gt; format d'image, reprenez-en l'idée des différentes résolutions stockées en un seul conteneur, bien plus facile à administrer.
&lt;/p&gt;
&lt;p&gt;
Dans l'exemple ci-dessus, le document comporte 10 images, détaillées plus bas. Mais laquelle votre navigateur affiche-t-elle&amp;nbsp;? Firefox va afficher celle en 16×16 par 16M, qui est la dernière du document, tandis que Chrome va afficher celle avec la meilleure résolution. &lt;strong&gt;C'est dommage&amp;nbsp;: .ICO marche bien, mais c'est le bordel pour savoir laquelle sera affichée&lt;/strong&gt; si on n'y fait pas gaffe.
&lt;/p&gt;
&lt;figure class=&quot;avecfond c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-ico.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Décomposition du fichier précédent dans Gimp&amp;nbsp;:&lt;br /&gt;Les 10 images y sont superposées en calques (infos icotools)&amp;nbsp;:&lt;br /&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot;&gt;Calque&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Largeur&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Hauteur&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Couleurs&lt;/th&gt;
&lt;th scope=&quot;col&quot;&gt;Transparence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;binaire&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;binaire&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;binaire&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;binaire&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;binaire&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;binaire&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;alpha&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;alpha&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;alpha&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;16M&lt;/td&gt;&lt;td&gt;alpha&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;h3 id=&quot;format_jpeg&quot;&gt;La famille Jpeg : Joint Photographic Expert Group&lt;/h3&gt;
&lt;p&gt;
Comme son petit frère &lt;a href=&quot;http://mpeg.chiariglione.org/&quot;&gt;le MPEG&lt;/a&gt;, l'acronyme &lt;a href=&quot;http://www.jpeg.org/&quot;&gt;JPEG désigne non pas un format mais le comité&lt;/a&gt; qui l'a conçu. Il existe d'autres formats issus de leurs travaux, dont &lt;a href=&quot;http://dascritch.net/post/2013/08/06/Quand-le-scanner-te-ment&quot;&gt;le JBIG2 dont j'ai déjà causé ici&lt;/a&gt;, l'Exif utilisé par les appareils photos, et plein d'autres. Pour le web, nous utilisons le format &lt;abbr&gt;JFIF&lt;/abbr&gt; (Jpeg File Interchange Format) et c'est lui qui est le plus souvent improprement appelé &lt;q&gt;Jpeg&lt;/q&gt;&amp;nbsp;; mais dans les faits, vous pouvez aussi balancer du Exif directement issu d'un appareil photo, ça passe quand même malgré les différences de description.
&lt;/p&gt;
&lt;p&gt;
Son support dans les navigateur arriva en 1994 dans Netscape Navigator pour les besoins d'envoi d'images plus importantes qu'en GIF et sans avoir besoin d'une reconstruction parfaite. Comprenez&amp;nbsp;: des photos.&lt;br /&gt;
Le &lt;strong&gt;jpeg&lt;/Strong&gt; vient du monde de la PAO et de la retouche photo. Il ne gère pas d'animation, mais peut supporter 16 millions de couleurs simultanées, ceci au prix d'une compression &lt;em&gt;lossy&lt;/em&gt;, i.e. à perte des détails (Il existe un mode &lt;em&gt;lossless&lt;/em&gt;, le jpeg-ls très rarement supporté par les navigateurs). &lt;a href=&quot;http://www.csc.villanova.edu/~rschumey/csc4800/dct.html&quot;&gt;La compression par cosinus discret&lt;/a&gt; consiste à diviser l'images en carrés appelés &lt;q&gt;macroblocs&lt;/q&gt;, en général de 8×8, puis d'appliquer des coefficients sur des vaguelettes d'interférences. En gros et &lt;a href=&quot;http://maree.info/&quot;&gt;en fonction des marées&lt;/a&gt;.
&lt;p&gt;
&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img class=&quot;c&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-Phalaenopsis.jpg&quot; alt=&quot;le format jpeg n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
Exemple de compression de plus en plus grossière en allant de la gauche à l'extrême-droite,&lt;br /&gt;
&lt;small&gt;réalisé sans aucune allusion politique&lt;/small&gt;. &lt;a href=&quot;http://en.wikipedia.org/wiki/File:Phalaenopsis_JPEG.jpg&quot;&gt;source Wikipédia&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Il y a (parmi les paramètres) 12 niveaux de taux de compression possibles appliquées sur l'ensemble de l'image, &lt;a href=&quot;http://petapixel.com/2011/08/26/a-higher-quality-setting-in-photoshop-sometimes-reduces-jpeg-quality/&quot;&gt;avec des particularismes spécifiques notamment chez Photoshop&lt;/a&gt;. certains éditeurs graphiques présentent en &lt;q&gt;pourcentage de qualité&lt;/q&gt;. Il se peut qu'un fichier produit soit plus gros que celui à un pourcentage supérieur. Personnellement, j'utilise une qualité à 85% en sortie de Gimp pour mon blog. En dessous de 75%, les vaguelettes peuvent apparaître sur les aplats primaires, avec &lt;a href=&quot;http://fotoforensics.com/tutorial-estq.php&quot;&gt;une nette dégradation des contours sur le rouge qui a alors du vague à l'âme&lt;/a&gt;.&lt;br /&gt;
J'ai récemment parlé d'&lt;a href=&quot;http://dascritch.net/post/2012/01/24/Pour-une-compression-mieux-g%C3%A9r%C3%A9e&quot;&gt;&lt;strong&gt;une méthode pour optimiser le taux de compression par région&lt;/strong&gt; sur une image globale&lt;/a&gt; et que cette astuce est parfaitement rétro-compatible, elle mérite donc votre intérêt si vous travaillez sur des sites à fort traffic.&lt;br /&gt;
&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#c11309&quot;&gt;[edit] voir commentaire sur l'implémentation libre MozJPEG&lt;/a&gt;
&lt;/p&gt;
&lt;/p&gt;
Parmi les modes moins connus du jpeg, il y a la possibilité d'enregistrer une image purement monochrome (pour les amatrices gourmandes, ça fait 256 &lt;em&gt;nuances de grey&lt;/em&gt;…), et même &lt;a href=&quot;https://software.intel.com/sites/products/documentation/hpc/ipp/ippi/ippi_ch6/ch6_color_models.html&quot;&gt;des modélisations de couleurs qui ne sont pas en RGB &lt;q&gt;traditionnel&lt;/q&gt;&lt;/a&gt;, non recommandées pour le web&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le &lt;abbr&gt;CMYK&lt;/abbr&gt; (&lt;q&gt;Cyan Magenta Yellow blacK&lt;/q&gt; ou en céfran CMJN, &lt;q&gt;Cyan Magenta Jaune Noir&lt;/q&gt;), modèle standard pour l'imprimerie,&lt;/li&gt;
&lt;li&gt;le YUV (Luminance/Chrominance, dont il existe de multiples variations) qui sert surtout en production télé ou cinéma.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Vous pouvez en tenter un, mais il n'est pas garanti que les navigateurs le supportent, ni que &lt;a href=&quot;http://www.blog-couleur.com/?Quelle-difference-entre-sRGB-et&quot;&gt;toutes les couleurs de l'espace RGB puissent être reproduites&lt;/a&gt;, de la même manière qu'&lt;a href=&quot;http://en.wikipedia.org/wiki/Impossible_color&quot;&gt;on ne peut reproduire que difficilement les couleurs impossibles&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Le format a connu une évolution pour le web&amp;nbsp;: tout comme l'entrelacement du GIF 89a, le mode jpeg progressif permet d'afficher l'image de plus en plus finement pendant le chargement de la ressource. Il se trouve (et je pouffe car d'autres me stipulaient le contraire) que ce mode n'a jamais été supporté par MSIE. Il est donc à éviter car il alourdit inutilement le document créé.
&lt;/p&gt;
&lt;p&gt;
Le JPEG a eu aussi sa période de menaces de brevets et de &lt;em&gt;patent-trolling&lt;/em&gt;&amp;nbsp;: En 2002, la société Forgent/Asure a soutenu &lt;em&gt;mordicus avocatusque&lt;/em&gt; qu'elle détenait des brevets sur le format d'image et jusqu'à l'expiration du brevet litigieux en 2006 &lt;a href=&quot;http://arstechnica.com/uncategorized/2004/04/3695-2/&quot;&gt;menaça de procès plusieurs entreprises&lt;/a&gt;. Un  &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;format alternatif pour le web, le MNG/JNG&lt;/a&gt;, était disponible pendant la période d'incertitude mais mourrait déjà.
&lt;/p&gt;
&lt;p&gt;
À l'aube du nouveau millénaire, &lt;a href=&quot;http://www.jpeg.org/jpeg2000/&quot;&gt;une mise à jour du format et de l'algorithme fut proposée avec jpeg2000&lt;/a&gt;. Celui-ci propose de sérieuses mises à jour du format dont le support de la transparence. Il n'a pas été déployé dans tous les navigateurs puisqu'il y a une licence à payer, mais aussi parce que &lt;a href=&quot;http://blogs.loc.gov/digitalpreservation/2013/01/is-jpeg-2000-a-preservation-risk/&quot;&gt;jpeg2000 est très complexe à implémenter et sujets à des bugs sur certains logiciels&lt;/a&gt;. 
&lt;/p&gt;
&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img class=&quot;c&quot; src=&quot;https://dascritch.net/post/2014/04/29/&quot;/vrac/.blog2/webdev/1403-Img/1404-Img-chateau.jp2&quot; alt=&quot;le format jpeg2000 n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;http://www.itu.int/rec/T-REC-T.803-200211-I/en&quot;&gt;source Union Internationale des Télécommunications&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Microsoft a par la suite proposé au groupe JPEG de normaliser son format propriétaire &lt;strong&gt;(Windows Media) HD-Photo&lt;/strong&gt; développé en 2006. C'était leur joyeuse époque de noyautage des standards comme &lt;a href=&quot;http://blogs.computerworld.com/microsoft_loses_on_ooxml&quot;&gt;l'infâme scandale OOXML&lt;/a&gt;.&lt;br /&gt;
Polémique à part, le format JPEG-XR (pour &lt;q&gt;extended range&lt;/q&gt;) propose notamment un nouvel algorithme de compression, une plus grande plage de couleurs (16&amp;nbsp;bits par canal, soit 65536&amp;nbsp;nuances par primitive chromatique, soit 281&amp;nbsp;billions de couleurs possibles) et d'autres extensions. Mais seul Internet Explorer versions 9 et suivantes supportent ce format en tant que navigateur. De nombreux brevets protègent et rentabilisent ce travail, et vu que ce format est ultra-propriétaire, il est très peu probable qu'il soit &lt;a href=&quot;http://caniuse.com/jpegxr&quot;&gt;lu par les autres brouteurs&lt;/a&gt; avant une vingtaine d'années.
&lt;/p&gt;
&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img class=&quot;c&quot; src=&quot;https://dascritch.net/post/2014/04/29/&quot;/vrac/.blog2/webdev/1403-Img/1404-Img-Maui.jxr&quot; alt=&quot;le format jpeg-xr n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;http://www.itu.int/rec/T-REC-T.834-201001-I/en&quot;&gt;source Union Internationale des Télécommunications&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;format_png&quot;&gt;Le png : Portable Network Graphics et ses enfants reniés&lt;/h3&gt;
&lt;p&gt;
Le PNG a été conçu pour &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_gif&quot;&gt;répondre au gif&lt;/a&gt;, ses limitations techniques (la transparence binaire et un nombre de couleurs trop limités) et juridiques (le brevet de compression LZW). C'est un format conteneur qui peut avoir plusieurs &lt;q&gt;chapitres&lt;/q&gt; dont une description d'image bitmap. Son algorithme offre une compression sans pertes, supportant le palettage jusqu'à 256 couleurs, 16&amp;nbsp;millions voire 281&amp;nbsp;billions (2¹⁶ par canal primaire) de couleurs, &lt;a href=&quot;http://dascritch.net/post/2008/06/10/Regardez-%3A-transparent-comme-avant&quot;&gt;une opacité par demi-tons et même une vraie alpha-transparence&lt;/a&gt;.&lt;br /&gt;
&lt;small&gt;Cette dernière a été mal gérée par MSIE 6, qu'il repose en paix.&lt;/small&gt;
&lt;/p&gt;
&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img class=&quot;c&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-pnglogo.png&quot; alt=&quot;le format png n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
Le logo officiel de PNG. &lt;a href=&quot;http://www.libpng.org/pub/png/pngs-img.html&quot;&gt;source libpng&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Preuve que le PNG est un vrai &lt;a href=&quot;http://www.ibm.com/developerworks/library/pa-spec16/&quot;&gt;format conteneur dans la lignée du défunt IFF&lt;/a&gt;, il était le format de sauvegarde favori du logiciel de dessin Macromedia Fireworks, qui &lt;a href=&quot;http://www.adobe.com/support/fireworks/export/fw_export_vs_sav/fw_export_vs_sav02.html&quot;&gt;y embarquait aussi les primitives vectorielles de tracé&lt;/a&gt;. Le bloc de données supplémentaire spécifique était ignoré par les navigateurs et n'affichait que la première image du bloc. 
&lt;/p&gt;
&lt;p&gt;
En 1996, une partie de l'équipe qui a créé PNG en proposa une évolution, le &lt;a href=&quot;http://www.libpng.org/pub/mng/&quot;&gt;MNG (Multiple-image Network Graphic)&lt;/a&gt;. Celle-ci devait notamment permettre les animations, proposer des nouveaux codecs, &lt;a href=&quot;http://www.libpng.org/pub/mng/spec/jng.html&quot;&gt;un mode loosy (le JNG, suite à des incertitudes juridiques sur le jpeg)&lt;/a&gt; et plein d'autres choses. Elle n'a jamais vraiment pris faute de supporters et surtout une mise en œuvre largement trop complexe. Le MNG fut abandonné en 2006.
&lt;/p&gt;
&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img class=&quot;c&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img_mng.mng&quot; alt=&quot;Si ce texte ne s'affiche pas, je ne te croirais pas&quot; /&gt;
&lt;figcaption&gt;
&lt;a href=&quot;http://libmng.com/MNGsuite/&quot;&gt;source libmng testsuite&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
De cet échec, un autre format animé a émergé, &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Animated_PNG_graphics&quot;&gt;APNG&lt;/a&gt;. En 2004, la Mozilla Foundation venait d'abandonner le format MNG devant la taille démesurée de la bibliothèque pour la décoder (les fous, c'était au début de leur support &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_svg&quot;&gt;du SVG&lt;/a&gt;). Stuart Parmenter et Vladimir Vukićević avaient besoin de stocker les animations de l'interface graphique du navigateur Mozilla dans un format pratique et moins frustre que le gif. Il revirent au PNG en ajoutant un minimum pour assurer les animations et en assurant une rétro-compatibilité, dans la même idée que le PNG Fireworks.&lt;br /&gt;
Échaudés par l'abandon de MNG par Mozilla, &lt;strong&gt;apng ne fut jamais reconnu par le groupe PNG. Pourtant ce dérivé a été officiellement inclus dans des standards&lt;/strong&gt; comme le DAB+. Va comprendre…&lt;br /&gt;
Même si &lt;a href=&quot;http://caniuse.com/#feat=apng&quot;&gt;Firefox est le seul navigateur qui en supporte complètement l'animation&lt;/a&gt;, un navigateur qui lit le png mais n'utilise pas les informations d'animation peut afficher la première image en fixe comme vous pouvez le tester ci-dessous&amp;nbsp;:
&lt;/p&gt;
&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img class=&quot;c&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1403-Img-apng_sample.png&quot; alt=&quot;le format apng n'est pas du tout supporté&quot; /&gt;
&lt;figcaption&gt;
Hommage à &lt;cite&gt;L'Ellipse&lt;/cite&gt; aussi dite &lt;cite&gt;Auréole d'Étienne Robial&lt;/cite&gt;. &lt;a href=&quot;http://littlesvr.ca/apng/samples.html&quot;&gt;source littlesrv.ca&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
À noter que la page officielle de ce format propose &lt;a href=&quot;http://littlesvr.ca/apng/&quot;&gt;plein de ressources pour créer des animations&lt;/a&gt; bitmap (apng mais aussi &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_gif&quot;&gt;gif&lt;/a&gt; et &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_webp&quot;&gt;webp&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img#c11309&quot;&gt;[edit] : Il est possible de faire du PNG lossy.&lt;/a&gt;
&lt;/p&gt;
&lt;h3 id=&quot;format_vml&quot;&gt;Le vml : Vector Markup Language&lt;/h3&gt;
&lt;p&gt;
Ce format vectoriel est purement propriétaire, &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/hh846327%28v=vs.85%29.aspx&quot;&gt;proposé et uniquement supporté par Microsoft&lt;/a&gt;. Ce type de document fut introduit avec MSIE&amp;nbsp;5.0 mais ne trouva pas de supporters en dehors. Il fut retiré de MSIE 9+ par Microsoft et officiellement enterré.
&lt;/p&gt;
&lt;p&gt;
En fait, je suis même pas sûr qu'il fusse un jour invoquable  via &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;format_svg&quot;&gt;Le svg : Scalable Vector Graphics&lt;/h3&gt;
&lt;p&gt;
Réagissant à la nature fermée du format vml, en 1998, des constructeurs de navigateurs se réunirent au sein du &lt;a href=&quot;http://www.w3.org/&quot;&gt;W3C&lt;/a&gt; pour former &lt;a href=&quot;http://www.w3.org/Graphics/SVG/&quot;&gt;le groupe de travail SVG et construire un format vectoriel ouvert et normalisé&lt;/a&gt;.
&lt;br /&gt;
&lt;a href=&quot;http://caniuse.com/svg-img&quot;&gt;Le &lt;strong&gt;svg&lt;/strong&gt;&lt;/a&gt; est un format purement vectoriel à la notation &lt;a href=&quot;https://dascritch.net/tag/xml&quot;&gt;xml&lt;/a&gt;. Il permet les animations, mais son usage dans la balise &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; ou via &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;css&lt;/a&gt; interdit les interactions. Nous ne parlerons pas dans ce billet de l'inclusion en tant qu'&lt;code&gt;&amp;lt;&lt;strong&gt;object&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; ou embarqué dans le html.
&lt;/p&gt;
&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img class=&quot;c&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-smil-two-billiards.svg&quot; alt=&quot;le format svg n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
Une partie de billard, qui pèse 1,5ko, animée en smil. &lt;a href=&quot;http://www.bogotobogo.com/svg_animation_with_source.html&quot;&gt;source bogotobogo.com&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
En tant que format purement vectoriel, le svg n'est pas affecté par l'effet de zoom flou qu'on trouve en HiDPI comme les écrans Retina™, en imprimant le document ou &lt;a href=&quot;http://dascritch.net/post/2014/04/09/Manuel-en-img#attr_dimensions&quot;&gt;en forçant une sous-résolution&lt;/a&gt;. Qui plus est, étant &lt;a href=&quot;https://dascritch.net/tag/xml&quot;&gt;un format de document xml&lt;/a&gt;, étant stylé par &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;css&lt;/a&gt; et ayant donc des blocs nommés &lt;code&gt;&lt;em&gt;id&lt;/em&gt;=&quot;&quot;&lt;/code&gt;, il est possible de n'afficher qu'une portion de l'image en &lt;a href=&quot;http://dascritch.net/post/2007/09/17/RIP-URL-URI-IRI-INRI-W3C#nb2&quot;&gt;indiquant une ancre dans son url&lt;/a&gt;, ce qui en fait un hack natif aussi intéressant que le &lt;em&gt;sprite-tiling&lt;/em&gt;&amp;nbsp;: le &lt;a href=&quot;http://hofmannsven.com/2013/laboratory/svg-stacking/&quot;&gt;&lt;em&gt;svg stacking&lt;/em&gt;&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
SVG reste boudé à cause de son support très tardif dans MSIE&amp;nbsp;; en dessous de la version 9, point de salut sinon via les plugins. Si vous ne contrôlez pas le serveur, reste l'usage de hacks disgracieux comme &lt;a href=&quot;http://stackoverflow.com/a/13973784/1251301&quot;&gt;les commentaires conditionnels&lt;/a&gt; qui feraient &lt;a href=&quot;http://dascritch.net/post/2013/04/08/Dirty-Hacky-I-%3A-Commentaires-conditionnels&quot;&gt;dégainer Dirty Hacky sans sommation&lt;/a&gt;. Autre problème, le svg est comme pour &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_xbm&quot;&gt;xbm&lt;/a&gt; un fichier au code source texte descriptif et le côté très verbeux du &lt;a href=&quot;https://dascritch.net/tag/xml&quot;&gt;xml&lt;/a&gt; peut produire des fichiers lourds malgré une compression gunzip pour le format SVGZ. Enfin, il y a la maîtrise ardue pour les graphistes même si Adobe Illustrator propose un export plus que valable depuis une décennie, et le fait que l'image est forcément d'origine purement numérique à la base.
&lt;/p&gt;
&lt;p&gt;
Au rayon &lt;q&gt;on est jamais déçu quand on y regarde de plus près&lt;/q&gt;, Parmi les bugs amusants que j'ai relevé pendant l'écriture de ce billet &lt;a href=&quot;http://dascritch.net/post/2014/04/16/J-ai-march%C3%A9-sur-la-queue-du-Renard-de-Feu&quot;&gt;chez Mozilla Paris&lt;/a&gt;, j'ai découvert que sur Firefox les images en svg animées en &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt; pouvaient avoir des petits soucis d'affichage, à la différence de celles en animations css (j'ai pas trouvé d'exemples) et en &lt;a href=&quot;http://www.w3.org/AudioVideo/&quot;&gt;smil&lt;/a&gt;&amp;nbsp;:
&lt;/p&gt;
&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img class=&quot;c&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-svgclock.svg&quot; alt=&quot;le format svg n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
Une horloge de 4ko. &lt;a href=&quot;http://www.bogotobogo.com/svg_animation_with_source.html&quot;&gt;source bogotobogo.com&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
… tandis que Chrome n'anime plus un svg s'il a &lt;a href=&quot;http://dascritch.net/post/2014/04/09/Manuel-en-img#attr_dimensions&quot;&gt;été dimensionné de force par un attribut&lt;/a&gt; &lt;code&gt;&lt;em&gt;width&lt;/em&gt;=&quot;&quot;&lt;/code&gt; ou &lt;code&gt;&lt;em&gt;height&lt;/em&gt;=&quot;&quot;&lt;/code&gt;. Ne pas craquer.
&lt;/p&gt;
&lt;p&gt;
Le SVG a d'autres astuces, notamment l'application de filtres de transformations de couleurs, ou la création de flous, c'est l'équivalent du html appliqué à du dessin vectoriel. Hélas la complexité du format fait que &lt;strong&gt;certains chapitres ne sont pas forcément implémentés partout&lt;/strong&gt;, il peut avoir quelques manques ou des petits soucis. Il est fortement recommandé d'exporter &lt;a href=&quot;http://www.w3.org/TR/SVGTiny12/&quot;&gt;un groupe restreint de spécifications &lt;em&gt;a.k.a.&lt;/em&gt; &lt;strong&gt;SVG Tiny&lt;/strong&gt;&lt;/a&gt;.
&lt;/p&gt;
&lt;h3 id=&quot;format_webp&quot;&gt;Le webp&lt;/h3&gt;
&lt;p&gt;
le &lt;strong&gt;webp&lt;/strong&gt; (pour &lt;q&gt;web picture&lt;/q&gt;) est un nouveau format conteneur d'images proposé par Google. Il peut compresser les images avec ou sans pertes et gérer l'alpha-transparence. Sous le capot, nous retrouvons l'algo de compression VP8 &lt;a href=&quot;http://www.webmproject.org/&quot;&gt;repris du format vidéo WebM&lt;/a&gt;, plus exactement la section définissant les images clés d'animation (Intraframes).
&lt;/p&gt;
&lt;p&gt;
Ce qui tombe bien parce que le WebM est disponible &lt;a href=&quot;http://caniuse.com/webm&quot;&gt;pratiquement sur tous les navigateurs récents&lt;/a&gt;, exceptés MSIE et Safari, leurs propriétaires militant pour la solution propriétaire MPEG qui a l'avantage de ne pas être disponible en logiciel libre (hors Europe). Cela va de soi.&lt;br /&gt;
Donc les navigateurs qui intègrent déjà une bibliothèque de décompression logicielle pour ce format vidéo doivent pouvoir prendre facilement en compte le format pictural. Mais dans l'immédiat, il est &lt;a href=&quot;http://caniuse.com/webp&quot;&gt;uniquement supporté par Chrome et Opera&lt;/a&gt;.
&lt;/p&gt;
&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img class=&quot;c&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-rose.webp&quot; alt=&quot;le format webp n'est pas supporté&quot; /&gt;
&lt;figcaption&gt;
Une rose, en alpha-transparence &lt;em&gt;loosy&lt;/em&gt;. &lt;a href=&quot;https://developers.google.com/speed/webp/gallery2&quot;&gt;source site officiel&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Son intérêt est de proposer une compression lossy (avec pertes) bien plus efficace que le jpeg, ce dernier commence à accuser ses quasi 25 ans d'existence. Sur les chiffres purs, effectivement on y gagne mais sur le plan perceptif, &lt;a href=&quot;http://x264dev.multimedia.cx/archives/541&quot;&gt;les gros inconvénients des compresseurs vidéos de cette génération sautent aux yeux&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Hélas, sur les comparatifs aimablement fournis par l'équipe de Google, ils se gardent de faire des comparaisons honnêtes avec &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img#format_png&quot;&gt;le format PNG et encore moins sur l'APNG&lt;/a&gt;, les supporters de &lt;a href=&quot;http://littlesvr.ca/apng/gif_apng_webp.html&quot;&gt;apng l'ont fait&lt;/a&gt;. Soit c'est un oubli, soit une volonté de segmenter le marché&amp;nbsp;; cette dernière possibilité serait bien dommage. Or on a &lt;strong&gt;une compétition évidente&lt;/strong&gt; entre navigateurs et codecs pour fusionner jpeg et apng, seulement &lt;abbr title=&quot;À mon humble avis&quot;&gt;IMHO&lt;/abbr&gt; &lt;strong&gt;ni jpeg-xr, ni webp ne semblent des solutions raisonnables&amp;nbsp;: pas de &lt;i&gt;fallback&lt;/i&gt; simple en cas de défaut de support et un écosystème trop restreint&lt;/strong&gt;. Oui, il existe &lt;a href=&quot;http://vincentorback.se/posts/optimizing-images-and-webp/&quot;&gt;des techniques de support&lt;/a&gt;, mais objectivement &lt;em&gt;overkill&lt;/em&gt;.
&lt;/p&gt;
&lt;h3 id=&quot;format_video&quot;&gt;Eh mais attends... et si je mets une vidéo ?&lt;/h3&gt;
&lt;p&gt;
Quitte à reprendre le raisonnement du webp, faisons l'exercice &lt;strong&gt;totalement stupide&lt;/strong&gt; de mettre en source une vidéo&amp;nbsp;?
&lt;/p&gt;
&lt;p&gt;
Est-ce que la première image va-t-elle être montrée en &lt;em&gt;still&lt;/em&gt;&amp;nbsp;? Après tout, sur certaines &lt;em&gt;set top box&lt;/em&gt; comme les Freebox, il est possible d'envoyer une image mpeg2 en fond d'écran. Voici les trois formats actuellement acceptables sur les navigateurs web&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mpeg 4&lt;/li&gt;
&lt;li&gt;ogg theora&lt;/li&gt;
&lt;li&gt;webm&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Faute de temps, je vous laisse vous-même faire les tests. Je ne fais pas de pari… mais peut-être qu'un jour…
&lt;/p&gt;
&lt;h3 id=&quot;tobecontinued&quot;&gt;Prochaine vignette&lt;/h3&gt;
&lt;p&gt;
Vous pensiez qu'on était au fond du bizarre&amp;nbsp;? Perdu&amp;nbsp;! &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; a encore bien d'autres secrets…
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Manuel en ‹img /›</title>
		<link>https://dascritch.net/post/2014/04/09/Manuel-en-img</link>
		<guid isPermaLink="false">urn:md5:ee455e8146b9f9bd3f3ec67a9601b53e</guid>
		<dc:date>2014-04-09T16:11:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Comment est appelé, paramétré, configuré la balise &amp;lt;img&amp;nbsp;/&amp;gt; dans le source html. Milles et une petites plaisanteries, hacks malheureux ou astuces qui furent standards à un moment.		&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;Comment est appelé, paramétré, configuré la balise &amp;lt;img&amp;nbsp;/&amp;gt; dans le source html. Milles et une petites plaisanteries, hacks malheureux ou astuces qui furent standards à un moment.&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;
.avecfond {
background : url(http://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-background.png);
}
.avecfond img {
border : 0;
margin : 2px;
}
.degueu {
image-rendering: -moz-crisp-edges;
image-rendering:   -o-crisp-edges;
image-rendering: -webkit-optimize-contrast;
image-rendering: crisp-edges;
-ms-interpolation-mode: nearest-neighbor;
}
&lt;/style&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;strong&gt;Manuel en &amp;lt;img /&amp;gt;&lt;/strong&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;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;p&gt;
On va aborder la balise &lt;code&gt; &amp;lt;&lt;strong&gt;img&lt;/strong&gt; /&amp;gt;&lt;/code&gt; dans sa sémantique en analysant ses attributs passés, présents et peut-être futurs.
&lt;br /&gt;
Pour les fans du &lt;abbr title=&quot;Ton texte est vraiment immense, je vais pas tout lire&quot;&gt;TL;DR&lt;/abbr&gt;, cette table leur fera oublier qu'ils ont jamais remarqué le lien &lt;q&gt;Sommaire de ce billet&lt;/q&gt; sous le résumé ^^
&lt;/p&gt;

&lt;table class=&quot;cl&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot;&gt;Attribut&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;type&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;usage&lt;/th&gt;&lt;th scope=&quot;col&quot;&gt;origine&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;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_dimensions&quot;&gt;width&lt;/a&gt;&lt;/th&gt;&lt;td&gt;entier, en pixels implicites&lt;/td&gt;&lt;td&gt;déprécié, à éviter&lt;/td&gt;&lt;td&gt;HTML 2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_dimensions&quot;&gt;height&lt;/a&gt;&lt;/th&gt;&lt;td&gt;entier, en pixels implicites&lt;/td&gt;&lt;td&gt;déprécié, à éviter&lt;/td&gt;&lt;td&gt;HTML 2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_longdesc&quot;&gt;longdesc&lt;/a&gt;&lt;/th&gt;&lt;td&gt;url html&lt;/td&gt;&lt;td&gt;à éviter&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.w3.org/TR/html-longdesc/&quot;&gt;depuis HTML 4&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_lowsrc&quot;&gt;lowsrc&lt;/a&gt;&lt;/th&gt;&lt;td&gt;url image&lt;/td&gt;&lt;td&gt;obsolète&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_ismap&quot;&gt;ismap&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bascule&lt;/td&gt;&lt;td&gt;obsolète&lt;/td&gt;&lt;td&gt;HTML 3.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_usemap&quot;&gt;usemap&lt;/a&gt;&lt;/th&gt;&lt;td&gt;id&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;HTML 3.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_crossorigin&quot;&gt;crossorigin&lt;/a&gt;&lt;/th&gt;&lt;td&gt;bascule&lt;/td&gt;&lt;td&gt;déconseillé&lt;/td&gt;&lt;td&gt;HTML 5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_alt&quot;&gt;alt&lt;/a&gt;&lt;/th&gt;&lt;td&gt;texte&lt;/td&gt;&lt;td&gt;obligatoire&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th scope=&quot;row&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_src&quot;&gt;src&lt;/a&gt;&lt;/th&gt;&lt;td&gt;url image&lt;/td&gt;&lt;td&gt;obligatoire&lt;/td&gt;&lt;td&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/06/17/Propositions-en-img&quot;&gt;srcset&lt;/a&gt;&lt;/th&gt;&lt;td&gt;scénario&lt;/td&gt;&lt;td&gt;en tests&lt;/td&gt;&lt;td&gt;brouillon&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
Oui, il n'y a pas tout, puisque ce billet n'a pas pour but d'être exhaustif, mais de farfouiller et d'annoter ce qui s'est fait. J'ai donc volontairement écarté les attributs purement “design” (&lt;code&gt;&lt;em&gt;align&lt;/em&gt;=&quot;&quot;&lt;/code&gt;, &lt;code&gt;&lt;em&gt;hspace&lt;/em&gt;=&quot;&quot;&lt;/code&gt;, &lt;code&gt;&lt;em&gt;vspace&lt;/em&gt;=&quot;&quot;&lt;/code&gt;, &lt;code&gt;&lt;em&gt;border&lt;/em&gt;=&quot;&quot;&lt;/code&gt;) relevant de la &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;CSS&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Quand même, soyons sérieux.&lt;br /&gt;
Quant à &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt;, il mérite vraiment son chapitre à part &lt;del&gt;tellement que les charges sont lour&lt;/del&gt; non je vais pas spoiler son affaire ;)
&lt;/p&gt;
&lt;p&gt;
Pour illustrer les exemples, j'ai pris une carte des régions de France parce que quand j'ai commencé cette suite d'article, &lt;strong&gt;j'ignorais que Manuel Valls avait mis dans son programme gouvernemental la réforme de &lt;a href=&quot;http://commons.wikimedia.org/wiki/File:France_fond_de_carte_27_r%C3%A9gions.png&quot;&gt;cette ressource Wikimédia&lt;/a&gt;&lt;/strong&gt;...
&lt;/p&gt;
&lt;h3 id=&quot;attr_dimensions&quot;&gt;width=&quot;&quot; et height=&quot;&quot;&lt;/h3&gt;
&lt;p&gt;
&lt;span class=&quot;r avecfond&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/1404-Img-Loading.png&quot; alt=&quot;simulation d'une image qui se charge dans Netscape Navigator 3&quot; /&gt;&lt;/span&gt;
Il fut une époque où les modems étaient tellement lents que l'image d'une page pouvait se charger après plus d'une minute. Il est encore une époque où des rigolos mettent des images distantes dans leurs e-mails en html, et qui par défaut ne sont plus chargées automatiquement. Pour éviter des sautes d'affichages à la lecture (aujourd'hui, &lt;a href=&quot;http://dascritch.net/post/2014/04/09/Manuel-en-img#c10479&quot;&gt;nous dirions &lt;q&gt;&lt;em&gt;repaint&lt;/em&gt;&lt;/q&gt;&lt;/a&gt;), on indiquait la dimension de l'image attendue avec les attributs &lt;code&gt;&lt;em&gt;width&lt;/em&gt;=&quot;&quot;&lt;/code&gt; et &lt;code&gt;&lt;em&gt;height&lt;/em&gt;=&quot;&quot;&lt;/code&gt;. Un espace blanc, élégamment cerné de noir et d'une icône d'image indiquait qu'une illustration allait arriver.
&lt;/p&gt;
&lt;p&gt;
…peut-être…
&lt;/p&gt;
&lt;p&gt;
…bientôt…
&lt;/p&gt;
&lt;p&gt;
Le principal souci de ces attributs est que la transformation homothétique n'est pas forcément explicite (cela ne marche que si un seul des attributs est mis, et encore…). Et comme à l'époque, il était  très rare de trouver des scripts qui transforment les tailles des images côté serveur. On avait donc un usage qui amenaient à de mauvaises pratiques&amp;nbsp;: &lt;strong&gt;la sur-résolution&lt;/strong&gt;.&lt;br /&gt;
Combien de fois avez-vous eu des clients qui envoyaient des images de 2000×1600 pixels, qui étaient “réduites” en front avec &lt;code&gt;&lt;em&gt;width&lt;/em&gt;=&quot;&lt;i&gt;100&lt;/i&gt;&quot; &lt;em&gt;height&lt;/em&gt;=&quot;&lt;i&gt;100&lt;/i&gt;&quot;&lt;/code&gt;&amp;nbsp;? En plus de mélanger bêtement présentation et sémantique, ces attributs avaient aussi le souci de la mise à jour des ressources&amp;nbsp;: Si l'image était mise à jour, il était pas rare que les dimensions dans les balises qui l'appelaient n'étaient plus bonnes, donnant un aspect distordu. Surtout qu'à l'époque, les algorithmes des navigateurs pour redimensionner par interpolation étaient assez… rudes… C'était vraiment pas beau.
&lt;/p&gt;
&lt;figure class=&quot;c avecfond&quot;&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; height=&quot;75&quot; width=&quot;75&quot; class=&quot;degueu&quot; /&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; height=&quot;200&quot; width=&quot;200&quot; class=&quot;degueu&quot; /&gt;
&lt;figcaption&gt;
Il y a 5 ans, nous avions encore ce rendu &lt;q&gt;crisp&lt;/q&gt; souvent ignoble &lt;a href=&quot;https://developer.mozilla.org/en/docs/Web/CSS/image-rendering&quot;&gt;que je tente d'émuler&lt;/a&gt;. Les navigateurs modernes &lt;em&gt;adoucissent&lt;/em&gt; les images en appliquant un flou plus ou moins heureux.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Oui, ces attributs avaient disparus pour de bonnes raisons, mais quelqu'un a dit &lt;q&gt;Time And Relative Dimension In Space&lt;/q&gt; et elles sont revenues, entre autres pour la balise &lt;code&gt;&amp;lt;&lt;strong&gt;svg&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt;, et aussi pour la sur-résolution.
&lt;/p&gt;
&lt;p&gt;
D'une manière ironique, nous revenons à ces pratiques de sur-résolutions en &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;css&lt;/a&gt; pour gérer les navigateurs aux rendus à haute-densité (&lt;em&gt;high-DPI&lt;/em&gt; comme disent les pros, &lt;q&gt;Retina™&lt;/q&gt; comment disent les appeuleumaniaques), car l'autre solution c'est faire du &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt; à foison pour découvrir via &lt;code&gt;window.devicePixelRatio&lt;/code&gt; quelle est la différence de taille entre les pixels physiques et les pixels logiques. Oui, c'est à devenir fou.&lt;br /&gt;
Un exemple de méthode de sur-résolution est de prendre une image exportée en jpeg à un taux de compression plus agressif (genre 70%), mais deux fois plus grand que la dimension souhaitée, et de la réduire avec &lt;code&gt;&lt;em&gt;height&lt;/em&gt;=&quot;&lt;i&gt;50%&lt;/i&gt;&quot;&lt;/code&gt;.&lt;br /&gt;
Scandaleux…? Je parlerai de &lt;code&gt;&lt;em&gt;srcset&lt;/em&gt;=&quot;&quot;&lt;/code&gt; plus tard.
&lt;/p&gt;
&lt;h3 id=&quot;attr_longdesc&quot;&gt;longdesc=&quot;&quot;&lt;/h3&gt;
&lt;p&gt;
&lt;code&gt;&lt;em&gt;longdesc&lt;/em&gt;=&quot;&quot;&lt;/code&gt; doit renvoyer vers une page html qui comporte une description complète du document. Par exemple, si on prend la carte de France, quand elle est citée dans la Wikipédia, elle &lt;em&gt;peut&lt;/em&gt; (ce n'est pas systématiquement le cas) comporter cet attribut avec un lien vers la page descriptive correspondante sur Wikimedia. En fait, &lt;a href=&quot;http://wiki.whatwg.org/wiki/Longdesc_usage&quot;&gt;selon une étude de 2007 du WHAT-WG sur la pertinence de cet attribut&lt;/a&gt;, il est noté que les sites Wikipedia et ceux basés sur &lt;a href=&quot;http://www.mediawiki.org/wiki/MediaWiki&quot;&gt;son CMS MediaWiki&lt;/a&gt; sont les consommateurs quasi-exclusifs de cet attribut.
&lt;/p&gt;
&lt;p&gt;
Pour la carte de France choisie en exemple, le code devrait être&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;http://dascritch.net/…/.1404-Img-CarteDeFrance_m.png&lt;/i&gt;&quot; &lt;em&gt;longdesc&lt;/em&gt;=&quot;&lt;a href=&quot;http://commons.wikimedia.org/wiki/File:France_fond_de_carte_27_r%C3%A9gions.png&quot;&gt;&lt;i&gt;http://commons.wikimedia.org/wiki/File:France_fond_de_carte_27_r%C3%A9gions.png&lt;/i&gt;&lt;/a&gt;&quot;
&lt;/code&gt;…
&lt;/p&gt;

&lt;figure class=&quot;c avecfond&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1404-Img-CarteDeFrance_m.png&quot; alt=&quot;&quot; height=&quot;200&quot; width=&quot;185&quot; longdesc=&quot;http://commons.wikimedia.org/wiki/File:France_fond_de_carte_27_r%C3%A9gions.png&quot; /&gt;
&lt;figcaption&gt;
Un lien devrait exister si l'image n'est pas déjà embarquée dans un lien
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Étonnement, cet attribut devrait plus être utilisé comme métadonnée pour l'indexation et la gestion documentaire. Mais &lt;a href=&quot;http://www.w3.org/TR/html-longdesc/&quot;&gt;à relire le standard actuel&lt;/a&gt;, il y est plus décrit comme un élément d'accessibilité.
&lt;/p&gt;
&lt;p&gt;
Et justement, en  termes d'accessibilité, cet attribut s'est montré catastrophique. Dans une discussion du groupe de travail de feu-XHTML2, un des participants fait remarquer que &lt;a href=&quot;http://www.freedomscientific.com/products/fs/jaws-product-page.asp&quot;&gt;le logiciel de lecture d'écran JAWS&lt;/a&gt; ouvre le contenu de &lt;code&gt;&lt;em&gt;longdesc&lt;/em&gt;&lt;/code&gt; dans une fenêtre à part, ce que les bloqueurs de pop-up bloquent&amp;nbsp;!
&lt;/p&gt;
&lt;p&gt;
À l'usage, cet attribut tombe dans tous les défauts des métadonnées séparées de leur contenu&amp;nbsp;: sa maintenance est souvent oubliée donnant ainsi des informations erronées si elle n'est pas automatisée. Dans ce cas, MediaWiki fait un excellent boulot en proposant le versionning, les origines du documents, les url locales y faisant référence et un décodage des métadonnées embarquées dans l'image (Tiens, ça donne de super idées de plugin pour dotclear, ça…).&lt;br /&gt;
Et si on pourrait croire que cette balise est taillée pour la Wikipedia, c'est faux&amp;nbsp;! Dans l'esprit du &lt;del&gt;législate&lt;/del&gt; normalisateur, l'idée qu'il avait était &lt;strong&gt;de proposer une description de l'image plus longue que la balise &lt;code&gt;&lt;em&gt;alt&lt;/em&gt;=&quot;&quot;&lt;/code&gt;&lt;/strong&gt;. Par exemple, si votre image représente un camembert de données ou des graphes, le &lt;code&gt;&lt;em&gt;longdesc&lt;/em&gt;&lt;/code&gt; devrait pointer vers un document proposant le tableau originel de données.
&lt;/p&gt;
&lt;p&gt;
L'usage recommandé est de l'oublier et de plutôt s'intéresser à l'attribut &lt;code&gt;&lt;em&gt;aria-describedby&lt;/em&gt;=&quot;&quot;&lt;/code&gt;. La valeur attendu par cette balise est l'&lt;code&gt;&lt;em&gt;id&lt;/em&gt;&lt;/code&gt; d'un élément de la page, très probablement son &lt;code&gt;&amp;lt;&lt;strong&gt;figcaption&lt;/strong&gt;&amp;gt;&amp;nbsp;&amp;lt;/&amp;gt;&lt;/code&gt; si vous avez utilisé cette structure. Comme ceci&amp;nbsp;:&lt;br /&gt;

&lt;code&gt;
&amp;lt;&lt;strong&gt;figure&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;src&lt;/em&gt;=&quot;&lt;i&gt;http://dascritch.net/…/.1404-Img-CarteDeFrance_m.png&lt;/i&gt;&quot; &lt;em&gt;aria-describedby&lt;/em&gt;=&quot;&lt;i&gt;figdescription&lt;/i&gt;&quot; &lt;em&gt;alt&lt;/em&gt;=&quot;[…]&quot; /&amp;gt;&lt;br /&gt; 
&amp;nbsp; &amp;nbsp;&amp;lt;&lt;strong&gt;figcaption&lt;/strong&gt; &lt;em&gt;id&lt;/em&gt;=&quot;&lt;i&gt;figdescription&lt;/i&gt;&quot;&amp;gt;&lt;/code&gt;…
&lt;/p&gt;
&lt;p&gt;
&lt;abbr title=&quot;À mon humble avis&quot;&gt;ÀMHA&lt;/abbr&gt; une telle structure est inutilement verbeuse si justement on utilise le balisage sémantique &lt;code&gt;&amp;lt;&lt;strong&gt;figcaption&lt;/strong&gt;&amp;gt;&amp;nbsp;&amp;lt;/&amp;gt;&lt;/code&gt;…
&lt;/p&gt;
&lt;h3 id=&quot;attr_lowsrc&quot;&gt;lowsrc=&quot;https://dascritch.net/post/2014/04/09/&quot;&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://dascritch.net/post/2014/06/10/Progressivement-en-img#attribut_lowsrc&quot;&gt;J'explique en détails le fonctionnement de cet attribut dans le chapitre consacré au chargement progressif&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;em&gt;lowsrc&lt;/em&gt;=&quot;&quot;&lt;/code&gt; permet le chargement rapide, en attendant la grooooosse ressource. C'est une fonctionnalité tellement obsolète qu'on peut dire qu'elle est désuète voir qu'elle n'existe plus. Bon, &lt;a href=&quot;http://www.htmlgoodies.com/tutorials/web_graphics/article.php/3479971&quot;&gt;certains ne sont pas encore au courant&lt;/a&gt;, mais de la part de sites comme W3Schools, vous vous attendiez à quoi&amp;nbsp;?
&lt;/p&gt;
&lt;p&gt;
Ceci dit, si nous avons la possibilité d'utiliser le stylage en &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;css&lt;/a&gt; pour mettre une image le temps de charger la ressource, il est difficile d'appliquer cette solution individuellement pour chaque balise. Oui, bien sûr qu'on peut avec &lt;code&gt;&lt;em&gt;style&lt;/em&gt;=&quot;&lt;i&gt;background-image:url(…&lt;/i&gt;&lt;/code&gt;, mais vous ne ressortiriez pas vivant de cette pièce si je vous y surprend…
&lt;/p&gt;
&lt;h3 id=&quot;attr_ismap&quot;&gt;ismap=&quot;&quot;&lt;/h3&gt;
&lt;p&gt;
Cet attribut était une idée de bidouillage&amp;nbsp;: celui de passer la zone cliquée sur une image, quand elle est embarquée dans un lien. Les paramètres sont passés alors en paramètres GET dans la cible du lien, et donc doivent être traités par le serveur. Je vous invite à voir ce que ça fait en dessous&amp;nbsp;:
&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_ismap&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1404-Img-CarteDeFrance_m.png&quot; alt=&quot;Carte de France et de ses régions&quot; ismap=&quot;&quot; /&gt;
&lt;/a&gt;
&lt;figcaption&gt;
Cette magnifique carte de France par &lt;a href=&quot;http://commons.wikimedia.org/wiki/File:France_fond_de_carte_27_r%C3%A9gions.png&quot;&gt;Rosss pour WikiCommons&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Comme vous pouvez le voir en survolant à la souris ou en cliquant l'image, la cible du lien est alors complété par deux paramètres GET, séparés par une virgule et sans association. On a donc un lien &lt;code&gt;http://cible?&lt;em&gt;abcisse&lt;/em&gt;,&lt;em&gt;ordonnée&lt;/em&gt;&lt;/code&gt;. Par exemple, si je clique (vaguement) sur Toulouse, j'ai un &lt;code&gt;#attr_ismap?&lt;strong&gt;210,320&lt;/strong&gt;&lt;/code&gt;. Si vous aviez prévu d'utiliser d'autres paramètres GET dans le lien, vous êtes marrons.
&lt;/p&gt;
&lt;p&gt;
Ce système ne s'est pas montré très heureux à l'usage. Le simple fait que la gestion du point géométrique appuyé soit géré côté serveur en rendait &lt;strong&gt;sa maintenance très peu aisée&lt;/strong&gt;&amp;nbsp;; &lt;a href=&quot;https://dascritch.net/post/2014/04/09/Manuel-en-img#attr_usemap&quot;&gt;l'attribut &lt;code&gt;&lt;em&gt;usemap&lt;/em&gt;=&quot;&quot;&lt;/code&gt;&lt;/a&gt; s'est montré plus simple, car la définition des zones est alors remontée côté client.&lt;br /&gt;
&lt;/p&gt;

&lt;h3 id=&quot;attr_usemap&quot;&gt;usemap=&quot;&quot;&lt;/h3&gt;
&lt;p&gt;
Selon les standards d'accessibilité, &lt;code&gt;&lt;em&gt;ismap&lt;/em&gt;=&quot;&quot;&lt;/code&gt; doit être remplacé par  &lt;code&gt;&lt;em&gt;usemap&lt;/em&gt;=&quot;&quot;&lt;/code&gt;. Cet attribut a une particularité&amp;nbsp;: il ne doit pas être utilisé dans une &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; fille d'un &lt;code&gt;&amp;lt;&lt;strong&gt;a&lt;/strong&gt; &lt;em&gt;href&lt;/em&gt;=&quot;&quot;&amp;gt;&lt;/code&gt; ou d'un &lt;code&gt;&amp;lt;&lt;strong&gt;button&lt;/strong&gt;&amp;gt;&lt;/code&gt;. Oui, à l'inverse de  &lt;code&gt;&lt;em&gt;ismap&lt;/em&gt;=&quot;&quot;&lt;/code&gt;…
&lt;small&gt;Dans les faits, je m'en sers même pas.&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
La valeur de l'attribut est notée comme un adressage id (c'est-à-dire commençant par un &lt;q&gt;&lt;code&gt;#&lt;/code&gt;&lt;/q&gt;), mais est posée par un &lt;code&gt;&lt;em&gt;name&lt;/em&gt;=&quot;&quot;&lt;/code&gt;. Ce qui n'est absolument pas la même chose. L'élément pointé est une balise bloc &lt;code&gt;&amp;lt;&lt;strong&gt;map&lt;/strong&gt; &lt;em&gt;name&lt;/em&gt;=&quot;&quot;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; qui contient un ensemble de balises &lt;code&gt;&amp;lt;&lt;strong&gt;area&lt;/strong&gt; &lt;em&gt;shape&lt;/em&gt;=&quot;&quot; &lt;em&gt;href&lt;/em&gt;=&quot;&quot;&amp;nbsp;/&amp;gt;&lt;/code&gt; décrivant des zones géométriques et les liens qui leur sont associés. Voici justement l'exemple pour l'exemple du dessous&amp;nbsp;:
&lt;/p&gt;
&lt;code&gt;
&amp;lt;&lt;strong&gt;map&lt;/strong&gt; &lt;em&gt;name&lt;/em&gt;=&quot;&lt;i&gt;usemap_demo&lt;/i&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;  &amp;lt;&lt;strong&gt;area&lt;/strong&gt; &lt;em&gt;shape&lt;/em&gt;=&quot;&lt;i&gt;rect&lt;/i&gt;&quot; &lt;em&gt;coords&lt;/em&gt;=&quot;&lt;i&gt;0,0,460,303&lt;/i&gt;&quot; &lt;em&gt;href&lt;/em&gt;=&quot;&lt;i&gt;?nord#attr_usemap&lt;/i&gt;&quot; &lt;em&gt;title&lt;/em&gt;=&quot;&lt;i&gt;nord&lt;/i&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;  &amp;lt;&lt;strong&gt;area&lt;/strong&gt; &lt;em&gt;shape&lt;/em&gt;=&quot;&lt;i&gt;rect&lt;/i&gt;&quot; &lt;em&gt;coords&lt;/em&gt;=&quot;&lt;i&gt;300,303,460,420&lt;/i&gt;&quot; &lt;em&gt;href&lt;/em&gt;=&quot;&lt;i&gt;?vantards#attr_usemap&lt;/i&gt;&quot; &lt;em&gt;title&lt;/em&gt;=&quot;&lt;i&gt;vantards&lt;/i&gt;&quot;&amp;gt;&lt;br /&gt;
  &amp;nbsp;&amp;lt;&lt;strong&gt;area&lt;/strong&gt; &lt;em&gt;shape&lt;/em&gt;=&quot;&lt;i&gt;rect&lt;/i&gt;&quot; &lt;em&gt;coords&lt;/em&gt;=&quot;&lt;i&gt;0,303,123,420&lt;/i&gt;&quot; &lt;em&gt;href&lt;/em&gt;=&quot;&lt;i&gt;?inconnu#attr_usemap&lt;/i&gt;&quot; &lt;em&gt;title&lt;/em&gt;=&quot;&lt;i&gt;inconnu&lt;/i&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/&lt;strong&gt;map&lt;/strong&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;strong&gt;img&lt;/strong&gt; &lt;em&gt;usemap&lt;/em&gt;=&quot;&lt;i&gt;#usemap_demo&lt;/i&gt;&quot; /&amp;gt;
&lt;/code&gt;
&lt;p&gt;
Le lien est un vrai lien indépendant &lt;a href=&quot;http://dascritch.net/post/2007/09/17/RIP-URL-URI-IRI-INRI-W3C&quot;&gt;avec une url complète&lt;/a&gt;. La description de &lt;code&gt;&amp;lt;&lt;strong&gt;map&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; et des &lt;code&gt;&amp;lt;&lt;strong&gt;area&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; étant très complexe, je vous laisserai lire la doc idoine sur le sujet. De sa version d'origine (HTML 3.2) à la plus récente. À noter que les zones acceptent l'attribut &lt;code&gt;&lt;em&gt;title&lt;/em&gt;=&quot;&quot;&lt;/code&gt;, que les vieux qui en sont à &lt;a href=&quot;http://dascritch.net/post/2005/06/09/151-la-tapette-cette-arme-mortelle-pour-les-rongeurs&quot;&gt;l'informatique &lt;em&gt;point'n'click&lt;/em&gt; non-digitale (donc à la souris)&lt;/a&gt; verront les informations en survolant l'image de démo ci-dessous&amp;nbsp;:
&lt;/p&gt;
&lt;figure&gt;
&lt;map name=&quot;usemap_demo&quot;&gt;
  &lt;area shape=&quot;rect&quot; coords=&quot;0,0,460,303&quot; href=&quot;https://dascritch.net/post/2014/04/09/?nord#attr_usemap&quot; title=&quot;nord&quot;&gt;
  &lt;area shape=&quot;rect&quot; coords=&quot;300,303,460,420&quot; href=&quot;https://dascritch.net/post/2014/04/09/?vantards#attr_usemap&quot; title=&quot;vantards&quot;&gt;
  &lt;area shape=&quot;rect&quot; coords=&quot;0,303,123,420&quot; href=&quot;https://dascritch.net/post/2014/04/09/?inconnu#attr_usemap&quot; title=&quot;inconnu&quot;&gt;
&lt;/map&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1403-Img/.1404-Img-CarteDeFrance_m.png&quot; alt=&quot;Carte de France et de ses régions&quot; ismap=&quot;&quot; usemap=&quot;#usemap_demo&quot; /&gt;
&lt;/figure&gt;

&lt;p&gt;
À toi qui me lit, sache que oui, cet attribut m'a fait adorer Dreamweaver de Macromedia. Au nombre de fois que j'ai fais du détourage de zone avec cet outil, je peux t'assurer qu'il m'a sauvé au moins 3 après-midi. Et je le dis sans honte&amp;nbsp;: En cette époque obscure où le style était dans les attributs, la mise en page en tables et les interactions dans des &lt;code&gt;&amp;lt;&lt;strong&gt;a&lt;/strong&gt; &lt;em&gt;href&lt;/em&gt;=&quot;&lt;i&gt;javascript:&lt;/i&gt;&lt;/code&gt;…, on n'avait pas mieux.
&lt;br /&gt;
On était en 2000, et depuis j'ai appris à m'en méfier.
&lt;/p&gt;
&lt;p&gt;
Au final, aucun de ces deux attributs ne furent pérennes. Les différents remplacements en &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt; se sont montrés bien meilleurs et inclure du &lt;a href=&quot;https://dascritch.net/tag/svg&quot;&gt;svg&lt;/a&gt; via &lt;a href=&quot;https://dascritch.net/tag/xml&quot;&gt;notation xhtml&lt;/a&gt; ou plus tard par la balise &lt;code&gt;&amp;lt;&lt;strong&gt;svg&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; dans le html s'est montré largement plus pratique et prometteur.&lt;br /&gt;
Imagineriez-vous encore une carte à la google map qu'avec des liens cliquables&amp;nbsp;? 
&lt;/p&gt;

&lt;h3 id=&quot;attr_crossorigin&quot;&gt;crossorigin=&quot;&quot;&lt;/h3&gt;
&lt;p&gt;
Si vous servez votre site en protocole &lt;code&gt;https://&lt;/code&gt; et que la source de votre image n'est pas sur le domaine, les mesures prophylactiques du navigateur lancera une alerte, soupçonnant votre site d'être injecté ou corrompu. Ou alors ignorera la source et donc n'affichera que le &lt;code&gt;&lt;em&gt;alt&lt;/em&gt;=&quot;&quot;&lt;/code&gt;. À moins que vous ayez déclaré en entête http (HSTS et CSP) que le site externe fait partie des ressources autorisées, vous pouvez encore le faire après coup
&lt;/p&gt;
&lt;p&gt;
Sur le terme sécu, cela ne protège en rien d'une injection. Je trouve même cette balise comme contre-productive&amp;nbsp;: &lt;strong&gt;il ne faut jamais faire de &lt;em&gt;hot-link&lt;/em&gt; vers un site que vous ne maîtrisez pas&lt;/strong&gt;. Quand je vois qu'un site à fort traffic a fait un lien direct vers une image, je remplace à la volée la ressource &lt;a href=&quot;http://dascritch.net/volbp.gif&quot;&gt;par un truc ignoble qui devrait faire fuir tout le monde&lt;/a&gt;. Et je vous encourage à en faire de même.
&lt;/p&gt;

&lt;h3 id=&quot;attr_alt&quot;&gt;alt=&quot;&quot;&lt;/h3&gt;
&lt;p&gt;
L'attribut &lt;code&gt;&lt;em&gt;alt&lt;/em&gt;=&quot;&quot;&lt;/code&gt; est strictement obligatoire pour la moindre &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt;, mais pas mandatoire.
&lt;/p&gt;
&lt;p&gt;
Cet attribut a pour charge de proposer un contenu alternatif (eh oui) si la ressource met du temps à être chargée, si elle est inutilisable ou si le client web ne peut afficher d'image. Ce dernier point fait qu'il est très utile voire primordial&amp;nbsp;: les synthèses vocales, les tablettes brailles, la plupart des &lt;em&gt;crawlers&lt;/em&gt; et les navigateurs en mode texte vont s'en servir. Il y a donc un réel intérêt à le renseigner, plutôt qu'entendre un &lt;q&gt;image&lt;/q&gt; quand elle n'y est pas (&lt;q&gt;thank you, captain obvious&lt;/q&gt;).
&lt;/p&gt;
&lt;p&gt;
La manière d'écrire son contenu a longtemps été sujet à des discussions sans fins, et il est enfin &lt;a href=&quot;http://www.w3.org/TR/2014/CR-html5-20140204/embedded-content-0.html#alt&quot;&gt;proposé par le W3C des recommandations, claires pour la plupart des cas de figures&lt;/a&gt;, allant du logo contenu un texte, un diagramme ou une illustration qui accompagne un texte.
&lt;/p&gt;
&lt;p&gt;
D'où ma question&amp;nbsp;:&lt;br /&gt;
maintenant que nous maîtrisons les &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;CSS&lt;/a&gt; pour ne plus appeler d'images à tort et à travers, que nous avons les webfonts ce qui permet de répondre aux demandes client de “design”  les plus farfelues, et le &lt;a href=&quot;https://dascritch.net/tag/svg&quot;&gt;svg&lt;/a&gt; pour aller encore plus loin... nous n'utilisons plus que &lt;code&gt;&lt;em&gt;alt&lt;/em&gt;=&quot;&quot;&lt;/code&gt; pour du réel contenu, les images appelées représentent très rarement du texte écrasé. Bref, nous laissons le contenu vide.&lt;br /&gt;
De nos jours, &lt;code&gt;&lt;em&gt;alt&lt;/em&gt;=&quot;&quot;&lt;/code&gt; est réellement important pour l'accessibilité, mais nous mettons de plus en plus souvent un contenu vide. &lt;strong&gt;Est-il temps de faire évoluer les navigateurs et de proposer qu'&lt;code&gt;&lt;em&gt;alt&lt;/em&gt;=&quot;&quot;&lt;/code&gt; soit implicite&amp;nbsp;?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Je sais qu'il y aura toujours le problème de l'existant, mais n'est-il pas temps de commencer&amp;nbsp;?
&lt;/p&gt;


&lt;h3 id=&quot;attr_src&quot;&gt;src=&quot;https://dascritch.net/post/2014/04/09/&quot;&lt;/h3&gt;
&lt;p&gt;
&lt;code&gt;&lt;em&gt;src&lt;/em&gt;=&quot;&quot;&lt;/code&gt; appelle la ressource. Évidemment, cette balise est obligatoire.
&lt;/p&gt;
&lt;p&gt;
Celle-ci peut-être une URL, locale ou distante, ou alors une ressource interne, comme pour les e-mails ou dans certains cas &lt;a href=&quot;http://dascritch.net/post/2012/02/16/Des-emoji-dans-l-Unicode-4#ezweb&quot;&gt;des emoji (mais c'était une méthode propriétaire d'un monde révolu, oubliez-le)&lt;/a&gt;. À noter que dans les URL possibles, il y a le mode &lt;code&gt;&lt;i&gt;data:&lt;/i&gt;[…]&lt;/code&gt; qui &lt;a href=&quot;https://developer.mozilla.org/en/docs/data_URIs&quot;&gt;permet d'embarquer dans l'URL le contenu de la ressource&lt;/a&gt;. Honnêtement, je ne le recommande pas des masses.
&lt;/p&gt;
&lt;p&gt;
De toutes les balises &lt;q&gt;audiovisuelles&lt;/q&gt;, c'est la seule  qui contrairement à ses collègues comme &lt;code&gt;&amp;lt;&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt;, &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;object&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt;, ne supporte pas &lt;a href=&quot;http://dascritch.net/post/2013/03/19/La-d%C3%A9gradation-%C3%A9l%C3%A9gante-peut-sauver-votre-site#exempleaudio&quot;&gt;de gestion de dégradation élégante native&lt;/a&gt;, ou &lt;em&gt;fallback&lt;/em&gt;, c'est-à-dire d'une solution de repli à part afficher le contenu de l'attribut &lt;code&gt;&lt;em&gt;alt&lt;/em&gt;=&quot;&quot;&lt;/code&gt;. Cela est dû à la nature auto-fermante de la balise, un peu comme &lt;code&gt;&amp;lt;&lt;strong&gt;embed&lt;/strong&gt;&amp;nbsp;/&amp;gt;&lt;/code&gt; et &lt;a href=&quot;http://dascritch.net/post/2007/10/19/Pardonnons-a-ce-Flash-qui-nous-agacent#embedvsobject&quot;&gt;raison principale pour laquelle je déconseille toujours d'utiliser cette dernière&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Il y a actuellement des propositions de normalisation, principalement pour une gestion native du High-DPI (ce qui est commercialement appelé un &lt;q&gt;écran Retina™&lt;/q&gt;). Le problème est que le débat sur sa syntaxe n'arrive pas à obtenir à la fois un consensus rétro-compatible et &lt;del&gt;futureproof&lt;/del&gt; à l'épreuve du temps. Personne n'est convaincu par les propositions actuelles. D'ailleurs, &lt;a href=&quot;https://dascritch.net/tag/dom&quot;&gt;l'objet DOM&lt;/a&gt; ne propose pas de méthode de support de contenu, là ou &lt;code&gt;&amp;lt;&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; ou &lt;code&gt;&amp;lt;&lt;strong&gt;video&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt; permettent de savoir si le navigateur supporte un codec particulier comme ogg vorbis ou h264. Ben non, impossible de le deviner avec &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;gt;&amp;lt;/&amp;gt;&lt;/code&gt;, sinon en chargeant une image à un format, et de tester en javascript si elle a été chargée, affichée ou non. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;C'est une contrainte importante à savoir si vous décidez de pointer une ressource dans un format qui n'est supporté que marginalement&lt;/strong&gt;. Et &lt;a href=&quot;http://dascritch.net/post/2014/04/29/Ressources-en-img&quot;&gt;j'en parlerai justement dans le prochain chapitre&lt;/a&gt;.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Après le ‹Html› sur table</title>
		<link>https://dascritch.net/post/2014/03/26/Reparlons-front-code</link>
		<guid isPermaLink="false">urn:md5:5bc32b7496bf81a27195700a77cf3387</guid>
		<dc:date>2014-03-26T09:10:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Sortons</dc:subject>
        
    <description>Pour ceux qui se sont désistés ou qui n'ont pas pu y venir, non pas un résumé des débats, mais de l'esprit qu'on voulait atteindre : Reparlons front code entre différents spécialistes.		&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;Pour ceux qui se sont désistés ou qui n'ont pas pu y venir, non pas un résumé des débats, mais de l'esprit qu'on voulait atteindre : Reparlons front code entre différents spécialistes.&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;
&lt;img class=&quot;r&quot; src=&quot;http://dascritch.net/vrac/.blog2/sortons/.1402-CryptoParty-soir-2_s.jpg&quot; alt=&quot;&quot;&gt;&lt;a href=&quot;http://dascritch.net/post/2014/03/19/HTML-sur-table&quot;&gt;La soirée annoncée sur ce billet&lt;/a&gt; est passée, et a été une bonne surprise sur les échanges et nos conclusions.&lt;br /&gt;
D'abord, je dois remercier immensément &lt;a href=&quot;http://tau.so/&quot;&gt;l'espace de co-working Tau&lt;/a&gt; de m'avoir fait confiance pour cette première soirée. Je leur en suis infiniment reconnaissant.
&lt;/p&gt;
&lt;p&gt;
Ensuite il faut que je remercie les autres participants (&lt;a href=&quot;https://twitter.com/wa__rn&quot;&gt;Alain&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/Inateno&quot;&gt;Antoine&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/zeubeubeu&quot;&gt;Benoît&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/FlavienBeninca&quot;&gt;Flavien&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/eQRoeil&quot;&gt;Pascal&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/postite&quot;&gt;Postite&lt;/a&gt;). Des profils très divers allant du graphisme au développeur issu du jeu vidéo, c'était justement le but de cette soirée. Et finalement, il n'y a même pas eu de réticence à montrer du &lt;em&gt;work in progress&lt;/em&gt; pour justement chercher une meilleure voie. Je trouve dommage que nous n'ayons pas eu de profil UX ou Product Owner.
&lt;/p&gt;
&lt;p&gt;
Sur chaque page ou cas que nous avons abordé, on a eu des débats franchement intéressant, qui allaient de la gestion des polices ou des éléments de formulaires par les navigateurs, des standards à venir (pointer-events) à la pérennité de certains outils à la mode, à la question des différents outils d'assistance à la lecture pour les personnes déficientes. En fait, on s'est rendu compte qu'aucun d'entre nous n'a testé justement un de ces outils, donc cela devrait être intéressant de faire une session avec.
&lt;/p&gt;
&lt;p&gt;
La durée de moins de deux heures, suivi d'un pot est un format intéressant car il évite la lassitude et permet à d'autres de partir ou d'arriver en cours de soirée.
&lt;/p&gt;
&lt;p&gt;
Mais surtout, il y a eu un réel plaisir d'échanger sur nos recettes, nos connaissances des moteurs et des standards. C'était vraiment cette idée là, discuter de ce que l'on sert aux navigateurs et du rendu, chacun avec le regard de nos connaissances, afin de parfaire notre culture générale.
&lt;/p&gt;
&lt;h3&gt;Ce qui reste à perfectionner&lt;/h3&gt;
&lt;p&gt;
Forcément, c'était très loin d'être parfait. Et comme je suis un pessimiste, voici ce que je pense devoir travailler pour la prochaine&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Peut-être changer de nom, mais &lt;q&gt;&lt;abbr title=&quot;bring your own code&quot;&gt;BYOC&lt;/abbr&gt; front&lt;/q&gt; ne motivera jamais les graphistes, alors que c'est l'idée et le principe&lt;/li&gt;
&lt;li&gt;L'annoncer avec plus d'une semaine de distance. C'est clair, &lt;a href=&quot;http://dascritch.net/post/2014/03/19/HTML-sur-table&quot;&gt;j'ai vraiment été trop court&lt;/a&gt; suite à des problèmes de communication&lt;/li&gt;
&lt;li&gt;Utiliser un outil comme Doodle ou Framapad pour la liste des personnes qui viennent. Je pensais être le seul à être rebuté par Meetup ou EventBrite, et en fait… non. Créer un compte est un acte chiant à chaque fois&lt;/li&gt;
&lt;li&gt;Prévoir éventuellement un sujet général (les big menus, le scroll parallax), en tout cas, le préparer un minimum&lt;/li&gt;
&lt;li&gt;Demander à chacun d'avoir les URL prêtes, plutôt que laisser chercher pendant 10mn (hein, Alain)&lt;/li&gt;
&lt;li&gt;Remettre l'addon qui génère les QR Code à la volée, pour les tests sur mobiles&lt;/li&gt;
&lt;li&gt;Éviter les discussions qui partent de chaque côté, je dois recadrer un peu mieux&lt;/li&gt;
&lt;li&gt;Mettre la spécialité de chacun sur le pull, en fait nous ne nous connaissons pas des masses ^^&lt;/li&gt;
&lt;li&gt;Ne plus faire commencer les sessions à 19h, c'est trop tôt&lt;/li&gt;
&lt;li&gt;Penser à reparamétrer son PC, l'overscan du rétro-projecteur mange trop sur les bords et on ne voyait pas forcément la barre d'URL&lt;/li&gt;
&lt;li&gt;Écrire les critères de chaque sujet (back office ou front office&amp;nbsp;? contexte de commande ou pet-project&amp;nbsp;? durée de vie&amp;nbsp;?)&lt;/li&gt;
&lt;li&gt;Prévoir une espèce de vote sur chaque sujet, un peu &lt;a href=&quot;http://dascritch.net/post/2013/03/26/Dirty-Hacky-%3A-je-parse-en-HTML-.357-SW&quot;&gt;dans l'idée des critères de ma série Dirty Hacky&lt;/a&gt;, en ajoutant des critères de lisible, accessible et beau&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
L'organisation est minimale, car je ne veux pas que cela soit trop contraint, que chacun garde sa spontanéité pour que les échanges soient riches.
&lt;/p&gt;
&lt;p&gt;
Je pense que ça vaut le coup de remettre ça, peut-être avant Sud Web.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>‹Html› sur table</title>
		<link>https://dascritch.net/post/2014/03/19/HTML-sur-table</link>
		<guid isPermaLink="false">urn:md5:0a9d4b3af501ba8fb6c0e727265dfcbf</guid>
		<dc:date>2014-03-19T09:43:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Sortons</dc:subject>
        
    <description>Une soirée d'ateliers after-work pour tous les professionnels du web. Mardi 25 Mars, amène ton code, après on ira boire pour en parler. Inscriptions en commentaires. Parlons de ce qui nous uni, le html. C'est le printemps, faut que ça bourgeonne !		&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;Une soirée d'ateliers after-work pour tous les professionnels du web. Mardi 25 Mars, amène ton code, après on ira boire pour en parler. Inscriptions en commentaires. Parlons de ce qui nous uni, le html. C'est le printemps, faut que ça bourgeonne !&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;
&lt;strong&gt;TL;DR : Mardi 25 à 19h &lt;a href=&quot;http://tau.so/&quot;&gt;chez Tau&lt;/a&gt;, 20 places maxi, &lt;a href=&quot;https://dascritch.net/post/2014/03/19/HTML-sur-table#comment-form&quot;&gt;inscrivez-vous&lt;/a&gt; ou sinon, rendez-vous après 21h.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img class=&quot;r&quot; src=&quot;http://dascritch.net/vrac/.blog2/sortons/.1402-CryptoParty-soir-2_s.jpg&quot; alt=&quot;&quot; /&gt;
Il fut une époque pas si lointaine où l'ensemble des spécialistes web de Toulouse se rencontraient, échangeaient, devisaient et festoyaient lors de soirées. On y croisaient des développeurs, des responsables projets, des administrateurs, des designers, des intégrateurs, des référenceurs,… En clair, tout ce qui fait qu'on peut construire un site web efficace, solide et de qualité.
&lt;/p&gt;
&lt;p&gt;
Malheureusement, ces réunions n'existent quasiment plus. On a plus que des réunions “sectorielles” comme &lt;a href=&quot;https://www.facebook.com/cafecrea&quot;&gt;Café créa&lt;/a&gt;, &lt;a href=&quot;http://www.agiletoulouse.fr/sectioncontenu/ap%C3%A9ro-agile&quot;&gt;Apéro Agile&lt;/a&gt;, &lt;a href=&quot;http://codeandcoffee.info/&quot;&gt;Code And Coffee&lt;/a&gt;, &lt;a href=&quot;http://flupa.eu/events/categorie/antenne-flupa-toulouse/&quot;&gt;Apéro Ergo&lt;/a&gt;, &lt;a href=&quot;http://toulousejs.francejs.org/&quot;&gt;ToulouseJS (prochaine édition le 27)&lt;/a&gt; ou &lt;em&gt;happy few&lt;/em&gt;. En clair, nous ne discutons plus entre différents corps de métiers. Je trouvais dommage que nous n'ayons plus eu d'occasions de se rencontrer entre professionnels pluridisciplinaires du web. &lt;a href=&quot;https://github.com/aperoweb-toulouse/talks/issues/34&quot;&gt;En ayant fait la remarque&lt;/a&gt;, on m'a dit &lt;q&gt;Do it yourself&lt;/q&gt;.
&lt;/p&gt;
&lt;h3 id =&quot;dontacte&quot;&gt;Dont acte&lt;/h3&gt;
&lt;p&gt;
Mardi 25 Mars prochain, je propose une rencontre en deux parties.
&lt;/p&gt;
&lt;p&gt;
La &lt;strong&gt;première partie commencera à 19h chez Tau&lt;/strong&gt; (un espace de coworking &lt;a href=&quot;http://toulouse.devfriendlyplaces.net/&quot;&gt;très bien noté&lt;/a&gt;). Elle consistera en une revue critique de code&amp;nbsp;: Amenez le code que nous parlons tous en commun, le code front que nous délivrons tous, à savoir &lt;a href=&quot;https://dascritch.net/tag/html&quot;&gt;html&lt;/a&gt;, &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;css&lt;/a&gt; ou &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt;. &lt;a href=&quot;https://dascritch.net/post/2014/03/19/HTML-sur-table#comment-form&quot;&gt;Les places étant limitées, &lt;strong&gt;il faut s'inscrire&lt;/strong&gt;&lt;/a&gt;, annoncez-vous dans les commentaires, avec une idée du code que vous pourriez amener&lt;/a&gt;. Vous pouvez amener une portion de code, une page. L'idée est d'avoir du front-code (&lt;a href=&quot;https://dascritch.net/tag/html&quot;&gt;html&lt;/a&gt;, &lt;a href=&quot;https://dascritch.net/tag/css&quot;&gt;css&lt;/a&gt;, &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;javascript&lt;/a&gt;) dont vous doutez et que vous souhaitez montrer. L'idée est de partager les expertises de nous tous, comprendre les intentions, discuter des astuces, trouver des améliorations et repartir chacun avec de meilleures pratiques.
&lt;/p&gt;
&lt;p&gt;
Le nombre est restreint non pas par volonté de faire un cercle fermé ou une ambiance élitiste, bien au contraire, mais pour la sécurité et le confort dans la salle de réunion qui nous est prêtée. D'un autre côté, cela devrait favoriser le dialogue et le faire d'une manière plus amicale.
&lt;/p&gt;
&lt;p&gt;
Par exemple, ma tentative &lt;a href=&quot;http://dascritch.net/post/2014/03/11/Refaire-des-commentaires&quot;&gt;redesign du formulaire de commentaires de mon blog en float labels&lt;/a&gt;. Mais vu que je ne suis pas web-designer, et si je sais faire un html sémantiquement correct, est-ce un travail cohérent en terme d'accessibilité, de praticité, ou même d'aspect&amp;nbsp;?
&lt;/p&gt;
&lt;p&gt;
Ne soyez pas si sûr de produire un travail parfait&amp;nbsp;: Notre secteur évoluant à un rythme effréné, et nos métiers étant tellement spécialisés, nous devons continuellement nous remettre en cause.
&lt;/p&gt;
&lt;p&gt;
Et &lt;strong&gt;à partir de 21h, nous irons manger&lt;/strong&gt; et boire dans le quartier. Pas de &lt;em&gt;numerus clausus&lt;/em&gt; si vous nous rejoignez à ce moment-là. L'idée est de boire pour se rappeler que nous parlons travail le soir par passion&amp;nbsp;!
&lt;/p&gt;
&lt;h3 id=&quot;littlehelp&quot;&gt;With a little help from my friends&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://tau.so/&quot;&gt;Les sociétaires de l'espace de coworking Tau&lt;/a&gt; ont accédé à ma requête en acceptant que j'organise cette expérience chez eux. Ce sont aussi mes amis comme Alain, Arnaud, Flavien, Joël, Michel, Nicolas et d'autres professionnels qui m'ont encouragés à l'organiser, à recombler ce vide. Et j'espère aussi y voir les organisateurs du &lt;a href=&quot;http://www.meetup.com/HTML5-Toulouse/&quot;&gt;HTML5 Meetup&lt;/a&gt;, afin qu'ils en parlent.
&lt;/p&gt;
&lt;p&gt;
Alors ne me faites pas mentir&amp;nbsp;: j'espère que vous viendrez nombreux, et qu'après 21h, nous discuterons standards, normes et qualité, un verre à la main.
&lt;/p&gt;
&lt;p&gt;
Attention, pour la partie critique entre 19h et 21h, il vaut mieux s'inscrire à l'avance.
&lt;/p&gt;
&lt;h3 id=&quot;inscrits&quot;&gt;Inscrits&lt;/h3&gt;
&lt;div class=&quot;c&quot;&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Qui&lt;/th&gt;&lt;th&gt;Spécialités&lt;/th&gt;&lt;th&gt;Amène du code&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Da Scritch&lt;/td&gt;&lt;td&gt;php, js&lt;/td&gt;&lt;td&gt;au cas où&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Wiko&lt;/td&gt;&lt;td&gt;front, intégration&lt;/td&gt;&lt;td&gt;peut être&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Inateno&lt;/td&gt;&lt;td&gt;js, html5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Enguerran&lt;/td&gt;&lt;td&gt;le rougail saucisses&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Flavien&lt;/td&gt;&lt;td&gt;php, html, css&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;EQroeil&lt;/td&gt;&lt;td&gt;php, js, css&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Postite&lt;/td&gt;&lt;td&gt;haxe, js, flash&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tfoot&gt;
&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;&lt;a href=&quot;https://dascritch.net/post/2014/03/19/HTML-sur-table#comment-form&quot; class=&quot;c&quot;&gt;&lt;strong&gt;Ajoute-moi !&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tfoot&gt;
&lt;/table&gt;
&lt;/div&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Mercis pour les 25 ans du web</title>
		<link>https://dascritch.net/post/2014/03/12/Mercis-pour-les-25-ans-du-web</link>
		<guid isPermaLink="false">urn:md5:491babe0bb5fcf24d5338474f2cb1fa1</guid>
		<dc:date>2014-03-12T23:54:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Ma vie est une sitcom</dc:subject>
        
    <description>Le World Wide Web, la façade la plus visible d'internet, a 25 ans. C'est allé très vite.		&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;Le World Wide Web, la façade la plus visible d'internet, a 25 ans. C'est allé très vite.&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;
&lt;a href=&quot;http://www.webat25.org/news/tbl-web25-welcome-fr&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/sitcom/.1403-web25_s.png&quot; class=&quot;r&quot; alt=&quot;&quot; /&gt;
Merci à vous Sir Tim Berners-Lee.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Merci de m'avoir donné de nouvelles passions, de m'avoir instruit à n'importe quelle heure sur n'importe quel sujet, de m'avoir diverti, de m'avoir milles fois émerveillé.
&lt;/p&gt;
&lt;p&gt;
Merci de d'avoir fait découvrir le monde, de m'avoir informé, d'avoir permis à des peuples de s'émanciper et de l'avoir fait savoir, d'avoir donné de nouvelles technologies, d'en avoir fait émerger d'autres et de les avoir partagées sans retenue.
&lt;/p&gt;
&lt;p&gt;
Merci de m'avoir permis de me lancer dans plein de nouveau projets, de m'avoir permis de communiquer mes joies, mes peines, mes belles découvertes, de construire, de concevoir.
&lt;/p&gt;
&lt;p&gt;
Merci de m'avoir donné l'occasion de devenir mon propre média par mon blog, d'avoir aidé d'autres personnes à ouvrir le leur. Merci de m'avoir aidé d'autres à consolider leur entreprise, de construire leur activité, de collaborer ensemble. Merci de m'avoir donné de nouveaux métiers.
&lt;/p&gt;
&lt;p&gt;
Merci de m'avoir fait rencontrer plein de nouveaux amis, de m'avoir aidé à en retrouver d'anciens, de m'avoir enfin fait rencontrer l'amour véritable, de me laisser garder contact même une fois rompu.
&lt;/p&gt;
&lt;p&gt;
Merci à toi, Sir Tim Berners-Lee, de nous avoir donné de nouvelles vies
&lt;/p&gt;
&lt;p&gt;
mais surtout… &lt;strong&gt;Merci à vous tous&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;</content:encoded>
    
    
    
      </item>
    
</channel>
</rss>