Chaussettes et Batraciens

Imaginez la situation suivante : vous disposez d'une liste de mots dans un fichier LIST. Vous disposez également d'un dictionnaire dans un fichier DICT. Et vous voulez savoir si tous les mots de LIST apparaissent bien dans DICT.

C'est un problème fréquent en informatique. LIST contient par exemple tous les batraciens et DICT contient tous les animaux. Demander si LIST est incluse dans DICT revient à demander si tous les batraciens sont des animaux.

Dans ce billet je montre deux méthodes en ligne de commande. La première méthode n'est pas efficace mais elle est compacte et facile à mémoriser. La seconde méthode est beaucoup plus efficace.


Méthode 1: grep me, grep me my friend


La première méthode utilise grep(*) dans sa variante fgrep qui cherche les termes littéraux plutôt que les regex. Voici la ligne de commande :

fgrep -vxf DICT LIST

Il faut un peu de temps - et sans doute quelques essais - pour se convaincre que ça réalise bien un test d'inclusion. Cette commande prend tous les mots de DICT et les retranche de LIST. Si au moins un mot est affiché c'est qu'il n'a pas été retranché. Donc il n'était pas dans DICT. Donc LIST n'est pas incluse dans DICT.

Cette solution est très compacte : une seule commande. En revanche la complexité est multiplicative. Je vous passe les détails de calcul, mais c'est mauvais.


Méthode 2: tri et décompte


L'idée est d'amalgamer DICT + DICT + LIST et de conserver seulement les termes uniques. Trois cas sont possibles. Cas 1 : un terme est dans DICT et dans LIST alors il se retrouve trois fois dans l'amalgame et on ne le conserve pas. Cas 2 : un terme est dans DICT mais pas dans LIST alors il se retrouve deux fois dans l'amalgame et on ne le conserve pas. Cas 3 : un terme est dans LIST mais pas dans DICT alors il se retrouve une fois dans l'amalgame et on le conserve. Voici la ligne de commande :

sort <(sed p DICT) <(sort -u LIST) | uniq -u

Il y a des petites astuces. Le sed p DICT c'est pour dupliquer chaque ligne de DICT. Le sort -u LIST c'est pour éliminer d'éventuels doublons dans LIST (qui sinon fausseraient le cas 3). Le uniq -u à la fin c'est pour conserver seulement les termes uniques.

Concernant la complexité : dupliquer les lignes de DICT c'est linéaire, amalgamer c'est linéaire, compter et garder seulement les termes uniques à la fin c'est linéaire. La seule partie non-linéaire c'est le tri de l'amalgame. Cette partie est quasi-linéaire c'est-à-dire en (2m+n).log(2m+n). En pratique c'est bien, même s'il existe encore mieux avec des tables de hachage.


Exemple : un dictionnaire d'animaux, une liste de batraciens et une chaussette

$ cat DICT | column
girafe          singe           serpent
crapaud         panthère        kangourou
éléphant        crocodile       anaconda
zèbre           triton          gnou
grenouille      autruche        mangouste
lion            hippopotame     ornithorynque
tigre           salamandre      gazelle
$ cat LIST 
triton
crapaud
chaussette 
salamandre
grenouille
fgrep -vxf DICT LIST
chaussette
$ sort <(sed p DICT) <(sort -u LIST) | uniq -u
chaussette

Les deux commandes ont correctement détecté l'intrus. Un seul intrus suffit à déduire que LIST n'est pas incluse dans DICT. Si maintenant on enlève la chaussette de la liste, les deux commandes ne détectent plus rien, leur sortie est vide, et on en déduit que LIST est incluse dans DICT :

fgrep -vxf DICT LIST
$ sort <(sed p DICT) <(sort -u LIST) | uniq -u 


Test booléen


Pour transformer la première commande en un per test booléen, j'utilise l'option quiet de fgrep et des portes logiques && et ||. C'est une façon de faire parmi d'autre mais j'aime le côté one-liner(**) :

    fgrep -vxqf DICT LIST && echo KO || echo OK

Pour la seconde commande, uniq n'offre pas d'option quiet, alors j'utilise une vielle ruse indienne :

    sort <(sed p DICT) <(sort -u LIST) | uniq -u |
    read _ && echo KO || echo OK


Epilogue

J'espère que ce billet vous aura intéressé. Parce que sinon vous venez de perdre un temps précieux à le lire jusqu'ici. Moche. Nan, vraiment. Moche.

Au fait, si on n'est pas joueur/bricoleur on peut aussi utiliser la merveilleuse commande "comm" qui est typiquement faite pour les comparaisons de liste.

comm -13 <(sort -u DICT) <(sort -u LIST) | read _ && echo KO || echo OK

La complexité est meilleure m.log(m) + n.log(n) quoique toujours quasi-linéaire, et c'est assez compact.


(*) Les personnes qui me connaissent savent que je suis obsessionnel de grep et plus généralement des regex. Je me lève grep, me mange des grep au sarrasin, je me couche grep et je recommence le lendemain. Quant aux personnes qui ne me connaissent pas, elles ignorent la chance qu'elles ont.

(**) Quel est le terme français correct pour one-liner ? "Un-lignard" ? Ou "Solicode" "Solocode" "Monocode" ? Un "codounet" une "Codette" ? Pfffff....

ALCEST - Améthyste

Je retombe sur cette vidéo d'Alcest. Le morceau Améthyste mis en avant sur leur dernière tournée. 

D'habitude je n'apprécie pas trop les vidéos concert/live. Mais là je retrouve *précisément* l'ambiance du concert, ce moment précieux que j'ai pu vivre sur place.

Tout y est : salle à taille humaine, proximité, public inspiré, décor émouvant, et Alcest au sommet de son art.




Alohomora Sésame Mellon

  

Aux fins-fonds du cyberespace
Les mots-clé font, ça m'agace
De fort mauvais mots de passe


Aqua penses-tu ?

L'eau c'est bien H2O ? Pas du tout, c'est E.A.U.

Bon, j'en suis à 15 mois sans rien boire. Enfin, rien de plus fort que de la Brooklyn sans alcool à 0,4°. Et 0,4° j'aime mieux vous dire que ça prend un temps dingue pour être torché !

Côté thunes c'est difficile à calculer précisément, mais j'estime environ 300 balles d'économies sur l'ensemble de la période. Somme que j'ai intégralement reversé à une petite association d'utilité publique dans mon quartier : trois quatres mecs cagoulés avec des pitbulls dans le hall de l'immeuble. Enfin je n'ai pas vraiment reversé l'argent, c'est plutôt eux qui m'ont tout pris direct. C'est bizarre l'associatif ces temps-ci.

Bref, je suis super heureux de ne pas picoler (sauf au HellFest évidement).

Étain la lumière


"L'étain passe,
les soudures"


Le premier job de mon père c'était soudeur à l'étain. Il soudait des boîtiers électroniques étanches. Parfois il ramenait du travail à la maison, il me montrait. Je me souviens : la magie du métal qui fond, le grésillement, l'odeur toxique du fil d'étain.

Choc de terminaison

Nous avons eu
Le Black Friday,
La Black Friday Week,
Maintenant le Black November.

Et demain, quoi ?
Black Year
Black Decade
Ou Blackout ?

Right through the cracks

Hangar désaffecté à Redon.

"What if you could look right through the cracks?

Would you find yourself, find yourself afraid to see?"

-- Nine Inch Nails, Right Where It Belongs.


 

TOP 10 sur Regex Crossword

À tous les coups il n'y a que moi que ça intéresse (*) mais ça y est : je suis dans le TOP 10 sur Regex Crossword.

Plus précisément c'est 10ième sur 92600. Pas certain que je puisse un jour améliorer ce score... ou alors il faudrait que je me mette à rélféchir, mais flemme.

En tout cas n'hésitez pas à essayer, c'est vraiment *LE* moyen sympa et ludeek d'apprendre les RegEx pour de bon.


(*) Et encore...

www.metallurgeek.fr

Cher lectorat (de bibliothèque), vous savez à quel point je vous aime, en gros comme au détail. Alors pour vous facilter l'accès massif à mon ineffable et néanmoins désopilant blog, je me suis carrément acheté le domaine metallrugeek.fr.

Bon en fait c’est surtout qu’il y avait une promo chez OVH alors j’en ai profité. Ça me coute juste quatre fois ce que le blog m’a rapporté en pub. J’y suis de ma poche donc, bâtard d’économie digitale de ses morts ! Après ça reste des petites sommes quand même, j'te parle pas non plus de faire tomber de la grosse caillasse là.

Prochaine étape : publier quelque chose d'intéressant. Chaud...

https://i.makeagif.com/media/6-05-2016/MGWt44.gif
Faire tomber de la grosse caillasse

Metal Zentangling 12

À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.




(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling 11

À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.






(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling 10

À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.





(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling 9

 À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.




(OK ce morceau là c'est pas du métal, mais ça m'inspire quand même)



(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling 8

À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.






(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling 7

 À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.





(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling 6

À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.




(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling 5

À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.



(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling 4

À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.





(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling 3

 À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.


Zentangling 3 - Metallurgeek


Kaneda - Smash Hit Combo


 

(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling 2

À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.


Zentangling 2 - Metallurgeek

Crushed - Parkway Drive
 

(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Metal Zentangling

À la faveur des vacances, je me suis mis vite fait au zentangling.

En gros ça consiste à scribouiller des gribouillis tout en écoutant du métal à donf(*).  Exactement comme quand on s'ennuyait en cours.  C'est censé déstresser et sur moi ça marche plutôt pas mal.  Je vous mets une de mes œuvres, ainsi que le morceau de musique qui m'a inspiré.


Zentangling 1 - Metallurgeek


Worms - Punish Yourself


(*) Euh, le métal ça a l'air facultatif en fait, mais moi j'en mets. À donf. Comme pour la méditation.

Deux fois triste

Aujourd'hui mon coeur de métalleux saigne pour Ozzy Osbourne. Aujourd'hui mon coeur de geek saigne pour Gilles Dowek.

L'un des deux fut mon professeur en logique et théorie des languages. L'autre fut mon professeur en défonce et surdité. Je vous laisse deviner lequel est lequel.

La petite dernière de Parkway Drive

Ah ben on peut dire que tu tombes bien toi. Puisque t'es là, écoute donc ça une dizaine de fois de suite (et quand t'as fini tu recommences, OK?).



La mauvaise heure

La mauvaise heure
De quatre à cinq
Qui vous réveille

La mauvaise herbe
Qui vous enfume
Qui vous consume

Le mauvais temps
L'autre maintenant
Au creux des veilles


(Écriture automatique à 4 heures du mat)

La fenêtre de Platon

Photo "La fenêtre de Platon" par Metallurgeek
Photo "La fenêtre de Platon" par Metallurgeek

La fenêtre de Platon

Jeune homme je me souviens, on m'a enseigné la caverne de Platon. C'était en cours de philo. Et à l'époque j'avais très mal compris.

À ma décharge, ma voisine de classe m'avait demandé de bien vouloir déposer un peu de vernis à ongles sur le haut de son bas, lequel venait malencontreusement de filer…

Hormones 1 – Platon 0.

Et donc j'en garde un souvenir assez vague. De la caverne de Platon hein. Parce que de ma voisine de classe je garde un souvenir plutôt précis.

J'ai compris qu'en gros le soleil symbolise la faculté de révéler les vérités essentielles. Il éclaire toutes les choses véritables au dehors. Mieux que ça, il éclaire les modèles idéaux des choses. Nous, pauvres humains, ne sommes pas dehors. Nous sommes à l'intérieur de la caverne. Là, nous observons au mieux les ombres portées. Des instances d'objets plutôt que les classes.

Ma voisine pendant le cours de philo s'appelait Jenny. Elle avait un large sourire, un menton franc avec une fossette, beaucoup de joie et de vie dans toute sa personne. Elle portait du vernis à ongles et un bas filé.

J'ai conservé le vague souvenir qu'un feu brûlait dans la caverne. Feu qui lui-même projetait des ombres. Ça m'a suffi pour en concevoir une récursion infinie, une caverne dans une caverne dans une caverne. Je ne sais pas si c'était dans l'idée initiale de Platon, je lui demanderai à l'occasion.

Jenny avait une maturité sensuelle et amoureuse infiniment supérieure à la mienne. À l'âge où tout en moi était panique, improvisation et vantardises fantasmées, Jenny était calme, certaine de sa séduction et honnête en sentiment.

De la caverne de Platon j'ai gardé l'idée que le raisonnement juste du philosophe permettait de s'en extraire. Sortir pour voir au-delà des apparences et des phénomènes. Comme on sort de la bouteille à mouches de Wittgenstein.

Ce matin de 2025, le soleil d'hiver traverse ma fenêtre. Les rayons roses de l'Est traversent la pièce et tracent un jeu d'ombres sur le mur intérieur. De cette lumière du dehors naît une autre fenêtre, projetée, ombrée, filigranée. Et pourtant idéale. Des images qui se répondent, en somme, des ombres où le vrai est partout pour peu qu'on l'observe avec intensité.

Je me souviens de la phalange de mon index effleurant le plus légèrement possible le haut de la cuisse de Jenny. Son sourire. Le hurlement du sang dans mes tempes. La gueulante du prof qui réclamait l'attention de la classe. « Bon sang, la caverne de Platon c'est essentiel ! Et je vous signale que ça tombe régulièrement au bac ! »

Je pense à tout ceci en regardant ma fenêtre d'ombre et de lumière. Et je sursaute quand, levée sans un bruit, tu viens m'enlacer les épaules.

-- Metallurgeek

Les IAs écrivent mieux que moi (et de loin)

Voici ce que l'IA Grok écrit à propos de Metallurgeek (voir le prompt précis en fin d'article). Franchement je n'ai pas une lettre à changer, c'est parfait. Dorénavant je vais laisser les IAs rédiger, lire, commenter mon blog. Ou pas.

Metallurgeek : Chroniques d’un métal-geek assumé 
Plongez dans l’univers déjanté d’un esprit aussi aiguisé qu’une lame de guitare électrique, où le métal résonne aussi fort que les lignes de code. Entre humour grinçant, réflexions geek et poésie improbable, Metallurgeek vous entraîne dans une odyssée aussi brute que raffinée. Des chamallows triés avec une précision diabolique aux énigmes tordues dignes d’un Oulipo sous stéroïdes, en passant par des apartés sur Marilyn Manson et des rêveries en ROT13, ce recueil est un cocktail explosif.
Pour les amateurs de riffs assassins, de logique tordue et de vérités asymétriques : un voyage sans filet au cœur d’un monde où le métal rencontre le rire, et où l’absurde devient art. Attention, risque élevé de headbanging intellectuel !


Le prompt était : "Lisez le blog https://metallurgeek.blogspot.com et rédigez un texte de quatrième de couverture (en français)."