แนะนำงานวิจัยว่าด้วยความสัมพันธ์ระหว่าง Paint Splatters กับภาษาโปรแกรม Perl
- บทความวิจัยที่ได้รับการตอบรับให้ตีพิมพ์ในการประชุม SIGBOVIK 2019 และได้รับรางวัล "Unwitting Participation Ribbon"
- เมื่อสาดสีใส่กำแพง มีโอกาส 93% ที่จะได้โปรแกรม Perl ที่ใช้งานได้
- ใช้แนวทางเชิงประจักษ์โดยอาศัยซอฟต์แวร์รู้จำอักขระด้วยแสง (OCR)
- วิเคราะห์ลักษณะของโปรแกรม Perl ที่เกิดจาก Paint Splatter และยกตัวอย่าง Paint Splatter 7 แบบที่ไม่ใช่โปรแกรม Perl ที่ใช้งานได้
แนะนำเอกสารประกอบของงานวิจัย
- แสดง Paint Splatter ทั้งหมดและซอร์สโค้ด Perl ที่ใช้งานได้ที่สอดคล้องกันไว้ในหน้าเดียว
- รูปภาพที่ไม่สามารถ parse เป็นโปรแกรม Perl ที่ใช้งานได้จะแสดงคำว่า "ไม่ถูกต้อง" เป็นสีแดง
- หากมีการรู้จำเป็นโปรแกรม Perl ที่ใช้งานได้หลายแบบจากการตั้งค่า OCR ที่ต่างกัน ผู้เขียนจะเลือกอันที่ "น่าสนใจ" ที่สุดตามรสนิยมด้านสุนทรียะของตน
- มี tarball ที่บรรจุภาพ Paint Splatter จำนวน 100 ภาพซึ่งใช้เป็นชุดข้อมูลหลักของงานวิจัย
ตัวอย่างโปรแกรม Perl จาก Paint Splatter ที่น่าสนใจซึ่งค้นพบหลังเส้นตายส่งบทความ
- splatter ที่ถูกรู้จำเป็นสตริง
lerzfijglpFiji-j และถูกประเมินค่าเป็นเลข 0 ใน Perl
- รูปภาพที่ถูกรู้จำเป็นสตริง
*?- และถูกประเมินค่าเป็นเลข 0 ใน Perl
- รูปภาพที่ถูกรู้จำเป็นสตริง
;i;c;;#\\\\?z{;?;;fn':.; และถูกประเมินค่าเป็นสตริง "c" ใน Perl
- รูปภาพที่ถูกรู้จำเป็นสตริง
;E,'_', และถูกประเมินค่าเป็นสตริง "E_" ใน Perl
ความเห็นของ GN⁺
- ดูเป็นงานวิจัยที่สำรวจคุณลักษณะของภาษาโปรแกรมด้วยไอเดียที่แปลกและสนุก และน่าจะเป็นตัวอย่างที่ดีในการแสดงให้เห็นความยืดหยุ่นทางไวยากรณ์ของ Perl แบบย้อนแย้ง
- แต่ก็ชวนให้สงสัยว่าผลการวิจัยนี้กำลังบ่งชี้ถึงปัญหาในการออกแบบภาษา Perl หรือไม่ เพราะการที่แม้แต่สตริงสุ่มก็ยัง parse ได้ถึง 93% อาจสะท้อนความกำกวมของภาษาไม่ใช่หรือ?
- น่าสนใจว่าถ้านำการทดลองคล้ายกันนี้ไปใช้กับภาษาโปรแกรมอื่นจะได้ผลอย่างไร การเปรียบเทียบผลลัพธ์ระหว่างภาษาน่าจะช่วยให้เห็นความแตกต่างของปรัชญาการออกแบบภาษา
- การทำให้ไวยากรณ์ของภาษาโปรแกรมมองเห็นได้ด้วยวิธีนี้ก็ดูน่าสนใจเช่นกัน และน่าจะช่วยให้เข้าใจความซับซ้อนหรือความเป็นระเบียบของไวยากรณ์ในเชิงภาพได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เป็นเรื่องไม่ถูกต้องที่ซอฟต์แวร์ OCR ยังสร้างผลลัพธ์เป็นข้อความแม้จากภาพที่ไม่ใช่ข้อความ จำได้ว่าเมื่อ 10 ปีก่อนตอนสแกนหนังสือเก่าด้วย OCR การต้องมาจัดการข้อความขยะที่ถูกสร้างจากภาพเล็ก ๆ คราบเปื้อน ฝุ่น ฯลฯ น่ารำคาญแค่ไหน ดูเหมือนว่าหลังจากนั้นวงการนี้ก็ไม่ได้ก้าวหน้าไปมากนัก
ภาษาแบบ concatenative มีคุณสมบัติที่ลำดับโทเคนทุกแบบเป็นโปรแกรมที่ถูกต้องได้
zotของ Chris Barker ก็เป็นหนึ่งในภาษาประเภทนั้นzotจึงมีการนิยาม Binary Lambda Calculus เวอร์ชันแบบ concatenative ขึ้น ซึ่งเวอร์ชันนี้ก็มีคุณสมบัติเดียวกันมีเชิงอรรถที่น่าสนุก:
"Illegal division by zero at /tmp/quine.pl line 1."ถ้าบันทึกไว้ในตำแหน่งที่เหมาะสม ก็จะพิมพ์"Illegal division by zero at /tmp/quine.pl line 1."ออกมา เหตุผลที่มันทำงานแบบนี้ขอปล่อยไว้เป็นแบบฝึกหัดสำหรับผู้อ่านบทความที่เกี่ยวข้อง:
"93% of Paint Splatters Are Valid Perl Programs (2019)"(กรกฎาคม 2021, 163 ความคิดเห็น)"93% of Paint Splatters Are Valid Perl Programs (2019)"(ธันวาคม 2023, 1 ความคิดเห็น)บทความนี้พูดถึงการที่โปรแกรม "optical character recognition" ตัวหนึ่งรู้จำคราบสีเป็นตัวอักษร โปรแกรมนี้ดูเหมือนจะมีแนวโน้มรู้จำออกมาเป็นชุดตัวอักษรแบบใดแบบหนึ่งแทบจะตลอดเวลา
ในบรรดาวิธีต่าง ๆ ที่ทำให้แนวคิดนี้เกิดขึ้นได้ วิธีนี้ถือว่าน่ายินดีต้อนรับอย่างยิ่งและเข้ากับเจตนารมณ์ แต่ก็ยังให้ภาพคร่าว ๆ ของวิธีอื่นที่เป็นไปได้ เช่น มองแถบสีและพื้นที่ว่างเป็น 0 กับ 1 แล้วมองทั้งหมดเป็นโปรแกรม ในกรณีนั้นส่วนใหญ่ก็คงเป็นเพียง noise ที่ไร้ความหมาย
มีอยู่สองสุดขั้ว คือสุดขั้วที่ส่วนใหญ่เป็น noise กับสุดขั้วที่ส่วนใหญ่มีความหมาย และเกมซ้อนเกมตรงนี้คือการหาวิธีตีความที่มอบความหมายให้คราบสีได้มากที่สุด โดยความหมายนั้นต้องออกมาจากโครงสร้างจริง ๆ ไม่ใช่จากการที่กฎเลือกจะมองเห็นความหมายอย่างแข็งขันเพียงใด
เป็นการดัดแปลงมุกเก่าเรื่อง "แยกไม่ออกจาก line noise" ได้อย่างฉลาด
ถ้าใช้ generative AI ก็จะสร้างคราบสีแบบใหม่และล้ำสมัยที่ถูกประเมินว่าเป็นซอฟต์แวร์ที่ทำงานได้เร็วขึ้น generative AI ช่วยให้ครีเอเตอร์รุ่นใหม่ใช้และต่อยอดเวิร์กโฟลว์จากข้อความสู่ภาพได้ พร้อมส่งมอบคุณค่าให้ธุรกิจทุกขนาด โมเดล AI รุ่นใหม่สามารถฝังซอฟต์แวร์ที่ทำงานได้และโค้ดที่เครื่องอ่านได้ลงในคอนเทนต์ความละเอียดสูงหลากหลายประเภท เพื่อดึงดูดผู้ชมและมอบวิธีใหม่ที่น่าตื่นเต้นในการขยายฐานผู้ชมให้ครีเอเตอร์
โพสต์เมื่อวันที่ 1 เมษายน ซึ่งบอกเป็นนัยอะไรบางอย่าง
ในฐานะโปรแกรมเมอร์ Perl ผมคิดว่า 7% ที่ใช้งานไม่ได้คือบั๊ก