tag:linuxfr.org,2005:/users/trimLinuxFr.org : les contenus de Adrien Dorsaz2023-12-12T14:24:16+01:00/favicon.pngtag:linuxfr.org,2005:Diary/409762023-12-11T07:24:28+01:002023-12-11T07:24:28+01:00Comment savoir si le style sombre est actif ?Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Cher journal,</p>
<p>Au démarrage de mon éditeur de texte <em>vim</em>, je souhaite qu'il choisisse un thème sombre ou claire selon la préférence actuelle de mon bureau.</p>
<p>Je n'en ai besoin que pendant le lancement, parce que je ne change pas très souvent ce paramètre : la journée je préfère le thème clair et le soir le sombre. Si vraiment, j'ai besoin de changer le style de <em>vim</em> sans le redémarrer, je peux utiliser la commande :</p>
<pre><code>:set background=dark
</code></pre>
<p>Jusqu'à récemment, je n'utilisais que le bureau <em>GNOME</em>, j'utilisais donc cette commande pour retrouver l'information :</p>
<pre><code class="sh">gsettings get org.gnome.desktop.interface color-scheme</code></pre>
<p>Maintenant que j'utilise aussi <em>Cinnamon</em> avec <em>Linux Mint</em> régulièrement, cette commande ne fonctionne plus : elle fait clairement référence au bureau <em>GNOME</em> puisqu'elle utilise l'outil de configuration <em>gsettings</em> (fourni par <em>GLib</em>) et un <em>namespace</em> lié à <em>GNOME</em>.</p>
<p>Pour aller vite, il est possible d'adapter cette commande pour le bureau <em>Cinnamon</em>. Ce n'est pas idéal, parce que j'ai maintenant deux lignes de configurations différentes de <em>vim</em> juste pour le choix du thème. En plus, si je souhaite tester d'autres bureaux Linux, je devrais ajouter à chaque fois des lignes spécifiques dans ma configuration.</p>
<p>Une solution à ce problème est d'utiliser l'interface <em><a href="https://en.wikipedia.org/wiki/D-Bus">D-Bus</a></em> des <a href="https://flatpak.github.io/xdg-desktop-portal/">portails XDG Desktop</a>. Ces portails permettent aux développeurs logiciels d'utiliser des fonctionnalités communes aux différents bureaux Linux sans avoir besoin de connaître le bureau actuellement utilisé.</p>
<p>Je n'avais jamais utilisé <em>D-Bus</em> avant et j'ai galéré un peu à comprendre comment l'utiliser. Pour m'aider, j'ai retrouvé cette <a href="https://github.com/flatpak/xdg-desktop-portal/issues/629">discussion</a> qui propose d'ajouter la préférence de style dans <em>XDG Desktop Portal</em>. Elle m'a permis de savoir que je devais rechercher : un <em>namespace</em> <code>org.freedesktop.appearance</code> et une clé <code>color-scheme</code>.</p>
<p>J'ai ensuite trouvé que je pouvais utiliser <em>gdbus</em> et <em>dbus-send</em> pour interroger <em>D-Bus</em>.</p>
<p>Seulement, leur interface n'est pas vraiment faite pour chercher ce qui existe, mais plutôt pour consulter. Pour m'aider à chercher, j'ai utilisé le logiciel <a href="https://gitlab.gnome.org/GNOME/d-spy">d-spy</a> et la <a href="https://github.com/elementary/granite/pull/529/files">demande de fusion</a> qui met à jour le code d'<em>elementary OS</em> pour utiliser la nouvelle interface.</p>
<p>Finalement, la commande que je dois exécuter est celle-ci :</p>
<pre><code class="sh">gdbus call --session --dest org.freedesktop.portal.Desktop --object-path /org/freedesktop/portal/desktop --method org.freedesktop.portal.Settings.ReadOne org.freedesktop.appearance color-scheme <span class="p">|</span> grep -Po <span class="s2">"(?<=uint32 )\d"</span></code></pre>
<p>En détail :</p>
<ul>
<li><p><code>gdbus call</code>: Utilise la commande gdbus avec la méthode <em>call</em> pour demander une valeur</p></li>
<li><p><code>--session</code>: Nous voulons avoir des informations sur la session de l'utilisateur et non pas du système (<code>--system</code>).</p></li>
<li><p><code>--dest org.freedesktop.portal.Desktop --object-path /org/freedesktop/portal/desktop</code>: Je ne connais pas assez <em>D-Bus</em> pour expliquer le détail, mais j'ai clairement vu avec <em>d-spy</em> que c'était ces valeurs que j'avais besoin pour interroger les <em>XDG Desktop portal</em></p></li>
<li><p><code>--method org.freedesktop.portal.Settings.ReadOne</code>: Depuis le patch pour <em>elementary OS</em>, j'ai trouvé que j'avais besoin du portail <em>Settings</em> et de sa méthode <em>ReadOne</em>. <em>d-spy</em> m'a permis de savoir que cette méthode attend deux paramètres, un <em>namespace</em> et une clé</p></li>
<li><p><code>org.freedesktop.appearance color-scheme</code>: Les paramètres de la méthode définie juste avant.</p></li>
<li><p><code>| grep -Po "(?<=uint32 )\d"</code>: J'utilise <em>grep</em> pour nettoyer le résultat de la commande afin de n'avoir plus que le chiffre de 0 à 2 qui correspond à la préférence (sinon la sortie ressemble à <code>(<uint32 1>,)</code>)</p></li>
</ul>
<p>Enfin, après avoir cherché toutes ces informations, je me suis rendu compte que le site <a href="https://flatpak.github.io/xdg-desktop-portal/">XDG Desktop Portal</a> donne un lien directement vers une page qui liste toutes les interfaces disponibles en détail et comment les interroger. J'aurais pu simplement faire une recherche du terme <em>color-scheme</em> et je serais arrivé à la bonne <a href="https://flatpak.github.io/xdg-desktop-portal/docs/#gdbus-org.freedesktop.portal.Settings">section</a> avec toutes ces informations.</p>
<p>Toute cette recherche m'a amené à ce <a href="https://gitlab.adorsaz.ch/adrien/config/-/commit/f003dcb0b85ad3a1cfae01b9f8d601e9e1995bc3?view=parallel">petit correctif</a> de quelques lignes dans mon fichier <em>vimrc</em>.</p>
<div><a href="https://linuxfr.org/users/trim/journaux/comment-savoir-si-le-style-sombre-est-actif.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/134168/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/comment-savoir-si-le-style-sombre-est-actif#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/134168/comments.atomtag:linuxfr.org,2005:Diary/409372023-11-11T18:11:12+01:002023-11-11T18:11:12+01:00Découvertes de logiciels libres - été 2023Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#toc-postgresql-postgis-et-node-postgres">PostgreSQL, postgis et node-postgres</a></li>
<li><a href="#toc-nodejs-et-ses-stream">Node.js et ses stream</a></li>
<li>
<a href="#toc-frontend-avec-vuejs-3">Frontend avec Vue.js 3</a><ul>
<li><a href="#toc-openlayers">OpenLayers</a></li>
<li><a href="#toc-chartjs">Chart.js</a></li>
<li><a href="#toc-nouislider">noUiSlider</a></li>
</ul>
</li>
</ul>
<p>Cet été j’ai eu l’occasion de découvrir de belles pépites de logiciels libres grâce à un changement de travail. Ce nouveau travail était lié à l’affichage de données sur des cartes et des résultats dans des graphiques.</p>
<p>Voici une petite liste de logiciels libres que j’ai pu employer et que j’ai particulièrement appréciés 😊</p>
<h2 id="toc-postgresql-postgis-et-node-postgres">PostgreSQL, postgis et node-postgres</h2>
<p>PostgreSQL est une base de donnée à tout faire, vraiment. Je l’appréciais déjà auparavant pour ses fonctions intégrées de gestion des types <em>JSON</em>, <em>text</em>, <em>large objects</em>, le système <em>pubsub</em>, le système de <em>full text search</em> et ses extensions qui permettent la recherche imprécise (avec faute de frappe, sans casse), la création d’une hiérarchie simple avec un texte comme les <em>path</em>… et, surtout, sa <a href="https://www.postgresql.org/docs/current/index.html">documentation</a> complète et compréhensible.</p>
<p>Cet été, j’en ai découvert une nouvelle facette avec l’extension <a href="https://postgis.net/">postgis</a> Elle permet à PostgreSQL d’enregistrer des données spatiales, de faire des calculs sur les polygones, de créer des rasters et de travailler sur leurs pixels… </p>
<p><a href="https://github.com/brianc/node-postgres">node-postgres</a> quant à lui est un client PostgreSQL crée pour Node.js. C’est bien un client SQL et non pas un <em>ORM</em> complexe: il s’occupe juste d’exécuter les requêtes et de transformer en type natif JavaScript ce qui est transformable (les données de type <em>numeric</em>, <em>date</em>, <em>JSON</em>…).</p>
<p>J’apprécie particulièrement qu’il n’essaie pas de faire de choses intelligentes comme gérer du cache ou créer des objets automatiquement: mine de rien, le fait que le client soit simple permet de le maitriser plus facilement (la courbe d’apprentissage est petite).</p>
<p>Un point que je trouve vraiment très fort est son plugin <a href="https://github.com/brianc/node-postgres/tree/master/packages/pg-query-stream">pg-query-stream</a> qui permet de faire passer facilement à travers le réseau une requête qui génère des résultats de grande taille. Les <a href="https://nodejs.org/api/stream.html"><code>Stream</code></a> permet d’éviter de faire monter tous les résultats dans la mémoire de PostgreSQL et de celle de Node.js.</p>
<pre><code>Curseur PostgreSQL ---[réseau]--> pg-query-stream -> JSONStream -> HTTP Response stream ---[réseau]--> HTTP client
</code></pre>
<p>Du côté de PostgreSQL, <em>pg-query-stream</em> utilise un curseur SQL pour récupérer les résultats à mesure que la requête s’exécute. Ensuite, du côté Node.js, <em>pg-query-stream</em> retourne un <em>Readable Stream</em>. Ce stream peut être enchaîné avec un <em>Transformer Stream</em> qui crée un objet JSON avec le résultat binaire de chaque ligne de réponse SQL. Enfin, ce stream peut lui-même être enchaîné avec le <em>Writable Stream</em> de l’objet <em>HTTP Response</em> de Node.js qui s’occupe d’envoyer au fur et à mesure les données au client HTTP (avec une réponse HTTP de type <em>application/octet-stream</em>).</p>
<p>Grâce à ce système de stream, il n’y a pas de surcharge mémoire quand une grande liste d’objet est demandée et ce ni sur le serveur PostgreSQL, ni sur le serveur de l’API. Le client HTTP quant à lui reçoit les premières données dès qu’elles sont prêtes, il n’aura pas besoin d’attendre de recevoir les données complètes avant de commencer la mise à jour de son affichage.</p>
<h2 id="toc-nodejs-et-ses-stream">Node.js et ses stream</h2>
<p>Ça fait maintenant 3 ans que je travaille avec <a href="https://nodejs.org/">Node.js</a> (depuis la version 12) et j’apprécie beaucoup son API et son écosystème.</p>
<p>Il a bien sûr son lot de points négatifs comme le fait qu’un projet peu très facilement tirer des milliers de sous-dépendances. Pour ce point, les gestionnaires de dépendances font du bon travail et ne m’ont jamais posé problèmes (j’ai trouvé bien plus simple l’utilisation de <em>npm</em> et <em>yarn</em> que celles de <em>pip</em> et <em>virtual env</em> de <em>Python</em> ou celles de <em>gem</em> et <em>bundler</em> de <em>Ruby</em>).</p>
<p>La <a href="https://nodejs.org/api/">documentation de Node.js</a> est vraiment très complète et bien structurée ! J’apprécie vraiment de pouvoir m’appuyer sur cette documentation pour bien appréhender ce qui est possible de faire et à partir de quelle version de Node.js.</p>
<p>Le système de stream de Node.js présenté plus haut est aussi plutôt bien pensé (ça ressemble au fonctionnement des pipes de Linux) et je l’apprécie beaucoup, car il permet également de créer ses propres streams facilement. Il y a pas mal de documentation à lire quand on implémente pour la première fois une extension de <em>Readable</em> et <em>Writable</em>, mais le code final est bien organisé: les classes de base de Node.js s’occupent de la gestion du stream et les classes d’extensions ne s’occupent que de la lecture ou l’écriture des données.</p>
<p>Par exemple, j’ai eu besoin d’importer dans PostgreSQL un historique de donnée sous format CSV avec un traitement à effectuer entre deux. Le fichier CSV avait tellement de donnée qu’il dépassait la limite de lignes lisibles par LibreOffice Calc.</p>
<p>Pour lire le CSV, j’ai donc utilisé l’outil <a href="https://csv.js.org/parse/api/stream/">csv-parser</a> qui permet de lire le fichier avec un <em>Readable Stream</em>.</p>
<p>En implémentant les fonctions <a href="https://nodejs.org/api/stream.html#writable_writechunk-encoding-callback"><code>_write</code></a> et <a href="https://nodejs.org/api/stream.html#writable_finalcallback"><code>_final</code></a>, j’ai été capable de créer un <em>Writable Stream</em> qui prépare les requêtes nécessaires en lisant les données et les envoient régulièrement en bloque au serveur PostgreSQL.</p>
<p>Enfin, il faut chainer les deux <em>Stream</em> pour avoir un outil qui puisse lire le CSV tout en envoyant à mesure de la lecture les requêtes SQL pour enregistrer les nouvelles données en base.</p>
<h2 id="toc-frontend-avec-vuejs-3">Frontend avec Vue.js 3</h2>
<p>J’ai pour la première fois créé le frontend d’une application avec un framework JavaScript. J’ai trouvé que <a href="https://vuejs.org/">Vue.js</a> est un cadriciel qui permet de bien structurer son application et qui aide à faire les liens entre les éléments <em>DOM</em> et le code JavaScript de manière efficace.</p>
<p>De nouveau, sa documentation est bien faite et elle n’est pas trop longue à lire.</p>
<p>Vue.js m’a permis de découvrir comment bien utiliser la composition pour éviter de créer des hiérarchies complexes d’objets tout en gardant un code avec peu de répétitions.</p>
<p>Un autre point appréciable est qu’il est plutôt aisé de créer un <em>Component</em> qui intègre des outils JavaScript qui n’ont pas été développés pour Vue.js. Par exemple, mes collègues ont pu intégrer de manière efficace des outils complexes comme <a href="https://openlayers.org/">OpenLayers</a> et <a href="https://www.chartjs.org/">Chart.js</a>.</p>
<p>Pour ma part, j’ai pu faire l’intégration de <a href="https://refreshless.com/nouislider/">noUiSlider</a> pour permettre aux utilisateurs d’utiliser ce curseur avancé pour naviguer à travers des graphes de données temporelles. Pour faire cette intégration, je me suis reposé sur <a href="https://github.com/vueform/slider">Vueform slider</a>, parce que j’avais d’abord trouvé cet outil. Ce n’est que plus tard que j’ai découvert qu’il était une intégration de noUiSlider dans Vue.js. Si c’était à refaire, je ferai directement l’intégration de <em>noUiSlider</em> pour avoir plus de souplesse (j’avais une limitation sur l’intégration des <em>pips</em> que <em>Vueform slider</em> n’avait semble-t-il pas prévu dans son intégration).</p>
<h3 id="toc-openlayers">OpenLayers</h3>
<p><a href="https://openlayers.org/">OpenLayers</a> est un projet complexe qui permet d’intégrer une carte du monde dans son site web et d’ajouter au-dessus des couches interactives. Le sujet étant lui-même complexe, je trouve qu’OpenLayers est un très bon projet et qu’il aurait été difficile de faire plus simple.</p>
<p>J’ai été impressionné de réussir à intégrer des objets SVG et dynamiques dans le <code><canvas></code> d’OpenLayers.</p>
<p>Un souci que nous avions était de réussir à faire télécharger des images d’un serveur d’image avec un token d’authentification à ajouter dans un <em>Header HTTP</em>. Or le navigateur n’avait pas lui-même authentifié l’utilisateur: il ne pouvait donc pas lui-même se charger de passer du bon en-tête <em>Authorization</em>. On ne pouvait pas simplement utiliser l’API <em>Fetch</em> du navigateur non plus, car on devait lui dire d’ajouter pour chaque requête du bon en-tête.</p>
<p>Eh bien, OpenLayers est assez souple pour lui donner une méthode alternative pour télécharger les images et le faire de manière authentifiée grâce au module <em>axios</em> que nous utilisions déjà pour les autres requêtes vers notre API.</p>
<h3 id="toc-chartjs">Chart.js</h3>
<p><a href="https://www.chartjs.org/">Chart.js</a> est un outil que j’ai eu assez de peine à comprendre comment bien l’utiliser. Il permet d’intégrer un graphique avec des données dans un <code><canvas></code>.</p>
<p>Sa documentation est plutôt fouillis et il est difficile de trouver la page qui donnera la bonne information sur la configuration.</p>
<p>Cependant, quand j’ai commencé à comprendre leur philosophie pour la configuration et les bons termes pour les parties que je voulais changer, j’ai trouvé que l’outil était plutôt bien fait.</p>
<p>Le graphe de base n’est pas dynamique, mais j’ai pu l’assembler avec le curseur <em>noUiSlider</em> pour mettre à jour dynamiquement les bornes d’affichage de l’axe <em>x</em>. Là, j’ai découvert que <em>Chart.js</em> fait très bien son travaille et qu’il arrivait de manière fluide à suivre les mises à jour que le curseur lance durant son glissement.</p>
<h3 id="toc-nouislider">noUiSlider</h3>
<p>Durant mon projet, j’avais besoin de créer un ascenseur horizontal pour naviguer à travers des dates sur 3 ans.</p>
<p>En lisant <a href="https://developer.mozilla.org/fr/docs/Web/HTML/Element/input/range">MDN</a> , j’ai appris que HTML 5 proposait déjà un <code><input type="range"></code> pour créer un slider sur des valeurs numériques. La documentation donne même un exemple avec <code><datalist></code> pour lier des textes à des valeurs numériques.</p>
<p>J’étais assez emballé par cet outil, mais malheureusement, il ne permet pas beaucoup de stylisation et je ne pouvais donc pas facilement l’intégrer dans notre application web et supporter plusieurs navigateurs.</p>
<p>En plus, j’avais besoin d’un slider qui permette de choisir deux valeurs pour définir un <em>range</em> de date à visualiser et non pas juste une seule date.</p>
<p><a href="https://refreshless.com/nouislider/">noUiSlider</a> est un outil JavaScript qui permet de créer des sliders avec beaucoup plus de flexibilité et, surtout, permet de le styliser de manière simple.</p>
<p>noUiSlider est beaucoup plus précis pour l’affichage des marqueurs et des textes puisqu’il gère lui-même toute l’intégration avec le slider.</p>
<p>A contrario, l’exemple de la documentation MDN (avec HTML et CSS) utilise une flexbox de CSS pour répartir de manière proportionnelle les valeurs de <code><datalist></code> sur la même largeur que l’élément <code><input></code>. Comme les affichages de ces deux éléments HTML ne sont pas vraiment liés, il est très difficile de placer les marqueurs de manière exacte et il est nécessaire d’avoir toujours un espace équivalent entre chaque marqueur.</p>
<hr>
<p>PS: Cet article a été originalement publié sur mon nouveau blog statique (cf. mon site web personnel). Sur ce blog, j'ai repris certains journaux et dépêches que j'avais écrits sur LinuxFr. J'espère y écrire de manière régulière et pas forcément sur du logiciel libre, vous pouvez suivre mon compte Mastodon ou le flux RSS si ça vous intéresse.</p>
<div><a href="https://linuxfr.org/users/trim/journaux/decouvertes-de-logiciels-libres-ete-2023.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133887/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/decouvertes-de-logiciels-libres-ete-2023#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/133887/comments.atomtag:linuxfr.org,2005:Diary/408302023-08-04T08:37:34+02:002023-08-04T15:29:59+02:00Un système universel d'aide à la saisie ?Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p><a href="http://blog.davidedmundson.co.uk/blog/new-ideas-using-wayland-input-methods/">Cette expérience</a> est vraiment chouette : avec les protocoles Wayland et InputMethod, il y aurait moyen d'ajouter des aides à la saisie pour plusieurs toolkit sans avoir à tous les modifier si j'ai bien compris.</p>
<p>Il y a une démo pour un copier/coller avec prévisualisation, un selecteur d'emoji, une traduction en live et du TextToSpeech 🤗</p>
<p>Pour l'instant ça ne marche que avec les compositeurs Kwin et Weston, mais ça pourrait changer 👍</p>
<div><a href="https://linuxfr.org/users/trim/journaux/un-systeme-universel-d-aide-a-la-saisie.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/132897/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/un-systeme-universel-d-aide-a-la-saisie#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/132897/comments.atomtag:linuxfr.org,2005:News/413832023-02-07T11:33:27+01:002023-02-07T11:33:27+01:00Nouveautés sur LinuxFr.org : lien Mastodon, relance, ménage, etc.Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>En ce début 2023, votre site LinuxFr.org a reçu quelques améliorations intéressantes et visibles pour les utilisateurs et utilisatrices. Citons notamment la possibilité de relier ses comptes LinuxFr.org et Mastodon, une amélioration sur la relance dans l’espace de rédaction collaborative et un nettoyage des contenus et commentaires non publics datant de plus d’un an.</p>
</div><ul></ul><div><h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#toc-relier-ses-comptes-linuxfrorg-et-mastodon">Relier ses comptes LinuxFr.org et Mastodon</a></li>
<li><a href="#toc-relance-dans-lespace-de-r%C3%A9daction-collaborative">Relance dans l’espace de rédaction collaborative</a></li>
<li><a href="#toc-nettoyage-des-contenus-et-commentaires-non-publics-datant-de-plus-dun-an">Nettoyage des contenus et commentaires non publics datant de plus d’un an</a></li>
<li><a href="#toc-dautres-changements-en-bref">D’autres changements en bref</a></li>
<li><a href="#toc-et-ensuite">Et ensuite ?</a></li>
</ul>
<h2 id="toc-relier-ses-comptes-linuxfrorg-et-mastodon">Relier ses comptes LinuxFr.org et Mastodon</h2>
<p>Si vous avez un compte Mastodon, il est maintenant possible d’ajouter un lien vers votre compte LinuxFr.org dans votre profil Mastodon.</p>
<p>D’abord, mettez à jour votre <a href="//linuxfr.org/compte/modifier">profil LinuxFr.org</a> pour y ajouter votre compte Mastodon :</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f636c6f75642e61646f7273617a2e63682f732f526f4539444e46474546346354666a2f646f776e6c6f6164/download" alt="profil LinuxFr.org avec lien Mastodon" title="Source : https://cloud.adorsaz.ch/s/RoE9DNFGEF4cTfj/download"></p>
<p>Ensuite, copiez le lien de votre profil LinuxFr et collez-le dans votre profil Mastodon :</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f636c6f75642e61646f7273617a2e63682f732f4645485471526b524c634e453477342f646f776e6c6f6164/download" alt="profil Mastodon avec lien LinuxFr.org" title="Source : https://cloud.adorsaz.ch/s/FEHTqRkRLcNE4w4/download"></p>
<p>Et voilà le résultat sur les contenus et commentaires LinuxFr.org et sur le profil Mastodon :</p>
<table>
<thead>
<tr>
<th>LinuxFr.org</th>
<th>Mastodon</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="//img.linuxfr.org/img/68747470733a2f2f636c6f75642e61646f7273617a2e63682f732f54354b3441527451714e4e617346352f646f776e6c6f6164/download" alt="Contenu avec compte Mastodon" title="Source : https://cloud.adorsaz.ch/s/T5K4ARtQqNNasF5/download"></td>
<td><img src="//img.linuxfr.org/img/68747470733a2f2f636c6f75642e61646f7273617a2e63682f732f5367464159794148634178415061582f646f776e6c6f6164/download" alt="Profil avec compte LinuxFr.org" title="Source : https://cloud.adorsaz.ch/s/SgFAYyAHcAxAPaX/download"></td>
</tr>
</tbody>
</table>
<p>Merci à Florent Zara pour la <a href="//linuxfr.org/suivi/faire-valider-sa-page-perso-linuxfr-org-sur-mastodon">suggestion</a> et à nud pour l’ajout de cette fonctionnalité !</p>
<p>Merci également à Benoît Sibaud pour l’ajout des statistiques et des outils d’administration liés aux comptes Mastodon.</p>
<h2 id="toc-relance-dans-lespace-de-rédaction-collaborative">Relance dans l’espace de rédaction collaborative</h2>
<p>Pour les équipes d’animation et de rédaction des dépêches collaboratives, les différentes parties des courriels de relances seront mieux découpées.</p>
<p>Avant le correctif, il y avait un modèle de courriel complet avec introduction et salutations suivi d’un message personnalisé ajouté par l’équipe d’animation. Dorénavant, le message personnalisé est directement intégré dans le corps du courriel, ce qui paraît beaucoup plus naturel.</p>
<p>En plus, l’outil de relance montre directement comment le courriel sera finalisé :</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f636c6f75642e61646f7273617a2e63682f732f726a3539585a3232786f74624241432f646f776e6c6f6164/download" alt="relance avec email en cours" title="Source : https://cloud.adorsaz.ch/s/rj59XZ22xotbBAC/download"></p>
<p>Merci à tisaac pour la <a href="//linuxfr.org/suivi/message-pour-relance-dans-l-espace-de-redaction">suggestion</a> et à Adrien Dorsaz pour le correctif.</p>
<h2 id="toc-nettoyage-des-contenus-et-commentaires-non-publics-datant-de-plus-dun-an">Nettoyage des contenus et commentaires non publics datant de plus d’un an</h2>
<p>Les contenus (dépêches, journaux, liens, messages sur le forum et entrées de suivi) non publics datant de plus d’un an ont été supprimés ainsi que les éventuels étiquetages et commentaires associés. Cette suppression a également eu lieu pour les commentaires non publics datant de plus d’un an.</p>
<p>Plusieurs <a href="//linuxfr.org/suivi/pre-nettoyage-des-25-ans#comment-1913738">centaines de contenus</a> et <a href="//linuxfr.org/nodes/130155/comments/1913748">plus de 14 000 commentaires</a> ont été supprimés (à relativiser par rapport aux plus de 110 000 contenus et 1,9 million de commentaires en base). Merci à Benoît Sibaud pour <a href="//linuxfr.org/suivi/pre-nettoyage-des-25-ans">l’opération</a>.</p>
<p>Pour comprendre en détail pourquoi il y a tant de contenus et commentaires non publics, il faut savoir que le code de LinuxFr.org actuel ne supprime rien par défaut. Il se contente de passer un booléen <code>public</code> de vrai à faux pour les cacher.</p>
<p>Seuls les comptes utilisateurs en cours de création et jamais utilisés sont réellement supprimés de la base de données. C’est-à-dire que les comptes qui n’ont jamais validé le lien reçu par courriel sont supprimés.</p>
<p>Comme LinuxFr.org ne supprime pas les données, les comptes qui ont été fermés, soit par son ou sa propriétaire, soit par l’équipe d’administration du site, sont cachés et restent dans la base de données.</p>
<p>À noter que l’équipe d’administration du site peut être amenée à fermer des comptes pour plusieurs motifs : spam de très loin en premier, abus, illégalité manifeste, demande des personnes ayant les comptes, etc.</p>
<p>Ce fonctionnement est identique pour les contenus (dépêches, journaux, forums, sondages, pages wiki, suivi, liens) et commentaires lorsqu’ils sont masqués ou dépubliés par l’équipe de modération.</p>
<p>Il y a également beaucoup de raisons de masquer ou dépublier ces contenus : spam, abus, illégalité manifeste, demande des personnes pour virer un doublon ou retirer un propos, purge de compte demandée, etc.</p>
<p>Comme dernier exemple de ce système, les étiquettes peuvent aussi être masquées par l’équipe d’administration tout en restant dans la base de données (pour cause de mauvais nom, doublon, spam…).</p>
<p>L’opération de purge réalisée par Benoît Sibaud a consisté à supprimer ce qui était invisible pour tout le monde sauf pour l’équipe d’administration du site, et qui avait plus d’un an, pour <a href="//linuxfr.org/suivi/pre-nettoyage-des-25-ans#comment-1913778">alléger la base</a>, pour virer l’inutile. Pourquoi garder un an ces données ? Pour avoir un peu de recul sur le spam et les problèmes passés au besoin, pour republier au besoin ce qui aurait été dépublié par erreur ou à tort, etc. L’effacement automatique au bout d’un an de l’invisible serait à implémenter.</p>
<p>Une réflexion plus large sur la fermeture des comptes inactifs et le nettoyage des comptes fermés est en cours, pour définir les règles qui seront appliquées.</p>
<h2 id="toc-dautres-changements-en-bref">D’autres changements en bref</h2>
<p>La page des <a href="//linuxfr.org/statistiques/moderation">statistiques de modération</a> a été complétée avec des informations sur 90 jours et l’affichage d’autres actes de modération. Merci à Benoît Sibaud pour <a href="https://github.com/linuxfrorg/linuxfr.org/commit/0ec430271e0ed07df0202520b6294088a7f50700">l’évolution</a>.</p>
<p>Suite à un signalement de vmagnin (merci) précisant que « l’aide‑mémoire Markdown dit que le guillemet français gauche '«' s’obtient avec Alt Gr + Z sur un clavier Azerty », une <a href="https://github.com/linuxfrorg/linuxfr.org/commit/c7ef92a3de2669ca817004e08c4a094721d00635">première correction</a> avait été appliquée par Benoît Sibaud, mais en fait c’est plus compliqué et une <a href="https://github.com/linuxfrorg/linuxfr.org/pull/335">autre demande est en cours</a>, où l’on parle disposition des claviers AZERTY/QWERTY/QWERTZ et autres endroits à corriger.</p>
<p>La page des <a href="//linuxfr.org/statistiques/users">statistiques sur les utilisatrices et utilisateurs</a> liste les principaux domaines XMPP, comme c’était déjà le cas pour le courriel (et pour les domaines Mastodon désormais). Merci à Benoît Sibaud pour la <a href="//linuxfr.org/suivi/statistiques-sur-les-domaines-xmpp">suggestion</a> et <a href="https://github.com/linuxfrorg/linuxfr.org/commit/3ac001ba1c635f3e2306120777b21baa3bd9742d">l’évolution</a>.</p>
<p>La conversion d’un journal en dépêche est maintenant bloquée si le journal n’est pas sous licence CC By-SA 4.0 (pas d’édition collaborative possible). Merci à Adrien Dorsaz pour la <a href="//linuxfr.org/suivi/licence-d-une-depeche-cree-a-partir-d-un-journal">suggestion</a> et la <a href="https://github.com/linuxfrorg/linuxfr.org/commit/368abcf2ab3f998ca0c13b01fc628d7cec742c52">correction</a>.</p>
<h2 id="toc-et-ensuite">Et ensuite ?</h2>
<p>Si ça vous tente aussi de faire des modifications sur le code de LinuxFr.org, n’hésitez pas !</p>
<p>Pour débuter, le <a href="https://guides.rubyonrails.org/getting_started.html">tutoriel de démarrage de Ruby On Rails</a> est un très bon début avec <a href="https://github.com/linuxfrorg/linuxfr.org/blob/master/Docker.md">Docker pour déployer</a> l’environnement de développement.</p>
</div><div><a href="https://linuxfr.org/news/nouveautes-sur-linuxfr-org-lien-mastodon-relance-menage-etc.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/130216/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/nouveautes-sur-linuxfr-org-lien-mastodon-relance-menage-etc#comments">ouvrir dans le navigateur</a>
</p>
Adrien DorsazBenoît Sibaudvmagninbobble bubbleyalYsabeau 🧶 🧦https://linuxfr.org/nodes/130216/comments.atomtag:linuxfr.org,2005:News/412472022-10-27T10:28:10+02:002022-10-29T22:10:31+02:00La communauté GNOME remplace ses listes de discussion par DiscourseLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Après avoir modernisé sa forge logicielle (utilisation de <a href="https://foundation.gnome.org/2018/05/31/gnome-moves-to-gitlab-2/">Gitlab depuis 2018</a>) et sa messagerie instantanée (utilisation depuis cet été de <a href="https://foundation.gnome.org/2022/06/02/gnome-chat-moves-to-matrix/">Matrix avec un pont IRC</a>), la communauté GNOME a annoncé qu’elle allait désactiver <a href="https://mail.gnome.org/archives/desktop-devel-list/2022-September/msg00018.html">ses listes de discussion</a> d’ici fin octobre en faveur de son instance Discourse.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e676e6f6d652e6f72672f6373732f676e6f6d652d6d61696c2e706e67/gnome-mail.png" alt="logo de GNOME Mail Services" title="Source : https://static.gnome.org/css/gnome-mail.png"></p>
<p><a href="https://www.discourse.org/">Discourse</a> est un forum open-source en ligne sur le web, pas forcément révolutionnaire, mais a priori plus facile d’accès qu’une liste de discussion pour les divers membres de la communauté.</p>
</div><ul><li>lien nᵒ 1 : <a title="https://discourse.gnome.org/" hreflang="en" href="https://linuxfr.org/redirect/111229">Le Discourse de GNOME</a></li><li>lien nᵒ 2 : <a title="https://mail.gnome.org/archives/desktop-devel-list/2022-September/msg00018.html" hreflang="en" href="https://linuxfr.org/redirect/111230">Annonce de la désactivation des listes de discussion GNOME</a></li><li>lien nᵒ 3 : <a title="https://linuxfr.org/users/trim/journaux/la-communaute-gnome-remplace-ses-mailing-lists-par-discourse" hreflang="fr" href="https://linuxfr.org/redirect/111231">Journal à l’origine de la dépêche</a></li><li>lien nᵒ 4 : <a title="https://linuxfr.org/news/discourse-plate-forme-de-discussion-atypique" hreflang="fr" href="https://linuxfr.org/redirect/111232">Discourse, plate-forme de discussion atypique</a></li><li>lien nᵒ 5 : <a title="https://discourse.gnome.org/t/common-questions-re-mailman-to-discourse/11841" hreflang="en" href="https://linuxfr.org/redirect/111233">Les raisons détaillés du changement</a></li><li>lien nᵒ 6 : <a title="https://discourse.gnome.org/t/interacting-with-discourse-via-email/46" hreflang="en" href="https://linuxfr.org/redirect/111234">Interagir avec Discourse par courriel</a></li></ul><div><p>Comme Andrea Veri le relate dans <a href="https://discourse.gnome.org/t/common-questions-re-mailman-to-discourse/11841">un billet plus détaillé</a>, il y a eu plusieurs raisons pour décider de migrer des listes de discussion vers Discourse :</p>
<ul>
<li>depuis plusieurs années, le projet GNOME se focalise sur la modernisation de son infrastructure</li>
<li>depuis que Discourse a été mis en place par GNOME (<a href="https://blog.gtk.org/2019/03/05/testing-discourse-for-gtk/">il y a plus de 3 ans</a>), l’instance Mailman de GNOME a vu son utilisation décliner</li>
<li>Discourse offre bien plus de modernités avec le support de Markdown, des flux RSS, une réelle gestion des spams, plusieurs types d’authentification, les prévisualisations des sujets, une interface mobile et des tonnes de plugins, le support d’API…</li>
<li>réduire la fragmentation de la communauté et consolider les plateformes de discussions autour de Discourse et Matrix (avec un pont IRC)</li>
<li>la modération est plus aisée et peut être portée par plus de volontaires : avec Mailman, il y avait bien quelques volontaires pour certaines listes de discussion, mais ils disparaissaient après quelque temps et finalement c’était soit à l’équipe d’infrastructure de se charger de la modération, soit des dizaines de courriels qui restent bloqués en attente de modération. Il était impossible de passer à l’échelle avec le système de modération prévu par Mailman spécialement avec une communauté composée de personnes qui participent majoritairement sur leur temps libre. Il vaut mieux que leur temps libre soit utilisé pour donner un coup de main au projet avec des outils qui doivent simplement fonctionner, avoir une bonne interface utilisateur et être assez simple à appréhender.</li>
<li>il y a des dizaines de manières d’intégrer Discours avec d’autres services via les webhooks et d’autres intégrations</li>
<li>la migration a été <a href="https://gitlab.gnome.org/GNOME/Initiatives/-/issues/18">discutée et proposée</a> il y a plus de deux ans par l’équipe GNOME Engagement et a été acceptée</li>
</ul>
<p>Emmanuele Bassi avait aussi <a href="https://discourse.gnome.org/t/sub-categories/11733/6?u=trim">écrit un commentaire</a> un peu plus tôt expliquant également que:</p>
<ul>
<li>techniquement il est difficile de gérer la réputation des courriels envoyés par des grands serveurs de listes de discussion puisqu’ils ressemblent très fortement aux services de spam</li>
<li>la barrière technique pour les nouveaux utilisateurs était trop élevée (voir les nombreux commentaires du <a href="//linuxfr.org/redirect/111231">journal LinuxFr</a> à ce sujet)</li>
<li>l’infrastructure utilisait Mailman 2 qui est une très vieille version qui utilise Python 2 (en fin de vie également), ce qui commençait à rendre sa gestion dans l’infrastructure difficile en particulier pour sa sécurité. D’ailleurs Andrea explique à la fin de son article que, si la migration vers Discourse avait été refusée, les utilisateurs des listes de discussion auraient quand même subits une migration vers Mailman 3 ou un autre outil.</li>
</ul>
<p>Cette modernisation des outils d’infrastructure a donc pour objectif d’augmenter les interactions entre les différents membres de la communauté : le fait d’utiliser ces outils modernes (Gitlab, Matrix, Discourse…) permet de baisser les connaissances nécessaires pour augmenter le partage.</p>
<p>Bien sûr, il y aura plus de bruits s’il y a plus de monde, mais il y aura également plus de partage d’idées nouvelles et de retours pertinents, ce qui sera très utile pour améliorer les logiciels et la gestion de la communauté.</p>
<p>Techniquement, en ce qui concerne la migration, les archives des listes de discussion resteront accessibles en ligne en lecture seulement et aucun nouveau courriel ne sera distribué à partir de la fin octobre.</p>
<p>Pour les utilisateurs qui préfèrent continuer à interagir par courriel, il est possible de configurer <a href="https://discourse.gnome.org/t/interacting-with-discourse-via-email/46">Discourse pour interagir avec des courriels</a>. Cependant, il faut d’abord augmenter un peu sa réputation en utilisant d’abord l’interface web (ce qui permet d’éviter certains courriels de spams envoyés par des robots).</p>
<p>Les projets sont donc en train de se déplacer vers cette nouvelle plateforme, comme le projet <a href="https://discourse.gnome.org/t/welcome-to-gimp-forum-on-gnome-discourse/11534">GIMP</a> ou encore <a href="https://discourse.gnome.org/t/welcome-to-gnome-discourse-screen-reader-users/11678">orca et a11y</a>.</p>
</div><div><a href="https://linuxfr.org/news/la-communaute-gnome-remplace-ses-listes-de-discussion-par-discourse.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129112/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/la-communaute-gnome-remplace-ses-listes-de-discussion-par-discourse#comments">ouvrir dans le navigateur</a>
</p>
Adrien DorsazBenoît SibaudvmagninFlorent ZaraXavier Teyssierhttps://linuxfr.org/nodes/129112/comments.atomtag:linuxfr.org,2005:Diary/404282022-10-22T13:14:07+02:002022-10-22T13:14:07+02:00La communauté GNOME remplace ses mailing lists par DiscourseLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Après avoir modernisé sa forge logicielle (utilisation de <a href="https://foundation.gnome.org/2018/05/31/gnome-moves-to-gitlab-2/">Gitlab depuis 2018</a>) et sa messagerie instantanée (utilisation depuis cet été de <a href="https://foundation.gnome.org/2022/06/02/gnome-chat-moves-to-matrix/">Matrix et d'un bridge IRC</a>), la communauté GNOME a annoncé qu'elle allait désactiver <a href="https://mail.gnome.org/archives/desktop-devel-list/2022-September/msg00018.html">ses mailing lists</a> d'ici fin octobre.</p>
<p>Les archives des listes resteront accessibles en ligne, mais aucun nouveau email sera distribué.</p>
<p>Pour les utilisateurs qui préfèrent continuer à interagir par email, il est possible de configurer <a href="https://discourse.gnome.org/t/interacting-with-discourse-via-email/46">Discourse pour interagir avec des emails</a>. Cependant, il faut d'abord augmenter un peu sa réputation en utilisant d'abord l'interface web (ce qui permet d'éviter certains emails de spams envoyés par des robots).</p>
<p>Les projets sont donc en train de se déplacer vers cette nouvelle plateforme, comme le projet <a href="https://discourse.gnome.org/t/welcome-to-gimp-forum-on-gnome-discourse/11534">GIMP</a> ou encore <a href="https://discourse.gnome.org/t/welcome-to-gnome-discourse-screen-reader-users/11678">orca et a11y</a>.</p>
<p>Je trouve très intéressant cette modernisation des outils d'infrastructure qui a pour objectif d'augmenter les interactions entre les différents membres de la communauté: le fait d'utiliser ces outils, permet de baisser les connaissances nécessaires pour augmenter le partage.</p>
<p>Bien sûr, il y aura plus de bruits s'il y a plus de monde, mais je pense qu'il y aura également plus de partage d'idées nouvelles et de retours pertinents, ce qui sera très utile pour améliorer les logiciels et la gestion de la communauté.</p>
<div><a href="https://linuxfr.org/users/trim/journaux/la-communaute-gnome-remplace-ses-mailing-lists-par-discourse.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129086/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/la-communaute-gnome-remplace-ses-mailing-lists-par-discourse#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/129086/comments.atomtag:linuxfr.org,2005:Diary/403642022-09-04T23:16:12+02:002022-09-04T23:16:12+02:00Vous avez dit "caractère" ?Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Ces derniers jours, j'ai cherché à mieux comprendre comment gérer UTF-8 dans une de mes applications hobby et j'ai appris pas mal de choses :)</p>
<p>D'abord, j'avais oublié que ASCII était codé sur 7 bits et non pas 8 bits. C'est grâce à ça que UTF-8 est automatiquement compatible avec ASCII (UTF-8 est codé avec des blocs de 8-bits, il leur a suffit de dire que le premier bit est 0 pour les 127 premiers Unicodes encodé en UTF-8).</p>
<p>Les 7 bits m'ont surpris, car ce n'est pas dans nos habituelles puissances de 2. Mais en fait, ASCII <a href="https://www.quora.com/Why-was-the-ASCII-code-originally-7-bits-long">fait partie</a> d'une époque où la mémoire et les disques étaient vraiment très cher et il valait donc vraiment mieux ne pas être trop gourmand.</p>
<p>J'ai également appris que pour le langage C, le type <code>char</code> n'est pas forcément dédié aux caractères, mais plutôt à un <a href="https://stackoverflow.com/questions/75191/what-is-an-unsigned-char">stockage d'au moins 8 bits</a><sup id="fnref1"><a href="#fn1">1</a></sup>.</p>
<p>En pratique, les <a href="https://en.wikipedia.org/wiki/C_data_types">tailles minimum</a> pour les types C, sont: <code>char</code> avec au moins 8 bits (1 octet), <code>short</code> et <code>integer</code> 16 bits, <code>long</code> 32 bits et <code>long long</code> 64 bits.</p>
<p>Donc, pour pouvoir stocker des entiers sur (au moins) 8 bits (et non pas sur au moins 16 bits), il faut utiliser <code>char</code>. C'est pour stocker ces entiers que l'on a aussi <code>signed char</code> et <code>unsigned char</code>, même si ça n'a pas de sens d'avoir un "caractère signé" a priori :)</p>
<p>Ensuite, j'ai enfin trouvé à quoi sert GString dans GLib et pourquoi c'est toujours dit "compatible UTF-8" partout dans la documentation des fonctions liées à GString: d'après <a href="https://developer-old.gnome.org/glib/stable/glib-Strings.html#glib-Strings.description">sa description</a><sup id="fnref2"><a href="#fn2">2</a></sup>, il faut juste interpréter une GString comme un tableau dynamique de bytes avec la sûreté d'avoir le caractère <code>NUL</code> de terminaison de string et d'avoir une propriété <code>len</code> qui donne le nombre d'octet jusqu'à ce caractère <code>NUL</code>. En plus ce type est associés à plusieurs fonctions généralistes de gestion de texte.</p>
<p>Et là, je me suis dit, mais en fait ça ressemble énormément à <code>std::string</code> de C++: un tableau dynamique d'octets avec une propriété <code>len</code>. Mais si je me souviens bien, il y a d'autres types de string en C++ pour la gestion Unicode ? À quoi servent-ils ?</p>
<p>Eh bien, il y a effectivement <a href="https://en.cppreference.com/w/cpp/string/basic_string"><code>std::wstring</code> et 3 autres</a>. <code>wstring</code> utilise le type <code>wchar_t</code> qui est un "wide character", mais qui n'est de nouveau pas définit explicitement dans le standard C.</p>
<p>En cherchant (encore !) des <a href="https://stackoverflow.com/questions/13509733/what-is-the-use-of-wchar-t-in-general-programming">explications sur StackOverflow</a> à propos de <code>wchar</code>, j'ai trouvé ce lien des "personnes qui sont contre leur utilisation": <a href="https://utf8everywhere.org/">https://utf8everywhere.org/</a></p>
<p>Ils donnent beaucoup d'information à propos d'UTF-8 vs UTF-16 vs UTF-32 et pourquoi ils pensent que c'était inutile d'inventer <code>wchar_t</code> que finalement seul <code>std::string</code> était utile au C++<sup id="fnref3"><a href="#fn3">3</a></sup>. </p>
<p>En reprenant son pendant <code>GString</code> en C, j'ai enfin eu la confirmation du pourquoi c'est effectivement suffisant pour stocker des strings en UTF-8, puisqu'il faut juste pouvoir avoir un ByteArray pour le stockage.</p>
<p>Pour l’interprétation de la donnée, il faut évidemment utiliser les bonnes fonctions (comme utiliser g_uf8_normalize avant de faire des comparaisons de string, par exemple) et bien comprendre quelle définition de "caractère" on a en tête (utf8everywhere donne 7 définitions différentes et incompatibles !).</p>
<p>Voilà, maintenant pour mon application en C, je sais que j'ai besoin de pouvoir traverser un mot donné par itération sur ses "grapheme cluster". Il ne me reste plus qu'à trouver un bon moyen de le faire :)</p>
<div class="footnotes">
<hr>
<ol>
<li id="fn1">
<p>le standard <a href="https://web.archive.org/web/20181230041359if_/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf">n'est pas explicite</a> sur la taille des types de base. <code>char</code> doit pouvoir contenir le <a href="https://en.cppreference.com/w/cpp/language/charset">basic execution character set</a> et garantir que sa valeur numérique est non-négative. Ce qui revient en pratique à utiliser au moins 8 bits pour <code>char</code>. <a href="#fnref1">↩</a></p>
</li>
<li id="fn2">
<p>oui, j'ai donné le lien de l'ancienne documentation, parce que la <a href="https://docs.gtk.org/glib/struct.String.html#description">nouvelle</a> a perdu cette description. J'ai essayé de <a href="https://gitlab.gnome.org/GNOME/gi-docgen/-/issues/139">rapporter le bug</a>, en espérant l'avoir ouvert dans le bon projet ! <a href="#fnref2">↩</a></p>
</li>
<li id="fn3">
<p>à la condition que le standard dise que le <code>basic execution character set</code> doit être capable de stocker n'importe quelle donnée Unicode. Ce serait facile de le faire grâce à UTF-8 qui est compatible avec la définition actuelle de <code>char</code>. <a href="#fnref3">↩</a></p>
</li>
</ol>
</div>
<div><a href="https://linuxfr.org/users/trim/journaux/vous-avez-dit-caractere.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/128658/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/vous-avez-dit-caractere#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/128658/comments.atomtag:linuxfr.org,2005:Diary/402522022-04-29T11:35:24+02:002022-05-29T15:28:08+02:00Utiliser Podman en mode rootless pour exécuter en service des containers rootlessLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#toc-pr%C3%A9paration-du-syst%C3%A8me-h%C3%B4te">Préparation du système hôte</a></li>
<li><a href="#toc-configuration-de-lutilisateur-pour-ex%C3%A9cuter-le-service">Configuration de l'utilisateur pour exécuter le service</a></li>
<li><a href="#toc-pr%C3%A9parer-et-d%C3%A9marrer-le-service">Préparer et démarrer le service</a></li>
<li><a href="#toc-cr%C3%A9er-un-service-systemd-et-le-d%C3%A9marrer">Créer un service systemd et le démarrer</a></li>
<li><a href="#toc-conclusion">Conclusion</a></li>
</ul>
<p>Hello,</p>
<p>J'ai eu l'occasion de remonter mon serveur et tous ses services suite à un bug sur le système de fichier.</p>
<p>Je pouvais juste remonter les sauvegardes de ma Debian 11 Bullseye, mais j'avais prévu une nouvelle machine et je voulais en profiter pour refaire à la main les installations des services.</p>
<p>J'emploie Debian et j'utilise donc d'habitude les paquets Debian.</p>
<p>Mais, bien sûr, j'ai certains services, comme Firefox Sync et Grafana, qui ne sont pas disponible dans les répertoires Debian.</p>
<p>Cette fois, je voulais profiter d'avoir un peu plus d'expérience avec Docker pour installer ces services sous formes de container au lieu d'ajouter leur répertoire <code>apt</code> dans Debian (et donc leur donner les droits d'administration sur ma machine lors de l'installation et mise à jour).</p>
<p>Pour être un peu plus serein, je ne voulais pas utiliser Docker en mode "service avec les droits root" pour éviter de donner trop de privilèges aux containers.</p>
<p>J'ai donc voulu essayer d'utiliser podman parce que j'en avais pas mal entendu parler: podman est un gestionnaire de container qui est prévu pour pouvoir être employé par un utilisateur standard, c'est à dire sans droits d'administrations (autrement dit en mode <em>rootless</em>).</p>
<p>Pour info, Docker sait aussi s'exécuter en mode <em>rootless</em>, c'est juste un peu moins clé en main dans Debian.</p>
<p>J'ai un peu galéré pour la gestion des volumes et du réseau, alors je me suis dit que c'était une bonne occasion de partager cette expérience et de montrer comment j'ai pu monter un service sur mon serveur qui exécute un container en mode <em>rootless</em>.</p>
<p>Pour l'exemple, je vais prendre un service <a href="https://grafana.com/">Grafana</a> qui permet de visualiser l'état de mon serveur.</p>
<p>J'ai volontairement pris en exemple Grafana, parce qu'il soulève le problème des droits sur les volumes et parce qu'il a besoin de communiquer avec l'hôte dans ma configuration (pour accéder à Prometheus et à Postgresql installés sur l'hôte).</p>
<p>Le problème de droits sur les volumes est dû au fait que l'image de Grafana suit la bonne pratique d'utiliser, à l'intérieur du container, un utilisateur standard pour exécuter le processus Grafana.</p>
<p>Le mode <em>rootless</em> sera donc appliqué au gestionnaire de container de l'hôte (podman) et à l'intérieur du container lui-même (Grafana).</p>
<h2 id="toc-préparation-du-système-hôte">Préparation du système hôte</h2>
<p>Au début de mes recherches, je suis tombé sur le site <a href="https://rootlesscontaine.rs/">https://rootlesscontaine.rs/</a> qui explique bien comment débuter avec podman (Docker et d'autre gestionnaires) en mode rootless.</p>
<p>J'installe quelques outils, en suivant leurs conseils:</p>
<pre><code class="sh">sudo apt install podman slirp4netns uidmap dbus-user-session fuse-overlayfs systemd-container</code></pre>
<ul>
<li>
<code>podman</code>: le gestionnaire de container</li>
<li>
<code>slirp4netns</code>: outil qui permet à l'utilisateur de gérer un namespace réseau sans privilèges d'administration</li>
<li>
<code>uidmap</code>: utilitaires pour gérer les namespaces d'identifiants utilisateurs (les UID et GID) sans privilèges d'administration</li>
<li>
<code>dbus-user-session</code>: les sessions dbus utilisateurs <a href="https://rootlesscontaine.rs/getting-started/common/login/#optional-enable-dbus-user-session">sont requis</a> pour utiliser systemd avec les cgroup v2</li>
<li>
<code>fuse-overlayfs</code>: <a href="https://rootlesscontaine.rs/how-it-works/overlayfs/">pour les kernels < 5.11</a>, il vaut mieux utiliser FUSE pour la gestion du système de fichier par utilisateur</li>
<li>
<code>systemd-container</code>: permettra d'utiliser <code>machinectl</code> <a href="https://rootlesscontaine.rs/getting-started/common/login/">pour se connecter avec l'utilisateur</a> et ainsi avoir la variable <code>XDG_RUNTIME_DIR</code> configurée</li>
</ul>
<h2 id="toc-configuration-de-lutilisateur-pour-exécuter-le-service">Configuration de l'utilisateur pour exécuter le service</h2>
<p>Ensuite, je crée un user dédié au service:</p>
<pre><code class="sh">sudo adduser --system --disabled-password grafana</code></pre>
<p>Comme l'utilisateur devra toujours faire tourner ce service, il faut dire à systemd que cet utilisateur doit toujours avoir une session ouverte:</p>
<pre><code class="sh">sudo loginctl enable-linger grafana</code></pre>
<p>Comme indiqué sur rootlesscontaine.rs, je donne des plages d'UID et de GID à l'utilisateur pour qu'il puisse les utiliser pour exécuter des containers rootless.<br>
Je modifie donc les fichiers <code>/etc/subuid</code> et <code>/etc/subgid</code> pour leur ajouter une ligne comme:</p>
<pre><code>grafana:100000:65536
</code></pre>
<p>Ça veut dire que le système dédie une plage de 65'536 identifiants à l'utilisateur grafana (il peut donc utiliser les identifants de 100'000 à 165'535).</p>
<p><a href="https://github.com/containers/podman/issues/12715#issuecomment-1002915917">Une information très importante</a>: si vous avez essayé d'exécuter une commande podman en tant qu'utilisateur standard <strong>avant</strong> d'avoir modifié ces deux fichiers, il faut dire à podman de "migrer" avec la commande (à exécuter en tant qu'utilisateur):</p>
<pre><code class="sh">podman system migrate</code></pre>
<p>J'ai galéré un peu à comprendre pourquoi je continuais d'avoir des erreurs qui me disaient <em>potentially insufficient UIDs or GIDs available in user namespace</em> alors que je venais de corriger le fichier /etc/subgid.</p>
<h2 id="toc-préparer-et-démarrer-le-service">Préparer et démarrer le service</h2>
<p>Pour se connecter avec l'utilisateur sur mon serveur, <a href="https://rootlesscontaine.rs/getting-started/common/login/">je dois utiliser machinectl</a>:</p>
<pre><code class="sh">sudo machinectl shell grafana@</code></pre>
<p>Comme j'ai créé un utilisateur avec l'option <code>--system</code>, Debian n'a pas copié les fichiers par défaut.<br>
Si vous avez besoin de certains fichiers, pensez à les copier:</p>
<pre><code class="sh">cp -a /etc/skel/.config/ ~</code></pre>
<p>Pour stocker la configuration du container, je créé un fichier <code>.env</code> dans le dossier utilisateur.<br>
Ce fichier permettra de changer la configuration du container sans avoir besoin de modifier le fichier <code>.service</code> de systemd.</p>
<pre><code class="sh"><span class="c1"># Ajuster le masque utilisateur pour refuser la lecteur par les autres</span>
<span class="nb">umask</span> <span class="m">077</span>
editor grafana.env</code></pre>
<p>Pour Grafana, il faut lire la <a href="https://grafana.com/docs/grafana/latest/administration/configure-docker/">documentation</a> et j'y ai mis:</p>
<pre><code># Nous allons monter un volume dans le dossier /grafana
GF_PATHS_CONFIG=/grafana/grafana.ini
# Pour remonter les logs à Podman, il faut mettre les logs dans stdout et stderr
GF_LOG_MODE=console
</code></pre>
<p>Ensuite, je crée un volume avec la configuration de Grafana.</p>
<pre><code class="sh"><span class="c1"># Ajuster le masque utilisateur pour refuser la lecteur par les autres</span>
<span class="nb">umask</span> <span class="m">077</span>
mkdir grafana
editor grafana/grafana.ini</code></pre>
<p>J'avais déjà un fichier <code>grafana.ini</code> de mon ancien serveur, je l'ai copié et j'ai fait quelques ajustements:</p>
<p>En mode <em>rootless</em>, podman utilise le service <code>slirp4netns</code> et le <em>gateway</em> réseau vu par le container a toujours l'adresse IP <code>10.0.2.2</code>.</p>
<p>Mon fichier <code>grafana.ini</code> comptait sur le service Postgresql du serveur local, j'ai donc dû remplacer <code>localhost</code> par <code>10.0.2.2</code> comme serveur Postgresql.</p>
<p>L'image Docker de Grafana suit la bonne pratique de modifier l'UID de l'utilisateur qui exécute le binaire dans le container.<br>
L'utilisateur de Grafana utiliser l'UID <code>472</code>, mais celui-ci n'existe pas vraiment sur le système hôte, on ne peut donc pas faire un simple <code>chown 472:nogroup -R grafana</code>.</p>
<p>Pour pouvoir partager ce dossier via un volume, il faut demander à podman d'ajuster les droits au dossier:</p>
<pre><code class="sh">podman unshare chown <span class="m">472</span>:0 -R grafana</code></pre>
<p>Pour plus d'explications sur cette partie de la configuration des droits du volume, vous pouvez suivre <a href="https://www.redhat.com/sysadmin/rootless-podman-makes-sense">cet article</a> de Dan Walsh.</p>
<p>Enfin, on peut exécuter le container Grafana:</p>
<pre><code class="sh">podman run --name<span class="o">=</span>grafana -p <span class="m">3000</span>:3000 --env-file ~/grafana.env --volume /home/grafana/grafana:/grafana --net slirp4netns:allow_host_loopback<span class="o">=</span><span class="nb">true</span> docker.io/grafana/grafana-oss</code></pre>
<p>C'est une commande podman (ou Docker assez classique), à l'exception de l'option <code>--net slirp4netns:allow_host_loopback=true</code> qui demande à <code>slirp4netns</code> d'autoriser la communication depuis le container vers l'hôte.</p>
<p>J'ai besoin de cette communication pour permettre à Grafana de joindre Postgresql et Prometheus (j'ai dû aussi mettre à jour le DataSource Prometheus pour utiliser l'adresse IP <code>10.0.2.2</code>).</p>
<h2 id="toc-créer-un-service-systemd-et-le-démarrer">Créer un service systemd et le démarrer</h2>
<p>Enfin, on est prêt à configurer systemd pour démarrer ce container automatiquement.</p>
<p>Pour ça, j'ai suivi <a href="https://www.redhat.com/sysadmin/podman-run-pods-systemd-services">cet article</a> et j'y ai entre autre appris que podman est un gestionnaire de <code>pod</code>, une notion que j'utilise régulièrement avec <em>OpenShift</em> (et donc <em>Kubernetes</em>). Un <code>pod</code> peut contenir un ensemble de containers et leur permet de communiquer ensemble avec le hostname <code>localhost</code>.</p>
<p>Comme vous pouvez le voir dans l'article, podman propose une commande qui génère les fichiers services systemd à installer dans le bon répertoire (dans notre cas 1 seul fichier, parce qu'on a crée un container sans pod):</p>
<pre><code class="sh">mkdir -p ~/.config/systemd/user
<span class="nb">cd</span> ~/.config/systemd/user
podman generate systemd --name --new --restart-policy<span class="o">=</span>on-failure -f grafana</code></pre>
<p>Enfin, il faut avertir systemd de démarrer au boot ce service et de l'exécuter maintenant:</p>
<pre><code class="sh">systemctl --user daemon-reload
systemctl --user <span class="nb">enable</span> --now container-grafana.service</code></pre>
<h2 id="toc-conclusion">Conclusion</h2>
<p>Je suis assez content d'avoir pu installer des services qui n'existent pas dans les paquets Debian sans avoir eu besoin de leur donner un accès <code>root</code> (ce qui se passe quand on utilise <code>apt</code> pour l'installation et les mises à jour).</p>
<p>C'était plus long et compliqué que prévu, mais au final ça tourne.</p>
<p>Peut être que l'installation d'une version minimale de Kubernetes ou d'OpenShift (enfin, <a href="https://www.okd.io/">OKD</a>) aurait été plus rapide, je ne sais pas et je ne sais pas non plus quelles sont les prérequis réseaux et matériels pour ces outils.</p>
<p>Pour l'instant, j'ai vu ces inconvénients:</p>
<ul>
<li>Je n'ai plus la vérification GPG faite par <code>apt</code>, je fais directement confiance à la gestion du service publique <em>Docker Hub</em>.</li>
<li>Les services systèmes de systemd ne sont pas accessibles depuis l'utilisateur. J'ai dû donc pour chaque utilisateur copier un service <code>notify-admin@.service</code> pour pouvoir ajouter l'option <code>OnFailure</code> qui va bien.</li>
<li>Les logs des containers ne sont accessibles uniquement avec <code>podman logs grafana</code>. J'espérais les voir dans les logs de l'utilisateur avec <code>journalctl --user</code>, mais je n'ai rien du tout. Je dois manquer d'indices pour configurer <code>systemd-journald</code> et podman. Le top aurait était que l'utilisateur <code>root</code> de l'hôte puisse voir tous les logs de tous les services avec <code>journalctl</code> pour me simplifier la gestion de mon serveur.</li>
</ul>
<p>Pour aller encore un peu plus loin, il faudrait encore sécuriser ces services avec la configuration AppArmor ou SELinux qui va bien (Debian installe par défaut AppArmor et RedHat SELinux).</p>
<div><a href="https://linuxfr.org/users/trim/journaux/utiliser-podman-en-mode-rootless-pour-executer-en-service-des-containers-rootless.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/127610/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/utiliser-podman-en-mode-rootless-pour-executer-en-service-des-containers-rootless#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/127610/comments.atomtag:linuxfr.org,2005:Diary/401732022-03-05T21:39:06+01:002022-03-05T21:39:06+01:00Le projet Gtkmm cherche de nouvelles forces pour son équipe de maintenanceLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Cher journal,</p>
<p>J'ai appris sur le <a href="https://discourse.gnome.org/t/gtkmm-abandonment/8906">forum de GNOME</a> que le projet gtkmm est à la recherche de nouvelles forces pour maintenir le projet (gtkmm est un <em>binding</em> C++ pour les interfaces graphiques Gtk).</p>
<p>Kjell Ahlstedt, qui fait partie actuellement de l'<a href="https://www.gtkmm.org/en/developers.html">équipe de maintenance</a>, écrit dans le bug <a href="https://gitlab.gnome.org/GNOME/gtkmm/-/issues/110">gtkmm/#110</a>:</p>
<blockquote>
<p>I will not continue forever with maintenance of gtkmm and other *mm modules.<br>
Unless someone else continues the work, glibmm, gtkmm and other modules will<br>
be abandoned in a near future.</p>
</blockquote>
<p>Ce que je traduirai librement par:</p>
<blockquote>
<p>Je ne vais pas continuer à jamais avec la maintenance de gtkmm et des autres modules *mm. À moins que d'autres continuent le travaille, glibmm, gtkmm et les autres modules sont bientôt être abandonnés.</p>
</blockquote>
<p>Personnellement, je ne connais pas assez Gtk ni le C++ pour me lancer sur ce genre de projets.</p>
<p>J'écris donc ce journal pour transmettre l'information et je croise les doigts pour que quelqu'un puisse reprendre le flambeau 😊</p>
<p>Si jamais gtkmm et les autres modules *mm tombent vraiment à l'abandon, il existe aussi le projet <a href="https://gitlab.com/mnauw/cppgir">cppgir</a> qui permet d'automatiser la création des <em>binding</em> entre Gtk et C++ grâce à l'utilisation de <a href="https://gi.readthedocs.io/en/latest/">GObject Instrospection</a>.</p>
<p>Je ne l'ai jamais testé ni utilisé, je ne sais donc pas s'il peut remplacer complètement gtkmm et consort. Je pense qu'il est intéressant, car il essaie d'utiliser l'outil GNOME officiel pour faire les nouveaux <em>binding</em> depuis la version 3 de Gtk.</p>
<div><a href="https://linuxfr.org/users/trim/journaux/le-projet-gtkmm-cherche-de-nouvelles-forces-pour-son-equipe-de-maintenance.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/127092/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/le-projet-gtkmm-cherche-de-nouvelles-forces-pour-son-equipe-de-maintenance#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/127092/comments.atomtag:linuxfr.org,2005:News/403792021-04-11T20:20:53+02:002021-04-11T20:20:53+02:00GNOME annonce la nouvelle bibliothèque libadwaitaLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Adrien Plazas nous annonce la venue de <em>libadwaita</em>, une bibliothèque qui proposera la première implémentation officielle des <em>Human Interface Guidelines</em> de GNOME (les directives pour les interfaces humaines, abrégées <em>HIG</em>).</p>
<p>Cette nouvelle bibliothèque simplifie la vie des développeurs d’applications pour GNOME, puisqu’elle donne enfin un socle commun, validé par l’équipe design, pour suivre les HIG de GNOME. De plus, elle permettra au projet GTK de redevenir plus indépendante de la plateforme GNOME.</p>
<p>Pour les développeurs qui connaissent déjà libhandy, libadwaita en est le successeur GTK4 et libhandy sera remplacé par libadwaita.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f61706c617a61732e70616765732e6769746c61622e676e6f6d652e6f72672f626c6f672f6173736574732f626c6f672f696e74726f647563696e672d6c6962616477616974612d6865616465722e737667/introducing-libadwaita-header.svg" alt="bannière d’en-tête de libadwaita" title="Source : https://aplazas.pages.gitlab.gnome.org/blog/assets/blog/introducing-libadwaita-header.svg"></p>
<p>La suite de la dépêche vous propose une traduction de l’annonce de cette nouvelle bibliothèque, avec l'accord de l'auteur original.</p>
</div><ul><li>lien nᵒ 1 : <a title="https://aplazas.pages.gitlab.gnome.org/blog/blog/2021/03/31/introducing-libadwaita.html" hreflang="en" href="https://linuxfr.org/redirect/108145">Introduction de libadwaita</a></li><li>lien nᵒ 2 : <a title="https://gitlab.gnome.org/GNOME/libadwaita/" hreflang="en" href="https://linuxfr.org/redirect/108169">Projet Gitlab libadwaita</a></li></ul><div><h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li>
<a href="#toc-introduction-de-libadwaita">Introduction de libadwaita</a><ul>
<li><a href="#toc-gnome-et-gtk">GNOME et GTK</a></li>
<li><a href="#toc-d%C3%A9m%C3%AAler-les-2-projets">Démêler les 2 projets</a></li>
<li><a href="#toc-adwaita">Adwaita</a></li>
<li><a href="#toc-donnez-la-moi">Donnez-la-moi !</a></li>
</ul>
</li>
</ul>
<h2 id="toc-introduction-de-libadwaita">Introduction de libadwaita</h2>
<p>GNOME 41 [NdT: prévu pour l’automne 2021] viendra avec <a href="https://gitlab.gnome.org/GNOME/libadwaita/">libadwaita</a>, la mise à jour GTK4 de la bibliothèque <a href="https://gitlab.gnome.org/GNOME/libhandy">libhandy</a>, qui jouera un rôle central dans la définition du langage visuel et de l’expérience utilisateur des applications GNOME.</p>
<h3 id="toc-gnome-et-gtk">GNOME et GTK</h3>
<p>Depuis 20 ans, GNOME définit les <a href="https://developer.gnome.org/hig/stable/">directives pour les interfaces humaines</a> (<em>human interface guideslines</em>, abrégées <em>HIG</em>) qui sont suivies par les applications ciblant la plateforme.</p>
<p>L’implémentation des HIG requiert beaucoup de travail manuel pour les développeurs d’applications. Ça a amené beaucoup de copier-coller de code d’interface utilisateur, plein de légères variations et erreurs d’interprétations et ça a rendu les applications difficiles à maintenir et remplies d’<a href="https://blogs.gnome.org/alexm/2021/03/13/reinventing-tabs/">incohérences visuelles et comportementales</a>. Le fait que ces directives ne soient pas gravées dans le marbre et qu’elles évoluent très souvent a fait exploser la quantité d’incohérences.</p>
<p>Le respect des directives peut être simplifié avec une bibliothèque offrant des widgets et styles adaptés. Ce rôle a été rempli par GTK à cause de ses liens très forts avec le projet GNOME: Adwaita est à la fois le langage visuel de GNOME et le thème par défaut de GTK. Cependant, c’est assez problématique, parce que GTK dessert plusieurs publics et plateformes, et que ça favorise GNOME à la place des autres.</p>
<p>Cette situation amène aussi des conflits de cycle de vie : la machinerie GTK doit être extrêmement stable et ne peut pas évoluer dans une course rapide, alors que les directives de GNOME et Adwaita évoluent en comparaison beaucoup plus vite et tireraient bénéfice d’une bibliothèque suivant le rythme des designs les plus récents.</p>
<h3 id="toc-démêler-les-2-projets">Démêler les 2 projets</h3>
<p>Le besoin d’offrir à GNOME une bibliothèque qui avance plus vite a rapidement grandi dans la communauté et beaucoup de bibliothèques de widgets ont comblé le vide : libdazzle, libegg, libgd et libhandy pour en nommer quelques-unes. Ça a amélioré la situation, mais ça a juste contourné les problèmes plutôt que de les résoudre. GNOME a besoin d’une bibliothèque officielle implémentant rapidement les HIG et développée en collaboration avec l’équipe design. Une telle bibliothèque définirait le langage visuel de GNOME en offrant les feuilles de style et les modèles dans un unique paquet.</p>
<p>Ainsi, GTK pourrait évoluer indépendamment de GNOME, à un rythme suivant ses besoins. Il pourrait se focaliser sur des widgets plus génériques et sur le cœur de sa machinerie, simplifiant son support de thème en le rendant plus flexible. En plus, ça permettrait aux autres utilisateurs de GTK de jouer dans la même cour : du point de vue de GTK, GNOME, elementary et Inskape ne feraient plus aucune différence, et cette hypothétique bibliothèque de GNOME remplirait le même rôle que Granite pour elementary.</p>
<p>L’introduction de cette bibliothèque ne devrait pas rendre GTK moins utile sur les autres plateformes ou rendre les applications GTK plus difficiles à construire (ou plus vilaines). Ça devrait simplement être une autre bibliothèque dont vous pouvez choisir de dépendre si vous voulez que votre application s’intègre bien avec GNOME.</p>
<h3 id="toc-adwaita">Adwaita</h3>
<p>Pour résoudre le besoin d’indépendance de GTK et celui de l’évolution plus rapide de GNOME, nous sommes en train de créer le projet libadwaita.</p>
<p>Adwaita est le nom de l’identité et du langage visuel de GNOME et il est déjà utilisé par deux projets qui l’implémentent: la feuille de style GTK Adwaita et l’ensemble d’icônes Adwaita. Cette nouvelle bibliothèque libadwaita a l’intention d’étendre ce concept en étant la partie code logiciel qui manque à Adwaita. La bibliothèque sera implémentée comme le successeur GTK4 et remplaçant de libhandy et elle sera développée par les développeurs actuels de libhandy.</p>
<p>La feuille de style Adwaita sera déplacée dans libadwaita, ainsi que ses variantes tels que HighContrast et HighContrastInverse. GTK utilisera une copie de cette feuille de style renommée Default, qui se concentrera sur les besoins des applications GTK pures. Pour plus d’informations, lisez le rapport de bug <a href="https://gitlab.gnome.org/GNOME/gtk/-/issues/3582">gtk#3582</a> et la demande de fusion <a href="https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3079">gtk!3079</a>. Nous voulons que ça arrive rapidement dans le développement de libadwaita.</p>
<p>Comme elle implémentera les HIG de GNOME, les développeurs de la bibliothèque travailleront en étroite collaboration avec l’équipe design de GNOME. L’équipe design fera également des revues de l’ensemble de départ des widgets et styles hérités de libhandy, s’assurant qu’ils sont d’équerre avec les directives qu’ils ont développées et qu’ils rafraîchiront pour GNOME 41.</p>
<p>La transition est actuellement développée en étroite collaboration entre les développeurs GTK, les développeurs de libhandy et l’équipe design de GNOME. Elle a été également discutée avec une variété d’autres développeurs de GNOME et elementary.</p>
<h3 id="toc-donnez-la-moi">Donnez-la-moi !</h3>
<p>Si vous êtes un développeur d’application GNOME, vous voudrez sûrement porter votre application depuis GTK3 (et libhandy) vers GTK4 et libadwaita à temps pour GNOME 41. Vous pouvez trouver libadwaita sur le <a href="https://gitlab.gnome.org/GNOME/libadwaita/">Gitlab de GNOME</a> et vous pouvez joindre les développeurs sur le salon Matrix <a href="https://matrix.to/#/#libadwaita:gnome.org?via=gnome.org">#libadwaita:gnome.org</a>. Vous pouvez aussi les joindre sur le salon IRC #libadwaita sur GIMPnet.</p>
<p>Le projet libadwaita suivra les mises à jour des HIG, et les sorties suivront le calendrier de GNOME. Chaque version de la bibliothèque ciblera une version spécifique de GNOME, la première version stable sera livrée avec GNOME 41.</p>
<p>La première version stable de la bibliothèque sera la version 1.0. Nous ne suivrons pas les numéros de version de GNOME, car les versions majeures de la bibliothèque Adwaita s’étendront sur plusieurs sorties de GNOME, sinon, ça serait ingérable pour les développeurs d’application. Les versions majeures seront installables en parallèles.</p>
<p>La bibliothèque n’est pas tout à fait prête à être utilisée maintenant, nous devons corriger quelques problèmes restants, écrire un guide de migration et sortir une première version alpha que vous pourrez cibler en toute sécurité. Nous sortirons ensuite plusieurs versions alphas et les guides de migrations correspondant, pour que vous puissiez mettre à jour en sécurité votre application pendant que nous stabiliserons libadwaita 1.0 sans même casser vos builds.</p>
<p>À partir de maintenant, le rythme de développement de libhandy va extrêmement ralentir pour que nous nous concentrions sur le développement de libadwaita. Toute amélioration faite pour libhandy doit dorénavant d’abord être implémentée dans libadwaita.</p>
<p>Nous espérons que les utilisateurs GTK 4 se réjouissent de leur indépendance accrue et que les développeurs d’applications GNOME se sentent valorisés !</p>
<p>Merci aux développeurs GTK, à l’équipe design de GNOME et à Alexander Mikhaylenko pour l’aide apportée lors de l’écriture de cet article.</p>
</div><div><a href="https://linuxfr.org/news/gnome-annonce-la-nouvelle-bibliotheque-libadwaita.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/123757/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/gnome-annonce-la-nouvelle-bibliotheque-libadwaita#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsaztedbobble bubbleBenoît SibaudagardeleinJulien JorgeYsabeau 🧶 🧦4fageshttps://linuxfr.org/nodes/123757/comments.atomtag:linuxfr.org,2005:Diary/395202020-12-23T22:42:12+01:002020-12-23T22:42:12+01:00Android < 7.1 va refuser les connections TLS certifiées par Let's EncryptLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Hello,</p>
<p>En novembre dernier, Let's Encrypt a <a href="https://letsencrypt.org/2020/11/06/own-two-feet.html">annoncé</a> que ~ 33,4% utilisateurs d'Android (ceux dont la version Android est plus vieille que la 7.1.1) ne pourront plus se connecter aux sites webs et ressources Internet certifiées par leurs certificats.</p>
<p>En effet, ils ont noté à juste titre que le certificat racine <code>DST Root X3</code> d'<em>IdenTrust</em> va expirer en septembre 2021.</p>
<p>Or, c'est ce certificat racine qui est utilisé pour signer le certificat intermédiaire <code>Let's Encrypt Authority X3</code> de Let's Encrypt et permettre d'avoir la chaîne complètement validée sur les anciens systèmes d'exploitations.</p>
<p>En effet, ces anciens systèmes ne reçoivent plus de mises à jour et ils n'ont pas intégré le nouveau certificat racine <code>ISRG Root X1</code> de Let's Encrypt. La chaîne de confiance ne pourra donc théoriquement plus être confirmée après septembre 2021.</p>
<p>Vous noterez que Let's Encrypt proposait 3 solutions à ce problème pour les propriétaires de sites web:<br>
1. Faire installer Firefox aux utilisateurs d'anciennes versions d'Android<br>
2. Basculer en HTTP sans TLS<br>
3. Ne plus utiliser Let's Encrypt pour créer ses certificats, mais un des CA disponible dans ces cersions</p>
<p>Malheureusement, Firefox ne résoudrait le problème que pour le web et uniquement pour Android version 5.0 ou supérieur.</p>
<p>Le 21 décembre dernier, Let's Encrypt <a href="https://letsencrypt.org/2020/12/21/extending-android-compatibility.html">remercie</a> l'innovation de sa communauté et la confiance d'<em>IdenTrust</em>. En effet, ils ont trouvé ensemble un moyen de conserver encore 3 ans la sécurité pour les utilisateurs d'Android < 7.1.1.</p>
<p>La communauté a remarqué qu'Android fait confiance inconditionnellement aux certificats racines installés sur le système (1). Donc, même si le certificat racine <code>DST Root X3</code> d'<em>IdenTrust</em> ne devrait plus être valide à partir de septembre 2021, Android continue de lui faire confiance.</p>
<p><em>IdenTrust</em> a accepté de cross-signer le certificat racine <code>ISRG Root X1</code> de Let's Encrypt pour une durée de 3 ans. Oui, cette fois, c'est bien le certificat racine de Let's Encrypt qui est directement cross-signé et non pas le certificat intermédiaire.</p>
<p>Cette solution permet à Let's Encrypt de passer à leur nouvelle chaîne de certificat tout en restant compatible avec les anciennes versions d'Android, comme montré dans leur schéma:</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6c657473656e63727970742e6f72672f696d616765732f323032302e31322e32312d616e64726f69642d636f6d7061742d636572742d636861696e2e706e67/2020.12.21-android-compat-cert-chain.png" alt="Transition de chaîne de certificat" title="Source : https://letsencrypt.org/images/2020.12.21-android-compat-cert-chain.png"></p>
<p>Comme vous pouvez le voir sur ce schéma, la nouvelle chaîne livrée par défaut aux clients de Let's Encrypt va contenir 4 certificats. D'un côté, ça va ralentir un peu l'initialisation de la connexion TLS, mais d'un autre, ça donne 3 ans de compatibilité Android en plus.</p>
<p>Le client pourra demander expressément d'utiliser la nouvelle chaîne avec uniquement 3 certificats, mais il perdra alors la compatibilité avec les anciennes versions d'Android. Dans ce cas, le client Let's Encrypt doit permettre de trouver les chaînes alternatives. C'est déjà le cas pour certbot et j'ai décidé de ne pas l'implémenter pour <a href="https://projects.adorsaz.ch/adrien/acme-dns-tiny/-/issues/13">acme-dns-tiny</a>.</p>
<p>Bref, les utilisateurs d'Android ont eu chaud, mais ils ont plus de répit 😅</p>
<hr>
<p>1: J'ai appris dans cet article, que le standard précise que pour valider les <em>trust anchors</em> (certificats racines de confiances du système), le client TLS (le système d'exploitation, le navigateur…) peut choisir ou non de suivre les indications des différents champs présents. Android a décidé de ne pas utiliser le champ <em>notAfter</em> dans leur implémentation et ça aide bien Let's Encrypt pour cette fois. Il se peut que d'autres systèmes fassent de même.</p>
<div><a href="https://linuxfr.org/users/trim/journaux/android-7-1-va-refuser-les-connections-tls-certifiees-par-let-s-encrypt.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/122718/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/android-7-1-va-refuser-les-connections-tls-certifiees-par-let-s-encrypt#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/122718/comments.atomtag:linuxfr.org,2005:Diary/394732020-12-02T22:58:21+01:002020-12-02T22:58:21+01:00Transformer vim en IDE avec LSP et DAPLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Cette année, j’ai découvert l’IDE Visual Studio Code, enfin, son pendant libre <a href="https://vscodium.com/">VSCodium</a> pour mon travail.</p>
<p>C’est un IDE qui fonctionne plutôt bien, mais je ne me sentais pas très à l’aise avec le fait que l’upstream (Microsoft en l’occurrence) distribue des binaires sous <a href="https://code.visualstudio.com/license">licence non open-source</a> et ajoute de la télémétrie par défaut. En plus, c’est développé avec <code>Electron</code> et, bien que j’aime beaucoup utiliser <em>nodejs</em>, je trouve vraiment lourd d’avoir un Chrome complet lancé juste pour mon <em>IDE</em>.</p>
<p>D’un autre côté, j’aimais bien utiliser <em>vim</em> comme éditeur de configuration et de petits textes sur mon serveur.</p>
<p>J’avais tenté plusieurs fois de configurer <em>vim</em> comme IDE, mais j’ai eu pas mal de peine à comprendre comment ajouter et activer des plugins.</p>
<p>En fait, si on regarde le site <a href="https://vimawesome.com/plugin/ctrlp-vim-red">vimawsome</a>, on voit déjà listé 4 gestionnaires de plugins différents pour <em>vim</em>.</p>
<p>J’étais un peu perdu aussi par Debian qui empaquette des plugins et propose en dépendance <a href="https://packages.debian.org/fr/buster/vim-addon-manager">vim-addon-manager</a> pour activer les plugins installés.</p>
<p>Bref, j’ai essayé plusieurs fois de configurer <em>vim</em> et je n’ai pas réussi.</p>
<p>Cette année, j’ai appris que, depuis la version 8 de <em>vim</em>, il y a un gestionnaire de paquet officiellement supporté et activé par <em>vim</em> !</p>
<p>En plus, il permet d’activer les plugins très simplement:<br>
1. Créer un “pack” où l’on va installer nos plugins : <code>mkdir – p ~/.vim/pack/adrien/{start, opt}</code><br>
(les plugins dans <code>start</code> sont actifs dès le démarrage de <em>vim</em>, ceux dans <code>opt</code> s’activent avec la commande <code>: packadd</code>)<br>
2. Installer un plugin dans ce répertoire, par exemple pour <code>ctrl-p</code> (la recherche de fichiers):</p>
<pre><code class="sh"><span class="nb">cd</span> ~/.vim/pack/adrien/start<span class="p">;</span>
git clone https://github.com/kien/ctrlp.vim</code></pre>
<p>Bon, une recherche aisée dans les fichiers, c’est un bon début pour un IDE, mais ça n’est clairement pas suffisant.</p>
<p>Un des gros apports de Visual Studio Code est son système <a href="https://en.wikipedia.org/wiki/Language_Server_Protocol"><em>Language Server Protocol</em></a> (<em>LSP</em>) qui permet de partager entre les différents <em>IDE</em> l’analyse syntaxique et les aides au développement pour chaque langage de programmation. En théorie, c’est beau, mais je ne l’avais pas encore vraiment vu appliqué.</p>
<p>Eh bien, j’ai découvert que le plugin <a href="https://github.com/neoclide/coc.nvim">coc.nvim</a> permet de faire le lien entre <em>vim</em> et les différents <em>LSP</em> développés pour <em>Visual Studio Code</em> (en général, sous licence MIT par Microsoft). Le truc, c’est que, les <em>LSP</em> développés pour <em>Visual Studio Code</em> sont développés sous forme d’extensions indépendantes de <em>Visual Studio Code</em> et, du coup, <em>coc.nvim</em> propose de faire l’interface entre <em>vim</em> et les extensions utilisées par <em>Visual Studio Code</em>.</p>
<p>Oui, vous avez bien suivi, j’ai commencé par dire que j’étais perdu avec les multiples gestionnaires d’extensions de <em>vim</em> et, là, je viens de proposer un plugin qui installe ses propres extensions avec son propre gestionnaire. C’est une belle mise en abyme que j’aurais préféré éviter, mais qui fonctionne bien, ma foi !</p>
<p>Il est à noter également, que le plugin <em>coc.nvim</em> dépend de <em>nodejs</em> et <em>npm</em>, ça ajoute donc quand même pas mal de dépendances à un « simple vim ».<br>
Mais comme je travaille déjà avec ces technologies, ça ne m’a pas posé plus de problèmes que ça.</p>
<p>Bien, maintenant, j’ai un <em>vim</em> capable de chercher rapidement des fichiers dans le dossier courant et de m’aider à programmer selon les types de fichiers.</p>
<p>C’est déjà bien, mais il me manque encore un outil très important : le débugueur pour inspecter ce qui se passe dans mon code facilement.</p>
<p>J’ai travaillé un temps avec <em>Visual Studio Code</em> ouvert presque uniquement pour l’outil de debug, mais ce n’était pas vraiment pratique.</p>
<p>À force de chercher un moyen de debug du <em>nodejs</em> dans <a href="https://vimawesome.com/">vimawsome</a>, je comprends enfin que je peux utiliser l’excellent <a href="https://github.com/puremourning/vimspector">Vimspector</a> (même si ce n’est pas bien indiqué dans le README, il supporte node ≥12 avec l’adaptateur <em>vscode-node-debug2</em>).</p>
<p>Grâce au fichier <a href="https://github.com/puremourning/vimspector#background">README</a> de <em>Vimspector</em>, j’apprends que <em>Visual Studio Code</em> a aussi développé un protocol pour les débugueurs nommés <a href="https://microsoft.github.io/debug-adapter-protocol/"><em>Debug Adapter Protocol</em></a>(<em>DAP</em>) dans la même veine que <em>LSP</em>, mais dédié au debug des langages.</p>
<p>Du coup, j’ajoute encore un système de plugin dans mon IDE (en plus de celui de <em>vim</em> et de <em>coc.nvim</em>), mais à nouveau, ça marche bien et ça me permet de me familiariser avec une seule interface de debug pour plusieurs langages de programmation.</p>
<p>Il faut savoir que pour pouvoir utiliser <em>Vimspector</em>, il faut avoir une version de <em>vim</em> très récente (version au moins 8.2), compilé avec le support de python 3.6 au moins.</p>
<p>Finalement, j’ajoute encore quelques pugins à <em>vim</em> pour afficher de belles couleurs (<em>oceanic-next</em>) et utiliser les fichiers <code>.editorconfig</code> (<em>editorconfig-vim</em>) et j’ai un IDE qui me plaît beaucoup et qui me semble reste léger malgré tous ces ajouts.</p>
<p>Depuis que j’utilise <em>vim</em> plus intensément, j’ai découvert ces fonctionnalités vraiment sympa:</p>
<ul>
<li>la commande <code>:term</code> (ou <code>:terminal</code>) pour faire un <code>split</code> du buffer actuel et afficher un buffer avec un terminal. C’est très pratique pour rester avec la session <em>vim</em> ouverte avec tous les fichiers en cours de modification et pouvoir lancer quelques commandes <em>git</em>, <em>meson</em> ou <em>ninja</em>.</li>
<li>les popups (nommés <em>popovers</em> dans GTK) d’aide que <em>coc.nvim</em> peut afficher directement sous la ligne active si <em>vim</em> est assez récent</li>
<li>les raccourcis claviers très pratique comme <code>gd</code> (go to definition), <code>"+y</code> (pour copier depuis <em>vim</em> vers le presse-papier graphique)…</li>
<li>la commande <code>:ls</code> pour lister les fichiers ouverts et <code>:b 1</code> pour afficher dans le buffer courant un des fichiers ouverts</li>
<li>les onglets. En fait, les buffers et split des windows sont déjà très pratiques, mais les onglets sont aussi pratiques pour avoir plusieurs espaces de travail simultanés.
<em>Vimspector</em> en fait un très bon usage : dès qu’une session de debug est démarrée, <em>Vimspector</em> ouvre un nouvel onglet avec plusieurs buffers organisés pour le debug.</li>
<li>la commande <code>:Lexplore</code> pour ouvrir une barre d’exploration sur la gauche et la <a href="https://shapeshed.com/vim-netrw/">configuration</a> de <code>netrw</code> pour naviguer dans l’arborescence</li>
<li>le fait qu’un <em>vim</em> local peut modifier des fichiers à distance grâce à SSH et <code>netrw</code>
</li>
</ul>
<p>Enfin, comme j’ai commencé à utiliser aussi <em>vim</em> pour mes projets persos, j’ai préparé un répertoire <em>git</em> avec <a href="https://projects.adorsaz.ch/adrien/config/">mes fichiers de configuration</a> si vous voulez tous les détails.</p>
<div><a href="https://linuxfr.org/users/trim/journaux/transformer-vim-en-ide-avec-lsp-et-dap.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/122424/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/transformer-vim-en-ide-avec-lsp-et-dap#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/122424/comments.atomtag:linuxfr.org,2005:News/401272020-11-30T18:46:29+01:002020-12-02T15:16:02+01:00Résumé des nouveautés de Firefox 81 à 83Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Avec le nouveau rythme de sorties des nouvelles versions de Firefox, il est devenu difficile de suivre la rédaction. Dans cette dépêche, nous présenterons les principales nouveautés de septembre (version 81), octobre (version 82) et novembre (version 83) pour Firefox pour le bureau et pour Android.</p>
</div><ul><li>lien nᵒ 1 : <a title="https://linuxfr.org/news/firefox-80-quantum-et-daylight-sont-sortis" hreflang="fr" href="https://linuxfr.org/redirect/107245">Dernière dépêche sur Firefox 80 et Daylight</a></li><li>lien nᵒ 2 : <a title="https://www.mozilla.org/en-US/firefox/81.0/releasenotes/" hreflang="en" href="https://linuxfr.org/redirect/107246">Notes de version Firefox Desktop 81.0</a></li><li>lien nᵒ 3 : <a title="https://www.mozilla.org/en-US/firefox/android/81.0/releasenotes/" hreflang="en" href="https://linuxfr.org/redirect/107247">Notes de version Firefox Android 81.0</a></li><li>lien nᵒ 4 : <a title="https://www.mozilla.org/en-US/firefox/82.0/releasenotes/" hreflang="en" href="https://linuxfr.org/redirect/107248">Notes de version Firefox Desktop 82.0</a></li><li>lien nᵒ 5 : <a title="https://www.mozilla.org/en-US/firefox/android/82.0/releasenotes/" hreflang="en" href="https://linuxfr.org/redirect/107249">Notes de version Firefox Android 82.0</a></li><li>lien nᵒ 6 : <a title="https://www.mozilla.org/en-US/firefox/83.0/releasenotes/" hreflang="en" href="https://linuxfr.org/redirect/107325">Notes de version Firefox Desktop 83.0</a></li><li>lien nᵒ 7 : <a title="https://www.mozilla.org/en-US/firefox/android/83.0/releasenotes/" hreflang="en" href="https://linuxfr.org/redirect/107326">Notes de version Firefox Android 83.0</a></li></ul><div><h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li>
<a href="#toc-firefox-pour-bureau">Firefox pour bureau</a><ul>
<li><a href="#toc-interface-utilisateur">Interface utilisateur</a></li>
<li><a href="#toc-interactions-avec-lutilisateur">Interactions avec l’utilisateur</a></li>
<li><a href="#toc-s%C3%A9curit%C3%A9">Sécurité</a></li>
<li><a href="#toc-autres-am%C3%A9liorations">Autres améliorations</a></li>
<li><a href="#toc-interface-d%C3%A9veloppeur">Interface développeur</a></li>
</ul>
</li>
<li><a href="#toc-firefox-pour-android">Firefox pour Android</a></li>
<li><a href="#toc-%C3%80-venir">À venir</a></li>
<li><a href="#toc-autour-de-firefox">Autour de Firefox</a></li>
</ul>
<h2 id="toc-firefox-pour-bureau">Firefox pour bureau</h2>
<h3 id="toc-interface-utilisateur">Interface utilisateur</h3>
<p>Un nouveau thème est apparu à côté des traditionnels <em>Default</em>, <em>Light</em> et <em>Dark</em> ; voici venu le coloré <em>Alpenglow</em> :<br>
<img src="//img.linuxfr.org/img/68747470733a2f2f7777772e6d6f7a696c6c612e6f72672f6d656469612f696d672f66697265666f782f72656c656173656e6f7465732f6e6f74652d696d616765732f616c70656e676c6f772e706e67/alpenglow.png" alt="Aperçu du thème Alpenglow" title="Source : https://www.mozilla.org/media/img/firefox/releasenotes/note-images/alpenglow.png"></p>
<p>Le lecteur PDF intégré de Firefox a été redessiné :<br>
<img src="//img.linuxfr.org/img/68747470733a2f2f636c6f75642e61646f7273617a2e63682f696e6465782e7068702f732f715858436a434e584869336d70476d2f646f776e6c6f6164/download" alt="Le nouveau lecteur PDF" title="Source : https://cloud.adorsaz.ch/index.php/s/qXXCjCNXHi3mpGm/download"></p>
<p>Le bouton « Regarder en mode incrustation » (vidéo incrustée dans la fenêtre) du lecteur vidéo a été redessiné et déplacé pour être plus facile à découvrir et utiliser :<br>
<img src="//img.linuxfr.org/img/68747470733a2f2f636c6f75642e61646f7273617a2e63682f696e6465782e7068702f732f6661486750656d4c714e6b513559592f646f776e6c6f6164/download" alt="Nouveau bouton « Regarder en mode incrustation »" title="Source : https://cloud.adorsaz.ch/index.php/s/faHgPemLqNkQ5YY/download"></p>
<p>L’interface de recherche dans la barre d’adresse a quelque peu été modifiée :</p>
<ul>
<li>des icônes pour filtrer la recherche par marque‑pages, onglets ouverts et historique ont été ajoutées à côté des icônes des moteurs de recherche ;</li>
<li>lors d’un clic sur un moteur de recherche, les suggestions de recherche du moteur sont affichées — pour pouvoir lancer la recherche directement (l’ancien comportement), il faut appuyer sur <code>Maj</code> en même temps ;</li>
<li>quand vous saisissez votre recherche, un des éléments affichés correspond à votre moteur de recherche par défaut et permet de lancer la recherche directement.</li>
</ul>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f636c6f75642e61646f7273617a2e63682f696e6465782e7068702f732f5751526379443958794261347733662f646f776e6c6f6164/download" alt="Recherche avec filtre par onglet ouvert" title="Source : https://cloud.adorsaz.ch/index.php/s/WQRcyD9XyBa4w3f/download"></p>
<h3 id="toc-interactions-avec-lutilisateur">Interactions avec l’utilisateur</h3>
<p>Si le site visité utilise <a href="https://w3c.github.io/mediasession/"><em>Media Session</em></a>, vous pourrez utiliser les boutons multimédias de vos clavier, casque audio et de votre bureau (via le protocole <a href="https://wiki.archlinux.org/index.php/MPRIS" title="Media Player Remote Interfacing Specification">MPRIS</a>) pour contrôler la lecture des vidéos et audios du site.</p>
<p>Le mode incrustation (<em>Picture‐in‐Picture</em>) du lecteur vidéo peut avancer et reculer rapidement lors de l’utilisation des flèches du clavier. Il peut aussi ajuster le son avec les contrôleurs de volume. Les utilisateurs et utilisatrices de macOS peuvent utiliser le raccourcis <code> ⌥ </code> + <code> ⌘ </code> + <code>Maj</code> + <code>]</code> pour activer ce mode avant même de démarrer la lecture.</p>
<p>Les utilisateurs et utilisatrices aux États‑Unis peuvent faire enregistrer à Firefox les informations de leur carte de crédit pour faciliter leurs achats. C’est un peu surprenant cette nouvelle fonctionnalité, car ça semble être au détriment de la confidentialité de ces données sensibles que la facilité est donnée : par exemple, un site malveillant pourrait profiter de ce système pour siphonner les données bancaires sans même avoir une interaction de l’utilisateur via la complétion automatique. D’un côté, Firefox <a href="https://support.mozilla.org/en-US/kb/credit-card-autofill">n’enregistre pas le code CVV</a> de la carte de crédit, mais d’un autre côté, malheureusement, la seconde protection via l’authentification par le système d’exploitation est désactivée par défaut.</p>
<p>Vous pouvez utiliser maintenant directement Firefox pour ouvrir des fichiers XML, SVG et <a href="https://fr.wikipedia.org/wiki/WebP" title="Définition Wikipédia">WebP</a> lors de vos téléchargements.</p>
<p>Firefox met en œuvre AcroForm qui permet de <a href="https://support.mozilla.org/fr/kb/voir-fichiers-pdf-firefox-ou-choisir-autre-visionneuse#w_remplir-les-formulaires-dans-la-visionneuse-pdf">remplir, imprimer et enregistrer les formulaires PDF</a>.</p>
<p>La fonction de (dé)zoom de la page peut être activée avec le pincement des doigts sur les écrans tactiles Windows et les pavés tactiles macOS.</p>
<p>Lors du partage d’écran, Firefox montre de manière plus claire quel écran est partagé.</p>
<h3 id="toc-sécurité">Sécurité</h3>
<p>Une nouvelle option « HTTPS Uniquement » (<em>HTTP Only</em>) a été <a href="https://blog.mozilla.org/security/2020/11/17/firefox-83-introduces-https-only-mode/">ajoutée dans les paramètres</a>. Firefox tente par défaut d’utiliser une connexion sécurisée par HTTPS. Ça devrait marcher la plupart du temps, mais dans le cas où un site n’est disponible uniquement sans sécurité, un message d’avertissement est affiché avant d’accéder au site :</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f666670346731796c796974336a64797469316871637674622d7770656e67696e652e6e6574646e612d73736c2e636f6d2f73656375726974792f66696c65732f323032302f31312f6572726f72706167652e6a7067/errorpage.jpg" alt="Message d’avertissement pour HTTPS non-disponible" title="Source : https://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/security/files/2020/11/errorpage.jpg"></p>
<h3 id="toc-autres-améliorations">Autres améliorations</h3>
<p>Les utilisateurs de Windows voient une réduction de leur utilisation par le lecteur vidéo du processeur central, du processeur graphique et de batterie, grâce à l’activation du système <em>DirectComposition</em> qui utilise le matériel spécialisé pour le décodage vidéo.</p>
<p>Le nouveau moteur de rendu WebRender est <a href="https://wiki.mozilla.org/Platform/GFX/WebRender_Where">maintenant activé</a> pour les utilisateurs de :</p>
<ul>
<li>toutes les versions de macOS, à l’exception de la version 10.16 ;</li>
<li>toutes les versions de Windows 10, ainsi que Windows 7, 8 et 8.1 si le matériel est pris en charge.</li>
</ul>
<p><abbr title="Note des modérateurs">N. D. M. :</abbr> bien qu’il s’agisse de la dénomination employée par Mozilla sur sa page de wiki, macOS 10.16 n’existe pas officiellement ; il semble qu’il s’agisse en fait de macOS 11 <em>Big Sur</em>, lequel fut au tout début du développement numéroté comme tel, selon <em><a href="https://appleinsider.com/inside/macos-10.16">AppleInsider</a></em>.</p>
<p>Sur cette même page, vous pouvez voir le statut de la prise en charge sous GNU/Linux : en résumé, le pilote privateur de NVIDIA n’est pas géré et pour les pilotes libres de NVIDIA, d’AMD et d’Intel, si la bibliothèque Mesa est au moins en version 18.0, il y a une prise en charge expérimentale pour presque toutes les tailles d’écran.</p>
<p>Les utilisateurs autrichiens, belges et suisses de la version germanophone de Firefox, ainsi que les utilisateurs indiens de la version anglophone, voient maintenant les suggestions de Pocket dans leur page « nouvel onglet ». Si vous ne les voyez pas, vous pouvez <a href="https://support.mozilla.org/kb/hide-or-display-content-new-tab">l’ajouter</a>.</p>
<p>Pour les utilisateurs des périphériques Apple avec leurs nouveaux processeurs produits par Apple Silicon, Firefox 83 peut être utilisé sans avoir besoin de faire de manipulations particulières. En effet, cette version gère l’émulation introduite par le nouveau système Rosetta 2 d’Apple (disponible sur macOS <em>Big Sur</em>). Mozilla travaille actuellement pour activer la prise en charge native de Firefox sur ces processeurs.</p>
<h3 id="toc-interface-développeur">Interface développeur</h3>
<p>Comme d’habitude, les outils de développement de Firefox ont aussi reçu des nouveautés intéressantes :</p>
<ul>
<li>le débogueur reconnaît les fichiers <em>TypeScript</em> correctement ;</li>
<li>le débogueur peut être mis en pause dès la première ligne de script exécutée ;</li>
<li>la simulation des déficiences visuelles dans le panneau d’accessibilité est <a href="https://www.mozilla.org/en-US/firefox/81.0/releasenotes/">plus précise</a>, la simulation <em>achromatopsia</em> a été ajoutée et les simulations <em>protanomalie</em>, <em>deutéranomalie</em> et <em>tritanomalie</em> ont été retirées ;</li>
<li>l’analyseur des requêtes réseau affiche maintenant également les <a href="https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events">événements envoyés par les serveurs</a> ;</li>
<li>les barres de défilement sont <a href="https://developer.mozilla.org/fr/docs/Tools/Page_Inspector/How_to/Debug_Scrollable_Overflow">plus faciles à trouver dans l’inspecteur et peuvent être déboguées</a>.</li>
</ul>
<h2 id="toc-firefox-pour-android">Firefox pour Android</h2>
<p>Firefox pour Android a repris un développement très actif depuis que sa nouvelle version <em>Daylight</em> a été officiellement déployée :</p>
<ul>
<li>une page « Téléchargements » a été ajoutée ;</li>
<li>la recherche est améliorée ;</li>
<li>les sites les plus fréquentés sont affichés au sommet de la page « nouvel onglet » — c’est en effet très utile, car les « Collections » ne sont pas un moyen d’organiser ses favoris, comme je le croyais au début : une collection enregistre le contenu de la page dans un cache (mais ce n'est pas très clair pour le <a href="https://github.com/mozilla-mobile/fenix/issues/10417">comment</a> et le <a href="https://github.com/mozilla-mobile/fenix/issues/11506">pourquoi</a>) ; lors d’un clic sur un onglet dans une collection, la version en cache est affichée, si vous avez mis votre lecteur de flux RSS, LinuxFr.org ou n’importe quel site dont le contenu est dynamique comme moi, il vaut mieux les enlever des collections puisque ça force à devoir rafraîchir la page à chaque fois ;</li>
<li>les onglets peuvent être fermés automatiquement ;</li>
<li>si vous glissez horizontalement votre doigt sur la barre d’adresse, vous pouvez naviguer entre vos onglets ouverts ;</li>
<li>les mots de passes peuvent être migrés pour les utilisateurs qui ont activé le mot de passe principal ;</li>
<li>une page « Onglets récemment fermés » a été ajoutée pour rouvrir un onglet accidentellement fermé, elle est accessible depuis le menu hamburger, à partir de la liste des onglets et aussi dans la page « Historique » ;</li>
<li>les cookies des sites non visités depuis plus de trente jours sont automatiquement supprimés ;</li>
<li>l’ouverture de liens depuis des applications tierces a été améliorée.</li>
</ul>
<p><em>Daylight</em> active les extensions Firefox par lot, les extensions suivantes sont nouvellement disponibles :</p>
<ul>
<li>
<a href="https://addons.mozilla.org/fr/firefox/addon/video-background-play-fix/">Video Background Play Fix</a> : pour empêcher YouTube d’arrêter automatiquement la lecture vidéo au bout de quelque temps et empêcher Viméo d’arrêter la lecture vidéo à la sortie du plein écran ;</li>
<li>
<a href="https://addons.mozilla.org/fr/firefox/addon/google-search-fixer/">Google Search Fixer</a>, qui change l’identifiant du navigateur pour avoir la même expérience utilisateur de Google que sous Chrome ;</li>
<li>FoxyProxy, Bitwarden, AdGuard AdBlocker, Tomato Clock, LeechBlock NG, Web Archives et Ghostery.</li>
</ul>
<h2 id="toc-À-venir">À venir</h2>
<ul>
<li>le nouvel outil Warp permettant d’améliorer le compilateur à la volée (<em>Just In Time</em>) du moteur JavaScript maison SpiderMonkey <a href="//linuxfr.org/users/glandos/journaux/warp-les-performances-de-firefox-s-ameliorent">semblait prêt</a> pour Firefox 83, mais n’est pas apparu dans les notes de version ;</li>
<li>la gestion des <a href="https://blog.mozilla.org/addons/2020/11/20/extensions-in-firefox-84/">autorisations optionnelles</a> pour les extensions.</li>
</ul>
<h2 id="toc-autour-de-firefox">Autour de Firefox</h2>
<ul>
<li>Servo, le prototype de navigateur que Mozilla Research avait créé pour faire des expérimentations, est <a href="//linuxfr.org/users/antistress/liens/mozilla-punts-servo-web-engine-development-to-the-linux-foundation-phoronix">transmis à la Linux Foundation</a> ;</li>
<li>le navigateur Tor pour Android <a href="//linuxfr.org/users/antistress/liens/the-new-tor-browser-for-android-v-alpha-is-based-on-the-new-firefox-code-base">utilise aussi <em>DayLight</em></a> ;</li>
<li>F‑Droid livre Firefox Daylight sous le nom de <a href="//linuxfr.org/users/antistress/liens/firefox-81-pour-android-maintenant-dans-f-droid-firefoxpreview">Fennec</a>.</li>
</ul>
</div><div><a href="https://linuxfr.org/news/resume-des-nouveautes-de-firefox-81-a-83.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/122173/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/resume-des-nouveautes-de-firefox-81-a-83#comments">ouvrir dans le navigateur</a>
</p>
Adrien DorsazDavy DefaudYves BourguignonNils RatusznikBenoît Sibaudhttps://linuxfr.org/nodes/122173/comments.atomtag:linuxfr.org,2005:Diary/394692020-11-29T19:55:29+01:002020-11-29T19:55:29+01:00Extension Google Direct pour FirefoxLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Cher journal,</p>
<p>Je ne sais pas si tu t'en souviens, mais il y a <a href="//linuxfr.org/users/trim/journaux/mes-activites-open-sources-libres-recentes">environ 2 ans</a>, je t'ai parlé d'un petit projet d'extension Firefox que j'avais lancé et que je considérais mort né à cause des nouvels APIs de Firefox Quantum.</p>
<p>Eh bien, au printemps dernier, j'ai appris que j'avais tort car l'extension, restée au status expérimental, était en réalité encore fonctionnel.</p>
<p>Merci à <a href="https://github.com/chocolateboy">chocolateboy</a> de m'avoir montré que je m'étais trompé et que l'idée du projet était encore <a href="https://github.com/Trim/avoid-google-search-redirects/pull/4">fonctionnelle à quelques corrections près</a>.</p>
<p>Suite à sa reprise du code, je lui avais proposé de mettre mon extension en mode "non-maintenu" et de rediriger les utilisateurs vers son fork <a href="https://addons.mozilla.org/en-US/firefox/addon/google-direct/">Google Direct</a>. Mea culpa, il s'est déjà passé presque 8 mois depuis que j'ai écris ce commentaire.</p>
<p>L'idée de feu <em>Avoid Google Search Redirects</em> et de son remplaçant <em>Google Direct</em> est de modifier le code javascript de Google pour forcer Google Search à conserver les liens directs vers les sites trouvés. Sans <em>Google Direct</em>, les liens passent tous par une URL de Google avant d'être redirigé vers le site voulu.</p>
<table>
<thead>
<tr>
<th>Sans Google Direct</th>
<th>Avec Google Direct</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="//img.linuxfr.org/img/68747470733a2f2f6164646f6e732e63646e2e6d6f7a696c6c612e6e65742f757365722d6d656469612f70726576696577732f7468756d62732f3233362f3233363034372e706e673f6d6f6469666965643d31353836393639343735/236047.png?modified=1586969475" alt="Capture d'écran sans Google Direct" title="Source : https://addons.cdn.mozilla.net/user-media/previews/thumbs/236/236047.png?modified=1586969475"></td>
<td><img src="//img.linuxfr.org/img/68747470733a2f2f6164646f6e732e63646e2e6d6f7a696c6c612e6e65742f757365722d6d656469612f70726576696577732f7468756d62732f3233362f3233363034382e706e673f6d6f6469666965643d31353836393639343830/236048.png?modified=1586969480" alt="Capture d'écran avec Google Direct" title="Source : https://addons.cdn.mozilla.net/user-media/previews/thumbs/236/236048.png?modified=1586969480"></td>
</tr>
</tbody>
</table>
<p>Le résultat est sans appel, votre vie privée s'en portera mieux :)</p>
<div><a href="https://linuxfr.org/users/trim/journaux/extension-google-direct-pour-firefox.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/122390/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/extension-google-direct-pour-firefox#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/122390/comments.atomtag:linuxfr.org,2005:Diary/393652020-09-24T20:42:38+02:002020-09-24T20:42:38+02:00LinuxFr avec DockerLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Salut Nal !</p>
<p>Je t'écris, parce que j'ai essayé de faire en sorte que n'importe quel de tes auteurs et/ou lecteurs puisse tenter de te hacker.</p>
<p>Bruno a accepté 3 Pull Request cette semaine qui permettent aux développeurs et autodidactes de tenter de monter l'infrastructure de LinuxFr sur sa machine perso. Les détails sont donnés en anglais sur le <a href="https://github.com/linuxfrorg/linuxfr.org/blob/master/Docker.md">répertoire git</a>.</p>
<p>Pour résumer en français, il faut:</p>
<ol>
<li>Installer <a href="https://docs.docker.com/engine/install/">Docker</a> et l'outil <a href="https://docs.docker.com/compose/install/">docker-compose</a> et penser à ajouter son utilisateur au groupe <code>docker</code> pour pouvoir travailler sans <code>sudo</code>.</li>
<li>Ajouter la ligne <code>127.0.0.1 dlfp.lo image.dlfp.lo</code> dans le fichier <code>/etc/hosts</code> (ou équivalent).</li>
<li>Télécharger les <a href="https://github.com/linuxfrorg/linuxfr.org/blob/master/Docker.md">sources de LinuxFr.org</a> et libérer le port 80 s'il est actuellement utilisé.</li>
<li>Exécuter dans un premier terminal
<code>docker-compose up</code> (à la racine du code source)</li>
<li>
<p>Attendre que docker-compose finisse son travail et que les containers de mariadb affichent les lignes:</p>
<blockquote>
<p>database-test_1 | 2020-09-21 16:03:12 140126029907968 [Note] mysqld: ready for connections.</p>
<p>database-test_1 | Version: '10.1.46-MariaDB-1~bionic' socket: '/var/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution</p>
<p>database_1 | 2020-09-21 16:03:12 139820938893312 [Note] mysqld: ready for connections.</p>
<p>database_1 | Version: '10.1.46-MariaDB-1~bionic' socket: '/var/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution</p>
</blockquote>
</li>
<li><p>Dans un second terminal (aussi à la racine du code source), il faut préparer la base de donnée avec:<br>
<code>docker-compose run linuxfr.org bin/rails db:setup</code></p></li>
<li><p>Utiliser son navigateur préféré pour visiter l'adresse <a href="http://dlfp.lo">http://dlfp.lo</a> et se connecter avec le compte <code>admin</code> et le mot de passe <code>admin</code></p></li>
<li><p>Hacker les sources de LinuxFr.org et voire les changements arriver dans votre navigateur avec un simple rafraîchissement de la page :-)</p></li>
</ol>
<p>C'est une première version, ça tourne chez moi et on récupère volontiers des retours et/ou améliorations sur ce déploiement.</p>
<p>Dans les manques, il y a le système des fichiers Epub qui ne sont pas disponible et l'écriture de formule Latex (il y a du code à adapter). De plus, la webconsole Rails ne s'affiche pas en cas de bug. Par contre, les tribunes et le service de cache d'image doivent fonctionner.</p>
<p>À noter, que le fichier <code>docker-compose.yaml</code> fait utiliser le port 80 à nginx pour monter l'infrastructure, parce que le code de LinuxFr ne permet pas de préciser le port pour le lien sur les images. Vous pouvez donc modifier le port de ngninx, avec cette modification:</p>
<pre><code class="diff"> nginx:
image: nginx:stable
env_file:
- deployment/default.env
volumes:
- ./deployment/nginx/templates:/etc/nginx/templates
- ./public/fonts:/var/linuxfr/fonts
- data-uploads:/var/linuxfr/uploads
ports:
<span class="gd">- - "80:80"</span>
<span class="gi">+ - "3000:80"</span>
depends_on:
- linuxfr.org
- linuxfr-board
- linuxfr-img</code></pre>
<p>Ensuite, il faut que le service qui utilise le port 80 redirige les requêtes pour le domaine <code>dlfp.lo</code> et <code>image.dlfp.lo</code> vers le nginx (et donc dans l'exemple, le port 3000).</p>
<p>Bref, cher lecteur, si tu as un peu de temps ce prochain trolldi ou ce weekend, les retours seront volontiers lus et, si possible, pris en compte :-)</p>
<div><a href="https://linuxfr.org/users/trim/journaux/linuxfr-avec-docker.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/121710/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/trim/journaux/linuxfr-avec-docker#comments">ouvrir dans le navigateur</a>
</p>
Adrien Dorsazhttps://linuxfr.org/nodes/121710/comments.atom