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

	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<sy:updateBase>2026-06-09T06:56:56+02:00</sy:updateBase>

	
	<item>
		<title>N2HDF 2026 Toulouse</title>
		<link>https://dascritch.net/post/2026/06/07/N2HDF-2026-Toulouse</link>
		<guid isPermaLink="false">urn:md5:f973f56f7c1ad7c4cb159bdf4abdc54a</guid>
		<dc:date>2026-06-07T19:20:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Comment s'est passée la N2HDF 2026 édition Toulouse au sein du Tetalab ? Retrouvez les supports et enregistrements.		&lt;span class="tags"&gt;&lt;br /&gt;&lt;a href="https://dascritch.net/category/Webdev"&gt;Webdev&lt;/a&gt; &lt;/span&gt;
	</description>
    <content:encoded>
		&lt;p&gt;Comment s'est passée la N2HDF 2026 édition Toulouse au sein du Tetalab ? Retrouvez les supports et enregistrements.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p class=&quot;c&quot;&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/n2hdf.png&quot; alt=&quot;Nothing 2 Hide Decentralized Festival&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
Le Samedi 30 Mai 2026 avait lieu &lt;a href=&quot;https://www.tetalab.org/fr/n2hdf-2026&quot;&gt;l'édition toulousaine de la N2HDF 2026.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://nothing2hide.org/&quot;&gt;Nothing 2 Hide&lt;/a&gt; est une association dont le but est de protéger l’information par la fourniture d'outils face aux menaces et la surveillance numarique, la lutte contre la censure, des formations et l'éducaiton au médias.
&lt;/p&gt;
&lt;p&gt;
Suite à différents événements publics qu'ils ont organisés, ils ont eu l'idée de proposer à de multiples associations disséminées sur la France d'organiser le même week-end des ateliers, conférences, tables rondes, etc… &lt;a href=&quot;https://nothing2hide.org/fr/2026/04/21/n2hdf-2026-le-programme/&quot;&gt;sous le nom N2HDF (Decentralized Festival)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Le Tetalab eu l'honneur d'avoir à organiser l'événement sur Toulouse, qui s'estdéroulé au Topic le samedi 30 dans l'après-midi.
&lt;/p&gt;
&lt;p&gt;
Voici le programme, les supports et enregistremets
&lt;/p&gt;
&lt;p id=&quot;c1&quot;&gt;
Conférence «&amp;nbsp;Le Bluetooth a-t-il définitivement remplacé la prise casque de votre smartphone&amp;nbsp;?&amp;nbsp;»&lt;br /&gt;
Et si oui, pourquoi&amp;nbsp;? Analysons une suite de décision qui n'est pas toujours en faveur de votre vie privée et de votre porte-monnaie. Et pourquoi ça serait bien de militer auprès de certaines marques pour qu'il remettent la prise casque.&lt;br /&gt;
																	&lt;cpu-audio title=&quot;N2HDF 2026 Toulouse&quot; canonical=&quot;https://dascritch.net/post/2026/06/07/N2HDF-2026-Toulouse&quot; poster=&quot;https://dascritch.net/vrac/.blog2/webdev/.n2hdf_s.png&quot;  hide=&quot;panels&quot; playlist=&quot;cpu&quot;&gt;
	&lt;audio controls=&quot;controls&quot; style=&quot;width:100%&quot;&gt;
				&lt;source src=&quot;https://dascritch.net/vrac/sonores/2606-N2HDF2026%20Toulouse%20-%20Prsentation%20bluetooth.ogg&quot; type=&quot;audio/ogg; codecs=vorbis&quot; /&gt;
		&lt;source  src=&quot;https://dascritch.net/vrac/sonores/podcast/2606-N2HDF2026%20Toulouse%20-%20Prsentation%20bluetooth.mp3&quot; type=&quot;audio/mpeg&quot; /&gt;
			&lt;/audio&gt;
&lt;/cpu-audio&gt;&lt;br /&gt;
&lt;a href=&quot;https://dascritch.net/vrac/Supports/2605-N2HDF/jackphone.html&quot;&gt;Support de la présentation&lt;/a&gt; (utilisez la flèche → ou swiper sur écran tactile pour avancer)
&lt;/p&gt;
&lt;p&gt;
Conférence «&amp;nbsp;Readeck, un logiciel libre d'archivage de contenu en ligne.&amp;nbsp;»&lt;br /&gt;
Rien n'est éternel et un marque-page sur navigateur suit la même logique: un beau jour, vous allez cliquer pour revisiter un site ou article intéressant et là c'est le drame. Le domaine a été vendu, l'auteur n'avait plus envie de le maintenir, &lt;code&gt;404 Not Found&lt;/code&gt;, le contenu a changé été censuré...&lt;br /&gt;
&lt;cpu-audio title=&quot;N2HDF 2026 Toulouse&quot; canonical=&quot;https://dascritch.net/post/2026/06/07/N2HDF-2026-Toulouse&quot; poster=&quot;https://dascritch.net/vrac/.blog2/webdev/.n2hdf_s.png&quot;  hide=&quot;panels&quot; playlist=&quot;cpu&quot;&gt;
	&lt;audio controls=&quot;controls&quot; style=&quot;width:100%&quot;&gt;
				&lt;source src=&quot;https://dascritch.net/vrac/sonores/2606-N2HDF2026%20Toulouse%20-%20Prsentation%20readeck.ogg&quot; type=&quot;audio/ogg; codecs=vorbis&quot; /&gt;
&lt;source src=&quot;https://dascritch.net/vrac/sonores/podcast/2606-N2HDF2026%20Toulouse%20-%20Prsentation%20readeck.mp3&quot; type=&quot;audio/mpeg&quot; /&gt;
			&lt;/audio&gt;
&lt;/cpu-audio&gt;
&lt;/p&gt;
&lt;p&gt;
conférence «&amp;nbsp;Bien se servir des VPN&amp;nbsp;».&lt;br /&gt;
Pourquoi un VPN, c'est très pratique, surtout si vous êtes youtubeur professionnel. Pourquoi les VPN ont été créés, quelle est leur utilité réelle, quelles sont leurs limites techniques, pourquoi l'usage des VPN commerciaux par des particuliers n'est pas franchement utile, en quoi mentent les opérateurs de VPN grand-public, et quelles sont les meilleures alternatives.&lt;br /&gt;
&lt;cpu-audio title=&quot;N2HDF 2026 Toulouse&quot; canonical=&quot;https://dascritch.net/post/2026/06/07/N2HDF-2026-Toulouse&quot; poster=&quot;https://dascritch.net/vrac/.blog2/webdev/.n2hdf_s.png&quot;  hide=&quot;panels&quot; playlist=&quot;cpu&quot;&gt;
	&lt;audio controls=&quot;controls&quot; style=&quot;width:100%&quot;&gt;
				&lt;source src=&quot;https://dascritch.net/vrac/sonores/2606-N2HDF2026%20Toulouse%20-%20Prsentation%20vpn.ogg&quot; type=&quot;audio/ogg; codecs=vorbis&quot; /&gt;
		&lt;source src=&quot;https://dascritch.net/vrac/sonores/podcast/2606-N2HDF2026%20Toulouse%20-%20Prsentation%20vpn.mp3&quot; type=&quot;audio/mpeg&quot; /&gt;
			&lt;/audio&gt;
&lt;/cpu-audio&gt;&lt;br /&gt;
&lt;a href=&quot;https://dascritch.net/vrac/Supports/2605-N2HDF/vpn_N2HDF2026-1.pdf&quot;&gt;Support au format PDF&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
conférence «&amp;nbsp;Vraiment rien à cacher&amp;nbsp;?&amp;nbsp;».&lt;br /&gt;
Nous avons tous entendu cet argument stupide, &lt;q&gt;C'est pas grave, moi, je n'ai rien à cacher.&lt;/q&gt; Partons du principe que c'est le cas et déconstruisons point par point tout ce qui pose un problème dans cette affirmation.&lt;br /&gt;
&lt;cpu-audio title=&quot;N2HDF 2026 Toulouse&quot; canonical=&quot;https://dascritch.net/post/2026/06/07/N2HDF-2026-Toulouse&quot; poster=&quot;https://dascritch.net/vrac/.blog2/webdev/.n2hdf_s.png&quot;  hide=&quot;panels&quot; playlist=&quot;cpu&quot;&gt;
	&lt;audio controls=&quot;controls&quot; style=&quot;width:100%&quot;&gt;
				&lt;source src=&quot;https://dascritch.net/vrac/sonores/2606-N2HDF2026%20Toulouse%20-%20Prsentation%20rien%20a%20cacher.ogg&quot; type=&quot;audio/ogg; codecs=vorbis&quot; /&gt;
		&lt;source src=&quot;https://dascritch.net/vrac/sonores/podcast/2606-N2HDF2026%20Toulouse%20-%20Prsentation%20rien%20a%20cacher.mp3&quot; type=&quot;audio/mpeg&quot; /&gt;
			&lt;/audio&gt;
&lt;/cpu-audio&gt;&lt;br /&gt;
&lt;a href=&quot;https://dascritch.net/vrac/Supports/2605-N2HDF/rienacacher.odp&quot;&gt;Support au format .odp, lisible avec Libre Office&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
Table ronde : Échanges autour des pratiques et des enjeux de l'autodéfense numérique par les intervenants de la journée.&lt;br /&gt;
&lt;cpu-audio title=&quot;N2HDF 2026 Toulouse&quot; canonical=&quot;https://dascritch.net/post/2026/06/07/N2HDF-2026-Toulouse&quot; poster=&quot;https://dascritch.net/vrac/.blog2/webdev/.n2hdf_s.png&quot;  hide=&quot;panels&quot; playlist=&quot;cpu&quot;&gt;
	&lt;audio controls=&quot;controls&quot; style=&quot;width:100%&quot;&gt;
				&lt;source src=&quot;https://dascritch.net/vrac/sonores/2606-N2HDF2026%20Toulouse%20-%20Debat.ogg&quot; type=&quot;audio/ogg; codecs=vorbis&quot; /&gt;
		&lt;source src=&quot;https://dascritch.net/vrac/sonores/podcast/2606-N2HDF2026%20Toulouse%20-%20Debat.mp3&quot; type=&quot;audio/mpeg&quot; /&gt;
			&lt;/audio&gt;
&lt;/cpu-audio&gt;

&lt;/p&gt;
&lt;p&gt;
À noter que les enregistrements ont été édités afin de préserver l'anonymat des membres du public.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<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>En 20 lignes pas plus : gérer les options d'appel de tes scripts bash</title>
		<link>https://dascritch.net/post/2018/01/08/En-20-lignes-pas-plus-%3A-g%C3%A9rer-les-options-d-appel-de-tes-scripts-bash</link>
		<guid isPermaLink="false">urn:md5:0aa526a1cf7b586db711bbe7faef546d</guid>
		<dc:date>2018-01-08T05:07:00+01:00</dc:date>

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

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Toi qui ne comprends absolument pas la ligne de commande sous Linux, ne t'attends pas à comprendre plus, bien au contraire : On fait dans les bonnes recettes pour démarabouter un serveur unix.		&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;Toi qui ne comprends absolument pas la ligne de commande sous Linux, ne t'attends pas à comprendre plus, bien au contraire : On fait dans les bonnes recettes pour démarabouter un serveur unix.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;p&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1402-BoutonsSociaux-copiecolle.png&quot; alt=&quot;&quot; class=&quot;r&quot; /&gt;

Depuis que je suis arrivé chez GPDis, je me rends compte que je ressors de temps à autres ce que j'ai fait dans les autres boites. Notamment des petits bouts de code qui font ce qui est pour moi évident. Comme cela faisait trop longtemps que je n'avais pas écrit de billet techniques très fouillés, je reprends pour cette série ces petits snipets de code que je reproduis souvent pour en expliquer la stratégie, 
&lt;small&gt;
et accessoirement augmenter mon klout sur les réseaux sociaux en tant que dev, 
&lt;small&gt;
parce qu'écrire des billets &lt;a href=&quot;https://dascritch.net/post/2014/03/25/Histoires-en-img&quot;&gt;sur la balise &amp;lt;img&amp;gt;&lt;/a&gt; ou la &lt;a href=&quot;https://dascritch.net/post/2013/03/26/Dirty-Hacky-%3A-je-parse-en-HTML-.357-SW&quot;&gt;série des Dirty Hacky&lt;/a&gt; m'ont pris parfois plus de trois mois. 
&lt;small&gt;
Et si vous croyez que j'ai que ça à faire, imaginez que je ponds aussi &lt;a href=&quot;http://cpu.pm&quot;&gt;mon émission radio hebdomadaire CPU&lt;/a&gt;, qui demande son quota sacrificiel en nuits blanches.
&lt;/small&gt;&lt;/small&gt;&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Occasion de commencer une petite série, qui est &lt;a href=&quot;https://github.com/dascritch/En-20-lignes-pas-plus&quot;&gt;doublé d'un projet git&lt;/a&gt;.
&lt;/p&gt;
&lt;h3 id=&quot;principe_serie&quot;&gt;Le principe (de la série)&lt;/h3&gt;
&lt;p&gt;
Écrire des petites lignes de code, pour explorer des petites astuces autour d'un langage, des petits bouts de code qu'on peut étendre à loisir pour son usage, en utilisant le langage dans sa version la plus pure/simple/indépendante/vanilla possible et faisant appel aux standards normaux.
&lt;/p&gt;
&lt;h3 id=&quot;enonce_probleme&quot;&gt;L'énoncé du problème&lt;/h3&gt;
&lt;p&gt;
Supposons que tu aies &lt;a href=&quot;https://dascritch.net/tag/bash&quot;&gt;un script bash&lt;/a&gt; sur un serveur, qui est lancé toutes les minutes via crontab (supposons !), sauf qu'il ne doit pas être lancé concurrentiellement (une et une seule fois à la fois), et que parfois, il dure plus d'une minute.&lt;br /&gt;
Problèmes : 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bash n'est pas super lisible,&lt;/li&gt;
&lt;li&gt;mais il est l'intepréteur de commande le plus présent sur un serveur unix alors que zsh doit être explicitement installé,&lt;/li&gt;
&lt;li&gt;il existe très peu de libs qui propose ce genre de snipets&lt;/li&gt;
&lt;li&gt;et on veut un petit bout de code qu'on puisse facilement étendre à sa propre convenance (d'où la licence GPL)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;tldr&quot;&gt;TL;DR Le corrigé&lt;/h3&gt;
&lt;p&gt;
Soit vous clonez &lt;a href=&quot;https://github.com/dascritch/En-20-lignes-pas-plus/blob/master/1_Locks.bash&quot;&gt;le repo git&lt;/a&gt;, soit vous copiez-collez sans comprendre les lignes suivantes (et bonne chance)&amp;nbsp;:
&lt;/p&gt;

&lt;pre&gt;
LOCK_DIR=~/locks
LOCK_FILE=${LOCK_DIR}/cron.lock

function &lt;strong&gt;lock_script&lt;/strong&gt;() {
    mkdir -p ${LOCK_DIR}
    if [ -f &quot;${LOCK_FILE}&quot; ]; then 
        LOCKING_PID=`cat ${LOCK_FILE}`
        &gt;&amp;2  echo &quot;ERROR : Script ${CALLED_FUNCTION} already locked on PID ${LOCKING_PID}. Cannot run PID $$ . Still running ?&quot;
        exit 1
    fi
    echo $$ &gt; ${LOCK_FILE}
}

function &lt;strong&gt;unlock_script&lt;/strong&gt;() {
    rm ${LOCK_FILE}
}
&lt;/pre&gt;

&lt;h3 id=&quot;usage&quot;&gt;Usage&lt;/h3&gt;
&lt;p&gt;
Commencez votre script par &lt;code&gt;lock_script&lt;/code&gt; et concluez avant de quitter par &lt;code&gt;unlock_script&lt;/code&gt;.
&lt;/p&gt;

&lt;h3 id=&quot;preliminaires&quot;&gt;Préliminaires&lt;/h3&gt;
&lt;p&gt;
Pour des facilités de refactoring, je définis toujours mes variables en début de fichier. Je me suis mis dans le répertoire utilisateur, mais en cas de redistribution, il vaut mieux créer son arborescence dans &lt;code&gt;/usr/var/lock&lt;/code&gt; si on suit &lt;a href=&quot;http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/Linux-Filesystem-Hierarchy.html&quot;&gt;le Filesystem Hierarchy Standard&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
En bash, les définition de fonctions peuvent être écrites soit :
&lt;/p&gt;
&lt;blockquote&gt;
function lock_script {
&lt;/blockquote&gt;
&lt;p&gt;
ou sous cette forme :
&lt;/p&gt;
&lt;blockquote&gt;
lock_script() {
&lt;/blockquote&gt;
&lt;p&gt;
Pour aider mes petits camarades à la lecture, je mixe (sûrement très improprement) les notations de déclarations de fonctions bash, ce qui ressemble plus à la convention C/JS/PHP/etc… On notera que la parenthèse n'est pas interprétée
&lt;/p&gt;
&lt;h3 id=&quot;lock_script&quot;&gt;lock_script() ligne à ligne&lt;/h3&gt;
&lt;p&gt;
Je crée inconditionnellement le sous-répertoire qui va accueillir mes fichiers locks
&lt;/p&gt;
&lt;pre&gt;
    mkdir -p ${LOCK_DIR}
&lt;/pre&gt;
&lt;p&gt;
Est-ce qu'un fichier lock est déjà présent ?
&lt;/p&gt;
&lt;pre&gt;
    if [ -f &quot;${LOCK_FILE}&quot; ]; then 
&lt;/pre&gt;
&lt;p&gt;
Je lis son contenu, lequel contient le PID du script l'ayant lancé. La notation &lt;code&gt;`command`&lt;/code&gt; est plus compacte que &lt;code&gt;$(command)&lt;/code&gt; et surtout plus lisible car déjà imbriquée.
&lt;/p&gt;
&lt;pre&gt;
        LOCKING_PID=`cat ${LOCK_FILE}`
&lt;/pre&gt;
&lt;p&gt;
J'envoie un message expliquant la situation vers STDERR, via la très cabalistique notation &lt;code&gt;&amp;gt;&amp;amp;2&lt;/code&gt; qui préfixe une commande dont la sortie normale est redirigée vers le canal d'erreur. La variable &lt;code&gt;$$&lt;/code&gt; donne le PID du script courant.
&lt;/p&gt;
&lt;pre&gt;
        &gt;&amp;2  echo &quot;ERROR : Script ${CALLED_FUNCTION} already locked on PID ${LOCKING_PID}. Cannot run PID $$ . Still running ?&quot;
&lt;/pre&gt;
&lt;p&gt;
Évolutions possibles :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En profiter pour vérifier si ledit script tourne toujours.&lt;/li&gt;
&lt;li&gt;Internationaliser le message&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Sortir avec un code d'erreur
&lt;/p&gt;
&lt;pre&gt;
        exit 1
&lt;/pre&gt;
&lt;p&gt;
Fin de la conditionnelle.
&lt;/p&gt;
&lt;pre&gt;
    fi
&lt;/pre&gt;
&lt;p&gt;
Sinon implicite : Enregistrer dans le LOCK_FILE le PID du script courant.&lt;br /&gt;
J'aurais pu utiliser un &lt;code&gt;touch&lt;/code&gt; qui crée un fichier vide. Mais stocker le PID dans le lock d'un script permet, par exemple, de vérifier qui le script est toujours en cours d'exécution ou a brusquement planté. Si vous avez des outils de monitoring, cela vous laisse de quoi vous amuser.
&lt;/p&gt;
&lt;pre&gt;
    echo $$ &gt; ${LOCK_FILE}
&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;



&lt;h3 id=&quot;unlock_script&quot;&gt;unlock_script() ligne à… ligne&lt;/h3&gt;

&lt;p&gt;
On supprime le lock.
&lt;/p&gt;
&lt;pre&gt;
    rm ${LOCK_FILE}
&lt;/pre&gt;

&lt;p&gt;
Et voilà.
&lt;/p&gt;


&lt;h3 id=&quot;certes&quot;&gt;Alors certes…&lt;/h3&gt;

&lt;p&gt;
Y'avait mieux et plus propre. Pour celà, je vous invite à râler dans ⇓ les commentaires ⇓ ou sinon à &lt;a href=&quot;https://github.com/dascritch/En-20-lignes-pas-plus&quot;&gt;commiter sur mon github&lt;/a&gt;.
&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>Une (pompeuse) histoire de la cryptographie</title>
		<link>https://dascritch.net/post/2017/02/15/Une-%28pompeuse%29-histoire-de-la-cryptographie</link>
		<guid isPermaLink="false">urn:md5:d80d2222c04a8ff8ce66564dac37a454</guid>
		<dc:date>2017-02-15T06:27:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>...à l'usage d'étudiants en design. Donc, promis, pas de maths ou de lignes de code, mais des esclaves, de l'astrologie, des amants infidèles et des consoles de jeu. Bref, un programme pour éveiller l'attention du Jeune Moderne. Si si.		&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;...à l'usage d'étudiants en design. Donc, promis, pas de maths ou de lignes de code, mais des esclaves, de l'astrologie, des amants infidèles et des consoles de jeu. Bref, un programme pour éveiller l'attention du Jeune Moderne. Si si.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;figure&gt;
&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1702-Histoire-cryptographie/1702-Histoire-cryptographie-enigma.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1702-Histoire-cryptographie/.1702-Histoire-cryptographie-enigma_s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;Vue du clavier d'entrée, du panneau de lecture et des rouleaux de chiffrement d'une machine Enigma, dans sa version Marine militaire allemande (4 rouleaux de complexité)
&lt;br /&gt;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Four-rotor-enigma.jpg&quot;&gt;Photo par Greg Goebel, CC&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
J'ai eu l'insigne honneur d'avoir été invité par &lt;a href=&quot;http://www.univ-tlse2.fr/accueil/formation-insertion/odf-2016-2020/master-design-transdisciplinaire-cultures-et-territoires--386180.kjsp&quot;&gt;les master &lt;abbr&gt;DTCT&lt;/abbr&gt; (Design Transdisciplinaire Culture et Territoire)&lt;/a&gt; pour une intervention sur le thème des &lt;strong&gt;dystopies de la communication&lt;/strong&gt;. En tant qu'&lt;a href=&quot;https://dascritch.net/tag/science-fiction&quot;&gt;amateur de SF&lt;/a&gt;, et après ma carrière de critique BD de 20 ans, j'étais d'autant plus flatté que cette invitation venait de &lt;a href=&quot;https://dascritch.net/tag/privacy&quot;&gt;mes participations aux  cryptoparties&lt;/a&gt;. J'ai eu envie de donner un vrai cours bien pompeux.
&lt;/p&gt;
&lt;p&gt;
C'est évidemment &lt;a href=&quot;https://dascritch.net/post/2014/05/14/Pourquoi-je-porte-un-treillis-customise&quot;&gt;dans ma grande tenue de cyberguerrier&amp;nbsp;2.0&lt;/a&gt; que je me suis pointé ce Mercredi 1&lt;sup&gt;er&lt;/sup&gt; Février dans la fac du Mirail, tellement rénovée qu'elle mérite son &lt;em lang=&quot;en&quot;&gt;rebranding&lt;/em&gt; en Université Jean Jaurès.
&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1702-Histoire-cryptographie/1702-Histoire-cryptographie-on-stage.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1702-Histoire-cryptographie/.1702-Histoire-cryptographie-on-stage_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;a href=&quot;https://twitter.com/AnthonyMasure/status/826714040533663746&quot;&gt;Photo twittée par Anthony Masure, CC&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;plan&quot;&gt;Plan&lt;/h3&gt; 
&lt;p&gt;
&lt;a href=&quot;https://dascritch.net/post/2017/02/15/Une-%28pompeuse%29-histoire-de-la-cryptographie#&amp;amp;t=0m0s&quot;&gt;Le cours proprement dit dure 49 minutes&lt;/a&gt; (j'ai débordé).
&lt;/p&gt;
&lt;p&gt;
Questions  :
&lt;/p&gt;
&lt;ul&gt; 
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2017/02/15/Une-%28pompeuse%29-histoire-de-la-cryptographie#&amp;amp;t=49m20s&quot;&gt;49:20 :&lt;/a&gt; Quelle est la prochaine étape dans l'histoire du chiffrement ?&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2017/02/15/Une-%28pompeuse%29-histoire-de-la-cryptographie#&amp;amp;t=51m20s&quot;&gt;51:20 :&lt;/a&gt; Qu'est-ce que c'est qu'une cryptoparty ? (&lt;a href=&quot;https://dascritch.net/post/2017/01/17/Pour-quelques-cryptoparties-avant-les-pr%C3%A9sidentielles#pourquoi_video&quot;&gt;voir aussi ma conf sur le sujet&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dascritch.net/post/2017/02/15/Une-%28pompeuse%29-histoire-de-la-cryptographie#&amp;amp;t=52m55s&quot;&gt;52:55 :&lt;/a&gt; Est-ce que  la &lt;q&gt;navigation privée&lt;/q&gt; nous protège ?&lt;/a&gt;
&lt;/ul&gt;
&lt;p&gt;
J'avais un &lt;a href=&quot;https://dascritch.net/vrac/Supports/1702-HISTOIRE-CRYPTO/index.html&quot; target=&quot;slides&quot;&gt;&lt;strong&gt;&lt;q&gt;support&lt;/q&gt; sous la forme de &lt;q lang=&quot;en&quot;&gt;slides&lt;/q&gt; lisibles sur votre navigateur web&lt;/strong&gt;&lt;/a&gt;. Selon les &lt;a href=&quot;https://cpu.dascritch.net/post/2016/12/08/Ex0045-Sans-regarder&quot;&gt;recommandations du grand sachem Nota&amp;nbsp;Bene&lt;/a&gt;, elles ne font que &lt;del&gt;me servir d'antisèche&lt;/del&gt; reprendre mon propos. On avance en appuyant sur &lt;kbd&gt;→&lt;/kbd&gt;.&lt;br /&gt;
Sinon, vous pouvez vous reporter sur les notes graphiques d'une des auditrices :
&lt;/p&gt;
&lt;figure&gt;
&lt;a href=&quot;https://dascritch.net/vrac/.blog2/webdev/1702-Histoire-cryptographie/1702-Histoire-cryptographie-notes-graphiques.jpg&quot;&gt;&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1702-Histoire-cryptographie/.1702-Histoire-cryptographie-notes-graphiques_m.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;a href=&quot;https://twitter.com/Vuillaume_Lea/status/826742374130921474&quot;&gt;Dessin twitté par Léa Vuillaume, DR&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
C'est pas pour cafter, mais j'ai eu un mal fou à rester docte et sérieux, malgré mon collègue Jules David qui était très dissipé quant à ma présentation au lieu de se concentrer sur son intervention.
&lt;/p&gt;
&lt;p&gt;
Je tiens à remercier Pia Pandelakis et Anthony Masure, les autres intervenants Jules David, Mélanie Bourdaa, Johann Chaulet et Yoan Richard, les copains de Tetaneutral aussi présents et surtout mille mercis aux étudiants en master de design et aux autres étudiants qui sont venus remplir l'ampli. Avoir plus d'une centaine de personnes en face de soit reste toujours intimidant, que vous soyez restés jusqu'au bout et êtes même venus poser des questions après était… gratifiant. Merci d'avoir accepté mes élucubrations. 
&lt;/p&gt;

&lt;p&gt;
Licence du &lt;q&gt;cours&lt;/q&gt; et du sonore en Creative Commons. Pas impossible que je le remonte pour la radio ;)
&lt;/p&gt;

&lt;h3 id=&quot;venez&quot;&gt;Venez les rencontrer !&lt;/h3&gt; 
&lt;p&gt;
Une journée portes ouvertes est prévue le Samedi 25 Février, et conclue justement la semaine de travail des étudiants en master de design. Et ils montreront à cette occasion leurs travaux. Occasion de voir comment ils verront ce futur effrayant : comme l'occasion de se distinguer comme meilleur officier panoptique, ou en tant que militant de la vie privée.
&lt;/p&gt;
&lt;p&gt;
Un point intéressant pour ceux qui seraient intéressé par cette voie universitaire, les étudiants ont accès à un vrai fablab, ils ont donc la possibilité de prototyper leurs travaux.
&lt;/p&gt;</content:encoded>
    
    
      <enclosure url="/vrac/sonores/podcast/1702-Histoire-du-chiffrement.mp3"
      length="52693376" type="audio/mpeg3" />
    
    
      </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>CPU Ex0012 : Bonjour à toi, enfant du futur immédiat : Histoire de paquets</title>
		<link>https://dascritch.net/post/2015/12/10/CPU-Ex0012-%3A-Bonjour-%C3%A0-toi%2C-enfant-du-futur-imm%C3%A9diat-%3A-Histoire-de-paquets</link>
		<guid isPermaLink="false">urn:md5:60d8d9dad6572a6cbb0715b7518ff523</guid>
		<dc:date>2015-12-10T13:19:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Internet, c'est une série de tubes où les paquets se passent ... euh non, attends... efface, je vais expliquer différemment.		&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;Internet, c'est une série de tubes où les paquets se passent ... euh non, attends... efface, je vais expliquer différemment.&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/12/10/Ex0012-Ing%C3%A9nierie-d-Internet&quot;&gt;Ceci est une partie du script de la &lt;em lang=&quot;en&quot;&gt;release&lt;/em&gt; Ex0012 du programme CPU, diffusé Jeudi 10/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 est désormais branché par wi-fi, bluetooth, 4G mais qui aimerait bien savoir comment marche tout ça.&lt;br /&gt;
&lt;small&gt;Bon, en fait, ça ne &lt;q&gt;marche&lt;/q&gt; pas, ça &lt;q&gt;fonctionne&lt;/q&gt;, parce que si ça &lt;q&gt;marcherait&lt;/q&gt;, on serait toujours derrière à galoper après et cela ne serait pas pratique du tout.&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Aujourd'hui, on va tenter de t'expliquer ce qu'est internet, dans les tuyaux, dans les câbles, dans les faits et dans les routeurs. Comment fonctionne-t-il, mais surtout, comment a-t-il été conçu.
&lt;/p&gt;
&lt;p&gt;
Oui, un petit cours technique, très simple à comprendre, on s'est dit qu'il était indispensable de se détendre un peu après deux &lt;em lang=&quot;en&quot;&gt;releases&lt;/em&gt; assez éprouvantes. Et si tu t'y connais un peu, revoir ses classiques depuis la base n'a jamais fait de mal à personne. Ou alors tu te gausseras mais t'aurais pas trouvé forcément mieux pour expliquer.
&lt;/p&gt;
&lt;p&gt;
Internet s'explique déjà dans son nom : &lt;q&gt;inter network&lt;/q&gt;, c'est l'union de plusieurs réseaux informatiques, totalement disparates, mais qui au final, grâce à un peu de salive et d'huile de coude, arrivent à communiquer entre eux, voire à être interopérables. Ainsi, quand ton smartphone passe de ton opérateur mobile au réseau wi-fi de chez toi, les interfaces et protocoles techniques sont très différents, mais les applications arrivent à tourner sans trop de problèmes.
&lt;/p&gt;
&lt;p&gt;
Alors, c'est quoi un réseau informatique ? C'est au moins deux ordinateur qui veulent discuter entre eux. Et toute la difficulté est de faire discuter plusieurs d'entre eux. Là commence la magie du routage, de gestion de trafic, etc...
&lt;/p&gt;
&lt;p&gt;
Comme c'est bientôt Noël, je vais te raconter comment arrivent les paquets…
&lt;/p&gt;
&lt;figure&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/tra3Zi5ZWa0?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/figure&gt;
&lt;p&gt;
Disons que, &lt;a href=&quot;http://www.leprisonnier.net/&quot;&gt;dans un Village&lt;/a&gt;, 8 personnes sont plus ou moins éloignées et qu'elles se sont numérotées entre 1 et 8. Disons que la n°6 a un paquet pour le n°2. Le n°6 (qui maintient qu'il n'est pas un numéro, mais on va quand même la désigner par ce numéro, sinon il va vite devenir chiant) va coller une étiquette sur le paquet, indiquant &lt;q&gt;envoyé par n°6&lt;/q&gt;, et &lt;q&gt;destiné à n°2&lt;/q&gt;. Il passe le paquet au numéro 5, parce que numéro 5 est à mi-chemin et qu'il veut bien s'en occuper, mais surtout parce que le passer au numéro 7 est un peu débile, &lt;a href=&quot;http://www.portmeirion-village.com/visit/the-prisoner/&quot;&gt;s'il en croit la carte du Village&lt;/a&gt;. Numéro 5 lit le destinataire, voyant que ce n'est pas pour lui, va le passer au n°4, etc... jusqu'au n°2 qui va l'ouvrir, puisqu'il lui est destiné.&lt;br /&gt;
Bonjour chez vous !
&lt;/p&gt;
&lt;p&gt;
Alors certes, c'est un peu schématique, &lt;a href=&quot;http://www.france3.fr/emissions/c-est-pas-sorcier&quot;&gt;n'est pas Jamy dans un camion qui veut&lt;/a&gt;, et cela ne se passe pas exactement comme ça, mais en gros, le paquet est la charge utile, ce sont les données elles-mêmes, et les adresses de départ et d'arrivée sont les métadonnées pour que le réseau fonctionne. Et le tout fait &lt;a href=&quot;http://www.commentcamarche.net/contents/530-le-protocole-ip&quot;&gt;un datagramme.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
En résumé, internet, c'est ça : différents réseaux qui discutent entre eux, basés sur des adresses et pour différentes fonctions.&lt;br /&gt;
En certains points, on accède à d'autres réseaux, tout comme on accède à l'international téléphonique, sera le genre humain pardon je m'emporte
&lt;/p&gt;
&lt;p&gt;
Et quitte à faire une analogie téléphonée, comme retenir le numéro de téléphone de tous ses amis n'est pas toujours faisable, &lt;a href=&quot;http://cpu.dascritch.net/post/2015/10/29/Ex0007-Noms-de-domaines&quot;&gt;il existe des annuaires, les DNS, et ça, enfant du futur immédiat, on t'en a déjà parlé précédemment.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Dans la réalité, Internet ne s'est pas conçu rapidement. Il a fallut passer par différentes étapes, et notamment une unification des fonctions de bases de réseaux. Par exemple, pendant des années, il y eu des réseaux qui refusaient d'utiliser le même protocole. C'était ainsi le cas de réseaux comme celui d'AOL, &lt;a href=&quot;http://www.macworld.com/article/1043641/appletalk.html&quot;&gt;l'AppleTalk&lt;/a&gt; qui reliaient les Mac, ou &lt;a href=&quot;https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ras_lan_protocols_ipx.mspx?mfr=true&quot;&gt;l'IPX&lt;/a&gt; de Microsoft. Ils ont tous les trois disparus, parce que mettre en œuvre les protocoles d'internet étaient moins chers et souvent plus fiables.
&lt;/p&gt;
&lt;p&gt;
Internet a aussi une propriété particulière : les paquets peuvent arriver dans le désordre, c'est le destinataire final qui reconstruit dans l'ordre. . Un peu comme si pour ton étagère ikéa, tu recevais d'abord les planches, ensuite le plan et enfin les clous parce que les livreurs se sont trompés de direction sur la rocade. Peu importe l'ordre dans lequel les paquets arrivent, tu sauras quand tu peux commencer à monter l'étagère quand il aura tous les éléments attendus.
&lt;/p&gt;
&lt;p&gt;
Puis les services apparurent. Internet avait heureusement été conçu pour ne pas être limité fonctionnellement. À l'adresse sur les paquets que l'on se transmet, on a rajouté &lt;a href=&quot;http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-en-4/ch-ports.html&quot;&gt;un numéro de port,&lt;/a&gt; compris entre 1 et 65535. Si on s'adresse au port 80 ou 443, vous parlez à un site web. Les ports 25,110 et 143 servent à envoyer et recevoir des e-mails.
&lt;/p&gt;
&lt;p&gt;
Enfant du futur immédiat, on vient de t'expliquer quelques bases sur comment fonctionne internet. Et encore, on ne t'a pas parlé des chats (ceux des dialogues) ou des licornes (celles à un milliard).&lt;br /&gt;
Dans cette release, on va plutôt t'expliquer comment internet se construit et il évolue techniquement. Et on peut aussi te faire cette blague sans avoir besoin de te l'expliquer&amp;nbsp;:
&lt;/p&gt;
&lt;blockquote&gt;
« C'est deux paquets UDP qui discutent : &lt;br /&gt;
— Ha bon ?&lt;br /&gt;
— Tu sais que je peux arriver avant toi ?»
&lt;/blockquote&gt;</content:encoded>
    
    
      <enclosure url="/vrac/Emissions/CPU/podcast/0012-CPU%2810-12-15%29.mp3"
      length="56036431" 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>Plantage : Sex.com</title>
		<link>https://dascritch.net/post/2015/11/03/Plantage-%3A-sex.com</link>
		<guid isPermaLink="false">urn:md5:d237bbc9c8573354fb801beab9001149</guid>
		<dc:date>2015-11-03T06:18:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>Du stupre ! De la nudité ! De l'argent ! De l'escroquerie ! Et des bannières publicitaires honteuses :... Manque plus que le jingle de &lt;q&gt;Personne ne bouge&lt;/q&gt; qui fait &lt;q&gt;SCAAAANDAAAAAALE !&lt;/q&gt;		&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;Du stupre ! De la nudité ! De l'argent ! De l'escroquerie ! Et des bannières publicitaires honteuses :... Manque plus que le jingle de &lt;q&gt;Personne ne bouge&lt;/q&gt; qui fait &lt;q&gt;SCAAAANDAAAAAALE !&lt;/q&gt;&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/10/29/Ex0007-Noms-de-domaines&quot;&gt;Ceci est une partie du script de la release Ex0007 du programme CPU, diffusé Jeudi 29 à 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;
Au moment où les registres DNS furent mis en place, l'obtention d'un nom de domaine était une formalité gratuite. Puis les noms de domaine devinrent une forme de location, obtenue par des services de registrar, contre le paiement d'un bail annuel.&lt;br /&gt;
Mais nous restions dans la règle du &lt;q&gt;premier arrivé, premier servi.&lt;/q&gt;
&lt;/p&gt;
&lt;p&gt;
Gary Kremen réserva en mai 1994 le nom de domaine &lt;code&gt;sex.com&lt;/code&gt;&amp;nbsp;; se disant qu'un nom aussi court, quasi universel, et très sulfureux ferait sûrement un bon investissement dans le futur. Mais dans l'immédiat, notre entrepreneur est plus préoccupé à développer son service de rencontre &lt;code&gt;match.com&lt;/code&gt;. Pour rappel, le navigateur Netscape 2.0 venait à peine de sortir.
&lt;/p&gt;
&lt;p&gt;
Mais il se trouve que ce nom était vraiment trop attirant pour ne pas l'exploiter. Ainsi Stephen M. Cohen, qui a été maintes fois convaincu d'escroquerie à l'identité et de vol, dont deux peines de prisons, la dernière qu'il termina de purger en 1995, se dit qu'il pourrait se ré-insérer dans la société. L'audacieux décida de tenter d'attraper le train d'internet sans payer de billet. M. Cohen passa plusieurs coups de fils et envoya plusieurs lettres au registrar de tous les noms en &lt;code&gt;.com&lt;/code&gt;, Network Solutions, en tentant de se faire passer pour le représentant légitime du possesseur de &lt;code&gt;sex.com&lt;/code&gt;. Une attaque classique en brute-force, sans même utiliser d'e-mail, puisqu'il n'avait pas d'abonnement internet&amp;nbsp;! &lt;small&gt;(si ! si ! ce scabreux détail est dans les attendus du jugement)&lt;/small&gt;
&lt;/p&gt;
&lt;p&gt;
Un jour d'Octobre 1995, le registrar reçu un fax.&lt;br /&gt;
Un fax.&lt;br /&gt;
Un simple fax qui ordonnait de changer de propriétaire ledit nom de domaine.&lt;br /&gt;
L'employé de Network Solutions qui lu le fax s'exécuta sans plus de vérifications, et transféra le nom de domaine &lt;code&gt;sex.com&lt;/code&gt; de M. Kremen à M. Cohen
&lt;/p&gt;
&lt;h3 id=&quot;plantage&quot;&gt;Plantage…&lt;/h3&gt;
&lt;p&gt;
Un fois de plus, PEBKAC, le problème est entre la chaise et le clavier, l'humain s'est révélé être la plus grande faille de sécurité.
&lt;/p&gt;
&lt;p&gt;
L'affaire révéla que les procédures de vérification d'identité de Network Solutions n'étaient pas très solides, voire même totalement inexistantes. Par la-même, cette erreur manifeste mis un très sérieux doute pour tous ses clients qui louaient un nom de domaine en &lt;code&gt;.com&lt;/code&gt; ou en &lt;code&gt;.net&lt;/code&gt;.&lt;br /&gt;
Mais surtout, la désinvolture de l'opérateur choqua&amp;nbsp;: Quand Kremen s'aperçut du transfert imbu avant même son premier &lt;em&gt;coïtus interruptus&lt;/em&gt;, il demanda à Network Solution de restaurer sa propriété sur le titre en opérant l'opération logique inverse. &lt;a href=&quot;http://blog.ericgoldman.org/archives/2006/10/sexcom_an_updat.htm&quot;&gt;Network Solution haussa des épaules et lui répondit que le mieux serait d'aller au tribunal.&lt;/a&gt; Sans aucun embarras ou excuse.
&lt;/p&gt;
&lt;p&gt;
Ben voyons...
&lt;/p&gt;
&lt;p&gt;
C'est ce que fit Kremen bien sûr !
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://motherboard.vice.com/read/the-history-of-sexcom-the-most-contested-domain-on-the-internet&quot;&gt;Le mot &lt;q&gt;sex&lt;/q&gt; était déjà sulfureux dans la très puritaine Amérique, le nom de domaine &lt;code&gt;sex.com&lt;/code&gt; devient un feuilleton qui ébranla le secteur économique naissant des sites webs, avec un viol manifeste d'une proprété virtuelle.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Pénétrant sans préliminaires et façon gonzo, Stephen Cohen fit une belle fortune : &lt;a href=&quot;http://www.wired.com/1999/04/the-sordid-saga-of-sex-com/&quot;&gt;un chiffre d'affaire estimé à 100 M$ sur l'année 1998&lt;/a&gt;, facturant un million de dollar mensuels la présence d'une bannière sur ses pages, et les services de Nude As A Service, vendus 25 $/mois à 9 millions d'onanistes baveux connectés.
&lt;/p&gt;
&lt;p&gt;
Quand il dû expliquer sa manœuvre et surtout quel droit il avait à &lt;del&gt;sucer&lt;/del&gt; sucrer ce nom, le margoulin expliquait que dans les années 1980, il gérait le BBS French Connection, un serveur télématique de discussion qui fut accusé d'être lié à des activités de proxénétisme, dont l'exécutable s'appelait &lt;code&gt;SEX.COM&lt;/code&gt; . À l'époque, dans le monde MS-DOS et CPM, la plupart des fichiers exécutables se terminaient en &lt;code&gt;.COM&lt;/code&gt; . Si une telle défense avait abouti, n'importe qui aurait pu revendiquer n'importe quel nom de domaine en 8 lettres ou moins.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://caselaw.findlaw.com/us-9th-circuit/1483800.html&quot;&gt;Cohen perdra le procès,&lt;/a&gt; fut condamné à payer 65 M$ en dommages et intérêts. &lt;a href=&quot;http://www.forbes.com/sites/jayadkisson/2013/01/19/kremen/&quot;&gt;Le filou convaincu organisa une faillite frauduleuse,&lt;/a&gt; vidant ses comptes vers des banques au-delà du Pecos et s'envolera pour Tijuana sans payer l'amende au nez et à la barbe de la Justice. Inutile de dire que le Ministère Public a assez peu apprécié que le condamné joue la fille de l'air avec sa fortune et envoya les U.S. Marshalls à ses trousses&amp;nbsp;!&lt;br /&gt;
Son exil au Mexique ne l'empêcha pas de se retrouver en prison pour immigration clandestine (eh oui), d'où il fut extradé aux États-Unis. À ce jour, il n'a toujours pas payer son dû, s'étant déclaré en faillite.
&lt;/p&gt;
&lt;p&gt;
Dans un autre procès intenté par Kremen, Network Solution fut bien reconnu comme en partie responsable, mais sans aucune pénalité à payer. Car il n'y eu aucune transaction financière et aucun contrat de signé entre Gary Kremen et le registrar. Eh oui, rappelez-vous&amp;nbsp;! Kremen ayant obtenu gratuitement son nom de domaine. Chou blanc, mais au moins, il récupéra le contrôle sur sex.com
&lt;/p&gt;
&lt;p&gt;
Dès qu'il récupéra le contrôle du nom de domaine, Kremen compris qu'il ne fallait pas le laisser dormir, et donc &lt;a href=&quot;http://archive.wired.com/wired/archive/11.08/sex_com_pr.html&quot;&gt;ouvrit une page web uniquement peuplé de publicités&lt;/a&gt;, qui s’avéra rentable malgré l'explosion de la bulle spéculative d'internet en 2001. Il le revendit pour 13M$ à Escow LLC, ce qui reste à ce jour &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_most_expensive_domain_names&quot;&gt;une des 5 transactions les plus chères du mercato des noms de domaines.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Sex.com sera un bon coup, le genre à ébranler l'ensemble de l'immeuble.
&lt;/p&gt;
&lt;p&gt;
Depuis, des protections minimales durent mises en place pour éviter un transfert de nom de domaine entre registrars si le locataire ne le désire pas, et un procédé par un numéro de dossier jetable fut mis en place pour éviter qu'un simple fax ou e-mail permette ce genre de cafouillage.
&lt;/p&gt;</content:encoded>
    
    
    
      </item>
  
	<item>
		<title>CPU Ex0007 : J'ai loué cpu.pm</title>
		<link>https://dascritch.net/post/2015/10/29/CPU-Ex0007-%3A-J-ai-lou%C3%A9-cpu.pm</link>
		<guid isPermaLink="false">urn:md5:4f642df0fab922a9fdb07a984e7abea0</guid>
		<dc:date>2015-10-29T13:20:00+01:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>On a commencé par un annuaire, on va finir par une grosse bulle et des noms creux dévalué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;On a commencé par un annuaire, on va finir par une grosse bulle et des noms creux dévalué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;p&gt;
&lt;a href=&quot;http://cpu.dascritch.net/post/2015/10/29/Ex0007-Noms-de-domaines&quot;&gt;Ceci est une partie du script de la release Ex0007 du programme CPU, diffusé Jeudi 29 à 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 as trouvé notre programme d'une manière quelconque.
&lt;/p&gt;
La première chose qu'un enfant apprend à faire, et la première chose avec laquelle on note son intelligence, c'est de nommer les choses. Ainsi fut le verbe, et p-a-papa&amp;nbsp;!
&lt;/p&gt;
&lt;p&gt;
Dans les protocoles réseaux d'internet, les machines discutent entre elles en s'appelant par des adresse chiffrées, qu'on appelle une adresse IP. Celles-ci ne sont pas forcément faciles à retenir pour les humains. D'ailleurs, maintenant que nos téléphones ont tous un carnet d'adresse intégré, je doute que vous ne connaissiez plus d'une dizaine de numéro de téléphones de vos proches.
&lt;/p&gt;
&lt;p&gt;
Pour accéder à un site internet, le faire à partir de son adresse numérique est nettement moins évident. Il y a des cas qu'on retrouve facilement, par exemple une page web grâce à un moteur de recherche, comme on en a parlé il y a 15 jours. Mais pour un serveur non indexé, pour une adresse e-mail, et que sais-je encore, n'avoir qu'une adresse numérique est tout sauf pratique.
&lt;/p&gt;
&lt;p&gt;
Heureusement, il est possible de donner un nom d'alias à votre ordinateur. Et donc indiquer que le site cpu.pm pointe vers l'adresse IPv4 &lt;code&gt;89.234.156.173&lt;/code&gt; ou en IPv6 &lt;code&gt;2a01:6600:8083:ad00::1&lt;/code&gt;. Ceci peut se faire en éditant le fichier &lt;code&gt;hosts&lt;/code&gt;, en général dans le répertoire &lt;code&gt;/etc&lt;/code&gt; de votre ordinateur. Et d'ailleurs, c'était plus ou moins comme ça que faisait les gros centres informatiques reliés aux origines d'internet dans les années 1970s et 1980s, avec les responsables systèmes qui s'envoyaient par e-mail les modifications d'adresse IP et leurs noms.&lt;br /&gt;
Mais comme ce n'était pas très pratique à maintenir surtout une fois passé de 10 machines à quelques centaines, en 1984, les responsables décidèrent de créer un annuaire commun, le système de nom de domaine, ou Domain Name System (oui, je m’entraîne déjà pour l'émission de la semaine prochaine). Avec une convention de nommage allant de la droite vers la gauche.
&lt;/p&gt;
&lt;p&gt;
Tout à droite, vous avez le TLD, ou Top Level Domain, ou encore Domaine de Premier Niveau. Les 6 TLD génériques qui furent d'abord créés permettaient de catégoriser et donc de comprendre à qui on s'adresse&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt; 
&lt;li&gt;en .com, à une entreprise&lt;/li&gt;
&lt;li&gt;en .edu, à une université&lt;/li&gt;
&lt;li&gt;en .org pour une organisation à but non lucratif&lt;/li&gt;
&lt;li&gt;en .net, à un prestataire technique d'internet&lt;/li&gt;
&lt;li&gt;en .gov pour un ministère ou tout autre organisme du gouvernement fédéral américain&lt;/li&gt;
&lt;li&gt;en .mil, à un ordinateur du Pentagone, classement totalement à part rien que pour faire plaisir aux illuminés des théories du Complot&lt;/li&gt;
&lt;/ul&gt;
&lt;
De ces 6 TLD, on commença par la suite à créer des TLD en deux lettres, ou cc-TLD, rattachés à des pays. Le code est lié à une nomenclature déjà existante, la ISO 3166-1. Vous connaissez le .fr, qui est celui de cocorico, la Frrrrrance. Il y a .uk pour le Royaume Uni, le .de pour l'Allemagne.&lt;br /&gt;
Sauf que tout le monde a oublié qu'il existe un .us pour les États-Unis, sans compter les pays qui ont disparu de nos jours comme  le .su pour ... l'URSS (que l'on peut encore demander) ou le .cs pour la Tchécoslovaquie.
&lt;/p&gt;
&lt;p&gt;
Avant le TLD, vous avez le qualificatif de domaine, par exemple radio-fmr . C'est en général le nom de la marque d'une entreprise. Le qualificatif et un TLD forment un nom de domaine, et c'est pour l'obtenir que l'on loue à l'année.
&lt;/p&gt;
&lt;p&gt;
Et en dessous, on peut mettre des sous-domaines. Comme par exemple &quot;www&quot; pour www.radio-fmr.net , ou encore &quot;admin&quot; ou encore &quot;pc-de-dascritch&quot;. Mais ces sous-domaines sont quasi gratuits : je peux en créer autant que je veux, addossé à mon nom de domaine. Leur création relève de la responsabilité de celui qui aloué le nom de domaine, et à son entière discrétion.
&lt;/p&gt;
&lt;p&gt;
En fait, ces registres DNS sont les derniers éléments réellement centralisés d'internet. Et l'enregistrement d'un nom de domaine se fait en s'adressant, directement ou non , à une entreprise gestionnaire du TLD voulu.&lt;br /&gt;
Et la règle d'obtention est la plupart du temps très simple : si le nom est disponible et que tu paies, premier arrivé, premier servi&amp;nbsp;!
&lt;/p&gt;
&lt;p&gt;
Alors évidemment, la question de la légitimité d'un nom de domaine fut très vite posée. Prenons lotus.com . Laquelle de ces entreprises pourrait y avoir plus le droit que les autres&amp;nbsp;?
&lt;/p&gt;
&lt;p&gt;
&lt;small&gt;(le plateau passe en mode quizz)&lt;/small&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;L'éditeur de la suite logicielle d'entreprise Lotus 1 2 3 et Lotus Notes ?&lt;/li&gt;
&lt;li&gt;Le constructeur britannique de voitures de course, que vous pouvez vous payer si vous avez été revendeur de la suite logicielle précédemment nommée ?&lt;/li&gt;
&lt;li&gt;Le fabriquant de papier toilettes ultra-doux que vous ne manquerez pas d'utiliser la première fois que vous aurez eu à faire un freinage d'urgence avec votre voiture de course homonyme ?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Allez, je tue le suspens : actuellement, c'est IBM qui l'a, ayant racheté l'éditeur logiciel.
&lt;/p&gt;
&lt;/p&gt;
Afin d'organiser la gestion de ce business est créé en 1998 l'ICANN (Internet Corporation for Assigned Names and Numbers) qui régule à la fois les règles de ce business, distribue les TLD entre registrars et maintient les serveurs DNS racines qui sont à la base des annuaires d'internet.
&lt;/p&gt;
&lt;p&gt;
À partir de la fin des années 1990s eurent lieu des réservations de noms de domaines dits &lt;q&gt;en or&lt;/q&gt;. Parce qu'ils représentaient ceux d'une marque, d'un mot commun ou d'un verbe en anglais, d'une ville ou d'un nom de famille plutôt courant.&lt;br /&gt;
La plupart de ces noms de domaines aboutissaient nulle part. Ou plutôt, presque nulle part : un site web était placé derrière, une simple page, qui disait que le nom de domaine est disponible à la vente, à un prix d'achat singulier.&lt;br /&gt;
&lt;q&gt;Singulier&lt;/q&gt; au sens que le nombre n'a pas qu'un chiffres, mais plusieurs, parfois les possesseurs de certains noms demandent plusieurs centaines de milliers d'euros, et que tant que personne n'est prêt à débourser un tel chiffre, et bien ils continuent à louer leur nom pour une dizaine de dollars annuels.
&lt;/p&gt;
&lt;p&gt;
Bien évidemment, il y eu très vite des abus, que l'on appelle &lt;q&gt;cybersquatting&lt;/q&gt;, l'art, non pas de faire de la trottinette en tenue de Robocop, mais bel et bien de revendiquer un nom connu sans en avoir dessus le moindre droit, et en exiger une somme escroquatoire assez importante.&lt;br /&gt;
&lt;a href=&quot;http://www.journaldunet.com/ebusiness/expert/56235/conflit-entre-une-marque-et-un-nom-de-domaine---le-choix-du-recours-a-la-procedure-extra-judiciaire.shtml&quot;&gt;L'ICANN a créé une procédure de résolution en 1999,&lt;/a&gt; le &lt;abbr&gt;UDRP&lt;/abbr&gt; (ou &lt;em lang=&quot;en&quot;&gt;Uniform Dispute Resolution Policy&lt;/em&gt;). Pour l'Europe, ces conflits se résolvent devant l'&lt;abbr&gt;OMPI&lt;/abbr&gt;, Office Mondial de la Propriété Intellectuelle.
&lt;/p&gt;
&lt;p&gt;
Seulement... Si vous êtes dépositaire d'une marque internationale, il faut néanmoins la protéger le plus possible, donc déposer le plus possible de noms de domaines, dans le plus de &lt;abbr&gt;TLD&lt;/abbr&gt; possibles. Or, il y a depuis une dizaine d'année une inflation délirante du nombre de &lt;em lang=&quot;en&quot;&gt;Top Level Domain&lt;/em&gt;, avec parfois &lt;a href=&quot;http://dascritch.net/post/2006/05/22/431-extention-du-nom-de-domaine-de-la-lutte&quot;&gt;des limitations ubuesques comme le .mobi&lt;/a&gt; mais plus souvent des tarifs démentiels .
&lt;/p&gt;
&lt;p&gt;
Et ça, je suis retombé dedans en voulant déposer un nom de domaine pour l'émission qui redirige vers son site web, mais qui soit facile à prononcer à la radio, à retenir dans la tête et à écrire sur un téléphone portable.&lt;br /&gt;
Il est vrai que les noms en 3 lettres en .com en .net ou en .org sont tous occupés depuis la fin du précédent millénaire. Mais j'ai quand même testé...&lt;br /&gt;
Sauf qu'en faisant mon shopping chez le registrar Gandi, j'ai eu des propositions plutôt délirantes, genre &quot;cpu.space&quot; pour 423,32 €/an, inutile de dire qu'on obtient vite des prix stratosphériques sans réelle justification.&lt;br /&gt;
J'ai pris les 5 plus chers.
&lt;/p&gt;
&lt;p&gt;
Or qui &quot;classement&quot; dit &quot;top&quot; et qui dit &quot;5&quot; dit .... &lt;strong&gt;Le Top 5&lt;/strong&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;cpu.tech pour 11347,64 € /an&lt;/li&gt;
&lt;li&gt;Ex-aequos cpu.online , cpu.site, cpu.review, cpu.software  pour 3816,18 €/an&lt;/li&gt;
&lt;li&gt;cpu.website pour 1670,07 € /an&lt;/li&gt;
&lt;li&gt;cpu.八卦 (&lt;q&gt;gossip&lt;/q&gt; en chinois) pour 1579,36 €/an&lt;/li&gt;
&lt;li&gt;cpu.market pour 1353,35 € /an&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Classement non exaustif, effectué en fonction des noms disponibles et des tarifs proposés par gandi.net cette semaine, hors promotions et rabais pour achats en lots.
&lt;/p&gt;
&lt;p&gt;
À noter qu'on tombe à 9€/an avec trois autres lettres, genre &quot;zlo&quot;. Car certains noms sont considérés &quot;en or&quot;, et donc revendu au même prix au gramme par le gestionnaire du TLD, mais hélas sans divulgation publique des critères. Je lis la réponse officielle de Gandi sur le sujet, que nous avons donc sollicité, faute de documents officiels et publics sur le sujet&amp;nbsp;:
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
Depuis un peu plus d’un an, 600 nouvelles extensions de noms de domaine (TLD) sont venues s’ajouter aux extensions existantes (.COM, .FR, .NET, …), et il est courant de constater depuis des différences de prix substantielles sur une même extension.
&lt;/p&gt;
&lt;/p&gt;
L’enregistrement de zlu.tech, par exemple, serait facturé au tarif standard de 50€ par an, tandis que le domaine cpu.tech se retrouve propulsé à plus de 11.000 euros.
&lt;p&gt;
&lt;/p&gt;
En cause, l’utilisation par les registres du mécanisme dit « premium », à savoir l’application d’un tarif plus élevé à une liste de noms de domaine ayant la particularité d’être facilement mémorisables, souvent très génériques et par conséquent très intéressants en termes de référencement naturel.
&lt;/p&gt;
&lt;p&gt;
Qu’il soit générique ou qu’il vise un secteur niche, les registres établissent leur liste de noms premiums parmi ceux qui semblent les plus bankables, et en fixent les tarifs de manière discrétionnaire, le bureau d’enregistrement (registrar) n’ayant d’autre choix que de l’appliquer lorsqu’un client souhaitera l’enregistrer, à moins qu’il préfère ne pas les commercialiser.
&lt;/p&gt;
&lt;p&gt;
Chaque liste de noms premium est spécifique à chaque nouvelle extension, tout comme la politique tarifaire appliquée. Ainsi, le nom de domaine cpu.tech est il considéré comme un Premium, mais pas les noms de domaine cpu.photos ou cpu.immo qui sont commercialisés à un tarif annuel standard, leur attractivité publicitaire étant moindre.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Ainsi lol.news monte à 46788 €/an. Pour vous iTélé, puisque vous allez changer de nom.
&lt;/p&gt;
&lt;p&gt;
Évidemment, inutile de vous dire que quand j'ai dû choisir le nom de domaine de l'émission, je me suis attardé sur le moins cher, le plus logique et le plus facile à écrire avec un téléphone portable.&lt;br /&gt;
C'est pour ça que le programme CPU a comme site web raccourci cpu.pm , nom que j'ai donc déposé, pour 12 € annuel. Le .pm est le ccTLD de Saint-Pierre Et Miquelon, que j'ai le droit d'utiliser en tant que citoyen Français. Mais je le renvoie sur un sous-domaine, au cas où...
&lt;/p&gt;
&lt;p&gt;
Enfant du futur immédiat,  le système de nom de domaine est le dernier service centralisé d'internet, mais très pratique. Il ne repose que sur de la location d'adresse, mais a ses vices : il est  devenu un business très lucratif, et l'explosion du nombre de TLD &quot;génériques&quot; démontre que nous sommes clairement dans une bulle spéculative latente. Il est probable qu'un jour, cette bulle éclate, des noms de domaines ne résolvant plus rien.
&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;
Mercis à Sophie Gironi, Alexandre Hugla et les équipes de Gandi qui ont pris le temps de rédiger une réponse officielle.
&lt;/p&gt;</content:encoded>
    
    
      <enclosure url="/vrac/Emissions/CPU/podcast/0007-CPU%2829-10-15%29.mp3"
      length="58403252" type="audio/mpeg3" />
    
    
      </item>
  
	<item>
		<title>Ainsi naquit l'EFF</title>
		<link>https://dascritch.net/post/2015/10/05/Ainsi-naquit-l-EFF</link>
		<guid isPermaLink="false">urn:md5:1de6f8a4ba222cf080489b2ee50613bf</guid>
		<dc:date>2015-10-05T13:17:00+02:00</dc:date>

    <dc:creator>Da Scritch</dc:creator>
        <dc:subject>Webdev</dc:subject>
        
    <description>L'Electronic Frontier Foundation est là pour votre salut internet.		&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;L'Electronic Frontier Foundation est là pour votre salut internet.&lt;span class="tags"&gt;&lt;br /&gt;
		&lt;a href="https://dascritch.net/category/Webdev"&gt;
			Webdev&lt;/a&gt;
				&lt;/span&gt;
		&lt;/p&gt;
		&lt;figure&gt;
&lt;img src=&quot;https://dascritch.net/vrac/.blog2/webdev/1510-Eff-Full-Logo.png&quot; alt=&quot;&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;

Chronique lue pour &lt;a href=&quot;http://http://cpu.dascritch.net/post/2015/10/01/Ex0003-Les-%C3%A9lus-politiques-face-aux-geeks&quot;&gt;l'émission radio CPU Ex0003 : Les élus politiques face aux geeks&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Nous sommes aux États-Unis en 1990 et l'histoire commence par un vol de logiciel.
&lt;/p&gt;
&lt;p&gt;
Apple soupçonne que &lt;a href=&quot;http://www.verycomputer.com/26_434d3598463d6cba_1.htm&quot;&gt;le code source des ROM, l'équivalent du BIOS de ses ordinateurs MacIntosh, n'aie été dérobé.&lt;/a&gt; La firme à la pomme est dans un instant critique, car la gamme ultra-rentable de ses ordinateurs Apple &lt;span class=&quot;serif&quot;&gt;II&lt;/span&gt; a été retirée du marché, mais les ventes de MacIntosh ne décollent que doucettement, sûrement dû à un prix de vente assez imposant&amp;nbsp;; pendant ce temps, des émulateurs de MacIntosh commencent à fleurir et pourrait noyer l'original si ces ROM courent dans la nature, &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Computer_Inc_v_Mackintosh_Computers_Ltd&quot;&gt;comme cela a faillit être le cas avec ses Apple &lt;span class=&quot;serif&quot;&gt;II&lt;/span&gt;.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
L'enquête dudit larcin est confiée au FBI, qui peut enquêter sur les crimes fédéraux, c'est à dire ayant eu lieu sur plusieurs états, grâce à son maillage de bureaux locaux et d'agents de terrains.&lt;br /&gt;
John Perry Barlow, entres autres &lt;a href=&quot;http://www.dead.net/&quot;&gt;parolier du groupe de rock Grateful Dead,&lt;/a&gt; se retrouve perquisitionné dans cette affaire. Mais lors de cette intervention dans son domicile, il se rend vite compte que les agents fédéraux menant la procédure ne comprennent pas l'informatique. Il n'était donc pas sûr que ses droits de citoyen soient correctement protégés, et notamment le premier d'entre eux qui est d'être présumé innocent, puisque la nature même du délit était totalement imperméable aux agents de police. Comme il le dit lui-même&amp;nbsp;: «&amp;nbsp;&lt;em&gt;avant même de pouvoir prouver mon innocence, il fallait que je décrive le délit.&lt;/em&gt;&amp;nbsp;»
&lt;/p&gt;
&lt;p&gt;
Or, depuis la fin des années 1980s, les États-Unis sont dans une époque de forte judiciarisation des délits informatiques, allant jusqu'à l'absurde&amp;nbsp;: &lt;a href=&quot;http://www.sjgames.com/SS/&quot;&gt;l'éditeur de jeux de rôles Steve Jackson Games fut perquisitionné sur des soupçons de piratage informatique.&lt;/a&gt; En fait, la préparation éditoriale d'un jeu de rôles sur l'univers cyberpunk était vue comme un manuel criminel. On y parlait à outrance de hackers et de piratage. Oui, pour une œuvre littéraire de science-fiction, les ordinateurs de Steve Jackson Games furent confisqués, mettant à mal une entreprise qui était florissante.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ainsi naquit l'EFF,&lt;/strong&gt; le 6 Juillet 1990, organisation à but non-lucratif est fondée par John Perry Barlow, John Gilmore et Mitch Kapor.&lt;br /&gt;
Elle a pour mission de concilier les «&amp;nbsp;&lt;em&gt;conflits inévitables qui ont commencé à se déclencher à la frontière entre le cyber-espace et le monde physique&lt;/em&gt;&amp;nbsp;». 
&lt;/p&gt;
&lt;p&gt;
Si de nombreuses organisations de défense citoyennes existent déjà aux États-Unis, comme &lt;a href=&quot;https://www.aclu.org&quot;&gt;l'ACLU (l'American Civil Liberty Union),&lt;/a&gt; elles n'étaient pas encore suffisamment spécialisées et impliquées dans la révolution informatique. 
&lt;/p&gt;
&lt;p&gt;
La &lt;q&gt;Electronic Frontier&lt;/q&gt; est une référence directe à l'ère des pionniers du Far West&amp;nbsp;: une zone de liberté, d'opportunités, au-delà des frontières connues où tout est à écrire. Cette référence libertaire, libertarienne et libérale se heurte à une autre logique&amp;nbsp;: Le bloc de l'Est s'effondre et l'URSS est en train d'imploser. Les forces de l'ordre doivent donc repérer au plus vite quelles sont les menaces potentielles, quitte à s'y méprendre&amp;nbsp;: Pour elles, il est acquis que l'ennemi intérieur est là, les hippies de la Silicon Valley veulent faire tomber l'ordre établi.
&lt;/p&gt;
&lt;p&gt;
En réponse à cet état d'esprit, John Perry Barlow écrit en 1996 &lt;a href=&quot;https://vimeo.com/111576518&quot;&gt;la Déclaration d'Indépendance du CyberEspace,&lt;/a&gt; attaquant la Communication Act, loi qui selon lui risquait de mettre internet sous la coupe du gouvernement Américain.
&lt;/p&gt;
&lt;p&gt;
Des organisations existent à travers le monde qui tentent elles aussi de réduire ces cassures idéologiques entre le monde physique et internet, comme &lt;a href=&quot;http://www.laquadrature.net/&quot;&gt;La Quadrature Du Net,&lt;/a&gt; mais l'EFF reste la référence, car elle est sur l'ensemble de la chaîne politique&amp;nbsp;: du lobbying auprès des législateurs, l'interpellation des gouvernements, et surtout l'assistance juridique.
&lt;/p&gt;
&lt;p&gt;
Et l'EFF se montre bien vite forte utile pour le secteur informatique, allant aussi bien avant les lois, devant l'exécutif et au créneau devant les tribunaux, parfois jusqu'à la Cour Suprême des États-Unis. Et à l'heure de la multiplication des traités internationaux économiques, qui remettent en cause lois nationales et droits des citoyens, l'EFF a la masse critique suffisante pour attirer le regard des médias.
&lt;/p&gt;
&lt;p&gt;
Très rapidement, l'organisation s'est internationalisée, comme Internet. Et avec l'apparition d'autres fondations autour des standards informatiques (comme le W3C), du logiciel libre (comme Mozilla) ou de gestion de l'infrastructure d'internet (comme l'IETF), elle a trouvé des alliés de poids, qui n'hésitent pas à relayer ses campagnes.
&lt;/p&gt;
&lt;p&gt;
L'EFF est désormais un modèle non seulement pour la Quadrature Du Net, mais aussi pour Amnesty International et Reporters Sans Frontières, qui sont désormais sensibilisés sur les armes numériques, extrêmement puissantes contre la Démocratie.&lt;br /&gt;
Mais tout le problème est justement l'omniprésence du numérique, et donc la démultiplication des terrains d'intervention de l'EFF. Du coup, n'est-elle pas allée trop large&amp;nbsp;? et ne fait-elle pas un peu trop le jeu de certaines très grandes entreprises&amp;nbsp;? 
&lt;/p&gt;
&lt;p&gt;
Références :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eff.org/about/history&quot;&gt;https://www.eff.org/about/history&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.makeuseof.com/tag/electronic-frontier-foundation-important/&quot;&gt;http://www.makeuseof.com/tag/electronic-frontier-foundation-important/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
    
    
    
      </item>
    
</channel>
</rss>