Wall of Text #12: File Extension is Magic

วันนี้มีรูปมาให้ดู

ถามว่ารูปนี้มีอะไรพิเศษ แนะนำให้ลองเซฟรูปดูแล้วจะเห็นว่ามันเป็น JPG และอย่างที่รู้กันว่า JPG มันหมุนไม่ได้

🤔

ที่เป็นอย่างนี้ก็เพราะว่า นามสกุลไฟล์เป็นเพียงข้อเสนอแนะ ใน Windows ระบบจะใช้นามสกุลไฟล์เพื่อบอกว่าจะต้องเปิดไฟล์นี้ด้วยโปรแกรมอะไร แต่ใน Linux แล้ว ไฟล์หลายๆ ประเภทระบบสามารถระบุประเภทของไฟล์ได้เองแล้วแม้ไม่ต้องใส่นามสกุลไฟล์!

เวลาที่เราแปลงนามสกุลไฟล์ เราถึงจะต้องไปเปิดในโปรแกรมขึ้นมาแล้วเซฟใหม่เป็นนามสกุลใหม่ ถึงจะเปิดได้ถูกต้อง เช่นถ้าเรามีไฟล์ MKV อยู่แต่โทรทัศน์ของเรารองรับเฉพาะไฟล์ MP4 เราก็ต้องใช้โปรแกรม Handbrake แปลงก่อนถึงจะไปเปิดในโทรทัศน์ได้ เพราะการเปลี่ยนชื่อไฟล์ไม่ได้เปลี่ยนเนื้อหาในไฟล์

(ไฟล์ thinking.jpg ด้านบน ก็สร้างมาจากการ rename thinking.gif เป็น thinking.jpg เฉยๆ โดยไม่ได้ผ่านโปรแกรมใดๆ)

It’s Magic

แล้ว Linux ทราบได้อย่างไรว่าจริงๆ แล้วมันคือ GIF ไม่ใช้ JPG? คำตอบคือ It’s magic!

ถ้าเราลองเปิดไฟล์รูปที่เซฟมาใน Notepad หรือโปรแกรมแก้ไขข้อความอื่นๆ เราจะเห็นแบบนี้

จะสังเกตว่าไฟล์นี้จะขึ้นต้นด้วย GIF89a ซึ่งมาตรฐานของไฟล์ GIF กำหนดไว้ให้เป็น “Magic number” ของไฟล์ GIF ทั้งหมด

ไฟล์ที่ไม่ได้ขึ้นต้น GIF89a ไม่ใช่ GIF แน่นอน แต่ถ้ามีอาจจะเป็นหรือไม่เป็นก็ได้ขึ้นอยู่กับเนื้อหา วิธีนี้ช่วยให้คอมพิวเตอร์เลือกต่อได้ง่ายว่าต้องเอาโปรแกรมอะไรมาตรวจสอบเนื้อหาที่เหลือ

(นอกจาก GIF89a แล้ว GIF ยังมี GIF87a อีกด้วยซึ่งเป็นมาตรฐานเก่า โดย 1989 และ 1987 เป็นปีที่มาตรฐานนั้นออกมาครั้งแรก)


ไม่ใช่ทุกไฟล์เสมอไปที่จะมีเครื่องหมายเป็นภาษามนุษย์อ่านง่ายแบบนี้ การเขียนโปรแกรมเองก็ไม่ได้มีกฎหมายอะไรที่บอกว่าไฟล์จะต้องมีเครื่องหมายบอกไฟล์เสมอไป ทำให้แต่ละไฟล์มีจุดบอกตำแหน่งแตกต่างกันออกไป เช่นไฟล์ doc (Microsoft Word รุ่นเก่า) นั้นเมื่อเปิดในโปรแกรม Hex Editor จะขึ้นต้นด้วย D0 CF 11 E0 A1 B1 1A E1 ซึ่งถ้าใช้โปรแกรม Notepad ทั่วๆ ไปอ่านจะเป็นตัวยึกยือ

เพื่อให้การจำแนกไฟล์ได้ง่ายขึ้นและเรียกจากโค้ดได้ จึงมีผู้รวบรวมข้อมูลเหล่านี้เป็นฐานข้อมูลไว้และทำเป็นโปรแกรมออกมาชื่อ file (ตรงไปตรงมาดี) เนื่องจากโปรแกรมนี้ออกมาพร้อมกับ UNIX แล้วทำให้ลินุกซ์ทุกตัวติดตั้งโปรแกรม file ได้หมด วิธีการใช้งานใช้งานเพียงพิมพ์ file ตามด้วยตำแหน่งของไฟล์ปริศนา

$ file thinking
thinking: GIF image data, version 89a, 498 x 498

นอกจากจะบอกว่าเป็นไฟล์ประเภทใดถูกแล้ว สำหรับไฟล์ GIF โปรแกรมยังบอกขนาดได้อีกด้วย!

Standing on the shoulder of giants

ภาษาอังกฤษมีสำนวนว่า “ยืนบนไหล่ของยักษ์” หมายถึงว่าความก้าวหน้าต่างๆ เกิดขึ้นจากการต่อยอดจากความก้าวหน้าเดิม

ในโปรแกรมมิ่งก็เช่นเดียวกัน เวลาเขียนโปรแกรมเราก็มักจะใช้ Library สำเร็จรูป เช่น ถ้าเราจะส่งข้อมูลเราระหว่างโปรแกรมเราอาจจะใช้ฟอร์แมต JSON จะได้ไม่ต้องคิดค้นขึ้นมาใหม่

ฟอร์แมตไฟล์ต่างๆ ก็เช่นเดียวกัน หลายๆ ฟอร์แมตเมื่อเราเปิดมาแล้วก็อาจจะพบว่ามันมี Magic ของไฟล์ประเภทอื่นอยู่ เช่นถ้าเราเปิดไฟล์ docx (Microsoft Word 2007+), jar (โปรแกรม Java), APK (แอพ Android), IPA (แอพ iOS) ขึ้นมาจะเห็นว่ามันขึ้นต้นด้วย PK ซึ่งเป็น Magic ของไฟล์ Zip และสามารถใช้โปรแกรมเปิดไฟล์ Zip เปิดได้ด้วย

docx

ไฟล์เหล่านี้บางประเภทก็สามารถใช้โปรแกรม file ตรวจสอบได้เช่นกัน

$ file file-sample
file-sample: Microsoft Word 2007+

Next Time

Video – Free HD Stock-Footage and Motion Graphics by CyberWebFX https://www.youtube.com/c/CyberWebFX
Music – Floaters – Jimmy Fontanez CC-BY 2.0

วิดีโอข้างบนขนาด 1MB ความละเอียด 480p ภาพก็ค่อนข้างโอเค เสียงเพลงก็โอเค

ส่วนวิดีโอนี้ในอัพโหลดในปี 2008

ความละเอียด 240p ขนาด 4MB

Only if technology could’ve come sooner