<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on /dev/random</title>
    <link>https://log.2027a.net/posts/</link>
    <description>Recent content in Posts on /dev/random</description>
    <image>
      <title>/dev/random</title>
      <url>https://log.2027a.net/img/cover.jpg</url>
      <link>https://log.2027a.net/img/cover.jpg</link>
    </image>
    <generator>Hugo -- 0.149.1</generator>
    <language>fr</language>
    <lastBuildDate>Thu, 11 Sep 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://log.2027a.net/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Charlie Kirk, une joie coupable ?</title>
      <link>https://log.2027a.net/posts/charlie-kirk-une-joie-coupable/</link>
      <pubDate>Thu, 11 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://log.2027a.net/posts/charlie-kirk-une-joie-coupable/</guid>
      <description>&lt;p&gt;C&amp;rsquo;est drôle, on a ne déchire jamais sa chemise quand les assassinats politiques
sont commis par la CIA ou le Mossad. Dans ces cas là, tout le monde trouve ça
normal de se réjouir, on ne cherche pas à faire honte à ceux qui le font, et le
débat public porte plutôt sur la merveilleuse efficacité des assassins&lt;/p&gt;
&lt;p&gt;Kirk était un propagandiste fasciste, promoteur de la violence armée, de la
lapidation des homosexuels, et de la violence politique contre tout ce qui
pouvait être décrit comme woke, depuis les personnes trans jusqu&amp;rsquo;à Nancy Pelosi
en passant par les immigrants ou les étudiants militants pour la fin du
génocide des palestiniens. C&amp;rsquo;est parfaitement acceptable de se réjouir de sa
disparition, et ça ne changera &lt;strong&gt;rien&lt;/strong&gt; à la façon dont Trump, qui ne lit pas
ta page Facebook anyway, instrumentalisera ça au profit de sa politique.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>C&rsquo;est drôle, on a ne déchire jamais sa chemise quand les assassinats politiques
sont commis par la CIA ou le Mossad. Dans ces cas là, tout le monde trouve ça
normal de se réjouir, on ne cherche pas à faire honte à ceux qui le font, et le
débat public porte plutôt sur la merveilleuse efficacité des assassins</p>
<p>Kirk était un propagandiste fasciste, promoteur de la violence armée, de la
lapidation des homosexuels, et de la violence politique contre tout ce qui
pouvait être décrit comme woke, depuis les personnes trans jusqu&rsquo;à Nancy Pelosi
en passant par les immigrants ou les étudiants militants pour la fin du
génocide des palestiniens. C&rsquo;est parfaitement acceptable de se réjouir de sa
disparition, et ça ne changera <strong>rien</strong> à la façon dont Trump, qui ne lit pas
ta page Facebook anyway, instrumentalisera ça au profit de sa politique.</p>
<p>On peut évidemment s&rsquo;inquiéter des conséquences d&rsquo;une spirale de la violence
politique (c&rsquo;est mon cas), mais l&rsquo;un n&rsquo;empêche pas l&rsquo;autre</p>
]]></content:encoded>
    </item>
    <item>
      <title>Aristide Briand et la police du linge</title>
      <link>https://log.2027a.net/posts/aristide-briand-et-la-police-du-linge/</link>
      <pubDate>Thu, 28 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://log.2027a.net/posts/aristide-briand-et-la-police-du-linge/</guid>
      <description>&lt;p&gt;Puisqu&amp;rsquo;on reparle de faire la police du linge religieux, je crois qu&amp;rsquo;il est
utile de se souvenir de ce que disait Aristide Briand, rapporteur de la loi de
1905 sur la séparation des Églises et de l&amp;rsquo;état, interrogé sur la soutane :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Aristide Briand à la tribune de l&amp;rsquo;Assemblée Nationale, en une du &lt;strong&gt;Petit Parisien&lt;/strong&gt;&#34; loading=&#34;lazy&#34; src=&#34;https://log.2027a.net/img/briand.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;« Messieurs, au risque d’étonner l’honorable M. Chabert, je lui dirai que le
silence du projet de loi au sujet du costume ecclésiastique, qui paraît le
préoccuper si fort n’a pas été le résultat d’une omission mais bien au
contraire d’une délibération mûrement réfléchie. Il a paru à la commission que
ce serait encourir, pour un résultat problématique, le reproche d’intolérance
et même s’exposer à un danger plus grave encore, le ridicule (Applaudissements
et rires au centre et à droite), que de vouloir, par une loi qui se donne pour
but d’instaurer dans ce pays un régime de liberté au point de vue
confessionnel, imposer aux ministres des cultes l’obligation de modifier la
coupe de leurs vêtements.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Puisqu&rsquo;on reparle de faire la police du linge religieux, je crois qu&rsquo;il est
utile de se souvenir de ce que disait Aristide Briand, rapporteur de la loi de
1905 sur la séparation des Églises et de l&rsquo;état, interrogé sur la soutane :</p>
<p><img alt="Aristide Briand à la tribune de l&rsquo;Assemblée Nationale, en une du <strong>Petit Parisien</strong>" loading="lazy" src="/img/briand.png"></p>
<p>« Messieurs, au risque d’étonner l’honorable M. Chabert, je lui dirai que le
silence du projet de loi au sujet du costume ecclésiastique, qui paraît le
préoccuper si fort n’a pas été le résultat d’une omission mais bien au
contraire d’une délibération mûrement réfléchie. Il a paru à la commission que
ce serait encourir, pour un résultat problématique, le reproche d’intolérance
et même s’exposer à un danger plus grave encore, le ridicule (Applaudissements
et rires au centre et à droite), que de vouloir, par une loi qui se donne pour
but d’instaurer dans ce pays un régime de liberté au point de vue
confessionnel, imposer aux ministres des cultes l’obligation de modifier la
coupe de leurs vêtements.</p>
<p>Je ferai du reste, observer à l’honorable M. Chabert que le problème n’est pas
aussi simple ni aussi facile à résoudre qu’il semble le supposer. Ce que notre
collègue voudrait atteindre dans la soutane, c’est le moyen qu’elle procure de
se distinguer facilement des autres citoyens.</p>
<p>Mais la soutane une fois supprimée, M. Chabert peut être sûr que, si l’Eglise
devait y trouver son intérêt, l’ingéniosité combinée des prêtres et des
tailleurs aurait tôt fait de créer un vêtement nouveau, qui ne serait plus la
soutane, mais se différencierait encore assez du veston et de la redingote pour
permettre au passant de distinguer au premier coup d’œil un prêtre de tout
autre citoyen.</p>
<p>L’honorable M. Chabert a visité certains pays ; il a pu constater que les
pasteurs protestants ont des chapeaux d’une forme particulière, des redingotes
d’une coupe spéciale, qui ne le cèdent en rien à la soutane comme signes
distinctifs du caractère de ceux qui les portent. Quant au prestige dont jouit
la religion dans nos campagnes, je crois qu’il serait téméraire de l’attribuer
uniquement à la forme du vêtement que portent les prêtres. L’influence de
l’Eglise tient à d’autres causes, moins faciles à détruire ; sinon, il y a
longtemps que la libre pensée aurait déjà triomphé du dogme. (Très bien ! très
bien ! à gauche.)</p>
<p>Votre commission, messieurs, a pensé qu’en régime de séparation la question du
costume ecclésiastique ne pouvait pas se poser. Ce costume n’existe plus pour
nous avec son caractère officiel, c’est-à-dire en tant qu’uniforme protégé par
l’article 259 du code pénal. La soutane devient, dès le lendemain de la
séparation, un vêtement comme un autre, accessible à tous les citoyens, prêtres
ou non. C’est la seule solution qui nous ait paru conforme au principe même de
la séparation, et c’est celle que je prie la Chambre de vouloir bien adopter. »</p>
]]></content:encoded>
    </item>
    <item>
      <title>Mark Carney, complice du génocide des palestiniens</title>
      <link>https://log.2027a.net/posts/mark-carney-complice-du-g%C3%A9nocide-des-palestiniens/</link>
      <pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://log.2027a.net/posts/mark-carney-complice-du-g%C3%A9nocide-des-palestiniens/</guid>
      <description>&lt;p&gt;Dans cette nouvelle déclaration officielle, Carney, au nom du Canada, fait mine
de condamner l&amp;rsquo;escalade israélienne à Gaza, sans pour autant annoncer la
moindre sanction&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Déclaration de Mark Carney&#34; loading=&#34;lazy&#34; src=&#34;https://log.2027a.net/img/declaration-carney-palestine.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Dans le même geste, il insiste pour que le futur état palestinien soit désarmé,
et appelle à une &amp;ldquo;gouvernance démocratique forte&amp;rdquo; en réclamant une élection
truquée en faveur de l&amp;rsquo;occupant. Occupant dont l&amp;rsquo;armement ou la &amp;ldquo;gouvernance
démocratique forte&amp;rdquo; n&amp;rsquo;est évidemment pas interrogée&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Dans cette nouvelle déclaration officielle, Carney, au nom du Canada, fait mine
de condamner l&rsquo;escalade israélienne à Gaza, sans pour autant annoncer la
moindre sanction</p>
<p><img alt="Déclaration de Mark Carney" loading="lazy" src="/img/declaration-carney-palestine.jpg"></p>
<p>Dans le même geste, il insiste pour que le futur état palestinien soit désarmé,
et appelle à une &ldquo;gouvernance démocratique forte&rdquo; en réclamant une élection
truquée en faveur de l&rsquo;occupant. Occupant dont l&rsquo;armement ou la &ldquo;gouvernance
démocratique forte&rdquo; n&rsquo;est évidemment pas interrogée</p>
<p>Tout ça est bien entendu contraire au droit international, à l&rsquo;opinion
canadienne et internationale, et à la décence élémentaire</p>
<p>La position canadienne sur le génocide de Gaza est honteuse : un soutien
intégral à l&rsquo;occupation et à la stratégie israélienne de domination coloniale,
et un discours de surface qui maquille ce soutien en réprobation, tout en
fournissant à Israël la couverture diplomatique qui permet la poursuite du
génocide, du nettoyage ethnique, et de la colonisation</p>
]]></content:encoded>
    </item>
    <item>
      <title>10 axes pour une gauche québecoise</title>
      <link>https://log.2027a.net/posts/10-axes-pour-une-gauche-qu%C3%A9becoise/</link>
      <pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://log.2027a.net/posts/10-axes-pour-une-gauche-qu%C3%A9becoise/</guid>
      <description>&lt;p&gt;Ça fait un moment que ça me trotte dans la tête, et que je ne sais pas quoi en
faire. Alors, voici, tout de go, 10 mesures simples et claires qui me feraient
voter pour un parti de gauche et dont l&amp;rsquo;absence me ferait probablement rester
chez moi. En espérant que ce soit lu, repris, partagé et retravaillé. Est-ce
que ça vous parle ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hausse significative du salaire minimum et de l&amp;rsquo;aide sociale, et indexation
des salaires ainsi que des prestations sociales sur l’inflation,&lt;/li&gt;
&lt;li&gt;Alignement des régimes de retraite et d’assurance santé sur les standards de
la fonction publique, pour l’ensemble de la population,&lt;/li&gt;
&lt;li&gt;Gel des loyers, moratoire sur les évictions, et lancement d’un plan
d’investissement public massif pour la construction de logements sociaux,&lt;/li&gt;
&lt;li&gt;Sanctuarisation des droits fondamentaux, abrogation des régimes d’exception
permettant de contourner les chartes des droits, et généralisation du droit de
grève,&lt;/li&gt;
&lt;li&gt;Impôt sur le patrimoine et mise en place d’une exit tax dissuasive : tu
t’exiles pour fuir le nouveau régime fiscal ? Très bien, mais on prélève tout
ce qui dépasse un minimum garanti. Le retour n’est possible que via un
processus d’immigration régulier,&lt;/li&gt;
&lt;li&gt;Intégration des médecins dans la fonction publique comme salariés ordinaires.
Le coût de leurs études est facturé aux médecins qui quittent le service public
avant un certain seuil (élevé) de service,&lt;/li&gt;
&lt;li&gt;Nationalisation des écoles privées et suppression du système scolaire à
plusieurs vitesses,&lt;/li&gt;
&lt;li&gt;Grands travaux d’infrastructure: liaison ferroviaire entre les principales
villes, redirection de 25 % des investissements routiers vers le transport en
commun, les infrastructures cyclables et piétonnes,&lt;/li&gt;
&lt;li&gt;Loi écologique ambitieuse: électrification généralisée, rationalisation
écologique de la production, mesures d&amp;rsquo;adaptation aux changements climatiques,
avec un volet d’incitatifs fiscaux (entreprises et particuliers) et un autre
d’investissement public,&lt;/li&gt;
&lt;li&gt;Taxe aux frontières sur les produits ne respectant pas les normes écologiques
et sociales en vigueur au Québec&lt;/li&gt;
&lt;/ul&gt;</description>
      <content:encoded><![CDATA[<p>Ça fait un moment que ça me trotte dans la tête, et que je ne sais pas quoi en
faire. Alors, voici, tout de go, 10 mesures simples et claires qui me feraient
voter pour un parti de gauche et dont l&rsquo;absence me ferait probablement rester
chez moi. En espérant que ce soit lu, repris, partagé et retravaillé. Est-ce
que ça vous parle ?</p>
<ul>
<li>Hausse significative du salaire minimum et de l&rsquo;aide sociale, et indexation
des salaires ainsi que des prestations sociales sur l’inflation,</li>
<li>Alignement des régimes de retraite et d’assurance santé sur les standards de
la fonction publique, pour l’ensemble de la population,</li>
<li>Gel des loyers, moratoire sur les évictions, et lancement d’un plan
d’investissement public massif pour la construction de logements sociaux,</li>
<li>Sanctuarisation des droits fondamentaux, abrogation des régimes d’exception
permettant de contourner les chartes des droits, et généralisation du droit de
grève,</li>
<li>Impôt sur le patrimoine et mise en place d’une exit tax dissuasive : tu
t’exiles pour fuir le nouveau régime fiscal ? Très bien, mais on prélève tout
ce qui dépasse un minimum garanti. Le retour n’est possible que via un
processus d’immigration régulier,</li>
<li>Intégration des médecins dans la fonction publique comme salariés ordinaires.
Le coût de leurs études est facturé aux médecins qui quittent le service public
avant un certain seuil (élevé) de service,</li>
<li>Nationalisation des écoles privées et suppression du système scolaire à
plusieurs vitesses,</li>
<li>Grands travaux d’infrastructure: liaison ferroviaire entre les principales
villes, redirection de 25 % des investissements routiers vers le transport en
commun, les infrastructures cyclables et piétonnes,</li>
<li>Loi écologique ambitieuse: électrification généralisée, rationalisation
écologique de la production, mesures d&rsquo;adaptation aux changements climatiques,
avec un volet d’incitatifs fiscaux (entreprises et particuliers) et un autre
d’investissement public,</li>
<li>Taxe aux frontières sur les produits ne respectant pas les normes écologiques
et sociales en vigueur au Québec</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Un bien triste anniversaire</title>
      <link>https://log.2027a.net/posts/un-bien-triste-anniversaire/</link>
      <pubDate>Thu, 29 May 2025 09:34:53 -0400</pubDate>
      <guid>https://log.2027a.net/posts/un-bien-triste-anniversaire/</guid>
      <description>&lt;p&gt;Aujourd&amp;rsquo;hui, ça fait exactement 20 ans que s&amp;rsquo;est tenu en France le référendum
sur le traité constitutionnel européen.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;avais participé activement à la campagne du non (notamment en
donnant des &amp;ldquo;prêches&amp;rdquo; pour l&amp;rsquo;Église de la très sainte consommation, c&amp;rsquo;était
vraiment le fun), et malgré la quasi-unanimité médiatique et politique, le non
s&amp;rsquo;était imposé, sur une ligne de gauche, refusant ainsi clairement la
constitutionnalisation des politiques néolibérales et austéritaires que ce
texte contenait.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Aujourd&rsquo;hui, ça fait exactement 20 ans que s&rsquo;est tenu en France le référendum
sur le traité constitutionnel européen.</p>
<p>J&rsquo;avais participé activement à la campagne du non (notamment en
donnant des &ldquo;prêches&rdquo; pour l&rsquo;Église de la très sainte consommation, c&rsquo;était
vraiment le fun), et malgré la quasi-unanimité médiatique et politique, le non
s&rsquo;était imposé, sur une ligne de gauche, refusant ainsi clairement la
constitutionnalisation des politiques néolibérales et austéritaires que ce
texte contenait.</p>
<p><img alt="Campagne du réferendun sur le traité constitutionel" loading="lazy" src="/img/non.jpg"></p>
<p>C&rsquo;était la première fois (et aussi la dernière&hellip;) que je remportais une
élection.</p>
<p>Deux ans plus tard, le parlement réuni en congrès votait pour le renversement de
cette décision pourtant clairement exprimée par les citoyens, en ratifiant le
traité de Lisbonne.</p>
<p>Ce fut, à mes yeux, la fin de l&rsquo;illusion de la démocratie représentative. Ce
régime, que l&rsquo;on ne questionne pratiquement jamais, considéré comme le mètre
étalon de la démocratie à travers le monde, venait de permettre à une poignée
de gens — pas élus pour ça — de renverser une décision prise par l&rsquo;ensemble des
électeurs, au mépris de tout principe démocratique ou même simplement
représentatif.</p>
<p>Ça a été, pour moi mais je pense être assez représentatif de ma génération sur
ce point-là, un point de rupture dans ma représentation du régime dans lequel
nous vivons.</p>
<p>Ce système, que je me représentais jusque-là comme une tentative certes
imparfaite, mais honnête, d&rsquo;accomplir la démocratie dans une société moderne et
complexe, est soudain apparu pour ce qu&rsquo;il est : une machine à illusions au
service des puissants qui sont en mesure de la manipuler avec leurs armées de
lobbyistes et leurs représentants menteurs.</p>
<p>Un peu plus tard, le traitement par l&rsquo;UE et la troïka, et même par Tsípras à la
fin, des décisions prises démocratiquement par le peuple grec fut un clou
de plus dans ce cercueil. Sans parler évidemment du déni de démocratie flagrant
à la suite des dernières élections législatives, il y a près d&rsquo;un an, à
l&rsquo;issue desquelles les formations politiques qui ont perdu les élections ont
continué à gouverner comme s&rsquo;il ne s&rsquo;était rien passé.</p>
<p>Et que dire de la supériorité morale dont se gargarisent en permanence les
sociétés occidentales, justifiant toute intervention
militaire au nom de cette démocratie de façade, sur laquelle elles s&rsquo;essuient
habituellement les pieds ?</p>
<p>Ce texte ne va nulle part. Je n&rsquo;ai pas de but, pas de point à démontrer. Juste
une lamentation devant la faiblesse démocratique de nos sociétés, faiblesse
évidemment particulièrement inquiétante avec les fascistes aux portes du
pouvoir un peu partout, quand ils n&rsquo;y sont pas déjà (looking at you,
Retailleau).</p>
<p>Il y a 20 ans, c&rsquo;était la dernière fois que j&rsquo;ai cru en la démocratie
représentative moderne. Quel triste anniversaire !</p>
]]></content:encoded>
    </item>
    <item>
      <title>Rififi en mer de Chine</title>
      <link>https://log.2027a.net/posts/rififi-en-mer-de-chine/</link>
      <pubDate>Fri, 02 May 2025 11:52:56 -0400</pubDate>
      <guid>https://log.2027a.net/posts/rififi-en-mer-de-chine/</guid>
      <description>&lt;p&gt;Vous avez vu passer ces inquiétudes autour des nouvelles barges chinoises ?&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Nouvelles barges chinoises&#34; loading=&#34;lazy&#34; src=&#34;https://log.2027a.net/img/barges-chine.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Avec l&amp;rsquo;accélération manifeste du pivot des États-Unis vers la Chine, la crise
économique dans laquelle Trump s’est plongé presque tout seul, lui et une part
significative du commerce mondial, son agressivité économique généralisée, et
le début du déclin démographique chinois, tous les incitatifs sont réunis pour
qu&amp;rsquo;une éventuelle agression/annexion de Taïwan par la Chine ait lieu
plus tôt que tard :&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Vous avez vu passer ces inquiétudes autour des nouvelles barges chinoises ?</p>
<p><img alt="Nouvelles barges chinoises" loading="lazy" src="/img/barges-chine.png"></p>
<p>Avec l&rsquo;accélération manifeste du pivot des États-Unis vers la Chine, la crise
économique dans laquelle Trump s’est plongé presque tout seul, lui et une part
significative du commerce mondial, son agressivité économique généralisée, et
le début du déclin démographique chinois, tous les incitatifs sont réunis pour
qu&rsquo;une éventuelle agression/annexion de Taïwan par la Chine ait lieu
plus tôt que tard :</p>
<ul>
<li>le déclin démographique chinois (et donc industriel) rendra progressivement
plus difficile une opération militaire de cette ampleur d’ici quelques années —
peut-être une grosse décennie ;</li>
<li>la guerre commerciale relancée par Trump, qui cible particulièrement la Chine
(pas seulement via les nouveaux tarifs douaniers, mais aussi l&rsquo;embargo sur les
semi-conducteurs, crucial), tend à réduire significativement le couplage des
économies, qui incite la Chine à préserver Taïwan, et les USA à intervenir
pour la défendre ;</li>
<li>attendre, pour Pékin, signifie laisser aux États-Unis le temps de se
mobiliser efficacement dans la région, de rediriger le flux de munitions de
l’Ukraine vers Taïwan, et de voir les tensions démographiques chinoises
compliquer la mobilisation tant militaire qu&rsquo;industrielle ;</li>
<li>agir rapidement permettrait au contraire de profiter de la désorganisation
politique américaine, et des dissensions actuelles dans le camp occidental.</li>
</ul>
<p>Évidemment, si les États-Unis sont désorganisés politiquement, ils ne le sont
pas militairement. Et Taïwan est déjà lourdement armée, malgré la &ldquo;concurrence&rdquo;
ukrainienne pour les équipements critiques — en particulier les munitions (et
contrairement à l’Ukraine, Taïwan ne pourra évidemment pas être ravitaillée en
cours de conflit).</p>
<p>L’opération militaire nécessaire au contrôle de Taïwan resterait, dans tous les
cas, extrêmement complexe sur le plan logistique, très risquée militairement, et
probablement dévastatrice pour l’économie mondiale — celle de la Chine en
premier lieu.</p>
<p>Bref. C’est évidemment de la politique-fiction, avec toutes les réserves que
cela suppose. Je ne suis qu’un simple observateur, pas un spécialiste. Mais je
ne serais pas surpris que les choses s’accélèrent dans les mois à venir, et que
la &ldquo;fenêtre d’opportunité&rdquo; pour une invasion soit en réalité bien plus proche
qu’on ne le croyait jusque là.</p>
<p>Tout dépend sans doute de la manière dont Pékin évalue les risques : une crise
économique d&rsquo;une ampleur existentielle (qu’une invasion provoquerait, quelle
qu’en soit l’issue) pèse-t-elle plus ou moins lourd qu’une perte définitive de
cette fenêtre stratégique ?</p>
<p>Rien de définitif ici — je pense &ldquo;à voix haute&rdquo; pour tenter d’y voir plus clair.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A keyboard-first hyprland config for nerds</title>
      <link>https://log.2027a.net/posts/a-keyboard-first-hyprland-config-for-nerds/</link>
      <pubDate>Thu, 01 May 2025 22:56:12 -0400</pubDate>
      <guid>https://log.2027a.net/posts/a-keyboard-first-hyprland-config-for-nerds/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/isingasimplesong/dotfiles/tree/main/hypr&#34;&gt;This configuration&lt;/a&gt; crafts a highly efficient, keyboard-centric, tiling desktop
environment built around the &lt;a href=&#34;https://hyprland.org/&#34;&gt;Hyprland&lt;/a&gt; compositor,
featuring the popular &lt;a href=&#34;https://www.nordtheme.com/&#34;&gt;Nord color scheme&lt;/a&gt;, and
overall a modern, minimalist and polished &lt;em&gt;look &amp;amp; feel&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://log.2027a.net/img/hyprnord.png&#34;&gt;&lt;img alt=&#34;Hyprland Nord desktop&#34; loading=&#34;lazy&#34; src=&#34;https://log.2027a.net/img/hyprnord.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Functionally, it&amp;rsquo;s designed for speed and organization through tiling window
management. Interaction heavily relies on keyboard shortcuts, including
Vim-style navigation (HJKL) for moving focus and swapping windows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;There is an extensive use of &amp;ldquo;submaps&amp;rdquo; – modal keybinding layers triggered by
&lt;code&gt;Super + &amp;lt;Letter&amp;gt;&lt;/code&gt; (A/I/R/S) – which provide quick, context-specific access to
[A]pplications, custom [I]nformation scripts, [R]ofi functions, and 26
instantly accessible &amp;ldquo;magic&amp;rdquo; [S]cratchpads.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://github.com/isingasimplesong/dotfiles/tree/main/hypr">This configuration</a> crafts a highly efficient, keyboard-centric, tiling desktop
environment built around the <a href="https://hyprland.org/">Hyprland</a> compositor,
featuring the popular <a href="https://www.nordtheme.com/">Nord color scheme</a>, and
overall a modern, minimalist and polished <em>look &amp; feel</em>.</p>
<p><a href="/img/hyprnord.png"><img alt="Hyprland Nord desktop" loading="lazy" src="/img/hyprnord.png"></a></p>
<p>Functionally, it&rsquo;s designed for speed and organization through tiling window
management. Interaction heavily relies on keyboard shortcuts, including
Vim-style navigation (HJKL) for moving focus and swapping windows.</p>
<ul>
<li>
<p>There is an extensive use of &ldquo;submaps&rdquo; – modal keybinding layers triggered by
<code>Super + &lt;Letter&gt;</code> (A/I/R/S) – which provide quick, context-specific access to
[A]pplications, custom [I]nformation scripts, [R]ofi functions, and 26
instantly accessible &ldquo;magic&rdquo; [S]cratchpads.</p>
</li>
<li>
<p>The setup explicitly configures dynamic dual monitors (a laptop screen <code>eDP-1</code>
and an external <code>HDMI-A-1</code>) with a large number of workspaces (22 total: 1 to
22, mapped to 0-9 and F1-F12) that adapt their placement when the external
monitor is (dis)connected.</p>
</li>
<li>
<p>It includes clipboard history management <em>via</em>
<a href="https://github.com/sentriz/cliphist">cliphist</a>, power management &amp; auto lock
<em>via</em> <code>hypridle</code> and  <code>hyprlock</code>.</p>
</li>
<li>
<p>It also use <a href="https://github.com/hyprland-community/pyprland">pyperland</a> for preset
scratchpads.</p>
</li>
</ul>
<p>This configuration is best suited for <strong>(neo)vim users, developers, power
users, sysadmins and other CLI absolutists:</strong> Individuals who spend significant
time in terminals, IDEs, and browsers, and benefit immensely from rapid,
keyboard-driven context switching and command execution.</p>
<p>It&rsquo;s likely less suitable for users who strongly prefer mouse-driven
interaction or those brand new to Linux who might find the initial learning
curve for the keybindings steep.</p>
<p><strong>If someone were to adopt this configuration, they would likely want to personalize:</strong></p>
<ol>
<li><strong>Keybindings:</strong> Review <em>all</em> bindings, especially within the submaps
(<code>submap-a/i/r/s.conf</code>). Change bindings that conflict with muscle memory,
reassign the placeholder <code>notify-send</code> bindings to useful commands. The default
placeholder notification is there to make available keys easy to discover.</li>
<li><strong>Core Applications:</strong> Adapt the <code>$terminal</code>, <code>$webBrowser</code>, <code>$fileManager</code>
variables in <code>envvar.conf</code> to your own preferences. Update bindings in
<code>submap-a.conf</code> and <code>pyprland.toml</code> to launch your preferred applications.</li>
<li><strong>Custom Scripts:</strong> The various scripts called within submaps
(<code>notes-dmenu.sh</code>, <code>weather.sh</code>, etc.) are specific. Most of them <a href="https://github.com/isingasimplesong/duct-tape/">are
available here</a>. These need to
be reviewed, potentially rewritten to adjust for your environment, replaced
with different tools, or removed entirely.</li>
<li><strong>Appearance:</strong> Change the color scheme in <code>colors.conf</code>, adjust fonts,
gaps, borders, rounding in <code>look.conf</code> and <code>envvar.conf</code>. Customize the
associated Rofi theme(s) and Waybar configuration (<a href="https://github.com/isingasimplesong/dotfiles/tree/main/waybar">available
here</a> and
<a href="https://github.com/isingasimplesong/dotfiles/tree/main/rofi">here</a>). Modify
the <code>hyprlock.conf</code> background and styling.</li>
<li><strong>Input Settings:</strong> Modify keyboard layout, variant, or options (like
<code>caps:swapescape</code>) in <code>inputs.conf</code> to match personal hardware and
preferences. Adjust touchpad settings like <code>natural_scroll</code>.</li>
</ol>
<p><a href="https://github.com/isingasimplesong/dotfiles/tree/main/hypr">Head to the github repo for installation &amp; documentation</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Ticker: Un dashboard financier dans le terminal</title>
      <link>https://log.2027a.net/posts/ticker-un-dashboard-financier-dans-le-terminal/</link>
      <pubDate>Tue, 08 Apr 2025 16:17:47 -0400</pubDate>
      <guid>https://log.2027a.net/posts/ticker-un-dashboard-financier-dans-le-terminal/</guid>
      <description>&lt;p&gt;L&amp;rsquo;actualité étant ce qu&amp;rsquo;elle est, je ne suis sans doute pas le seul à garder un œil
sur les marchés. Si vous me connaissez vous savez que ce n&amp;rsquo;est pas pour suivre mon
portefeuille (inexistant), mais bien plutôt pour avoir une idée de l&amp;rsquo;état de
l&amp;rsquo;économie en temps réel.&lt;/p&gt;
&lt;p&gt;Pour cela, j&amp;rsquo;utilise essentiellement &lt;a href=&#34;https://github.com/achannarasappa/ticker&#34;&gt;ticker&lt;/a&gt;:
c&amp;rsquo;est un &lt;em&gt;dashboard&lt;/em&gt; qui permet de suivre toute sorte d&amp;rsquo;indices financiers.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://log.2027a.net/img/ticker.png&#34;&gt;&lt;img alt=&#34;Ticker main UI&#34; loading=&#34;lazy&#34; src=&#34;https://log.2027a.net/img/ticker.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ça se passe entiérement dans le terminal, à l&amp;rsquo;aide d&amp;rsquo;une belle
&lt;a href=&#34;https://log.2027a.net/tags/tui/&#34;&gt;TUI&lt;/a&gt; (&lt;em&gt;Terminal User Interface&lt;/em&gt;), ça se configure
en &lt;code&gt;yaml&lt;/code&gt;, dans un simple fichier texte, et c&amp;rsquo;est libre (GPL 3.0).&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>L&rsquo;actualité étant ce qu&rsquo;elle est, je ne suis sans doute pas le seul à garder un œil
sur les marchés. Si vous me connaissez vous savez que ce n&rsquo;est pas pour suivre mon
portefeuille (inexistant), mais bien plutôt pour avoir une idée de l&rsquo;état de
l&rsquo;économie en temps réel.</p>
<p>Pour cela, j&rsquo;utilise essentiellement <a href="https://github.com/achannarasappa/ticker">ticker</a>:
c&rsquo;est un <em>dashboard</em> qui permet de suivre toute sorte d&rsquo;indices financiers.</p>
<p><a href="/img/ticker.png"><img alt="Ticker main UI" loading="lazy" src="/img/ticker.png"></a></p>
<p>Ça se passe entiérement dans le terminal, à l&rsquo;aide d&rsquo;une belle
<a href="/tags/tui/">TUI</a> (<em>Terminal User Interface</em>), ça se configure
en <code>yaml</code>, dans un simple fichier texte, et c&rsquo;est libre (GPL 3.0).</p>
<p>Idéal pour <a href="https://github.com/isingasimplesong/dotfiles/blob/main/ticker.yaml">versionner cette config avec git</a>,
mais surtout, idéal pour s&rsquo;épargner les sites boursiers, pourris de publicité,
de <em>scams</em> et de propagande capitaliste.</p>
<p>Voici le <a href="https://github.com/isingasimplesong/dotfiles/blob/main/ticker.yaml">fichier de configuration</a> que j&rsquo;utilise au moment d&rsquo;écrire ce post. Il me
permet d&rsquo;avoir par défaut une vue d&rsquo;ensemble avec les principaux indices que
je souhaite suivre, et d&rsquo;accéder facilement à des <em>dashboards</em> spécialisés (par type,
par zone géographique, par secteurs économiques&hellip;).</p>
<p>Il est assez exhaustif, et j&rsquo;essaye d&rsquo;inclure des commentaires utiles pour permettre
une adaptation facile en fonction des besoins du moment. Vous devriez pouvoir vous
l&rsquo;approprier facilement.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Nommer le capitalisme</title>
      <link>https://log.2027a.net/posts/nommer-le-capitalisme/</link>
      <pubDate>Mon, 07 Apr 2025 00:36:22 -0400</pubDate>
      <guid>https://log.2027a.net/posts/nommer-le-capitalisme/</guid>
      <description>&lt;p&gt;Je suis toujours un peu irrité par l&amp;rsquo;usage de &amp;ldquo;néolibéralisme&amp;rdquo; pour désigner
tout les aspects négatifs du capitalisme, qu&amp;rsquo;ils en relèvent effectivement ou
non&lt;/p&gt;
&lt;p&gt;Je sais bien que le mot &lt;strong&gt;capitalisme&lt;/strong&gt; lui-même fait souvent peur, mais si c&amp;rsquo;est
ce que vous voulez vraiment critiquer, utilisez-le. Le concept mérite qu&amp;rsquo;on lui
attribue ses responsabilités. Et si c&amp;rsquo;est un phénomène plus spécifique qui est
visé, le désigner correctement sera sans doute plus utile que de le recouvrir
par ce mot devenu un totem&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Je suis toujours un peu irrité par l&rsquo;usage de &ldquo;néolibéralisme&rdquo; pour désigner
tout les aspects négatifs du capitalisme, qu&rsquo;ils en relèvent effectivement ou
non</p>
<p>Je sais bien que le mot <strong>capitalisme</strong> lui-même fait souvent peur, mais si c&rsquo;est
ce que vous voulez vraiment critiquer, utilisez-le. Le concept mérite qu&rsquo;on lui
attribue ses responsabilités. Et si c&rsquo;est un phénomène plus spécifique qui est
visé, le désigner correctement sera sans doute plus utile que de le recouvrir
par ce mot devenu un totem</p>
<p>Le <strong>néolibéralisme</strong>, c&rsquo;est essentiellement la réduction de l&rsquo;état aux portions
qui peuvent être mises au service des marchés et de la financiarisation de l&rsquo;économie.
Cet état peut être fort, mais il est restreint à ses fonctions répressives et
normatives. Les tarifs de Trump n&rsquo;ont rien de néolibéraux: C&rsquo;est plutôt un
avatar moderne du <strong>mercantilisme</strong>, qui vise à tordre les marchés en faveur des
intérêts que l&rsquo;on défend. On peut vouloir les désigner comme une déclinaison
du capitalisme, ou les spécifier mieux, mais appeler ça du néolibéralisme est
simplement un contresens</p>
]]></content:encoded>
    </item>
    <item>
      <title>La propriété intellectuelle protège les puissants, pas les créateurs</title>
      <link>https://log.2027a.net/posts/la-propri%C3%A9t%C3%A9-intellectuelle-prot%C3%A8ge-les-puissants-pas-les-cr%C3%A9ateurs/</link>
      <pubDate>Sun, 30 Mar 2025 14:14:35 -0400</pubDate>
      <guid>https://log.2027a.net/posts/la-propri%C3%A9t%C3%A9-intellectuelle-prot%C3%A8ge-les-puissants-pas-les-cr%C3%A9ateurs/</guid>
      <description>&lt;p&gt;Je continue d&amp;rsquo;être affligé par la quasi unanimité à gauche pour défendre le
régime de propriété intellectuelle, à chaque fois que l&amp;rsquo;IA lui fait une
nouvelle offense.&lt;/p&gt;
&lt;p&gt;Pourquoi défendre ainsi une pénurie entièrement artificielle,
avec tout ce que ça implique d&amp;rsquo;effets négatifs, plutôt que de s&amp;rsquo;appuyer sur son
obsolescence de plus en plus manifeste pour faire avancer un agenda
progressiste, tel qu&amp;rsquo;un système socialisé de rémunération des artistes, un
revenu universel, la réduction de la durée de protection des brevets (voire
leur extinction), etc. ?&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Je continue d&rsquo;être affligé par la quasi unanimité à gauche pour défendre le
régime de propriété intellectuelle, à chaque fois que l&rsquo;IA lui fait une
nouvelle offense.</p>
<p>Pourquoi défendre ainsi une pénurie entièrement artificielle,
avec tout ce que ça implique d&rsquo;effets négatifs, plutôt que de s&rsquo;appuyer sur son
obsolescence de plus en plus manifeste pour faire avancer un agenda
progressiste, tel qu&rsquo;un système socialisé de rémunération des artistes, un
revenu universel, la réduction de la durée de protection des brevets (voire
leur extinction), etc. ?</p>
<p><img alt="The statute of Anne" loading="lazy" src="/img/statute-of-anne.png"></p>
<p>Ce n&rsquo;est pas comme si le système actuel réussissait si bien aux artistes
et aux petits créateurs qui défendent paradoxalement un
système qui les exploite : l&rsquo;immense majorité des revenus sont captés par une
poignée de privilégiés quand l&rsquo;essentiel des autres tirent le diable par la
queue, doivent avoir un autre job ou accepter de travailler dans des conditions
iniques pour espérer seulement survivre. Dans le même temps, et grâce à cette
dynamique perverse, les Disney, Microsoft et Pfizer de ce monde profitent de ce
paravent moral pour se gaver de profits en verrouillant artificiellement des
idées derrière une barrière légale, privant le reste du monde d&rsquo;innovation
rapide, de médicaments à bas prix, de contenu scientifique ouvert&hellip;</p>
<p>Évidemment, ça ne signifie pas que Openai agit correctement. Loin de là : leurs
abus sont flagrants et manifestes. Mais diagnostiquer correctement leur abus de
pouvoir (et celui de leurs concurrents) n&rsquo;aboutit pas nécessairement à la
conclusion qu&rsquo;il faille défendre la propriété intellectuelle. Rien n&rsquo;empêche de
prendre la voie opposée, et d&rsquo;exiger que ces systèmes soient dans le domaine
public, puisqu&rsquo;ils sont le résultat de la compilation des idées disponibles
publiquement</p>
<p>Je parle bien sûr d&rsquo;IA, puisque c&rsquo;est l&rsquo;actualité, avec la
Ghiblification virale qui s&rsquo;est répandue partout ces derniers jours, mais en
réalité je ne vois pas de domaine où la restriction artificielle de la
diffusion des idées puisse être bénéfique, et je défends son abolition depuis
près de 25 ans</p>
<p>Il faut se souvenir que la propriété intellectuelle émerge à
une époque où le principal obstacle à la diffusion d&rsquo;une idée, c&rsquo;est sa
diffusion matérielle : la copie ou l&rsquo;impression des idées, et sa distribution
physique. Cette contrainte matérielle rendait socialement utile la propriété
intellectuelle, créant un incitatif pour sa diffusion, en rémunérant la vente
du médium. (<a href="https://fr.m.wikipedia.org/wiki/Copyright_Act_de_1710">The statute of Anne, premier acte législatif protégeant la
propriété intellectuelle</a>
date de 1710). Mais nous ne vivons plus dans ce monde là,
depuis quelques années déjà. Cette contrainte matérielle
n&rsquo;existe pratiquement plus, et le mécanisme qui visait à la contrebalancer ne
sert plus qu&rsquo;à maintenir la domination artificielle de quelques puissants sur
l&rsquo;ensemble du reste d&rsquo;entre nous De la même façon que les &ldquo;mom and pop&rdquo;
propriétaires d&rsquo;immeubles à revenus servent (généralement à leur insu) de
cache-sexe aux landlord corporatifs outrageusement abusifs, les petits
créateurs qui peinent à joindre les deux bouts servent (généralement à leur
insu) de cache-sexe aux abus de Disney, Monsanto, aux prix délirants des
médicaments ou des revues scientifiques.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Sauvegardes avec rsync</title>
      <link>https://log.2027a.net/posts/sauvegardes-avec-rsync/</link>
      <pubDate>Sat, 22 Mar 2025 09:03:28 -0400</pubDate>
      <guid>https://log.2027a.net/posts/sauvegardes-avec-rsync/</guid>
      <description>&lt;p&gt;J&amp;rsquo;ai récement eu quelques petits problèmes avec un serveur (une sombre histoire de
RAM corrompue), et ça a été l&amp;rsquo;occasion de peaufiner un &lt;em&gt;helper script&lt;/em&gt; pour &lt;code&gt;rsync&lt;/code&gt;
que j&amp;rsquo;utilise depuis un moment.&lt;/p&gt;
&lt;p&gt;Ce script est loin d&amp;rsquo;être parfait (en particulier, il ne vérifie pas le contenu des
source &amp;amp; exclude files), mais c&amp;rsquo;est une bonne base pour un système de sauvegarde
robuste.&lt;/p&gt;
&lt;p&gt;Ici, je m&amp;rsquo;en sers en conjonction avec &lt;a href=&#34;https://docs.duplicati.com/&#34;&gt;duplicati&lt;/a&gt; pour
une sauvegarde automatique du contenu de mes serveurs et de mon laptop, mais vous
pourriez l&amp;rsquo;utiliser autrement. Vous le trouverez
&lt;a href=&#34;https://github.com/isingasimplesong/duct-tape/blob/main/rsync_backup.sh&#34;&gt;dans mon repo &lt;em&gt;duct-tape&lt;/em&gt; sur github&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>J&rsquo;ai récement eu quelques petits problèmes avec un serveur (une sombre histoire de
RAM corrompue), et ça a été l&rsquo;occasion de peaufiner un <em>helper script</em> pour <code>rsync</code>
que j&rsquo;utilise depuis un moment.</p>
<p>Ce script est loin d&rsquo;être parfait (en particulier, il ne vérifie pas le contenu des
source &amp; exclude files), mais c&rsquo;est une bonne base pour un système de sauvegarde
robuste.</p>
<p>Ici, je m&rsquo;en sers en conjonction avec <a href="https://docs.duplicati.com/">duplicati</a> pour
une sauvegarde automatique du contenu de mes serveurs et de mon laptop, mais vous
pourriez l&rsquo;utiliser autrement. Vous le trouverez
<a href="https://github.com/isingasimplesong/duct-tape/blob/main/rsync_backup.sh">dans mon repo <em>duct-tape</em> sur github</a></p>
<h2 id="le-fichier-de-configuration">Le fichier de configuration</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">BACKUP_MOUNT_POINT=&#34;/path/to/mountpoint&#34;
</span></span><span class="line"><span class="cl">BACKUP_DESTINATION=&#34;/path/to/mointpoint/and/final/destination&#34;
</span></span><span class="line"><span class="cl">BACKUP_SOURCE_FILE=&#34;/home/user/.config/rsync_source.list&#34;
</span></span><span class="line"><span class="cl">EXCLUDE_FILE=&#34;/home/user/.config/rsync_exclude.list&#34;
</span></span><span class="line"><span class="cl">BACKUP_LOG_FILE=&#34;/home/user/.local/logs/rsync_backup.log&#34;
</span></span><span class="line"><span class="cl">LOGROTATE_MAX_SIZE=2  # en Mo
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># Notifications (facultatif)
</span></span><span class="line"><span class="cl">PUSHOVER_API_TOKEN=&#34;xxx-xxx-xxx&#34;
</span></span><span class="line"><span class="cl">PUSHOVER_USER_KEY=&#34;xxx-xxx-xxx&#34;
</span></span><span class="line"><span class="cl">NOTIFY_TITLE=&#34;Rsync Backup&#34;
</span></span></code></pre></div><h2 id="le-script">Le script</h2>
<p><code>rsync_backup.sh</code> :</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/usr/bin/env bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="c1"># Rsync backup script with dry-run, log rotation, locking, and pushover notification (on failure only)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">set</span> -euo pipefail
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">CONF</span><span class="o">=</span><span class="s2">&#34;</span><span class="si">${</span><span class="nv">RSYNC_CONF</span><span class="k">:-</span><span class="nv">$HOME</span><span class="p">/.config/rsync_backup.conf</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">LOCKFILE</span><span class="o">=</span><span class="s2">&#34;/tmp/rsync_backup.lock&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">DRY_RUN</span><span class="o">=</span><span class="m">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">usage<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    cat <span class="s">&lt;&lt;EOF
</span></span></span><span class="line"><span class="cl"><span class="s">Usage: $0 [--dry-run] [--help]
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">Options:
</span></span></span><span class="line"><span class="cl"><span class="s">  --dry-run        Simulate the rsync backup without modifying any files
</span></span></span><span class="line"><span class="cl"><span class="s">  --help, -h       Show this help message and exit
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">Description:
</span></span></span><span class="line"><span class="cl"><span class="s">  This script performs an rsync-based backup based on paths listed in a source file.
</span></span></span><span class="line"><span class="cl"><span class="s">  It supports log rotation, pushover notifications (only on failure), and ensures only one instance runs at a time.
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">Configuration:
</span></span></span><span class="line"><span class="cl"><span class="s">  The script expects a configuration file exporting the following variables:
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">    BACKUP_MOUNT_POINT     # mount point where backup destination is available
</span></span></span><span class="line"><span class="cl"><span class="s">    BACKUP_DESTINATION     # destination directory for rsync backup
</span></span></span><span class="line"><span class="cl"><span class="s">    BACKUP_SOURCE_FILE     # file listing source paths to back up (one per line)
</span></span></span><span class="line"><span class="cl"><span class="s">    EXCLUDE_FILE           # rsync exclude patterns (one per line)
</span></span></span><span class="line"><span class="cl"><span class="s">    BACKUP_LOG_FILE        # path to log file
</span></span></span><span class="line"><span class="cl"><span class="s">    LOGROTATE_MAX_SIZE     # max log file size in MB before rotation
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">  Optional (for pushover notifications):
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">    PUSHOVER_USER_KEY
</span></span></span><span class="line"><span class="cl"><span class="s">    PUSHOVER_API_TOKEN
</span></span></span><span class="line"><span class="cl"><span class="s">    NOTIFY_TITLE           # (optional) title shown in push notifications
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">Default configuration file path: \$HOME/.config/rsync_backup.conf
</span></span></span><span class="line"><span class="cl"><span class="s">Example configuration file : https://log.2027a.net/posts/sauvegardes-avec-rsync/#le-fichier-de-configuration
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="m">0</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Parse arguments</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="o">[[</span> <span class="nv">$#</span> -gt <span class="m">0</span> <span class="o">]]</span><span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="k">case</span> <span class="s2">&#34;</span><span class="nv">$1</span><span class="s2">&#34;</span> in
</span></span><span class="line"><span class="cl">    --dry-run<span class="o">)</span>
</span></span><span class="line"><span class="cl">        <span class="nv">DRY_RUN</span><span class="o">=</span><span class="m">1</span>
</span></span><span class="line"><span class="cl">        <span class="nb">shift</span>
</span></span><span class="line"><span class="cl">        <span class="p">;;</span>
</span></span><span class="line"><span class="cl">    --help <span class="p">|</span> -h<span class="o">)</span>
</span></span><span class="line"><span class="cl">        usage
</span></span><span class="line"><span class="cl">        <span class="p">;;</span>
</span></span><span class="line"><span class="cl">    *<span class="o">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;Unknown option: </span><span class="nv">$1</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">        usage
</span></span><span class="line"><span class="cl">        <span class="p">;;</span>
</span></span><span class="line"><span class="cl">    <span class="k">esac</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> ! -f <span class="s2">&#34;</span><span class="nv">$CONF</span><span class="s2">&#34;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;Configuration file not found: </span><span class="nv">$CONF</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">source</span> <span class="s2">&#34;</span><span class="nv">$CONF</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Check required commands</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> cmd in rsync mountpoint curl gzip stat flock<span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="nb">command</span> -v <span class="s2">&#34;</span><span class="nv">$cmd</span><span class="s2">&#34;</span> &gt;/dev/null <span class="o">||</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;Missing command: </span><span class="nv">$cmd</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Check required vars</span>
</span></span><span class="line"><span class="cl"><span class="nv">required_vars</span><span class="o">=(</span>BACKUP_MOUNT_POINT BACKUP_DESTINATION BACKUP_SOURCE_FILE EXCLUDE_FILE BACKUP_LOG_FILE LOGROTATE_MAX_SIZE<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> var in <span class="s2">&#34;</span><span class="si">${</span><span class="nv">required_vars</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="o">[</span> -z <span class="s2">&#34;</span><span class="si">${</span><span class="p">!var</span><span class="k">:-</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;Missing required variable in config: </span><span class="nv">$var</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Optional pushover</span>
</span></span><span class="line"><span class="cl"><span class="nv">HAS_PUSHOVER</span><span class="o">=</span><span class="m">0</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> -n <span class="s2">&#34;</span><span class="si">${</span><span class="nv">PUSHOVER_USER_KEY</span><span class="k">:-</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">&amp;&amp;</span> -n <span class="s2">&#34;</span><span class="si">${</span><span class="nv">PUSHOVER_API_TOKEN</span><span class="k">:-</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nv">HAS_PUSHOVER</span><span class="o">=</span><span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Functions</span>
</span></span><span class="line"><span class="cl">log<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;</span><span class="k">$(</span>date <span class="s1">&#39;+%Y-%m-%d %H:%M:%S&#39;</span><span class="k">)</span><span class="s2"> - </span><span class="nv">$1</span><span class="s2"> - </span><span class="nv">$2</span><span class="s2">&#34;</span> &gt;&gt;<span class="s2">&#34;</span><span class="nv">$BACKUP_LOG_FILE</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">notify_pushover<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="o">[</span> <span class="s2">&#34;</span><span class="nv">$HAS_PUSHOVER</span><span class="s2">&#34;</span> -eq <span class="m">1</span> <span class="o">]</span> <span class="o">||</span> <span class="k">return</span>
</span></span><span class="line"><span class="cl">    curl -s <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        --form-string <span class="s2">&#34;token=</span><span class="nv">$PUSHOVER_API_TOKEN</span><span class="s2">&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        --form-string <span class="s2">&#34;user=</span><span class="nv">$PUSHOVER_USER_KEY</span><span class="s2">&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        --form-string <span class="s2">&#34;message=</span><span class="nv">$1</span><span class="s2">&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        --form-string <span class="s2">&#34;title=</span><span class="si">${</span><span class="nv">NOTIFY_TITLE</span><span class="k">:-</span><span class="nv">rsync_backup</span><span class="si">}</span><span class="s2">&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        https://api.pushover.net/1/messages.json &gt;/dev/null
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">log_rotate<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="nb">local</span> <span class="nv">max_size</span><span class="o">=</span><span class="k">$((</span>LOGROTATE_MAX_SIZE <span class="o">*</span> <span class="m">1024</span> <span class="o">*</span> <span class="m">1024</span><span class="k">))</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="o">[</span> -f <span class="s2">&#34;</span><span class="nv">$BACKUP_LOG_FILE</span><span class="s2">&#34;</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="o">[</span> <span class="s2">&#34;</span><span class="k">$(</span>stat -c%s <span class="s2">&#34;</span><span class="nv">$BACKUP_LOG_FILE</span><span class="s2">&#34;</span><span class="k">)</span><span class="s2">&#34;</span> -ge <span class="s2">&#34;</span><span class="nv">$max_size</span><span class="s2">&#34;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> i in <span class="m">3</span> <span class="m">2</span> 1<span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">            <span class="o">[</span> -f <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BACKUP_LOG_FILE</span><span class="p">%.log</span><span class="si">}</span><span class="s2">.</span><span class="nv">$i</span><span class="s2">.gz&#34;</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> mv <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BACKUP_LOG_FILE</span><span class="p">%.log</span><span class="si">}</span><span class="s2">.</span><span class="nv">$i</span><span class="s2">.gz&#34;</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BACKUP_LOG_FILE</span><span class="p">%.log</span><span class="si">}</span><span class="s2">.</span><span class="k">$((</span>i <span class="o">+</span> <span class="m">1</span><span class="k">))</span><span class="s2">.gz&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="k">done</span>
</span></span><span class="line"><span class="cl">        gzip -c <span class="s2">&#34;</span><span class="nv">$BACKUP_LOG_FILE</span><span class="s2">&#34;</span> &gt;<span class="s2">&#34;</span><span class="si">${</span><span class="nv">BACKUP_LOG_FILE</span><span class="p">%.log</span><span class="si">}</span><span class="s2">.1.gz&#34;</span>
</span></span><span class="line"><span class="cl">        : &gt;<span class="s2">&#34;</span><span class="nv">$BACKUP_LOG_FILE</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">run_rsync<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="nb">local</span> <span class="nv">failures</span><span class="o">=</span><span class="m">0</span>
</span></span><span class="line"><span class="cl">    <span class="nb">local</span> <span class="nv">success</span><span class="o">=</span><span class="m">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">while</span> <span class="nv">IFS</span><span class="o">=</span> <span class="nb">read</span> -r src_path <span class="o">||</span> <span class="o">[[</span> -n <span class="s2">&#34;</span><span class="nv">$src_path</span><span class="s2">&#34;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">        <span class="o">[</span> -z <span class="s2">&#34;</span><span class="nv">$src_path</span><span class="s2">&#34;</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="k">continue</span>
</span></span><span class="line"><span class="cl">        <span class="o">[</span> ! -e <span class="s2">&#34;</span><span class="nv">$src_path</span><span class="s2">&#34;</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> log <span class="s2">&#34;SKIP&#34;</span> <span class="s2">&#34;Path not found: </span><span class="nv">$src_path</span><span class="s2">&#34;</span> <span class="o">&amp;&amp;</span> <span class="k">continue</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="o">[</span> <span class="s2">&#34;</span><span class="nv">$DRY_RUN</span><span class="s2">&#34;</span> -eq <span class="m">1</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">            <span class="nv">rsync_args</span><span class="o">=(</span>-anx --delete --exclude-from <span class="s2">&#34;</span><span class="nv">$EXCLUDE_FILE</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$src_path</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$BACKUP_DESTINATION</span><span class="s2">&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">else</span>
</span></span><span class="line"><span class="cl">            <span class="nv">rsync_args</span><span class="o">=(</span>-axs --delete --exclude-from <span class="s2">&#34;</span><span class="nv">$EXCLUDE_FILE</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$src_path</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="nv">$BACKUP_DESTINATION</span><span class="s2">&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="nv">RSYNC_OUTPUT</span><span class="o">=</span><span class="k">$(</span>rsync <span class="s2">&#34;</span><span class="si">${</span><span class="nv">rsync_args</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&#34;</span> 2&gt;<span class="p">&amp;</span>1<span class="k">)</span>
</span></span><span class="line"><span class="cl">        <span class="nv">rsync_exit</span><span class="o">=</span><span class="nv">$?</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="o">[</span> <span class="nv">$rsync_exit</span> -eq <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">            log <span class="s2">&#34;OK&#34;</span> <span class="s2">&#34;Synced: </span><span class="nv">$src_path</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="nv">success</span><span class="o">=</span><span class="k">$((</span>success <span class="o">+</span> <span class="m">1</span><span class="k">))</span>
</span></span><span class="line"><span class="cl">        <span class="k">else</span>
</span></span><span class="line"><span class="cl">            log <span class="s2">&#34;ERROR&#34;</span> <span class="s2">&#34;Failed: </span><span class="nv">$src_path</span><span class="s2">: </span><span class="nv">$RSYNC_OUTPUT</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="nv">failures</span><span class="o">=</span><span class="k">$((</span>failures <span class="o">+</span> <span class="m">1</span><span class="k">))</span>
</span></span><span class="line"><span class="cl">        <span class="k">fi</span>
</span></span><span class="line"><span class="cl">    <span class="k">done</span> &lt;<span class="s2">&#34;</span><span class="nv">$BACKUP_SOURCE_FILE</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;</span><span class="nv">$success</span><span class="s2"> success, </span><span class="nv">$failures</span><span class="s2"> failure(s)&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nv">$failures</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">main<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    log_rotate
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Secure lockfile creation</span>
</span></span><span class="line"><span class="cl">    <span class="nb">umask</span> <span class="m">0077</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> ! touch <span class="s2">&#34;</span><span class="nv">$LOCKFILE</span><span class="s2">&#34;</span> 2&gt;/dev/null<span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;Error: Cannot create lockfile at </span><span class="nv">$LOCKFILE</span><span class="s2">&#34;</span> &gt;<span class="p">&amp;</span><span class="m">2</span>
</span></span><span class="line"><span class="cl">        <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Open the lock file and assign it to FD9</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exec</span> 9&gt;<span class="s2">&#34;</span><span class="nv">$LOCKFILE</span><span class="s2">&#34;</span> <span class="o">||</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;Error: Cannot open lockfile: </span><span class="nv">$LOCKFILE</span><span class="s2">&#34;</span> &gt;<span class="p">&amp;</span><span class="m">2</span>
</span></span><span class="line"><span class="cl">        <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Try to acquire the lock on FD9</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> ! flock -n 9<span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;Another backup is already running (lockfile in use).&#34;</span> &gt;<span class="p">&amp;</span><span class="m">2</span>
</span></span><span class="line"><span class="cl">        <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># Ensure lockfile is deleted on exit</span>
</span></span><span class="line"><span class="cl">    cleanup<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">        rm -f <span class="s2">&#34;</span><span class="nv">$LOCKFILE</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span>
</span></span><span class="line"><span class="cl">    <span class="nb">trap</span> cleanup EXIT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="o">[</span> ! -f <span class="s2">&#34;</span><span class="nv">$BACKUP_SOURCE_FILE</span><span class="s2">&#34;</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> log <span class="s2">&#34;ERROR&#34;</span> <span class="s2">&#34;Missing source file&#34;</span> <span class="o">&amp;&amp;</span> <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl">    <span class="o">[</span> ! -f <span class="s2">&#34;</span><span class="nv">$EXCLUDE_FILE</span><span class="s2">&#34;</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> log <span class="s2">&#34;ERROR&#34;</span> <span class="s2">&#34;Missing exclude file&#34;</span> <span class="o">&amp;&amp;</span> <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">if</span> ! mountpoint -q <span class="s2">&#34;</span><span class="nv">$BACKUP_MOUNT_POINT</span><span class="s2">&#34;</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">        log <span class="s2">&#34;ERROR&#34;</span> <span class="s2">&#34;Mount point </span><span class="nv">$BACKUP_MOUNT_POINT</span><span class="s2"> not found&#34;</span>
</span></span><span class="line"><span class="cl">        notify_pushover <span class="s2">&#34;Backup failed: </span><span class="nv">$BACKUP_MOUNT_POINT</span><span class="s2"> not mounted&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    log <span class="s2">&#34;START&#34;</span> <span class="s2">&#34;Rsync backup started (dry-run=</span><span class="nv">$DRY_RUN</span><span class="s2">)&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nv">result</span><span class="o">=</span><span class="k">$(</span>run_rsync<span class="k">)</span>
</span></span><span class="line"><span class="cl">    <span class="nv">status</span><span class="o">=</span><span class="nv">$?</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    log <span class="s2">&#34;END&#34;</span> <span class="s2">&#34;Backup complete. </span><span class="nv">$result</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="o">[</span> <span class="nv">$status</span> -ne <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">        notify_pushover <span class="s2">&#34;Rsync backup failed: </span><span class="nv">$result</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;</span><span class="nv">$result</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="nv">$status</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">main
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Les voyageurs de l&#39;impériale</title>
      <link>https://log.2027a.net/posts/les-voyageurs-de-limp%C3%A9riale/</link>
      <pubDate>Mon, 03 Mar 2025 15:36:46 -0500</pubDate>
      <guid>https://log.2027a.net/posts/les-voyageurs-de-limp%C3%A9riale/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Avoir stupidement cru à quarante ans passés, à cette invention romanesque, à cette folie de l&amp;rsquo;amour. Il ne se le pardonnait pas. Ni aucune de ces pensées burlesques et délirantes auxquelles il s&amp;rsquo;était laissé aller. Tout d&amp;rsquo;un coup. Comme un nageur qui perd pied dans les rêves. Tout ce qu&amp;rsquo;il savait de la vie, toute l&amp;rsquo;expérience coûteuse des années, toute la science atroce des choses quotidiennes, il l&amp;rsquo;avait brusquement oublié, plus qu&amp;rsquo;oublié, mieux que désappris, plus profondément ignoré à nouveau que s&amp;rsquo;il ne l&amp;rsquo;avait jamais su. Négligeant les données pesantes de l&amp;rsquo;existence, comme des chaines tombées, il avait imaginé une aventure enfantine, un monde fantastique, ou Blanche et lui se rejoignaient comme dans les chansons, comme si les gens n&amp;rsquo;avaient pas été stupides, laids, menteurs, l&amp;rsquo;amour une chiennerie, la société un traquenard, un piège immense d&amp;rsquo;où l&amp;rsquo;on ne sort pas.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p>Avoir stupidement cru à quarante ans passés, à cette invention romanesque, à cette folie de l&rsquo;amour. Il ne se le pardonnait pas. Ni aucune de ces pensées burlesques et délirantes auxquelles il s&rsquo;était laissé aller. Tout d&rsquo;un coup. Comme un nageur qui perd pied dans les rêves. Tout ce qu&rsquo;il savait de la vie, toute l&rsquo;expérience coûteuse des années, toute la science atroce des choses quotidiennes, il l&rsquo;avait brusquement oublié, plus qu&rsquo;oublié, mieux que désappris, plus profondément ignoré à nouveau que s&rsquo;il ne l&rsquo;avait jamais su. Négligeant les données pesantes de l&rsquo;existence, comme des chaines tombées, il avait imaginé une aventure enfantine, un monde fantastique, ou Blanche et lui se rejoignaient comme dans les chansons, comme si les gens n&rsquo;avaient pas été stupides, laids, menteurs, l&rsquo;amour une chiennerie, la société un traquenard, un piège immense d&rsquo;où l&rsquo;on ne sort pas.</p></blockquote>
<p>Louis Aragon</p>
]]></content:encoded>
    </item>
    <item>
      <title>Remarques sur la propagande</title>
      <link>https://log.2027a.net/posts/remarques-sur-la-propagande/</link>
      <pubDate>Sat, 22 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://log.2027a.net/posts/remarques-sur-la-propagande/</guid>
      <description>&lt;p&gt;Quelques remarques à propos de la propagande, puisque c&amp;rsquo;est de saison, histoire
de s&amp;rsquo;engueuler sur de bonnes bases :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Propagande&#34; loading=&#34;lazy&#34; src=&#34;https://log.2027a.net/img/propagande.jpg&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vérité et propagande ne sont pas mutuellement exclusifs : quelque chose de
vrai peut-être utilisé à des fins de propagande,&lt;/li&gt;
&lt;li&gt;On peut relayer de la propagande sans s&amp;rsquo;en apercevoir, que celle ci soit
vraie ou non,&lt;/li&gt;
&lt;li&gt;La propagande fonctionne d&amp;rsquo;autant mieux qu&amp;rsquo;elle correspond a des croyances
préexistantes. Elle ne cherche pas forcément à convaincre de zéro mais à
renforcer des idées déjà présentes,&lt;/li&gt;
&lt;li&gt;Le risque de relayer de la propagande contre son gré est d&amp;rsquo;autant plus grand
que celle-ci s&amp;rsquo;appuie, pour tout ou partie, sur la vérité,&lt;/li&gt;
&lt;li&gt;On peut évoquer des choses vraies, utilisées à des fins de propagande par
ailleurs, sans pour autant faire soi-même de la propagande,&lt;/li&gt;
&lt;li&gt;Il existe une propagande implicite: Certains récits dominants ou cadres
d&amp;rsquo;interprétation sont considérés comme &amp;ldquo;neutres&amp;rdquo; alors qu&amp;rsquo;ils relèvent en
réalité d&amp;rsquo;une vision particulière du monde,&lt;/li&gt;
&lt;li&gt;La propagande peut être passive: Le simple choix de ce qui est mis en avant
ou passé sous silence dans l’espace public façonne les perceptions sans qu&amp;rsquo;il y
ait nécessairement une intention consciente,&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;existence de la propagande d&amp;rsquo;un camp n&amp;rsquo;annule pas l&amp;rsquo;existence de la
propagande du camp adverse,&lt;/li&gt;
&lt;li&gt;La propagande n&amp;rsquo;est pas nécessairement mauvaise. Si vous partagez les
objectifs de la propagande en question, vous la trouverez sans doute bonne&lt;/li&gt;
&lt;li&gt;Il est plus difficile d&amp;rsquo;identifier la propagande d&amp;rsquo;un camp auquel on
s&amp;rsquo;identifie, d&amp;rsquo;autant plus si elle est passive ou implicite, ou qu&amp;rsquo;on la trouve
bonne,&lt;/li&gt;
&lt;li&gt;Il est illusoire de se croire étanche à la propagande.&lt;/li&gt;
&lt;/ul&gt;</description>
      <content:encoded><![CDATA[<p>Quelques remarques à propos de la propagande, puisque c&rsquo;est de saison, histoire
de s&rsquo;engueuler sur de bonnes bases :</p>
<p><img alt="Propagande" loading="lazy" src="/img/propagande.jpg"></p>
<ul>
<li>Vérité et propagande ne sont pas mutuellement exclusifs : quelque chose de
vrai peut-être utilisé à des fins de propagande,</li>
<li>On peut relayer de la propagande sans s&rsquo;en apercevoir, que celle ci soit
vraie ou non,</li>
<li>La propagande fonctionne d&rsquo;autant mieux qu&rsquo;elle correspond a des croyances
préexistantes. Elle ne cherche pas forcément à convaincre de zéro mais à
renforcer des idées déjà présentes,</li>
<li>Le risque de relayer de la propagande contre son gré est d&rsquo;autant plus grand
que celle-ci s&rsquo;appuie, pour tout ou partie, sur la vérité,</li>
<li>On peut évoquer des choses vraies, utilisées à des fins de propagande par
ailleurs, sans pour autant faire soi-même de la propagande,</li>
<li>Il existe une propagande implicite: Certains récits dominants ou cadres
d&rsquo;interprétation sont considérés comme &ldquo;neutres&rdquo; alors qu&rsquo;ils relèvent en
réalité d&rsquo;une vision particulière du monde,</li>
<li>La propagande peut être passive: Le simple choix de ce qui est mis en avant
ou passé sous silence dans l’espace public façonne les perceptions sans qu&rsquo;il y
ait nécessairement une intention consciente,</li>
<li>L&rsquo;existence de la propagande d&rsquo;un camp n&rsquo;annule pas l&rsquo;existence de la
propagande du camp adverse,</li>
<li>La propagande n&rsquo;est pas nécessairement mauvaise. Si vous partagez les
objectifs de la propagande en question, vous la trouverez sans doute bonne</li>
<li>Il est plus difficile d&rsquo;identifier la propagande d&rsquo;un camp auquel on
s&rsquo;identifie, d&rsquo;autant plus si elle est passive ou implicite, ou qu&rsquo;on la trouve
bonne,</li>
<li>Il est illusoire de se croire étanche à la propagande.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Apple supprime le chiffrement de bout en bout à la demande du gouvernement britanique</title>
      <link>https://log.2027a.net/posts/apple-supprime-le-chiffrement-de-bout-en-bout-%C3%A0-la-demande-du-gouvernement-britanique/</link>
      <pubDate>Fri, 21 Feb 2025 15:10:55 -0500</pubDate>
      <guid>https://log.2027a.net/posts/apple-supprime-le-chiffrement-de-bout-en-bout-%C3%A0-la-demande-du-gouvernement-britanique/</guid>
      <description>&lt;p&gt;Je tape généralement sur Google, à mon avis la compagnie la plus nuisible en
général sur &lt;a href=&#34;https://2027a.net/tech/vie_privee_et_securite&#34;&gt;le plan de la vie privée&lt;/a&gt;, mais cette fois c&amp;rsquo;est au tour de Apple
d&amp;rsquo;en prendre pour son grade.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Apple supprime le chiffrement de bout en bout à la demande du gouvernement britanique&#34; loading=&#34;lazy&#34; src=&#34;https://log.2027a.net/img/apple-uk.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Malgré la réputation, globalement véridique, d&amp;rsquo;un bon niveau de sécurité des
produits Apple, celle-ci &lt;a href=&#34;https://www.reuters.com/technology/apple-removing-end-to-end-cloud-encryption-feature-uk-bloomberg-news-reports-2025-02-21/&#34;&gt;retire la fonctionnalité de chiffrement de bout en
bout de son cloud&lt;/a&gt;, au Royaume-Uni, à la demande du gouvernement. Créant de fait
une backdoor, à destination des autorités britanniques (ce qui est déjà
largement questionable), mais évidemment parfaitement exploitable également par
un attaquant hostile qui parviendrait à s&amp;rsquo;introduire dans le système.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Je tape généralement sur Google, à mon avis la compagnie la plus nuisible en
général sur <a href="https://2027a.net/tech/vie_privee_et_securite">le plan de la vie privée</a>, mais cette fois c&rsquo;est au tour de Apple
d&rsquo;en prendre pour son grade.</p>
<p><img alt="Apple supprime le chiffrement de bout en bout à la demande du gouvernement britanique" loading="lazy" src="/img/apple-uk.jpg"></p>
<p>Malgré la réputation, globalement véridique, d&rsquo;un bon niveau de sécurité des
produits Apple, celle-ci <a href="https://www.reuters.com/technology/apple-removing-end-to-end-cloud-encryption-feature-uk-bloomberg-news-reports-2025-02-21/">retire la fonctionnalité de chiffrement de bout en
bout de son cloud</a>, au Royaume-Uni, à la demande du gouvernement. Créant de fait
une backdoor, à destination des autorités britanniques (ce qui est déjà
largement questionable), mais évidemment parfaitement exploitable également par
un attaquant hostile qui parviendrait à s&rsquo;introduire dans le système.</p>
<p>Bref, Apple est une compagnie qui jette sous le bus ses utilisateurs et leur
sécurité pour permettre à un gouvernement de violer la vie privée de ses
citoyens. Chiffrez vos communications et utilisez des systèmes libres pour
traiter vos données. N&rsquo;attendez pas d&rsquo;en avoir besoin pour le faire : il sera
trop tard.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Le Point déclenche une campagne de salissage de Wikipédia</title>
      <link>https://log.2027a.net/posts/le-point-d%C3%A9clenche-une-campagne-de-salissage-de-wikip%C3%A9dia/</link>
      <pubDate>Fri, 21 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://log.2027a.net/posts/le-point-d%C3%A9clenche-une-campagne-de-salissage-de-wikip%C3%A9dia/</guid>
      <description>&lt;p&gt;Emboîtant le pas à Elon Musk, Le Point déclenche &lt;a href=&#34;https://www.lepoint.fr/tags/wikipedia&#34;&gt;une campagne de salissage
contre wikipédia&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pétition du Point contre Wikipedia&#34; loading=&#34;lazy&#34; src=&#34;https://log.2027a.net/img/le-point-wikipedia.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Il faut dire que les pratiques de ce magazine (désinformation, fausses
nouvelles, islamophobie&amp;hellip;) ainsi que sa proximité avec la droite dure et
néofasciste sont bien documentées par l&amp;rsquo;encyclopédie libre.&lt;/p&gt;
&lt;p&gt;La liste des signataires de ce texte est édifiante. On y trouve tout ce que la
France compte de d&amp;rsquo;islamophobes, de racistes, de soutiens au génocide en
Palestine et de manipulateurs de l&amp;rsquo;opinion publique, qui choisissent
précisément ce moment historique pour salir une des rares sources
d&amp;rsquo;informations, non sans défauts, mais véritablement neutre et collaborative,
alors justement que la vérité et les faits sont directement menacés par la
vague néofasciste qui déferle sur l&amp;rsquo;occident.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Emboîtant le pas à Elon Musk, Le Point déclenche <a href="https://www.lepoint.fr/tags/wikipedia">une campagne de salissage
contre wikipédia</a>.</p>
<p><img alt="Pétition du Point contre Wikipedia" loading="lazy" src="/img/le-point-wikipedia.png"></p>
<p>Il faut dire que les pratiques de ce magazine (désinformation, fausses
nouvelles, islamophobie&hellip;) ainsi que sa proximité avec la droite dure et
néofasciste sont bien documentées par l&rsquo;encyclopédie libre.</p>
<p>La liste des signataires de ce texte est édifiante. On y trouve tout ce que la
France compte de d&rsquo;islamophobes, de racistes, de soutiens au génocide en
Palestine et de manipulateurs de l&rsquo;opinion publique, qui choisissent
précisément ce moment historique pour salir une des rares sources
d&rsquo;informations, non sans défauts, mais véritablement neutre et collaborative,
alors justement que la vérité et les faits sont directement menacés par la
vague néofasciste qui déferle sur l&rsquo;occident.</p>
<p>Cela dit, pas beaucoup de surprises dans la liste, même s&rsquo;il y a quelques
déceptions (comme Jérôme Guedj, dont je ne partage pas grandes positions, mais
que je pensais avoir une certaine intégrité intellectuelle. Je me trompais
manifestement), ce sont essentiellement les (nombreux) porte-voix médiatiques
de l&rsquo;islamophobie qui s&rsquo;assemblent pour (tenter de) porter un coup fatal aux
critiques qui leurs sont faites. C&rsquo;est le moment pour <a href="https://donate.wikimedia.org/">faire un don à Wikipédia</a>.</p>
<p>La liste (je ne mets pas de lien vers ce torchon, mais vous trouverez le texte
facilement avec son titre):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="cl">Bernard Accoyer (ancien président de l&#39;Assemblée nationale),
</span></span><span class="line"><span class="cl">Éric Anceau (professeur d&#39;histoire contemporaine à l&#39;université de Lorraine),
</span></span><span class="line"><span class="cl">Sophia Aram (humoriste),
</span></span><span class="line"><span class="cl">Thierry Ardisson (producteur de télévision),
</span></span><span class="line"><span class="cl">Muriel Attal (directrice de la communication chez France Télévisions),
</span></span><span class="line"><span class="cl">Olivier Babeau (président de l&#39;Institut Sapiens),
</span></span><span class="line"><span class="cl">Élisabeth Badinter (philosophe, essayiste),
</span></span><span class="line"><span class="cl">Tristane Banon (romancière),
</span></span><span class="line"><span class="cl">Eugénie Bastié (journaliste du Figaro),
</span></span><span class="line"><span class="cl">Pierre Bentata (essayiste, professeur d&#39;économie),
</span></span><span class="line"><span class="cl">Muriel Beyer (éditrice),
</span></span><span class="line"><span class="cl">Jean-Michel Blanquer (président du Laboratoire de la République, ancien ministre de l&#39;Éducation),Nicolas Bouzou (économiste, éditorialiste),
</span></span><span class="line"><span class="cl">Yves Bréchet (membre de l&#39;Académie des Sciences, ancien haut-commissaire à l&#39;Énergie atomique),
</span></span><span class="line"><span class="cl">Alexis Brézet (directeur des rédactions du Figaro),
</span></span><span class="line"><span class="cl">Pascal Bruckner (philosophe),
</span></span><span class="line"><span class="cl">Sylvie Brunel (géographe et universitaire),
</span></span><span class="line"><span class="cl">Agnès Buzyn (médecin, ancienne ministre de la Santé),
</span></span><span class="line"><span class="cl">Éric Chol (directeur de la rédaction de L&#39;Express),
</span></span><span class="line"><span class="cl">Daniel Cohn-Bendit (ancien député européen),
</span></span><span class="line"><span class="cl">Jean-François Colosimo (directeur général des éditions du Cerf),
</span></span><span class="line"><span class="cl">Julien Damon (sociologue),
</span></span><span class="line"><span class="cl">Sophie de Closets (éditrice),
</span></span><span class="line"><span class="cl">Kamel Daoud (écrivain),
</span></span><span class="line"><span class="cl">François de Rugy (ancien président de l&#39;Assemblée nationale),
</span></span><span class="line"><span class="cl">Emmanuel Debono (rédacteur en chef du Droit de Vivre),
</span></span><span class="line"><span class="cl">Michaël Delafosse (maire de Montpellier),
</span></span><span class="line"><span class="cl">Julien Dray (ancien député),
</span></span><span class="line"><span class="cl">Éric Dupond-Moretti (ancien garde des Sceaux),
</span></span><span class="line"><span class="cl">Amine El Khatmi (essayiste),
</span></span><span class="line"><span class="cl">Ruth Elkrief (journaliste),
</span></span><span class="line"><span class="cl">Raphaël Enthoven (philosophe),
</span></span><span class="line"><span class="cl">Fabrice Epelboin (spécialiste des médias sociaux, enseignant à Sciences Po),
</span></span><span class="line"><span class="cl">Jonas Follonier, (rédacteur en chef de la revue, Le Regard Libre)
</span></span><span class="line"><span class="cl">Jacques-Henri Eyraud (ancien président de l&#39;Olympique de Marseille),
</span></span><span class="line"><span class="cl">Marc-Olivier Fogiel (animateur, journaliste et producteur, ancien directeur général de BFMTV),
</span></span><span class="line"><span class="cl">Caroline Fourest (réalisatrice et directrice de Franc-Tireur),
</span></span><span class="line"><span class="cl">Philippe Foussier (essayiste, ancien grand maître du Grand Orient),
</span></span><span class="line"><span class="cl">Émilie Frèche (écrivaine),
</span></span><span class="line"><span class="cl">Marcel Gauchet (philosophe, essayiste),
</span></span><span class="line"><span class="cl">François Gemenne (membre du Giec),
</span></span><span class="line"><span class="cl">Xavier Gorce (dessinateur),
</span></span><span class="line"><span class="cl">Jérôme Guedj (député),
</span></span><span class="line"><span class="cl">Patrice Gueniffey (historien, directeur d&#39;études à l&#39;EHESS),
</span></span><span class="line"><span class="cl">Nathalie Heinich (sociologue),
</span></span><span class="line"><span class="cl">Bernard-Henri Lévy (philosophe, essayiste),
</span></span><span class="line"><span class="cl">Philippe Juvin (médecin, député),
</span></span><span class="line"><span class="cl">Rémi Kauffer (historien, journaliste),
</span></span><span class="line"><span class="cl">Rachel Khan (écrivaine, juriste),
</span></span><span class="line"><span class="cl">Klaus Kinzler (essayiste),
</span></span><span class="line"><span class="cl">Étienne Klein (physicien, essayiste)
</span></span><span class="line"><span class="cl">Gaspard Koenig (essayiste),
</span></span><span class="line"><span class="cl">Michel Lauzzana (député de Lot-et-Garonne),
</span></span><span class="line"><span class="cl">Luc Le Vaillant (journaliste, responsable de la page Portraits et chroniqueur à Libération),
</span></span><span class="line"><span class="cl">Noëlle Lenoir (juriste et ancienne ministre),
</span></span><span class="line"><span class="cl">Thierry Lentz (historien et directeur de la Fondation Napoléon),
</span></span><span class="line"><span class="cl">Nathalie Loiseau (députée européenne, ancienne directrice de l&#39;ENA),
</span></span><span class="line"><span class="cl">Alain Minc (essayiste et chef d&#39;entreprise),
</span></span><span class="line"><span class="cl">Benjamin Morel (constitutionnaliste),
</span></span><span class="line"><span class="cl">Éric Neuhoff (journaliste et écrivain),
</span></span><span class="line"><span class="cl">Pascal Perrineau (professeur associé au Centre de recherches politiques de Sciences Po),
</span></span><span class="line"><span class="cl">Denis Olivennes (président d&#39;Editis et du conseil de surveillance de CMI France),
</span></span><span class="line"><span class="cl">Natacha Polony (journaliste),
</span></span><span class="line"><span class="cl">Michaël Prazan (écrivain et réalisateur français),
</span></span><span class="line"><span class="cl">Jean Quatremer (journaliste à Libération),
</span></span><span class="line"><span class="cl">Rudy Reichstadt (fondateur de Conspiracy Watch),
</span></span><span class="line"><span class="cl">Dominique Reynié (politologue et directeur général de la Fondapol),
</span></span><span class="line"><span class="cl">Iannis Roder (professeur d&#39;histoire, membre du Conseil des sages de la laïcité),
</span></span><span class="line"><span class="cl">Stéphane Rozès (politologue),
</span></span><span class="line"><span class="cl">Éric Servat (hydrologue, directeur du Centre International Unesco sur l&#39;Eau),
</span></span><span class="line"><span class="cl">Eve Szeftel (directrice de la rédaction de Marianne),
</span></span><span class="line"><span class="cl">Jean-Pierre Sakoun (président d&#39;Unité Laïque),
</span></span><span class="line"><span class="cl">Joann Sfar (dessinateur),
</span></span><span class="line"><span class="cl">Abnousse Shalmani (écrivaine et réalisatrice),
</span></span><span class="line"><span class="cl">Guy Sorman (essayiste, président de la Maison Française, New York University),
</span></span><span class="line"><span class="cl">Mario Stasi (avocat, président de la Licra),
</span></span><span class="line"><span class="cl">Pierre-Henri Tavoillot (philosophe, essayiste),
</span></span><span class="line"><span class="cl">Pascal Thomas (producteur et réalisateur de cinéma),
</span></span><span class="line"><span class="cl">Vincent Trémolet de Villers (directeur délégué de la rédaction du Figaro),
</span></span><span class="line"><span class="cl">Philippe Val (ancien directeur de publication de France Inter et Charlie Hebdo),
</span></span><span class="line"><span class="cl">Mathias Wargon (médecin urgentiste),
</span></span><span class="line"><span class="cl">Jean-Pierre Winter (psychanalyste),
</span></span><span class="line"><span class="cl">Bernard Zekri (ancien directeur général des Inrockuptibles et de Radio Nova).
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>SearXNG, ou comment remplacer Google search</title>
      <link>https://log.2027a.net/posts/searxng-ou-comment-remplacer-google-search/</link>
      <pubDate>Tue, 11 Feb 2025 19:42:38 -0500</pubDate>
      <guid>https://log.2027a.net/posts/searxng-ou-comment-remplacer-google-search/</guid>
      <description>&lt;p&gt;Si vous me lisez parfois, vous avez probablement remarqué que je suis très
attaché à la protection de la vie privée, et que je suis particulièrement
hostile aux services de Google, qui sont au moins autant invasifs qu&amp;rsquo;ils ne sont
utiles. J&amp;rsquo;ai très largement &amp;ldquo;dé-googlé&amp;rdquo; ma vie numérique en utilisant d&amp;rsquo;autres
services (souvent auto-hébergés) que ceux dont Google est le champion : Mes
données, mon courriel, mes notes, mes cartes, ma navigation, mes calendriers,
mes OTPs&amp;hellip; ne sont plus chez Google, mais soit sur mes propres machines, soit
chez des alternatives libres et chiffrées (Proton, OpenStreetMap)&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Si vous me lisez parfois, vous avez probablement remarqué que je suis très
attaché à la protection de la vie privée, et que je suis particulièrement
hostile aux services de Google, qui sont au moins autant invasifs qu&rsquo;ils ne sont
utiles. J&rsquo;ai très largement &ldquo;dé-googlé&rdquo; ma vie numérique en utilisant d&rsquo;autres
services (souvent auto-hébergés) que ceux dont Google est le champion : Mes
données, mon courriel, mes notes, mes cartes, ma navigation, mes calendriers,
mes OTPs&hellip; ne sont plus chez Google, mais soit sur mes propres machines, soit
chez des alternatives libres et chiffrées (Proton, OpenStreetMap)</p>
<p><img alt="SearxNG" loading="lazy" src="/img/searxng.png"></p>
<p>Restait, jusqu&rsquo;il y a peu, la recherche elle-même. On aime en dire du mal, et pour
l&rsquo;essentiel, c&rsquo;est mérité, mais le moteur de recherche de Google reste (et
amha, de loin) le meilleur disponible, et malgré mes tentatives persistantes
avec Ecosia, DuckDuckGo et autres BraveSearch, je finissait toujours par
revenir à ce bon vieux Google search, lui offrant sur un plateau mon profil
pour son algorithme de profilage C&rsquo;est maintenant chose du passé : je teste
depuis quelques mois SearXNG, un &ldquo;meta-moteur de recherche&rdquo; : <a href="https://searxng.org">SearXNG</a></p>
<p>En pratique, c&rsquo;est un système qui transfère votre requête à d&rsquo;autres moteurs
de recherches (incluant google search, parmi plus de 200
moteurs recensés), filtrant au passage toutes données privées, puis qui vous
retourne les résultats, là encore, en filtrant toute forme de tracking,
publicité et autres saloperies que les moteurs de recherches embarquent dans
leurs résultats. Tout ça étant évidement configurable en détails</p>
<p>Le résultat final est parfait à mon gout : j&rsquo;ai accès à toute la puissance de
Google search (combiné avec les résultats d&rsquo;autres moteurs, pour des résultats
encore plus riches), sans aucun des trucs qui me font habituellement pester,
depuis le tracking jusqu&rsquo;au AI slop, en passant par la publicité</p>
<p>Si vous êtes soucieux de votre vie privée sur internet, je vous conseille
vivement d&rsquo;essayer cette solution. Il existe des instances publiques, mais
c&rsquo;est typiquement le genre de truc qu&rsquo;il est vraiment plus pertinent d&rsquo;héberger
soi-même ou avec un groupe d&rsquo;ami.e.s de confiance. Quitter Google, ok, mais
pas pour se jeter dans les bras du 1er data brocker venu</p>
<p>La <a href="https://docs.searxng.org/admin/installation.html">procédure d&rsquo;installation</a>
n&rsquo;est pas très compliquée, mais requiert tout de même de comprendre un peu ce
que l&rsquo;on fait. Disons que si vous savez utiliser docker, c&rsquo;est très accessible,
et sinon, ça réclame un peu d&rsquo;apprentissage et/ou un nerd référent</p>
<h2 id="déployer-searxng-avec-docker-compose">Déployer SearXNG avec <code>docker compose</code></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-compose.yaml" data-lang="compose.yaml"><span class="line"><span class="cl"><span class="nt">services</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">searxng</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">searxng/searxng</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">searxng</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">ports</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">${PORT}:8080</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">${SEARXNG_PATH}:/etc/searxng</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">environment</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">BASE_URL=https://my.url.tld/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">INSTANCE_NAME=${INSTANCE_NAME}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span>{}<span class="w">
</span></span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Quand la sécurité est un mirage</title>
      <link>https://log.2027a.net/posts/quand-la-s%C3%A9curit%C3%A9-est-un-mirage/</link>
      <pubDate>Fri, 07 Feb 2025 21:27:33 -0500</pubDate>
      <guid>https://log.2027a.net/posts/quand-la-s%C3%A9curit%C3%A9-est-un-mirage/</guid>
      <description>&lt;p&gt;Un jour il faudra que je vous dise tout le mal que je pense des organisations
(banques et gouvernements en tête) qui font semblant de prendre au sérieux la
sécurité de vos informations, mais utilisent des &amp;ldquo;questions de sécurité&amp;rdquo;,
forcent le renouvellement régulier des mots de passe, ou implémentent 2fa par
SMS.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est une mise en scène de sécurité plus dangereuse qu&amp;rsquo;autre chose, et
c&amp;rsquo;est un signe suffisant pour savoir que vos données ne sont pas correctement
protégées dans cette organisation&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Un jour il faudra que je vous dise tout le mal que je pense des organisations
(banques et gouvernements en tête) qui font semblant de prendre au sérieux la
sécurité de vos informations, mais utilisent des &ldquo;questions de sécurité&rdquo;,
forcent le renouvellement régulier des mots de passe, ou implémentent 2fa par
SMS.</p>
<p>C&rsquo;est une mise en scène de sécurité plus dangereuse qu&rsquo;autre chose, et
c&rsquo;est un signe suffisant pour savoir que vos données ne sont pas correctement
protégées dans cette organisation</p>
]]></content:encoded>
    </item>
    <item>
      <title>L&#39;irrationnalité de Trump ne nous protège de rien</title>
      <link>https://log.2027a.net/posts/lirrationnalit%C3%A9-de-trump-ne-nous-prot%C3%A8ge-de-rien/</link>
      <pubDate>Sun, 02 Feb 2025 21:32:44 -0500</pubDate>
      <guid>https://log.2027a.net/posts/lirrationnalit%C3%A9-de-trump-ne-nous-prot%C3%A8ge-de-rien/</guid>
      <description>&lt;p&gt;Évidemment, cette guerre commerciale va conduire l&amp;rsquo;économie US dans un mur (et
probablement les nôtres aussi). Mais je lis beaucoup de monde s&amp;rsquo;appuyer sur ce
fait pour se rassurer : ce n&amp;rsquo;est pas une politique économique rationnelle, ils
vont le réaliser et ça ne durera donc pas.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Trump menaçant le reste du monde&#34; loading=&#34;lazy&#34; src=&#34;https://log.2027a.net/img/trade-war-trump.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Je penses que c&amp;rsquo;est une erreur politique fondamentale de croire ça. Cela
implique que Trump et Musk aient pour boussole les principaux indicateurs
économiques habituels, et visent à les améliorer (on pourrait discuter de la
validité de ces indicateurs, mais c&amp;rsquo;est une autre conversation).&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Évidemment, cette guerre commerciale va conduire l&rsquo;économie US dans un mur (et
probablement les nôtres aussi). Mais je lis beaucoup de monde s&rsquo;appuyer sur ce
fait pour se rassurer : ce n&rsquo;est pas une politique économique rationnelle, ils
vont le réaliser et ça ne durera donc pas.</p>
<p><img alt="Trump menaçant le reste du monde" loading="lazy" src="/img/trade-war-trump.jpg"></p>
<p>Je penses que c&rsquo;est une erreur politique fondamentale de croire ça. Cela
implique que Trump et Musk aient pour boussole les principaux indicateurs
économiques habituels, et visent à les améliorer (on pourrait discuter de la
validité de ces indicateurs, mais c&rsquo;est une autre conversation).</p>
<p>Hors, je ne crois pas une seconde que la prospérité et le &ldquo;bon&rdquo; fonctionnement
de l&rsquo;économie générale soit le moins du monde les objectifs de Trump, Musk et
leurs affidés. Je crois plutôt qu&rsquo;ils cherchent à accroître leurs gains, leur
sphère d&rsquo;influence et leur pouvoir personnel, en premier lieu, et ceux de leur
classe ensuite Le démantèlement des institutions sociales et politiques ainsi
que des partenariats économiques et stratégiques historiques sert cet objectif,
et si les américains et leurs voisins doivent souffrir économiquement des
conséquences de ce démantèlement, c&rsquo;est parfaitement secondaire dans le
raisonnement.</p>
<p>On assiste à un coup d&rsquo;état depuis l&rsquo;intérieur, appuyé par des mesures de
déstabilisation économique qui visent à provoquer incompréhension,
désorganisation, choc et stupéfaction, pour en tirer un profit politique, pas à
des politiques cohérentes avec un modèle économique, même d&rsquo;un point de vue
capitaliste ou néolibéral</p>
]]></content:encoded>
    </item>
    <item>
      <title>Blâmer les électeurs</title>
      <link>https://log.2027a.net/posts/bl%C3%A2mer-les-%C3%A9lecteurs/</link>
      <pubDate>Fri, 08 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://log.2027a.net/posts/bl%C3%A2mer-les-%C3%A9lecteurs/</guid>
      <description>&lt;p&gt;Je n&amp;rsquo;ai pas d&amp;rsquo;analyse intelligente à faire des résultats de l&amp;rsquo;élection
américaine. Si je m&amp;rsquo;écoutais, je dirais simplement que le désir de fascisme
n&amp;rsquo;avait jamais été aussi fort depuis les années 30, aux USA comme ailleurs en
occident, qu&amp;rsquo;on va devoir en subir les conséquences dans les années qui
viennent, et que cette élection n&amp;rsquo;est qu&amp;rsquo;un début.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Musk - dark MAGA&#34; loading=&#34;lazy&#34; src=&#34;https://log.2027a.net/img/musk.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Évidemment j&amp;rsquo;espère me tromper, et je ne crois pas avoir de compétences
particulières pour ce genre de prédictions.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Je n&rsquo;ai pas d&rsquo;analyse intelligente à faire des résultats de l&rsquo;élection
américaine. Si je m&rsquo;écoutais, je dirais simplement que le désir de fascisme
n&rsquo;avait jamais été aussi fort depuis les années 30, aux USA comme ailleurs en
occident, qu&rsquo;on va devoir en subir les conséquences dans les années qui
viennent, et que cette élection n&rsquo;est qu&rsquo;un début.</p>
<p><img alt="Musk - dark MAGA" loading="lazy" src="/img/musk.jpg"></p>
<p>Évidemment j&rsquo;espère me tromper, et je ne crois pas avoir de compétences
particulières pour ce genre de prédictions.</p>
<p>Mais je lis les nombreuses analyses à droite et à gauche. Elles divergent
beaucoup les unes des autres, mais la plupart d&rsquo;entre elles ont un point commun:
elles font peser la responsabilité de la défaite démocrate sur les électeurs
et électrices qui ont mal, ou carrément pas voté. À cause de leur obsession
pour la Palestine, parce qu&rsquo;ils s&rsquo;illusionnent sur Trump, par ignorance de la
réalité économique, par paresse, par bêtise, par pureté ou par égoïsme&hellip;
Chacun y va de son explication par la faute des électeurs.</p>
<p>Je comprends la logique de cette représentation des faits. Bien sûr, les choix
des électeurs sont la cause directe des résultats. S&rsquo;ils ont choisi de ne pas
voter à cause de telle ou telle raison, cela à des conséquences immédiates</p>
<p>Mais je comprends nettement moins l&rsquo;intérêt politique de faire ce type
d&rsquo;analyse ? Les électeurs ne se présentent pas aux élections, ils n&rsquo;élaborent
pas de programme, et ne modifieront pas leur stratégie pour les prochaines
échéances en fonction de nos analyses de leurs comportements. Ils continueront
à voter en fonction de leurs biais idéologiques et de leurs intérêts pour les
programmes, les candidats et les campagnes réellement en présence</p>
<p>Les programmes et les candidats en lice sont certes des causes seulement
indirectes des résultats, secondaires aux votes eux-mêmes, mais ce sont bien
eux qui détiennent la responsabilité politique de faire une offre qui mobilise
l&rsquo;électorat. C&rsquo;était la responsabilité des démocrates de fournir un contenu
politique, ou même simplement électoral, susceptible de mobiliser les
américains. Et c&rsquo;est entièrement leur échec, pas celui des électeurs, qui sont
souverains et le resteront (enfin espérons). Du côté de Trump, le contenu
politique était certe dangereux, incohérent et idiot, mais il avait le mérite
de mobiliser l&rsquo;électorat, alors que les démocrates proposaient, tout au plus,
un statu quo qui ne mobilise personne</p>
<p>Bref. Les analyses électorales qui aboutissent à un jugement moral des
électeurs plutôt qu&rsquo;à une évaluation des propositions politiques susceptibles
de les mobiliser m&rsquo;apparaissent être au mieux vaines, si ce n&rsquo;est
contre-productives, en ce qu&rsquo;elles déresponsabilisent ceux-là même qui
devraient endosser la responsabilité des résultats et modifier leur stratégie
pour l&rsquo;avenir. Une recette pour la défaite, à mon avis</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
