<?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é - javascript</title>
	<link>https://dascritch.net/</link>
	<description>Ma vie et tous ses ridicules petits à-côtés : mes émissions “CPU” sur Radio FMR, les standards web, le code et ce qui me passe par la tête.</description>
	<language>fr</language>
	<pubDate>Mon, 08 Jun 2026 17:32:52 +0200</pubDate>
	<copyright>CC pour les textes</copyright>
	<docs>http://blogs.law.harvard.edu/tech/rss</docs>
	<generator>Dotclear</generator>

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

	
	<item>
		<title>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>Deux couleurs bizarres en CSS</title>
		<link>https://dascritch.net/post/2019/11/13/Deux-couleurs-bizarres-en-CSS</link>
		<guid isPermaLink="false">urn:md5:099704ba18580e0f1320028c6880d89e</guid>
		<dc:date>2019-11-13T13:41:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Une bête combinaison qui ne me permettent pas de faire un chouette aspect dans un cas très précis. Et vous allez même pouvoir vous amuser avec pour comprendre les limites de certaines propriétés CSS magiques		&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;Une bête combinaison qui ne me permettent pas de faire un chouette aspect dans un cas très précis. Et vous allez même pouvoir vous amuser avec pour comprendre les limites de certaines propriétés CSS magiques&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;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;strong&gt;Deux couleurs bizarres en CSS&lt;/strong&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;
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/11/13/Deux-couleurs-bizarres-en-CSS#couleur_tombee_du_dom&quot;&gt;⇓ sautez ⇓ directement ⇓ au chapitre suivant ⇓&lt;/a&gt;
&lt;/p&gt;

&lt;cpu-audio title=&quot;@HalluFMR, #26 : Brevet (25/03/2015)&quot; poster=&quot;https://dascritch.net/vrac/.blog2/radio/.1409-Hallucinarium-FMR_s.jpg&quot; canonical=&quot;https://dascritch.net/post/2015/03/25/micro-%40HalluFMR-26-%3A-Brevet&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/AtHalluFMR/26-AtHalluFMR%2825-03-15%29.ogg&quot; type=&quot;audio/ogg&quot; /&gt;
      &lt;source src=&quot;https://dascritch.net/vrac/Emissions/AtHalluFMR/podcast/26-AtHalluFMR%2825-03-15%29.mp3&quot; type=&quot;audio/mpeg&quot; /&gt;
&lt;/audio&gt;
&lt;/cpu-audio&gt;
&lt;p&gt;
&lt;small&gt;Comment replacer un sujet tiers rien à voir avec le billet sous prétexte d'illustration d'exemple…&lt;/small&gt;
&lt;/p&gt;

&lt;h3 id=&quot;couleur_tombee_du_dom&quot;&gt;La Couleur tombée du DOM&lt;/h3&gt;

&lt;p&gt;
Je vais parler non pas de &lt;a href=&quot;https://fr.wikipedia.org/wiki/Couleur_interdite&quot;&gt;couleurs interdites&lt;/a&gt; (quel &lt;a href=&quot;https://www.franceculture.fr/emissions/fictions-samedi-noir/la-couleur-tombee-du-ciel-0&quot;&gt;nom de film d'horreur génial&lt;/a&gt;&amp;nbsp;!) comme le Rouge Surbrillant, le Jaune Bleuté, ou l'Orange Hyperbolique, mais de deux définitions volontairement manquantes dans les CSS. Or, comme &lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/live_config.html&quot;&gt;mon &lt;em lang=&quot;en&quot;&gt;player&lt;/em&gt; a un aspect totalement paramétrable par les utilisateurs via la CSS&lt;/a&gt;, lesdits utilisateurs pourraient tenter de faire un effet qui sera systématiquement en échec.
&lt;/p&gt;

&lt;figure&gt;
&lt;figcaption&gt;
Allez, cadeau ! trois couleurs interdites (&lt;q&gt;impossibles&lt;/q&gt;, ou plutôt &lt;q&gt;chimériques&lt;/q&gt;).&lt;br /&gt;
Observez le point de gauche, votre regard fixé sur le × sans bouger pendant trente secondes,&lt;br /&gt; puis sautez au carré du milieu et restez sur sa ×.&lt;br /&gt;
Auteur : &lt;a href=&quot;https://en.wikipedia.org/wiki/File:Chimerical-color-demo.svg&quot;&gt;Zowie CC-BY-SA pour Wikipédia.&lt;/a&gt;
&lt;/figcaption&gt;

&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-couleurs-chimeriques.svg&quot; alt=&quot;&quot; /&gt;
&lt;/figure&gt;

&lt;p&gt;
D'autres parlent bien mieux que moi &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/Type_color&quot;&gt;des couleurs en CSS&lt;/a&gt;, donc je ne ferais pas l'affront d'en faire un résumé imparfait, mais je sauterais direct au nœud du problème&amp;nbsp;: J'ai &lt;strong&gt;deux manques dans la norme, mais qui sont totalement justifiés. Et des effets de bords qui pourraient surprendre des intégrateurs non prévenus.&lt;/strong&gt;
&lt;/p&gt;


&lt;h3  id=&quot;transparent&quot;&gt;transparent&lt;/h3&gt;
&lt;p&gt;
Cette couleur existe principalement en valeur de la propriété &lt;code&gt;background : &lt;em&gt;transparent&lt;/em&gt;&lt;/code&gt;. On a trouve aussi &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/border-color&quot;&gt;pour &lt;code&gt;border-color&lt;/code&gt;&lt;/a&gt; ou encore dans l'attribut &lt;code&gt;fill=&quot;&lt;em&gt;transparent&lt;/em&gt;&quot;&lt;/code&gt; d'une &lt;a href=&quot;https://dascritch.net/tag/svg&quot;&gt;balise SVG&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
En fait, transparent n'est pas un alias vers une couleur pleine, mais d'une couleur quelconque rendue avec une opacité de 0%.
&lt;/p&gt;

&lt;p&gt;
Sauf qu'il y a une méprise : il n'est pas possible de s'en servir pour la propriété css &lt;code&gt;color&lt;/code&gt; dans l'idée d'avoir le rendu derrière le fond du tag courant. Une couleur transparente fera que le texte est virtuellement non affiché mais présent par ses dimensions.
&lt;/p&gt;
&lt;p&gt;
Et c'est normal, car cela voudrait dire que le navigateur devrait être capable d'utiliser la forme des lettres pour découper le fond de l'élément support. C'est pas impossible, mais totalement tordu en terme de pensée, alors que &lt;a href=&quot;https://stackoverflow.com/questions/39657703/how-to-create-transparent-text-on-non-transparent-background#answer-39658289&quot;&gt;vous pouvez preeeesque facilement le faire en SVG.&lt;/a&gt; Bon, dans les faits, je ne vous le conseille absolument pas&amp;nbsp;! Et ceci pour des raisons de performances de rendu, votre site va commencer à ramer sévère si vous vous lâchez.
&lt;/p&gt;

&lt;h3 id=&quot;currentColor&quot;&gt;currentColor&lt;/h3&gt;
&lt;p&gt;
Cette magnifique couleur définie en CSS3 n'existe qu'en couleur de pinceau&amp;nbsp;: &lt;code&gt;&lt;em&gt;currentColor&lt;/em&gt;&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;&lt;em&gt;currentColor&lt;/em&gt;&lt;/code&gt; est immensément pratique, car elle fait référence à la couleur de pinceau héritée. Et si cette couleur héritée renvoie par exemple à une variable css au nom à coucher dehors (hello &lt;code&gt;var(&lt;var&gt;--cpu-playing-color&lt;/var&gt;)&lt;/code&gt;) , sur de nombreux rappels, on gagne de très nombreux octets... Exemple&amp;nbsp;:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;strong&gt;main&lt;/strong&gt; {
    color : var(&lt;var&gt;--cpu-color&lt;/var&gt;);
}
&lt;strong&gt;main&lt;/strong&gt;.act-playing {
    color : var(&lt;var&gt;--cpu-playing-color&lt;/var&gt;);
}
&lt;strong&gt;a&lt;/strong&gt;, &lt;strong&gt;button&lt;/strong&gt; (je vous la fait courte) {
     color : &lt;em&gt;currentColor&lt;/em&gt;;
}
&lt;strong&gt;svg&lt;/strong&gt; {
     fill : &lt;em&gt;currentColor&lt;/em&gt;;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
Bien plus pratique que &lt;code&gt;color : &lt;em&gt;inherit&lt;/em&gt;&lt;/code&gt;, car pouvant s'appliquer sur d'autres propriétés.&lt;br /&gt;
À chaque coup, je gagne.
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;em&gt;currentColor&lt;/em&gt;&lt;/code&gt; est une Valeur Magique en css. &lt;q&gt;Magique&lt;/q&gt; dans le sens Noble du terme, au sens que justement, ce n'est pas une constante arbitraire (par rapport au sens commun en informatique, et qui tient de l'insulte) mais qu'elle fait référence à son contexte et elle permet de gagner un temps fou.
&lt;/p&gt;
&lt;p&gt;
Sauf que, hélas, et &lt;a href=&quot;https://stackoverflow.com/questions/39561566/could-currentbackgroundcolor-become-a-valid-useful-css-color-value-keyword&quot;&gt;je ne suis pas seul à m'en plaindre&lt;/a&gt;, on n'a pas de &lt;code&gt;currentBackground&lt;/code&gt;…
&lt;/p&gt;

&lt;p&gt;
Et c'est tout à fait normal&amp;nbsp;: &lt;code&gt;background&lt;/code&gt; a été discuté jusqu'ici dans ce billet en tant qu'écriture raccourcie de la propriété &lt;code&gt;background-color&lt;/code&gt;. &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/background#Syntaxe_formelle&quot;&gt;La propriété &lt;code&gt;background&lt;/code&gt; est en fait composite, très complexe&lt;/a&gt;&amp;nbsp;: On peut créer des arc-en-ciels, étirer une image, mettre des motifs svg embarqués. Retenez que &lt;code&gt;background-color&lt;/code&gt; est la dernière composante définissant le fond d'un élément à être interprétée, lequel fond est &lt;a href=&quot;https://drafts.csswg.org/css-backgrounds-3/#backgrounds&quot;&gt;défini par le standard comme ayant de multiples couches de rendus.&lt;/a&gt;
&lt;/p&gt;

&lt;h3 id=&quot;le_probleme&quot;&gt;Alors quel est le problème ?&lt;/h3&gt;

&lt;p&gt;
Et ben tout simplement, je ne peux pas inverser la couleur et le fond hérités.
&lt;/p&gt;
&lt;p&gt;
Ainsi 
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;strong&gt;button&lt;/strong&gt;:hover {
    background : &lt;em&gt;currentColor&lt;/em&gt;;
    color : &lt;del&gt;currentBackground&lt;/del&gt;;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
ça marche pas, puisque la propriété n'existe pas.
&lt;/p&gt;
&lt;p&gt;
Et 
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;strong&gt;button&lt;/strong&gt;:hover {
    color : var(&lt;var&gt;--cpu-background&lt;/var&gt;);
    background : var(&lt;var&gt;--cpu-color&lt;/var&gt;);
}
.act-playing &lt;strong&gt;button&lt;/strong&gt;:hover {
    color : var(&lt;var&gt;--cpu-playing-background&lt;/var&gt;);
    background : var(&lt;var&gt;--cpu-playing-color&lt;/var&gt;);
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
Si vous aviez voulu mettre une des variables de couleur de fond à &lt;code&gt;&lt;em&gt;transparent&lt;/em&gt;&lt;/code&gt;... ça marchera pas non plus, vous vous retrouverez avec des boutons  avec du texte totalement transparent qui ne se distinguera pas du fond. &lt;small&gt;blanc, noir, rose, bleu schtroumpf, qu'importe la valeur que vous avez choisi&lt;/small&gt; ça sera &lt;span style=&quot;background:black;color:transparent&quot;&gt;illisible&lt;/span&gt;&amp;nbsp;!
&lt;/p&gt;

&lt;p&gt;
Et si la couleur de texte est transparente et que la couleur de fond est fixée sur la couleur courante pour le même bloc, vous aurez une &lt;span style=&quot;outline : 1px solid gray;background:currentColor;color:transparent&quot;&gt;superbe disparition&lt;/span&gt;&amp;nbsp;!&lt;br /&gt;
&lt;small&gt;(pourtour ajouté pour voir le bloc)&lt;/small&gt;
&lt;/p&gt;

&lt;h3 id=&quot;essayez&quot;&gt;Essayez vous-même ! &lt;/h3&gt;

&lt;cpu-audio id=&quot;bac_a_sable&quot; title=&quot;@HalluFMR #15 : Péritel (25/03/2015)&quot; poster=&quot;https://dascritch.net/vrac/.blog2/radio/.1409-Hallucinarium-FMR_s.jpg&quot; canonical=&quot;https://dascritch.net/post/2014/12/17/micro-%40HalluFMR-15-%3A-P%C3%A9ritel&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 et donc vous ne pouvez expérimenter avec l'édition interactive.&lt;/a&gt;&lt;/strong&gt;
&lt;audio controls id=&quot;exemple&quot;&gt;
      &lt;source src=&quot;https://dascritch.net/vrac/Emissions/AtHalluFMR/15-AtHalluFMR%2817-12-14%29.ogg&quot; type=&quot;audio/ogg&quot; /&gt;
      &lt;source src=&quot;https://dascritch.net/vrac/Emissions/AtHalluFMR/podcast/15-AtHalluFMR%2817-12-14%29.mp3&quot; type=&quot;audio/mpeg&quot; /&gt;
&lt;/audio&gt;
&lt;/cpu-audio&gt;

&lt;p&gt;
Le bloc de code CSS ci-dessous est éditable, et il impacte directement le lecteur au-dessus. &lt;a href=&quot;https://dascritch.github.io/cpu-audio/INSTALL#personnalization-via-css-variables&quot;&gt;Sur le détail des variables CSS du lecteur, je vous renvoie à la doc.&lt;/a&gt;
&lt;/p&gt;

&lt;pre&gt;&lt;style scoped style=&quot;display:block&quot; contentEditable&gt;
#bac_a_sable {
--cpu-color : currentColor;
--cpu-background : transparent;
/* les lignes suivantes pour reprendre les définitions du dessus quand le composant est en lecture */
--cpu-playing-background : var(--cpu-background);
--cpu-playing-color : var(--cpu-color);
}
&lt;/style&gt;&lt;/pre&gt;

&lt;p&gt;
Évidemment, y'en a qui vont me dire &lt;q&gt;ça marche pas sur mon appli de news&lt;/q&gt;, donc voici une capture d'écran de ce que vous devriez voir&amp;nbsp;:
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-transparence-rendus.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Le rendu du &lt;em lang=&quot;en&quot;&gt;player&lt;/em&gt; en attente à gauche, lors d'un survol souris ou d'un clic sur le bouton de lecture à droite,&lt;br /&gt;lequel devient malencontreusement invisible.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&quot;reve_background_opacity&quot;&gt;Où tu rêves d'une licorne rose invisible&lt;/h3&gt;

&lt;p&gt;
Alors il y aurait une bonne astuce : au lieu d'utiliser &lt;code&gt;&lt;em&gt;transparent&lt;/em&gt;&lt;/code&gt;, spécifier une couleur de fond avec une transparence totale genre &lt;code&gt;&lt;em&gt;#ff777700&lt;/em&gt;&lt;/code&gt; (le fameux &lt;a href=&quot;https://fr.wikipedia.org/wiki/Licorne_rose_invisible&quot;&gt;rose invisible de la légendaire licorne&lt;/a&gt;, qui est même &lt;a href=&quot;https://www.youtube.com/watch?v=UZDYPvbY6d8&amp;amp;t=1147&amp;amp;list=PLsbx1DYyydS-ie6wXA3Qu5zHLPWhilejW&amp;amp;index=6&quot;&gt;enseignée en Zététique&lt;/a&gt;), et pouvoir mettre la transparence à opacité totale quand je tente d'utiliser cette &lt;q&gt;couleur&lt;/q&gt; en guise de couleur de police/remplissage.
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-licorneroseinvisible.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;La fameuse licorne dans une représentation improbable de sa couleur impossible.&lt;br /&gt;
&lt;small&gt;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Invisible_Pink_Unicorn.svg&quot;&gt;CC-BY Bingo Pajama Bee via Wikipedia&lt;/a&gt;, loués soient-ils&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Mais là, il me manque (au choix)&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;soit une propriété css &lt;code&gt;background-opacity&lt;/code&gt; (et son pendant &lt;code&gt;color-opacity&lt;/code&gt;),&lt;/li&gt;
&lt;li&gt;soit un transformateur standard de valeur css &lt;em lang=&quot;xx-advertising-quezac&quot;&gt;que s'appelerio&lt;/em&gt; &lt;code&gt;plain-color()&lt;/code&gt; qui me rabote une couleur avec opacité en couleur sans opacité,&lt;/li&gt;
&lt;li&gt;soit des billes car ça existe peut-être déjà (j'ai pas dit que je connaissais à fond les CSS).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;tentative_rgba_vars&quot;&gt;Tentative 1 : CSS pure, &lt;code&gt;rgba()&lt;/code&gt; et deux variables&lt;/h3&gt;
&lt;p&gt;
J'ai bien trouvé &lt;strong&gt;une &lt;a href=&quot;https://stackoverflow.com/questions/40010597/how-do-i-apply-opacity-to-a-css-color-variable/41265350#41265350&quot;&gt;solution amusante avec la fonction css &lt;code&gt;rgba()&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; sous la forme&lt;br /&gt;
&lt;code&gt;background : rgba(var(&lt;var&gt;--background-color&lt;/var&gt;), var(&lt;var&gt;--background-opacity&lt;/var&gt;))&lt;/code&gt;&lt;br /&gt;
mais comme cette astuce joue sur le fait que &lt;code&gt;var()&lt;/code&gt; ne fait que restituer une chaine de caractère sans l'avoir interprété, elle induit&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;que toutes les couleurs (encre et fond) paramétrées par l'intégrateur soient totalement opaques,&lt;/li&gt;
&lt;li&gt;que je doive introduire une propriété de plus à part pour la gestion d'opacité du fond,&lt;/li&gt;
&lt;li&gt;que la syntaxe de couleur suive strictement la syntaxe &lt;code&gt;&lt;em&gt;rrr&lt;/em&gt;,&amp;nbsp;&lt;em&gt;ggg&lt;/em&gt;,&amp;nbsp;&lt;em&gt;bbb&lt;/em&gt;&lt;/code&gt;, ce qui multiplie les risques d'erreurs,&lt;/li&gt;
&lt;li&gt;que l'intégrateur/utilisateur ne peut donc pas utiliser la syntaxe &lt;code&gt;hsl()&lt;/code&gt;/&lt;code&gt;hsla()&lt;/code&gt; que nombre de graphistes et intégrateurs trouvent extrêmement pratique,&lt;/li&gt;
&lt;li&gt;ni &lt;a href=&quot;https://dascritch.net/post/2014/08/26/Le-web-est-construit-par-des-humains&quot;&gt;les couleurs nommées prédéfinies comme &lt;code&gt;&lt;em&gt;rebecca purple&lt;/em&gt;&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://dascritch.net/post/2014/09/03/micro-%40HalluFMR-1-%3A-Rebecca-purple&quot;&gt;version audio du billet&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;et seraient aussi bloqués ceux qui auraient voulu mettre un motif plutôt qu'une couleur unie.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Pour toutes ces raisons, ce hack me semble &lt;a href=&quot;https://dascritch.net/post/2013/03/26/Dirty-Hacky-%3A-je-parse-en-HTML-.357-SW&quot;&gt;limite pour l'Inspecteur Hacky&lt;/a&gt;, donc pour l'instant ⇒ c'est non.
&lt;/p&gt;
&lt;h3 id=&quot;tentative_polyfill_javascript&quot;&gt;Tentative 2 : Polyfill javascript pour déduire une couleur totalement opaque&lt;/h3&gt;
&lt;p&gt;
Certains m'ont suggéré &lt;strong&gt;d'utiliser/créer un &lt;em&gt;polyfill&lt;/em&gt; en javascript pour extraite la couleur opaque&lt;/strong&gt; en &lt;a href=&quot;https://dev.to/oleggromov/observing-style-changes---d4f&quot;&gt;surveillant les modifications&lt;/a&gt; sur la &lt;a href=&quot;https://davidwalsh.name/css-variables-javascript&quot;&gt;variable d'environnement&lt;/a&gt;, et en définissant une autre variable d'environnement à la volée avec le canal alpha complètement opaque. L'idée &lt;strong&gt;semblait&lt;/strong&gt; être une bonne idée, puisque les variables CSS peuvent changer suivant les contextes (position de l'élément dans le DOM, taille de la fenêtre, &lt;code&gt;:hover , :focus&lt;/code&gt;, etc...). Les innocents…
&lt;/p&gt;
&lt;p&gt;
Évidemment, &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/Type_color&quot;&gt;il faut convertir la couleur CSS qui peut être retournée en n'importe quelle notation valide&lt;/a&gt; vers un format RGBA ou HLSA (peu importe, tant qu'on peut avoir la valeur alpha à part). J'ai vérifié &lt;a href=&quot;https://zellwk.com/blog/css-values-in-js/#getting-computed-styles&quot;&gt;avec la méthode &lt;code&gt;window.getComputedStyle()&lt;/code&gt;&lt;/a&gt; en l'appliquant sur un élément de référence, seul moyen de résoudre les contextes comme &lt;code&gt;currentColor&lt;/code&gt;. Outre que créer un élément de référence uniquement dans ce but est une méthode qui pue un peu, la fonction que j'appelle &lt;a href=&quot;https://drafts.csswg.org/cssom/#resolved-values&quot;&gt;retourne à peu près le format qu'elle veut&lt;/a&gt;, selon l'envie du navigateur, l'historique de la propriété et le système derrière. Ainsi, on peut tout à fait imaginer qu'un écran passif travaille en HLS, ou qu'une évolution prochaine du standard passe d'un rendu de 8 à 16&amp;nbsp;bits par canal couleur. De petites fonctions pèteront le &lt;em lang=&quot;en&quot;&gt;webcomponent&lt;/em&gt; à la gueule des utilisateurs sans que vous ne voyiez rien venir.
&lt;/p&gt;
&lt;p&gt;
Donc il nous faut une &lt;a href=&quot;https://dascritch.net/tag/regex&quot;&gt;regex&lt;/a&gt; convertisseur magique qui n'existe pas en standard en pariant très fort que les navigateurs ne retournent que du &lt;code&gt;rgb()&lt;/code&gt; ou du &lt;code&gt;rgba()&lt;/code&gt;.&lt;br /&gt;
Là aussi, &lt;strong&gt;j'ai tenté, j'ai abandonné&amp;nbsp;: beaucoup trop de taf pour un résultat incertain et un usage marginal.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Si néanmoins vous vous le sentez, tentez de le faire&amp;nbsp;: j'aurais toute une liste de cas d'usages à vous faire tester, vous allez en suer et vous finirez par écrire un billet technique sur le côté complexe et vain de cet exercice. Une bien maigre compensation, mais qui vous permettra de proposer une conf à un devfest.
&lt;/p&gt;

&lt;p&gt;
J'ai même réfléchi à faire un &lt;code&gt;filter : invert(&lt;em&gt;100%&lt;/em&gt;);&lt;/code&gt; plutôt qu'inverser les variables de couleurs, mais le rendu n'était pas plaisant dans nombre de cas.
&lt;/p&gt;

&lt;h3 id=&quot;voir_en_peinture&quot;&gt;Et là, tu peux plus voir cette exception en peinture&lt;/h3&gt;
&lt;p&gt;
Mais tu sais que c'est normal et tu dois l'accepter. Je dois être un genre de fou à la Van Gogh. LIBÉREZ LA PALETTE CHROMATIQUE&amp;nbsp;!
&lt;/p&gt;


&lt;p&gt;
Alors évidemment, il y aura toujours des personnes qui vous diront «&amp;nbsp;&lt;em&gt;Ahlalalala&amp;nbsp;! Mais il suffisait simplement de passer par un pré-processeur CSS pour obtenir cet effet&lt;/em&gt;&amp;nbsp;». &lt;strong&gt;Sauf que&lt;/strong&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ces personnes n'ont pas lu l'ensemble de cet article&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Ni le chapitre d'un article précédant expliquant &lt;strong&gt;&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web#mes_regles&quot;&gt;les contraintes d'écriture d'un web-component réutilisable&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Que je veux que ma bibliothèque javascript soit utilisable directement en insérant le script et en ajoutant la balise &lt;code&gt;&amp;lt;&lt;strong&gt;cpu-audio&lt;/strong&gt;&amp;gt;&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;Qu'elle soit configurable même par des gens qui n'ont qu'un minimum de bagage HTML &lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/live_config.html&quot;&gt;avec une bête page statique&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Qu'elle utilise en priorité les standards du web et en évitant les rustines,&lt;/li&gt;
&lt;li&gt;Et sans avoir à installer une suite d'intégration complexe, genre NPM.js je-te-télécharge-internet-pour-changer-une-couleur.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Donc nous sommes dans un cas limite qui est actuellement bloqué, et qu'on ne tentera pas de palier dans l'immédiat car elle n'impacte qu'un cas de paramétrage d'aspect très marginal, et qui est compensable.
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1906-tagcpupm-webshare/1906-WebShare-van-gogh.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Désolé Larcenet*, on s'est parfois engueulés ensemble, mais j'ai pas pu m'empêcher de citer dans mon billet technique le dos de la couverture du deuxième tome de tes fabuleuses « &amp;nbsp;&lt;em&gt;Aventure rocambolesque&lt;/em&gt;&amp;nbsp;», celui avec Vincent Van Gogh. C'est chez Dargaud. Achetez-le&amp;nbsp;!
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Eh mais, du coup, je peux clore &lt;a href=&quot;https://github.com/dascritch/cpu-audio/issues/29&quot;&gt;ce ticket #29 : &lt;em lang=&quot;en&quot;&gt;Some css vars settings won't be useful&lt;/em&gt;&lt;/a&gt;, non&amp;nbsp;?
&lt;/p&gt;

&lt;p&gt;
Non&amp;nbsp;:
&lt;/p&gt;

&lt;h3 id=&quot;couleur_tombee_du_ciel&quot;&gt;La couleur tombée du Ciel&lt;/h3&gt;

&lt;p&gt;
J'ai écrit cet article en Avril 2019.&lt;br /&gt;
Entretemps, &lt;a href=&quot;https://github.com/w3c/css-houdini-drafts/wiki&quot;&gt;un nouveau groupe d'API natifs commence à arriver dans les navigateurs&amp;nbsp;: &lt;strong&gt;CSS Houdini&lt;/strong&gt;.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Et ce groupe &lt;a href=&quot;https://codepen.io/collection/XwgeMo/&quot;&gt;est tellement stupéfiant&lt;/a&gt; qu'on dirait &lt;a href=&quot;https://furyosa.com/un-trailer-pour-color-out-of-space-de-richard-stanley/&quot;&gt;une nouvelle de Lovecraft adaptée part Richard Stanley&lt;/a&gt; (&lt;em lang=&quot;en&quot;&gt;Personal message&amp;nbsp;: If you read me, I salute you, by the way. You're welcome for a craft beer.&lt;/em&gt;).
&lt;/p&gt;
&lt;p&gt;
L'idée est d'étendre les variables CSS pour leur faire porter une partie d'attributs, via l'API accessible en javscript&amp;nbsp;: &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/CSS/RegisterProperty&quot;&gt;&lt;code&gt;CSS.registerProperty&lt;/code&gt;&lt;/a&gt;.&lt;br /&gt;
Ce qui permet d'étendre &lt;a href=&quot;https://css-houdini.rocks/background-properties&quot;&gt;les possibilités des propriété css &lt;code&gt;background&lt;/code&gt;&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
L'idée est géniale, audacieuse, mais je ne la mettrais pas dans ma bibliothèque, car elle relève plus de la coquetterie de chaque site que de réellement la responsabilité de mon web-component. De plu, il est probable que les performances de rendu navigateur impactent l'expérience utilisateur si vous êtes trop gourmands.&lt;br /&gt;
Néanmoins, l'usage des variables CSS dans mon code en laisse la possibilité à tout intégrateur aventureux.
&lt;/p&gt;

&lt;p&gt;
La prochaine fois, on va s'amuser avec des objets DOM incongrus, des méthodes javascripts et des fichiers de sous-titrage. Et croyez-moi, c'est à la fois instructif et éclairant quand une norme a des limites pour rester dans son intention.
&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>Reconstruire son lecteur audio pour le web</title>
		<link>https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web</link>
		<guid isPermaLink="false">urn:md5:a0aeafa85c9f0afc4b2a06141c8a636d</guid>
		<dc:date>2018-11-06T12:25:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Ou comment j'ai bricolé longtemps les pages web pour mettre du son, les différents players que j'ai essayé, que j'ai écrit et la livraison du petit dernier.		&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;Ou comment j'ai bricolé longtemps les pages web pour mettre du son, les différents players que j'ai essayé, que j'ai écrit et la livraison du petit dernier.&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;ses versions 5 et 6.&lt;/a&gt;. Dans cette série&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;strong&gt;Reconstruire son lecteur audio pour le web&lt;/strong&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;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;
&lt;strong&gt;TL;DR Trop Long; Vous ne lirez pas ?&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La démo du player :&lt;br /&gt;
&lt;cpu-audio title=&quot;Au carnaval avec Samba Résille (2003)&quot; poster=&quot;https://dascritch.net/vrac/.blog2/entendu/.1404-SambaResille_m.jpg&quot; canonical=&quot;https://dascritch.net/post/2014/04/08/Au-Carnaval-avec-Samba-R%C3%A9sille&quot; twitter=&quot;@dascritch&quot;&gt;
&lt;p&gt;
&lt;strong&gt;Si vous voyez ce texte&lt;/strong&gt;, c'est que le lecteur ne s'est pas lancé, très probablement parce que vous ne lisez pas &lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web&quot;&gt;mon billet depuis mon blog&lt;/a&gt;
&lt;/p&gt;
    &lt;audio controls=&quot;&quot; id=&quot;samba_resille&quot;&gt;
        &lt;source src=&quot;https://dascritch.net/vrac/sonores/podcast/1404-SambaResille2003.mp3&quot; type=&quot;audio/mpeg&quot; /&gt;
    &lt;/audio&gt;
&lt;/cpu-audio&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web#samba_resille&amp;t=33m16s&quot;&gt;Sauter au milieu de ce sonore d'un simple lien, même en dehors de la page&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#interface&quot;&gt;Une autre démo avec les chapitres&lt;/a&gt;&lt;/li&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dascritch/cpu-audio&quot;&gt;Le repository github du player&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.github.io/cpu-audio/&quot;&gt;Le site de démonstration du player&lt;/a&gt;, n'hésitez pas à tester &lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/live_config.html&quot;&gt;le configurateur&lt;/a&gt; et &lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/chapters_editor.html&quot;&gt;l'édition de chapitres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;et tout ça pour &lt;a href=&quot;http://cpu.pm&quot;&gt;une émission radio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3 id=&quot;et-si-on-etendait-ce-tag&quot;&gt;Et si on étendait ce tag ?&lt;/h3&gt;

&lt;p&gt;
&lt;a class=&quot;r&quot; href=&quot;https://www.youtube.com/watch?v=ljpqG19NAa0&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/.1810-tagcpupm-gomfler_s.jpg&quot; alt=&quot;capture d'écran d'un tutoriel sur comment gonfler une bouée de plage&quot; /&gt;
&lt;/a&gt;
Mais revenons au moment où on a déclaré deux sources de sons, ce qui permettait le support par la totalité des navigateurs web  supportant l'&lt;code&gt;&amp;lt;&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;&lt;/code&gt;.&lt;br /&gt;
Ladite balise ne venait pas seule&amp;nbsp;: Elle était accompagnée d'&lt;a href=&quot;https://html.spec.whatwg.org/multipage/media.html#media-elements&quot;&gt;une API très riche&lt;/a&gt;, permettant de suivre l'état de chargement du fichier, de changer le volume sonore, de connaitre la position actuelle de lecture et même de changer la vitesse de restitution&amp;nbsp;! En fait, rien ne vous interdit de ne pas afficher l'interface native et de construire la votre derrière.
&lt;/p&gt;
&lt;p&gt;
L'occasion était trop belle&amp;nbsp;: &lt;a href=&quot;http://cpu.pm&quot;&gt;je changeais d'émission radio en lançant CPU&lt;/a&gt; et je lançais plusieurs projets liés en parallèle. L'idée étant que les contenus produits pour l'émission radio servent comme cas d'usage pour les projets afférents. L'occasion d'explorer ce que l'on pouvait explorer en production et en &lt;del&gt;consommation&lt;/del&gt; écoute d'émissions radio sur internet et de jouer avec les spécificités d'une émission radio par rapport à un &lt;em lang=&quot;en&quot;&gt;pure player&lt;/em&gt; audio du web.
&lt;/p&gt;
&lt;p&gt;
Un de mes projets était de reconstruire un &lt;em lang=&quot;en&quot;&gt;player&lt;/em&gt; audio au look un poil passe-partout, partageable/réutilisable avec d'autres sites, pour proposer des idées comme une &lt;em lang=&quot;en&quot;&gt;playlist&lt;/em&gt; partageable. 
&lt;/p&gt;

&lt;h3 id=&quot;pointer_dans_le_temps&quot; class=&quot;cl&quot;&gt;Pointer dans le temps&lt;/h3&gt;

&lt;p&gt;
En fait, l'écriture de ce player était une évolution d'une autre bibliothèque de mon crû&amp;nbsp;: &lt;a href=&quot;http://dascritch.net/post/2014/09/03/Timecodehash-%3A-Lier-vers-un-moment-d-un-sonore&quot;&gt;j'interceptais déjà les liens d'une page pour lier vers un moment dans le sonore d'une page&lt;/a&gt;, ce qui est bigrement utile…
&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;
Un menu contextuel de Firefox, généré par ma bibliothèque timecodejs, permettant de récupérer une URL pointant sur le moment du sonore pointé par le menu contextuel.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
…et &lt;strong&gt;prévu par &lt;a href=&quot;http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/&quot;&gt;un standard du W3C depuis 2009, les &lt;em lang=&quot;en&quot;&gt;media fragments&lt;/em&gt;&lt;/a&gt;&amp;nbsp;!&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
L'idée est simple : transposer dans le hash d'une url le principe de segmentation des paramètres &lt;em lang=&quot;en&quot;&gt;query&lt;/em&gt; par un &lt;code&gt;&amp;amp;&lt;/code&gt;, et utiliser les paires &lt;code&gt;clé=&lt;em&gt;valeurs&lt;/em&gt;&lt;/code&gt;, les valeurs étant séparées par des virgules &lt;code&gt;clé=&lt;em&gt;valeur&lt;/em&gt;,&lt;em&gt;valeur&lt;/em&gt;&lt;/code&gt;. Le hash n'est interprété que par le logiciel client (le navigateur web), charge à lui d'optimiser finement la requête avec le serveur, en utilisant les requêtes partielles &lt;code&gt;Content-Range&lt;/code&gt;&lt;/a&gt;, répondues par des &lt;a href=&quot;https://tools.ietf.org/html/rfc7233#section-4.1&quot;&gt;&lt;code&gt;HTTP 206 Partial Content&lt;/code&gt;&lt;/a&gt;.&lt;br /&gt;
Et, beauté de la dégradation élégante, si le hash n'est pas compris… il est simplement ignoré.
&lt;/p&gt;
&lt;p&gt;
Il existe de multitudes de fragment de média possibles. Ainsi, si je veux afficher un bout de carré d'une grande image à partir des coordonnées (80,160) sur un carré de 80×80, je ferais un &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt; src=&quot;https://dascritch.net/post/2018/11/06/image.jpg#xywh=&lt;em&gt;80&lt;/em&gt;,&lt;em&gt;160&lt;/em&gt;,&lt;em&gt;80&lt;/em&gt;,&lt;em&gt;80&lt;/em&gt;&quot; alt=&quot;&quot; /&amp;gt;&lt;/code&gt;. &lt;br /&gt;
Vous trouvez qu'il y a comme &lt;a href=&quot;https://dascritch.net/post/2013/04/23/Dirty-Hacky-III-%3A-Du-sprite-explos%C3%A9-en-petits-gla%C3%A7ons&quot;&gt;une similarité avec les sprites&amp;nbsp;? L'idée partait justement de là&lt;/a&gt;.&lt;br /&gt;
On retrouve des stratégies équivalentes pour &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/@font-face/unicode-range&quot;&gt;les polices de caractère&lt;/a&gt; mais qui n'étaient pas décrites dans ce standard-là.
&lt;/p&gt;
&lt;p&gt;
Soyons honnêtes&amp;nbsp;: À ce jour, en natif, &lt;a href=&quot;https://caniuse.com/#search=media%20fragment&quot;&gt;seules les vidéos sont considérées&lt;/a&gt;.&lt;br /&gt;
Et le standard n'a jamais été implémenté pour les sonores dans les pages, considérant que &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/HTTP/Status/206&quot;&gt;le chargement fragmenté via les requêtes &lt;code&gt;Content-Range&lt;/code&gt;&lt;/a&gt; pouvait y palier. (Tu parles&amp;nbsp;! ça marche efficacement que pour les sonores encodés en CBR, sinon on tourne à la pifométrie, mais j'en causerais dans un autre billet).
&lt;/p&gt;
&lt;p&gt;
Car oui, trop longtemps &lt;strong&gt;on a oublié que le web a été conçu pour lier entre eux des documents d'une manière pérenne&lt;/strong&gt;, que le web sémantique va de pair avec &lt;a href=&quot;https://dascritch.net/post/2007/09/17/RIP-URL-URI-IRI-INRI-W3C&quot;&gt;l'espace d'adressage où est le document et qui existe à l'intérieur du document&lt;/a&gt;, et qu'on a la technologie pour lier à des chapitres (si on pense à &lt;a href=&quot;https://dascritch.net/post/2014/06/24/Sniffeur-d-ancre&quot;&gt;utiliser le nommage &lt;code&gt;id=&quot;&quot;&lt;/code&gt;, j'ai écrit un outil pour vous aider&lt;/a&gt;)…
&lt;/p&gt;

&lt;figure&gt;
&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:WorldWideWebAroundWikipedia.png&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-hyperlinks.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;
Importance du web documentaire : &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:WorldWideWebAroundWikipedia.png&quot;&gt;les hyperliens autour de la page de garde de Wikipédia&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
…mais si ces technologies sont très bien implémentées pour du texte, voire des vues pour certaines &lt;abbr&gt;PWA&lt;/abbr&gt;, il n'y avait à l'époque malheureusement aucune &lt;a href=&quot;http://www.annodex.net/~silvia/itext/mediafrag_multiple_servers.html&quot;&gt;implémentation propre&lt;/a&gt; et standardisée dans les navigateurs pour lier un sonore ou une vidéo embarqué dans une page à un moment très précis via une URL. Ce qui pose de sacrés soucis, par exemple quand on veut pointer une phrase dans une émission de 4 heures. &lt;small&gt;Oui, je fais parfois &lt;a href=&quot;https://cpu.dascritch.net/post/2017/12/14/Ex0069-How-deep-learning-is-your-love&quot;&gt;des émissions avec 4 heures de parlotte, et elles sont très très bien.&lt;/a&gt;&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Il existe néanmoins des implémentations de la notation &lt;code&gt;t=&lt;em&gt;&amp;lt;secondes&amp;gt;&lt;/em&gt;&lt;/code&gt; sur des médias au sein d'une page sur des sites à très fort traffic&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vimeo et Soundcloud l'utilisent dans la partie hashtag, comme je le fais (…&lt;code&gt;#t=&lt;em&gt;10&lt;/em&gt;&lt;/code&gt;)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;Youtube et Peertube en sont très proches mais l'information temporelle est placée dans les paramètres de l'URL (…&lt;code&gt;?t=&lt;em&gt;10&lt;/em&gt;&lt;/code&gt;), charge aux serveurs de vous envoyer une page directement au bon repère, et qui impose d'&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history/onVisited&quot;&gt;intercepter les modifications d'URL&lt;/a&gt; plutôt &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Events/hashchange&quot;&gt;que seulement ceux du hash&lt;/a&gt; (exemple dans les chapitres de &lt;a href=&quot;https://www.youtube.com/watch?v=gbpNBWLxQgY&quot;&gt;cette vidéo de &lt;em&gt;Ça Fait Écho&lt;/em&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
À noter que plusieurs notations sont autorisées pour le timecode en valeur de &lt;code&gt;t=&lt;/code&gt;&amp;nbsp;: notamment le nombre de secondes, ou la notation SMPTE &lt;code&gt;HH:MM:SS.FFF&lt;/code&gt; très utilisée dans le monde professionnel (avec des &lt;em lang=&quot;en&quot;&gt;frames&lt;/em&gt; d'une durée d'un millième de secondes).
&lt;/p&gt;
&lt;p&gt;
Bonus que j'ai ajouté dans ma petite bibliothèque&amp;nbsp;: quand on quitte une page avec un tel sonore par inadvertance (lien, formulaire, chat qui saute sur &lt;kbd&gt;Alt&lt;/kbd&gt; et &lt;kbd&gt;F4&lt;/kbd&gt;), ben si je fais &lt;kbd&gt;←back&lt;/kbd&gt;, ou si la page s'ouvre avec exactement le même sonore, j'aimerais bien qu'il reprenne exactement là où je suis. Ça serait la moindre des choses, non&amp;nbsp;?
&lt;/p&gt;

&lt;p&gt;
Voilà qui m'a écrit…
&lt;/p&gt;
&lt;h3 id=&quot;mes_regles&quot;&gt;Mes règles de base :&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;être toujours au plus près des standards, pour ne plus &lt;a href=&quot;https://dascritch.net/post/2007/06/27/810-regrets-eternels-html-2-0&quot;&gt;revivre l'enfer d'avant leur respect&lt;/a&gt;, et avoir un code qui restera fonctionnel dans le temps&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;minimalisme de code, pas de bibliothèques/frameworks externes (JS ou CSS), si on s'appuie sur un &lt;em lang=&quot;en&quot;&gt;framework&lt;/em&gt;, vous ne pourrez jamais virer cette béquille et elle vous posera des problèmes à l'avenir&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;si besoin de code externe, appliquer les &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt; les plus proches de ces mêmes standards&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;pouvoir le développer avec le moins d'outils tiers (genre Bower, Less, etc...). Tout au plus des &lt;em lang=&quot;en&quot;&gt;linters&lt;/em&gt; et des compresseurs JS et CSS&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2013/03/19/La-dégradation-élégante-peut-sauver-votre-site&quot;&gt;par dégradation élégante, pouvoir fonctionner sur des vieux tromblons de plus de 2&amp;nbsp;ans au minimum&lt;/a&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;que le lecteur natif du navigateur web puisse fonctionner et s'afficher même si votre javascript est complètement planté, car si votre site de contenus ne présente aucun contenu sans javascript, c'est qu'il est sémantiquement mauvais&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;un design liquide, pour s'adapter à tous les styles et largeurs&lt;/a&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;assurer un minimum d'accessibilité&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twobithistory.org/2018/05/27/semantic-web.html&quot;&gt;rappeler l'importance d'un bon web sémantique&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;le_papa_player&quot;&gt;Le papa player&lt;/h3&gt;

&lt;p&gt;
Alors tout ça, &lt;a href=&quot;https://github.com/dascritch/ondemiroir-audio-tag&quot;&gt;je l'ai braficotté dans mon coin dans une petite bibliothèque javascript&lt;/a&gt;. Elle faisait ça&amp;nbsp;: 
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-ondemiroir-large.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-ondemiroir-moyen.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Le player “ondemiroir” dans deux résolutions
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;code javascript avec &lt;a href=&quot;http://vanilla-js.com/&quot;&gt;l'excellent framework vanilla js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;en &lt;a href=&quot;http://www.liquidapsive.com/&quot;&gt;liquid reponsive web-design&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;avec &lt;abbr&gt;i18n&lt;/abbr&gt; (&lt;q lang=&quot;en&quot;&gt;internationalization&lt;/q&gt;, baille ze ouéy &lt;a href=&quot;https://www.youtube.com/watch?v=aRJ8Gkis40Y&quot;&gt;&lt;em lang=&quot;en&quot;&gt;excuse my french&lt;/em&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;affichage de pochette&lt;/li&gt;
&lt;li&gt;ajout de lien vers la page canonique du sonore&lt;/li&gt;
&lt;li&gt;navigation au clavier dans le sonore&lt;/li&gt;
&lt;li&gt;reprise à la volée si on a quitté le sonore (donc la page) inopinément au même endroit (très utile quand on lit la dernière émission dans la home du site &lt;a href=&quot;http://cpu.pm&quot;&gt;CPU.pm&lt;/a&gt;, puis qu'on clique sur la page de l'émission)&lt;/li&gt;
&lt;li&gt;partage sur des réseaux sociaux avec le moment en cours&lt;/li&gt;
&lt;li&gt;avoir un contrôleur cloné pour l'entête fixé (qui apparait quand le lecteur principal n'est pas visible)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;À l'usage, notre &lt;em lang=&quot;en&quot;&gt;player&lt;/em&gt; est réellement devenu un outil très utile pour dérusher les émissions, et pas que pour moi, mais aussi pour les journalistes qui ont participé à l'émission.
&lt;/p&gt;
&lt;p&gt;
Mais le code de génération est assez.. dégueu... &lt;br /&gt;
En plus, je voulais tenter un système de playlist centralisée (pour tous les podcasts de la radio), qui impliquait de charger la lib JS depuis un domaine précis. Très grosse erreur.
&lt;/p&gt;
&lt;p&gt;
je voulais rafraichir mon projet avec les Web Components. En fait, je voulais le faire avec dès 2015, quand je lançais l'émission, sauf qu'à ce moment-là, l'ensemble Web Component n'est pas encore gravé dans le marbre et les implémentations parfois masquées dans les navigateurs.
&lt;/p&gt;

&lt;h3 id=&quot;wc_fermes&quot;&gt;Les WC étaient fermés de l'intérieur&lt;/h3&gt;

&lt;blockquote&gt;
&lt;q&gt;J'ai jamais vu une discussion sur les WC qui n'est pas partie en couille&lt;/q&gt;&lt;br /&gt;
(&lt;a href=&quot;https://communautes-toulouse.slack.com/archives/C1GA5L7C4/p1539349510000100&quot;&gt;@myagoo, in slack communautés-toulouse &lt;/a&gt;)
&lt;/blockquote&gt;

&lt;p&gt;
Bon, on va pas troller, on va y aller simplement&amp;nbsp;:
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Lego_Color_Bricks.jpg&quot; class=&quot;r&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/.1810-tagcpupm-legos_t.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
L'idée des Web Components est dans l'air depuis 2012. Il a commencé par être implémenté dans Chrome avant que le standard soit correctement validé. Puis nous eûmes soit des implémentations avec leurs propres API et concepts (&lt;a href=&quot;https://reactjs.org/&quot;&gt;ReactJS&lt;/a&gt;, &lt;a href=&quot;https://vuejs.org/&quot;&gt;VueJS&lt;/a&gt;,…) , soit des &lt;em lang=&quot;en&quot;&gt;polyfills&lt;/em&gt; plus ou moins proches des standards (&lt;a href=&quot;https://www.polymer-project.org/&quot;&gt;Polymer&lt;/a&gt;,…)&lt;br /&gt;
Le choix d'un &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt; au plus proche des standards me semblait évident, et je voulais utiliser &lt;a href=&quot;http://bosonic.github.io/&quot;&gt;le génial Bosonic&lt;/a&gt; de mon camarade &lt;a href=&quot;https://twitter.com/goldoraf&quot;&gt;Raphael Rougeron&lt;/a&gt;.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
Si je radiographiais le code source d'un Web Component, je verrais ça&amp;nbsp;:
&lt;/p&gt;
&lt;code&gt;&lt;pre&gt;
&amp;lt;&lt;strong&gt;template&lt;/strong&gt;&amp;gt;
  &amp;lt;&lt;strong&gt;style&lt;/strong&gt;&amp;gt;
    …
  &amp;lt;/&lt;strong&gt;style&lt;/strong&gt;&amp;gt;
  …
&amp;lt;/&lt;strong&gt;template&lt;/strong&gt;&amp;gt;

&amp;lt;&lt;strong&gt;script&lt;/strong&gt;&amp;gt;
  &lt;strong&gt;class&lt;/strong&gt; TonElement &lt;strong&gt;extends&lt;/strong&gt; HTMLElement {
      constructor() {
      }
      …
  }
  window.customElements.define('&lt;em&gt;ton-element&lt;/em&gt;', TonElement);
&amp;lt;/&lt;strong&gt;script&lt;/strong&gt;&amp;gt;
&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;
Un motif HTML, un stylage CSS et &lt;a href=&quot;https://hacks.mozilla.org/2018/10/firefox-63-tricks-and-treats/&quot;&gt;une classe javascript pour piloter le module.&lt;/a&gt;&lt;br /&gt;
Dans l'idée de départ, le tout était enregistré dans un document &lt;code&gt;.html&lt;/code&gt; importé dans ta page via &lt;code&gt;&amp;lt;&lt;strong&gt;link&lt;/strong&gt; rel=&quot;&lt;em&gt;import&lt;/em&gt;&quot; href=&quot;https://dascritch.net/post/2018/11/06/&lt;span class=&quot;url&quot;&gt;webcomponent.html&lt;/span&gt;&quot; /&amp;gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Et dans ta page, tu l'appelles comme ça&amp;nbsp;:
&lt;/p&gt;
&lt;code&gt;&lt;pre&gt;&amp;lt;&lt;strong&gt;ton-element&lt;/strong&gt;&amp;gt;
&amp;lt;/&lt;strong&gt;ton-element&lt;/strong&gt;&amp;gt; &lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;
Le choix de nommage est assez malin car le standard impose dans le nom d'utiliser un &lt;code&gt;-&lt;/code&gt;, afin de ne pas se marcher sur les pieds ultérieurement.
&lt;/p&gt;

&lt;h3 id=&quot;les_web_components_sont_formidables&quot;&gt;Les Web Components sont &lt;q&gt;formidables&lt;/q&gt;&lt;/h3&gt;

&lt;p&gt;
&lt;a class=&quot;r&quot; href=&quot;http://blog.syti.net/index.php?article=398&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-bidule.gif&quot; alt=&quot;une publicité pour un bidule&quot; /&gt;
&lt;/a&gt;

Et en quoi ils vont nous être bigrement utiles&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ils présentent un ensemble d'API totalement standardisées par le W3C, dans 10 ans, le code tournera encore&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;ils obligent à concevoir &lt;a href=&quot;http://atomicdesign.bradfrost.com/&quot;&gt;un design atomique&lt;/a&gt;&amp;nbsp;: réfléchir non plus en terme d'aspect global d'une page comme on le fait pour un site, mais en briques élémentaires, indépendantes, donc réutilisables ailleurs&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;ils peuvent se passer des &lt;em lang=&quot;en&quot;&gt;frameworks&lt;/em&gt; de rendus pour les intégrer&amp;nbsp;; fini la panique de mettre à jour &lt;em lang=&quot;en&quot;&gt;bloated code&lt;/em&gt;, ranger ReactJS à côté de MooTools dans l'étagère du fond&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;il sont &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/Web_Components/Shadow_DOM&quot;&gt;isolés du reste de la page avec le Shadow DOM&lt;/a&gt;, une &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/API/DocumentFragment&quot;&gt;API &lt;code&gt;document&lt;/code&gt; fragment d'un DocumentRoot&lt;/a&gt; (comme une iframe) appelée &lt;code&gt;shadowRoot&lt;/code&gt;. L'isolation peut être stricte, mais laisse la possibilité de discuter par des points d'entrée&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;ils n'ont plus besoin de CSS reset pour nettoyer les règles venant de la CSS du site, ou de filtrer des événements sur des tagNames. À noter que les variables CSS3 passent, on s'en servira&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;leur insertion est simple au possible, à condition que le développeur pense à la dégradation élégante&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;mais ils peuvent inserer des éléments déclarés dans leur code d'appel HTML, ce qui permet une dégradation élégante si le Web Component n'est pas fonctionnel&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;ils disposent d'une mécanique standard pour l'inclusion et la suppression d'une instance d'un Web Component dans une page, déjà cablée sur tout manipulation d'éléments, ce qui facilite la gestion mémoire sur les Single Page Application&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;comme la version de javascript imposée accepte &lt;a href=&quot;https://javascript.info/class-inheritance&quot;&gt;les extensions de classes&lt;/a&gt;, on peut construire des héritages de web-elements.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
En fait, un Web Component, vous vous en serviez sûrement &lt;a href=&quot;https://www.alsacreations.com/tuto/lire/1407-formulaire-html5-type-date-time-local.html&quot;&gt;des prototypes via &lt;code&gt;&amp;lt;&lt;strong&gt;input&lt;/strong&gt; type=&quot;&lt;em&gt;date&lt;/em&gt;&quot;&amp;gt;&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.alsacreations.com/tuto/lire/1410-formulaire-html5-type-range.html&quot;&gt;&lt;code&gt;&amp;lt;&lt;strong&gt;input&lt;/strong&gt; type=&quot;&lt;em&gt;range&lt;/em&gt;&quot;&amp;gt;&lt;/code&gt;&lt;/a&gt;, le &lt;a href=&quot;https://www.alsacreations.com/article/lire/1335-html5-details-summary.html&quot;&gt;tandem &lt;code&gt;&amp;lt;&lt;strong&gt;summary&lt;/strong&gt;&amp;gt;&lt;/code&gt;/&lt;code&gt;&amp;lt;&lt;strong&gt;details&lt;/strong&gt;&amp;gt;&lt;/code&gt;&lt;/a&gt; ou encore &lt;code&gt;&amp;lt;&lt;strong&gt;video&lt;/strong&gt; controls&amp;gt;&lt;/code&gt; , car les implémentations &lt;q&gt;natives&lt;/q&gt; de ces composants dans les navigateurs datent à peu près de cette période.
&lt;/p&gt;

&lt;h3 id=&quot;degradation_elegante&quot;&gt;Dégradation élégante&lt;/h3&gt;

&lt;p&gt;
&lt;img class=&quot;r&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/.1810-tagcpupm-degradation_s.jpg&quot; alt=&quot;&quot; /&gt;
Pour moi, il me semblait absolument évident que le script doit être capable de &lt;strong&gt;ne pas fonctionner&lt;/strong&gt; sans bloquer l'accès au contenu publié. Il y a milles et unes raisons que cela arrive&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La bibliothèque ne se charge pas,&lt;/li&gt;
&lt;li&gt;votre code est bugué,&lt;/li&gt;
&lt;li&gt;le navigateur client n'a pas toute les fonctionnalités nécessaires,&lt;/li&gt;
&lt;li&gt;le visiteur bloque volontairement tout javascript pour des raisons hygiéniques,
&lt;li&gt;le web n'est pas parcouru que par des navigateurs webs connus et le Google-bot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Il faut donc que le lecteur audio natif reste fonctionnel, mais qu'il soit facilement capturé et caché par le Web Component. Et ses propriétés d'invocations sont extrêmement intéressantes :
&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;&amp;lt;&lt;strong&gt;cpu-audio&lt;/strong&gt;&amp;gt;
  &amp;lt;&lt;strong&gt;audio&lt;/strong&gt; controls&amp;gt;
  &amp;lt;/&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;
&amp;lt;/&lt;strong&gt;cpu-audio&lt;/strong&gt;&amp;gt;&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;
Sur un navigateur &lt;q&gt;ancien&lt;/q&gt;, la balise du Web Component sera toujours interprétée, mais le navigateur ignorera sa signification sémantique. En fait, elle serait vue par un &lt;code&gt;&amp;lt;&lt;strong&gt;div&lt;/strong&gt;&amp;gt;&lt;/code&gt; que ce serait pareil. C'est un fonctionnement d'intégration par &lt;em lang=&quot;en&quot;&gt;fallback&lt;/em&gt; qui a toujours été prôné par le W3C et qui est utilisé dans les exemples plus haut avec &lt;code&gt;&amp;lt;&lt;strong&gt;object&lt;/strong&gt;&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;&lt;/code&gt;, et c'est ce qui permet de garder un minimum de support le temps que les navigateurs clients soient renouvelés.&lt;br /&gt;
La balise &lt;code&gt;&amp;lt;&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;&lt;/code&gt; que j'y ai mis serait du coup intégrée normalement, et son interface graphique normalement affichée, invoquée via l'attribut &lt;code&gt;controls&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
Les précédentes opérations ont lieu sur un navigateur moderne, sauf que la classe &lt;code&gt;TonElement&lt;/code&gt; liée à la balise sera invoquée via sa méthode &lt;code&gt;constructor()&lt;/code&gt;&amp;nbsp;; méthode qui insère le shadowDom (l'interface graphique), lance les interactions avec cette interface, et retire l'attribut &lt;code&gt;controls&lt;/code&gt; de la balise &lt;code&gt;&amp;lt;&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;&lt;/code&gt; pour la cacher.
&lt;/p&gt;

&lt;p&gt;
J'avais néanmoins besoin, même si les API Web Components n'étaient pas supportés, qu'un navigateur &lt;q&gt;daté&lt;/q&gt; profite néanmoins de la fonctionnalité d'adressage dans le temps du sonore. Ce qui voulait dire avoir une vraie &lt;strong&gt;politique de développement en amélioration progressive&lt;/strong&gt; et pour cela, il fallait isoler du code ce qui concerne purement cet adressage et la gestion de l'interface graphique. Bon, dans les faits, tout n'est pas proprement isolé, mais l'essentiel y est.
&lt;/p&gt;

&lt;h3 id=&quot;brique-olons&quot;&gt;Brique-olons&lt;/h3&gt;
&lt;p&gt;
&lt;a class=&quot;r&quot; href=&quot;https://commons.wikimedia.org/wiki/File:Bangalore_echafaudage.jpg&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/.1810-tagcpupm-echafaudage_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;

Chrome avait une excellente démonstration du ShadowDOM v0 mais avait des petites craditudes derrières. Il y avait aussi la possibilité d'insérer des variables dynamiques dans la CSS et le HTML, mais l'implémentation jouait avec des rafraichissement continués en écrivant directement dans le &lt;code&gt;.innerHTML&lt;/code&gt;, avec donc d'énormes soucis de performances. &lt;a href=&quot;https://x-tag.github.io/&quot;&gt;Mozilla avait sa propre implémentation, les X-Tags&lt;/a&gt;, qui n'étaient vraiment pas facile à prendre en main. Enfin bref, fallait implémenter de façon très expérimentale, des fois pas accessible par défaut, car on allait changer pas mal de paradigmes sur lesquels les navigateurs web étaient construits.
&lt;/p&gt;
&lt;p&gt;
Puis virent les BONNES nouvelles : ShadowDOM v1 fut enfin finalisé. Chrome en fit une implémentation propre. Et l'équipe de Google proposa un &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt;, &lt;a href=&quot;https://github.com/webcomponents/webcomponentsjs&quot;&gt;WebComponentsJS&lt;/a&gt;, qui était vraiment au plus proche du standard des Web Components, à se demander quel intérêt on a encore à utiliser &lt;a href=&quot;https://www.polymer-project.org/&quot;&gt;le framework Polymer&lt;/a&gt;.&lt;br /&gt;
Bon en fait, WebComponentsJS n'est pas parfait, notamment il crée des javascript &lt;em lang=&quot;en&quot;&gt;inline&lt;/em&gt; pour émuler les HTML import et les inclusions… une réponse extrêmement mauvaise en terme de sécurité car on doit alors réduire &lt;a href=&quot;https://openweb.eu.org/articles/content-security-policy&quot;&gt;les &lt;em lang=&quot;en&quot;&gt;Content Security Policies&lt;/em&gt; de son site&lt;/a&gt;, et pour moi, réduire les fonctions de sécurité est une ligne rouge.
&lt;/p&gt;
&lt;p&gt;
Il fallait attendre patiemment les implémentations natives qui n'allaient pas tarder. Le navigateur multi-plateforme qui était apparemment le plus en retard était Firefox, l'implémentation native était là, activable par des paramètres cachés car pas encore considérée comme suffisamment solide. En fait, Mozilla attendait une stabilisation de l'API, dont leur implémentation était cachée &lt;a href=&quot;https://hacks.mozilla.org/2018/10/firefox-63-tricks-and-treats/&quot;&gt;jusqu'à Firefox 63&lt;/a&gt; quand il était &lt;a href=&quot;https://blog.genma.fr/?Pourquoi-j-utilise-Firefox-nightly&quot;&gt;en version &lt;em lang=&quot;en&quot;&gt;nightly&lt;/em&gt;&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Étonnement, Safari était assez vite prêt, Apple n'étant pas pressé de rendre le web aussi puissant que les applications natives.&lt;br /&gt;
Il reste le support de Edge, qui habituellement adapte bien plus vite les standards que Safari. Je tiens de source sûre que Microsoft le proposera pas pour la fin de l'année, car le support demande &lt;a href=&quot;https://evollia.com/le-manifeste-de-la-refactorisation/&quot;&gt;une refacto assez conséquente.&lt;/a&gt;
&lt;/p&gt;

&lt;h3 id=&quot;interface&quot;&gt;L'interface&lt;/h3&gt;

&lt;p&gt;
Voici un exemple de l'interface en mode &lt;q&gt;large&lt;/q&gt;&amp;nbsp;:
&lt;/p&gt;
&lt;p&gt;
Euh.... vous savez quoi ? Vaut mieux vous le montrer en vrai&amp;nbsp;:
&lt;/p&gt;
&lt;cpu-audio title=&quot;Ex0085 Le Mystère Enigma&quot; poster=&quot;https://cpu.dascritch.net/public/Images/Emissions/.1805-Ex0085-Enigma_s.jpg&quot; canonical=&quot;https://cpu.dascritch.net/post/2018/05/17/Ex0085-Histoires-de-la-cryptographie%2C-2%C3%A8me-partie-%3A-Le-myst%C3%A8re-d-Enigma&quot; twitter=&quot;@cpuprogramme&quot;&gt;
    &lt;audio controls=&quot;controls&quot; id=&quot;emission&quot; preload=&quot;metadata&quot;&gt;
        &lt;source src=&quot;https://dascritch.net/vrac/Emissions/CPU/0085-CPU%2817-05-18%29.ogg&quot; type=&quot;audio/ogg&quot;&gt;
        &lt;source src=&quot;https://dascritch.net/vrac/Emissions/CPU/podcast/0085-CPU%2817-05-18%29.mp3&quot; type=&quot;audio/mpeg&quot;&gt;
        &lt;track src=&quot;https://dascritch.net/vrac/Emissions/CPU/tracks/0085-CPU%2817-05-18%29.vtt&quot;  kind=&quot;chapters&quot; default=&quot;&quot;&gt;
    &lt;/audio&gt;
&lt;!-- fallback messages for browsers without webcomponents --&gt;
&lt;div class=&quot;cpu-audio-without-webcomponents too-old&quot;&gt;
    &lt;h4&gt;Pas de bol, votre navigateur ne supporte pas les Web Components&lt;/h4&gt;
&lt;p&gt; Mais voici une capture écran de ce que vous manquez : &lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-player-playlist.jpg&quot; alt=&quot;&quot; /&gt;
&lt;/figure&gt;

&lt;/div&gt;
&lt;/cpu-audio&gt;


&lt;p&gt;
On voit le panneau horizontal standard avec la pochette, le bouton lecture/pause, le titre qui renvoie à la page canonique, le temps écoulé, la &lt;em lang=&quot;en&quot;&gt;timeline&lt;/em&gt; (où l'appui long entraine l'apparition du mode de navigation smartphone) et le bouton d'action.&lt;br /&gt;
Et le panneau optionnel de chapitrage.
&lt;/p&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-wc-normal.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-wc-small.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Pour ceux qui ne peuvent l'afficher, ou pour les archivistes du &lt;span class=&quot;serif&quot;&gt;XXIII&lt;/span&gt;&lt;sup&gt;ème&lt;/sup&gt; siècle, deux captures du player, une en largeur &lt;q&gt;normale&lt;/q&gt;, et une autre dans une largeur de smartphone. &lt;small&gt;Captures de début octobre 2018.&lt;/small&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&quot;chapitrage&quot;&gt;La puissance du chapitrage&lt;/h3&gt;

&lt;p&gt;
&lt;a class=&quot;r&quot; href=&quot;http://www.louisegrenadine.fr/2014/06/les-jolis-marque-pages.html&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/.1810-tagcpupm-marquespages_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Dans les fonctions qui sont hyper-pratiques et donc je suis fier, il y a le support des chapitres.
&lt;/p&gt;
&lt;p&gt;
Normalement, il existe la possibilité de chapitrer un fichier mp3/mp4 MAIS chaque format audio a sa propre spécification et il n'est pas dit que si un sonore a deux sources différentes, qu'elles soient raccord sur les déclarations de chapitres, et donc d'avoir des données uniformes. De même, un des problèmes les plus récurrents est que celui qui a encodé le média ne pense pas toujours à vérifier que les métadonnées soient en début de fichier, car certains encodeurs partent dans l'idée que vous voulez faire du vrai stream, sans début identifiable, et donc le chapitre déclaré au moment où il apparait (c'est comme ça que les radios transposent &lt;a href=&quot;https://fr.wikipedia.org/wiki/Radio_Data_System#Fonctionnalit.C3.A9s_du_RDS&quot;&gt;les informations contextuelles RadioText du RDS&lt;/a&gt; dans leur stream mp3 sur le net).
&lt;/p&gt;
&lt;p&gt;
Un sac de nœuds&amp;nbsp;? Non. Il se trouve qu'&lt;a href=&quot;https://www.w3.org/TR/webvtt1/&quot;&gt;il existe un standard du W3C (dérivé des fichiers de sous-titres &lt;code&gt;.srt&lt;/code&gt; , donc... issus du piratage, mais chut)&amp;nbsp;: Les WebVTT&lt;/a&gt;. Et pour les exploiter, une API standard parfaitement supportée par les navigateurs peut prévenir quand on entre ou sort d'un de ces chapitres.&lt;br /&gt;
Il est probable que vous les ayez déjà vus à l'œuvre dans une vidéo… sauf qu'&lt;strong&gt;ils sont quasi jamais utilisés en audio&lt;/strong&gt;, et donc sans interface utilisateur dans le navigateur… &lt;a href=&quot;https://dascritch.github.io/cpu-audio/CHAPTERS_ED&quot;&gt;Jusqu'à maintenant&lt;/a&gt;.
&lt;br /&gt;
Pour des raisons éditoriales, &lt;a href=&quot;https://dascritch.net/post/2018/08/17/CPU-Ex0093-Bonjour-%C3%A0-toi%2C-Enfant-du-Futur-Imm%C3%A9diat-%3A-Guerre-froide%2C-th%C3%A9%C3%A2tre-d-ombres-%28Des-espions-et-des-ondes%29&quot;&gt;l'interface des chapitres est activée sur mon blog, pas sur le site de CPU.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
De même, le player intègre désormais &lt;a href=&quot;https://dascritch.github.io/cpu-audio/FEATURES#playlists&quot;&gt;une fonction &lt;em lang=&quot;en&quot;&gt;playlist&lt;/em&gt; dans une page&amp;nbsp;: si une balise termine sa lecture, la lecture d'une suivante peut démarrer dans la foulée&lt;/a&gt;.
&lt;/p&gt;


&lt;h3 id=&quot;ce_que_j_ai_appris&quot; class=&quot;cl&quot;&gt;Ce que j'ai appris&lt;/h3&gt;

&lt;p&gt;
&lt;img class=&quot;r&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-mindblow.gif&quot; alt=&quot;&quot; /&gt;
&lt;strong&gt;Plein de méthodes du DOM&lt;/strong&gt; que je ne connaissais pas, et qui m'ont facilité le travail. Une fois de plus, on ne relit jamais assez les standards du W3C, sachant qu'ils font  actuellement plusieurs milliers de pages.  Une de mes découvertes, par exemple, me permet de gérer le blocage des lectures de son automatiques introduits depuis Avril 2018, &lt;code&gt;document.hasFocus()&lt;/code&gt; m'évite de lancer une lecture trop tôt et d'attendre que le visiteur a cliqué dans la vue de ma page.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Plein d'événements&lt;/strong&gt; et autres subtilités sur des balises HTML que je croyais connaitre. Comme quoi, on ne relit jamais assez les documentations officielles.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Utiliser les variables CSS3&lt;/strong&gt; pour &lt;a href=&quot;https://dascritch.github.io/cpu-audio/INSTALL#personnalization-via-css-variables&quot;&gt;pouvoir customiser l'aspect du Web Component de l'extérieur&lt;/a&gt; sans avoir à bricoler le code ou mettre trop d'attributs HTML dans la balise d'appel.
&lt;/p&gt;

&lt;p&gt;
Modifier du balisage sur &lt;a href=&quot;https://cpu.dascritch.net/category/Programmes&quot;&gt;les billets descriptifs de 95 émissions de CPU&lt;/a&gt;.&lt;br /&gt;
J'avais prévu de cacher la liste des chapitres si elle a été chargée et affichée par le lecteur. À la main, et plus d'une fois, pour finalement ne pas m'en servir de suite. Quand vous allez dans vos toilettes avec votre laptop, y'a comme un signe. J'ai tiré une croix pour les 390 &lt;a href=&quot;http://supplementweekend.fr/&quot;&gt;Supplément-Week-End&lt;/a&gt; et tous les autres émissions archivées. Moralité&amp;nbsp;: toujours déclarer des &lt;code&gt;id=&quot;&quot;&lt;/code&gt; par blocs reproductibles suffisamment tôt et s'y tenir, ce qui aurait permit d'automatiser ces modifs triviales.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Garder une séparation entre les sources HTML, feuilles de style et javascript.&lt;/strong&gt;&lt;br /&gt;
L'implémentation de HTML Imports restera dans les limbes pour des raisons de sécurité. Heureusement, on peut faire sans, tout en gardant la possibilité de séparer le &lt;code&gt;&amp;lt;&lt;strong&gt;template&lt;/strong&gt;&amp;gt;&lt;/code&gt;, le &lt;code&gt;&amp;lt;&lt;strong&gt;style&lt;/strong&gt;&amp;gt;&lt;/code&gt; et le javascript&amp;nbsp;: Pour cela, &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/master/make.sh&quot;&gt;j'ai écrit un &lt;code&gt;make.sh&lt;/code&gt; maison crade,&lt;/a&gt; certes, mais il fait le taf avec un minimum d'environnement, et je vous invite à participer, il est &lt;a href=&quot;https://github.com/dascritch/cpu-audio/&quot;&gt;dans le repo de ce projet.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Avoir attendu 2018 pour développer la nouvelle version m'a permis de bénéficier de&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API enfin stabilisées et réellement standardisés&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;meilleur support de ces standards dans les navigateurs&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;par amélioration progressive, pouvoir toucher 50% d'audience ayant un navigateur à jour de moins de 6 mois (et avoir au moins deux navigateurs cibles multiplateformes)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;n'utiliser aucun &lt;em lang=&quot;en&quot;&gt;polyfill&lt;/em&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;modulariser pour avoir un fonctionnement possible sans le support des Web Components&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.github.io/cpu-audio/INSTALL#personnalization-via-css-variables&quot;&gt;usage des variables CSS3&lt;/a&gt;, ce qui permet de &lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/live_config.html&quot;&gt;pouvoir personnaliser plus facilement le player&lt;/a&gt;&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;relevé deux bugs dans Firefox, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1476302&quot;&gt;1476302&lt;/a&gt; et &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1476301&quot;&gt;1476301&lt;/a&gt; (yay !)&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;passer mes serveurs en &lt;a href=&quot;https://blog.eleven-labs.com/fr/http2-nest-pas-le-futur-cest-le-present/&quot;&gt;HTTP2&lt;/a&gt;, mais sans &lt;a href=&quot;https://www.smashingmagazine.com/2017/04/guide-http2-server-push/&quot;&gt;le mode &lt;em lang=&quot;en&quot;&gt;push&lt;/em&gt;&lt;/a&gt;, faute d'un support correct du mode &lt;code&gt;HTTP 206 Partial content&lt;/code&gt; ou de pouvoir désactiver le &lt;em lang=&quot;en&quot;&gt;push&lt;/em&gt; en fonction du type-mime&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;résoudre le problème posé par &lt;a href=&quot;https://arstechnica.com/gadgets/2018/03/chrome-66-will-try-to-block-unwanted-noisy-autoplaying-video/&quot;&gt;le blocage des autoplays sonores par Chrome (mars 2018)&lt;/a&gt; et Firefox (Octobre 2018).&lt;/li&gt;
&lt;li&gt;étoffer la doc et proposer &lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/live_config.html&quot;&gt;un outil de configuration &lt;em lang=&quot;en&quot;&gt;live&lt;/em&gt;&lt;/a&gt; et d'&lt;a href=&quot;https://dascritch.github.io/cpu-audio/applications/chapters_editor.html&quot;&gt;édition des chapitres&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3 id=&quot;me_suis_plante&quot;&gt;Je me suis néanmoins planté&lt;/h3&gt;
&lt;p&gt;
&lt;img class=&quot;r&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/.1810-tagcpupm-sol-glissant_s.jpg&quot; alt=&quot;&quot; /&gt;

&lt;strong&gt;J'ai perdu un contributeur&lt;/strong&gt; (désolé &lt;a href=&quot;https://github.com/NerOcrO&quot;&gt;NerOcrO&lt;/a&gt;) car j'ai repris le projet ondemiroir-player de zéro à grands coups de copiés-collés et je l'ai surtout annoncé beaucoup trop tôt avant de pouvoir prendre des tiers. Cela a toujours été ma peur bleue quand j'ouvrais mon code, et le meilleur moyen est d'&lt;strong&gt;écrire suffisamment tôt &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/master/CONTRIBUTING.md&quot;&gt;une &lt;em lang=&quot;en&quot;&gt;guideline&lt;/em&gt; des contributeurs&lt;/a&gt; pour que les règles soient posées d'entrée.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Il y a toujours ce souci insupportable qu'&lt;strong&gt;il est impossible d'essayer Safari sur iOS sans avoir un iPhone&lt;/strong&gt;/iPad sous la main. Et d'expérience sur les interfaces, &lt;strong&gt;un émulateur peut être vraiment trompeur&lt;/strong&gt;. J'en veux pour exemple le mode &lt;q&gt;émulation d'appareils mobiles&lt;/q&gt; de Chrome à qui il manque des API telles que &lt;code&gt;navigator.share&lt;/code&gt;. Alors payer pour un émulateur en ligne… ahem…
&lt;/p&gt;
&lt;p&gt;
Et tout ça pour arriver trop vite, ayant quasi-terminé 6 mois avant de pouvoir lancer mon player :/ Les Web Components totalement fonctionnels sont arrivés dans Firefox&amp;nbsp;63 sorti officiellement le 23 Octobre, bien après Chrome et Safari, mais la version LTS (&lt;em lang=&quot;en&quot;&gt;Long Term Support&lt;/em&gt;) actuelle est Firefox ESR 60 et Tails utilise une version encore plus vieille. Ce qui veut dire que &lt;a href=&quot;https://www.mozilla.org/en-US/firefox/organizations/&quot;&gt;Firefox ESR et Tails vont voir le nouveau lecteur dans sa version &lt;em lang=&quot;en&quot;&gt;fallback&lt;/em&gt; un petit moment&amp;nbsp;: pas avant juillet 2019.&lt;/a&gt;
&lt;/p&gt;
&lt;figure class=&quot;cl&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-firefox-esr.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Eh oui, le support à long terme est souvent synonyme de… &lt;q lang=&quot;en&quot;&gt;long tail&lt;/q&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Je terminerai par &lt;a href=&quot;https://twitter.com/mariejulien/status/1047827583126183937&quot;&gt;un tweet de @mariejulien&lt;/a&gt; (&lt;a href=&quot;https://cpu.dascritch.net/post/2018/05/16/Julien-Dubedout%2C-cr%C3%A9ateur-de-la-collection-de-badges-cyberspace-building-crew&quot;&gt;le gars des badges en tissu&lt;/a&gt;) lors de Paris Web
&lt;/p&gt;
&lt;blockquote&gt;
Question de @SkyNebula à #parisweb sur comment contribuer au libre quand on est designer, début de réponse &quot;déjà tu peux voir si y'a un contributing md sur le repo…&quot; 😅🤗
&lt;br /&gt;
&lt;br /&gt;
Vous le voyez toujours pas le problème ? Tout le monde n'utilise pas des outils de dev. Get over it. 😁
&lt;/blockquote&gt;
&lt;p&gt;
… ce qui m'a fait écrire &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/master/CONTRIBUTING.md&quot;&gt;le message d'accueil aux contributeurs extérieurs AUSSI pour les non-développeurs.&lt;/a&gt; Ne serait-ce pour les traductions, le graphisme, la doc, etc… Il faut que je complète encore pour expliquer comment faire sans avoir à installer d'outils via le site web de Github, notamment &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/master/src/10_i18n.js&quot;&gt;l'épineuse question des localisations&lt;/a&gt; (utiliser les &lt;code&gt;.po&lt;/code&gt;&amp;nbsp;? un tableur&amp;nbsp;?).
&lt;/p&gt;

&lt;p&gt;
Ce qui m'amène à…
&lt;/p&gt;

&lt;h3 id=&quot;todo&quot;&gt;L'avenir imaginé pour mon lecteur&lt;/h3&gt;

&lt;p&gt;
&lt;img class=&quot;r&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/.1810-tagcpupm-todo_t.png&quot; alt=&quot;&quot; /&gt;

Oui, je sais, &lt;a href=&quot;https://developers.google.com/style/future&quot;&gt;il ne faut pas documenter le futur d'un produit.&lt;/a&gt; Néanmoins, voilà ce que j'aimerais faire&amp;nbsp;:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;avoir &lt;strong&gt;un vrai travail de design et d'accessibilité&lt;/strong&gt;, et le documenter&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dascritch/cpu-audio/issues/25&quot;&gt;&lt;strong&gt;résoudre le problème du positionnement fin en tactile sur smartphone&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;: la barre de progression n'est bien qu'à la souris sur ordi, on compense la précision par le clavier. Aucun de ces dispositifs sont sur portable… j'ai prévu une interface avec des boutons en appui long sur la timeline (ou click droit à la souris), mais c'est pas encore ça&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;le support des règles CSS en fonction de la largeur d'un élément&amp;nbsp;; &lt;a href=&quot;https://github.com/dascritch/cpu-audio/blob/master/src/global.css#L27&quot;&gt;&lt;code&gt;@element&lt;/code&gt; est prête pour moi,&lt;/a&gt; mais implémentée nulle part&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;plus de tests de non-régression&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;encore plus de tests&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;documenter encore plus&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;construire en même temps que la compilation des add-ons pour des CMS communs, notamment dotclear&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;créer des add-ons WebExtensions pour les navigateurs avec un ProtocolHandler custom pour basculer la lecture vers une application native (ex: VLC), et donc gérer les touches multimédias, ou les copier dans une clé USB à emporter&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;créer des fonctions décentralisées, sur le modèle (ou basées sur) mastodon&amp;nbsp;:&lt;ul&gt;
    &lt;li&gt;pouvoir faire &lt;a href=&quot;https://github.com/dascritch/cpu-audio/issues/10&quot;&gt;des commentaires comme pour SoundCloud mais de façon décentralisée&lt;/a&gt;&amp;nbsp;;&lt;/li&gt;
    &lt;li&gt;pouvoir &lt;a href=&quot;https://github.com/dascritch/cpu-audio/issues/8&quot;&gt;créer des &lt;em lang=&quot;en&quot;&gt;playlists&lt;/em&gt; et les partager de façon décentralisé&lt;/a&gt;. Par exemple, lier des émissions qui ont la même thématique comme &lt;a href=&quot;https://www.franceinter.fr/emissions/tout-est-numerique&quot;&gt;«&amp;nbsp;&lt;em&gt;Tout est numérique&lt;/em&gt;&amp;nbsp;» d'Olivier Tesquet sur France Inter&lt;/a&gt;, &lt;a href=&quot;https://www.april.org/emission-libre-a-vous-diffusee-mardi-4-septembre-2018-sur-radio-cause-commune&quot;&gt;«&amp;nbsp;&lt;em&gt;Libre à vous&lt;/em&gt;» de l'April&lt;/a&gt;, &lt;a href=&quot;https://www.nolimitsecu.fr/&quot;&gt;le podcast «&amp;nbsp;&lt;em&gt;NoLimitSécu&lt;/em&gt;&amp;nbsp;&lt;/a&gt; avec &lt;a href=&quot;http://cpu.pm&quot;&gt;la mienne&lt;/a&gt;, et les annoter&amp;nbsp;;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;générer des infos côté serveur comme&lt;ul&gt;
    &lt;li&gt;un spectrogramme&amp;nbsp;;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/dascritch/cpu-audio/issues/12&quot;&gt;découper en MSE API ou MPEG-DASH (Dynamic Adaptive Streaming over HTTP)&lt;/a&gt;, notamment pour sauter plus vite à des fragments (mais y'a des brevets dessus) puis les navigateurs Chrome et Safari se montrent très mauvais dans le chargement partiel d'un sonore via les requêtes &lt;code&gt;Content-Range&lt;/code&gt;&amp;nbsp;;&lt;/li&gt;
    &lt;li&gt;avoir un système de pige automatique des textes, pour l'accessibilité aux sourds et malentendants. Je remercie infiniment le travail des bénédictins de l'April, se faire transcrire par eux est un honneur. Accessoirement, cela aide aussi au référencement naturel (sifflote)&amp;nbsp;;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;traduire&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;supporter les localisations &lt;abbr&gt;RTL&lt;/abbr&gt; (&lt;em lang=&quot;en&quot;&gt;Right To Left&lt;/em&gt;), notamment pour les langues arabes, hébreu,… ce qui signifie renverser les icones, la &lt;em lang=&quot;en&quot;&gt;timeline&lt;/em&gt; et.... les touches fléchées du clavier, eh oui&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;supporter la vidéo aussi&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;rester sous les 100Ko.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pourquoi_t_embeter&quot;&gt;«&amp;nbsp;Mais pourquoi t'embêter&amp;nbsp;? y'a les apps natives maintenant&amp;nbsp;!&amp;nbsp;»&lt;/h3&gt;

&lt;p&gt;
Alors oui, malheureusement, la plupart des utilisateurs d'internet sont désormais clients d'applications mobiles… 
&lt;/p&gt;
&lt;p&gt;
mais pour moi, &lt;strong&gt;le Web n'est pas mort&lt;/strong&gt;&amp;nbsp;!&lt;br /&gt;
Il est ce que nous en ferons&amp;nbsp;: du partage, de l'accès à tous et dans le &lt;code&gt;&amp;lt;&lt;strong&gt;a&lt;/strong&gt; href=&quot;https://dascritch.net/post/2018/11/06/&quot;&amp;gt;&lt;/code&gt; tous les lier. Il peut même remplacer fortement ces applications, éviter la fragmentation des langages et des frameworks, et conforter ses missions premières via &lt;a href=&quot;https://dascritch.net/post/2007/09/17/RIP-URL-URI-IRI-INRI-W3C&quot;&gt;les hyperliens et la décentralisation&lt;/a&gt;,…&lt;br /&gt;
Qu'on puisse mettre un marque page à un endroit, partager ce lien et donc le contexte à ses amis, dans ses billets de blogs, et retrouver le contexte si la page est publique bien plus tard (à condition que le site existe et qu'il a maintenu son plan d'adressage).
&lt;/p&gt;
&lt;p&gt;
C'est un peu ce que je fais inconsciemment avec ce petit bout de code, qui ne sert qu'à une chose&amp;nbsp;: rendre les sonores plus navigables et plus partageables.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://dascritch.net/post/2019/06/05/Retravailler-un-lecteur-web-audio-dans-les-petites-largeurs&quot;&gt;L'étape suivant a été de &lt;strong&gt;travailler dans les petites largeurs&lt;/strong&gt;.&lt;/a&gt;
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Mettre de l'audio dans le web n'a pas été simple</title>
		<link>https://dascritch.net/post/2018/11/06/Mettre-de-l-audio-dans-le-web-n-a-pas-%C3%A9t%C3%A9-simple</link>
		<guid isPermaLink="false">urn:md5:37c5f6fc056dbe15958c1f709025d4c2</guid>
		<dc:date>2018-11-06T12:24:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>…alors autant raconter ce qui m'a mené à écrire un lecteur audio pour une page web.		&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;…alors autant raconter ce qui m'a mené à écrire un lecteur audio pour une page web.&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;ses versions 5 et 6.&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Dans cette série :
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Mettre de l'audio dans le web n'a pas été simple&lt;/strong&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;&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;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;h3 id=&quot;j_ai_eu_une_chance_incroyable&quot;&gt;J'ai eu une chance incroyable&lt;/h3&gt;

&lt;p&gt;
L'année où j'ai eu mon bac, en 1993, je suis entré dans &lt;a href=&quot;http://www.radio-fmr.net&quot;&gt;une radio associative, Radio &amp;lt;FMR&amp;gt;&lt;/a&gt;, au moment où elle faisait encore une audience d'importance, supérieure aux 3%. On entendait cette radio de punks dans les bars, les friperies et les magasins de disques. Je pensais faire le désespoir de mes parents, et à mon grand désarroi, j'ai appris que mon père avait bricolé le premier bloc émetteur.&lt;br /&gt;
&lt;a href=&quot;https://dascritch.net/post/2014/10/14/Netscape-Navigator-a-20-ans-%21&quot;&gt;Au même moment sortait Netscape, le premier navigateur web construit par un opérateur commercial&lt;/a&gt;. J'ai touché aux deux le même automne, inutile de vous dire que mes passions furent partagées entre les deux, et que j'ai souvent croisé les deux&amp;nbsp;: j'ai toujours cherché comment un message était transmit pour l'adapter au mieux du support, voire hacker les deux.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://cpu.dascritch.net/post/2016/10/27/Ex0040-P%C3%A9rennit%C3%A9-de-l-art-web&quot;&gt;Les premières pages web de Radio &amp;lt;FMR&amp;gt; sont datées de 1996&lt;/a&gt;. Et les sons furent mis en ligne quelques mois plus tard. Dès 1999, on a eu la première diffusion &lt;em lang=&quot;en&quot;&gt;stream&lt;/em&gt; de notre antenne, qui était… un piratage amical.
&lt;/p&gt;
&lt;p&gt;
Mais pour les sons à écouter, au début, nous n'avions que &lt;a href=&quot;http://hallofshame.gp.co.at/index.php?file=qtime.htm&amp;amp;mode=original&quot;&gt;Quicktime (1991)&lt;/a&gt;,  Window Media (1991), Real Player (1995) et WinAmp (1997).
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-realplayerplus.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;Real player 8 plus, un &lt;q&gt;joli&lt;/q&gt; &lt;em lang=&quot;en&quot;&gt;bloatware&lt;/em&gt; lancé pour écouter un sonore de 15&amp;nbsp;secondes&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Et encore… au début, ces logiciels ne s'intégraient pas dans le navigateur, il fallait télécharger les sonores complètement, puis lancer le bon logiciel pour les lire, en le devinant depuis l'extension du nom de fichier ou le type-mime déclaré par le serveur. Des fois, ces logiciels de lecture devaient charger des &lt;em lang=&quot;en&quot;&gt;drivers&lt;/em&gt; d'imports complémentaires car le format était plus ésotérique que prévu.&lt;br /&gt;
Et quand ces logiciels furent inclus dans le navigateur, &lt;strong&gt;les &lt;em lang=&quot;en&quot;&gt;plugins&lt;/em&gt; n'étaient pas forcément disponibles partout&lt;/strong&gt;&amp;nbsp;: les versions manquaient selon les systèmes d'exploitations ou l'API plugin exposée par les navigateurs, et les méthodes d'appels en &lt;abbr&gt;HTML&lt;/abbr&gt; variaient entre Internet Explorer et Netscape, les autres navigateurs hésitaient entre les deux camps. Inutile de vous dire que y'avait de quoi s'arracher les cheveux en tant que dev et en tant que surfeur des internets. D'où les sites web &lt;q&gt;optimisés exclusivement pour Windows&amp;nbsp;98 avec Internet Explorer&lt;/q&gt;.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-best-msie.png&quot; alt=&quot;Best viewed with free Microsoft Internet Explorer. Click here to download Internet Explorer now&quot; /&gt;
&lt;figcaption&gt;
Je ressors cette image insoutenable, j'espère qu'aucune tentative de suicide n'aura lieu cette fois-ci.
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&quot;lauriers_flash&quot;&gt;Là où je tresse des lauriers à… Flash !&lt;/h3&gt;
&lt;p&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/710-flash/710-flash128.png&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;
En 1996, Macromedia eu le bon ton de faire évoluer son logiciel Flash de l'animation de CD-Rom à un &lt;em lang=&quot;en&quot;&gt;plugin&lt;/em&gt; navigateur pour presque toutes les plateformes. le plugin Flash devint vite extrêmement populaire, il était même installé par défaut avec presque tous les navigateurs dès 1999. Et pour la fonction qui nous intéresse, sa version&amp;nbsp;6 en 2002 a apporté la faculté de &lt;a href=&quot;https://helpx.adobe.com/flash/kb/supported-codecs-flash-player.html&quot;&gt;lire des fichiers &lt;code&gt;.mp3&lt;/code&gt; via des adresses &lt;code&gt;http://&lt;/code&gt;&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Malgré l'urticaire que pouvait déjà provoquer Flash chez certains, cette fonctionnalité devint importante pour ceux qui cherchaient à intégrer du son dans une page web car elle permettait de pouvoir intégrer en presque un seul &lt;q lang=&quot;en&quot;&gt;snippet&lt;/q&gt; de code HTML &lt;strong&gt;un lecteur mp3 qui serait lisible de quasiment partout&lt;/strong&gt;. Ce qui tombait bien car le mp3 était devenu un format ultra-populaire sur internet grâce au… &lt;small&gt;piratage… &lt;small&gt;ahem.&lt;/small&gt;&lt;/small&gt;&lt;br /&gt;
Rappelons que l'iPhone n'allait arriver qu'en 2007, et qu'à sa sortie, tout le monde était persuadé qu'Apple négociait et installerait &lt;a href=&quot;https://www.adobe.com/mena_en/products/flashlite/&quot;&gt;Flash Lite.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Sauf que les premiers lecteurs de son en flash prêts-à−intégrer dans son site étaient particulièrement lourds avec plein d'effets graphiques, voire des bannières publicitaires.&lt;br /&gt;
Heureusement, &lt;a href=&quot;https://www.blup.fr/&quot;&gt;gloire à toi, Dew&lt;/a&gt;, il a fait &lt;a href=&quot;http://www.dewplayer.fr/&quot;&gt;un &lt;em lang=&quot;en&quot;&gt;player&lt;/em&gt; audio ultra-minimaliste, &lt;strong&gt;dewplayer&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&quot;http://habo94.free.fr/&quot;&gt;miroir&lt;/a&gt;). 
&lt;/p&gt;
&lt;figure class=&quot;cl&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-dewplayer-original.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;

&lt;figcaption&gt;
Différentes configs du &lt;a href=&quot;http://habo94.free.fr/index-xhtml.htm&quot;&gt;dewplayer, capturé d'un site archive&lt;/a&gt; (normal, mini, multi-sonore et rect)&lt;br /&gt;Image zoomé ×&amp;nbsp;2
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Revoyons ses caractéristiques&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un bouton start &lt;kbd&gt;▸&amp;#xFE0E;&lt;/kbd&gt;, un pause &lt;kbd&gt;⏸&amp;#xFE0E;&lt;/kbd&gt;, un stop &lt;kbd&gt;⏹&amp;#xFE0E;&lt;/kbd&gt;&lt;/li&gt;
&lt;li&gt;Une barre de temps, indiquant la progression de chargement et celle de lecture&lt;/li&gt;
&lt;li&gt;Pas de titre&lt;/li&gt;
&lt;li&gt;Pas de gestion de volume sonore ou de mute&lt;/li&gt;
&lt;li&gt;Pas de gestion de vitesse de restitution&lt;/li&gt;
&lt;li&gt;4 aspects différents possibles&lt;/li&gt;
&lt;li&gt;Couleurs paramétrables&lt;/li&gt;
&lt;li&gt;4121 octets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Tu cliques, il joue le sonore, et pis cé tou. Le génie est dans la simplicité.
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-dewplayer.png&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;
Un lecteur flash avec la même inspiration minimaliste, les actions lecture &lt;kbd&gt;▸&amp;#xFE0E;&lt;/kbd&gt; et pause &lt;kbd&gt;⏸&amp;#xFE0E;&lt;/kbd&gt; confondus dans le même bouton.&lt;br /&gt;Image zoomé ×&amp;nbsp;2
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Mais franchement, &lt;strong&gt;ce satané plugin Flash n'était qu'un pis-aller&lt;/strong&gt;&amp;nbsp;: un logiciel propriétaire lié à une boite au code source fermé, une sécurité pas au top dans son insertion dans les navigateurs, et les appels affreux en HTML en fonction du navigateur. Sur &lt;a href=&quot;http://supplementweekend.fr&quot;&gt;le site de ma précédente émission &lt;q&gt;Supplément Week-End&lt;/q&gt; (2004-2014)&lt;/a&gt;, j'avais écrit à grand coup de &lt;a href=&quot;https://dascritch.net/post/2013/04/08/Dirty-Hacky-I-%3A-Commentaires-conditionnels&quot;&gt;commentaires conditionnels&lt;/a&gt; un code HTML qui se voulait &lt;q&gt;universel&lt;/q&gt;, marchant aussi bien avec &lt;abbr&gt;MSIE&lt;/abbr&gt; (Microsoft Internet Explorer) que le reste&amp;nbsp;:
&lt;/p&gt;
&lt;code&gt;&lt;pre&gt;&amp;lt;!--[if IE]&amp;gt;
  &amp;lt;&lt;strong&gt;object&lt;/strong&gt; classid=&quot;&lt;em&gt;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&lt;/em&gt;&quot; codebase=&quot;&lt;span class=&quot;url&quot;&gt;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&lt;/span&gt;&quot;&gt;
&amp;lt;![endif]--&amp;gt;
&amp;lt;!--[if !IE]&amp;gt; &amp;lt;--&amp;gt;
  &amp;lt;&lt;strong&gt;object&lt;/strong&gt; type=&quot;&lt;em&gt;application/x-shockwave-flash&lt;/em&gt;&quot; data=&quot;https://dascritch.net/post/2018/11/06/&lt;span class=&quot;url&quot;&gt;/interface/player_mp3.swf&lt;/span&gt;&quot;&gt;
&amp;lt;!--&amp;gt; &amp;lt;![endif]--&amp;gt;
    &amp;lt;&lt;strong&gt;param&lt;/strong&gt; name=&quot;&lt;em&gt;src&lt;/em&gt;&quot; value=&quot;&lt;span class=&quot;url&quot;&gt;/interface/player_mp3.swf&lt;/span&gt;&quot; /&amp;gt;
    &amp;lt;&lt;strong&gt;param&lt;/strong&gt; name=&quot;&lt;em&gt;FlashVars&lt;/em&gt;&quot; value=&quot;&lt;em&gt;mp3=&lt;span class=&quot;url&quot;&gt;zou.mp3&lt;/span&gt;&amp;amp;loadingcolor=304b5f&amp;amp;bgcolor1=ffffff&amp;amp;bgcolor2=e6f4ff&amp;amp;buttoncolor=304b5f&amp;amp;buttonovercolor=000077&amp;amp;slidercolor1=6096BF&amp;amp;slidercolor2=304b5f&amp;amp;sliderovercolor=000077&lt;/em&gt;&quot; /&amp;gt;
    &amp;lt;&lt;strong&gt;param&lt;/strong&gt; name=&quot;&lt;em&gt;wmode&lt;/em&gt;&quot; value=&quot;&lt;em&gt;transparent&lt;/em&gt;&quot; /&amp;gt;
    … (fallback pour ceux qui gèrent pas)
&amp;lt;/&lt;strong&gt;object&lt;/strong&gt;&amp;gt;
&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;
Oui, assez gerbant.
&lt;/p&gt;
&lt;p&gt;
Entre &lt;a href=&quot;https://dascritch.net/post/2007/10/19/Pardonnons-a-ce-Flash-qui-nous-agacent&quot;&gt;les crises de nerfs, les mises à jour différentes entre plateformes et l'arrogance de Macromedia puis d'Adobe, cette solution ne pouvait qu'être provisoire.&lt;/a&gt;
&lt;/p&gt;
&lt;h3 id=&quot;resonnent_audio&quot;&gt;Hosanna, résonnent les &amp;lt;audio&amp;gt; au plus haut du W3C !&lt;/h3&gt;
&lt;p&gt;
Enfin arriva en 2009 la balise &lt;code&gt;&amp;lt;&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;&lt;/code&gt; dans des navigateurs web en support natif. &lt;a href=&quot;https://dascritch.net/post/2009/07/29/La-balise-audio-cest-trop-kawaii&quot;&gt;Facile, bien plus facile, &lt;em lang=&quot;jp&quot;&gt;kawaii&lt;/em&gt; ♥♥♥&lt;/a&gt;&amp;nbsp;:
&lt;/p&gt;

&lt;audio controls=&quot;controls&quot;  id=&quot;chatons&quot;&gt;
    &lt;source src=&quot;http://dascritch.net/vrac/.blog2/sitcom/907-MiniPouss-2/907-DemoBaliseAudioMiaous.mp4&quot; type=&quot;audio/mp4&quot;&gt;
    &lt;source src=&quot;http://dascritch.net/vrac/.blog2/sitcom/907-MiniPouss-2/907-DemoBaliseAudioMiaous.ogg&quot; type=&quot;audio/ogg&quot;&gt;
&lt;/audio&gt;
&lt;code&gt;&lt;pre&gt;
&amp;lt;&lt;strong&gt;audio&lt;/strong&gt; src=&quot;https://dascritch.net/post/2018/11/06/&lt;span class=&quot;url&quot;&gt;zou.wav&lt;/span&gt;&quot; controls&amp;gt;
   … (fallback pour ceux qui ne gèrent pas)
&amp;lt;/&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;
Mais c'était trop facile : parmi les manques dans la description des balises &lt;code&gt;&amp;lt;&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;&lt;strong&gt;video&lt;/strong&gt;&amp;gt;&lt;/code&gt;, &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats&quot;&gt;aucun format de média n'a été imposé par le W3C aux navigateurs web, ni même un support minimum&lt;/a&gt;. 
&lt;/p&gt;

&lt;h3 id=&quot;codecs_libres_vs_payants&quot;&gt;Code code code codecs : entre libres et payants&lt;/h3&gt;

&lt;p&gt;
&lt;img class=&quot;r&quot; src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/.1810-tagcpupm-oeufdor_t.jpg&quot; alt=&quot;&quot; /&gt;
Pourquoi &lt;a href=&quot;https://www.w3.org/MarkUp/html-spec/html-spec_5.html#SEC5.10&quot;&gt;le &lt;abbr&gt;W3C&lt;/abbr&gt;&lt;/a&gt; et &lt;a href=&quot;https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-alt&quot;&gt;le &lt;abbr&gt;WHATWG&lt;/abbr&gt;&lt;/a&gt; ont-ils laissé un tel flou&amp;nbsp;?&lt;br /&gt;
Il se trouve que nous connaissions déjà une situation similaire avec &lt;a href=&quot;https://dascritch.net/post/2014/04/29/Ressources-en-img&quot;&gt;les balises &lt;code&gt;&amp;lt;&lt;strong&gt;img&lt;/strong&gt;&amp;gt;&lt;/code&gt; figées dans un &lt;em lang=&quot;la&quot;&gt;status quo&lt;/em&gt; empirique&lt;/a&gt;&amp;nbsp;: &lt;strong&gt;les formats de compression les &lt;q&gt;meilleurs&lt;/q&gt; sont payants, ils pouvaient rançonner le web tout neuf&lt;/strong&gt;. Et évidemment, certains ayants-droits ont un peu poussé &lt;a href=&quot;https://www.courrierinternational.com/article/2014/04/26/la-strategie-mafieuse-du-coucou&quot;&gt;leur stratégie du coucou&lt;/a&gt; pour essorer la poule aux œufs d'or. Coucous donc à &lt;a href=&quot;https://news.slashdot.org/story/18/01/30/0419222/mpeg-founder-says-the-mpeg-business-model-is-broken&quot;&gt;MPEG-LA&lt;/a&gt;, &lt;a href=&quot;https://www.theregister.co.uk/2007/04/14/microsoft_vc-1_codec_analysis/&quot;&gt;Microsoft (VC1)&lt;/a&gt;, &lt;a href=&quot;https://www.nextinpact.com/archive/27622-Quicktime-dApple-pousse-par-linstauration-du.htm&quot;&gt;Apple&lt;/a&gt; et bien d'autres.&lt;br /&gt;
&lt;a href=&quot;http://blogs.fsfe.org/pb/?p=34&quot;&gt;Une situation qui va devenir crispante&lt;/a&gt; pour certains webmestres qui doivent se soucier de la légalité de leur site (ceux qui pensent à l'achat d'art, et à créditer correctement les logiciels), jonglant entre &lt;a href=&quot;https://www.gnu.org/philosophy/why-audio-format-matters.html&quot;&gt;les implémentations &lt;q&gt;universellement utilisables&lt;/q&gt; et non-payantes (libres)&lt;/a&gt;, sans trop dupliquer le même sonore.
&lt;/p&gt;

&lt;p&gt;
Car oui, si vous ne le savez pas, &lt;a href=&quot;https://www.theregister.co.uk/2017/05/16/mp3_dies_nobody_noticed/&quot;&gt;jusqu'en 2017 l'usage du format mp3 (&lt;abbr&gt;MPEG&lt;/abbr&gt; 1 layer &lt;span class=&quot;serif&quot;&gt;III&lt;/span&gt;) pouvait vous être facturé, étant sous le coup de plusieurs brevets.&lt;/a&gt; C'est &lt;a href=&quot;https://www.engadget.com/2010/05/04/know-your-rights-h-264-patent-licensing-and-you/&quot;&gt;toujours le cas pour tout ce qui relève du MPEG-4&lt;/a&gt;, et d'ailleurs, si vous achetez une caméra professionnelle, il est écrit dans la doc que l'usage est strictement familial et qu'&lt;a href=&quot;http://www.mpegla.com/main/programs/avc/Documents/avcweb.pdf&quot;&gt;il vous faut acquérir une licence auprès du MPEG-LA pour tout usage à destination publique et/ou professionnelle&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;a class=&quot;r&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/1810-tagcpupm-licencecamera.png&quot; title=&quot;&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1810-tagcpupm/.1810-tagcpupm-licencecamera_s.png&quot; alt=&quot;1810-tagcpupm-licencecamera.png&quot; /&gt;&lt;/a&gt;
Si si : Extrait du manuel de &lt;a href=&quot;https://pro.sony/fr_FR/products/handheld-camcorders/pxw-z190&quot;&gt; la caméra professionnelle Sony PXW-Z190&lt;/a&gt;, page&amp;nbsp;119 (&lt;a href=&quot;https://pro.sony/fr_FR/support/manuals/pxw-z190-ops-manual-update&quot;&gt;garanti sans trucage&lt;/a&gt;)&amp;nbsp;:
&lt;/p&gt; 
&lt;blockquote&gt;
Ce produit est accordé sous licence, sous le couvert de la licence de portefeuille de brevets AVC pour une utilisation privée et non commerciale d’un consommateur pour&amp;nbsp;:&lt;br /&gt;
(i) encoder des vidéos conformément à la norme AVC (&lt;q&gt;AVC vidéo&lt;/q&gt;) et/ou&lt;br /&gt;
(ii) décoder des vidéos AVC encodées par un client dans le cadre d’une activité personnelle et non commerciale et/ou obtenues auprès d’un vendeur de vidéos sous licence AVC vidéo.&lt;br /&gt;
Aucune licence n’est attribuée ou ne doit être destinée pour tout autre usage. il est possible d’obtenir des informations complémentaires auprès de MPEG LA, L.L.C. voir &lt;a href=&quot;http://www.mpegla.com&quot;&gt;http://www.mpegla.com&lt;/a&gt;
&lt;/blockquote&gt;
Pour une caméra professionnelle vendue à 4000&amp;nbsp;€, ne pas pouvoir utiliser les images tournées avec, ça fait &lt;strong&gt;un peu&lt;/strong&gt; mal. &lt;small&gt;BTW si vous souhaitez m'en offrir une pour les captations vidéos, je ne vous retiens pas :D...&lt;/small&gt; 
&lt;/p&gt;
&lt;p&gt;
Le &lt;a href=&quot;http://www.mpegla.com/main/default.aspx&quot;&gt;MPEG-LA&lt;/a&gt; n'est pas un organisme de recherche, mais la structure juridique facturant l'usage des brevets liés aux formats &lt;abbr&gt;MPEG&lt;/abbr&gt;, mis dans un pot commun par plusieurs sociétés. Il &lt;q&gt;propose&lt;/q&gt; un ensemble de formules de facturations, allant du volume horaire de diffusion TV (cable, satellite et hertzien), au nombre de puces de décodage produites et au nombre de vues d'une vidéo sur le web. Pour donner une idée, &lt;a href=&quot;https://www.macg.co/ailleurs/2010/01/mozilla-face-au-probleme-h264-6665&quot;&gt;Mozilla aurait dû payer&lt;/a&gt; à l'époque 9 millions&amp;nbsp;$ par mois pour que Firefox puisse lire du &lt;abbr&gt;MPEG&lt;/abbr&gt; sur les systèmes d'exploitations qui ne paient pas une licence, c'est à dire Linux, *BSD et consorts. Avec une telle somme, on pourrait financer d'autres projets logiciels.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;D'où l'union improbable entre certains développeurs de navigateurs (Mozilla et Google en premiers) pour la conception commune de codecs libres.&lt;/strong&gt; La reprise du Ogg Vorbis, &lt;a href=&quot;https://www.theora.org/&quot;&gt;le Ogg Theora&lt;/a&gt; puis spécifiquement &lt;a href=&quot;https://www.webmproject.org/&quot;&gt;conçus pour le web comme WebM&lt;/a&gt;, voire &lt;a href=&quot;https://blog.mozilla.org/blog/2013/10/30/video-interoperability-on-the-web-gets-a-boost-from-ciscos-h-264-codec/&quot;&gt;des implémentations en n'utilisant que des parties libérées&lt;/a&gt; de brevets (comme &lt;a href=&quot;http://www.openh264.org/&quot;&gt;OpenH264 sponsorisé par Cisco pour que Firefox puisse faire de la visioconférence&lt;/a&gt;) et bien d'autres, etc… Sauf que ces licences libres ne sont pas disponibles sur tous les navigateurs et et manquent cruellement d'implémentations &lt;em lang=&quot;en&quot;&gt;hardware&lt;/em&gt;. Les politiques commerciales des fondeurs de puces pour smartphones sont à blâmer.&lt;br /&gt;
Comme aujourd'hui, on parle surtout de son et vue la puissance de calcul de nos smartphones, on se contentera d'engueuler un navigateur web pour mobiles qui refuse d'inclure les formats libres populaires&amp;nbsp;: Safari.
&lt;/p&gt;
&lt;p&gt;
Évidemment, &lt;a href=&quot;https://en.wikipedia.org/wiki/Comparison_of_audio_coding_formats#General_information&quot;&gt;une telle fragmentation n'a pas aidé&lt;/a&gt; à voir se dégager un format de référence sans risque juridique pour ceux qui font des sites web. Donc on en vient à proposer au moins 2 formats de sonores différents.&lt;br /&gt;
&lt;strong&gt;Pro tip : proposez votre sonore encodé en mp4 ou ogg ou webm, puis terminez par une source encodée en mp3 &lt;q&gt;traditionnel&lt;/q&gt;&lt;/strong&gt; pour compléter le support, comme suit&amp;nbsp;:
&lt;/p&gt;
&lt;code&gt;&lt;pre&gt;
&amp;lt;&lt;strong&gt;audio&lt;/strong&gt; controls&amp;gt;
  &amp;lt;&lt;strong&gt;source&lt;/strong&gt; src=&quot;https://dascritch.net/post/2018/11/06/&lt;span class=&quot;url&quot;&gt;zou.ogg&lt;/span&gt;&quot; type=&quot;&lt;em&gt;audio/ogg; codecs=vorbis&lt;/em&gt;&quot; /&amp;gt;
  &amp;lt;&lt;strong&gt;source&lt;/strong&gt; src=&quot;https://dascritch.net/post/2018/11/06/&lt;span class=&quot;url&quot;&gt;zou.mp3&lt;/span&gt;&quot; type=&quot;&lt;em&gt;audio/mpeg&lt;/em&gt;&quot; /&amp;gt;
&amp;lt;/&lt;strong&gt;audio&lt;/strong&gt;&amp;gt;
&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;
Et là, on a pu s'amuser quand il y eu un support correct des &lt;em lang=&quot;en&quot;&gt;streams&lt;/em&gt;. Notamment avec &lt;a href=&quot;https://developer.apple.com/streaming/&quot;&gt;le &lt;abbr&gt;HLS&lt;/abbr&gt; aka &lt;q lang=&quot;en&quot;&gt;Http live Streaming&lt;/q&gt; d'Apple&lt;/a&gt;, mais là aussi, il ne fut pas le seul protocole de &lt;em lang=&quot;en&quot;&gt;streaming&lt;/em&gt; et il n'était pas supporté partout, avec des concurrents aussi clivants. À ce jour, &lt;a href=&quot;https://caniuse.com/#feat=mediasource&quot;&gt;l'API standard Media Source Extension n'est toujours pas supporté par les iTrucs d'Apple, malgré sa standardisation par le W3C.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Et tous ces soucis sont aussi survenus pour avec WebAudio par effet de &lt;a href=&quot;http://www.lelombard.com/albums-fiche-bd/ric-hochet/panique-sur-web,554.html&quot;&gt;Ric Hochet&lt;/a&gt;.&lt;br /&gt;
&lt;small&gt;&lt;a href=&quot;https://www.w3.org/blog/news/archives/7292&quot;&gt;l'API WebAudio&lt;/a&gt; est l'équivalent fonctionnel de la balise &lt;code&gt;&amp;lt;&lt;strong&gt;canvas&lt;/strong&gt;&amp;gt;&lt;/code&gt; pour le graphisme&amp;nbsp;: &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Best_practices&quot;&gt;une feuille blanche adressable&lt;/a&gt; d'où l'&lt;a href=&quot;https://webaudio.github.io/demo-list/&quot;&gt;on peut créer ou manipuler n'importe quel son.&lt;/a&gt;&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Et la suite explique &lt;a href=&quot;https://dascritch.net/post/2018/11/06/Reconstruire-son-lecteur-audio-pour-le-web&quot;&gt;pourquoi et comment j'ai étendu la balise &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt;.&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>Les joies de la communauté open-source</title>
		<link>https://dascritch.net/post/2017/09/04/Les-joies-de-la-communaut%C3%A9-open-source</link>
		<guid isPermaLink="false">urn:md5:9e364bd4d8dbeefa5b323c8a40fb07bb</guid>
		<dc:date>2017-09-04T13:45:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>… comme par exemple s'ajouter un truc à faire, et quelqu'un te dit qu'il a déjà fait.		&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;… comme par exemple s'ajouter un truc à faire, et quelqu'un te dit qu'il a déjà fait.&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;
Afin de me familiariser avec les &lt;em lang=&quot;en&quot;&gt;add-ons&lt;/em&gt; du navigateur Firefox, j'avais conçu une extension extrêmement simple : &lt;a href=&quot;https://addons.mozilla.org/fr/firefox/addon/anchors-reveal/&quot;&gt;&lt;em lang=&quot;en&quot;&gt;anchors-reveal&lt;/em&gt;&lt;/a&gt;, qui permette de lier à un paragraphe précis au milieu d'une longue page. &lt;a href=&quot;https://dascritch.net/post/2014/06/24/Sniffeur-d-ancre&quot;&gt;J'avais déjà blogué à ce sujet&lt;/a&gt;. Trèèèèès utile quand on blogue sur un sujet technique.
&lt;/p&gt;
&lt;p&gt;
Des &lt;em lang=&quot;en&quot;&gt;add-ons&lt;/em&gt; qui proposent ce service, il en existait déjà une demi-douzaine, mais elles n'ont clairement pas été conçues dans une optique de simplicité d'usage. Le but du jeu était de faire une fonctionnalité le plus minimaliste possible&amp;nbsp;: un bouton qui s'installe dans la barre d'outils et qui révèle les ancres nommées d'une page en superposant un lien direct. 
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1406-AnchorsReveal-bouton-firefox.jpg&quot; alt=&quot;&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
Je voulais à la fois me frotter à l'écriture d'un &lt;em lang=&quot;en&quot;&gt;add-on&lt;/em&gt;, mais surtout au &lt;a href=&quot;https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/cfx&quot;&gt;&lt;em lang=&quot;en&quot;&gt;framework&lt;/em&gt; (obsolète) cfx&lt;/a&gt;, que j'ai vite converti vers le &lt;a href=&quot;https://wiki.mozilla.org/Jetpack&quot;&gt;framework (obsolète) JetPack&lt;/a&gt; qui facilit&lt;em&gt;ait&lt;/em&gt; l'écriture de ces &lt;em lang=&quot;en&quot;&gt;add-on&lt;/em&gt;. Cela m'a aussi permis d'essayer le processus de validation de la communauté Mozilla, qui a été formidable, prévenante et qui aide vraiment à gagner en qualité de code.
&lt;/p&gt;
&lt;p&gt;
Et par ailleurs, &lt;a href=&quot;https://addons.mozilla.org/fr/firefox/addon/anchors-reveal/&quot;&gt;j'avais poussé mon code source sur mon repo github&lt;/a&gt;, ce qui m'évitait à devoir maintenir un repo git. Ce qui me permettait d'éventuellement profiter de quelques fonctions sympathiques comme la fusion de branches et un rapport de bugs.
&lt;/p&gt;
&lt;h3 id=&quot;reecriture-firefox&quot;&gt;Arrive la ré-écriture de Firefox&lt;/h3&gt;
&lt;p&gt;
La Mozilla fondation s'est lancé dans un projet audacieux, &lt;a href=&quot;https://wiki.mozilla.org/Quantum&quot;&gt;nom de code : Quantum&lt;/a&gt; &lt;small&gt;(la blague ne marche qu'en France)&lt;/small&gt;. Objectif : reprendre de vitesse le Chrome de Google. Un retour en avant car &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Glossaire/Chrome&quot;&gt;le terme &lt;q&gt;chrome&lt;/q&gt; désignait à l'origine l'interface de Firefox&lt;/a&gt;. 
&lt;br /&gt;
Le travail est titanesque&amp;nbsp;: ré-écrivant des parties importantes de son navigateur, en passant à &lt;a href=&quot;https://www.rust-lang.org/fr-FR/&quot;&gt;Rust, un langage bas niveau conçu pour éviter les bugs fréquents&lt;/a&gt;, et surtout en virant un nombre impressionnant de technologies dont les buts furent atteint par d'autres technologies standardisées. C'est le cas &lt;a href=&quot;https://dascritch.net/?q=XUL&quot;&gt;du vénérable XUL&lt;/a&gt; (le langage qui décrivait le &lt;q&gt;chrome&lt;/q&gt;, l'interface graphique de Firefox), hélas,… mais pas tant &lt;q&gt;hélas&lt;/q&gt;.
&lt;/p&gt;
&lt;p&gt;
Mais cela voulait aussi dire abandonner Jetpack, et donc devoir faire un nouveau portage, dans le format Web-Extension.
&lt;br /&gt;
&lt;a href=&quot;https://browserext.github.io/browserext/&quot;&gt;Web-extension est standardisé par le W3C&lt;/a&gt;. Cela veut dire qu'&lt;a href=&quot;https://developer.mozilla.org/en-US/Add-ons/WebExtensions&quot;&gt;un &lt;em lang=&quot;en&quot;&gt;add-on&lt;/em&gt; Firefox est utilisable quasi tel quel par Chrome, Opera, bientôt par Edge&lt;/a&gt; et d'ici 10 ans, peut-être par Safari…
&lt;br /&gt;
Que du bonheur !
&lt;/p&gt;
&lt;p&gt;
J'ai donc &lt;a href=&quot;https://github.com/dascritch/anchors-reveal/issues/13&quot;&gt;ouvert un ticket sur le repo&lt;/a&gt;.
&lt;br /&gt;
Ce &lt;q&gt;bug&lt;/q&gt;, je me l'étais écrit comme mémo, en me disant que je ferais ce travail le week-end suivant où à la prochaine nuit d'insomnie.
&lt;/p&gt;

&lt;h3 id=&quot;magie-communaute&quot;&gt;C'est là que la magie de la communauté opère&lt;/h3&gt;
&lt;p&gt;
À ma grande surprise, 6 heures plus tard, &lt;a href=&quot;https://github.com/makyen&quot;&gt;un individu du pseudo de Makyen&lt;/a&gt;, m'annonce qu'il a déjà effectué ce travail et qu'il a même corrigé quelques bugs.
&lt;/p&gt;
&lt;p&gt;
Quelqu'un avait déjà fait le travail ! Je n'avais plus qu'à merger &lt;a href=&quot;https://github.com/dascritch/anchors-reveal/pull/15/commits/d881c9374d077fe6dbeae624e49c62186e96c643&quot;&gt;sa contribution&lt;/a&gt;, ajouter un script de packaging et l'envoyer sur &lt;a href=&quot;https://addons.mozilla.org/fr/firefox/addon/anchors-reveal/&quot;&gt;le site des add-ons de Firefox&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Ben voilà, ce petit projet sans prétention, purement égoïste, se trouvait être utile pour d'autres personnes, au point que certains étaient prêts à me donner un coup de main pour le maintenir à jour. Pourtant, &lt;a href=&quot;https://dascritch.net/post/2009/07/03/Lopen-source-ne-soublie-pas-comme-les-recettes-de-cuisine&quot;&gt;je savais que cela pouvait m'arriver&lt;/a&gt;, mais la surprise fait chaud au cœur.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Thank you a lot, Makyen !&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Et n'oubliez pas : vous pouvez toujours aider un projet open-source. Pas forcément en codant, mais simplement en aidant au design, en écrivant la doc, des tutos, en aidant à répondre aux questions des gens perdus. N'hésitez pas&amp;nbsp;!
&lt;/p&gt;
&lt;h3 id=&quot;onelastthing&quot;&gt;Oh ! Une dernière chose !&lt;/h3&gt;
&lt;p&gt;
Je suis actuellement sur Firefox Nightly (57), et je peux vous dire que d'ici deux mois, vous allez être décoiffés par le gain de vitesse de Firefox. Ils ont viré plein de vieux trucs, retravaillé une partie du reste, et le coup de &lt;em lang=&quot;en&quot;&gt;boost&lt;/em&gt; s'en ressent&amp;nbsp;!
&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>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>Souvenirs de Paris Web 2016</title>
		<link>https://dascritch.net/post/2016/10/04/Souvenirs-de-Paris-Web-2016</link>
		<guid isPermaLink="false">urn:md5:a95ea49a248084b92a6f53832a1399ca</guid>
		<dc:date>2016-10-04T06:30:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Sortons</dc:subject>
        
    <description>Paris Web te rappelle une chose fondamentale : c'est beau d'avoir des valeurs communes et l'amitié avec. Célébrons nos compétences !		&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;Paris Web te rappelle une chose fondamentale : c'est beau d'avoir des valeurs communes et l'amitié avec. Célébrons nos compétences !&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;a href=&quot;http://paris-web.fr&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/sortons/.1609-logo-parisweb_t.png&quot; alt=&quot;Paris Web&quot; class=&quot;r&quot; /&gt;&lt;/a&gt;
Si vous êtes sur un ordi de bureau, cliquez la première image, puis clic à droite (désolé, le script a 10 ans, faut que je le remettre d'équerre)
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a href=&quot;https://dascritch.net/post/2013/12/19/Vers-l-engagement-politique-%C3%A0-Paris-Web&quot;&gt;Mon premier Paris Web (2013) fut au Palais Broignart&lt;/a&gt;. Depuis, c'est chez un autre Grand Dieu que je respecte…&lt;br /&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-1.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-1_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
La rituelle soirée des orateurs, où se font des confidences très indiscrètes. Ce sont les premiers &lt;q&gt;amis de 5 minutes&lt;/q&gt; que je revois, déjà le cœur qui bondit. Et là aussi, j'ai eu la surprise de voir combien &lt;a href=&quot;http://cpu.pm&quot;&gt;notre émission CPU&lt;/a&gt; pouvait susciter d'émotions.
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-2.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-2_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-3.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-3_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-4.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-4_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-5.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-5_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Et puis le lendemain, prendre son accréditation, découvrir la fresque en hommage à Mœbius (que tu nous manques...), parler avec d'autres amis, faire de nouvelles rencontres.
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-6.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-6_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-7.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-7_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-8.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-8_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-9.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-9_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-10.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-10_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Je passe sur le fait que la licorne est toujours très joyeuse, pour confirmer que ce t-shirt est &lt;a href=&quot;https://dascritch.net/post/2012/02/19/Remix-Is-Everything-%3A-Conclusion&quot;&gt;une référence à «&lt;em&gt;&amp;nbsp;Everything is a remix&amp;nbsp;&lt;/em&gt;»&lt;/a&gt;.
&lt;/p&gt;
&lt;h3 id=&quot;go&quot;&gt;Puis c'est parti pour les premières conférences&lt;/h3&gt;
&lt;p&gt;
 Encore une fois, &lt;a href=&quot;https://dascritch.net/tag/privacy&quot;&gt;le sujet de la vie privée&lt;/a&gt; montre qu'il prend dans les conférences techniques une vraie importance, vectrice de valeurs aussi importantes que l'accessibilité qui est la signature de Paris Web.
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-11.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-11_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-12.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-12_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-13.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-13_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-14.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-14_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-15.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-15_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-16.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-16_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-18.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-18_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-19.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-19_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;

&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-20.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-20_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-21.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-21_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-22.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-22_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-23.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-23_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-24.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-24_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Sans conteste, l'adorable petite release d'&lt;a href=&quot;http://tut-tuuut.github.io/&quot;&gt;Agnès Hasseer&lt;/a&gt; était la star de l'événement. Ça gazouillait et réagissait aux présentations, mettant quelques sourires
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-25.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-25_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-26.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-26_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-27.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-27_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-28.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-28_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-29.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-29_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Eh oui, qu'on ne me dise pas que je suis seul à ne pas être en costard cravate lors de ce genre d'événement. C'est même plutôt l'inverse… Quant aux goodies, mention spéciale à celui d'Elie qui m'a bien fait rire
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-30.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-30_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-31.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-31_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-32.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-32_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-33.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-33_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
(insérer ici un trou noir)
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-34.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-34_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-35.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-35_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-36.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-36_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-37.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-37_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-38.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-38_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Sur la dernière photo, je suis super heureux de retrouver &lt;a href=&quot;http://www.pixelastic.com/&quot;&gt;Tim Carry&lt;/a&gt;, qui m'a convaincu de devenir développeur web professionnellement en 2007, c'était sur un commentaire chez Boulet, et il l'a amèrement regretté depuis. Une petite pause (jetons un voile pudique sur les soirées), et on enchaîne sur ce qui se passe sans enregistrements vidéos...
&lt;/p&gt;
&lt;h3 id=&quot;samedi&quot;&gt;Les ateliers du Samedi&lt;/h3&gt;

&lt;p class=&quot;c&quot;&gt;

&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-39.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-39_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;

&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-40.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-40_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-41.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-41_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-42.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-42_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Oui, j'ai adoré l'atelier éducation animé par &lt;a href=&quot;http://codingschool.fr&quot;&gt;Coding School&lt;/a&gt;.  Et comme vous pouvez le voir &lt;a href=&quot;https://dascritch.net/post/2014/05/13/Pourquoi-nous-collons-des-stickers-sur-nos-portables&quot;&gt;sur plusieurs portables, les stickers&lt;/a&gt; du bouquin de &lt;a href=&quot;https://bloglaurel.com/&quot;&gt;Laurel&lt;/a&gt; (on en reparle prochainement)&amp;nbsp;! 
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-43.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-43_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-44.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-44_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-45.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-45_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Le samedi soir sur les rotules, tout le monde est bien content que cela se termine, mais on est déjà au regret de se quitter.
&lt;/p&gt;
&lt;p class=&quot;c&quot;&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-46.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-46_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-47.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-47_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a rel=&quot;lightbox[parisweb2016]&quot; href=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/1610-ParisWeb-48.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1610-ParisWeb2016/.1610-ParisWeb-48_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Si vous cherchez d'autres photos, je vous renvoie &lt;a href=&quot;https://www.flickr.com/groups/parisweb2016/pool/&quot;&gt;sur le pool flickr&lt;/a&gt;.

Je n'aurai qu'un mot : hâte d'y revenir au plus vite. Comme pour Sud Web.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>CPU Ex0010 : Bonjour à toi, enfant du futur immédiat : Organisons des conférences</title>
		<link>https://dascritch.net/post/2015/11/27/CPU-Ex0010-%3A-Bonjour-%C3%A0-toi%2C-enfant-du-futur-imm%C3%A9diat-%3A-Organisons-des-conf%C3%A9rences</link>
		<guid isPermaLink="false">urn:md5:b14b172bb307171d47b646ea8b6a0589</guid>
		<dc:date>2015-11-27T06:58:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Sortons</dc:subject>
        
    <description>Une chronique qui n'est vraiment pas évidente à écrire car rien ne s'est passé exactement comme prévu.		&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 chronique qui n'est vraiment pas évidente à écrire car rien ne s'est passé exactement comme prévu.&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;a href=&quot;http://cpu.dascritch.net/post/2015/11/26/Ex0010-Conf%C3%A9rences&quot;&gt;Ceci est une partie du script de la release Ex0010 du programme CPU, diffusé Jeudi 12 à 11h. Plus d'infos sur le site de l'émission. &lt;img src=&quot;http://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 nous écouteras bien au chaud dans ton oreille.
&lt;/p&gt;
&lt;p&gt;
Il nous est difficile de faire une émission comme la notre après les événements du Vendredi 13 Novembre dernier.
&lt;/p&gt;
&lt;p&gt;
D'abord parce que certains de nos amis, de nos connaissances, de nos contacts pour ce programme furent proches voire sur une scène du drame à l'heure fatidique.
&lt;/p&gt;
&lt;p&gt;
Ensuite, parce que nous sommes certes un peu rigolos, mais que surtout nous sommes volontairement décorrélé de l'actualité immédiate, dans l'optique d'être le plus objectif possible. Or la release que nous avions initialement prévu la semaine dernière concernait la surveillance globale, avec comme invités La Quadrature Du Net, thématique importante du Capitole Du Libre de cette année.&lt;br /&gt;
Une situation qui s'est très brusquement accéléré avec l'état d'urgence.
&lt;/p&gt;
&lt;p&gt;
Or, le sujet des libertés numériques est très en désaccord avec l'ambiance générale suite aux attentats. Donc l'enregistrement que nous avions prévu samedi 14, soit le lendemain des tragiques événements, a été annulé. Nous avions l'impression que parler de vie privée sur l'espace numérique pourrait nous être publiquement reproché. Impression confirmée dimanche 15 par &lt;a href=&quot;http://www.francetvinfo.fr/replay-jt/france-2/20-heures/jt-de-20h-du-dimanche-15-novembre-2015_1165803.html&quot;&gt;le passage de Bernard Cazeneuve, le ministre de l'intérieur, au journal de 20h de France 2&lt;/a&gt; qui a clairement exprimé qu'il allait combattre de chiffrement.
&lt;/p&gt;
&lt;p&gt;
Comme nous ne voulons ni mettre en péril l'ambiance de notre programme, ni celle de notre radio hôte, nous avons préféré décaler cette thématique, malgré son actualité immédiate. Donc nous en parlerons la semaine prochaine, dans une release de notre programme CPU qui s'annonce là aussi très jouasse.
&lt;/p&gt;
&lt;p&gt;
Ahem.
&lt;/p&gt;
&lt;p&gt;
D'un autre côté, Solarus et moi-même étions en charge d'une suite de conférences pour l'événement Capitole du Libre sus-nommé. Une suite de conférences et d'ateliers que nous avons maintes fois couvert sur cette antenne par des directs, et que donc nous connaissons bien.&lt;br /&gt;
Il était donc intéressant pour nous de vivre l'expérience depuis l'intérieur, mais aussi de faire venir après coup les organisateurs pour parler des conférences professionnelles. Car nous avons déjà parlé de Paris Web, mais il y a aussi les &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;JS Conf&lt;/a&gt;, les &lt;a href=&quot;https://dascritch.net/tag/php&quot;&gt;PHP forum&lt;/a&gt;, les &lt;a href=&quot;https://dascritch.net/tag/libre&quot;&gt;Journées Mondiales du Logiciel Libre&lt;/a&gt;, et plein d'autres.
&lt;/p&gt;
&lt;p&gt;
Alors nous avons voulu comprendre pourquoi mais surtout comment sont organisés des journées de conférences destinées à un public surtout professionnel, ou à un niveau de formation digne de l'enseignement supérieur, et tout ceci uniquement en bénévole, sans aucun bénéfice derrière.&lt;br /&gt;
Car nous ne parlerons pas des showcases technologiques de sociétés comme IBM, Amazon, Apple, Google et autres Salesfront qui peuvent se payer les prestations d'organisateurs de salon&amp;nbsp;; Non, nous parlerons en cette heure d'individus qui se regroupent en association pour parler de technologies tout aussi importantes, mais sans les moyens marketing derrière. Et là dedans, j'y compte aussi des manifestations qui réunissent des makers comme TedX, Fablab Festival, THSF ou l'Agile Tour qui a lieu cette semaine à Toulouse&amp;nbsp;; par opposition par exemple à Futura-Polis qui aura aussi lieu ce week-end, mais dont le grand barnum est lourdement sponsorisé alors que le public attendu est plus dans les CSP+ lecteurs du Point et autres élus politiques qui sont là pour bien se faire voir en période électorale.
&lt;/p&gt;
&lt;p&gt;
Alors comment choisi-t-on un espace, comment prépare-t-on le programme, comment sélectionne-t-on des orateurs, comment réserve-t-on des hébergements pour eux, comment négocie-t-on la restauration sur place voire comment trouve-t-on des goodies qui vont du tour de cou jusqu'au mug. C'est notre enquête de cette semaine
&lt;/p&gt;
&lt;p&gt;
[jingle reportage]
&lt;/p&gt;
&lt;p&gt;
Sauf que pour notre enquête d'investigation dans le Capitole Du Libre, la situation s'est brusquement compliquée suite aux attentats. Les faiblesses des événements autour de logiciels organisé par des bénévoles sont ressortis d'autant plus cruellement&amp;nbsp;: en l'occurrence, il a suffit d'une demande de durcissement des conditions d'accès, et donc d'un refus de prêt de locaux.
&lt;/p&gt;
&lt;p&gt;
À moins de 5 jours de l'événement, il a fallut pour les organisateurs trouver de nouveaux lieux pour se retourner ou annuler purement et simplement le Capitole Du Libre.
&lt;/p&gt;
&lt;p&gt;
Eh ben figurez-vous qu'ils ont fait les deux&amp;nbsp;!&lt;br /&gt;
Le Capitole du Libre fut annulé, et en lieu et autre place fut institué le Bazar Du Libre.
&lt;/p&gt;
&lt;p&gt;
Enfant du Futur Immédiat, alors que je ne fais que conclure le billet d'introduction de cette release, je peux déjà te donner la morale&amp;nbsp;: rien ne vaut la résilience d'un projet quand tous les acteurs sont très motivés.
&lt;/p&gt;</content:encoded>
    
    
      <enclosure url="/vrac/Emissions/CPU/podcast/0010-CPU%2826-11-15%29.mp3"
      length="58565860" type="audio/mpeg3" />
    
    
      </item>
  
	<item>
		<title>Bonjour à toi, enfant du futur immédiat : Journalisme de données</title>
		<link>https://dascritch.net/post/2015/11/13/Bonjour-%C3%A0-toi%2C-enfant-du-futur-imm%C3%A9diat-%3A-Journalisme-de-donn%C3%A9es</link>
		<guid isPermaLink="false">urn:md5:efd692a190ca6dbbd2a3ab7249e70dfe</guid>
		<dc:date>2015-11-13T13:50:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Des données en très gros volume, des feuilles de calculs et des formules, des générateurs de graphiques et des interactions pour les lecteurs.		&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;Des données en très gros volume, des feuilles de calculs et des formules, des générateurs de graphiques et des interactions pour les lecteurs.&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.dascritch.net/post/2015/11/12/Ex0009-Datajournalisme&quot;&gt;Ceci est une partie du script de la release Ex0009 du programme CPU, diffusé Jeudi 12 à 11h. Plus d'infos sur le site de l'émission. &lt;img src=&quot;http://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 nous écouteras parce que tu te dis que tu écoutes un programme d'information, alors qu'en fait pas du tout&amp;nbsp;: nous faisons un programme  d'informatique. Nuance. Et à ne pas confondre avec &lt;q&gt;un programme informatique&lt;/q&gt;. Nous, on se télécharge dans ton oreille.
&lt;/p&gt;
&lt;p&gt;
Aujourd'hui, nous allons parler d'information, (comme quoi...) , et de journalisme dans une branche assez spécialisée mais actuellement très en vogue : &lt;strong&gt;Le datajournaliste&lt;/strong&gt;. Pour ceux qui furent attentifs à la &lt;a href=&quot;http://cpu.dascritch.net/post/2015/11/05/Ex0008-L-English-au-travail&quot;&gt;release de la semaine dernière&lt;/a&gt;, oui, c'est un mot valise, qui associe un mot français à un mot anglais, mais là n'est pas la question M. Elkabbach&amp;nbsp;!
&lt;/p&gt;
&lt;p&gt;
Le datajournalisme, n'est pas que l'alliance entre le Word qui édite les articles et l'Excel qui manipule des données dans le même Office. Non, le  datajournalisme est une nouvelle manière de mettre en scène l'information, de façon moins textuelle et plus globale.
&lt;/p&gt;
&lt;p&gt;
&lt;q&gt;Globale&lt;/q&gt; au sens qu'au lieu de prendre des témoignages épisodiques par micro-trottoirs et best-of des lieux communs les plus affligeants, le datajournalisme fait une vraie analyse statistique, voire même parfois une anonymisation de données englobant une population complète. On est bien au-delà du ressenti au doigt mouillé, avec une précision manométrique des courants.
&lt;/p&gt;
&lt;p&gt;
Avant, le datajournalisme consistait surtout à représenter l'information autrement qu'avec des mots. Ainsi apparurent dans la presse les cartes, camemberts et autres chartes. Les sources de données sont forcément des sources de référence, fiable, ou sinon de terrain. Ainsi, les informations statistiques publiques ou de grandes compagnies sont considérées comme &lt;q&gt;de référence&lt;/q&gt;, alors que les informations qui sont recueillies par des volontaires, par des lecteurs, etc.. doivent passer par une étape de modération afin de s'enquérir de sa fiabilité.
&lt;/p&gt;
&lt;p&gt;
D'une manière assez amusante, le datajournalisme est une discipline assez ancienne, qui est apparu dès que s'est montré le besoin d'afficher des cartes, ou de monter des proportions entre nombres. Comme le disait Napoléon à ses généraux dans sa war-room, tout en planquant sa bouteille de fine (Napoléon, of course) dans son veston, &lt;a href=&quot;https://www.youtube.com/watch?v=TnbAqikfniY&quot;&gt;&lt;q&gt;Une dataviz vaux mieux que qu'un rapport de 100000 signes&lt;/q&gt;.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Si vous lisez aussi &lt;a href=&quot;http://cpu.pm&quot;&gt;les textes des chroniques et les références de nos émissions sur notre site web &lt;code&gt;cpu.pm&lt;/code&gt;&lt;/a&gt;, vous avez peut-être remarqué que nous tentons d'éviter de lier vers la Wikipédia, afin de mener des recherches d'articles de référence par notre chef. Or, il se trouve que &lt;a href=&quot;https://fr.wikipedia.org/wiki/Journalisme_de_donn%C3%A9es&quot;&gt;l'article &lt;strong&gt;journalisme de données&lt;/strong&gt; de l'encyclopédie collaborative fait référence&lt;/a&gt; à une carte établie en 1854, des quartiers miséreux de Londres, &lt;a href=&quot;http://www.theguardian.com/news/datablog/2013/mar/15/john-snow-cholera-map&quot;&gt;avec un point noir devant chaque foyer comptant un décès dû au choléra.&lt;/a&gt; Avec l'indication des pompes à eau publique, cette carte montrait directement la corrélation entre les victimes de l'épidémie et les fontaines à eau publiques.
Durant cette même décennie, &lt;a href=&quot;http://www.theguardian.com/news/datablog/2011/jul/28/data-journalism&quot;&gt;en 1858, on a une représentation en camemberts indiquant les proportions entre les différentes causes de décès des soldats de Sa Majestée.&lt;/a&gt;&lt;br /&gt;
Un siècle plus tard, &lt;a href=&quot;http://www.npr.org/sections/alltechconsidered/2012/10/31/163951263/the-night-a-computer-predicted-the-next-president&quot;&gt;lors des élections présidentielles américaines de 1952, la chaine CBS réalise un coup de maître en estimant la victoire d'Eseinhower à partir de projections faites sur ordinateur.&lt;/a&gt; Alors attention, projection non pas graphique, mais lue par un speaker à partir d'une sortie papier d'imprimante.
&lt;/p&gt;
&lt;p&gt;
Mais si ces métiers sont désormais passés de l'illustration au crayon et à la plume à celle produite par infographie et aux templates graphiques alimentés des feuilles de calculs&amp;nbsp;; nous avions toujours des présentations surtout statiques.
&lt;/p&gt;
&lt;p&gt;
Le datajournalisme, c'est aussi la présentation de données d'une manière interactive. ce sont les pages webs dynamiques côté navigateur qui en montrent vraiment l'importance. De Flash &lt;a href=&quot;https://dascritch.net/tag/html&quot;&gt;aux technologies HTML5&lt;/a&gt; comme le tri de données dans les tableaux dynamiques, puis &lt;a href=&quot;https://dascritch.net/tag/svg&quot;&gt;le graphisme vectoriel en SVG&lt;/a&gt;, aux représentations en 3D avec WebGL. Et je n'oublie pas le présentateur TV qui se met sur un fond vert et fait mine de toucher une incrustation OpenGL, ou qui touche un gigantesque écran graphique, histoire de montrer que sa chaîne TV a mis plus de moyens blingbling que ses concurrentes, et que donc les informations se voient mieux sur le canal 3D. Chaussez vos lunettes.
&lt;/p&gt;
&lt;p&gt;
Mais au-delà du talent d'écriture, de présentation et de mise en forme des données, il faut désormais aussi être un réel développeur front-end, c'est à dire un spécialiste des navigateurs web. Si &lt;a href=&quot;https://dascritch.net/tag/javascript&quot;&gt;des bibliothèques javascript&lt;/a&gt; facilitent la transformation graphique de données, &lt;a href=&quot;http://d3js.org/&quot;&gt;tel l'excellent D3.js&lt;/a&gt;, il faut néanmoins s'y connaître &lt;a href=&quot;http://jsforcats.com&quot;&gt;un minimum en programmation&lt;/a&gt; et aussi en &lt;a href=&quot;https://dascritch.net/tag/design&quot;&gt;design et en accessibilité&lt;/a&gt; pour en faire une présentation attrayante, informative, fonctionnelle et compréhensible.
&lt;/p&gt;
&lt;p&gt;
Et donc, il n'est pas étonnant de voir des développeurs étroitement associés, soit dans le quotidien britannique The Guardian, soit en France avec &lt;a href=&quot;http://owni.fr/&quot;&gt;le regretté site OWNI.&lt;/a&gt;&lt;br /&gt;
Il y a donc parfois autant de développement logiciel dans un dossier en datajournalisme qu'en investigation de fond.&lt;br /&gt;
L'énorme différence est la pluridisciplinarité de l'exercice.
&lt;/p&gt;
&lt;p&gt;
Désormais, il y a aussi l'open-data, et l'application (enfin&amp;nbsp;!) de &lt;a href=&quot;http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000000339241&quot;&gt;la loi n° 78-753 du 17 juillet 1978 instituant le libre accès des citoyens aux données produites par l'Administration.&lt;/a&gt;&lt;br /&gt;
...&lt;br /&gt;
Oui, 1978, et on ne parle d'open-data que maintenant... un tel délai démontre le retard de l'administration à répondre.&lt;br /&gt;
Ce qui permet de vérifier, mais aussi de faire apparaître certains sujets qui n'apparaissaient pas jusque là. Les détails qui ressortent comme quand on joue sur une photo en jouant les contrastes, les couleurs, en zoomant ou en la tordant.&lt;br /&gt;
Arrêtez de jouez Les Experts Miami™ dans le fond pendant que j'explique, ça me déconcentre.
&lt;/p&gt;
&lt;p&gt;
Mais de là, il y a aussi le problème de l'information qui est déformée pour correspondre à une conclusion espérée. Même dans le datajournalisme, il n'est pas impossible de fausser les faits, puisque très peu de personnes regardent derrière les graphs les données d'origine. En modifiant les unités par exemple, ou même, méthode connue depuis les débuts des instituts de sondages, en ayant une question qui n'est pas totalement neutre.
&lt;br /&gt;
À l'inverse, le datajournalisme peut réfuter un discours mensonger ou erroné. Mais il devient alors d'autant plus critique d'avoir des sources au-delà de toute critique. Forcément, fact-checking amène inspection d'autant plus inquisitrice.
&lt;/p&gt;
&lt;p&gt;
Enfant du Futur Immédiat, de même qu'il faut apprendre à lire et contextualiser comment est reporté un fait d'actualité, il t'est tout aussi important d'apprendre à lire un graphique. Croise tes sources, une personne bien informée vaut mieux qu'une aux infos biaisées.
&lt;/p&gt;</content:encoded>
    
    
      <enclosure url="/vrac/Emissions/CPU/podcast/0009-CPU%2812-11-15%29.mp3"
      length="52440091" type="audio/mpeg3" />
    
    
      </item>
  
	<item>
		<title>Les joyeuses suggestions de LinkedIn</title>
		<link>https://dascritch.net/post/2014/09/19/Les-joyeuses-suggestions-de-LinkedIn</link>
		<guid isPermaLink="false">urn:md5:79d521bc276a708b7e2a2aafa39c6286</guid>
		<dc:date>2014-09-19T07:25:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>2 ¢ d'humour</dc:subject>
        
    <description>Faut arrêter de mettre des suggestions n'importe où, ça devient n'importe quoi. Et en plus, cela révèle que votre service est parfois mal conçu.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Deuxcents-dhumour"&gt;2 ¢ d'humour&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Faut arrêter de mettre des suggestions n'importe où, ça devient n'importe quoi. Et en plus, cela révèle que votre service est parfois mal conçu.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Deuxcents-dhumour"&gt;
			2 ¢ d'humour&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/2cents/1409-LinkedIn-Clippy.png&quot; alt=&quot;&quot; class=&quot;l&quot; /&gt;
Depuis quelques mois, quand vous écrivez vos pensées que vous souhaitez faire partager les sites comme Twitter et LinkedIn se mettent à vous suggérer automatiquement des utilisateurs si vous tapez le début de leur nom. Avant, ils avaient &lt;strong&gt;au moins la politesse&lt;/strong&gt; de ne le faire que si vous tapiez un caractère spécial du type &lt;kbd&gt;@&lt;/kbd&gt; ou &lt;kbd&gt;+&lt;/kbd&gt; avant d'ouvrir cette interface de suggestion qui se montre souvent archi-pénible.
&lt;/p&gt;
&lt;p&gt;
Alors que j'allais décrire à mes contacts professionnels toute la joie qui m'habite quand j'ai appris que par le travail &lt;del&gt;in&lt;/del&gt;dispensable de la &lt;a href=&quot;http://www.legifrance.gouv.fr/affichSarde.do;jsessionid=90876B9C9C46A16C23E30193846044BB.tpdjo17v_3?reprise=true&amp;fastReqId=8916502&amp;idSarde=SARDOBJT000022375531&amp;page=3&quot;&gt;Commission générale de terminologie et de néologie&lt;/a&gt;, mon activité &lt;a href=&quot;https://dascritch.net/tag/python&quot;&gt;python&lt;/a&gt;esque non-monty se requalifiait en &lt;strong&gt;&lt;q&gt;ingénieur logiciel architecte en arrière-guichet&lt;/q&gt;&lt;/strong&gt;, voilà ce qui m'a sauté à la &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt;&amp;nbsp;:
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/2cents/1409-Linkedin-Lol-1.png&quot; alt=&quot;Cette page n'est pas disponible, financial company, 500 - 1000 employees&quot; /&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/2cents/1409-Linkedin-Lol-2.png&quot; alt=&quot;Cher Linkedin, comment supprimer cette page ? Management consulting, 1-10 employees&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
Cette aide trop pro-active se retrouve être à double tranchant : pour les grosses boîtes qui n'ont pas un vrai CM et pour ces services qui ont des fonctions trop bien planquées ou qui manquent sérieusement d'études UX.
&lt;/p&gt;

&lt;p&gt;
Donc, ne soyez pas triste, même si nous les avions perdus de vu depuis un bail, Le Trombone et &lt;a href=&quot;http://dascritch.net/post/2009/07/03/Referencement-%3A-La-preuve-par-lexemple#c2035&quot;&gt;Patachon&lt;/a&gt; de Microsoft Office ont retrouvé un emploi tout aussi qualifié. Et pénible.
&lt;/p&gt;
&lt;p&gt;
Accessoirement, si vous voulez &lt;strong&gt;vraiment&lt;/strong&gt; les remettre d'actualité, vous avez &lt;a href=&quot;https://www.smore.com/clippy-js&quot;&gt;une bibliothèque javascript et la banque d'image&amp;nbsp;:&lt;/a&gt;
&lt;/p&gt;
&lt;figure&gt;
&lt;figcaption&gt;J'ai toujours adoré le chat, mais impossible de le caresser.&lt;/figcaption&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/2cents/1409-LinkedIn-OfficeDiagram.png&quot; alt=&quot;diagramme de comportement du chat assistant dans Microsoft Office&quot; /&gt;
&lt;/figure&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>À l'heure Californienne : Google I/O 14</title>
		<link>https://dascritch.net/post/2014/06/26/%C3%80-l-heure-Californienne-IO14</link>
		<guid isPermaLink="false">urn:md5:e9c17c63c18550f7bfdb5dff8462d3dc</guid>
		<dc:date>2014-06-26T09:43:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Gizmo</dc:subject>
        
    <description>Hier, c'était la conférence Google IO, à destination des développeurs. Petit compte rendu du stream de San Francisco pris à Toulouse avec le TAUG en Extended™.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Gizmo"&gt;Gizmo&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Hier, c'était la conférence Google IO, à destination des développeurs. Petit compte rendu du stream de San Francisco pris à Toulouse avec le TAUG en Extended™.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Gizmo"&gt;
			Gizmo&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/gizmo/1406-GoogleIO.jpg&quot; alt=&quot;&quot; /&gt;
&lt;figcaption&gt;That's how we sell gizmos in California, USA&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Nous nous étions préparés, &lt;a href=&quot;http://arstechnica.com/gadgets/2014/06/required-reading-a-year-of-google-coverage-to-prepare-you-for-io/&quot;&gt;solidement documentés&lt;/a&gt;, chauds comme la braise ce soir-là chez Epitech.&lt;br /&gt;
&lt;a href=&quot;https://www.google.com/events/io&quot;&gt;L'événement Google I/O&lt;/a&gt; à destination de sa communauté de développeurs &lt;a href=&quot;http://youtu.be/wtLJPvx7-ys?t=19m18s&quot;&gt;s'ouvrait sur une gigantesque machine infernale. L'horloge à boules&lt;/a&gt; donnait le décompte avant d'envoyer dans le décor une grosse de bowling.
&lt;/p&gt;
&lt;figure&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube-nocookie.com/embed/wtLJPvx7-ys?rel=0&amp;amp;t=19m18s&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;figcaption&gt;
Note : 18 minutes de mire, et pas de son avant 3 minutes après le début. On a eu pareil.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Mais en soit, rien de franchement phénoménal ne devait y être annoncé pour le Grand Public&amp;nbsp;: On était là pour parler surtout technique et gizmos qui vont avec. Si vous ne comprenez rien de rien à HTML5, que vous n'êtes pas prêts &lt;a href=&quot;http://www.androsium.com/&quot;&gt;à apprendre à coder une appli Android (avec Androsium)&lt;/a&gt;, vous risquez d'être perdus à la lecture de ce compte-rendu.
&lt;/p&gt;
&lt;p&gt;
Moi, je m'en fous, j'étais là pour &lt;del&gt;troll&lt;/del&gt; twitter, goûter aux pizzas et &lt;a href=&quot;https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp&amp;hl=en&quot;&gt;démontrer KDE Connect&amp;nbsp;:&lt;/a&gt;
&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; lang=&quot;en&quot;&gt;&lt;p&gt;RT &lt;a href=&quot;https://twitter.com/sim_previdente&quot;&gt;@sim_previdente&lt;/a&gt;: Petite démo de KDE Connect avec &lt;a href=&quot;https://twitter.com/dascritch&quot;&gt;@dascritch&lt;/a&gt; et &lt;a href=&quot;https://twitter.com/_PolyAd&quot;&gt;@_PolyAd&lt;/a&gt; ! &lt;a href=&quot;https://twitter.com/hashtag/magique?src=hash&quot;&gt;#magique&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/io14?src=hash&quot;&gt;#io14&lt;/a&gt; &lt;a href=&quot;http://t.co/FxuPPt1Ws2&quot;&gt;pic.twitter.com/FxuPPt1Ws2&lt;/a&gt;  &lt;a href=&quot;https://twitter.com/hashtag/ioextended_tlse?src=hash&quot;&gt;#ioextended_tlse&lt;/a&gt;&lt;/p&gt;&amp;mdash; Xavier Mouton-Dubosc (@dascritch) &lt;a href=&quot;https://twitter.com/dascritch/statuses/481859638091317248&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;
D'abord un nouveau style d'interface pour la prochaine version d'Android. Désormais, les boutons du bas seront &lt;kbd&gt;◁&lt;/kbd&gt;&amp;nbsp;&lt;kbd&gt;□&lt;/kbd&gt;&amp;nbsp;&lt;kbd&gt;◯&lt;/kbd&gt;.&lt;br /&gt;
Oui, moi aussi, ça m'a choqué : il manque &lt;kbd&gt;×&lt;/kbd&gt; pour que Sony soit heureux de leur faire un procès.
&lt;/p&gt;
&lt;p&gt;
Google continue dans son optique connectée avec sa gamme Google Wear. Après les Google Glass, les Google Watch, et notamment une montre avec un écran rond, preuve des avancées de Sharp dans la production de &lt;a href=&quot;http://hothardware.com/News/Sharp-Announces-FreeForm-Display-Technology-Based-On-IGZO-Shaped-To-Application-Needs/#!4bL2f&quot;&gt;dalles non carrées&lt;/a&gt;.&lt;br /&gt;
Cela reste un gadget coûteux, très coûteux. Les applications proposées comme la biométrie n'en valent pas forcément le prix, et pouvoir consulter la recette de cuisine avec sa montre ne passera pas le test pratique quand vous aurez les doigts plein de farine. Et il faut toujours recharger toutes les 24&amp;nbsp;heures, n'en parlez pas à Jack Bauer. 
&lt;/p&gt;
&lt;h3 id=&quot;troublefetes&quot;&gt;Trouble-fêtes&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.bbc.com/news/technology-28020654&quot;&gt;Deux interruptions dans le public par des “anti google”&lt;/a&gt;, ou plutôt des personnes qui posent la question du rôle social de Google et de son slogan &lt;q&gt;Don't do evil&lt;/q&gt;. n'ont pas apprécié l'acquisition de &lt;a href=&quot;http://www.bostondynamics.com/&quot;&gt;Boston Dynamics&lt;/a&gt;. Je dirais qu'ils ont raison&amp;nbsp;: on parle du rachat d'une entreprise qui construit des dispositifs militaires, des engins de guerre. &lt;strong&gt;Faute d'une communication claire sur son avenir moral, Google fait peur&lt;/strong&gt;.
&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/hashtag/io14?src=hash&quot;&gt;#io14&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/ioextended_tlse?src=hash&quot;&gt;#ioextended_tlse&lt;/a&gt; &amp;quot;Voice enabled&amp;quot; par défaut. ne dites plus « OK Google » mais « Hello NSA »&amp;#10;Soyez poli, quoi , bordel ! merde !&lt;/p&gt;&amp;mdash; Xavier Mouton-Dubosc (@dascritch) &lt;a href=&quot;https://twitter.com/dascritch/statuses/481844063239290880&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;

&lt;h3 id=&quot;privatisation&quot;&gt;La privatisation des API système continue&lt;/h3&gt;
&lt;p&gt;
Et je me demande de plus en plus ce qu'il va rester dans &lt;a href=&quot;https://source.android.com/&quot;&gt;l'Android Open Source Platform&lt;/a&gt;. Apple aussi avait ouvert l'iOS et MacOSX, mais maintenant, vous ne trouverez pratiquement plus grand chose concernant les versions modernes.
&lt;/p&gt;
&lt;p&gt;
Pour me faire l'Avocat du Diable (&lt;q&gt;but he doesn't do evil&lt;/q&gt;), je plaiderais que ce mouvement est logique. Il est dû aux péchés originaux de la plateforme Android&amp;nbsp;: impossible de pouvoir facilement faire migrer la majorité l'écosystème à la dernière &lt;em&gt;release&lt;/em&gt; de l'OS, contrairement à Apple. Les appareils sont souvent encombrés de surcouches constructeurs (Samsung en tête), opérateurs (hein Orange et SFR), et maintenant applicatives (Facebook).
&lt;/p&gt;
&lt;p&gt;
Donc une partie des API importantes ne sont plus dans les parties open-source d'Android, mais dans des applications Google, le framework Google Play Services, actuellement déployé sur 93% des terminaux. &lt;strong&gt;Couplage fort en vue, moins d'expérimentations intéressantes&amp;nbsp;?&lt;/strong&gt; Là où &lt;a href=&quot;https://play.google.com/store/apps/details?id=fr.xplod.focal&amp;hl=en&quot;&gt;une app comme Focal fait bien mieux&lt;/a&gt; que la plupart des applications d'appareil photo par défaut, ben ce choix alternatif risque de disparaître. Résultat, &lt;a href=&quot;http://www.cyanogenmod.org/&quot;&gt;si vous installez une ROM alternative comme CyanogenMod pour libérer votre gizmo&lt;/a&gt;, il est plus que probable que vous installerez rapidement Google Play et les applications Google de base.
&lt;/p&gt;
&lt;p&gt;
Fail.
&lt;/p&gt;
&lt;h3 id=&quot;leprochainmilliard&quot;&gt;La conquête du prochain milliard de devices&lt;/h3&gt;
&lt;p&gt;
Un milliard d'appareils tournant sous Android actuellement en fonction (je ne compte pas les tablettes &lt;em&gt;no-name&lt;/em&gt; qui calent vos commodes).
&lt;/p&gt;
&lt;p&gt;
Le prochain milliard, tout le secteur le sait, il &lt;strong&gt;sera dans les pays en voie de développement&lt;/strong&gt;.&lt;br /&gt;
Google l'a donc clairement annoncé hier qu'il y lancera un smartphone à 100&amp;nbsp;$. Par là-même, il tente donc &lt;a href=&quot;http://dascritch.net/post/2012/11/30/2012%2C-fin-d-un-monde-du-web&quot;&gt;de chasser sur les terres promises à Firefox OS et Tizen&lt;/a&gt;. Non, sans rire, Microsoft ne peut proposer de Windows Phone décent dans ce prix-là, et l'activité &lt;em&gt;feature phone&lt;/em&gt; de Nokia va donc péricliter.
&lt;/p&gt;
&lt;p&gt;
Des pays où les téléphones à double carte SIM y sont très populaires. Forcément, Google va donc proposer le double compte Google sur les appareils, ce qui &lt;strong&gt;amène enfin la possibilité de différencier sa vie privée de son activité professionnelle.&lt;/strong&gt; Effet de bord très bienvenu.
&lt;/p&gt;
&lt;h3 id=&quot;googletv&quot;&gt;Le retour de la Google TV&lt;/h3&gt;
&lt;p&gt;
4&lt;sup&gt;ème&lt;/sup&gt; lancement.&lt;br /&gt;
Va-t-il enfin voler&amp;nbsp;?&lt;br /&gt;
A-t-il une chance de commencer sérieusement en France&amp;nbsp;?&lt;br /&gt;
Ce segment de la conférence avance, un panneau annonce une vingtaine de partenaires industriels, et dans le lot &lt;strong&gt;on notera 2 FAI Français&amp;nbsp;!&lt;br /&gt;
Bouygues Télécom et SFR&lt;/strong&gt; trouveront là le moyen de sortir rapidement une box triple-play puissante, puisque les actuelles avaient été ridiculisées par la Freebox Revolution, et ceci malgré un investissement conséquent. BouygTel encombré d'une interface flash très vieillissante, SFR d'un manque d'applications tierces. C'est encore plus drôle quand on sait que la Freebox Revolution était annoncée officiellement quelques mois après les premières Google TV, et, selon certaines rumeurs parisiennes, devaient même embarquer la Google TV.
&lt;/p&gt;
&lt;p&gt;
Oui, mais la première Google TV était très mal conçue&amp;nbsp;: Basé sur le navigateur Chrome en plein écran, il accusait déjà deux ans de retard par rapport au navigateur qu'on pouvait installer sur son PC. Y développer une belle interface était si pénible qu'on arrivait à un résultat bien plus probant en Flash.
&lt;/p&gt;
&lt;p&gt;
SFR/Numéricable et Bouygues Tel se préparent une très belle nique à Free &lt;a href=&quot;http://dascritch.net/post/2012/01/17/Free-r%C3%A9volution&quot;&gt;(ils n'attendaient que ça)&lt;/a&gt;, faisant valoir de plus leur meilleure connectivité vers les services de Google.&lt;br /&gt;
Et Google lui-même va enfin pouvoir s'installer ans le pays qui a inventé le triple-play ADSL et où ni Google TV, ni AppleTV n'ont jamais pu s'implanter, s'assurant un parc d'abonnés plus que conséquent.
&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/hashtag/io14?src=hash&quot;&gt;#io14&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/ioextended_tlse?src=hash&quot;&gt;#ioextended_tlse&lt;/a&gt; Mantenant, vous pourrez dire « OK Google, skip this ad »&amp;#10;si pratique sur la TNT&lt;/p&gt;&amp;mdash; Xavier Mouton-Dubosc (@dascritch) &lt;a href=&quot;https://twitter.com/dascritch/statuses/481851900103774208&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;

&lt;h3 id=&quot;codinginthecloud&quot;&gt;Coding in the  cloud&lt;/h3&gt;
&lt;p&gt;
La démonstration de l'offre d'hébergement de services par Google avait du mal à démarrer, effet Bolnadi oblige, mais elle valait l'attente.
&lt;/p&gt;
&lt;p&gt;
Écrire du code dans n'importe quel langage à partir de son navigateur&amp;nbsp;? Oui on peut, on a des IDE complètes, souvent basées sur &lt;a href=&quot;http://ace.c9.io/&quot;&gt;l'excellent éditeur Ace de Cloud9&lt;/a&gt; , comme par exemple &lt;a href=&quot;https://github.com/dascritch&quot;&gt;chez GitHub.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Éditer, compiler, déployer&amp;nbsp;? plus rarement.
&lt;/p&gt;
&lt;p&gt;
Éditer, compiler, texter, déployer mais aussi  faire du débug dans une console, toujours dans votre navigateur web, en posant des &lt;em&gt;breakpoint&lt;/em&gt;&amp;nbsp;? Et ben là, ils ont fait hier la démonstration et nous étions bluffés.
&lt;/p&gt;
&lt;p&gt;
Mais pas pour tout le monde car à Toulouse, la tireuse à biaires venait d'ouvrir. &lt;small&gt;Ou le foot&amp;nbsp;?&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; lang=&quot;en&quot;&gt;&lt;p&gt;Bière vs breackpoint et cloud programming &lt;a href=&quot;https://twitter.com/hashtag/ioExtended_tlse?src=hash&quot;&gt;#ioExtended_tlse&lt;/a&gt; &lt;a href=&quot;http://t.co/UD94uuRpVN&quot;&gt;pic.twitter.com/UD94uuRpVN&lt;/a&gt;&lt;/p&gt;&amp;mdash; Maxime Warnier (@maxdow) &lt;a href=&quot;https://twitter.com/maxdow/statuses/481864838139113472&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/maxdow&quot;&gt;@maxdow&lt;/a&gt; &lt;a href=&quot;https://twitter.com/dascritch&quot;&gt;@dascritch&lt;/a&gt; Certains ont essayé de résister mais pas longtemps hein 😀 &lt;a href=&quot;http://t.co/NrMdTU79PK&quot;&gt;pic.twitter.com/NrMdTU79PK&lt;/a&gt;&lt;/p&gt;&amp;mdash; Simon Prévidente (@sim_previdente) &lt;a href=&quot;https://twitter.com/sim_previdente/statuses/481866519744618496&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/hashtag/ioextended_tlse?src=hash&quot;&gt;#ioextended_tlse&lt;/a&gt; this one is for &lt;a href=&quot;https://twitter.com/nitot&quot;&gt;@nitot&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/mozilla_fr&quot;&gt;@mozilla_fr&lt;/a&gt; &lt;a href=&quot;https://twitter.com/MozillaZineFr&quot;&gt;@MozillaZineFr&lt;/a&gt; &lt;a href=&quot;http://t.co/Rl6qDAb4yN&quot;&gt;pic.twitter.com/Rl6qDAb4yN&lt;/a&gt;&lt;/p&gt;&amp;mdash; Xavier Mouton-Dubosc (@dascritch) &lt;a href=&quot;https://twitter.com/dascritch/statuses/481888624842375169&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;

&lt;h3 id=&quot;htmlenforce&quot;&gt;Le HTML5 en force&lt;/h3&gt;
&lt;p&gt;
Et à un point qui est surprenant&amp;nbsp;: Android suit la voie inverse d'iOS. Au sens qu'au lancement d'iOS, aucune application n'était installable donc tout devait être fait en HTML5. Android lui, était prévu pour installer des applications d'entrée, mais en concevoir les &lt;em&gt;vues&lt;/em&gt;, l'aspect de l'interface, tourne au cauchemar car il faut prévoir un code spécifique pour pratiquement chaque dimension d'écran existante. Mais, par les joies du &lt;em&gt;Responsive Web Design&lt;/em&gt;, en intégrant une page html directement dans votre application, ce que l'on appelle une &lt;em&gt;WebView&lt;/em&gt;.&lt;br /&gt;
Dans les annonces d'hier, &lt;strong&gt;Android pousse de plus en plus vers HTML5 et pas que dans WebView.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Énormément d'API montent dans le navigateur web, mais aussi l'arrivée en force des web-components. En résumé&amp;nbsp;: &lt;a href=&quot;http://www.polymer-project.org/&quot;&gt;Polymer&lt;/a&gt; va ainsi proposer les éléments d'interface du système Android transposés en HTML5 et en web-components. &lt;strong&gt;Ce sujet mérite un article complet, donc je le traiterai de manière approfondie la semaine prochaine.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Depuis 6 ans, des gens très futés tentaient de faire des interface à la iPhone en HTML. La raison est que l'interface utilisateur a été énormément travaillée par des graphistes et des ergonomes et qu'elle possède sa propre logique. Mais jamais Apple n'avait proposé d'implémentation officielle de ses guidelines UI, et bien souvent, ces implémentations sont complètement foireuses, je pense notamment aux extensions “mobile” Wordpress pénibles et peu lisibles au final.
&lt;/p&gt;
&lt;p&gt;
Google va donc proposer son interface Android en &lt;em&gt;web-components&lt;/em&gt; standards, et en plus via Polymer, donc non limité à Chrome, mais compatible Firefox, Opera, Safari et même MSIE9.&lt;br /&gt;
C'est très important car cela sonne enfin le glas des frameworks css monolithiques à la &lt;a href=&quot;http://foundation.zurb.com/&quot;&gt;Foundation&lt;/a&gt; et surtout (kooff koooffff) &lt;a href=&quot;http://www.getbootstrap.com/&quot;&gt;Bootstrap&lt;/a&gt;. Nous allons donc très sérieusement y gagner en professionnalisme et en qualité d'interface pour nos applications web. Et Google offre aussi par là-même un moyen efficace de faire tester son univers mobile à tous les utilisateurs du web. C'est aussi une ouverture publique d'une partie du code-source.
&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; lang=&quot;en&quot;&gt;&lt;p&gt;new polymer demos are cool &lt;a href=&quot;http://t.co/Zid5ko0ion&quot;&gt;http://t.co/Zid5ko0ion&lt;/a&gt; &amp;#10;&lt;a href=&quot;http://t.co/9B2qUl3Ifx&quot;&gt;http://t.co/9B2qUl3Ifx&lt;/a&gt;&amp;#10;&lt;a href=&quot;http://t.co/IWIVdyMlNv&quot;&gt;http://t.co/IWIVdyMlNv&lt;/a&gt; except for keyboard or assistive tech users&lt;/p&gt;&amp;mdash; Steve Faulkner (@stevefaulkner) &lt;a href=&quot;https://twitter.com/stevefaulkner/statuses/481859355583983616&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;
Petit bémol pointé par Steve Faulkner dans son twit&amp;nbsp;: il y a encore des efforts à faire en terme d'accessibilité, ce qui est plutôt primordial dans le web.
&lt;/p&gt;
&lt;h3 id=&quot;surplace&quot;&gt;Et sur place&lt;/h3&gt;
&lt;p&gt;
Outre la retransmission de foot qui n'a intéressé qu'une demi-douzaine de masos, les boissons, pizzas, charcuteries et fromages fins, une douzaine de startups ont pu présenter leurs activités comme &lt;a href=&quot;http://unitag.fr/&quot;&gt;Unitag&lt;/a&gt;, &lt;a href=&quot;http://www.androsium.com/&quot;&gt;Androsium (de circonstance)&lt;/a&gt; et &lt;a href=&quot;http://register.jukast.com/&quot;&gt;le très prometteur Jukast&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
On a eu droit à de belles démos technologiques, mais c'est une fois de plus &lt;a href=&quot;http://www.toulouseinfos.fr/index.php/dossiers/breves/10916-bac-a-sable-a-realite-augmentee-une-premiere-francaise-a-futurapolis.html&quot;&gt;le bac-à-sable interactif de Science Animation&lt;/a&gt; qui a attiré ces grands enfant de devs hardcores. Internet des Objets, mais bien sûr ;)
&lt;/p&gt;
&lt;h3 id=&quot;lablablague&quot;&gt;La blague de la soirée&lt;/h3&gt;
&lt;p&gt;
Les participants de la soirée IO Extended à Epitech Toulouse pouvaient gagner des goodies sur un concours de bits. Euh pardon de retweets.
&lt;/p&gt;
&lt;p&gt;
J'ai stratégiquement axé mon sujet sur le chiffre des 93 millions de &lt;em&gt;selfies&lt;/em&gt; par jour dans le monde fait avec un gizmo android.
&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; lang=&quot;en&quot;&gt;&lt;p&gt;One more selfie bite the dust &lt;a href=&quot;https://twitter.com/hashtag/ioextended_tlse?src=hash&quot;&gt;#ioextended_tlse&lt;/a&gt; &lt;a href=&quot;http://t.co/xp7rqZuuWl&quot;&gt;pic.twitter.com/xp7rqZuuWl&lt;/a&gt;&lt;/p&gt;&amp;mdash; Xavier Mouton-Dubosc (@dascritch) &lt;a href=&quot;https://twitter.com/dascritch/statuses/481834227756199936&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;
Que j'ai gagné… d'une courte tête face &lt;a href=&quot;https://twitter.com/lslisbesanchez&quot;&gt;à Lisbé&lt;/a&gt;, &lt;strong&gt;sur une immonde faute d'anglais&lt;/strong&gt;. J'étais mortifié quand je m'en suis rendu compte 30mn trop tard.
&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; lang=&quot;en&quot; data-conversation=&quot;none&quot; &gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/dascritch&quot;&gt;@dascritch&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/ioextended_tlse?src=hash&quot;&gt;#ioextended_tlse&lt;/a&gt; JulienKT David et Xavier sur la même photo. Stylé les gars.&lt;/p&gt;&amp;mdash; Julien Del Rio (@JulienDelRio) &lt;a href=&quot;https://twitter.com/JulienDelRio/statuses/481837290784698369&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; lang=&quot;en&quot;  data-conversation=&quot;none&quot;&gt;&lt;p&gt;“&lt;a href=&quot;https://twitter.com/dascritch&quot;&gt;@dascritch&lt;/a&gt; # &lt;a href=&quot;https://twitter.com/hashtag/ioextended_tlse?src=hash&quot;&gt;#ioextended_tlse&lt;/a&gt;  roooonnroooooon &amp;gt;^.^&amp;lt; &lt;a href=&quot;http://t.co/FJ6NA0YCsV&quot;&gt;pic.twitter.com/FJ6NA0YCsV&lt;/a&gt;” thanks to &lt;a href=&quot;https://twitter.com/BeMyAppFR&quot;&gt;@BeMyAppFR&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/intel&quot;&gt;@intel&lt;/a&gt; france&lt;/p&gt;&amp;mdash; Julien Del Rio (@JulienDelRio) &lt;a href=&quot;https://twitter.com/JulienDelRio/statuses/481899714967642112&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;p&gt;
Et pas &lt;del&gt;peu&lt;/del&gt; fier en brandissant mon Galaxy Tab 3 tout bô &lt;small&gt;qui d'ailleurs, n'est pas &lt;em&gt;vraiment&lt;/em&gt; le mien, c'est un outil de développement HTML5 fourni par Intel. Avantage&amp;nbsp;: j'ai un numéro de helpdesk aux US. &lt;q&gt;Hello IT&amp;nbsp;?&lt;/q&gt;&lt;/small&gt;&lt;br /&gt;
N'empêche… une prise électrique américaine ^^, mes &lt;a href=&quot;http://dascritch.net/post/2011/02/02/Blague-pipi-caca&quot;&gt;toilettes Toto&lt;/a&gt; vont se sentir moins seules sur mon transfo 110V/60Hz de salle de bain.
&lt;/p&gt;
&lt;p&gt;
Milles mercis à tous !
&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet tw-align-center&quot; lang=&quot;en&quot;&gt;&lt;p&gt;Merci à tous !! &lt;a href=&quot;https://twitter.com/hashtag/io14?src=hash&quot;&gt;#io14&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/ioExtended_tlse?src=hash&quot;&gt;#ioExtended_tlse&lt;/a&gt; &lt;a href=&quot;https://twitter.com/EPITECHToulouse&quot;&gt;@EPITECHToulouse&lt;/a&gt; &lt;a href=&quot;http://t.co/Dha11Zx6cG&quot;&gt;pic.twitter.com/Dha11Zx6cG&lt;/a&gt;&lt;/p&gt;&amp;mdash; ToulouseAndroidUG (@ToulouseAUG) &lt;a href=&quot;https://twitter.com/ToulouseAUG/statuses/481895425101021184&quot;&gt;June 25, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;
À Intel et &lt;a href=&quot;http://events.bemyapp.com/events/index/france&quot;&gt;BeMyApp France&lt;/a&gt; pour le superbe cadeau, au &lt;a href=&quot;http://toulouseaug.blogspot.fr&quot;&gt;Toulouse Android UG&lt;/a&gt;, &lt;em&gt;as usual&lt;/em&gt; à l'&lt;a href=&quot;http://www.epitech.eu/ecole-informatique-toulouse.aspx&quot;&gt;Epitech Toulouse&lt;/a&gt; pour leur accueil et surtout à &lt;a href=&quot;https://twitter.com/JulienDelRio&quot;&gt;Julien Del Rio&lt;/a&gt; qui était dans la salle de conférence à San Francisco et qui visiblement n'arrêtait pas de pouffer de mes blagues twittées sous les regards intrigués de ses voisins américains.
&lt;/p&gt;

&lt;script async src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>Sniffeur d'ancre</title>
		<link>https://dascritch.net/post/2014/06/24/Sniffeur-d-ancre</link>
		<guid isPermaLink="false">urn:md5:286f8280f62e18e822ab3d08a552bf2f</guid>
		<dc:date>2014-06-24T15:40:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Un petit utilitaire qui va plaire à plein de rédacteurs techniques. Dispo en javascript vanilla, ou sinon en add-on pour Firefox*.		&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 utilitaire qui va plaire à plein de rédacteurs techniques. Dispo en javascript vanilla, ou sinon en add-on pour Firefox*.&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;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://addons.mozilla.org/fr/firefox/addon/anchors-reveal/&quot;&gt;Add-on pour Firefox : Anchors Reveal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dascritch/anchors-reveal&quot;&gt;Code source ouvert sur GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;J'aime bien écrire des articles techniques&lt;/strong&gt;. Sur &lt;a href=&quot;http://dascritch.net/post/2014/03/25/Histoires-en-img&quot;&gt;les images&lt;/a&gt;, &lt;a href=&quot;http://dascritch.net/post/2012/03/06/Des-emojis-dans-l-Unicode-1&quot;&gt;les emoji&lt;/a&gt;, &lt;a href=&quot;http://dascritch.net/post/2008/10/21/Psychanalyse-du-clavier-la-premiere-consultation&quot;&gt;le clavier&lt;/a&gt; et autres &lt;a href=&quot;http://dascritch.net/post/2011/05/16/Sony%2C-Playstation-Network-%3A-N%C3%A9gligence-caract%C3%A9ris%C3%A9e-%281/3%29&quot;&gt;analyses peu pertinentes&lt;/a&gt;…
&lt;/p&gt;
&lt;p&gt;
Mes textes peuvent parfois devenir immensément longs. Parce que du coup, en me documentant, j'apprends, j'ai envie de mettre encore plus de choses, je rajoute des illustrations, et puis encore des choses… Et là, j'explose, je dois atomiser mon brouillon d'article en plusieurs éléments d'un dossier.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;J'aime bien aussi mettre plein de liens&lt;/strong&gt;. Oui, je sais, vous ne les cliquez pratiquement jamais mes foutus liens que j'essaie à chaque fois  de choisir de façon pertinente.
&lt;/p&gt;
&lt;p&gt;
J'essaie de trouver des liens vers des articles de référence. Malheureusement, souvent &lt;strong&gt;ces articles sont longs, parfois beaucoup plus longs que les miens&lt;/strong&gt;. Par exemple, &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/&quot;&gt;certains documents dépassent les 100&amp;nbsp;000 caractères&lt;/a&gt;, à se demander si on a vraiment un document de specs ou juste un &lt;em&gt;burning performance test…&lt;/em&gt;
&lt;/p&gt;

&lt;h3 id=&quot;voilapourquoi&quot;&gt;Voilà pourquoi on met des ancres&lt;/h3&gt;
&lt;p&gt;
Vous remarquerez qu'en règle général, chaque chapitre de mon blog a une ID, un index, une ancre. En général sur le titre, comme suit&amp;nbsp;:
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
&amp;lt;&lt;strong&gt;h3 &lt;em&gt;id&lt;/em&gt;=&quot;&lt;i&gt;voilapourquoi&lt;/i&gt;&quot;&lt;/strong&gt;&amp;gt;Voilà pourquoi
&lt;/code&gt;…
&lt;/p&gt;
&lt;p&gt;
Le problème, c'est que souvent, on a pas de mini-sommaire de la page, donc il faut le trouver soit en lisant le code source du html (suuper), soit en inspectant la page (suuuper).
&lt;br /&gt;
C'est si compliqué que ça de mettre un mini-sommaire&amp;nbsp;?!??
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1406-AnchorsReveal-minisom.jpg&quot; alt=&quot;Mini sommaire de cette page&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
Donc, &lt;strong&gt;des fois, comme ça me les brise&lt;/strong&gt;, ben j'ai écrit un petit &lt;em&gt;snippet&lt;/em&gt; de code javascript. &lt;a href=&quot;https://github.com/dascritch/anchors-reveal/blob/master/data/anchors-reveal.js&quot;&gt;Ce petit bout de code&lt;/a&gt; fonctionne sur n'importe quel navigateur, pour peu qu'on le lance en mode console dans l'interface de développement. En général, t'appuies sur la touche &lt;kbd&gt;F12&lt;/kbd&gt; et tu colles mon code…
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1406-AnchorsReveal-panel-chrome.jpg&quot; alt=&quot;Navigateur Chrome&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
T'as vu&amp;nbsp;? Je l'ai fait dans Chrome parce que mon code fonctionne sans problème quelque soit le navigateur, pour peu qu'il soit récent et décent. &lt;small&gt;Donc ça exclu… Non, pas Internet Explorer, mais Safari…. pfff… bande de trolleurs&lt;/small&gt;.
&lt;br /&gt;
Sur Firefox, tu peux le faire dans l'ardoise magique (&lt;kbd&gt;⇧Shift&lt;/kbd&gt;+&lt;kbd&gt;F4&lt;/kbd&gt;) et hop, tu exécutes.
&lt;/p&gt;
&lt;p&gt;
Et ça donne ça&amp;nbsp;:
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1406-AnchorsReveal-demo-chrome.jpg&quot; alt=&quot;ancres révélées&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
&lt;strong&gt;Chaque ancre de la page est révélée, et donc je vois immédiatement les liens directs aux chapitres&lt;/strong&gt; d'une page. Bonnard.
&lt;/p&gt;
&lt;h3 id=&quot;firefoxaddon&quot;&gt;Quitte à le faire pour Firefox…&lt;/h3&gt;
&lt;p&gt;
Et surtout comme &lt;a href=&quot;https://github.com/dascritch/anchors-reveal&quot;&gt;j'ai mis le code sur GitHub&lt;/a&gt;, je me suis tenté la création d'un add-on pour Firefox. J'avais fait en 2000 des sidebars pour Mozilla, j'avais tenté des addons au moment où Firefox les proposaient, fallait que je me dérouille.&lt;br /&gt;
Donc, j'ai vite choppé &lt;a href=&quot;https://developer.mozilla.org/en/Add-ons/SDK&quot;&gt;l'add-on SDK&lt;/a&gt; entre mes coups de fils, implanté après avoir lu en diagonale, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1029368&quot;&gt;rédigé un rapport de bogue&lt;/a&gt; sur la VF que je ne voulais pas, charogné une icône Oxygen de KDE, &lt;a href=&quot;https://www.youtube.com/watch?v=N4bobZdFYrk&quot;&gt;et &lt;strong&gt;roule ma poule&amp;nbsp;!&lt;/strong&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ben c'est fait : &lt;a href=&quot;https://addons.mozilla.org/fr/firefox/addon/anchors-reveal/&quot;&gt;https://addons.mozilla.org/fr/firefox/addon/anchors-reveal/&lt;/a&gt;&amp;nbsp;*.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;small&gt;Yes ! Restartless, je ne me refuse rien…&lt;/small&gt;
&lt;br /&gt;
Cela rajoute un bouton on/off dans la barre d'adresse, comme ça&amp;nbsp;:
&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1406-AnchorsReveal-bouton-firefox.jpg&quot; alt=&quot;bouton firefox&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;
Et c'est tout.
&lt;/p&gt;
&lt;p&gt;
Mais vous pouvez pas savoir comme cela va me faciliter la rédaction. Rogntudju.
&lt;/p&gt;
&lt;h3 id=&quot;avenir&quot;&gt;À venir&lt;/h3&gt;
&lt;p&gt;
D'abord, &lt;a href=&quot;https://github.com/dascritch/anchors-reveal/issues&quot;&gt;quelques correction de bugs&lt;/a&gt;, ensuite je passerais à un add-on adaptant le &lt;a href=&quot;http://a.corbet.free.fr/zoodvinssen/&quot;&gt;&lt;em&gt;fabulous&lt;/em&gt; &lt;strong&gt;Zoodvinsen&lt;/strong&gt;&lt;/a&gt; du &lt;a href=&quot;http://hules.free.fr/wmcoincoin/&quot;&gt;&lt;em&gt;mythique&lt;/em&gt; Wmcoincoin&lt;/a&gt; pour toutes les tribunes trollesque genre &lt;a href=&quot;https://www.linkedin.com/profile/view?id=6224891&amp;trk=nav_responsive_tab_profile&quot;&gt;LinkedIn&lt;/a&gt;, &lt;a href=&quot;https://plus.google.com/104202051000932810138/posts&quot;&gt;Google+&lt;/a&gt; ou &lt;a href=&quot;https://twitter.com/dascritch&quot;&gt;Twitter&lt;/a&gt; afin d'améliorer votre productivité. Et ensuite faire &lt;strong&gt;un &lt;a href=&quot;http://dotclear.org&quot;&gt;Dotclear&lt;/a&gt; &lt;em&gt;companion&lt;/em&gt;&lt;/strong&gt;, puisqu'on me demande souvent mes &lt;em&gt;snipets&lt;/em&gt; d'édition.
&lt;/p&gt;
&lt;p&gt;
Et n'oubliez jamais&amp;nbsp;: avoir des add-ons c'est sympa, mais en abuser ça craint. Désintallez ce que vous n'utilisez plus.
&lt;/p&gt;
&lt;hr /&gt;
&lt;p id=&quot;notabene&quot;&gt;
&lt;a href=&quot;https://twitter.com/notabene&quot;&gt;* NOTA BENE :&lt;/a&gt; J'ai été un peu trop rapide, il faut compter 10 jours avant que l'add-on soit validée dans le “store proprio” de Mozilla.&lt;br /&gt;
Vous avez le droit de ne pas me faire confiance du tout.
&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>
    
</channel>
</rss>