https://si3t.ch/log/
prx
prx@si3t.ch
2025-01-28T21:25:51Z
https://si3t.ch/log/2025-01-28-nouvelles-du-jour.txt
2025-01-28T20:53:40Z
<![CDATA[
Après avoir lu l'interview de Kim Stanley Robinson dans le recueil de nouvelles des utopiales de l'an dernier (oui, j'ai du retard...), voici quelques mots pour traduire à ma façon ses propos. Une forme d'appel à la résistance, rien qu'en changeant nos points de vues imposés par les captifs d'actionnaires:
Les écoterroristes n'existent pas. Ils n'y a que des écorésistants. Ils ne s'attaquent pas aux personnes, ils s'en prennent aux machines. Leur pire ennemi? L'inhumaine machine capitaliste.
De plus en plus d'élèves absents en classe. La grippe est là.
Ma fille de 3 ans a du mal à guérir, voilà plus d'une semaine que la fièvre fait le yoyo.
Remettez les masques si vous êtes malades.
Et lavez vos putains de main régulièrement!
Dommage, il n'y a plus de gel hydroalcoolique dans les classes. C'était bien pratique d'en avoir à disposition après avoir éternué ou s'être mouché.
Je réapprends à fonctionner.
C'est plus dur que je l'imaginais.
Un bon ami m'a dit que "je ne suis pas adapté au système actuel". ;)
Je l'ai pris comme un compliment :).
Peut-être.
Qu'importe, je suis la roue dentée qui grince ou le grain de sable qui la retient de tourner?
Je reste engagé pour l'humain avant tout.
J'ai corrigé quelques bugs dans ralf, le renommeur de fichiers.
=> https://git.sr.ht/~prx/ralf
Il y avait notamment un défaut quand la chaîne de remplacement était plus courte que la partie à remplacer.
J'aimerais avoir plus de retour, notamment sur le code, car je reste un débutant en C.
J'ai ajouté un man, et des cibles dans le Makefile pour installer/désinstaller.
Un petit bout de pledge() permet d'assurer qu'il ne fait pas n'importe quoi, mais vu la longueur du code, il y avait peu de risques.
En tout cas pour l'instant, il fait le job de mon côté : utiliser des regex (simples, je ne suis pas un fou des regex) pour renommer des fichiers en masse.
J'aimerais créer un port pour iblock.
Ça fait plus d'un an que le démon que j'ai écrit pour l'utiliser tourne sans soucis sur mon serveur.
Je traîne, car ça suppose créer un utilisateur spécifique pour le lancer.
De plus, je dois écrire la page man pour bien faire :S.
=> https://tildegit.org/solene/iblock
On oublie les tyrans, qui de leur vivant n'inspirent que la peur.
On se souvient des bons, car après leur mort ils inspirent l'espoir.
Une réaction?
Envoyez votre commentaire par mail:
=> mailto:prx@si3t.ch?subject=nouvelles-du-jour
Ou rejoignez le salon XMPP:
]]>
https://si3t.ch/log/2025-01-27-ralf.txt
2025-01-27T21:03:40Z
<![CDATA[
Entre tous les gestionnaires de fichiers, il y a une fonctionnalité que je trouve tout particulièrement réussie dans Thunar (le gestionnaire par défaut dans XFCE) : le renommage en masse de fichiers.
Il offre plusieurs options très pratiques pour renommer des fichiers avec des fonctionnalités comme chercher/remplacer, support des regex, à partir d'une position donnée...
Bref, même si je n'utilise plus XFCE sur mon ordinateur de travail (mais c'est l'environnement que j'installe à mes proches), j'ouvre encore Thunar pour... renommer des fichiers ^^.
Il était temps pour moi de trouver un outil qui me permet de faire la même chose dans un terminal, puisque je passe le plus clair de mon temps dedans, et si je dois gérer des fichiers, c'est avec rover.
=> https://github.com/lecram/rover
C'est ainsi qu'est née l'envie d'écrire ralf, comme "Rename A Lot of Files" (le nom a beaucoup changé...).
Vous pouvez le récupérer et le tester à partir de cette URL:
=> https://git.sr.ht/~prx/ralf
J'ignore si c'est bien portable en dehors d'OpenBSD, puisque j'utilise strlcat et sltrcpy pour assurer le bon fonctionnement du traîtement des chaînes de caractères. Je pourrais m'en passer avec memcpy() et memmove(), mais autant m'appuyer sur le travail de gens sérieux.
Sur debian, il faut installer libbsd-dev je crois.
ralf est encore tout nouveau, il y a sans doutes des améliorations à y apporter.
Avant cela, et aussi pour me permettre de réfléchir à ce que j'ai écrit, voici quelques explications sur le code.
Au départ, j'ai envisager de recopier les diverses façons de renommer que propose Thunar:
Après avoir écrit un menu pour sélectionner la méthode, j'ai finalement réalisé que les regex permettaient de faire le tout.
Initialement, ralf listait les fichiers présents dans le dossier courant avec scandir(3).
C'est une fonction que j'ai déjà utilisé, qui permet d'avoir rapidement une liste des fichiers/dossiers présents.
Puis, je me suis dit que restreindre au dossier courant n'était pas très pratique, et que devoir réallouer la taille de la liste en mémoire avec des mallocs n'était pas très efficace.
De plus, on peut profiter des méthodes de sélection du shell, comme le fameux glob "*".
Alors, tant qu'à faire, je laisse le shell et l'utilisateur décrire les fichiers à renommer en les passant en argument.
En passant, j'ai réalisé que le premier argument est toujours le programme en cours d'exécution, j'ai donc retiré le premier paramètre dans argc.
Pour commencer, j'ai enregistré la liste des fichiers à éventuellement renommer dans une liste, tout simple après avoir vérifié que le fichier existe bel et bien:
int file_exist(const char *fn) { struct stat sb; if (stat(fn, &sb) == 0) { return 1; } else { return 0; } }
Ça fonctionnait bien, mais cela devenait plus compliqué lorsque je voulais associer le nouveau nom de fichier et parcourir la liste en question.
Puis je me suis souvenu qu'il existe déjà tout ce qu'il faut pour ce genre de taches : les queues!
Avec sys/queue.h, il y a des méthodes toutes prêtes pour insérer/traiter dans l'ordre une liste chaînée d'objets.
Me voilà donc avec une structure qui me permet d'avoir pour chaque fichier le nom courant et à côté le nom à donner:
struct Filename { int modified; char name[FILENAME_MAX]; char new[FILENAME_MAX]; SIMPLEQ_ENTRY(Filename) filename; }; SIMPLEQ_HEAD(Filelist_head, Filename);
On remarque la variable "modified", qui me permet de savoir ensuite si le fichier doit effectivement être renommé, et mettre un peu de couleur pour identifier le changement prévu.
Je ne connais pas ncurses.h.
Alors j'en suis resté aux bons vieux fgets() et getchar().
Oups, je devrais dire getline() et getchar(), puisque le manpage de fgets() conseille d'utiliser getline dans le cas d'entrée hasardeuse.
Là encore, tout est prêt et bien pensé, c'est du gâteau.
J'ai choisi de tout simplement demander à l'utilisateur la regex à rechercher puis par quoi remplacer.
Là, j'au un peu plus réfléchi.
Au départ, j'avais une boucle qui cherchait dans le nom du fichier les patterns correspondant à la regex entrée et qui remplaçait dans ce nom du fichier par la chaîne choisie par l'utilisateur.
Cependant, ça posait un problème de boucles infinie.
Imaginez que l'on a le fichier "babar.txt".
L'utilisateur demande de remplacer "[a-c]" par "b".
On comprend qu'il voudrait que "babar.txt" devienne "bbbbr.txt".
Cependant, puisque "b" fait partie de "[a-c]", alors ça boucle sans cesse.
J'ai donc modifié mon algorithme pour ne traîter chaque pattern qu'à une seule reprise. Au final, la fonction est nettement plus simple:
regex_t regex; regmatch_t match[1]; int regret = 0; int n = 0; int lastpos = 0; char buf[BUFSIZ] = {'\0'}; char tmp[FILENAME_MAX] = {'\0'}; /* copy the string to tmp, then modify it */ estrlcpy(tmp, str, sizeof(tmp)); if ((regret = regcomp(®ex, pattern, REG_EXTENDED)) != 0) { regerror(regret, ®ex, buf, sizeof(buf)); regfree(®ex); err(1, "%s", buf); } while (regexec(®ex, tmp, 1, match, 0) == 0) { /* append beginning of tmp in new until match start */ tmp[match[0].rm_so] = '\0'; estrlcat(new, tmp, newsiz); /* replace this part */ estrlcat(new, rep, newsiz); /* move the end of the string at the beginning of tmp */ memmove(tmp, tmp + match[0].rm_so + 1, sizeof(tmp)); n++; } /* at the end, copy the unmatching ending of tmp in new */ estrlcat(new, tmp, newsiz); regfree(®ex); return n;
J'ai choisi d'éviter les malloc().
Ce n'est pas par fainéantise (un peu), mais puisqu'il existe déjà FILENAME_MAX définit dans POSIX.
Par ailleurs, ça simplifie le code plutôt que d'allouer de la mémoire et lancer free() ci et là.
Ça, c'est à vous de me le dire ^^.
Pour l'instant, j'ai identifié le souci qui se pose quand un nom de fichier existe déjà : il est tout simplement écrasé. Mettre un petit warning serait pas mal ^^.
J'hésite aussi à virer strlcpy et strlcat pour rendre le code plus portable, et aussi pour l'exercice. Qu'en pensez-vous?
Ah, il faudrait aussi une manpage.
Une réaction?
Envoyez votre commentaire par mail:
=> mailto:prx@si3t.ch?subject=ralf
Ou rejoignez le salon XMPP:
]]>
https://si3t.ch/log/2025-01-25-mars-KSR.txt
2025-01-25T13:29:23Z
<![CDATA[
J'ai (enfin) terminé la lecture de la trilogie Mars de Kim Stanley Robinson.
Mars la Rouge, Mars la Verte, Mars la Bleue.
Je comprends pourquoi on me l'avait conseillé, c'est vraiment le genre de choses qu e j'aime.
Tout d'abord, survivre dans un environnement extrême, s'adapter et se mêler à l'écologie, un peu comme les Fremen dans Dune.
Mais cet ouvrage va bien bien au-delà de ces simples préoccupations.
Il y a de la politique, de l'humain, surtout de l'humain.
J'y ai trouvé une ode à la vie sous toute ses formes, un bel hommage à l'amour.
Pour épicer le tout, la science est fondamentale dans l'écriture, (parfois trop?), et est l'outil qui permet à l'humain de s'élever et grandir sans détruire.
Je crois qu'on pourrait inscrire cette trilogie dans le genre solarpunk:
Les personnages sont incroyables.
Et en plus ça finit bien :)
Bref, je recommande, mais accrochez-vous, c'est de la hard SF!
ps : petit rappel de ce qu'est le mouvement solarpunk:
=> https://si3t.ch/misc/solarpunk/
Une réaction?
Envoyez votre commentaire par mail:
=> mailto:prx@si3t.ch?subject=mars-KSR
Ou rejoignez le salon XMPP:
]]>
https://si3t.ch/log/2025-01-23-sans-suite.txt
2025-01-23T11:02:47Z
<![CDATA[
Je peux réécouter de la musique.
Je peux recommencer à lire.
Je peux suivre une conversation sans en perdre le fil.
Je peux dormir.
Je peux enfin respirer.
Je n'ai plus à lutter pour empêcher mon cerveau de penser, analyser, reconstituer.
Je peux passer une journée sans espérer avec impatience le moment où le somnifère mettra fin à la torture de l'attente, arrêtera l'angoisse.
Bien sûr, tout n'est pas résolu.
Reste à comprendre.
Reste à expliquer, que cela n'arrive plus.
Apprendre à écouter son instinct.
Parfois, on aide les autres sans y penser, parce que c'est normal.
Parfois, on fait du mal sans le vouloir, sans s'en rendre compte.
Parfois, on se trompe, sans s'en rendre compte.
Parfois, on pense faire le bien alors qu'on n'a en réalité aucune importance.
Parfois, on imagine ne rien faire de mal et malgré tout être en décalage avec la réalité.
Parfois, on s'efforce de faire pour le mieux, mais certains y voient une volonté de nuire ou de profiter d'autrui.
Parfois, tout le monde va bien, mais les autres imagine le mal. Préjugés, absence, déni, pouvoir, incompétence, zèle...
Un fonctionnaire m'a appelé avec son téléphone personnel ce soir, bien au-delà de ses heures de travail, pour me faire part de la décision de la magistrate : classé sans suite.
J'ai été placé en garde à vue.
Ça signifie qu'on a envisagé à un moment donné me placer en prison.
Alors que j'aidais mon fils à s'habiller, on a toqué à la porte : je n'oublierai jamais ce son. Le prochain livreur me donne des frissons.
Perquisition, on confisque tout mon matériel informatique. Autant vous dire qu'avec tout le bazar récupéré, l'ordi de travail, l'ordi pour regarder des films, l'ordi pour le retrogaming, les dizaines de clés USB à reformater, les disques durs de sauvegarde, il y avait un paquet de trucs...
J'ai coopéré, aucune raison de ne pas donner les phrases de pass pour déchiffrer les disques.
Oui, je sais, il paraît qu'il ne faut pas faire ça, mais pour le coup, je n'ai vraiment rien de mal à cacher... Un avocat? Quoi? Je veux démontrer mon innocence, alors qu'ils cherchent à prouver ma culpabilité.
Mes mots de passes écrits en clair sur des feuilles de papier... une bonne raison de les renouveler vous me direz.
Un long trajet en voiture banalisée, à fond la caisse, la conduite en toute sécurité, on oublie.
Je suis chanceux, on ne m'a pas menotté devant mes enfants.
Un interrogatoire bienveillant, méticuleusement calculé et analysé.
Ascenseur émotionnel, gentillesse et bousculade, rien n'est épargné pour entrevoir le vrai.
Tout est fouillé dans mes affaires et dans ma vie.
C'est très bien comme ça, il faut protéger tout le monde. C'est compliqué à vivre.
Déformation de la réalité, corruption des mots et des intentions...
Qui suis-je? Je doute de tout, même de moi.
Empreintes digitales, ADN, papiers à signer, attente encore et encore.
L'imagination de tout ce qui pourrait se passer, l'impuissance, le meilleur et surtout le pire.
Tiens, les photos de profil ne passent pas dans le fichier... Le gendarme transfère les photos de son portable vers l'autre machine en passant par son webmail laposte.net... Une partie de mon cerveau trouve ça rigolo. Mais que puis-je y faire de toute façon?
Retour à la maison avec mes affaires dans un sac poubelle.
J'ai de la chance, il y avait des trains.
Le second interrogatoire en rentrant chez soi. Légitime, compréhensible, mais si douloureux malgré tout leur soutient.
La présence des collègues, indispensable, salvatrice.
La lutte contre soi. Sans enfants, sans famille, sans amour, très vite la fin serait arrivée.
J'admire celleux qui affrontent la dépression. Quel courage! Je ne sais pas comment peut-on tenir si longtemps face aux idées noires?
2 jours figé devant le téléphone, en attente d'une réponse.
2 semaines d'attente, sans savoir...
Trembler de l'intérieur. Tout à l'intérieur.
Trembler sans savoir pourquoi.
Froid. Tout le temps.
Se forcer à manger pour tenir.
Le coeur qui bat si fort que je sens les veines de mon coup cogner, mon sang frapper derrière mes yeux.
Essayer d'être, à encaisser le regard innocent des autres qui n'a pas changé, quand c'est moi qui n'est plus le même.
Les heures n'ont plus tout à fait la même saveur. Il faut réapprendre.
Changer les mauvaises habitudes, plus de mail professionel sur le téléphone, plus de mail instantané.
L'enfer est passé.
Je ne me sens pourtant coupable, cela n'aurait pas dû arriver.
L'essentiel a été mis en valeur.
Ceux sur qui on peut compter.
Ce qui est le plus important.
Respirer.
Avant la suite.
Je ne connais pas la peur, car la peur tue l'esprit.
La peur est la petite mort qui conduit à l'oblitération totale.
J'affronterai ma peur.
Je lui permettrai de passer sur moi, au travers de moi.
Et lorsqu'elle sera passée, je tournerai mon oeil intérieur sur son chemin.
Et là où elle sera passée, il n'y aura plus rien.
Rien que moi.
Une réaction?
Envoyez votre commentaire par mail:
=> mailto:prx@si3t.ch?subject=sans-suite
Ou rejoignez le salon XMPP:
]]>
https://si3t.ch/log/2025-01-22-nuage.txt
2025-01-22T15:01:31Z
<![CDATA[
Suite à de récentes mésaventures, je réalise que ma méthode de sauvegarde n'est pas parfaite.
Actuellement, à chaque fois que j'éteins mon ordinateur, rsync envoie mes données sur mon serveur.
C'est via SSH, c'est éprouvé et robuste, et surtout c'est à mon avis bien sécurisé : clé SSH et chiffrement du disque.
Bref, ça me convient très bien pour mes données personnelles.
Cependant, cela suppose que j'ai accès à mon serveur en cas de besoin, et donc ma clé ssh à disposition.
Évidemment, il suffit de "perdre" mon ordinateur pour être coincé.
Le premier souci qui s'impose, c'est tous mes documents persos. Et en fait, il n'y en a pas tant que ça.
Ce qui est vraiment embêtant, c'est de ne plus avoir l'ensemble de mes cours. Des années de travail.
Heureusement, je dispose d'une instance Nextcloud pour le travail, ça s'appelle nuage, et c'est disponible pour tous les personnels de l'éducation nationale je crois.
=> https://nuage.apps.education.fr/
C'est fait pour le boulot, alors c'est parfait pour le besoin que j'en ai.
Me voilà donc à tester nextcloudcmd pour envoyer mes cours sur nuage.
Je m'y suis peut-être mal pris, mais l'application de synchronisation Nextcloud plante sur mon OpenBSD -current (bug à faire remonter si je prends le temps...), et nextcloudcmd ne fait rien...
Je me suis donc tourné vers rclone, et là, je suis ravi tellement ça marche bien. Il uploade les changements via le protocole webDAV, et j'ai mes documents toujours à portée de main même si mon matériel n'est plus accessible.
Une réaction?
Envoyez votre commentaire par mail:
=> mailto:prx@si3t.ch?subject=nuage
Ou rejoignez le salon XMPP:
]]>
https://si3t.ch/log/2025-01-15-Privatebin.txt
2025-01-15T14:04:57Z
<![CDATA[
De récentes mésaventures m'ont fait réaliser que je compte trop sur mon accès SSH à mon serveur. C'est notamment vrai lorsque je veux partager un fichier.
Habituellement, j'ai un petit script qui uploade avec sftp le fichier à partager dans un dossier.
#!/bin/sh # put a file on a server using sftp. # It returns an url to the randomized file name # A pubkey authentication is preferred test $# -eq 1 || exit sshcred="user@domain.tld" url="https://si3t.ch/pub/tmp" outdir="/var/www/htdocs/si3t.ch/pub/tmp" # if file has extension case "${1}" in *.*) ext=".${1##*.}" ;; *) ext="" ;; esac #rdm="$(openssl rand 5 -hex)$(date +%s)" rdm="$(date +%s)" out="${rdm}${ext}" ( printf "put \"%s\" %s\n" "${1}" "${outdir}/${out}" printf "chmod 666 %s\n" "${outdir}/${out}" printf "quit" ) | sftp "${sshcred}" > /dev/null 2>&1 printf "%s\n" "${url}/${out}" | xclip -i -selection clipboard printf "%s\n" "${url}/${out}" exit 0
Régulièrement, les fichiers qui sont trop vieux sont supprimés. J'ai pour cela une tâche cron qui s'en occupe:
@weekly find /var/www/htdocs/si3t.ch/pub/tmp/ -type f -mtime +8 -delete
Mais je ne peux utiliser cette méthode que si je dispose d'un ordinateur capable de faire du ssh, et à fortiori qui contient ma clé SSH.
Me voilà donc en quête d'un outil à auto-héberger.
Et là c'est la misère, à croire qu'il n'existe plus que docket et nodejs pour développer des trucs.
Rendez-nous les petits CGI propres ou les bouts de PHP pas compliqués!
Par hasard, je suis ensuite tombé sur le Privatebin de mon académie:
=> https://secret.ac-nantes.fr/
Je fais confiance à l'admin de mon serveur, je vais donc héberger Privatebin qui non seulement chiffre les données dans le navigateur (zero-knowledge pour le serveur) et permet de joindre des fichiers.
Après un peu de configuration, j'ai un truc qui me plaît :
La configuration de httpd pour les curieux est tout bête:
# Privatebin # Interdit de lire les données pastées location "/tools/secret/data/*" { block } # seul le index.php est traîté par PHP location "/tools/secret/" { directory index index.php } location "/tools/secret/index.php" { fastcgi socket "/run/php-fpm.sock" }
Si vous en avez besoin, c'est par ici:
=> https://si3t.ch/tools/secret/
Je suis curieux de découvrir de nouveaux outils à héberger, si possible de type zero-knowledge.
Une réaction?
Envoyez votre commentaire par mail:
=> mailto:prx@si3t.ch?subject=Privatebin
Ou rejoignez le salon XMPP:
]]>
https://si3t.ch/log/2025-01-06-sac-d-urgence.txt
2025-01-06T11:30:46Z
<![CDATA[
Imaginons qu'une catastrophe ait lieu demain : une guerre éclate, une tempête effroyable approche, une maladie incurable se répand, un nuage de gaz toxique est inévitable, des pluies acides sont imminentes, l'extrême-droite est arrivée au pouvoir...
Deux possibilités s'offrent alors à nous : rester combattre ou fuir.
Évidemment, impossible de savoir à l'avance comment on pourrait réagir ni ce qui sera réellement possible.
Manifestation de mon eco-anxiété? J'y pense (trop) souvent, et visualise des scénarios catastrophes quand le sommeil ne veut plus de moi à 3h du matin.
J'ai peut-être (probablement) quelques soucis qu'un psy pourrait creuser...
Peu importe, j'ai depuis quelques temps pris des mesures pour être préparé un minimum.
J'essaie de pas tomber dans paranoïa, je n'ai pas (encore) creusé de bunker dans le jardin ^^.
C'est justement en rigolant de ce sujet avec un couple d'amis qu'il m'a regardé très sérieusement, presque avec honte, pour me dire "mais moi aussi".
Plus tard, en rigolant, il me dira :
"Tout bon père de famille devrait avoir un sac d'urgence à portée de main". 😊
Ça me fait penser que peut-être certains trouveront intéressant le contenu de ce sac d'urgence.
Il existe des "kits de survie" tous prêts, et peuvent constituer une bonne base de départ, bien que des choses soient inutiles ou alors manquantes.
Il doit être léger, pratique à emporter, de façon à ce que se soit la seule chose à prendre puis partir à toutes jambes.
Mon vieux sac à dos qui me servait au collège à transporter mes affaires de sport fait tout à fait l'affaire: :)
À l'intérieur, on trouve :
Un jour, j'apprendrai à fabriquer un radio-émetteur pour compléter ce kit...
Il manque peut-être des couverts... Mais on ne part pas pour un camping ^^
Pareil pour la petite pelle... Pas sûr que ce soit le + important en cas d'urgence.
Il y a même une page gouvernementale sur le sujet:
=> https://www.info.gouv.fr/risques/se-preparer-a-une-situation-durgence
Une autre source avec des idées intéressantes :
Si vous avez des suggestions d'amélioration, je suis preneur :)
Une réaction?
Envoyez votre commentaire par mail:
=> mailto:prx@si3t.ch?subject=sac-d-urgence
Ou rejoignez le salon XMPP:
]]>
https://si3t.ch/log/2025-01-06-bibliotheque.txt
2025-01-06T08:52:51Z
<![CDATA[
Ma bibliothèque devenait trop petite.
Imaginez mon malheur, plus de place pour de nouveaux livres! Pire, des livres mal rangés, avec des genres qui se mélangent... Horreur!
Ma dame a trouvé des idées pour prolonger notre classique billy de chez Ikea (hé oui...).
Quelques planches, équerres et chevilles, un peu de verni acajou et le tour est joué.
Tout ceci a pris du temps : impossible de scier quand les enfants font la sieste, de vernir quand ils jouent à fond la caisse dans la maison, et encore moins de percer les murs le soir à l'heure du dodo.
Mais, petit à petit, 30 minutes après 30 minutes, c'est finalement terminé!
Joie, je peux racheter des livres!
Mais t'en avais pas déjà plein à lire ?
Ahem...
Bref, je me la pète avec la photo du résultat :) :
Une réaction?
Envoyez votre commentaire par mail:
=> mailto:prx@si3t.ch?subject=bibliotheque
Ou rejoignez le salon XMPP:
]]>
https://si3t.ch/log/2025-01-04-dmz.txt
2025-01-04T14:47:35Z
<![CDATA[
J'aime bien le bon vieux curseur dmz (port xcursor-dmz).
Aujourd'hui, j'ai appris comment changer le thème du curseur de la souris... simplement.
C'est à dire, sans lien symboliques ou bidouilles bizarres.
Il suffit d'ajouter dans ~/.profile cette ligne :
export XCURSOR_THEME=dmz
Bon pour les applis en gtk, comme Firefox, c'est pas encore gagné par contre... J4ai fait ça, sans succès...
mkdir -p ~/.icons/dmz/xcursors cp -r /usr/local/lib/X11/icons/dmz/* /home/prx/.icons/dmz/xcursors/ cat >> ~/.icons/dmz/cursor.theme <> ~/.icons/dmz/index.theme < EDIT:
merci arpinux de m'avoir envoyé la solution!
Il faut remplir un fichier ~/.icons/default/index.theme.
mkdir -p ~/.icons/default cat >> ~/.icons/default/index.theme <
Une réaction?
Envoyez votre commentaire par mail:
=> mailto:prx@si3t.ch?subject=dmz
Ou rejoignez le salon XMPP:
]]>
https://si3t.ch/log/2025-01-03-sfeed-clean.txt
2025-01-03T14:55:54Z
<![CDATA[
I really enjoy sfeed as my feed reader.
=> https://codemadness.org/git/sfeed/file/README.html
Amongst other thigs, I use it to display new entries when I first open a terminal, meaning automagically in tmux when my session pops up.
Recently, I noticed it was a little slower to display latest entries.
I had to clean up older entries and no longer subscribed feeds.
To do so, the README is very clear, but I had to gather things in a little script for later purpose :
#!/bin/sh # remove previous feeds older than a week. feeds_dir=~/.sfeed/feeds for i in "${feeds_dir}"/*; do echo "${i}" awk -F '\t' -v "old=$(($(date +'%s') - 604800))" 'int($1) > old' < "${i}" > "${i}".new mv "${i}".new "${i}" done
Comments?
=> mailto:prx@si3t.ch?subject=sfeed-clean | fremen@chat.si3t.ch
]]>
https://si3t.ch/log/2024-12-23-chretiens-a-la-porte.txt
2024-12-23T13:48:25Z
<![CDATA[
- toc toc toc*
Bonjour, je suis $Suzanne (remplace par le nom de ton choix) et voici mon fils $Eliott, nous sommes venus vous porter la parole de Dieu.Moi, encore en pyj, la maison sans dessus-dessous, mal réveillé...
Je réponds poliment que nous sommes bien au courant de ces choses, et que je ne souhaite pas leur faire perdre davantage leur temps.
Oh vous savez, ce n'est jamais une perte de temps de parler de Dieu.Ahem, oui sans doute, mais vraiment je vous jure, on a eu droit au catéchisme et on a déjà bien réfléchi à ce sujet...
Peut-être vous ne croyez pas en Dieu, mais vous devez bien croire en quelque chose. Ce qui compte, c'est d'avoir la foi vous savez...Je me retiens de répondre que c'est l'exact opposé d'un bon raisonnement scientifique. Devant mon air sceptique, et à la vue de mes 2 jeunes enfants venus écouter ce qui se passe à la porte de leur maison :
Mais dîtes-moi, comment voyez-vous l'avenir?Très franchement, là, je pensais aller plier le linge.
Je comprends que vous ne souhaitez pas discuter davantage...Évidemment espèce de malpolie! Je t'ai prévenue dès le début!
GRRRR, ça m'énerve!
Je comprends vraiment pas, tu crois en Dieu ou à la magie de l'univers quantique, j'en ai rien à foutre, t'es pas obligée de venir me déranger à la porte de chez moi pour m'imposer un discours que je n'ai pas demandé en fait!
C'est quoi cette manie de vouloir à tout prix que les autres pensent pareil?
Laissez donc les gens tranquilles!
On n'impose pas des convictions ou une croyance.
Et le pire, c'est qu'après c'est à moi qu'on fait les gros yeux parce que j'ai voulu refermer ma porte.
La prochaine fois, je leur dit que Dieu est une femme et que je connais bien la réincarnation de Jésus...
Une réaction?
Envoyez votre commentaire par mail:
=> mailto:prx@si3t.ch?subject=chretiens-a-la-porte
Ou rejoignez le salon XMPP:
]]>
https://si3t.ch/log/2024-12-16-philovie.txt
2024-12-16T09:32:11Z
<![CDATA[
Ces réflexions vont sans doute encore évoluer. Mais je crois en être arrivé à quelque chose de satisfaisant.
=> https://si3t.ch/misc/philovie/
J'ai essayé de rester très générique, de façon à ce que chacun et chacune puisse s'y retrouver.
Pour ma part, ça me fait penser à ma responsabilité de père, ma mission d'enseignant, mes inquiétudes écologiques, mon appétit pour le logiciel-libre.
Je me tais désormais et vous laisse lire, je suis curieux de lire vos réactions tel qu'est le texte ainsi.
## Faire le bien Refuse la violence, c'est le raccourci des faibles. Emprunte le long chemin de la gentillesse, c'est la voie des braves. Patiente. Comme une prière, un gage de confiance, une main intransigeante mais tendue vers le changement. Écoute, observe. Fais preuve d'empathie, nous ne sommes que des humains, un espèce bien jeune qui a tout à apprendre. Seul le bien peut engendrer le bon. ## Inspirer Sois digne de confiance. Reste fiable, toujours. Tiens tes promesses. Inspire par l'exemple, pas par l'obligation, alors réfléchis. ## Préserver Préserve les connaissances et les ressources. Partage.
Une réaction?
Envoyez votre commentaire par mail :
=> mailto:prx@si3t.ch?subject=philovie
]]>
https://si3t.ch/log/2024-12-15-philosophie.txt
2024-12-15T15:27:36Z
<![CDATA[
Philosophie de vie
EDIT: work in progress ici :
=> https://si3t.ch/misc/philovie/
C'est dans mes flux que j'ai vu passer cette idée : quelle est la façon dont on voit la vie? Quelle est sa philosophie?
=> https://manuelmoreale.com/@/page/3bg8rYZBhA7cNjBA
J'aime beaucoup cette idée, et j'y vois une sorte de voeux à la vie.
Je dois y réfléchir, mais en ce qui me concerne, ce qui me vient à l'esprit en premier, ce serait très court : "sois gentil".
La gentillesse est la plus importante des qualités. Je ne veux pas d'un monde où être gentil est considéré comme une faiblesse.
Être gentil, c'est être patient. Une patience comme une grande prière. De la patience en guise d'acte de foi pour avoir un courage à toute épreuves.
Faire preuve de gentillesse, c'est s'ouvrir à l'autre, une forme d'empathie à l'état pur qui renvoie à notre condition de simple être humain et nécessite un respect viscéral.
Enfin, la gentillesse, c'est souhaiter le meilleur pour chacun et contribuer à sa mise en oeuvre. Cela demande de l'exigence et de la générosité. Il en découle la nécessité de sauvegarder la connnaissance pour la rendre accessible et la transmettre le plus largement possible. (vivre les livres!)
Peut-être y ajouterai-je le minimalisme? Ou en tout cas "faire avec moins"?
Et le karma... Comme me le rappelle souvent arpinux, faire le bien, la vie te le rendra... J'aime bien, c'est rassurant, mais a la facheuse tendance à être biaisé de façon intéressée, de réclamer au mérite lorsque le retour n'est pas assez rapide. C'est pas clair dans ma tête.
Divers
J'ai ajouté une page "*" au si3tch qui contient la liste de toutes les pages:
=> /everything/
Dons
Pour 2025, j'ai activé le don récurrent à Framasoft.
=> https://soutenir.framasoft.org/fr/
C'est défiscalisé, pensez-y ;)
Dans un tout autre domaine, j'ai fait de même pour La Bonne Auberge:
=> https://www.patreon.com/c/LaBonneAuberge/membership
Citation
Deserves it! I daresay he does. Many that live deserve death. And some that die deserve life. Can you give it to them? Then do not be too eager to deal out death in judgement. For even the very wise cannot see all ends. I have not much hope that Gollum can be cured before he dies, but there is a chance of it. And he is bound up with the fate of the Ring. My heart tells me that he has some part to play yet, for good or ill, before the end; and when that comes, the pity of Bilbo may rule the fate of many – yours not least. -- Gandalf (Tolkien)...
All we have to decide is what to do with the time that is given us.'
Une réaction?
Envoyez votre commentaire par mail :
=> mailto:prx@si3t.ch?subject=philosophie
]]>
https://si3t.ch/log/2024-12-13-accalmie.txt
2024-12-13T20:46:07Z
<![CDATA[
Ce soir, tout est calme.
Les sons semblent étouffés, comme avant l'arrivée de la neige.
Ou le calme avant la tempête?
La tension est absente, la léthargie a gagné la maison.
Ici, tout le monde est épuisé.
Les journée 8h-20h + 2h de trajet à représenter devant élèves et parents m'ont vidé de mon énergie.
Les petits loups luttent contre les virus de l'hiver.
Madame prend enfin un peu de temps pour elle et est sortie. C'est une bonne chose, le burnout/la dépression guettent de près.
Alors, douche chaude, pizza, histoire, et dodo.
Pour ma part, c'est soirée Nethack et lecture.
J'essaie d'oublier les chercheurs d'embrouille et/ou ceux qui préfèrent ignorer des messages envoyés.
Un peu de paix dans ce monde, au creux de chez nous.
Bonne nuit :)
Une réaction?
Envoyez votre commentaire par mail :
=> mailto:prx@si3t.ch?subject=accalmie
]]>
https://si3t.ch/log/2024-11-27-block-ai-bots-with-relayd-openbsd.txt
2024-11-27T09:08:57Z
<![CDATA[
According to their advertised User-Agent, you can block AI scrapers with relayd.
To do so, I suggest to use tags
Every unwanted user-agent will be tagged, then every request with the above tag is discarded.
To simplify future work, I suggest to include a file in /etc/relayd.conf:
http protocol "http" { return error tls keypair ... include "/etc/relayd.d/ai.conf" # <--- HERE pass }Now, in /etc/relayd.d/ai.conf, let's add a few user-agent
# AI match request header "User-Agent" value "AI2Bot" tag "AI" match request header "User-Agent" value "Ai2Bot-Dolma" tag "AI" match request header "User-Agent" value "Amazonbot" tag "AI" match request header "User-Agent" value "anthropic-ai" tag "AI" match request header "User-Agent" value "Applebot" tag "AI" match request header "User-Agent" value "Applebot-Extended" tag "AI" match request header "User-Agent" value "Bytespider" tag "AI" match request header "User-Agent" value "CCBot" tag "AI" match request header "User-Agent" value "ChatGPT-User" tag "AI" match request header "User-Agent" value "Claude-Web" tag "AI" match request header "User-Agent" value "ClaudeBot" tag "AI" match request header "User-Agent" value "cohere-ai" tag "AI" match request header "User-Agent" value "Diffbot" tag "AI" match request header "User-Agent" value "DuckAssistBot" tag "AI" match request header "User-Agent" value "FacebookBot" tag "AI" match request header "User-Agent" value "FriendlyCrawler" tag "AI" match request header "User-Agent" value "Google-Extended" tag "AI" match request header "User-Agent" value "GoogleOther" tag "AI" match request header "User-Agent" value "GoogleOther-Image" tag "AI" match request header "User-Agent" value "GoogleOther-Video" tag "AI" match request header "User-Agent" value "GPTBot" tag "AI" match request header "User-Agent" value "iaskspider/2.0" tag "AI" match request header "User-Agent" value "ICC-Crawler" tag "AI" match request header "User-Agent" value "ImagesiftBot" tag "AI" match request header "User-Agent" value "img2dataset" tag "AI" match request header "User-Agent" value "ISSCyberRiskCrawler" tag "AI" match request header "User-Agent" value "Kangaroo" tag "AI" match request header "User-Agent" value "Meta-ExternalAgent" tag "AI" match request header "User-Agent" value "Meta-ExternalFetcher" tag "AI" match request header "User-Agent" value "OAI-SearchBot" tag "AI" match request header "User-Agent" value "omgili" tag "AI" match request header "User-Agent" value "omgilibot" tag "AI" match request header "User-Agent" value "PanguBot" tag "AI" match request header "User-Agent" value "PerplexityBot" tag "AI" match request header "User-Agent" value "PetalBot" tag "AI" match request header "User-Agent" value "Scrapy" tag "AI" match request header "User-Agent" value "Sidetrade" tag "AI" match request header "User-Agent" value "Timpibot" tag "AI" match request header "User-Agent" value "VelenPublicWebCrawler" tag "AI" match request header "User-Agent" value "Webzio-Extended" tag "AI" match request header "User-Agent" value "YouBot" tag "AI" block request quick tagged "AI" label "I don't feed IA"As you can see, in the end, I add a little message :)
The user-agent list has been found here:
=> https://raw.githubusercontent.com/ai-robots-txt/ai.robots.txt/refs/heads/main/robots.txt)
After reloading relayd, check it works as expected with curl:
> curl -H "User-Agent:GPTBot" https://si3t.ch [... snip ...]Forbidden
ForbiddenI don't feed IA
OpenBSD relayd at 2a01:e0a:2b8:ca70::1bad port 443