<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Blog - Simon Vieille</title>
        <link>https://www.deblan.io/</link>
        <description>DevOp animé par la culture du libre et du hacking</description>
        <language>fr</language>

                    <item>
                <title><![CDATA[De Xorg à Wayland, de i3 à sway]]></title>
                <link href="https://www.deblan.fr/post/674/xorg-wayland-i3-sway" type="text/html">https://www.deblan.fr/post/674/xorg-wayland-i3-sway</link>
                                    <link href="gemini://deblan.fr/posts/674.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Quelques jours après avoir mise en ligne la <a href="https://www.deblan.fr/post/673/nouvelle-infrastructure-hebergement">nouvelle infrastructure structure d'hébergement</a>, mon Dell XPS a rendu l'âme du jour au lendemain. J’ai dû rapidement commander une nouvelle machine et j'ai choisi de me tourner sur le modèle <a href="https://www.boulanger.com/ref/1219212">ASUS Creator</a>.</p>

<p>Pour profiter pleinement de la carte Nvidia, j'ai dû basculer sur <a href="https://fr.wikipedia.org/wiki/Wayland">Wayland</a> et abandonner <a href="https://fr.wikipedia.org/wiki/X.Org">Xorg</a>. En effet, la sortie HDMI ne fonctionnait pas sur Xorg.
Sans exagérer, cette migration a été loin d'être simple. Entre les limitations de certains outils sous Wayland, les ajustements nécessaires pour Sway et les incompatibilités avec mes anciens scripts, j'ai dû revoir une bonne partie de mon environnement. Si ce changement n'avait pas été imposé par le matériel, je ne l'aurais probablement pas envisagé si tôt.</p>

<p>Le changement majeur est le gestionnaire de fenêtre. J'ai utilisé <a href="https://i3wm.org/">i3</a> pendant un peu plus de 10 ans et je dois maintenant composer avec <a href="https://github.com/swaywm/sway">Sway</a>. Si la majorité de la configuration est rétrocompatible, des ajustements ont été nécessaires.</p>

<p>J'avais développé des blocks pour <a href="https://github.com/vivien/i3blocks">i3blocks</a>, l'outil qui permet d'afficher des informations sous forme de barres. J'avais partagé ces développements dans l'article « <strong><a href="https://www.deblan.fr/post/627/blocs-pour-i3wm">Blocs pour i3wm</a></strong> ». J'utilise à présent <a href="https://github.com/alexays/waybar">Waybar</a> et tous ces blocks ont dû être réécrits. L'ensemble du code source est bien sûr disponible sur ma forge : <a href="https://gitnet.fr/deblan/waybar-indicators">deblan/waybar-indicators</a>.</p>

<p>L'année passée, je publiais un <a href="https://www.deblan.fr/post/667/gestionnaire-de-fonds-decran-pour-i3">gestionnaire de fonds d'écran pour i3</a> qui ne fonctionne plus avec Wayland. J'ai donc également réalisé un fork pour faire exactement la même chose mais en s'appuyant sur <a href="https://codeberg.org/LGFae/awww">awww</a> qui gère l'affichage des images. Les gros changements sont donc apportés par cette dépendance qui apporte quelques animations !</p>

<p><video controls src="https://deblan.gitnet.page/sway-wallpaper-manager/demo.webm" type="video/webm"></video></p>

<p>Le code source est également disponible sur ma forge avec en prime des paquets pour <strong>Debian</strong> : <a href="https://gitnet.fr/deblan/sway-wallpaper-manager">deblan/sway-wallpaper-manager</a>.</p>

<p>Cette perte soudaine de mon laptop m'a finalement permis de valider mon mécanisme de sauvegarde. J'ai quand même identifié quelques lacunes qui sont maintenant corrigées.</p>

<p>Tout est bien qui finit bien !</p>

<p>Avec un peu de recul, ce passage forcé à Wayland n'est pas si mal. Tout n'est pas encore parfait et certains outils demandent encore des ajustements. Les environnements comme Gnome ou KDE abandonnant progressivement Xorg, cette migration aurait de toute façon fini par s'imposer tôt ou tard.</p>
]]></description>
                <guid isPermaLink="false">674</guid>
                <pubDate>Fri, 17 Apr 2026 18:00:00 +0200</pubDate>
                                    <category><![CDATA[Informatique]]></category>
                            </item>
                    <item>
                <title><![CDATA[Nouvelle infrastructure d'hébergement]]></title>
                <link href="https://www.deblan.fr/post/673/nouvelle-infrastructure-hebergement" type="text/html">https://www.deblan.fr/post/673/nouvelle-infrastructure-hebergement</link>
                                    <link href="gemini://deblan.fr/posts/673.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Pour celles et ceux qui ne connaissent pas mon histoire : j’ai commencé à héberger du contenu chez moi dès 2008. Très inspiré par la conférence « <a href="https://www.youtube.com/watch?v=AoRGoQ76PK8">Internet libre, ou Minitel 2.0</a> » de Benjamin Bayart, j’ai fait le choix d’héberger mes données à la maison afin de participer à un vrai Internet, plus libre mais aussi pour apprendre et mieux protéger mes données personnelles, et pour partager cette vision avec les curieux·ses qui veulent bien m’écouter.</p>

<p>Quelques années plus tard, le 25 août 2015, j’installais Debian (un système d’exploitation) sur le serveur principal de mon infrastructure actuelle. C’est lui qui supportait jusqu'à aujourd’hui la majorité des services que j’utilise et que je vous partage : hébergement de sites web, agrégateur de flux RSS, DNS, emails, etc.</p>

<p>Pendant ces 10 années, le serveur en a vu de toutes les couleurs :</p>

<ul>
<li>de grosses mises à jour</li>
<li>un grand nombre de disques mécaniques moins résistants que lui</li>
<li>des attaques informatiques en veux-tu en voilà</li>
<li>… et des crawlers d’IA qui consomment pas mal de ressources</li>
</ul>

<p>Malgré tout ça, il est a toujours été debout et a continué de faire le taf qu’on lui demande.</p>

<p>Mais il est temps pour lui de partir en retraite : il arrive à bout de souffle et ne me permet plus aujourd’hui de supporter correctement la charge. Je dois garantir la sécurité de nos données ainsi que la continuité des services, pour vous comme pour moi.</p>

<p>J'ai donc commandé et installé un NucBox K12 de chez GMKtec avec 32Go de RAM et 2To de stockage hors backup. Pour cette nouvelle machine, je me suis orienté vers la virtualisation avec <a href="https://www.proxmox.com/en/">Proxmox VE</a>. Cela me permet d'isoler les services et gérer les ressources plus finement.<br />
Dès qu'on aura à nouveau des prix décents pour la RAM, je pense que je doublerai la mémoire pour être un peu plus à l'aise car la virtualisation consomme vraiment plus de ressources !</p>

<p><img src="/uploads/content/673/1000006395.jpg" alt="NucBox K12 GMKtec" /></p>

<p>Du coté des services web, j'ai opéré quelques changements importants. En effet, j'ai décidé de remplacer mon reverse proxy <a href="https://nginx.org/en/">Nginx</a> par <a href="https://caddyserver.com/">Caddy</a>. La gestion des certificats est vraiment facilitée et la configuration est globalement plus simple même si certains concepts m'échappent encore !<br />
Derrière Caddy, j'ai toujours le bon vieux <a href="https://httpd.apache.org/">Apache</a> pour servire la majorité des sites web non conteuneurisés. En revanche, les services qui reposent sur <a href="https://www.docker.com/">Docker</a> sont gérés par <a href="https://doc.traefik.io/traefik/">Traefik</a> qui s'occupe de router le trafic.</p>

<p>Pour le mail, j'utilise la même stack logicielle (<a href="https://www.postfix.org/">Postfix</a>, <a href="https://dovecot.org/">Dovecot</a> et compagnie) mais via <a href="https://mailcow.email/">Mailcow</a>. C'est franchement beaucoup plus simple à maintenir et je peux beaucoup mieux gérer les comptes. En effet, ils étaient liés aux comptes unix du serveur alors que maintenant non. Tout est indépendant et je la possibilité d'intégrer des mécanismes d'authentification plus complets, comme l'authentification unifiée et le MFA.</p>

<p>Cette migration m'a conduit à revoir une partie de ma supervision. J'utilisais encore une instance <a href="https://www.zabbix.com/">Zabbix</a> qui fonctionnait à moitié, et j'avais également un peu de monitoring avec <a href="https://mmonit.com/monit/">Monit</a>. J'ai tout dégagé pour ne conserver que <a href="https://uptimekuma.org/">Uptime Kuma</a> et une instance <a href="https://www.beszel.dev/">Beszel</a>.</p>

<p>La nouvelle infra est en production depuis le 14 mars et je pense avoir migré la totalité des outils. Il n'est pas impossible que des choses aient été oubliées donc n'hésitez pas à me faire des retours !</p>

<p>Je suis convaincu que l’auto-hébergement est essentiel, aujourd’hui plus que jamais. Je vous encourage vivement à vous y intéresser afin de reprendre le contrôle de vos données et de vos outils.</p>
]]></description>
                <guid isPermaLink="false">673</guid>
                <pubDate>Wed, 25 Mar 2026 12:15:00 +0100</pubDate>
                                    <category><![CDATA[Informatique]]></category>
                            </item>
                    <item>
                <title><![CDATA[Streaming Owncast et Twitch]]></title>
                <link href="https://www.deblan.fr/post/672/streaming-owncast-et-twitch" type="text/html">https://www.deblan.fr/post/672/streaming-owncast-et-twitch</link>
                                    <link href="gemini://deblan.fr/posts/672.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Il y a quelques années de cela, j'avais commencé à streamer des sessions de développement sur la plateforme <strong>livecoding.tv</strong> (maintenant disparue). À l'image de <strong>Twitch</strong> pour le jeu, livecoding.tv offrait aux développeurs et aux développeuses un endroit où vous pouviez découvrir de nombreux projets en pleine création ! C'était franchement super.</p>

<p>Le streaming m'a toujours donné envie, mais je souhaite le plus possible garder une forme d'indépendance dans la manière de publier le contenu. Quand j'ai découvert le projet <strong><a href="https://owncast.online/">Owncast</a></strong>, un outil écrit en Go qui permet de se faire une plateforme de streaming auto-hébergée, je me suis empressé de l'installer et de l'utiliser. J'ai donc réssucité <a href="https://deblan.tv/">deblan.tv</a> et j'ai lancé quelques streams avec les VOD accessibles sur <a href="https://peertube.mesnumeriques.fr/c/vod__deblantv/videos?s=1%3D">Peertube</a>.</p>

<p><strong>Owncast</strong> fonctionne franchement très bien ! C'est rapide à installer et les fonctionnalités sont bien pensées et très pratiques. On dispose d'une <a href="https://owncast.online/thirdparty/apis/">API</a> pour intéragir sur le stream et le chat, et des mécanismes de webhook sont disponibles quand des évènements sont déclanchés sur le chat (un utilisateur se connecte, un message est envoyé, etc.). C'est d'ailleurs ce qui m'a lancé dans un draft de projet pour intégrer le chat dans mes streams.</p>

<p>À l'instar de <strong>Peertube</strong>, <strong>Owncast</strong> est un outil de niche et vous ne pouvez pas faire de venir des gens d'eux même. Enfin si, il y a <a href="https://owncast.directory/">l'annuaire de Owncast</a> qui permet de découvrir des instances Owncast qui désirent y apparaître. Mais cela reste limité aux quelques personnes qui connaissent.</p>

<p>Je me suis donc demandé s'il était possible de streamer à la fois sur Owncast et sur d'autres plateformes comme Twitch en même temps, sans être dépendant d'une entreprise américaine et sans dépenser un seul euro. Après quelques recherches, je n'ai rien trouvé... Du moment où vous désirez streamer sur une plateforme "custom", vous devez sortir la carte bleu. 
Et puis je suis tombé sur <a href="https://github.com/wimpysworld/stream-sprout">stream-sprout</a>, un script en bash qui prend en entrée un fichier de config en YAML et qui restream via FFMPEG sur les plateformes que vous désirez. C'est simple, ça marche du feu de dieu et c'est exactement ce que je cherchais.</p>

<p>Je peux donc maintenant streamer sur Owncast et Twitch en même temps. Et si je le désirais, je pourrais également ajouter Youtube et d'autres plateformes de diffusion. 
Il me manque à présent de quoi afficher simultanément le chat de Owncast et de Twitch. Et ça tombe bien, car j'avais déjà un début de projet pour Owncast, il fallait maintenant y intégrer Twitch.</p>

<p>J'ai donc fais quelques recherches sur l'API Twitch pour intéragir avec le chat...et j'ai finalement opté pour un client IRC qui semble être la seule bonne méthode et nettement moins complexe qu'une API.</p>

<p>Je vous présente donc <a href="https://gitnet.fr/deblan/owncast-webhook">Owncast Webhook</a> ! Son fonctionnement est assez simple. Il intègre une API pour gérer le webhook d'Owncast quand un message est envoyé sur le chat. Le client IRC se connecte à la chaîne Twitch et récupère les messages envoyés. Enfin, il expose une page web pour présenter les messages qui ont été réceptionnés. C'est cette page que vous intégrez à <a href="https://obsproject.com/fr/">OBS</a>.</p>

<p>Si vous êtes sur Linux, vous pouvez télécharger <a href="https://gitnet.fr/deblan/owncast-webhook/releases/tag/v1.0.0">la dernière publication</a>, sinon il faudra <a href="https://gitnet.fr/deblan/owncast-webhook#from-source">compiler le projet vous même</a>. Une fois le binaire à disposition, il restera à faire quelques petites configurations qui sont documentées dans le projet.</p>

<p>Une fois la configuration terminée, vous pourrez afficher les messages en provenance de Owncast, Twitch ou les deux !</p>

<p>Le projet est libre donc n'hésitez pas à le hacker et si vous avez envie de nouvelles fonctionnalités ou si vous rencontrez un bug, vous pouvez <a href="https://gitnet.fr/deblan/owncast-webhook/issues">ouvrir un ticket</a> !</p>

<p>De mon coté, je vais réfléchir à des sujets et essayer de trouver du temps pour streamer des choses !</p>
]]></description>
                <guid isPermaLink="false">672</guid>
                <pubDate>Sat, 30 Aug 2025 13:37:00 +0200</pubDate>
                                    <category><![CDATA[Informatique]]></category>
                                    <category><![CDATA[Logiciel libre]]></category>
                                    <category><![CDATA[Projets personnels]]></category>
                            </item>
                    <item>
                <title><![CDATA[Changements importants avec Custom Menu 5]]></title>
                <link href="https://www.deblan.fr/post/671/changements-importants-avec-custom-menu-5" type="text/html">https://www.deblan.fr/post/671/changements-importants-avec-custom-menu-5</link>
                                    <link href="gemini://deblan.fr/posts/671.gmi" type="text/gemini" />
                                <description><![CDATA[<p><strong><a href="https://deblan.gitnet.page/side_menu_doc/">Custom menu</a></strong> est un projet que <a href="{{url://blog_menu_post?post=581&amp;slug=application-nextcloud-nouvel-emplacement-pour-le-menu}}">j'ai lancé il y a de nombreuses années</a>. Il a été initialement créé pour répondre à mes besoins personnels concernant Nextcloud et j'ai décidé de le publier afin que toustes les utilisateurs de Nextcloud puissent en bénéficier.</p>

<p>Le projet a évolué en continue depuis ces 5 dernières années, avec de nouvelles fonctionnalités ajoutées au fil du temps et des corrections de bugs. À l'époque, je découvrais tout juste le framework javascript Vue 2 et j'ai fais des choix qui n'étaient pas toujours très bons et/ou bien réalisés.</p>

<p>Cela a entraîné une dette technique lourde et il devenait plus compliqué de faire évoluer l'application. J'ai donc entrepris une réécriture du projet et j'ai migrer les composants de Vue 2 à Vue 3.</p>

<p>Après de nombreuses heures de travail, je viens tout juste de publier <a href="https://gitnet.fr/deblan/side_menu/releases/tag/v5.0.0">la version 5.0</a> qui marque donc un nouveau tournant pour le projet. J'aimerais que ces changements puissent amorcer davantage de contributions, certes nombreuses sur les traductions et sur les rapports de bug mais quasi inexistantes sur le code source.</p>

<p>En ce qui concerne les fonctionnalités, j'ai décidé de maintenir la compatibilité avec les précédentes versions. Par conséquent, il n’y a pas de nouvelles fonctionnalités et toutes les configurations existantes continueront de fonctionner comme avant. Cependant les interfaces pour configurer l'application ont beaucoup changé et permettront aux administrateurices d'êtres plus à l'aise.</p>

<p>Le support évolue également avec cette nouvelle version. La 3.x n'est plus supportée et la version 4.x ne bénéficiera que de correctifs.</p>

<p>Si le projet vous intéresse, voici quelques liens :</p>

<ul>
<li><a href="https://apps.nextcloud.com/apps/side_menu">Custom Menu dans le magasin d'applications Nextcloud</a></li>
<li><a href="https://gitnet.fr/deblan/side_menu">Le code source du projet</a></li>
<li><a href="https://deblan.gitnet.page/side_menu_doc/">Site web de la documentation</a></li>
</ul>
]]></description>
                <guid isPermaLink="false">671</guid>
                <pubDate>Wed, 16 Apr 2025 21:38:00 +0200</pubDate>
                                    <category><![CDATA[Développement]]></category>
                                    <category><![CDATA[Logiciel libre]]></category>
                                    <category><![CDATA[Projets personnels]]></category>
                            </item>
                    <item>
                <title><![CDATA[Quand la loi « Narcotrafic » devient la loi « Roue libre »]]></title>
                <link href="https://www.deblan.fr/post/670/quand-la-loi-narcotrafic-devient-la-loi-roue-libre" type="text/html">https://www.deblan.fr/post/670/quand-la-loi-narcotrafic-devient-la-loi-roue-libre</link>
                                    <link href="gemini://deblan.fr/posts/670.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Le Sénat a débuté hier la discussion en hémicycle de la proposition de loi dite "Narcotrafic", dont les mesures de surveillance et répressives nous inquiètent particulièrement, à La Quadrature comme avec les autres organisations de l'Observatoire des Libertés et du Numérique.</p>
]]></description>
                <guid isPermaLink="false">670</guid>
                <pubDate>Wed, 29 Jan 2025 23:52:00 +0100</pubDate>
                                    <category><![CDATA[Contenu externe]]></category>
                                    <category><![CDATA[Politique]]></category>
                            </item>
                    <item>
                <title><![CDATA[Quelques suggestions pour vous aider à décrocher un entretien]]></title>
                <link href="https://www.deblan.fr/post/669/quelques-suggestions-pour-vous-aider-a-decrocher-un-entretien" type="text/html">https://www.deblan.fr/post/669/quelques-suggestions-pour-vous-aider-a-decrocher-un-entretien</link>
                                    <link href="gemini://deblan.fr/posts/669.gmi" type="text/gemini" />
                                <description><![CDATA[<p><em>Cet article était déstiné à être publié sur LinkedIn mais parce qu'il est trop long et qu'il a sa place sur mon blog, le voici.</em></p>

<p><strong>Si vous êtes une développeuse ou un développeur à la recherche d'un stage, d'une alternance ou d'un poste, je souhaite vous partager quelques suggestions qui, selon moi, pourraient vous aider à décrocher un entretien.</strong></p>

<p>Avant toute chose, <strong>je suis conscient de la difficulté à trouver un emploi aujourd'hui</strong>. Bien que l'informatique soit au cœur de nombreuses entreprises, le marché est extrêmement concurrentiel, mêlé à des difficultés pour ces entreprises à engager des moyens à la hauteur de leurs ambitions, ainsi que des attentes des candidats et candidates.</p>

<p>J'ai vécu l'alternance et j'en suis un fervent partisan. J'ai également eu l'immense privilège d'intervenir à l'université pour transmettre toutes les compétences qu'il m'était possible de partager. Du stage de découverte de 3ème à celui d'un cycle d'études supérieures, <strong>les entreprises ont la responsabilité d'agir en tant qu'acteurs locaux</strong>, permettant aux étudiants et étudiantes d'apprendre et de se préparer au mieux au monde professionnel.</p>

<p>Ceci étant dit, j'ai eu l'occasion de lire des articles et des posts où les auteurs et autrices exprimaient leur exaspération face au comportement rigide de certains recruteurs et recruteuses, notamment sur la question de l'expérience. Le manque d'expérience peut en effet poser un problème selon le contexte du recrutement. On peut aussi lire que des candidats sont parfois écartés parce qu'ils ne correspondent pas exactement aux critères du poste, sans que leur capacité d'adaptation soit prise en compte. Je pense aussi que c'est une réalité qu'il serait injuste de dissimuler.</p>

<p>Lorsque je suis en phase de recrutement, <strong>je dois répondre à des contraintes qui orientent et conditionnent mes choix</strong> : les besoins à court, moyen et long terme de mon équipe et de l'entreprise, l'orientation technique des projets, l'enveloppe budgétaire allouée, etc. Je ne suis pas un RH. J'encadre une équipe de personnes dont le métier est de concevoir et écrire du code, des personnes motivées et curieuses qui ont envie d'apprendre chaque jour. <strong>Cette motivation qui nous anime n'est pas forcément corrélée à l'expérience</strong>. Et c'est grâce à cela que vous pourriez vous démarquer. Voici une liste d'actions que vous pouvez entreprendre et qui, indépendamment de votre expérience, pourraient plaire aux recruteurs et recruteuses de mon style.</p>

<p><strong>Vous cherchez à travailler dans l'IT ? Montrez que vous faites partie de ce monde</strong>. Vous pouvez par exemple acheter un nom de domaine et vous créer une adresse mail à votre image. Cela peut paraître anodin, mais cela présente mieux qu’un format du type nom.prenom.1234@outlook.fr. Pensez également à la veille technologique que vous pouvez mettre en avant sur votre CV, d'autant plus que la sphère tech française est extrêmement riche !</p>

<p><strong>Vous travaillez sur des projets personnels dont le code pourrait être publié ? Publiez-le !</strong> Bien qu'il soit légitime d'avoir des craintes d'être jugé, il y a un réel intérêt pour les personnes qui recrutent de la manière dont je le fais. Aussi expérimentés que nous soyons, nous avons toutes et tous commencé par un Hello World et continuons toujours à découvrir des technologies que nous ne maîtriserons peut-être jamais. Développer et publier, c'est bon pour la santé !</p>

<p><strong>Vous cherchez à intégrer une équipe qui fait du web ? Créez-vous un site personnel.</strong> Même s'il n'y a qu'une seule page, vous aurez l'occasion de mettre en avant vos compétences, d'exploiter vos connaissances et de les présenter dans un projet concret.</p>

<p>Pour terminer, je vous recommande de <strong>ne pas évaluer vos compétences</strong>, quelle que soit la méthode choisie. Privilégiez plutôt une description détaillée des langages et des outils que vous avez utilisés, ainsi que de ceux avec lesquels vous souhaiteriez travailler.</p>

<p>La recherche d'un stage, d'une alternance ou d'un poste dans le domaine du développement demande persévérance et une approche proactive. Dans un marché concurrentiel, <strong>se démarquer passe souvent par des initiatives personnelles et par la mise en avant de sa passion</strong> pour le métier. Que ce soit à travers des projets personnels, la création de son propre site web ou le partage de son code, ces efforts peuvent faire la différence aux yeux des recruteurs et recruteuses. La motivation et la volonté d’apprendre sont des qualités précieuses, qui, bien mises en avant, peuvent ouvrir de nombreuses portes, même lorsque l'expérience fait défaut. Rappelez-vous que chaque opportunité est une chance de montrer qui vous êtes et ce que vous pouvez apporter à une équipe.</p>
]]></description>
                <guid isPermaLink="false">669</guid>
                <pubDate>Tue, 22 Oct 2024 11:45:00 +0200</pubDate>
                                    <category><![CDATA[Informatique]]></category>
                            </item>
                    <item>
                <title><![CDATA[Synchronisation de clients FreeTube]]></title>
                <link href="https://www.deblan.fr/post/668/synchronisation-de-clients-freetube" type="text/html">https://www.deblan.fr/post/668/synchronisation-de-clients-freetube</link>
                                    <link href="gemini://deblan.fr/posts/668.gmi" type="text/gemini" />
                                <description><![CDATA[<p><a href="https://freetubeapp.io/">FreeTube</a> est un client lourd pour accéder aux contenus de YouTube. La protection de la vie privée est un élément clé de la conception de FreeTube. Il permet de lire les vidéos sans la publicité, de gérer ses abonnements, etc.</p>

<p>Contraitement à YouTube, il n'est pas nécesssaire d'avoir un compte pour gérer ses abonnements. Toutes les données sont stockées localement dans des fichiers textes (profils et abonnements, listes de lecture, historique, etc.). Si vous utilisez plusieurs ordinateurs, la seule méthode supportée pour synchroniser les données est un export/import des fichiers depuis FreeTube. De mon coté, je ne trouve pas ça pratique et encore moins automatisable.
En conséquence, on ne peut pas faire évoluer ces données depuis plusieurs ordinateurs facilement.</p>

<p>En attendant que l'équipe de FreeTube propose une solution, j'ai travaillé sur un outil qui essaye de résoudre le problème : <a href="https://gitnet.fr/deblan/ft-sync">FT-Sync</a>. Il est écrit en GO sous licence AGPLv3.</p>

<p class="text-center">
  <a href="https://gitnet.fr/deblan/ft-sync" style="background: none">
    <img src="https://deblan.gitnet.page/ft-sync/logo.svg" alt="FT-Sync logo" style="max-width: 500px;" />
  </a>
</p>

<p><strong>FT-Sync n'est pas maintenu par l'équipe de FreeTube</strong>. Ce projet est encore expérimental et des problèmes peuvent apparaître. Je ne pourrai pas être tenu comme responsable si vous perdez des données.</p>

<p>Ceci étant dit, n'hésitez pas à <a href="https://gitnet.fr/deblan/ft-sync/issues">ouvrir un ticket</a> si vous rencontrez des problèmes 🙂</p>

<p>Avant d'utiliser FT-Sync, faites une sauvegarde de vos données :</p>

<ul>
<li><code>~/.config/FreeTube/history.db</code></li>
<li><code>~/.config/FreeTube/profiles.db</code></li>
<li><code>~/.config/FreeTube/playlists.db</code></li>
</ul>

<h2>Quels sont les prérequis ?</h2>

<p><strong>FT-Sync</strong> implique que le serveur soit accessible par toutes les machines où tourne FreeTube, comme dans un réseau local, à travers un VPN ou sur Internet. Veillez cependant à sécuriser les accès en configurant un pare-feu si le serveur est exposé.</p>

<h2>Comment ça fonctionne ?</h2>

<p>Le rôle du serveur est de stocker l'historique, les playlists et les profils des instances de FreeTube (clients).</p>

<p>Après avoir démarré le serveur, chaque client doit initialiser ses données locales sur le serveur. Cette action ne doit être effectuée qu'une seule fois. Chaque fois que vous souhaitez utiliser FreeTube, vous devez d'abord récupérer les données depuis le serveur. Un <code>watcher</code> enverra les mises à jour au serveur lorsque votre historique, vos playlists ou vos profils sont mis à jour. Lorsque FreeTube est redémarré, l'historique, les playlists et les profils seront synchronisés.</p>

<pre class="mermaid">sequenceDiagram
    participant Client
    participant Server

    Note over Client, Server: Only once
    Client-&gt;&gt;+Server: Send initial history, playlists, profiles&lt;br&gt;ftsync-client init
    Server--&gt;&gt;-Client: Response OK/KO

    Note over Client, Server: Before launching FreeTube
    Client-&gt;&gt;+Server: Pull update to date history, playlists, profiles&lt;br&gt;ftsync-client pull
    Server--&gt;&gt;-Client: Response datas
    Client-&gt;&gt;+Client: Update databases

    Note over Client, Server: While FreeTube is running
    loop Watch local db updates&lt;br&gt;ftsync-client watch
        Client-&gt;&gt;+Server: Send updated history, playlists, profiles
        Server--&gt;&gt;-Client: Response OK/KO
    end
</pre>

<p>Toute la procédure d'installation est décrite dans les sources du projet : <a href="https://gitnet.fr/deblan/ft-sync#how-to-use-it">📗 Comment l'utiliser ?</a>.</p>

<p>Dans les prochains changements, je souhaite permettre de démarrer le serveur via docker afin faciliter son déploiement. J'aimerais également réaliser des statistiques sur le contenu que je consomme via des métriques type <a href="https://prometheus.io/docs/introduction/overview/">Prometheus</a>.</p>

<p>J'utilise <a href="https://gitnet.fr/deblan/ft-sync">FT-Sync</a> depuis quelques jours maintenant et il fonctionne vraiment bien. J'ai maintenant les mêmes abonnements, les mêmes listes de lecture et le même historique quelque soit l'ordinateur que j'utilise (modulo un redémarrage). C'est vraiment agréable !</p>

<p>Si vous avez des remarques, des suggestions ou n'importe quoi d'autre à remonter, le projet est ouvert aux contributions sous toutes leurs formes 😉</p>
]]></description>
                <guid isPermaLink="false">668</guid>
                <pubDate>Mon, 02 Sep 2024 18:00:00 +0200</pubDate>
                                    <category><![CDATA[Logiciel libre]]></category>
                                    <category><![CDATA[Projets personnels]]></category>
                            </item>
                    <item>
                <title><![CDATA[Gestionnaire de fonds d'écrans pour i3]]></title>
                <link href="https://www.deblan.fr/post/667/gestionnaire-de-fonds-decran-pour-i3" type="text/html">https://www.deblan.fr/post/667/gestionnaire-de-fonds-decran-pour-i3</link>
                                    <link href="gemini://deblan.fr/posts/667.gmi" type="text/gemini" />
                                <description><![CDATA[<p><strong><a href="https://i3wm.org/">i3</a></strong> est tiling window manager pour Linux. Je l'utilise depuis de nombreuses années et j'en suis extrêmement satisfait.</p>

<p>Puisqu'il se cantonne à gérer (presque) que des fenêtres, il vient avec aucun outil de configuration. Par exemple, les utilisateurs⋅trices de <strong>i3</strong> doivent exploiter des outils tiers pour afficher un fond d'écran et c'est très souvent <strong><a href="https://feh.finalrewind.org/">feh</a></strong> qui est recommandé.</p>

<p>Cependant, si vous désirez avoir des fonds d'écrans spécifiques selon <a href="https://i3wm.org/docs/userguide.html#_using_workspaces">les espaces de travail</a>, <strong>feh</strong> ne sait pas le gérer nativement, car cette notion est spécifique à <strong>i3</strong>.</p>

<p>Après avoir cherché des solutions existantes, je n'ai rien trouvé de satisfaisant 🤔. J'ai donc démarré <strong><a href="https://gitnet.fr/deblan/i3-wallpaper-manager">i3 Wallpaper Manager</a></strong>, un outil en ligne de commandé destiné à changer les fonds d'écrans à la volé. Voici une démonstration.</p>

<p><video preload="none" controls poster="/uploads/content/667/last.jpg" src="https://deblan.gitnet.page/i3-wallpaper-manager/demo.webm" type="video/webm" style="width: 100%; margin: 0 auto"></video></p>

<p>En exploitant <a href="https://i3wm.org/docs/ipc.html">l'interface IPC de i3</a>, <strong>i3 Wallpaper Manager</strong> détecte quels espaces de travail sont actifs et ajuste les fonds d'écrans selon la configuration écrite en Yaml. Par défaut, il va s'appuyer sur <strong>feh</strong> mais il est possible de définir un script qui pourra lancer ce qui vous plaira d'utiliser, <a href="https://github.com/i3/i3/discussions/6187#discussioncomment-10217013">comme ici avec xwallpaper</a>.</p>

<p>Le projet est écrit en <strong>Go</strong> et il est publié sous licence AGPL v3. Je fournis des <a href="https://gitnet.fr/deblan/i3-wallpaper-manager/releases">versions</a> compilées pour les architectures <code>amd64</code> et <code>arm64</code>. Je met également à disposition des paquets pour Debian que vous pouvez, soit télécharger manuellement, soit installer en passant par <a href="https://gitnet.fr/deblan/-/packages/debian/i3-wallpaper-manager/1.2.0">mon dépot Debian</a>. Pour les utilisateurs⋅trices de Arch, <a href="https://github.com/yusufaktepe">yusufaktepe</a> a <a href="https://aur.archlinux.org/packages/i3-wallpaper-manager-bin">packagé le projet sur AUR</a> 🎉</p>

<p>J'espère que ce projet vous sera utile et comme toujours, je suis ouvert aux contributions sous toutes leurs formes ! 😀</p>
]]></description>
                <guid isPermaLink="false">667</guid>
                <pubDate>Fri, 02 Aug 2024 22:42:00 +0200</pubDate>
                                    <category><![CDATA[Informatique]]></category>
                                    <category><![CDATA[Projets personnels]]></category>
                            </item>
                    <item>
                <title><![CDATA[Vérifier l'expiration d'un domaine ou d'un certificat]]></title>
                <link href="https://www.deblan.fr/post/666/verifier-lexpiration-dun-domaine-ou-dun-certificat" type="text/html">https://www.deblan.fr/post/666/verifier-lexpiration-dun-domaine-ou-dun-certificat</link>
                                    <link href="gemini://deblan.fr/posts/666.gmi" type="text/gemini" />
                                <description><![CDATA[<p >Fin 2019, je publiais <a href="https://gitnet.fr/deblan/domain-expiration">domain-expiration,</a> un outil écrit en PHP et dont l'objectif est de <strong>vérifier la date d'expiration d'un nom de domaine ou d'un certificat</strong>.</p><p >Je l'ai déjà fais sur quelques projets et celui-ci n'y échappe pas, <strong>je l'ai été réécrit en GO</strong> pour plusieurs <em>(bonnes</em> raisons. Welcome <a href="https://gitnet.fr/deblan/expiration-check">Expiration Check</a>!</p>    <div class="ejs-link rounded-2xl shadow-md p-1 flex justify-start bg-box">
        <a href="https://gitnet.fr/deblan/expiration-check" class="ejs-link--anchor ejs-link--anchor--with-image" target="_blank">
            <div class="ejs-link-content">
                                    <div class="ejs-link-content--title mb-5">expiration-check</div>
                                                    <div class="ejs-link-content--description">Checks the expiration dates of domains et certificates. Domain expiration check uses RDAP and fallback with a whois request.</div>
                                                    <div class="ejs-link-content--link">
                        <span class="deblan-icon deblan-icon-link"></span>https://gitnet.fr/deblan/expiration-check</div>
                            </div>

                            <div class="ejs-link--image rounded-full" style="background-image: url('https://gitnet.fr/avatars/b5fbdf2516cbd5fb6da827e04ed0447397e144eea86f74c5bddfd1f164cd9ecc'), url('/build/images/quick-post-load2.4e8364df.png')"></div>
                    </a>
    </div>
<p >La première raison est <strong>la dépendance à PHP</strong> qui le rend difficile à déployer sur des machines non orientées pour le web. Ensuite, il était très dépendant à script shell pour la vérification des certificats et à la commande <code class="inline-code">whois</code> pour les domaines, ce qui est bloquant pour le déployer sur Windows.</p><p >Enfin et sans doute la raison la plus pertinente, c'est sa forte dépendance au <strong>Whois</strong> alors que <strong><a href="https://about.rdap.org/">RDAP</a></strong> est un protocole adapté pour retrouver les informations d'un nom de domaine. <strong>RDAP</strong> est normalisé et implémenté par beaucoup d'opérateurs de registres de noms de domaine génériques de premier niveau.<br>Dans le cas où <strong>RDAP</strong> n'est pas supporté sur un nom de domaine, je reprend la méthode qui repose sur les&nbsp; Whois avec tous les risques liés à au format qui&nbsp; n'est standardisé.</p><p >J'en ai profité pour supporter plus de formats de sorties : JSON, CSV et TSV, HTML, Markdown. Cela va simplifier l'usage de l'outil au sein d'autres projets.</p><p >Pour résumer, je fournis maintenant plusieurs binaires selon l'OS (Linux, Windows et iOS), je n'ai plus de dépendances à des outils tiers, et je privilégie RDAP au WHOIS quand c'est possible.</p><p >Si <a href="https://gitnet.fr/deblan/expiration-check">Expiration Check</a> vous intéresse, <a href="https://gitnet.fr/deblan/expiration-check">tout est documenté sur ma forge</a>. Vous pouvez ouvrir des tickets si vous désirez plus de fonctionnalités ou si vous rencontrez des problèmes.</p><p><img src="/uploads/content/666/image2.jpg" alt="Expiration check"></p>]]></description>
                <guid isPermaLink="false">666</guid>
                <pubDate>Mon, 22 Jul 2024 17:45:00 +0200</pubDate>
                                    <category><![CDATA[Informatique]]></category>
                                    <category><![CDATA[Logiciel libre]]></category>
                                    <category><![CDATA[Projets personnels]]></category>
                            </item>
                    <item>
                <title><![CDATA[Anonymiser une base de données MySQL et PostgreSQL]]></title>
                <link href="https://www.deblan.fr/post/660/anonymiser-une-base-de-donnees-mysql-et-postgresql" type="text/html">https://www.deblan.fr/post/660/anonymiser-une-base-de-donnees-mysql-et-postgresql</link>
                                    <link href="gemini://deblan.fr/posts/660.gmi" type="text/gemini" />
                                <description><![CDATA[<p><strong>Database Anonymizer</strong> est un outil écrit en GO et qui permet <strong>d'anonymiser ou supprimer des données</strong> d'une base de données <strong>MySQL</strong> ou <strong>PostgreSQL</strong>.</p>

<p>Il répond à plusieurs cas d'usage comme <strong>permettre de transférer une copie de base de données anonymisée à des développeurs et des développeuses</strong> ou répondre à la nécessité d'<strong>anonymiser ou supprimer des données dans le cadre du RGPD</strong> (Règlement général sur la protection des données) selon les durées de conservation définies dans le registre des traitements.</p>

<p>J'en profite d'ailleurs pour faire une parenthèse au sujet du RGPD. Avec mon associé <a href="https://www.linkedin.com/in/%E2%97%8F-alexis-gabry-%E2%97%8F-616a3b152/">Alexis Gabry</a>, nous éditons <strong><a href="https://www.prodpo.fr">une solution RGPD pour accompagner les DPO</a></strong>. <a href="https://www.prodpo.fr">ProDPO</a> offre une solution complète pour gérer les missions de DPO de manière simple et collaborative 😁</p>

<p><strong>Database Anonymizer</strong> inclue une grande quantité de générateurs de données aléatoires. Il permet également de générer des données via des modèles écrits en Twig. Vous pouvez spécifier des règles précises pour chaque table ou bien des règles globales appliquées sur chacunes des tables de votre configuration.</p>

<p>Pour faire fonctionner le projet, il suffit de définir un fichier de configuration comme suit :</p>

<script src="https://gist.gitnet.fr/deblan/d33959161174497d93a1099a4a1be09d.js?dark"></script>

<!--
```{.language-yaml}
rules:
  columns:
    # Applique par défaut le faker "phone_e164number" sur les colonnes nommées "phone"
    phone: phone_e164number
  generators:
      # Applique par défaut le faker "person_name" sur les colonnes nommées "display_name"
    person_name: [display_name]
  actions:
    - table: user
      # Une colonne virtuelle permet de générer une données réutilisable dans l'édition d'une colonne
      virtual_columns:
        domain: internet_domain
      columns:
        # "person_firstname" et "person_lastname" sont des générateurs intégrés au projet
        firstname: person_firstname
        lastname: person_lastname
        # L'email est construit dynamiquement
        email: "{{ (firstname ~ '.' ~ lastname ~ '@' ~ domain)|lower }}"
    - table: company
      columns:
        name: company_name
    - table: access_log
      # On peut supprimer des données spécifiques à une table
      query: 'select * from access_log where date < (NOW() - INTERVAL 6 MONTH)'
      delete: true
    - table: user_ip
      # On peut sépcifier des clés primaires spécifiques, `[ìd]` étant la valeur par défaut
      primary_key: [user_id, ip_id]
      delete: true
```
-->

<p>Ensuite, il faut lancer <code>database-anonymizer</code> en spécifiant la chaine de connexion à la base de donnée et le chemin vers la configuration.</p>

<pre><code class="window language-bash">database-anonymizer --dsn "mysql://username:password@tcp(db_host)/db_name" --schema ./schema.yaml
database-anonymizer --dsn "postgres://username:password@db_host:5432/db_name" --schema ./schema.yaml
</code></pre>

<p>Vous trouverez la liste complète des générateurs sur <a href="https://gitnet.fr/deblan/database-anonymizer/releases">la page Gitnet</a> et vous pouvez bien sur <a href="https://gitnet.fr/deblan/database-anonymizer/releases/tag/v1.0.0">télécharger la première version ici</a>.</p>

<p>J'ai encore du travail à faire sur le projet mais il est en bonne voix ! Si vous désirez l'essayer et me faire des retours, j'en serai ravi ! 😀</p>
]]></description>
                <guid isPermaLink="false">660</guid>
                <pubDate>Mon, 01 Apr 2024 19:00:00 +0200</pubDate>
                                    <category><![CDATA[Logiciel libre]]></category>
                                    <category><![CDATA[Projets personnels]]></category>
                            </item>
                    <item>
                <title><![CDATA[Murph v1.23 et Custom Menu v3.11]]></title>
                <link href="https://www.deblan.fr/post/658/murph-v1-23-custom-menu-v3-11" type="text/html">https://www.deblan.fr/post/658/murph-v1-23-custom-menu-v3-11</link>
                                    <link href="gemini://deblan.fr/posts/658.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Je n'ai pas écrit d'articles depuis quelques temps car mes semaines sont très chargées. Pour autant, je travaille sur de nombreux projets qui me donnent des idées de prochains articles.</p>

<p>Le 1er novembre dernier a été publiée <a href="https://gitnet.fr/murph/murph-core/releases/tag/v1.23.0">la version v1.23</a> de Murph. Murph est un <strong>framework open-source pour construire des CMS</strong>. Il est développé à l'aide de <strong>Symfony</strong> et permet de gérer des sites web avec <strong>plusieurs noms de domaines et en plusieurs langues</strong>. Il est aussi très efficace pour développer des outils d'administration et des applications métiers. C'est par ce prisme que j'ai beaucoup exploité Murph ces derniers mois, ce qui m'a permis de le mettre à l'épreuve. Je l'ai donc agrémenter de nouvelles fonctionnalités et de correctifs.</p>

<p><a href="https://doc.murph-project.org/"><img src="/uploads/content/658/screenshot_20231106.png" alt="Documentation Murph" /></a></p>

<p>Quant à <a href="https://deblan.gitnet.page/side_menu_doc/">Custom Menu</a>, la version <a href="https://gitnet.fr/deblan/side_menu/releases/tag/v3.11.0">v3.11.0</a> a été publiée de 5 novembre. Elle apporte une nouvelle fonctionnalité de recherche des applications dans les différents menus. Celle permet de filtrer les applications et permettre de les accéder plus rapidement. J'y pensais depuis quelques temps et c'est un besoin qui m'a été rémonté, c'est donc maintenant disponible !</p>

<p><img src="/uploads/content/658/screenshot_20231106_1.png" alt="Custom Menu" /></p>

<p><strong>Murph</strong> et <strong>Custom Menu</strong> sont des projets qui me tiennent vraiment à cœur et je suis heureux de les voir être utilisés par d'autres personnes que moi 😁</p>
]]></description>
                <guid isPermaLink="false">658</guid>
                <pubDate>Mon, 06 Nov 2023 11:30:00 +0100</pubDate>
                                    <category><![CDATA[Développement]]></category>
                                    <category><![CDATA[Logiciel libre]]></category>
                                    <category><![CDATA[Projets personnels]]></category>
                            </item>
                    <item>
                <title><![CDATA[Matrix-Synapse : migrer de SQLite à PostgreSQL]]></title>
                <link href="https://www.deblan.fr/post/655/matrix-synapse-migrer-de-sqlite-a-postgresql" type="text/html">https://www.deblan.fr/post/655/matrix-synapse-migrer-de-sqlite-a-postgresql</link>
                                    <link href="gemini://deblan.fr/posts/655.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Matrix-Synapse est un service de messagerie décentralisé et interopérable avec d'autres messageries. Je l'utilise à titre personnel et dans le cadre d'une association. Il livre un service que je considère sensible, c'est pourquoi les différentes instances sont hébergées sur des infras que je gère.</p>

<p>La configuration par défaut stocke les données de la messagerie dans une base de données SQLite. Cela a bien fonctionné pendant quelques années mais la base de données devient très rapidement obèse (plusieurs Go) et SQLite n'est plus adapté. C'est d'ailleurs recommandé d'utiliser PostgreSQL, naturellement plus adapté compte tenu de la grande quantité de données.</p>

<p>Voici la démarche pour basculer vers PostgreSQL depuis une base SQLite. J'évolue sur des machines sous Debian et j'ai installé Matrix-Synapse via <a href="https://matrix-org.github.io/synapse/latest/setup/installation.html">les packages livrés par matrix.org</a>.</p>

<p>Quelques recomandations avant d'opérer la migration :</p>

<ul>
<li>Avoir l'espace disque nécessaire pour accueillir une copie de la base de données SQLite</li>
<li>Avoir l'espace disque nécessaire pour héberger les données dans PostgreSQL</li>
<li>Communiquer auprès de vos utilisateur·rice·s car la procédure prendra des heures et le service sera inaccessible</li>
</ul>

<p>La première étape est de stopper le service et de faire une copie de la base de données. Je vous invite, si vous le pouvez, à duppliquer la copie de la base sur une autre machine.</p>

<pre><code class="window language-bash">$ sudo systemctl stop matrix-synapse.service
$ sudo cp -v /var/lib/matrix-synapse/homeserver.db{,.bk}
</code></pre>

<p>Ensuite, il faut installer PostgreSQL. Je reprend la procédure de la <a href="https://www.postgresql.org/download/linux/debian/">documentation officielle</a>.</p>

<pre><code class="window language-bash">$ sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" &gt; /etc/apt/sources.list.d/pgdg.list'
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get -y install postgresql
$ passwd postgres # Changement du mot de passe de l'utilisateur "postgres"
</code></pre>

<p>Éditer le fichier <code>/etc/postgresql/15/main/pg_hba.conf</code> puis opérer ces modifications :</p>

<pre><code class="window language-diff">-local   all             postgres                                peer
+local   all             all                                     peer
-host    all             all             127.0.0.1/32            scram-sha-256
+host    all             all             127.0.0.1/32            md5
-host    all             all             ::1/128                 scram-sha-256
+host    all             all             ::1/128                 md5
</code></pre>

<p>On relance ensuite PostgreSQL :</p>

<pre><code class="window language-bash">$ sudo systemctl start postgresql.service
</code></pre>

<p>C'est maintenant le moment de créer une base et un compte nommés <code>matrix</code>.</p>

<pre><code class="window language-bash">$ su - postgres
$ createuser --pwprompt matrix # Conserver le mot de passe que vous allez saisir pour plus tard
$ createdb -e -E UNICODE --template=template0  --locale=C -O matrix matrix
$ psql -d matrix
synapse=# GRANT ALL ON SCHEMA public TO matrix;
</code></pre>

<p>Avant de lancer le script de migration, il faut duppliquer temporairement le contenu de <code>/etc/matrix-synapse/conf.d/server_name.yaml</code> dans <code>/etc/matrix-synapse/homeserver.yaml</code>. Éditer le fichier <code>/etc/matrix-synapse/homeserver.yaml</code> pour changer la configuration de la base de données :</p>

<pre><code class="window language-yaml">database:
  name: psycopg2
  args:
    host: 127.0.0.1
    port: 5432
    user: matrix
    password: "$3cr€t" # Indiquer le mot de passe saisi lors de la création d'utilisateur
    database: matrix
    cp_min: 5
    cp_max: 10
</code></pre>

<p>Vous pouvez maintenant lancer la migration. Cela prendre un temps plus ou moins important selon le nombre d'enregistrements. Une base de données de 10Go a été migrée en 3 heures. Je vous invite à lancer la commande dans une session <code>tmux</code> ou <code>screen</code>.</p>

<pre><code class="window language-bash">$ sudo apt-get install tmux
$ tmux
$ synapse_port_db --curses \
    --sqlite-database /var/lib/matrix-synapse/homeserver.db \
    --postgres-config /etc/matrix-synapse/homeserver.yaml
</code></pre>

<p>Une fois la migration terminée, vous pourrez supprimer le contenu duppliqué de <code>/etc/matrix-synapse/conf.d/server_name.yaml</code> et relancer le service.</p>

<pre><code class="window language-bash">$ sudo systemctl start matrix-synapse.service
</code></pre>

<p>Dans le cas où il y aurait un problème, vous pouvez analyser les logs de Matrix-Synapse dans <code>/var/log/matrix-synapse/homeserver.log</code>. De mon coté, j'ai du faire une ou deux requêtes pour corriger des compteurs et tout était documenté dans ces logs.</p>

<p>Je pense avoir donné toutes les indications pour que cela se passe bien. N'hésitez pas à laisser un commentaire si vous rencontrez un problème.</p>
]]></description>
                <guid isPermaLink="false">655</guid>
                <pubDate>Sun, 10 Sep 2023 18:30:00 +0200</pubDate>
                                    <category><![CDATA[Informatique]]></category>
                            </item>
                    <item>
                <title><![CDATA[Remote i3-wm WS : ma télécommande pour bureau GNU/Linux (v2)]]></title>
                <link href="https://www.deblan.fr/post/654/remote-i3-wm-ws-ma-telecommande-pour-bureau-gnu-linux-v2" type="text/html">https://www.deblan.fr/post/654/remote-i3-wm-ws-ma-telecommande-pour-bureau-gnu-linux-v2</link>
                                    <link href="gemini://deblan.fr/posts/654.gmi" type="text/gemini" />
                                <description><![CDATA[<p>En février 2018, je publiais l'article <a href="https://www.deblan.io/post/540/remote-i3-wm-ws-ma-telecommande-pour-bureau-debian-gnu-linux">Remote i3-wm WS : ma télécommande pour bureau Debian GNU/Linux</a> dans lequel je présentais une application pour télécommander un bureau Linux depuis une interface web.</p>

<p>Le projet est écrit en PHP et fonctionne à merveille. Cependant, il manque 2 fonctionnalités majeures : l'authentification de l'utilisateur et permettre de configurer l'interface sans passer par le code source. Cela permettrait de l'exploiter sur des environnements variés. Par ailleurs, le fait qu'il soit écrit en PHP peut faire rebuter son installation.</p>

<p>J'ai décidé de le réécrire complètement en GO en m'appuyant sur le framework <a href="https://echo.labstack.com/">Echo</a>. Je peux à présent fournir un unique binaire et j'ai intégré un fichier de configuration en YAML pour paramétrer l'authentification et l'interface.</p>

<p><img src="/uploads/content/654/remotei32.png" alt="Remote i3-wm GO" /></p>

<p>Pour démarrer le projet, télécharger la dernière version depuis <a href="https://gitnet.fr/deblan/remote-i3wm-go/releases">Gitnet</a> puis générer un fichier de configuration en partant du <a href="https://gitnet.fr/deblan/remote-i3wm-go/src/branch/main/config.yaml">modèle</a>.<br />
Il suffira ensuite de lancer le binaire en spécifiant la variable d'environnement <code>DISPLAY</code> et le chemin du fichier de configuration en paramètre :</p>

<pre><code class="window language-bash">$ DISPLAY=:0 ./app-linux-amd64 config.yaml
</code></pre>

<p>Une fois démarré, l'interface web est par défaut accessible à l'adresse <code>http://127.0.0.1:4000</code>.</p>

<p>À l'heure actuelle, je ne compile pour que pour une architecture 64 bits mais je peux en intégrer d'autres si vous le désirez. Le code source est disponible dans le <a href="https://gitnet.fr/deblan/remote-i3wm-go">dépot du projet</a>.</p>

<p>La première version avait sucité un certain intérêt, j'espère que cette nouvelle version plus simple à déployer vous plaira !</p>
]]></description>
                <guid isPermaLink="false">654</guid>
                <pubDate>Sun, 27 Aug 2023 14:45:00 +0200</pubDate>
                                    <category><![CDATA[Logiciel libre]]></category>
                                    <category><![CDATA[Projets personnels]]></category>
                            </item>
                    <item>
                <title><![CDATA[Signez la pétition pour empêcher la France d’obliger les navigateurs tels que Firefox de Mozilla à censurer des sites web]]></title>
                <link href="https://www.deblan.fr/post/653/signez-la-petition-pour-empecher-la-france-d-obliger-les-navigateurs-tels-que-firefox-de-mozilla-a-censurer-des-sites-web" type="text/html">https://www.deblan.fr/post/653/signez-la-petition-pour-empecher-la-france-d-obliger-les-navigateurs-tels-que-firefox-de-mozilla-a-censurer-des-sites-web</link>
                                    <link href="gemini://deblan.fr/posts/653.gmi" type="text/gemini" />
                                <description><![CDATA[<p >Le gouvernement veut imposer aux éditeurs de navigateurs web de filtrer des sites selon une liste que le gouvernement gère et tiendrait secrète.</p><p >Si on peut naïvement se dire que ça permettrait de filtrer les sites nauséabonds, <strong>c'est aussi un nouvel outil terrible pour un gouvernement fasciste</strong> qui sera en mesure de censurer ce qu'il veut sans compte à rendre à personne.</p><p >Ce projet est une première car il s'inscrit directement dans les navigateurs (Firefox, Google Chrome, Microsoft Edge, Safari et les autres). </p><p ><strong>Les pays qui utilisent des moyens similaires à l'échelle d'un état sont tous des dictatures ou fascistes.</strong></p><p >Je n'accepte pas que la France soit une locomotive pour ces régimes vers lesquels nous nous dirigeons chaque jour qui passe.</p><p >Le gouvernement a présenté le projet de loi devant le Parlement peu avant les vacances d’été et espère l’adopter aussi rapidement et discrètement que possible ; le gouvernement a même engagé la procédure accélérée, le vote devant avoir lieu à l’automne.</p><p >Un des moyens de réagir et de faire porter votre voix et c'est pourquoi je partage cette pétition de la fondation Mozilla. <br></p><div class="ejs-link rounded-2xl shadow-md p-2 md:p-8 flex justify-start bg-box" style="width: 100%">
	<a href="https://foundation.mozilla.org/fr/campaigns/sign-our-petition-to-stop-france-from-forcing-browsers-like-mozillas-firefox-to-censor-websites/" class="ejs-link--anchor ejs-link--anchor--with-image" target="_blank" rel="noopener">
		<div class="ejs-link-content">
			<div class="ejs-link-content--title mb-5">Signez notre pétition pour empêcher la France d’obliger les navigateurs tels que Firefox de Mozilla à censurer des sites web </div>
			<div class="ejs-link-content--description">Le gouvernement français prépare une loi qui pourrait menacer la liberté sur Internet. Le projet de loi visant à sécuriser et réguler l’espace numérique (SREN) obligerait les navigateurs web, comme Firefox de Mozilla, à bloquer des sites web directement au niveau du navigateur. Cette mesure créerait un dangereux précédent et servirait de modèle à d’autres gouvernements pour à leur tour transformer les navigateurs en outils de censure gouvernementale.</div>
			<div class="ejs-link-content--link">
				<span class="deblan-icon deblan-icon-link"></span>
				https://foundation.mozilla.org/fr/campaigns/sign-our-petition-to-stop-france-from-forcing-browsers-like-mozillas-firefox-to-censor-websites/
			</div>
		</div>
		<div class="ejs-link--image rounded-full" style="background-image: url('https://assets.mofoprod.net/network/images/mozilla-og-image-min.original.jpg'), url('/build/images/quick-post-load2.4e8364df.png')"></div>
	</a>
</div><p >Pour compléter le lien vers pétition, je vous invite à lire l'article de blog de Mozilla publié en juin dernier.<br></p><div class="ejs-link rounded-2xl shadow-md p-2 md:p-8 flex justify-start bg-box" style="width: 100%">
	<a href="https://blog.mozilla.org/netpolicy/2023/06/27/francaise-bloquer-sites/" class="ejs-link--anchor ejs-link--anchor--with-image" target="_blank" rel="noopener">
		<div class="ejs-link-content">
			<div class="ejs-link-content--title mb-5"> La proposition française de bloquer les sites web via le navigateur nuira gravement à l’internet ouvert mondial  </div>
			<div class="ejs-link-content--description">Dans une tentative louable, mais périlleuse de lutter contre la fraude en ligne, la France s’apprête à obliger les créateurs de navigateurs à mettre en œuvre une fonctionnalité technique relevant de la dystopie.</div>
			<div class="ejs-link-content--link">
				<span class="deblan-icon deblan-icon-link"></span>
				https://blog.mozilla.org/netpolicy/2023/06/27/francaise-bloquer-sites/
			</div>
		</div>
		<div class="ejs-link--image rounded-full" style="background-image: url('https://assets.mofoprod.net/network/images/mozilla-og-image-min.original.jpg'), url('/build/images/quick-post-load2.4e8364df.png')"></div>
	</a>
</div>]]></description>
                <guid isPermaLink="false">653</guid>
                <pubDate>Thu, 17 Aug 2023 13:00:00 +0200</pubDate>
                                    <category><![CDATA[Politique]]></category>
                            </item>
                    <item>
                <title><![CDATA[Internet devient-il un Minitel 2.0 ou un bien commun ? - Benjamin Bayart - RTS – Libre à lire !]]></title>
                <link href="https://www.deblan.fr/post/652/internet-devient-il-un-minitel-2-0-ou-un-bien-commun-benjamin-bayart-rts-libre-a-lire" type="text/html">https://www.deblan.fr/post/652/internet-devient-il-un-minitel-2-0-ou-un-bien-commun-benjamin-bayart-rts-libre-a-lire</link>
                                    <link href="gemini://deblan.fr/posts/652.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Nous fêtons cette année [2019] les 50 ans dʹInternet et les 30 ans du WEB conçu au CERN par Tim Berners Lee. Que reste-t-il de ce réseau décentralisé et libre des origines ? Quelles sont les…</p>
]]></description>
                <guid isPermaLink="false">652</guid>
                <pubDate>Sat, 05 Aug 2023 11:28:00 +0200</pubDate>
                                    <category><![CDATA[Contenu externe]]></category>
                                    <category><![CDATA[Politique]]></category>
                            </item>
                    <item>
                <title><![CDATA[Murph v1.20 is out! 📣]]></title>
                <link href="https://www.deblan.fr/post/651/murph-v1-20-is-out" type="text/html">https://www.deblan.fr/post/651/murph-v1-20-is-out</link>
                                    <link href="gemini://deblan.fr/posts/651.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Une nouvelle version de <strong>Murph</strong> a été publiée le 27 juillet 2023 🥳</p>

<p>Murph est un <strong>framework open-source pour construire des CMS</strong>. Il est développé à l'aide de <strong>Symfony</strong> et permet de gérer des sites web avec <strong>plusieurs noms de domaines et en plusieurs langues</strong>.</p>

<p>Voici une liste des changements importants :</p>

<ul>
<li>Le contrôleur pour gérer les utilisateurs est maintenant intégré au squelette pour faciliter la surcharge dans les projets spécifiques</li>
<li>Le générateur de CRUD va automatiquement créer des templates pour l'affichage d'une entité et celui du formulaire d'édition</li>
<li>Il est maintenant possible d'injecter des paramètres dans le formulaire des filtres dans le CRUD</li>
<li>Un nouveau champ <code>BooleanField</code> a été ajouté pour afficher une données booléenne dans la liste du CRUD</li>
<li>De nouveaux blocs Twig font leur apparition dans le template <code>index.html.twig</code> du CRUD</li>
<li>Le générateur de page permet de définir le bloc <code>ChoiceBlock</code></li>
<li>L'affichage des détails d'un fichier dans le gestionnaire de fichier est améliorée</li>
<li>On peut définir une fonction personnalisée pour générer les noms de fichier dans le service <code>FileUploadHandler</code></li>
<li>La fonction Twig <code>entity_to_array</code> possède deux nouveaux paramètres pour filtrer les données</li>
<li>Les paramètres <code>core.site.name</code> et <code>core.site.logo</code> ne sont plus obligatoires</li>
</ul>

<p>Des corrections divers ont été apportées comme la correction d'un bug avec PostgreSQL.</p>

<p>Les journaux complets sont disponibles sur la <a href="https://doc.murph-project.org/changelog/core/">📘 documentation</a>.</p>

<p>Murph est exploité dans de nombreux projets personnels et professionnels avec des besoins spécifiques. L'architecture du CMS et les outils intégrés ont permis de gérér la quasi totalité des besoins. Je vous recommande chaudement de prendre le temps de tester Murph, vous pourriez être supri⋅e⋅s ! 😀</p>
]]></description>
                <guid isPermaLink="false">651</guid>
                <pubDate>Fri, 28 Jul 2023 10:30:00 +0200</pubDate>
                                    <category><![CDATA[Développement]]></category>
                                    <category><![CDATA[Logiciel libre]]></category>
                                    <category><![CDATA[Projets personnels]]></category>
                            </item>
                    <item>
                <title><![CDATA[Je n'ai rien à cacher.]]></title>
                <link href="https://www.deblan.fr/post/650/je-nai-rien-a-cacher" type="text/html">https://www.deblan.fr/post/650/je-nai-rien-a-cacher</link>
                                    <link href="gemini://deblan.fr/posts/650.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Puis-je vous demander une copie de tous vos emails, de vos messages et photos sur Facebook, et de tous les fichiers sur votre ordinateur ? J’aimerais tout savoir sur votre vie privée.</p>

<p>Comment oseriez-vous répondre non ? Lorsque vous n’avez rien à cacher, vous ne pouvez pas faire de distinction entre ce que vous admettez rendre public et ce qui vous dérange un peu plus.</p>
]]></description>
                <guid isPermaLink="false">650</guid>
                <pubDate>Wed, 05 Jul 2023 13:19:00 +0200</pubDate>
                                    <category><![CDATA[Contenu externe]]></category>
                            </item>
                    <item>
                <title><![CDATA[Capture, un reverse proxy pour analyser les requêtes de vos applications]]></title>
                <link href="https://www.deblan.fr/post/648/capture-un-proxy-pour-analyser-les-requetes-de-vos-applications" type="text/html">https://www.deblan.fr/post/648/capture-un-proxy-pour-analyser-les-requetes-de-vos-applications</link>
                                    <link href="gemini://deblan.fr/posts/648.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Capture est un reverse proxy HTTP qui se place entre votre application cliente et une API. Capture génère un tableau de bord en temps réel des requêtes HTTP de votre application et des réponses de l'API (ou de n'importe quel service HTTP). À la manière des debuggeurs réseaux présents dans les navigateurs, vous pouvez analyser les entêtes, les contenus générés, les temps de réponse, etc.</p>

<p>Ce projet a été initialemement développé par <a href="https://github.com/ofabricio">Fabricio</a> et les sources sont disponibles sur <a href="https://github.com/ofabricio/capture">Github</a>.</p>

<p>Écrit en GO, il n'était malheureusement plus maintenu depuis près de 2 ans et c'est regrettable car il est simple et performant. J'ai donc entrepris un fork que j'ai commencé à enrechir avec un ou deux correctifs et des améliorations sur l'interface et sa configuration. La sources sont maintenant accessibles sur <a href="https://gitnet.fr/deblan/capture">Gitnet</a>.</p>

<p><img src="https://upload.deblan.org/u/2023-05/64746afd.png" alt="Capture" /></p>

<p>Voici les méthodes basiques pour lancer capture :</p>

<pre><code class="window language-bash">$ capture -url=https://example.com/
$ docker run -p 9000:9000 -p 9001:9001 deblan/capture -url=https://example.com/
</code></pre>

<p>Une des nouvelles fonctionnalités est la capacité à inscrire sa configuration dans un fichier nommé par défaut <code>.capture.ini</code>. En effet, s'il est possible de tout passer en argument, c'est tout de même plus pratique de créer des fichiers de conf spécifiques pour chacun de vos projets.</p>

<pre><code class="window language-bash">$ cat .capture.ini
url = https://example.com/
port = 9000
dashboard = 9001
captures = 16
$ capture
</code></pre>

<p>Vous pouvez bien sur surcharger ses valeurs via les arguments. Il est également possible de spécifier le chemin vers le fichier de conf avec <code>-conf</code>.</p>

<p>Le projet est sous la licence MIT et si vous avez envie de contribuer, ça sera avec grand plaisir ! J'espère vraiment pouvoir faire revivre ce beau projet et qu'il sera utilise à d'autres développeur·euse·s 😄</p>
]]></description>
                <guid isPermaLink="false">648</guid>
                <pubDate>Wed, 07 Jun 2023 09:00:00 +0200</pubDate>
                                    <category><![CDATA[Développement]]></category>
                                    <category><![CDATA[Projets personnels]]></category>
                            </item>
                    <item>
                <title><![CDATA[Affaire du 8 décembre : le chiffrement des communications assimilé à un comportement terroriste]]></title>
                <link href="https://www.deblan.fr/post/649/affaire-du-8-decembre-le-chiffrement-des-communications-assimile-a-un-comportement-terroriste" type="text/html">https://www.deblan.fr/post/649/affaire-du-8-decembre-le-chiffrement-des-communications-assimile-a-un-comportement-terroriste</link>
                                    <link href="gemini://deblan.fr/posts/649.gmi" type="text/gemini" />
                                <description><![CDATA[<p>Si vous prêtez une attention forte à protéger votre vie privée, si vous utilisez des méthodes communications chiffrées, si vous installez des systèmes d'exploitations alternatifs, si vous documentez votre travail ou que vous partagez ces bonnes pratiques alors vous êtes dangereux⋅ses.</p>

<p><strong>J'ai honte.</strong></p>
]]></description>
                <guid isPermaLink="false">649</guid>
                <pubDate>Mon, 05 Jun 2023 13:20:00 +0200</pubDate>
                                    <category><![CDATA[Contenu externe]]></category>
                                    <category><![CDATA[Politique]]></category>
                            </item>
                    <item>
                <title><![CDATA[Un modèle pour démarrer un script shell]]></title>
                <link href="https://www.deblan.fr/post/647/modele-pour-demarrer-script-shell" type="text/html">https://www.deblan.fr/post/647/modele-pour-demarrer-script-shell</link>
                                    <link href="gemini://deblan.fr/posts/647.gmi" type="text/gemini" />
                                <description><![CDATA[<p>J'ai régulièrement le besoin d'écrire des scripts shell un peu évolués. Il y a quelques mois, j'ai commencé à travailler sur un modèle que je met régulièrement à jour. Aujourd'hui, j'ai travaillé sur la couche pour gérer les logs et c'est pourquoi j'écris cet article.</p>

<div class="code-window"></div>

<iframe width="100%" style="min-height: 50vh; border: 2px solid #1d2231; border-bottom-left-radius: 1rem; border-bottom-right-radius: 1rem" src="https://gitnet.fr/deblan/shell-base/src/branch/main/script?embed=1"></iframe>

<p>Ce modèle contient les fonctions <code>usage</code> et <code>help</code> pour décrire le fonctionnement du programme. La fonction <code>on_interrupt</code> permet de gérer le signal <code>SIGINT</code> quand le programme est interrompu.</p>

<p>La fonction <code>main</code> est la fonction qui contient le code principal du script. Elle contient la gestion des paramètres passés au script. Par défaut, plusieurs y sont déjà intégrés : <code>-l</code> pour définir le niveau de log désiré et  <code>-h</code> pour afficher l'aide.</p>

<p>Enfin, il y a la fonction <code>log</code> pour afficher des messages de debug avec différents niveaux de criticité. Cela permet de générer des messages qui seront affichés ou pas selon les besoins. Les messages sont colorés selon le niveau de criticité et ils sont redirigés vers <code>stderr</code>. Il est également possible d'ajouter la date.</p>

<p><img src="/uploads/content/647/screenshot_20230521.png" alt="" /></p>

<p>Le code source est disponible sur <a href="https://gitnet.fr/deblan/shell-base">Gitnet</a> et comme toujours, vous pouvez en faire ce que vous voulez !</p>

<p>En conclusion, le développement de ce modèle de script shell a été un projet passionnant et fructueux. En l'enrichissant régulièrement, j'ai pu créer une base solide pour gérer efficacement les fonctionnalités essentielles d'un script.</p>
]]></description>
                <guid isPermaLink="false">647</guid>
                <pubDate>Sun, 21 May 2023 19:00:00 +0200</pubDate>
                                    <category><![CDATA[Développement]]></category>
                            </item>
            </channel>
</rss>
