- Makalah SIGBOVIK 2019 menguji lewat eksperimen OCR apakah mengoleskan cat ke dinding bisa saja tidak menjadi program Perl, dan menemukan bahwa 93 dari 100 noda dapat di-parse sebagai Perl
- Eksperimen dilakukan dengan mengubah gambar noda cat menjadi string OCR, lalu memeriksa apakah hasilnya merupakan program Perl yang valid
- Meski 93% valid, 7 noda sisanya tidak dapat di-parse sebagai Perl, sehingga masih ada pengecualian untuk lelucon semacam “apa pun selalu menjadi Perl”
- Materi yang dipublikasikan mencakup semua gambar noda dan source Perl yang sesuai; gambar yang tidak valid dibedakan dengan tanda merah “Not valid”
- Beberapa hasil OCR yang diperiksa setelah pengajuan dievaluasi di Perl sebagai angka
0atau stringc,E__, memperlihatkan keanehan kode yang tercipta secara kebetulan
Kemungkinan Parsing Perl yang Diuji dengan Noda Cat
- Makalah ini menjadikan sebagai objek eksperimen sebuah pertanyaan yang dikemas seperti masalah terbuka lama di komunitas bahasa pemrograman, yaitu apakah mengoleskan cat ke dinding bisa saja tidak menghasilkan Perl yang valid
- Kesimpulannya mendekati “bisa”
- Dalam eksperimen menggunakan perangkat lunak OCR, hanya 93% noda cat yang dapat di-parse sebagai Perl yang valid
- Jadi, sebagian noda cat bukan program Perl yang valid
- Makalah ini menganalisis sifat program Perl dari noda cat, dan juga menyajikan 7 contoh noda yang bukan program Perl yang valid
Makalah SIGBOVIK 2019 dan Materi Publik
- Makalah ini diterima di SIGBOVIK 2019 yang diadakan di Pittsburgh pada 1 April 2019
- Makalah ini juga menerima “Unwitting Participation Ribbon”
- Pita ini diperkenalkan sebagai tanda yang diberikan pada makalah yang menyertakan “hasil nyata”
- Makalah dan prosiding tersedia secara publik dalam beberapa bentuk
- Google Docs: lihat makalah
- PDF: unduh makalah
- SIGBOVIK 2019 proceedings: prosiding lengkap, makalah ini ada di halaman 174
Galeri Noda dan Dataset 100 Gambar
- all the paint splatters mengumpulkan semua noda cat dalam satu halaman, dan juga menyediakan source code Perl yang valid untuk tiap gambar
- Gambar yang tidak dapat di-parse sebagai program Perl yang valid dibedakan dengan tanda merah “Not valid”
- Jika beberapa program Perl yang valid dikenali pada pengaturan OCR yang berbeda, dipilih satu hasil yang dirasa paling “menarik”
- tarball of 100 paint-splatter images berisi 100 gambar noda cat yang digunakan sebagai dataset utama makalah
Contoh Tambahan yang Ditemukan Setelah Pengajuan
- Setelah tenggat pengajuan SIGBOVIK pun, program Perl dari noda cat yang menarik masih ditemukan lagi
- Noda yang dikenali OCR sebagai
lerzfijglpFiji-jdievaluasi di Perl sebagai angka0 - Noda yang dikenali sebagai
-*?juga dievaluasi di Perl sebagai angka0 - Gambar yang dikenali sebagai
;i;c;;#\\?z{;?;;fn':.;menjadi stringcdi Perl - Gambar yang dikenali sebagai
;E,'__'dievaluasi di Perl sebagai stringE__
1 komentar
Komentar Hacker News
Bahasa konkatenatif memiliki sifat bahwa setiap urutan token menjadi program yang valid
Jika sebuah bahasa memakai bit tunggal sebagai token, maka setiap deretan bit menjadi program yang valid. zot buatan Chris Barker adalah salah satu bahasa seperti itu
Terinspirasi oleh zot, saya mendefinisikan versi konkatenatif dari Binary Lambda Calculus yang memiliki sifat yang sama
[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...
Sifat bahasa konkatenatif adalah jika a dan b sama-sama program yang valid, maka a || b juga program yang valid. Di sini || berarti “penggabungan”
Namun sifat ini tidak berarti semua deretan token valid. Misalnya, di Cat,
[1 2tidak valid secara sintaksisSaya berharap bisa memahami Jot maupun kalimat itu
Catatan kaki 5 menarik
⁵ Fitur ini memungkinkan quine yang rapi. Jika program Perl “Illegal division by zero at /tmp/quine.pl line 1.” disimpan di lokasi yang tepat, program itu akan mencetak “Illegal division by zero at /tmp/quine.pl line 1.”. Alasan perilaku ini diserahkan sebagai latihan bagi pembaca
Dan ada juga Python quine yang sekilas terlihat terkait, tetapi sebenarnya cukup berbeda:
File "quine.py", line 1
File "quine.py", line 1
^
IndentationError: unexpected indent
Saat saya coba di REPL,
"Illegal division"gagal menemukan metode"illegal"di package"division", dan mungkin bagian itu diabaikan. Metode"by"di package"zero"juga mirip, dan"at /tmp"tampaknya adalah string paling sederhana yang menghasilkan pesan error itu. Sepertinya error ini lebih fatal daripada peringatan package yang hilang, sehingga program berakhirSaya sempat mengira
/adalah operator pembagian dan"tmp"diinisialisasi sebagai variabel lalu dipaksa menjadi integer, tetapi"/tmp"saja tidak berhasil, sedangkan"/tmp/"memicu perilaku terkait regex, jadi saya tidak tahu mengapa parser membaginya di sanaTulisan terkait:
93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=27929730 - Juli 2021, 163 komentar
Tautan lain:
93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=38754686 - Desember 2023, 1 komentar
Terlepas dari leluconnya, bukankah keliru kalau perangkat lunak OCR masih selalu menghasilkan teks bahkan dari gambar yang bukan teks?
Lebih dari 10 tahun lalu saya melakukan OCR pada buku tua, dan saya ingat sangat kesal harus menangani teks sampah dari gambar kecil, noda, dan debu. Bidang ini tampaknya tidak banyak maju sejak saat itu
Jika coretan acak menjadi eksekusi yang valid di Perl, bukankah ada sesuatu yang salah?
Dari eksperimen saya sendiri, ChatGPT adalah agen OCR yang “cerdas dan paham konteks” yang cukup bagus
Saya memahami tulisan ini sebagai membahas masalah ketika program pengenalan karakter optik tertentu mengenali cipratan cat sebagai karakter
Program itu tampaknya hampir selalu cenderung mengenali cat sebagai kombinasi karakter tertentu, dan di antara berbagai kemungkinan implementasi, cara seperti ini cukup layak diterima dan sesuai tujuan
Namun awalnya saya juga terpikir pendekatan lain, seperti melihat serpihan warna dan ruang kosong sebagai 0 dan 1 lalu menafsirkan keseluruhannya sebagai program. Dalam kasus seperti itu, sebagian besar mungkin hanya noise tanpa makna
Pada akhirnya ada dua ekstrem. Yang satu hampir sepenuhnya noise, yang lain sebagian besar bermakna. Permainan di dalam permainan di sini tampaknya adalah mencari cara interpretasi yang memberi sebanyak mungkin makna pada cipratan cat, tetapi makna itu sebisa mungkin muncul dari strukturnya sendiri, bukan dari aturan yang memaksakan pencarian makna
Dengan AI generatif, kita bisa membuat cipratan cat baru dan inovatif yang dinilai sebagai perangkat lunak yang dapat dijalankan lebih cepat dari sebelumnya
AI generatif memungkinkan kelas kreator baru memanfaatkan alur kerja teks-ke-gambar untuk menciptakan nilai bagi perusahaan dari segala skala. Model AI baru dapat menyisipkan perangkat lunak yang berfungsi dan kode yang dapat dibaca mesin ke dalam berbagai konten beresolusi tinggi, menarik perhatian penonton, serta menawarkan cara baru yang menarik bagi kreator untuk menumbuhkan audiens
Riset komputasi yang lebih mutakhir ada di sini: https://sigbovik.org/
Ini variasi cerdas dari lelucon lama “tidak bisa dibedakan dari line noise”
Untuk yang jarang berurusan dengan line noise, bayangkan terminal video karakter ASCII yang menafsirkan stream byte untuk menampilkan teks bermakna. Lalu katakanlah kanal komunikasi rusak karena suatu alasan. Misalnya seseorang mengangkat gagang telepon saat modem sedang tersambung, atau kabel mengalami interferensi
Tanpa koreksi kesalahan atau checksum, byte yang ditafsirkan pada dasarnya menjadi acak. Jadi huruf, angka, tanda baca, karakter kontrol, dan sebagainya yang acak ditafsirkan dan ditampilkan di layar; orang yang terbiasa akan tahu bahwa itu acak dan juga mengapa begitu. Namun leluconnya adalah bahwa itu ternyata tetap merupakan program Perl yang valid
Kalau begitu, sekalian saja saya mengikat bawang di ikat pinggang
Karena dia berkata “belum ada kode sumber. Saya tidak bisa GitHub”, sepertinya itu hilang untuk selamanya
Setidaknya tidak ada di https://git.mcmillen.dev/explore/repos
Sebagai programmer Perl, saya menganggap 7% yang tidak berjalan itu sebagai bug