2 Punkte von GN⁺ 2024-04-30 | 1 Kommentare | Auf WhatsApp teilen
  • Ein SIGBOVIK-2019-Paper prüfte per OCR-Experiment, ob selbst durch Farbverschmierungen an einer Wand nicht zwangsläufig ein Perl-Programm entsteht, und 93 von 100 Flecken wurden als Perl geparst
  • Das Experiment lief so ab, dass Bilder von Farbflecken in OCR-Zeichenfolgen umgewandelt und anschließend darauf geprüft wurden, ob das Ergebnis ein gültiges Perl-Programm ist
  • 93 % waren gültig, aber die übrigen 7 Flecken ließen sich nicht als Perl parsen, sodass bei dem Scherz nach dem Muster „am Ende wird immer Perl daraus“ Ausnahmen bleiben
  • Das veröffentlichte Material enthält alle Fleckenbilder und den jeweils zugehörigen Perl-Quellcode; ungültige Bilder sind mit einem roten „Not valid“ gekennzeichnet
  • Einige nach der Einreichung überprüfte OCR-Ergebnisse werden in Perl als die Zahl 0 oder als die Zeichenfolgen c und E__ ausgewertet und zeigen die eigentümliche Merkwürdigkeit zufällig entstandenen Codes

Mit Farbflecken überprüfte Perl-Parsebarkeit

  • Das Paper nimmt eine Frage als Experiment auf, die wie ein altes offenes Problem der Programmiersprachen-Community aufgemacht ist: Kann es sein, dass selbst beim Verschmieren von Farbe an einer Wand kein gültiges Perl entsteht?
  • Die Schlussfolgerung liegt nahe bei „ja“
    • In Experimenten mit OCR-Software wurden nur 93 % der Farbflecken als gültiges Perl geparst
    • Daher sind einige Farbflecken keine gültigen Perl-Programme
  • Das Paper analysiert die Eigenschaften von Farbfleck-Perl-Programmen und zeigt dazu 7 Beispiele von Flecken, die keine gültigen Perl-Programme sind

SIGBOVIK-2019-Paper und veröffentlichtes Material

  • Das Paper wurde bei der SIGBOVIK 2019 angenommen, die am 1. April 2019 in Pittsburgh stattfand
  • Es erhielt außerdem ein „Unwitting Participation Ribbon“
    • Dieses Band wird als Auszeichnung für Paper vorgestellt, die ein „echtes Artefakt“ enthalten
  • Das Paper und die Proceedings sind in mehreren Formen veröffentlicht

Flecken-Galerie und Datensatz mit 100 Bildern

  • all the paint splatters zeigt alle Farbflecken gesammelt auf einer Seite und stellt zu jedem Bild auch den entsprechenden gültigen Perl-Quellcode bereit
  • Bilder, die sich nicht als gültige Perl-Programme parsen ließen, sind mit einem roten „Not valid“ gekennzeichnet
  • Wenn unter verschiedenen OCR-Einstellungen mehrere gültige Perl-Programme erkannt wurden, wurde jeweils das Ergebnis ausgewählt, das als am „interessantesten“ empfunden wurde
  • tarball of 100 paint-splatter images enthält die 100 Bilder von Farbflecken, die als zentraler Datensatz des Papers verwendet wurden

Zusätzliche nach der Einreichung bestätigte Fälle

  • Auch nach dem SIGBOVIK-Einreichungsschluss wurden weitere interessante Farbfleck-Perl-Programme bestätigt
  • Ein Fleck, den die OCR als lerzfijglpFiji-j erkannte, wird in Perl als die Zahl 0 ausgewertet
  • Ein Fleck, der als -*? erkannt wurde, wird in Perl ebenfalls als die Zahl 0 ausgewertet
  • Ein Bild, das als ;i;c;;#\\?z{;?;;fn':.; erkannt wurde, ergibt in Perl die Zeichenfolge c
  • Ein Bild, das als ;E,'__' erkannt wurde, wird in Perl als die Zeichenfolge E__ ausgewertet

1 Kommentare

 
GN⁺ 2024-04-30
Hacker-News-Kommentare
  • Konkatenative Sprachen haben die Eigenschaft, dass jede Token-Sequenz ein gültiges Programm ist
    Wenn eine Sprache einzelne Bits als Token verwendet, dann ist jede Bitfolge ein gültiges Programm. Chris Barkers zot ist eine solche Sprache
    Inspiriert von zot wurde eine konkatenative Version des Binary Lambda Calculus definiert, die dieselbe Eigenschaft teilt
    [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...

    • „Konkatenative Sprachen haben die Eigenschaft, dass jede Token-Sequenz ein gültiges Programm ist“ scheint nicht zu stimmen
      Die Eigenschaft konkatenativer Sprachen ist, dass, wenn a und b beide gültige Programme sind, auch a || b gültig ist. Dabei bedeutet || „Aneinanderhängen“
      Aber diese Eigenschaft bedeutet nicht, dass jede Token-Folge gültig ist. In Cat ist zum Beispiel [1 2 syntaktisch nicht gültig
    • Der Satz „macht Jot zu einer natürlichen Gödel-Nummerierung aller Algorithmen“ klingt großartig
      Schön wäre es, wenn ich sowohl Jot als auch diesen Satz verstehen würde
  • Fußnote 5 war lustig
    ⁵ Dieses Feature ermöglicht ein elegantes Quine. Wenn man das Perl-Programm „Illegal division by zero at /tmp/quine.pl line 1.“ an der passenden Stelle speichert, gibt es „Illegal division by zero at /tmp/quine.pl line 1.“ aus. Warum das funktioniert, bleibt als Übung für den Leser überlassen

    • Ich habe einen Blogpost geschrieben, der das erklärt: https://dotat.at/@/2019-04-04-a-curious-perl-quine.html
      Und es gibt auch ein auf den ersten Blick verwandtes, tatsächlich aber ziemlich anderes Python-Quine:
      File "quine.py", line 1
      File "quine.py", line 1
      ^
      IndentationError: unexpected indent
    • Kann jemand Lesern helfen, die Perl nicht kennen?
      Als ich es im REPL ausprobiert habe, versucht "Illegal division" offenbar die Methode "illegal" im Paket "division" zu finden, und dieser Teil scheint vermutlich ignoriert zu werden. Mit der Methode "by" des Pakets "zero" scheint es ähnlich zu sein, und "at /tmp" scheint der einfachste String zu sein, der diese Fehlermeldung erzeugt. Dieser Fehler scheint schwerwiegender zu sein als die Warnung über ein fehlendes Paket und beendet daher offenbar das Programm
      Ich dachte erst, / sei der Divisionsoperator und "tmp" werde als Variable initialisiert und dann zu einer Ganzzahl erzwungen, aber "/tmp" allein funktioniert nicht, und "/tmp/" löst etwas mit regulären Ausdrücken aus, daher verstehe ich nicht, warum der Parser dort teilt
    • Auch in Python kann man etwas Ähnliches mit einem Einrückungsfehler machen
  • Verwandter Beitrag:
    93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=27929730 - Juli 2021, 163 Kommentare
    Noch ein Link:
    93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=38754686 - Dezember 2023, 1 Kommentar

  • Spaß beiseite: Ist es nicht ein Fehler, dass OCR-Software selbst bei Bildern, die gar kein Text sind, weiterhin immer irgendein Textergebnis ausgibt?
    Ich habe vor mehr als zehn Jahren einmal ein altes Buch per OCR erfasst und erinnere mich noch gut daran, wie nervig es war, den Mülltext zu bereinigen, der aus kleinen Illustrationen, Flecken und Staub entstand. In diesem Bereich scheint es seitdem nicht besonders viele Fortschritte gegeben zu haben

    • Diese Frage scheint von derselben Art zu sein wie die Frage des Originalartikels
      Wenn zufällige Kritzeleien in Perl zu einer gültigen Ausführung werden, ist dann nicht irgendetwas falsch?
    • Hier helfen LLMs
      In meinen eigenen Experimenten war ChatGPT ein ziemlich guter „smarter, kontextbewusster“ OCR-Agent
    • Es gab Fortschritte. Der vorgestellte Artikel ist nur zum Spaß geschrieben
  • Ich habe den Artikel so verstanden, dass es um das Problem geht, dass ein bestimmtes OCR-Programm Farbspritzer als Zeichen erkennt
    Dieses Programm scheint stark dazu zu neigen, Farbe fast immer als irgendeine Zeichenkombination zu interpretieren, und unter den vielen möglichen Implementierungsarten ist dieser Ansatz durchaus willkommen und zweckmäßig
    Zuerst kam mir allerdings auch ein anderer Ansatz in den Sinn, bei dem man Farbflecken und Leerraum als 0 und 1 betrachtet und das Ganze als Programm interpretiert. In dem Fall wäre das meiste wohl bedeutungsloses Rauschen
    Letztlich gibt es zwei Extreme: Das eine ist fast nur Rauschen, das andere ist größtenteils bedeutungsvoll. Das Spiel im Spiel scheint hier darin zu bestehen, eine Interpretationsmethode zu finden, die Farbspritzern möglichst viel Bedeutung gibt, wobei diese Bedeutung möglichst aus der Struktur selbst kommen soll und nicht daraus, dass die Regeln ihr zwanghaft Bedeutung aufdrücken

    • „pain wird fast immer als irgendeine Zeichenkombination erkannt“ — dann sollte ich wohl das EEG rausholen und prüfen, ob pain auch ein gültiges Perl-Programm ist
  • Mit generativer KI kann man schneller als je zuvor neue und innovative Farbspritzer erzeugen, die als ausführbare Software gelten
    Generative KI ermöglicht es einer neuen Klasse von Kreativen, Text-zu-Bild-Workflows zu nutzen, um Unternehmen jeder Größe Mehrwert zu liefern. Neue KI-Modelle können funktionierende Software und maschinenlesbaren Code in verschiedenste hochauflösende Inhalte einbetten, die Aufmerksamkeit des Publikums gewinnen und Kreativen neue und spannende Wege eröffnen, ihr Publikum auszubauen

  • Noch modernere Computing-Forschung gibt es hier: https://sigbovik.org/

  • Das ist eine clevere Variante des alten Witzes „nicht von Leitungsrauschen zu unterscheiden“
    Für Leute, die Leitungsrauschen nicht oft erlebt haben: Man stelle sich ein ASCII-Zeichen-Video-Terminal vor, das einen Bytestrom interpretiert und sinnvollen Text anzeigt. Nun stelle man sich vor, dass der Kommunikationskanal aus irgendeinem Grund kaputtgeht — etwa weil jemand während einer Modemverbindung den Telefonhörer abnimmt oder weil Störungen im Kabel auftreten
    Ohne Fehlerkorrektur oder Prüfsummen werden die interpretierten Bytes praktisch zufällig. Also werden beliebige Buchstaben, Zahlen, Satzzeichen, Steuerzeichen usw. interpretiert und auf dem Bildschirm angezeigt, und erfahrene Leute erkennen daran, dass es zufällig ist und warum. Der Witz ist dann, dass das tatsächlich immer noch ein gültiges Perl-Programm ist

    • Mir ist gerade klar geworden, dass Leitungsrauschen inzwischen in dieselbe Kategorie von Dingen fällt, die man den Kindern von heute niemals erklären kann, etwa Fernsehprogrammzeitschriften
      Dann kann ich mir wohl auch gleich eine Zwiebel an den Gürtel binden
  • „Quellcode gibt es noch nicht. Ich kann kein GitHub.“ Klingt so, als sei er für immer verschwunden
    Zumindest ist er nicht auf https://git.mcmillen.dev/explore/repos

  • Als Perl-Programmierer würde ich sagen, dass die 7%, die nicht funktionieren, ein Bug sind