2 points par GN⁺ 2024-04-30 | 1 commentaires | Partager sur WhatsApp
  • 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 0 ou les chaînes c, 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

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-j est évaluée en Perl comme le nombre 0
  • Une tache reconnue comme -*? est elle aussi évaluée en Perl comme le nombre 0
  • Une image reconnue comme ;i;c;;#\\?z{;?;;fn':.; devient en Perl la chaîne c
  • Une image reconnue comme ;E,'__' est évaluée comme la chaîne E__

1 commentaires

 
GN⁺ 2024-04-30
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...

    • « Les langages concaténatifs ont la propriété que toute séquence de tokens constitue un programme valide » ne me semble pas juste
      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 2 n’est pas syntaxiquement valide
    • La phrase « cela fait de Jot une numérotation de Gödel naturelle de tous les algorithmes » a de l’allure
      J’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

    • J’ai écrit un billet de blog qui l’explique : https://dotat.at/@/2019-04-04-a-curious-perl-quine.html
      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
    • Quelqu’un peut aider les lecteurs qui ne connaissent pas Perl ?
      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 programme
      J’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 endroit
    • En Python aussi, on peut faire quelque chose de similaire avec une erreur d’indentation
  • Articles 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

    • Cette question me semble du même type que celle de l’article d’origine
      Si un gribouillis aléatoire devient une exécution valide en Perl, n’y a-t-il pas quelque chose qui cloche ?
    • Sur ce point, les LLM aident
      D’après mes propres essais, ChatGPT était un agent OCR « intelligent et conscient du contexte » plutôt correct
    • Il y a eu des progrès. Cela dit, l’article présenté ici est écrit pour le plaisir
  • 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

    • « reconnaît presque toujours pain comme une combinaison de caractères », hein ; il va donc falloir sortir l’électroencéphalographe pour voir si pain est aussi un programme Perl valide
  • 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

    • Je viens de réaliser que le bruit de ligne entre désormais dans la catégorie des choses impossibles à expliquer aux jeunes d’aujourd’hui, comme les grilles de programmes télé
      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