93% पेंट के धब्बे वैध Perl प्रोग्राम निकले (2019)
(mcmillen.dev)- SIGBOVIK 2019 के पेपर ने क्या दीवार पर पेंट रगड़ने से ऐसा न हो कि वह Perl प्रोग्राम न बने इस सवाल को OCR प्रयोग के जरिए जांचा, और 100 धब्बों में से 93% Perl के रूप में parse हो गए
- प्रयोग में पेंट के धब्बों की इमेज को OCR string में बदला गया, फिर यह जांचा गया कि परिणाम एक वैध Perl प्रोग्राम है या नहीं
- 93% वैध थे, लेकिन बाकी 7 धब्बे Perl के रूप में parse नहीं हुए, इसलिए “हर चीज़ आखिर Perl बन जाती है” जैसे मज़ाक में भी अपवाद बचे हैं
- सार्वजनिक सामग्री में सभी धब्बों की इमेज और उनसे मेल खाने वाला Perl source शामिल है, और जो वैध नहीं हैं उन्हें लाल “Not valid” चिह्न से अलग दिखाया गया है
- सबमिशन के बाद पहचाने गए कुछ OCR परिणाम Perl में संख्या
0या stringc,E__के रूप में evaluate हुए, जो संयोग से बने कोड की अजीबता दिखाते हैं
पेंट के धब्बों से परखी गई Perl parseability
- यह पेपर प्रोग्रामिंग भाषा समुदाय के एक पुराने खुले सवाल की तरह पेश किए गए प्रश्न को प्रयोग का विषय बनाता है: क्या दीवार पर पेंट रगड़ने पर भी कभी वैध Perl न बन सकता है
- निष्कर्ष “हाँ, ऐसा संभव है” के करीब है
- OCR software का उपयोग करने वाले प्रयोग में पेंट के धब्बों का सिर्फ 93% ही वैध Perl के रूप में parse हुआ
- इसलिए कुछ पेंट धब्बे वैध Perl प्रोग्राम नहीं हैं
- पेपर पेंट धब्बा-जनित Perl प्रोग्रामों के गुणों का विश्लेषण करता है और ऐसे 7 उदाहरण भी देता है जो वैध Perl प्रोग्राम नहीं थे
SIGBOVIK 2019 पेपर और सार्वजनिक सामग्री
- यह पेपर 1 अप्रैल 2019 को Pittsburgh में आयोजित SIGBOVIK 2019 में स्वीकार किया गया था
- इसे “Unwitting Participation Ribbon” भी मिला
- इस ribbon को ऐसे पेपरों पर लगाया जाता है जिनमें “वास्तविक output” शामिल हो
- पेपर और proceedings कई रूपों में सार्वजनिक हैं
- Google Docs: पेपर देखें
- PDF: पेपर डाउनलोड करें
- SIGBOVIK 2019 proceedings: पूरी proceedings, संबंधित पेपर पेज 174 पर
धब्बा गैलरी और 100 इमेज वाला डेटासेट
- all the paint splatters एक पेज पर सभी पेंट धब्बे दिखाता है, और हर इमेज के साथ उससे मेल खाने वाला वैध Perl source code भी देता है
- जो इमेज वैध Perl प्रोग्राम के रूप में parse नहीं हुईं, उन्हें लाल “Not valid” चिह्न से अलग दिखाया गया है
- अलग-अलग OCR settings में यदि कई वैध Perl प्रोग्राम पहचाने गए, तो उनमें से लेखक को सबसे “दिलचस्प” लगा परिणाम चुना गया
- tarball of 100 paint-splatter images में पेपर के मुख्य dataset के रूप में इस्तेमाल की गई 100 पेंट धब्बा इमेज शामिल हैं
सबमिशन के बाद पहचाने गए अतिरिक्त उदाहरण
- SIGBOVIK सबमिशन deadline के बाद भी कुछ दिलचस्प पेंट-धब्बा Perl प्रोग्राम अतिरिक्त रूप से पहचाने गए
- OCR ने जिस धब्बे को
lerzfijglpFiji-jके रूप में पहचाना, वह Perl में संख्या0के रूप में evaluate हुआ -*?के रूप में पहचाना गया धब्बा भी Perl में संख्या0के रूप में evaluate हुआ;i;c;;#\\?z{;?;;fn':.;के रूप में पहचानी गई इमेज Perl में stringcबन गई;E,'__'के रूप में पहचानी गई इमेज Perl में stringE__के रूप में evaluate हुई
1 टिप्पणियां
Hacker News टिप्पणियाँ
concatenative language में यह गुण होता है कि हर token sequence एक वैध program बन जाती है
अगर कोई language single bit को token के रूप में इस्तेमाल करे, तो हर bitstring एक वैध program बन जाएगी. Chris Barker की zot ऐसी ही भाषाओं में से एक है
zot से प्रेरित होकर, उसी गुण को साझा करने वाले Binary Lambda Calculus का एक concatenative version परिभाषित किया गया
[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...
concatenative language का गुण यह है कि अगर a और b दोनों वैध program हैं, तो a || b भी वैध है. यहाँ || का मतलब है “जोड़ना”
लेकिन इसका मतलब यह नहीं कि हर token sequence वैध है. उदाहरण के लिए, Cat में
[1 2व्याकरण की दृष्टि से वैध नहीं हैकाश मैं Jot को भी समझ पाता और उस वाक्य को भी
फुटनोट 5 मज़ेदार था
⁵ यह फीचर एक साफ-सुथरा quine संभव बनाता है. अगर Perl program
Illegal division by zero at /tmp/quine.pl line 1.को सही जगह रखा जाए, तो वहIllegal division by zero at /tmp/quine.pl line 1.प्रिंट करता है. ऐसा क्यों होता है, यह पाठक के लिए अभ्यास के रूप में छोड़ा गया हैऔर देखने में संबंधित लगने वाला, लेकिन असल में काफ़ी अलग एक Python quine भी है:
File "quine.py", line 1
File "quine.py", line 1
^
IndentationError: unexpected indent
मैंने इसे REPL में आज़माया, और
"Illegal division"package"division"में method"illegal"नहीं खोज पाता, और शायद वह हिस्सा नज़रअंदाज़ हो जाता है."zero"package की"by"method के साथ भी कुछ वैसा ही है, और"at /tmp"उस error message को बनाने वाली सबसे सरल string लगती है. यह error शायद missing package warning से ज़्यादा गंभीर होती है, इसलिए program यहीं बंद हो जाता हैमुझे लगा
/division operator है, और"tmp"कोई variable है जिसे initialize करके integer में coerce किया जा रहा है, लेकिन"/tmp"अकेले काम नहीं करता और"/tmp/"regex से जुड़ा behavior करता है, इसलिए parser वहाँ division क्यों कर रहा है, समझ नहीं आतासंबंधित पोस्ट:
93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=27929730 - जुलाई 2021, 163 टिप्पणियाँ
एक और लिंक:
93% of Paint Splatters Are Valid Perl Programs (2019) - https://news.ycombinator.com/item?id=38754686 - दिसंबर 2023, 1 टिप्पणी
मज़ाक अपनी जगह, लेकिन क्या यह गड़बड़ नहीं है कि OCR software गैर-पाठ्य images से भी हमेशा text result निकाल देता है?
10 साल से भी पहले मैंने कुछ पुरानी किताबों पर OCR चलाया था, और छोटे चित्रों, दागों और धूल से निकले बेकार text को साफ़ करते-करते बहुत चिढ़ हुई थी. तब से इस क्षेत्र में बहुत प्रगति हुई हो, ऐसा नहीं लगता
अगर random scribble Perl में वैध execution बन जाता है, तो क्या कहीं कुछ गड़बड़ नहीं है?
अपने प्रयोगों में मैंने पाया कि ChatGPT काफ़ी अच्छा “स्मार्ट और context-aware” OCR agent था
मैंने इस लेख को ऐसे समझा कि यह किसी खास optical character recognition program की उस समस्या पर है, जिसमें वह paint के छींटों को भी characters की तरह पहचान लेता है
उस program में लगता है कि वह लगभग हमेशा paint को किसी न किसी character combination के रूप में पढ़ने की ओर झुका हुआ है, और कई संभावित implementation तरीकों में यह तरीका पूरी तरह स्वागतयोग्य है और उद्देश्य के अनुरूप भी
हालाँकि शुरू में मेरे मन में एक दूसरा तरीका भी आया था, जिसमें रंग के टुकड़ों और खाली जगहों को 0 और 1 माना जाए और पूरी चीज़ को program की तरह interpret किया जाए. उस स्थिति में ज़्यादातर चीज़ें निरर्थक noise ही होंगी
आख़िरकार यहाँ दो छोर हैं. एक तरफ लगभग पूरा noise है, और दूसरी तरफ ज़्यादातर अर्थपूर्ण है. यहाँ खेल के भीतर का खेल शायद यह है कि paint splatter को जितना संभव हो उतना अर्थ दिया जाए, लेकिन वह अर्थ नियमों के ज़बरदस्ती अर्थ निकालने से नहीं, बल्कि संरचना से अधिकतम निकले — ऐसी interpretation scheme ढूँढ़ी जाए
generative AI का इस्तेमाल करके पहले से कहीं ज़्यादा तेज़ी से नए और अभिनव paint splatter बनाए जा सकते हैं, जिन्हें executable software के रूप में आंका जा सके
generative AI रचनाकारों की एक नई परत को text-to-image workflow का उपयोग करके हर आकार की कंपनियों के लिए value बनाने में सक्षम बनाता है. नए AI models काम करने वाले software और machine-readable code को अलग-अलग high-resolution content में embed कर सकते हैं, दर्शकों का ध्यान खींच सकते हैं, और creators को अपना audience बढ़ाने के नए और रोचक तरीके दे सकते हैं
और भी अत्याधुनिक computational research यहाँ है: https://sigbovik.org/
यह पुराने “लाइन नॉइज़ से अलग नहीं पहचाना जा सकता” वाले मज़ाक का एक चतुर रूपांतर है
जो लोग line noise से अक्सर नहीं जूझे, उनके लिए: कल्पना कीजिए कि एक ASCII character video terminal byte stream को interpret करके अर्थपूर्ण text दिखा रहा है. अब मान लीजिए कि communication channel किसी वजह से खराब हो गया. जैसे modem जुड़े होने के दौरान किसी ने फ़ोन का रिसीवर उठा लिया, या cable में interference आ गया
अगर error correction या checksum न हो, तो interpret किए गए bytes लगभग random हो जाते हैं. इसलिए मनमाने letters, numbers, punctuation, control characters वगैरह interpret होकर स्क्रीन पर दिखते हैं, और जो लोग परिचित हैं वे समझ जाते हैं कि यह random है और ऐसा क्यों हुआ. लेकिन मज़ाक यह है कि वह असल में अब भी एक वैध Perl program है
अब तो बस बेल्ट पर एक प्याज़ बाँध लेना चाहिए
“Source code अभी नहीं है. मैं GitHub नहीं कर पाता” — तो लगता है यह हमेशा के लिए खो गया
कम से कम https://git.mcmillen.dev/explore/repos पर तो नहीं है
Perl programmer के तौर पर, जो 7% काम नहीं करता, मैं उसे bug मानूँगा