Old software is old ideas

ซอฟต์แวร์หลายๆ ตัว ไอเดียมันมรดกสืบต่อกันมาตั้งแต่โบราณแล้วล่ะครับ แล้วก็ไม่มีใครกล้าไป Challenge มัน

ตัวอย่างเช่นระบบ mission-critical หลายๆ ตัวที่ต้องการความเสถียร คนก็เลยไม่ค่อยยุ่ง แต่พอให้ config ก็ต้องไปนั่งเรียน config มัน บางอันหน้าตาโคตรไม่เหมือนภาษาคนและภาษาโปรแกรมเลย

– **ระบบฐานข้อมูล** เราใช้ SQL กันมาตั้งแต่โบราณ ไม่นานมานี้กระแสเพิ่งมาบูมด้วย NoSQL ที่กำลังมาท้าทาย SQL อยู่ แต่ละแบบก็มีข้อดีข้อเสียแตกต่างกันไป
– **ระบบพื้นฐานของเครือข่าย** เช่น LDAP RADIUS SMTP POP3 IMAP FTP *(สำหรับคนไม่รู้จัก: สองตัวแรกเป็นระบบเก็บ Login อาจจะรู้จักกันในชื่อ Active Directory สามตัวหลังคือระบบรับส่งอีเมลที่ใช้ในปัจจุบัน)* ถ้าไปลองสืบประวัติดูจะพบว่าพวกนี้หลายตัวสืบพ่อสืบแม่มันอายุมากกว่าอายุผมเสียอีก

(มิตรสหายท่านหนึ่งกล่าวไว้ว่า สรุปแล้ว LDAP หลายๆ ตัวมันคือโค้ดที่ต่อยอดมาจากโค้ดเด็กป. โทที่ปะผุต่อกันมายาวนานกว่า 20 ปี แถมมาจากบริษัทโทรศัพท์ ก็เลยซับซ้อนเกินจำเป็นซะอีก)
– **เว็บบอร์ด** หลายคนบ่นว่าเฟสบุ๊คทำเว็บบอร์ดไม่มีที่เกิดแล้ว ก็เพราะบอร์ดมันยังย่ำตีนอยู่ที่เดิมนั่นล่ะครับ บอร์ดกี่ยี่ห้อๆ ก็มีแต่เข้าไปพิมพ์กระทู้ ตอบกระทู้ จบ โมก็โมไม่กี่อย่าง ลงแชทบอกซ์ ลงวิทยุ
– **เว็บเซิร์ฟเวอร์** สาขานี้ปัจจุบันก็เริ่มมีผู้ท้าชิงมาแข่งกับ ​Apache แต่แต่ละตัวก็ยังใช้ความคิดคล้ายๆ กัน แค่ปรับไปใช้ async ให้มันเร็ว

จริงๆ มันก็มีคนมา challenge นะครับ ซึ่งในอนาคต ไม่รู้จะเกิดหรือจะไป

– **MySQL** กำลังแตกระแหงออกเป็นหลายๆ เสี่ยง ตัวนึงคือ [Drizzle](http://www.drizzle.org) ที่เอา MySQL มาตัดส่วนไม่สำคัญออก เขียนระบบที่เหลือใหม่ให้ทันสมัย เป็นปลั๊กอินซะให้มาก​ โดยไม่ได้สำคัญว่าจะต้อง compatible กับ MySQL เดิม
– **LDAP** ก็มี [LDAPJS](ldapjs.org) ขึ้นมา ซึ่งคนเขียนก็เคย[เขียนไว้ว่าทำไมเราควรจะต้องคิดใหม่ทำใหม่กันได้แล้ว](http://blog.nodejs.org/2011/09/08/ldapjs-a-reprise-of-ldap/) ความแปลกของมันคือ มันไม่ใช่โปรแกรมประเภท Install-Config-Use แต่มันเป็น library ให้เขียน server เอง ฉะนั้นเราอยากจะดึง user มาจากฐานข้อมูลหน้าตาแบบไหน จะทำระบบ ACL ซับซ้อนยังไง จัดการได้เอง ไม่ต้องไปนั่งงงว่าคอนฟิกยังไง ไม่ต้องหาวิธีประหลาดเวลาโปรแกรมไม่รองรับ
– **SMTP** ก็มี [Lamson Project](http://lamsonproject.org/) ซึ่งคนเขียนก็เอียนกับ m4 macro คือมันเป็นภาษาสำหรับเขียนมาโคร ฉะนั้นแล้วก็ไปใช้ภาษาที่คนจริงใช้กันไปเลยอย่าง Python จะเขียน alias file ก็ใส่ regex ได้เลยให้ไม่ต้องงง จะเก็บข้อมูลก็ไม่ต้องใช้ไฟล์ฟอร์แมตปัญญาอ่อน คนจริงต้องใช้ฐานข้อมูลจริง และไม่ใช่แค่ยี่ห้อเดียว จะมองโก จะ SQL ตามสะดวก
– **เว็บบอร์ด**นี่ผมชอบตัวนึงมาก มันชื่อ [Vanilla](vanillaforums.org) ซึ่งไอเดียบอร์ดมันแปลกใหม่มาก กระทู้จะดูแยกบอร์ดก็ได้ หรือดูรวมก็ได้ เว็บบอร์ดจะมีวอลล์ของบอร์ดรวมที่จะเห็นกิจกรรมในเว็บทั้งหมด ใครเปลี่ยนอวาตาร์ สมัครสมาชิก ตั้งกระทู้ก็เห็น จะอัพสเตตัสก็ยังได้ นอกจากนี้เวลามีการตอบกระทู้ที่เรา subscribe ไว้ ก็จะเด้งเตือนในกล่อง notify แบบเฟสบุ๊ค ไม่ต้องไปนั่งรีเฟรชบอร์ดทั้งวันให้เมื่อยตุ้ม
ตัวบอร์ดยังมีปลั๊กอินอีกหลายตัว เช่น Login with Twitter ที่เป็นล็อคอินจริงๆ กดปุ๊บเข้าปั๊บ ไม่เหมือนบอร์ดหลายตัวที่มันมีให้ใช้แต่พอกดเข้าไปมันก็แค่กรอก username ให้ ต้องไปสมัครอีกที หรือจะ integrate กับระบบอื่นๆ เช่น WordPress ที่ทำได้ขนาด SSO ถ้า login อยู่ใน wordpress แค่กดปุ่ม login ใน vanilla ก็เข้าระบบแล้ว ไม่ต้องกรอกแม้แต่ username

*(แอบโฆษณาว่าบอร์ด menome ก็เป็นอันนึงที่ผมพยายาม challenge ฟอร์แมตของเว็บบอร์ดอยู่นะ แต่ระบบมันบั๊กและงงๆ ไปหน่อย จะถอยกลับมาให้หน้าตาเป็นบอร์ดธรรมชาติมากขึ้น แต่ข้างหลังยังจะพยายามคงไว้อยู่)*

– **เว็บเซิร์ฟเวอร์**นี่ผมยกให้ [Mongrel2](http://mongrel2.org) เลย ตัว web server ใช้แนวคิดไม่เหมือนตัวไหนในโลกนี้เลย คือมันแค่รับ request มาแล้วส่งต่อให้ ZeroMQ ที่เป็น message queue ฉะนั้นแล้วเราสามารถมี client กี่ตัวก็ได้ที่รับฟัง queue และประมวลผลคำตอบกลับไปให้ mongrel2

ตัว client นี้ก็ไม่จำเป็นว่าต้องเขียนด้วยภาษาเดียวกัน หรือรันบนเครื่องเดียวกันด้วยซ้ำ (คือคล้ายๆ กับว่าตัว client ที่เราเขียนเนี่ยเป็นคนรับ request จาก client เลย แต่ว่าถ้า client เรารับไม่ทันสามารถ start client มารับเพิ่มอีกกี่ตัวบนกี่เครื่องก็ได้ ซึ่งคำว่าไม่ทันไม่ได้แปลว่า client โดนถล่มย่อยยับเพราะ message queue ไม่ได้ไปบีบคอใครมาให้ตอบ ไม่ตอบก็ไม่ตอบ)

ความเจ๋งอีกอย่างคือ config file มันเป็น SQLite ซึ่งตัว Mongrel ก็มาพร้อมกับตัวช่วย config ไม่ต้องไปนั่งวนใน SQLite เอง แต่ถ้าจะต้อง deploy จำนวนมากๆ สามารถเขียนโปรแกรมที่ให้ตัวช่วย config อ่านแล้วไปแปลงลง SQLite อีกทีก็ได้ หรือถ้าขาโหดก็คุม db ตรงๆ ได้เลย

—-

ผมอยากเห็นเซิร์ฟเวอร์ที่มันปราศจาก openldap freeradius exim4/postfix/sendmail courier/dovecot dhcp3-server bind9 สักที คอนฟิกแต่ละตัวนี่หน้าตาไม่เหมือนกันสักตัว จะภาษาคนก็ไม่ใช่

แถมโปรแกรมบ้าอะไรไม่รู้ สั่ง ntpdate แล้ว error ปิดตัวเองไปดื้อๆ ตอนผมเจอครั้งแรกผมกดลบทิ้งแล้วลงอีกตัวทันที