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 ปิดตัวเองไปดื้อๆ ตอนผมเจอครั้งแรกผมกดลบทิ้งแล้วลงอีกตัวทันที

Introducing project Kyou

ในบล็อคตอนนี้พักเรื่องอนิเมะและเรื่องดองบล็อคมาถึงอะไรที่มีสาระกันบ้างครับ ก็จะขอแนะนำ project NSC ประจำปี 2013 ครับ “project Kyou”

*(blog post นี้เขียนไว้ล่างหน้าประมาณครึ่งเดือนก่อน publish)*

project Kyou คืออะไร? อันนี้ผมคงโยน teaser ไปมากพอสมควรแล้ว แต่เพื่อป้องกันไม่ให้คู่แข่งที่อาจจะเอาไปวิเคราะห์อะไรได้ เลยปิดข่าวไว้ให้มากที่สุดครับ

เคยอ่านคออนิเมะไหมครับ? คออนิเมะทั้งสองเล่ม ผมโค้ดมือทั้งเล่มครับ ผมเคยคิดว่าห้ามทำระบบออโต้เด็ดขาด เพราะมันจะจำกัดความคิดสร้างสรรค์ให้อยู่ได้แค่ที่ระบบทำได้ แต่พอขึ้นเล่มต่อมาเข้าจริงผมพบว่ามันจะเริ่มเบื่อและขี้เกียจ ใช้วิธีเขียนที่ง่ายขึ้น ทำให้คุณภาพมันตก

อีกส่วนคือทางด้าน NSC ผมวางแผนและประกาศไปแล้วว่าผมจะเอา menome ลง ผมมองแล้วว่ามันจะไม่ได้ที่ 1-3 แน่นอนเพราะ social impact ต่ำ แต่มันไม่ต้องเขียนใหม่และพัฒนามาเป็นปีแล้ว แต่คนที่ทำอีกคนหนึ่งคือ Fantasier ซึ่งอยู่คนละโรงเรียนบอกว่าไม่ลงด้วยและให้เงินรางวัลไปได้เลย ผมก็เลยตะขิดตะขวงใจ ก็เลยตัดสินใจว่าจะทำระบบสร้างคออนิเมะสำเร็จรูป ก็เป็นที่มาของ project Kyou

ทีนี้มันจะมีสองประเด็นที่ผมก็คิดต่อออกไป (ผ่านการสนทนากับหลายท่านทาง Twitter)

1. สังเกตว่า NSC มี “โปรแกรมส่งเสริมการเรียนรู้” แต่เอาเข้าจริงแล้วไม่ใช้แฟลชก็ RPG Maker อะไรประมาณนี้ มันกลายเป็นว่าเราตกอยู่ภายใต้เครื่องมือของต่างประเทศ แต่ไม่ค่อยมีใครคิดเครื่องมือเข้ามา
2. อันนี้ผมไม่ค่อยมั่นใจในข้อมูล แต่เหมือนหมวดโปรแกรมส่งเสริมการเรียนรู้ จะต้องส่งด้วยโปรแกรมที่มีเนื้อหา โปรแกรมผมไม่มีเนื้อหา คนใช้อยากสร้างเรื่องอะไร ใส่เข้าไปได้เลย เพียงแต่ว่าผมเอาคออนิเมะเป็นเครื่องทดสอบว่ามันสามารถทำได้จริง ถ้าอยากทำอย่างอื่นนอกเหนือ อาจจะประยุกต์ได้ หรือเขียนต่อเพิ่มไปก็ได้ ผมก็ไม่แน่ใจว่าโปรแกรมไม่มีเนื้อหามันไม่ใช่ “ส่งเสริมการเรียนรู้” ยังไง (เท่าที่ดูกติกาแล้วไม่ได้มีคะแนนอะไรเฉพาะนะครับ แต่ผมไม่กล้าเสี่ยงเพราะเป็นปีสุดท้ายในระดับมัธยม และยังไม่เคยเห็นคนอื่นส่งอะไรที่ไม่มีเนื้อหาลง จะไปลงโปรแกรมประยุกต์เอาซะมากกว่า)
3. (ประเด็นที่แล้วไม่นับ) ตอนนี้ Tablet ป. 1 กำลังเป็นกระแสนิยม และระบบ content ไม่ดี คือผมเพิ่งรู้ไม่นานเนี่ยครับว่าไอ้ที่เห็นมันทำฟรี แต่ตัว learning object ที่อีกกลุ่มทำ อันนี้ไม่ทราบรายละเอียด ผมเชื่อนะครับว่า คนเดียวที่อ่านเกมออกคือ Apple ที่ออก iBooks Author มา เพราะเราไม่ได้ต้องการ video เปิดสอนให้นักเรียนนะคะนี่คือแบบเรียนวิชาภาษาไทย อันนี้สำหรับชั้นป. 1 ทำได้ แต่ในระยะยาวแล้ว สิ่งที่ควรมีคือ content platform ที่ครูสามารถผลิตผลงานได้เอง

หลังจากผมพอได้ไอเดียการออกแบบโปรแกรมในหัวแล้ว ก็ตาม flow มาตรฐานครับ คือผมต้องปรึกษาโคช (คุณพ่อ) ก่อนว่าโอเคมั้ย พ่อฟังผมอธิบายแล้วยังไม่เห็นภาพในหัว เลยบอกว่าอยากให้มัน drag & drop ได้เลย (ซึ่งจริงๆ อยู่ในแผนแล้ว) ตอนนั้นผมก็แย้งไปแล้วก็จัดการทำโดยไม่สนใจอะไร

ถัดมา ก่อนเริ่มโครงการ ผมต้องเลือกชื่อโครงการครับ ก็จะมีหลายชื่อที่คิดเอาไว้ (ซึ่งมาจากอนิเมะ เหมือนเป็น naming scheme ผมแล้ว เพราะว่าตั่้งชื่อลอยๆ มันน่าจะดู geek ไป) เช่น menma (Ano Hana), akira (พระเอก EOTE), alice (นางเอก Kamisama no Memochou แต่ชื่อนี้ผมใช้เป็น database server แล้ว), kirino (oreimo), kurisu (Steins;Gate), mirai (TM8.0) แล้วก็ตัดสินใจไม่ได้จนนอน วันต่อมา ผมตื่นมาคิดว่าเลือก Kyou (Clannad) เพราะไม่มีอยู่ในรายชื่อแรก (surprise!)

ถ้ายังจำภาพเปิดตัวได้นะครับ เคียวปาหนังสือโดดถีบใส่ซุโนฮาร่า สโลแกน Kickass. Flying Books. มันเป็นภาพที่ผมนึกขึ้นมาตอนเลือกชื่อโครงการ และสโลแกนมันก็เหมือนจะตรงตามภาพ แต่ความหมายที่จะสื่อก็คือมันเจ๋ง (Kickass) และมันปฎิวัติหนังสือ (Flying books) สำหรับ slogan ที่ใช้แบบเป็นทางการผมก็จะใช้ว่า Books. Made interactive.

พาร์ทต่อไปที่จะเขียน จะขอเล่าถึงประวัติการพัฒนาตั้งแต่ต้นเลยนะครับ ไม่รู้ว่าจะจบกี่ part ผมถึงจะเบื่อ