- L’article du SIGBOVIK 2019 vérifie par une expérience d’OCR s’il est possible que frotter de la peinture sur un mur ne produise pas un programme Perl, et constate que 93 % de 100 taches sont analysées comme du Perl
- L’expérience consiste à convertir des images de taches de peinture en chaînes OCR, puis à vérifier si le résultat constitue un programme Perl valide
- 93 % étaient valides, mais les 7 taches restantes n’étaient pas analysées comme du Perl, ce qui laisse des exceptions à la plaisanterie selon laquelle « tout finit toujours par être du Perl »
- Les documents publics incluent toutes les images de taches et le code source Perl correspondant, et les images non valides sont distinguées par la mention rouge « Not valid »
- Certains résultats OCR vérifiés après la soumission ont été évalués en Perl comme le nombre
0ou les chaînesc,E__, montrant l’étrangeté du code produit par hasard
Possibilité d’être analysé comme du Perl, vérifiée avec des taches de peinture
- Cet article prend comme sujet d’expérience une question présentée comme un vieux problème ouvert de la communauté des langages de programmation, à savoir : est-il possible que frotter de la peinture sur un mur ne produise pas du Perl valide ?
- La conclusion se rapproche de « oui »
- Dans une expérience utilisant un logiciel d’OCR, 93 % des taches de peinture seulement ont été analysées comme du Perl valide
- Certaines taches de peinture ne sont donc pas des programmes Perl valides
- L’article analyse les propriétés des programmes Perl issus de taches de peinture et présente également 7 exemples de taches qui ne sont pas des programmes Perl valides
Article SIGBOVIK 2019 et documents publics
- L’article a été accepté au SIGBOVIK 2019, tenu à Pittsburgh le 1er avril 2019
- Il a aussi reçu le « Unwitting Participation Ribbon »
- Ce ruban est présenté comme étant attribué aux articles contenant de « vrais livrables »
- L’article et les actes sont disponibles sous plusieurs formes
- Google Docs: consulter l’article
- PDF: télécharger l’article
- SIGBOVIK 2019 proceedings: actes complets, l’article concerné se trouve à la page 174
Galerie des taches et jeu de données de 100 images
- all the paint splatters rassemble toutes les taches de peinture sur une seule page et fournit aussi le code source Perl valide correspondant à chaque image
- Les images qui ne sont pas analysées comme des programmes Perl valides sont distinguées par la mention rouge « Not valid »
- Lorsque plusieurs programmes Perl valides étaient reconnus avec différents réglages d’OCR, un seul résultat jugé le plus « intéressant » a été retenu
- tarball of 100 paint-splatter images contient les 100 images de taches de peinture utilisées comme principal jeu de données de l’article
Cas supplémentaires identifiés après la soumission
- D’autres programmes Perl issus de taches de peinture, jugés intéressants, ont été identifiés après la date limite de soumission au SIGBOVIK
- Une tache reconnue par l’OCR comme
lerzfijglpFiji-jest évaluée en Perl comme le nombre0 - Une tache reconnue comme
-*?est elle aussi évaluée en Perl comme le nombre0 - Une image reconnue comme
;i;c;;#\\?z{;?;;fn':.;devient en Perl la chaînec - Une image reconnue comme
;E,'__'est évaluée comme la chaîneE__
1 commentaires
Commentaires Hacker News
Les langages concaténatifs ont la propriété que toute séquence de tokens constitue un programme valide
Dans un langage qui utilise des bits individuels comme tokens, toute suite de bits devient un programme valide. Le zot de Chris Barker est l’un de ces langages
Inspiré par zot, j’ai défini une version concaténative du Binary Lambda Calculus qui partage cette propriété
[1] https://en.wikipedia.org/wiki/Concatenative_programming_lang...
[2] https://en.wikipedia.org/wiki/Iota_and_Jot#Zot
[3] https://cstheory.stackexchange.com/questions/32309/concatena...
La propriété des langages concaténatifs est que si a et b sont tous deux des programmes valides, alors a || b est aussi un programme valide. Ici, || signifie « concaténation »
Mais cette propriété ne veut pas dire que toute séquence de tokens est valide. Par exemple, en Cat,
[1 2n’est pas syntaxiquement valideJ’aimerais bien pouvoir comprendre à la fois Jot et cette phrase
La note 5 m’a amusé
⁵ Cette fonctionnalité permet un quine élégant. Si l’on enregistre le programme Perl « Illegal division by zero at /tmp/quine.pl line 1. » au bon emplacement, il affiche « Illegal division by zero at /tmp/quine.pl line 1. ». La raison de ce comportement est laissée en exercice au lecteur
Et il existe aussi un quine Python qui paraît lié au premier abord, mais qui est en réalité assez différent :
File "quine.py", line 1
File "quine.py", line 1
^
IndentationError: unexpected indent
En essayant dans un REPL,
"Illegal division"ne trouve pas la méthode"illegal"dans le package"division", et cette partie est probablement ignorée. C’est similaire pour la méthode"by"du package"zero", et"at /tmp"semble être la chaîne la plus simple qui produise ce message d’erreur. Cette erreur semble être plus grave qu’un avertissement de package manquant et met fin au programmeJ’aurais pensé que
/était l’opérateur de division et que"tmp"était initialisé comme variable puis converti de force en entier, mais"/tmp"seul ne fonctionne pas, et"/tmp/"déclenche un comportement lié aux expressions régulières, donc je ne comprends pas pourquoi le parseur fait une division à cet endroitArticles liés :
93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=27929730 - juillet 2021, 163 commentaires
Autre lien :
93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=38754686 - décembre 2023, 1 commentaire
Blague à part, n’est-ce pas un problème que les logiciels d’OCR produisent encore toujours du texte, même à partir d’images qui n’en contiennent pas ?
Il y a plus de dix ans, j’ai passé de vieux livres à l’OCR, et je me souviens avoir été très agacé de devoir gérer le texte poubelle généré par de petites illustrations, des taches et de la poussière. Ce domaine ne semble pas avoir beaucoup progressé depuis
Si un gribouillis aléatoire devient une exécution valide en Perl, n’y a-t-il pas quelque chose qui cloche ?
D’après mes propres essais, ChatGPT était un agent OCR « intelligent et conscient du contexte » plutôt correct
J’ai compris que cet article traitait du problème d’un programme particulier de reconnaissance optique de caractères qui reconnaît des éclaboussures de peinture comme des caractères
Ce programme semble presque toujours avoir tendance à interpréter la peinture comme une combinaison quelconque de caractères, et parmi les différentes implémentations possibles, cette approche est tout à fait acceptable et cohérente avec l’objectif
Mais au début, j’avais aussi imaginé une autre approche, consistant à voir les morceaux colorés et les espaces vides comme des 0 et des 1, puis à interpréter l’ensemble comme un programme. Dans ce cas, la plupart du résultat serait probablement du bruit sans signification
Au final, il y a deux extrêmes. D’un côté, il n’y a presque que du bruit ; de l’autre, il y a surtout du sens. Le jeu dans le jeu ici semble être de trouver un mode d’interprétation qui attribue le plus de sens possible aux éclaboussures de peinture, tout en faisant en sorte que ce sens vienne autant que possible de la structure elle-même, et non de règles qui forcent artificiellement la découverte de sens
Avec l’IA générative, on peut créer plus vite que jamais de nouvelles éclaboussures de peinture innovantes qui sont évaluées comme des logiciels exécutables
L’IA générative permet à une nouvelle classe de créateurs d’exploiter des workflows texte-image pour créer de la valeur pour des entreprises de toutes tailles. Les nouveaux modèles d’IA peuvent insérer des logiciels fonctionnels et du code lisible par machine dans divers contenus haute résolution, capter l’attention des spectateurs et offrir aux créateurs de nouveaux moyens passionnants de développer leur audience
La recherche computationnelle la plus à la pointe est ici : https://sigbovik.org/
C’est une variation maligne de la vieille blague « impossible à distinguer du bruit de ligne »
Pour ceux qui n’ont pas souvent rencontré de bruit de ligne, imaginez un terminal vidéo en caractères ASCII qui interprète un flux d’octets pour afficher du texte compréhensible. Maintenant, supposons que le canal de communication soit perturbé pour une raison quelconque. Par exemple, quelqu’un décroche le combiné pendant qu’un modem est connecté, ou un câble subit des interférences
Sans correction d’erreurs ni checksum, les octets interprétés deviennent en pratique aléatoires. Des lettres, chiffres, signes de ponctuation et caractères de contrôle arbitraires sont donc interprétés et affichés à l’écran ; les habitués savent que c’est aléatoire et pourquoi. Mais la blague, c’est que ce serait en fait encore un programme Perl valide
Tant qu’à faire, je vais aller m’attacher un oignon à la ceinture
Comme il est écrit « le code source n’est pas encore disponible, je ne sais pas utiliser GitHub », il semble avoir disparu pour de bon
En tout cas, il n’est pas sur https://git.mcmillen.dev/explore/repos
En tant que programmeur Perl, je considère que les 7 % qui ne fonctionnent pas sont un bug