- 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
0ou as stringsceE__, 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
- Google Docs: ver o artigo
- PDF: baixar o artigo
- SIGBOVIK 2019 proceedings: proceedings completos; este artigo está na página 174
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úmero0 - A mancha reconhecida como
-*?também é avaliada em Perl como o número0 - A imagem reconhecida como
;i;c;;#\\?z{;?;;fn':.;torna-se a stringcem Perl - A imagem reconhecida como
;E,'__'é avaliada em Perl como a stringE__
1 comentários
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...
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 2não é sintaticamente válidoQueria 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
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
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 programaImaginei 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 aliPosts 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
Se rabiscos aleatórios viram execuções válidas em Perl, não há algo errado?
Em meus próprios testes, o ChatGPT foi um agente de OCR “inteligente e ciente de contexto” bem razoável
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
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
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