Theppitak's blog

My personal blog.

03 กุมภาพันธ์ 2550

The Power of Unix Design

วกกลับมาพูดถึงงานที่โรงเรียนต่อ ความจริงแค่เซ็ต kiosk กับ video บวกกับการเตรียมเนื้อหา โดยรวบรวมข้อมูลจากฝ่ายต่างๆ ก็น่าจะกินเวลาไปมากพอดูแล้ว แต่นอกเหนือจากนั้น ก็มีงานแถมชิ้นเล็กๆ อีกนิดหน่อย เห็นว่าไม่ได้ยากเย็นอะไร ก็เลยรับทำให้ด้วย ซึ่งคงไม่มีสาระสำคัญอะไรสำหรับการกล่าวถึง

แต่สิ่งที่อยากสรุปเสริมจากงานทั้งหมดครั้งนี้ ก็คือว่า มันเป็นตัวอย่างหนึ่งของพลังของ Unix Design ในสถานการณ์ที่ต้องทำอะไรอัตโนมัติอย่างนี้ GUI ที่สวยหรูไม่ได้ช่วยอะไรเลย แต่ command line option ที่ยืดหยุ่น ประกอบกับเครื่องมืออื่นๆ ที่ทำงานร่วมกันเป็นอย่างดีต่างหาก ที่ช่วยให้งานเสร็จได้โดยง่าย

ขอยกคำพูดบางตอนของ ESR ใน The Art of Unix Programming:

Many operating systems touted as more ‘modern’ or ‘user friendly’ than Unix achieve their surface glossiness by locking users and developers into one interface policy, and offer an application-programming interface that for all its elaborateness is rather narrow and rigid. On such systems, tasks the designers have anticipated are very easy — but tasks they have not anticipated are often impossible or at best extremely painful.

Unix, on the other hand, has flexibility in depth. The many ways Unix provides to glue together programs mean that components of its basic toolkit can be combined to produce useful effects that the designers of the individual toolkit parts never anticipated.

ลองแปลเสียหน่อย:

ระบบปฏิบัติการหลายตัวที่อวดตัวว่า ‘ทันสมัย’ หรือ ‘เป็นมิตรกับผู้ใช้’ กว่ายูนิกซ์ ได้ประสบความสำเร็จเรื่องความเงางามอย่างผิวเผิน ด้วยการตีกรอบผู้ใช้และนักพัฒนาด้วยนโยบายอินเทอร์เฟซเดียว และอินเทอร์เฟซสำหรับพัฒนาโปรแกรม (API) ที่ไล่เรียงรายละเอียดถี่ยิบแต่ค่อนข้างแคบและตายตัว ในระบบเหล่านั้น งานที่ผู้ออกแบบได้คาดการณ์ล่วงหน้าไว้จะทำได้ง่ายมาก - แต่สำหรับงานที่ผู้ออกแบบไม่ได้คาดการณ์ไว้แล้ว มักจะเป็นไปไม่ได้เลย หรืออย่างดีที่สุดก็ทำได้ยากเหลือแสน

ในทางกลับกัน ยูนิกซ์มีความยืดหยุ่นในระดับลึก หนทางมากมายที่ยูนิกซ์เตรียมให้สำหรับเชื่อมโปรแกรมต่างๆ เข้าด้วยกันนั้น หมายความว่าองค์ประกอบต่างๆ ที่เป็นชุดเครื่องมือพื้นฐาน สามารถประกอบเข้าด้วยกันเพื่อให้ผลที่เป็นประโยชน์ได้ในแบบที่ผู้ออกแบบเครื่องมือแต่ละส่วนไม่เคยนึกถึงเลย

สิ่งที่ผมชอบใน GNOME และอยากให้มีต่อไป ก็คือเรื่องการใส่ใจในดีไซน์แบบ Unix นี่แหละ อย่าง totem ก็เห็นตัวอย่างไปแล้ว ว่าถ้าออกแบบ command line ให้ดีพอ ก็สามารถใช้เครื่องมืออื่นอย่าง cron หรือ ssh สั่งการในแบบที่ต้องการ โดยผู้ออกแบบ totem ไม่จำเป็นต้องคิดล่วงหน้าไปไกล ว่าจะมีใครใช้ totem เล่นหนังแบบตั้งเวลาหรือเปล่า จะมีการควบคุมผ่านเครือข่ายหรือเปล่า หรือการใช้งานแบบอื่นที่ยังไม่เคยปรากฏ

ในส่วนโครงสร้างพื้นฐาน GNOME ใช้ gconf ในการควบคุมค่าตั้งของโปรแกรมต่างๆ ซึ่งจะมี gconfd เป็น daemon คอยกระจายการเปลี่ยนค่าตั้งแบบทันทีทันใดไปยังโปรแกรมเป้าหมาย พร้อมทั้งมี command line (gconftool) สำหรับติดต่อกับ gconfd ด้วย ทำให้การสั่งการเดสก์ท็อปแบบอัตโนมัติทำได้ยืดหยุ่นมาก เช่น เคยมีคนทำ hack สำหรับเปลี่ยนพื้นหลังด้วยภาพที่คำนวณจากโปรแกรม xplanet แสดงส่วนมืดสว่างของโลกแบบ real-time หรือถ้าจะควบคุม config ของโปรแกรมต่างๆ ผ่าน crontab ก็ย่อมทำได้

นอกจากนี้ ยังรู้มาว่า AbiWord สามารถสั่งแบบ command line ได้ด้วย ช่วยให้งานบางอย่าง เช่น การแปลงฟอร์แมตหรือแก้ไขเอกสารจำนวนมาก ทำได้ผ่าน shell script หรือ make rules (คล้ายกับที่ระบบ build ของ thaifonts-scalable ใช้กับ fontforge) หรือหากใครคิดเชื่อมโยงกับโปรแกรมอื่น ก็อาจใช้ shell script สั่งเรียงลำดับงานกับโปรแกรมอื่นได้ตามความต้องการ

หากสำรวจดีๆ ก็จะเห็นว่าโปรแกรมใน GNOME หลายตัวมี command line option เยอะแยะ เรื่องพวกนี้ ไม่ได้มีไว้ให้ปวดหัวกันนะครับ แต่ถ้าได้เจอสถานการณ์บางอย่าง คุณจะถามหาตัวเลือก command line จาก manpage ราวกับควานหาเมนูใน GUI เชียวแหละ และคุณจะรู้สึกขอบคุณ ที่แม้โปรแกรมเหล่านี้จะเป็น GUI แต่ก็ยังใส่ใจคุณพอที่จะทำ command line interface เจ๋งๆ ให้

ป้ายกำกับ:

0 ความเห็น:

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem