2 pontos por GN⁺ 2024-04-30 | 1 comentários | Compartilhar no WhatsApp
  • O artigo da SIGBOVIK 2019 verificou por meio de um experimento com OCR se é possível esfregar tinta na parede sem que isso vire um programa Perl, e 93% de 100 manchas foram parseadas como Perl
  • O experimento foi conduzido convertendo imagens de manchas de tinta em strings via OCR e depois verificando se o resultado era um programa Perl válido
  • Embora 93% tenham sido válidas, as 7 manchas restantes não foram parseadas como Perl, então ainda existem exceções para a piada de que “sempre vira Perl”
  • O material público inclui todas as imagens das manchas e o código-fonte Perl correspondente, e as imagens inválidas são marcadas com a indicação vermelha “Not valid
  • Alguns resultados de OCR verificados após a submissão foram avaliados em Perl como o número 0 ou as strings c e E__, mostrando a estranheza do código criado por acaso

Possibilidade de parsing em Perl verificada com manchas de tinta

  • Este artigo toma como objeto de experimento uma pergunta apresentada como um antigo problema em aberto da comunidade de linguagens de programação: é possível esfregar tinta na parede sem produzir um Perl válido
  • A conclusão é próxima de “sim”
    • Em experimentos com software de OCR, apenas 93% das manchas de tinta foram parseadas como Perl válido
    • Portanto, algumas manchas de tinta não são programas Perl válidos
  • O artigo analisa as propriedades dos programas Perl formados por manchas de tinta e apresenta também 7 exemplos de manchas que não são programas Perl válidos

Artigo da SIGBOVIK 2019 e materiais públicos

  • O artigo foi aceito na SIGBOVIK 2019, realizada em Pittsburgh em 1º de abril de 2019
  • Também recebeu a “Unwitting Participation Ribbon”
    • A faixa é apresentada como algo concedido a artigos que incluem um “resultado real”
  • O artigo e os proceedings estão disponíveis publicamente em vários formatos

Galeria de manchas e dataset com 100 imagens

  • all the paint splatters reúne todas as manchas de tinta em uma única página e também fornece o código-fonte Perl válido correspondente a cada imagem
  • As imagens que não foram parseadas como programas Perl válidos são identificadas com a indicação vermelha “Not valid
  • Quando vários programas Perl válidos foram reconhecidos sob configurações diferentes de OCR, foi escolhido um único resultado considerado o mais “interessante”
  • tarball of 100 paint-splatter images contém as 100 imagens de manchas de tinta usadas como principal dataset do artigo

Casos adicionais verificados após a submissão

  • Mesmo após o prazo final de submissão à SIGBOVIK, outros programas Perl de manchas de tinta interessantes foram identificados
  • A mancha reconhecida pelo OCR como lerzfijglpFiji-j é avaliada em Perl como o número 0
  • A mancha reconhecida como -*? também é avaliada em Perl como o número 0
  • A imagem reconhecida como ;i;c;;#\\?z{;?;;fn':.; torna-se a string c em Perl
  • A imagem reconhecida como ;E,'__' é avaliada em Perl como a string E__

1 comentários

 
GN⁺ 2024-04-30
Comentários do Hacker News
  • Linguagens concatenativas têm a propriedade de que qualquer sequência de tokens é um programa válido
    Se uma linguagem usa bits individuais como tokens, então toda sequência de bits vira um programa válido. A zot, de Chris Barker, é uma dessas linguagens
    Inspirado pela zot, defini uma versão concatenativa do Binary Lambda Calculus que compartilha a mesma propriedade
    [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...

    • “Linguagens concatenativas têm a propriedade de que qualquer sequência de tokens é um programa válido” não me parece correto
      A propriedade de uma linguagem concatenativa é que, se a e b são ambos programas válidos, então a || b também é um programa válido. Aqui, || significa “concatenação”
      Mas essa propriedade não quer dizer que toda sequência de tokens seja válida. Por exemplo, em Cat, [1 2 não é sintaticamente válido
    • A frase “faz do Jot uma numeração de Gödel natural de todos os algoritmos” parece legal
      Queria conseguir entender tanto o Jot quanto essa frase
  • Achei a nota de rodapé 5 divertida
    ⁵ Esse recurso permite um quine elegante. Se o programa Perl “Illegal division by zero at /tmp/quine.pl line 1.” for salvo no local apropriado, ele imprime “Illegal division by zero at /tmp/quine.pl line 1.”. O motivo desse comportamento fica como exercício para o leitor

    • Escrevi um post de blog explicando isso: https://dotat.at/@/2019-04-04-a-curious-perl-quine.html
      E também há um quine em Python que, à primeira vista, parece relacionado, mas na verdade é bem diferente:
      File "quine.py", line 1
      File "quine.py", line 1
      ^
      IndentationError: unexpected indent
    • Alguém consegue ajudar os leitores que não conhecem Perl?
      Tentei no REPL e "Illegal division" não encontra o método "illegal" no pacote "division", e aparentemente essa parte é ignorada. O método "by" do pacote "zero" parece parecido, e "at /tmp" parece ser a string mais simples que gera aquela mensagem de erro. Esse erro parece ser mais grave do que o aviso de pacote ausente e encerra o programa
      Imaginei que / fosse o operador de divisão e que "tmp" fosse inicializada como variável e depois convertida para inteiro, mas "/tmp" sozinho não funciona, e "/tmp/" aciona algum comportamento relacionado a regex, então não entendo por que o parser está dividindo ali
    • Em Python também dá para fazer algo parecido com erro de indentação
  • Posts relacionados:
    93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=27929730 - julho de 2021, 163 comentários
    Outro link:
    93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=38754686 - dezembro de 2023, 1 comentário

  • Brincadeiras à parte, não é errado que software de OCR ainda sempre produza texto mesmo a partir de imagens que não são texto?
    Mais de 10 anos atrás fiz OCR de livros antigos e lembro de ficar muito irritado tendo que lidar com texto lixo vindo de pequenas ilustrações, manchas e poeira. Essa área não parece ter avançado muito desde então

    • Essa pergunta parece do mesmo tipo que a pergunta do texto original
      Se rabiscos aleatórios viram execuções válidas em Perl, não há algo errado?
    • Nessa parte, LLMs ajudam
      Em meus próprios testes, o ChatGPT foi um agente de OCR “inteligente e ciente de contexto” bem razoável
    • Houve avanço. Mas o texto citado é escrito por diversão
  • Entendi que este texto trata do problema de um programa específico de reconhecimento óptico de caracteres interpretar respingos de tinta como caracteres
    Esse programa parece ter uma tendência a quase sempre interpretar a tinta como alguma combinação de caracteres, e, entre as várias formas possíveis de implementação, essa é bastante aceitável e condizente com o objetivo
    Mas, no começo, também pensei em outra abordagem: tratar pedaços coloridos e espaços vazios como 0s e 1s e interpretar tudo como um programa. Nesse caso, a maior parte provavelmente seria ruído sem sentido
    No fim, há dois extremos. Um é quase só ruído, e o outro é majoritariamente significativo. O jogo dentro do jogo aqui parece ser encontrar uma forma de interpretação que atribua o máximo possível de significado aos respingos de tinta, mas em que esse significado venha o máximo possível da própria estrutura, não de regras forçando a descoberta de sentido

    • “interpreta pain quase sempre como alguma combinação de caracteres”? Então vou ter que pegar o eletroencefalógrafo para ver se pain também é um programa Perl válido
  • Com IA generativa, é possível criar respingos de tinta novos e inovadores, avaliados como software executável, mais rápido do que nunca
    A IA generativa permite que uma nova classe de criadores use fluxos de trabalho de texto para imagem para gerar valor para empresas de todos os portes. Novos modelos de IA podem inserir software funcional e código legível por máquina em uma variedade de conteúdos de alta resolução, prendendo a atenção dos espectadores e oferecendo aos criadores novas e empolgantes maneiras de ampliar seu público

  • A pesquisa computacional mais de ponta está aqui: https://sigbovik.org/

  • É uma variação inteligente da velha piada “indistinguível de ruído de linha”
    Para quem não teve muito contato com ruído de linha, imagine um terminal de vídeo com caracteres ASCII interpretando um fluxo de bytes para exibir texto significativo. Agora suponha que o canal de comunicação quebrou por algum motivo. Por exemplo, alguém tirou o telefone do gancho enquanto o modem estava conectado, ou houve interferência no cabo
    Sem correção de erros ou checksums, os bytes interpretados se tornam efetivamente aleatórios. Então letras, números, pontuação e caracteres de controle arbitrários são interpretados e exibidos na tela, e quem está acostumado percebe que aquilo é aleatório e por quê. A piada é que aquilo, na verdade, ainda é um programa Perl válido

    • Agora percebi que ruído de linha entrou na categoria de coisas impossíveis de explicar para a garotada de hoje, como grade de programação da TV
      Já que é assim, acho que vou amarrar uma cebola no cinto
  • Como ele disse “ainda não há código-fonte. Não sei usar o GitHub”, parece que desapareceu para sempre
    Pelo menos não está em https://git.mcmillen.dev/explore/repos

  • Como programador Perl, considero os 7% que não funcionam um bug