คราบสี 93% ถูกพิสูจน์ว่าเป็นโปรแกรม Perl ที่ใช้ได้ (2019)
(mcmillen.dev)- งานวิจัย SIGBOVIK 2019 ตรวจสอบด้วยการทดลอง OCR ว่า การป้ายสีบนกำแพงอาจไม่กลายเป็นโปรแกรม Perl ได้หรือไม่ และพบว่าจากคราบ 100 ชิ้น มี 93% ที่ parse เป็น Perl ได้
- การทดลองดำเนินการโดยแปลงภาพ คราบสี เป็น สตริง OCR แล้วตรวจสอบว่าผลลัพธ์นั้นเป็นโปรแกรม Perl ที่ใช้ได้หรือไม่
- แม้ 93% จะใช้ได้ แต่ อีก 7 คราบ parse เป็น Perl ไม่ได้ จึงยังมีข้อยกเว้นต่อมุกที่ว่า “สุดท้ายแล้วมันจะกลายเป็น Perl เสมอ”
- เอกสารที่เผยแพร่มีทั้งภาพคราบทั้งหมดและซอร์ส Perl ที่สอดคล้องกัน โดยภาพที่ใช้ไม่ได้จะถูกทำเครื่องหมาย “Not valid” สีแดง
- ผล OCR บางส่วนที่ตรวจพบหลังการส่งบทความถูกประเมินค่าใน Perl เป็นตัวเลข
0หรือสตริงc,E__แสดงให้เห็นความประหลาดของโค้ดที่เกิดขึ้นโดยบังเอิญ
การตรวจสอบความสามารถในการ parse เป็น Perl ด้วยคราบสี
- งานวิจัยนี้หยิบคำถามที่ถูกทำให้ดูเหมือนปัญหาเปิดเก่าแก่ของชุมชนภาษาโปรแกรมมิงมาเป็นหัวข้อทดลอง นั่นคือ การป้ายสีบนกำแพงอาจไม่สร้าง Perl ที่ใช้ได้หรือไม่
- ข้อสรุปค่อนข้างใกล้เคียงกับคำว่า “เป็นไปได้”
- ในการทดลองที่ใช้ซอฟต์แวร์ OCR มีเพียง 93% ของคราบสีเท่านั้นที่ parse เป็น Perl ที่ใช้ได้
- ดังนั้นคราบสีบางส่วนจึงไม่ใช่โปรแกรม Perl ที่ใช้ได้
- บทความวิเคราะห์คุณสมบัติของโปรแกรม Perl จากคราบสี และยกตัวอย่างคราบ 7 ชิ้น ที่ไม่ใช่โปรแกรม Perl ที่ใช้ได้มาด้วย
บทความ SIGBOVIK 2019 และเอกสารเผยแพร่
- บทความนี้ได้รับการตอบรับใน SIGBOVIK 2019 ซึ่งจัดขึ้นที่ Pittsburgh เมื่อวันที่ 1 เมษายน 2019
- ยังได้รับ “Unwitting Participation Ribbon” ด้วย
- ริบบอนนี้ถูกอธิบายว่าใช้ติดกับบทความที่มี “ผลงานจริง” รวมอยู่ด้วย
- บทความและ proceedings เผยแพร่ไว้หลายรูปแบบ
- Google Docs: อ่านบทความ
- PDF: ดาวน์โหลดบทความ
- SIGBOVIK 2019 proceedings: proceedings ฉบับเต็ม โดยบทความนี้อยู่หน้า 174
แกลเลอรีคราบสีและชุดข้อมูลภาพ 100 ภาพ
- all the paint splatters รวบรวมคราบสีทั้งหมดไว้ในหน้าเดียว และแสดง ซอร์สโค้ด Perl ที่ใช้ได้ ซึ่งสอดคล้องกับแต่ละภาพด้วย
- ภาพที่ parse เป็นโปรแกรม Perl ที่ใช้ไม่ได้จะถูกแยกด้วยป้าย “Not valid” สีแดง
- หากการตั้งค่า OCR ที่ต่างกันตรวจพบโปรแกรม Perl ที่ใช้ได้หลายแบบ จะเลือกผลลัพธ์หนึ่งที่ผู้เขียนมองว่า “น่าสนใจ” ที่สุด
- tarball of 100 paint-splatter images บรรจุ ภาพคราบสี 100 ภาพ ที่ใช้เป็นชุดข้อมูลหลักของบทความ
กรณีเพิ่มเติมที่พบหลังการส่งบทความ
- หลังเส้นตายการส่ง SIGBOVIK ยังพบโปรแกรม Perl จากคราบสีที่น่าสนใจเพิ่มเติม
- คราบที่ OCR อ่านเป็น
lerzfijglpFiji-jถูกประเมินค่าใน Perl เป็นตัวเลข0 - คราบที่อ่านเป็น
-*?ก็ถูกประเมินค่าใน Perl เป็นตัวเลข0เช่นกัน - ภาพที่ OCR อ่านเป็น
;i;c;;#\\?z{;?;;fn':.;จะกลายเป็นสตริงcใน Perl - ภาพที่ OCR อ่านเป็น
;E,'__'ถูกประเมินค่าเป็นสตริงE__ใน Perl
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ภาษาต่อประกบ มีคุณสมบัติที่ทำให้ลำดับโทเคนทุกแบบเป็นโปรแกรมที่ถูกต้องได้
ถ้าเป็นภาษาที่ใช้บิตเดี่ยวเป็นโทเคน ก็จะทำให้สตริงบิตทุกแบบเป็นโปรแกรมที่ถูกต้อง zot ของ Chris Barker เป็นหนึ่งในภาษาประเภทนั้น
ได้แรงบันดาลใจจาก zot จึงนิยามเวอร์ชันแบบต่อประกบของ Binary Lambda Calculus ที่มีคุณสมบัติแบบเดียวกัน
[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 และ b เป็นโปรแกรมที่ถูกต้องทั้งคู่ a || b ก็ต้องถูกต้องด้วย โดย || หมายถึง “การนำมาต่อกัน”
แต่คุณสมบัตินี้ไม่ได้แปลว่าทุกลำดับโทเคนจะถูกต้อง เช่นใน Cat นั้น
[1 2ไม่ถูกต้องตามไวยากรณ์อยากเข้าใจทั้ง Jot และประโยคนั้นเหมือนกัน
เชิงอรรถข้อ 5 สนุกดี
⁵ ฟีเจอร์นี้ทำให้เกิด quine ที่สวยงามได้ ถ้าเก็บโปรแกรม Perl ชื่อ “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"ดูเหมือนจะหาเมธอด"illegal"ในแพ็กเกจ"division"ไม่เจอ และคงจะปล่อยส่วนนั้นผ่านไปประมาณนั้น ส่วนเมธอด"by"ของแพ็กเกจ"zero"ก็คล้ายกัน และ"at /tmp"ดูเหมือนจะเป็นสตริงที่ง่ายที่สุดที่สร้างข้อความผิดพลาดนั้นได้ ข้อผิดพลาดนี้น่าจะร้ายแรงกว่าคำเตือนเรื่องแพ็กเกจที่หายไป เลยทำให้โปรแกรมหยุดฉันเดาว่า
/เป็นตัวดำเนินการหาร และ"tmp"ถูกเตรียมเป็นตัวแปรแล้วบังคับแปลงเป็นจำนวนเต็ม แต่"/tmp"อย่างเดียวใช้ไม่ได้ ขณะที่"/tmp/"ไปทำงานเกี่ยวกับ regex เลยไม่เข้าใจว่าทำไม parser ถึงมองเป็นการหารตรงนั้นโพสต์ที่เกี่ยวข้อง:
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ยังคงให้ผลลัพธ์เป็นข้อความเสมอแม้กับภาพที่ไม่ใช่ข้อความ มันไม่ผิดอะไรหรือ?
เมื่อสิบกว่าปีก่อนฉันเคยทำ OCR หนังสือเก่า และจำได้ว่าหงุดหงิดมากกับการต้องจัดการข้อความขยะที่มาจากรูปเล็ก ๆ คราบเปื้อน และฝุ่น ดูเหมือนวงการนี้จะไม่ได้ก้าวหน้าไปมากนักหลังจากนั้น
ถ้ารอยขีดเขียนสุ่ม ๆ กลายเป็นสิ่งที่รันได้อย่างถูกต้องใน Perl นั่นไม่แปลว่ามีอะไรผิดปกติหรือ?
ฉันลองเองแล้ว และ ChatGPT ก็เป็นเอเจนต์ OCR แบบ “ฉลาดและเข้าใจบริบท” ที่ค่อนข้างดี
ฉันเข้าใจว่าบทความนี้พูดถึงปัญหาที่โปรแกรมรู้จำอักขระด้วยแสงตัวหนึ่งมองคราบสีที่กระเด็นเป็นตัวอักษร
โปรแกรมนั้นดูเหมือนมีแนวโน้มจะพยายามตีความคราบสีเป็นชุดตัวอักษรบางอย่างแทบตลอดเวลา และในบรรดาวิธีออกแบบที่เป็นไปได้หลายแบบ วิธีนี้ก็ถือว่าน่ายอมรับและสอดคล้องกับเป้าหมาย
แต่ตอนแรกฉันก็นึกถึงอีกวิธีหนึ่งเหมือนกัน คือมองเศษสีและช่องว่างเป็น 0 กับ 1 แล้วตีความทั้งภาพเป็นโปรแกรม ซึ่งถ้าเป็นแบบนั้น ส่วนใหญ่ก็คงเป็นแค่สัญญาณรบกวนไร้ความหมาย
สุดท้ายมันมีอยู่สองขั้ว ขั้วหนึ่งคือแทบทั้งหมดเป็น noise ส่วนอีกขั้วคือส่วนใหญ่มีความหมาย เกมซ้อนเกมตรงนี้เหมือนจะเป็นการหา วิธีตีความ ที่มอบความหมายให้คราบสีได้มากที่สุด โดยให้ความหมายนั้นเกิดจากโครงสร้างของมันเองมากที่สุด ไม่ใช่เพราะกฎพยายามยัดเยียดความหมายให้
ใช้ Generative AI ก็สร้างคราบสีรูปแบบใหม่ที่ล้ำสมัยและถูกประเมินว่าเป็นซอฟต์แวร์ที่รันได้เร็วกว่าเดิมมาก
Generative AI ช่วยให้ผู้สร้างหน้าใหม่ใช้เวิร์กโฟลว์ text-to-image เพื่อสร้างมูลค่าให้ธุรกิจทุกขนาดได้ โมเดล AI รุ่นใหม่สามารถฝังซอฟต์แวร์ที่ใช้งานได้และโค้ดที่เครื่องอ่านได้ลงในคอนเทนต์ความละเอียดสูงหลากหลายรูปแบบ ช่วยดึงความสนใจจากผู้ชม และมอบวิธีใหม่ที่น่าตื่นเต้นให้ครีเอเตอร์ขยายฐานผู้ชม
งานวิจัยเชิงคำนวณที่ล้ำยิ่งกว่านี้อยู่ที่นี่: https://sigbovik.org/
เป็นการดัดแปลงมุกเก่าเรื่อง “แยกไม่ออกจาก line noise” ได้อย่างฉลาด
สำหรับคนที่ไม่ค่อยได้เจอ line noise ให้นึกถึงว่าเทอร์มินัลวิดีโอแบบตัวอักษร ASCII กำลังตีความสตรีมไบต์เพื่อแสดงข้อความที่มีความหมาย ตอนนี้ลองสมมติว่าช่องทางสื่อสารเสียขึ้นมาด้วยเหตุผลบางอย่าง เช่น มีคนยกหูโทรศัพท์ขึ้นระหว่างที่โมเด็มเชื่อมต่ออยู่ หรือมีสัญญาณรบกวนในสาย
ถ้าไม่มีการแก้ไขข้อผิดพลาดหรือ checksum ไบต์ที่ถูกตีความก็จะกลายเป็นแบบสุ่มแทบทั้งหมด ดังนั้นตัวอักษร ตัวเลข เครื่องหมายวรรคตอน และอักขระควบคุมแบบสุ่มจะถูกแสดงขึ้นบนหน้าจอ และคนที่คุ้นเคยก็จะรู้ว่ามันเป็นข้อมูลสุ่มและรู้ด้วยว่าทำไม มุกตรงนี้คือไอ้สิ่งนั้นกลับยังเป็นโปรแกรม Perl ที่ถูกต้องอยู่ดี
ในเมื่อเป็นแบบนี้ ฉันคงต้องเอาหัวหอมไปผูกไว้ที่เข็มขัดแล้ว
เขาบอกว่า “ยังไม่มีซอร์สโค้ด เพราะฉันใช้ GitHub ไม่เป็น” งั้นก็คงหายไปตลอดกาลแล้ว
อย่างน้อยก็ไม่มีใน https://git.mcmillen.dev/explore/repos
ในฐานะโปรแกรมเมอร์ Perl ฉันมองว่า 7% ที่ใช้การไม่ได้นั่นคือบั๊ก