Back 2 Roots


Si seulement j'avais écouté mes parents quand j'étais petit !

Pourquoi, qu'est-ce qu'ils disaient tes parents ?

Je sais pas, j'ai pas écouté...

Toute ressemblance...

Citer Arthur Rimbaud, c'est bon ? J'veux dire on a encore le droit, hein ? Ok, ben alors je cite :

Tandis que les crachats rouges de la mitraille
Sifflent tout le jour par l’infini du ciel bleu ;
Qu’écarlates ou verts, près du Roi qui les raille,
Croulent les bataillons en masse dans le feu ;

Tandis qu’une folie épouvantable, broie
Et fait de cent milliers d’hommes un tas fumant ;
– Pauvres morts ! dans l’été, dans l’herbe, dans ta joie,
Nature ! ô toi qui fis ces hommes saintement ! ...

– Il est un Dieu, qui rit aux nappes damassées
Des autels, à l’encens, aux grands calices d’or ;
Qui dans le bercement des hosannah s’endort,

Et se réveille, quand des mères, ramassées
Dans l’angoisse, et pleurant sous leur vieux bonnet noir
Lui donnent un gros sou lié dans leur mouchoir !

Arthur Rimbaud,
Le Mal, 1870.

Bon, ça c'est fait...

Crypto Monet
C'est deux monnaies électroneek (ta mère) :
"Oulah, t'as une mine de Bitcoin ce matin t'es tout PayPal."
"M'en parle pas j'ai Zerocash de tension et j'Ethereum toutes les 2 minutes."

La minute de pub

Ben ouais, les "intelligences artificielles" mettent bien de la pub entre mes articles(*). Donc si je veux j'en mets aussi dans les articles et je la choisi moi-même avec mon "intelligence naturelle". Là c'est pour un pote sur Rennes. Il fait des portraits au pochoir, surtout dans les tons gris. J'ai vu ça aujourd'hui, j'aime bien ce qu'il fait, j'vous met sa carte(**) et son mail : kmi35i@yahoo.fr.

Après, je sais pas s'il fait aussi des tatouages au pochoir... Peut-être une idée à creuser :)



(*) Avec tous vos clics j'ai déjà gagné 5 000 000 euros, là je suis aux Bahamas près de la piscine.
(**) J'ai laissé que l'adresse email sur la carte parce que sinon... vie privée... tout ça, tout ca.

Bash Sampling

Parfois dans la vie on n'a pas besoin d'avoir toute l'info. Par exemple on peut s'intéresser à seulement un mille trois cent trente septième de l'info. Certes, ça fait pas beaucoup, sauf si on a trop d'info au départ (par exemple mille trois cent trente sept fois trop). Bref, voici une méthode pour faire du random sampling en bash. Eh ben en voilà un billet qu'il était nécessaire !

while read L; do ((RANDOM % 1337)) || echo $L; done < data > sample


Enigmateek (again)

Quel mot devient drôle quand on lui ajoute une lettre ?

Et un "équivalent" en anglais : which five letters word becomes shorter when you add two letters?

Je poste les solutions dès que je les ai trouvées.

Les derniers sauvages

Ayé, l'espèce humaine n'est plus 100% une espèce sauvage. Les premier.e.s humain.e.s génétiquement modifié.e.s, Lulu et Nana, sont né.e.s, les premier.e.s humain.e.s domesteeks en quelque sorte. Je suis trop nul en philo pour savoir si c'est plutôt bien ou plutôt mal. Mais je trouve que c'est plutôt intéressant.

Moi qui me suis toujours considéré comme un dinosaure, maintenant j'en suis certain.

Hiérarchiser les priorités

Mon nouveau fond d'écran / My new wallpaper (of death)

Expressions Irrégulières


L’autre jour j’avais pas grand-chose à penser dans ma tête. Du coup je me suis pris à réfléchir aux verbes irréguliers anglais. J’aime bien, ça change du python.

Irregular Verbs


Et de me poser cette question toute simple : « d’où vient cette obsession des profs à vouloir enseigner les verbes irréguliers anglais ? » Puis la question corolaire : « d’où vient cette obsession des élèves à ne pas vouloir apprendre les verbes irréguliers anglais ? »

À question simple réponse simple me direz-vous. Et c’est vrai qu’il existe des réponses simples, voire simplistes. Du genre : en France on est des fétichistes de la grammaire et on n’est pas foutu d’enseigner l’anglais correctement. Et corolairement côté élève : les verbes irréguliers c’est méga-chiant, nous ce qu’on veut c’est comprendre les paroles des chansons, genre KILL4ME (me dites pas que tous les élèves écoutent de la K-Pop et  de l’électro-trap ça va m’énerver).


KILL4ME


Tiens j’en profite pour faire un aparté parce que KILL4ME est à mon avis l’ultime hurlement authentiquement valable de Marylin Manson. Parce qu'à part ça j’aime pas trop ce qu’il fait depuis 10 ans. Mais avec KILL4ME il m’a juste crucifié à mes baffles ! L’impression d’entendre le gros son indus des débuts(*).

Tant que j’y suis, je fais un aparté dans l’aparté, tkt je reviens au sujet juste après. Autant la museek est fantasteek, autant la vidéo de KILL4ME est un peu space : commerciale, couteusement léchée et post-produite, avec cet acteur hollywoodien qui jouait naguère pour Disney. La première fois j’ai détesté la vidéo et maintenant je la trouve euh, intéressante. Mais bon, ça me fait ça avec toutes les vidéos de Marylin Manson en fait.
Allez, fin des apartés.


Les verbes irréguliers c’est le passé


Donc, vous l’aurez compris, je trouve les réponses toutes faites un peu nazes. Je préfère élaborer moi-même mes réponses un peu nazes.

Pour moi, la difficulté d’enseigner/apprendre les verbes irréguliers c’est avant tout une question d’âge. Ben oui, suis bien le raisonnement : les verbes irréguliers sont irréguliers seulement quand on les met au passé, plus précisément au simple past et au preterite(**) Au présent les verbes irréguliers se comportent à peu près comme n'importe quel verbe à la con normal. Or s’il y a un truc dont on se fout solidement quand on est élève, c’est bien le passé ! Et à l’inverse, s’il y a un truc qui nous fascine quand on est enseignant c’est bien le passé.
CQFD !


Du passé simple faisons table rase sous les aisselles


Même en utilisant les trucs pédagogeeks les plus extrêmes (décharges électreeks, drogues de synthèse, balades en montagne) on ne parviendra pas à enseigner ce qui ne suscite pas l’intérêt. À l’inverse, quand l’élève grandira et qu’il aura de plus en plus de choses à raconter (au passé donc) le simple past et le preterite {footnote purulent} lui deviendront des sujets utiles ; et donc faciles à apprendre. Par exemple à l’âge bénit du garage band avec les potes, quand on écrit nos premières chansons en anglais. Avant, rien à faire, c’est mort.


Application prateek


Chers enseignants, lâchez-leur la grappe aux collégiens et jeunes lycéens avec les verbes irréguliers. Jouez le coin du bois, attendez patiemment la classe de première ou de terminale. Là, repérez les élèves qui ont formé un garage band (en gros 90% de la classe). À ceux-là, enseignez comment s’exprimer au passé en anglais.

Et si c’est difficile pour vous de patienter jusqu’à là, souvenez-vous qu’à l'âge que de vos élèves vous connaisiez ça par coeur.


We don't need no education
We dont need no thought control
No dark sarcasm in the classroom
Teachers leave them kids alone
Hey! Teachers! Leave them kids alone!
All in all it's just another brick in the wall.
All in all you're just another brick in the wall.





(*) Un peu dans la veine du mytheek "Tourniquet". La même veine, ouais, celle où il plante l'aiguille.
(**) Rien que le mot « preterite » ça sonne plus comme une maladie de peau que comme un temps conjugué(***).
(***) Eh toi, si tu lis les notes de bas de page en plus des apartés, t’es pas arrivé au bout de l’article !

Enigmateek la soluce

(Ce billet fait suite au billet Enigmateek. Si tu l’as pas lu vas y vite vite vite. Et profites en pour relire tout Metallurgeek depuis Juillet 2011. Prends ton temps je bouge pas. (…) Eh ben t’as fait vite. Allez, maintenant que tout le monde est là j’enchaîne).

Vraiment sympa cette énigme, en particulier avec toutes les ambiguïtés dans l’énoncé qui permettent des réponses intéressantes et très diverses. En fait, Science & Avenir aurait pu poser la question avec 9 épiciers au lieu de 6. Oui, la solution en deux pesées sur une balance à plateaux marche jusqu’à neufs sachets. Tu m’crois pas ? Voici la méthode, inspirée du mix de plusieurs réponses sur FB plus une bière et un morceau de fromage.

Je prends mes neufs sachets, j’en mets trois sur un plateau, trois autres sur l’autre plateau, et les trois derniers je les laisse sur ma table avec mes chamallows. Si la balance penche d’un côté j’en déduis que le sachet de l’escroc est du côté le plus léger. Si la balance est à l’équilibre je sais que le sachet du fumier (Hadès noircisse sa face !) est sur la table.

Dans tous les cas je me retrouve avec trois sachets dont un. Je mets l’un de ces sachets sur un plateau, l’autre sur l’autre plateau parce que j’aime bien les trucs symétreeks, et le troisième dans mon calecif pour la déconne. Si la balance penche, le sachet du fumier est du côté le plus léger. Si la balance est à l’équilibre, le sachet du fils de rat est dans mon calcif.

Et, sauf collision de trous noirs supermassifs, on ne peux pas faire mieux que 9 avec deux pesées. Paskeu si on regarde bien, chaque pesée permet de couper l’espace des solutions en trois (selon que ça penche à gauche, ou à droite, ou que ça penche pô). Et donc avec deux pesées on peux au mieux couper l’espace en trois et re en trois : 3x3=9. Merci kiki on plie les gaules on rentre chez mémé.

Ça me met dans des états ce genre d’énigmes ! Du coup je suis pas près d’acheter du safran, ni de la coke, ni quoique ce soit vendu en paquet d'un gramme. Je continue à me défoncer aux chamallows. Les roses surtout.



épicène le mascu


Euh, je réfléchissais à un truc là...

faut dire "le langage inclusif"

ou "la langue inclusive" ?

Enigmateek

Il est assez rare que j'achète le magazine "la recherche" mais là il y avait un article qui m'intéressait à mort, alors je me suis fendu de quelques euros. Avant de me précipiter sur l'article en question, j'ai rapidement feuilleté l'ensemble du magazine histoire de voir comment c'était ficelé. Quand je feuillette je commence toujours par la fin, une habitude. Et donc je suis tombé direct sur la section "énigmes" du magazine.

Résultat : 1) je suis à fond dans les énigmes depuis des jours, 2) je n'ai toujours pas feuilleté le reste du magazine, 3) je n'ai toujours pas lu l'article qui m'intéressait à mort, 4) d'ailleurs je ne sais plus trop de quel article il s'agissait, 5) au moins une énigme est difficile et va falloir que j'achète le numéro suivant pour la soluce.


J'en partage une ici, d'énigme. Pas trop difficile et assez connue, mais particulièrement édifiante. Six épiciers vendent du safran de grande qualité par sachets de 1 gramme. L'un des épiciers triche et ne met en fait que 3/10 gramme dans ses sachets. L'enfoiré ! J'ai connu un dealer qui faisait pareil avec la coke ça m'a agacé je l'ai cloué à la porte du tribunal. Bref. On récupère un sachet chez chaque épicier. Sur une balance à plateaux, combien faut-il de pesées au minimum pour être certain de débusquer l'empafé d'épicier et le clouer à côté du dealer ?

Je vous laisse réfléchir dans vos têtes. Et si j'en voie un qui surfe pour trouver la réponse toute faite sur Internet, sérieux je le cloue avec les deux autres.


Ma meilleure soluce pour l'instant (spoil): je prends deux sachets au hasard et je les mets sur le plateau plateau de droite, je prends deux autres sachets au hasard et je les mets sur le plateau de gauche. Là, trois cas peuvent se produire: 1) ça pencha à droite, 2) ça penche à gauche, 3) ça penche pas. Chacun des cas me permet de savoir lequel des groupes de deux sachets contient celui de l'enflure d'épicier. Là je prends le groupe concerné et je fais une seconde pesée : un sachet sur chaque plateau. Le plus léger est celui de l'enflure d'épicier.

Une légère variante envoyée par une lectrice: elle met trois sachets sur chaque plateau. Du coup ça penche forcément d'un côté. Elle prend au hasard deux sachets dans le groupe le plus léger et refait une pesée avec (un sur chaque plateau).

Bon, reste plus qu'à trouver une solution en une seule pesée. Pas facile. Peut-être en utilisant le fait que le sachet de ce rapia d'épicier pèse 3/10 grammes.

Dead Is Not


J'ai croisé un steampunk à chien.
Il m'a dit no retro-futur.  
Eh ben ça se tient.
 

Reggaeek metalleek

Merci Affif pour celle-là !!
Bon d'habitude le raggae j'aime pas trop (sauf Papa Style).
J'aime bien quand c'est un p'tit peu plus moins calme.
Mais là bon quand même, une reprise de Led Zep.
Whole Lotta Love en plus.
Allez bisous tous plein et écoutez moi-ça !


It's a miracle


"Ne baisse pas les bras tu risquerais de le faire deux secondes avant le miracle."

T'ain, non seulement il faut attendre le miracle, mais en plus il faut garder les bras en l'air !

Vacances de geek

Quelques jeux pour se détendre les neurones

  • Mots croisés regex : https://regexcrossword.com/
  • Mots de passes croisés : https://zed0.co.uk/crossword/
  • Roulette Russe geek :
    [ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo “Click”
    (un conseil, n'executez JAMAIS cette ligne de commande, une fois sur 6 ça efface tout votre disque)

Un peu de culture quand même

Pour le reste c'est classeek

  • Bière
  • Piscine
  • Et re-bière derrière

HellFest 2018

Mon programme en trois points :

  1. Je me fracasse la tête.
  2. Je fais n'importe quoi.
  3. J'embrasse Bruce Dickinson avec la langue.
Faut savoir s'organiser.

Necrologeek

Le dernier mâle rhinocéros blanc est mort. Je ne le connaissais pas perso, mais quand même ça me laisse un peu triste...


polemeek


Le fond d'écran qui fout la merde en réunion.
Au mieux les gens n'écouteront pas.
Au pire ils s'entretueront.

Une RFC du 1er avril pour la tolérance

Les RFC du premier avril sont une tradition que j'adore. Celle de cette année est plutôt sympa: rfc8367.

Quoi de plus sérieux qu'une RFC avec son mode texte austère, son formalisme délicieusement ampoulé, ses implications sur le fonctionnement réseau. Quoi de plus déconnant qu'un poisson d'avril collé à la sauvette par un gamin facicieux dans le dos d'un grand monsieur sérieux en costume-cravatte-cigare. Alors mélanger les deux, du sérieux et du facicieux, c'est le summum.

La rfc8367 s'intitule "Wrongful Termination of Internet Protocol (IP) Packets". Les auteurs m'ont l'air de gars sérieux, l'un chez Intel, l'autre chez Marvell(*). Et les voillà épris de tolérance. Ils remarquent que certains packquets réseau sont "terminés" de manière tout à fait arbitraire. Rappelons qu'en anglais to terminate someone peut signifier virer quelqu'un ou executer quelqu'un. Les auteurs recensent les critères te terminsaison d'un paquet : taille, age, couleur, origine, etc. Lu comme ça c'est effectivement révoltant de terminer des pauvres paquets réseaux sur des critères aussi arbitraires.

L'humour peu parfois (toujours ?) véhiculer des messages. Difficile de lire cette RFC sans faire le lien avec l'actualité outre Atlanteek où - de fait - des gens se font tuer sur des critères arbitraires.

Je ne sais pas si on atteindra un jour le niveau d'humour de la rfc1149, mais en attendant celle de cette année m'a bien fait rire. Et refléchir.



(*) Le Marvell avec deux "L", ceux qui font des semi-conducteurs, pas ceux qui font des super-héros (même si certains super-héros on aussi deux "L" pour voler).

Faites chauffer la colle !

Faites chauffer la colle et brûlez des cierges,
le HellFest approche.
Allez, deux vidéos de la grande époque,
pour patienter...

Circle pit (oresque)

Wall of death (truction)


Hygiène de vie


geek rule #001: communicate
morning first thing: update
evening last  thing: commit

My humble tribute to xkcd

Without xkcd the Web would be even more boring. Tonight, I was thinking about what generative adversarial network could bring whenever trained with xkcd cartoons. And some extra weight on my favorites pics.


S.O.S (Sense-Of-Self)


Oulah, long time no see!


J'ai profité d'être cloué au lit avec angine et oreilles qui saignent pour réfléchir dans ma tête. Du coup lecteurs adorés, je vous écris ! L'arrêt maladie ça a du bon, tant que ça ne dure pas trop longtemps.

Pour une fois je ne me suis pas pris la tête avec des mots de passe, ou du vim ou du ROT13. Faut changer d'obsession de temps en temps. Du coup j'ai repris un vieux sujet datant de mes recherches fondamentales (genre). Il s’agit du sens du soi. Sense-Of-Self en anglais, ça fait tout de suite plus classe. D'autant que les initiales c'est "S.O.S" d'où le titre de ce billet. C'est bien ficelé hein ?

Version courte et compliquée


J'ai enfin trouvé un programme python dont l'uneek fonction est de se reconnaitre lui-même, et seulement lui-même. Pour la métaphore disons un "système immunitaire". Le voici en action :
$ cat sos.py
D='Q=chr(39);print("01"[input()=="D="+Q+D+Q+";"+D])';Q=chr(39);print("01"[input()=="D="+Q+D+Q+";"+D]) 
$ cat sos.py | python3 sos.py 
1 
$ echo "je suis un virus" | sos.py
0
À quoi ça sert ? Ben a rien comme d'hab. Sérieux, après toutes ces années à me lire vous posez encore la question ;)

Version longue et délicatement parsemée d'humour bien relou


Le Sense-Of-Self c'est la propriété qui permet à une entité de se distinguer elle-même de tout le reste. Le monde se divise alors en deux catégories : le soi et le non-soi.

Je suis reparti sur cette piste parce que je pensais notamment à toutes les conneries que fait mon organisme en ce moment : inflammation, système immunitaire survolté, allergies. Autant de réactions justement liées à ce fameux "sens-du-soi". Le stade ultime c'est les réactions auto-immunes où l'organisme s'attaque lui-même parce qu'il se prend pour du non-soi. Truc de ouf.

En terme informateek, le Sense-Of-Self prend une résonnance intéressante. De loin c'est peut-être lié à la question - autrement plus fumeuse - de la conscience des machines. Deux trois gugusses ont d'ailleurs vaguement réfléchi à ça : Alan Turing, John Von Neumann, Marvin Minsky, Andrei Kolmogorov... Plus récemment Raymond Smullyan, David Naccache(*), Adrian Perrig(*), etc. Du coup je me suis dit comme ça : euh, pourquoi pas moi ?

N'étant pas précisément équipé du même appareil cérébral que les personnes susnommées, je me suis contenté d'une version simplifiée du problème. Formalisons :

Existe-t-il un programme SOS qui affiche "1" lorsqu'il est appliqué à lui-même et qui affiche "0" lorsqu'il est appliqué à toute autre entrée ?

Autrement dit, le programme se reconnait lui-même (1) et fait la différence avec tout le reste (0). On aurait : SOS(SOS)=1 et SOS(other)=0.

De plus, je me suis demandé s'il existe un programme SOS qui ne fait QUE ça. Par exemple il n'en profite pas pour nous afficher en plus de la pub ou pour envoyer nos données personnelles sous forme de cookies à un serveur dans un autre pays. Je recherche un programme en quelque sorte minimal, qui se réduirait à la fonction Sense-Of-Self. Toujours dans l'esprit minimaliste, je voudrais que le programme soit court, voire même le plus court possible tant qu'on y est. Dans l'idée d'isoler l'essence même du sens-de-soi. "Isoler l'essence même du sens-de-soi" ça veut pas dire grand-chose mais j'adore écrire des phrases comme ça.

Les tas de lard
En bon geek, j'ai jeté un œil à l'état de l'art (voir illustration). Autant le reconnaitre, il existe déjà beaucoup de choses sur le sujet, notamment sous l'angle des "Quines". Un Quine (une Quine ?) c'est un programme autoreproducteur : il ne fait rien d'autre qu'afficher son propre code, sans aide extérieure. Comme une bestiole qui vomirait son ADN, et seulement son ADN. Pas comme moi au HellFest. On est déjà très proche de ce que je recherche. Moi je veux un programme qui reconnait son ADN au lieu de l'afficher.

Ouaip, et bien même en ayant déjà écrit des Quines par le passé, il m'a fallu quand même un sacré bout de temps pour trouver un programme Sense-Of-Self opérationnel ! Et j'ai mis plus de temps encore à le raccourcir. Quant à prouver que le résultat est de longueur minimale, ça je n'ai pas encore réussi. On n'aura qu'à dire que c'est à cause des médocs qui m'empêchent de me concentrer à fond.

Ah oui, avant de passer aux choses compliquées, j'ai oublié de préciser un point techneek : la longueur du code s'entend toujours relativement à un langage de programmation donné. Par exemple j'ai choisi Python vu que je sais à peu près faire que ça. Pas question donc de comparer des longueurs de code C / Python / Perl / Bash / Scala, etc.(**) De toute façon c'est le code C qui sera le plus long, tellement c'est pourri le C, beuurrrkkk.

Première tentative


Autant le dire tout de suite, cette première tentative ne fonctionne pas. Elle est là pour montrer précisément le point difficile. L'idée naïve c'est de se dire : le programme va contenir une copie de son ADN, va prendre l'entrée qu'on lui donne, comparer et afficher 0 ou 1 selon que c'est pareil ou pas. Vite fait bien fait comme ça on est direct rentré chez mémé pour aller regarder enquête d'action.

Et ben non parce que ça coince, cf. pseudo-code : If Input == ADN Then 1 Else 0. Avec la chaîne de caractère ADN qui contient une copie du programme. Ce qui donne chose comme ADN = 'If Input == ADN Then 1 Else 0'. Ah ben oui, mais maintenant la chaine 'ADN' contient aussi une copie la chaine 'ADN', c'est malin ! Du coup ça fait : ADN = 'If Input == 'If Input == ADN Then 1 Else 0' Then 1 Else 0'.

Là ça devient le Bronx, pleins de trucs ne vont pas : la nouvelle chaine contient toujours une référence à ADN, on a juste déplacé le problème d'un cran. Et surtout, de manière plus pernicieuse, se pointe une sérieuse galère avec les apostrophes : si j'utilise les mêmes apostrophes pour la première copie de ADN et la pour deuxième (et en fait pour toutes les copies ad-infinitum) on va plus savoir quelles apostrophes débutent quel ADN et quelles apostrophes terminent quel autre ADN. Merdier de ADN : tiens, je baptise ça "Syndrome de Monsanto" ça va me détendre.

Alors on la met où l'apostrophe ?


Dans ton Q ! Non lecteur adoré ce n'est pas un manque de respect. Je veux simplement indiquer qu’il faut encoder l'apostrophe dans une variable, que j’ai nommée Q comme Quote (apostrophe en anglais). Après c'est pas ma faute si en anglais le mot Quote commence par un Q et du coup ça fait un jeu de mot relou.

Foin de digressions, voici enfin la bête, Ta-Daaaaaa : 
D='Q=chr(39);print("01"[input()=="D="+Q+D+Q+";"+D])';Q=chr(39);print("01"[input()=="D="+Q+D+Q+";"+D])
Ça s'utilise comme ça: 
$ cat sos.py | python3 sos.py
1
$ echo "Je suis un virus" | python3 sos.py
0

Explications


Allez, quelques explications parce que je sens des scepteeks dans le fond de la salle.

Considérons d'abord le cas où le programme se reconnait effectivement lui-même : $ python3 sos.py < sos.py répond 1. Le code lancé est contenu dans le fichier sos.py et l'entrée est aussi dans sos.py. Le programme s'exécute ainsi :
  • Affecte une chaine de caractères à la variable D, comme ADN.
  • Affecte chr(39) à la variable Q, comme Quote.
  • Affiche le résultat d'une comparaison logeek (==) et ajoute un peu de formatage idomateek python, "01"[...] valant "0" pour False et "1" pour "True"(***).
Il faut probablement un peu de temps pour se rendre compte que le ADN du programme dépend en fait du programme lui-même (et vice-versa). C'est très précisément là que se situe la difficulté, comme avec les Quines. Dès qu'on change un iota quelque part il faut refléter ce changement ailleurs dans le programme. Mais au moins on a résolu le problème d'encodage. En effet le terme Q=chr(39) représente bien l'apostrophe mais sans l'utiliser de manière littérale.

Voyons maintenant le cas où le programme détecte autre chose que lui-même : comme précédemment, le programme reconstruit une version complète de lui-même à l'aide de son ADN et de l'apostrophe encodée (c'est la partie "D="+Q+D+Q+";"+D). Mais là il constate que cette version est différente de l'entrée (comparaison ==) et affiche finalement "0".

Reste à s'occuper de la longueur du programme : 103 symboles. Pour faire plus court, on peut déjà remarquer que les techneeks "classeeks" de code golfing ne marchent pas très bien ici : typiquement, renommer la fonction print en une fonction plus courte (mettons p) devrait être fait deux fois. Une fois dans le ADN une fois dans le programme. Il faudrait alors écrire deux fois "p=print;" ce qui consommerai en tout 16 caractères. Pas bon car au final on n’en regagne que 8 en écrivant (deux fois) p au lieu de print. J'entrevois d'autres pistes en utilisant soit la fonction eval() de python, soit l'embryon de lambda calcul intégré au langage. J’ai fait deux trois tentatives du bout des orteils, pas simple. Si on est moins regardant sur les sorties, et qu'on utilise directement "True" et "False" au lieu de "1" et "0", on tombe à 91 symboles, mais ça triche un peu par rapport à l'énoncé de départ :

D='Q=chr(39);print(input()=="D="+Q+D+Q+";"+D)';Q=chr(39);print(input()=="D="+Q+D+Q+";"+D)


Conclusion 


Il est possible d'écrire un programme court ayant "le sens-du-soi" et ne remplissant que cette fonction.


Pour ceux que les applications intéressent quand même, il n'est pas bien compliqué d'adjoindre une fonction utile au SOS de base. Par exemple pour acheter des t-shirts sur Rock A Gogo. Ce qui donne par exemple:
D='Q=chr(39);print("buy-death-metal-t-shirts");print("01"[input()=="D="+Q+D+Q+";"+D])';Q=chr(39);print("buy-death-metal-t-shirts");print("01"[input()=="D="+Q+D+Q+";"+D])
Notez que si la fonction utile contient beaucoup de symboles on peut stoker son ADN sous forme compressée. Et même, en se contentant de stoker un condensat cryptograpeek (ouais, un hash) on retombe sur une méthode connue de vérification d'intégrité du code. En fait cette méthode-là peut être trouvée plus directement sans se prendre la tête avec toutes ces histoires de sense-of-self.

Pour ceux que les applications n'excitent pas plus que ça, faites juste tourner le concept dans votre tête : il existe une machine dont l'uneek fonction est de se différencier de tout le reste.

Nan, j'déconne.


(*) Merde, parmi les gens cités il y en a qui vivent encore, et je viens de les traiter de gugusses. Alors que j'ai un infini respect pour eux.

(**) On me souffle dans l'oreillette que Kolmogorov et Chaitin avaient déjà expliqué ça genre il y a 50 ans. Désolé les gars, je vulgarise. Par contre si on pouvait arrêter de me souffler dans les oreillettes, j'ai une double otite, merci.

(***) "1" pour True, tous pour un !