วันนี้เป็นวันที่สองที่เราได้ใช้เครื่องใหม่ในการให้บริการ GotoKnow.org ครับ ดูเหมือนทุกอย่างจะทำงานปกติดี ผมก็มีเวลาเขียน AAR ถึงการจัดการในการย้าย GotoKnow.org กลับบ้านเสียหน่อย

Internet Thailand ได้จัดการติดตั้งเครื่องแม่ข่ายใหม่ให้เราตั้งแต่ช่วงต้นเดือนครับ แต่ผมติดต้องไปชะอำ (ดังที่เคยเขียนในบันทึกก่อนหน้านี้) เลยพึ่งได้มีโอกาสทำการย้ายในวันสุดสัปดาห์ที่ผ่านมานี้เอง

เราเลือกที่จะย้ายในช่วงวันสุดสัปดาห์ เพราะรู้ว่าต้องปิดการให้บริการเป็นเวลาอย่างน้อยหนึ่งวันครับ ยิ่งช่วงวันหยุดที่ผ่านมาเป็นวันหยุดยาวยิ่งทำได้สบายๆ ผมเลยเริ่มต้นจัดการเรื่องย้ายเมื่อวันที่ 21 ตอนบ่ายๆ เริ่มจากการ rebuild "world" สำหรับ FreeBSD ในเครื่องแม่ข่ายสองเครื่องที่เราใช้ในขณะนี้ (u3.usablelabs.com และ u4.usablelabs.com)

บอกกันก่อนว่าในความเร็วที่เห็นขณะนี้นั้น ถึงตอนนี้แล้วเราใช้เครื่องแม่ข่ายใหม่เพียงแค่สองเครื่องเท่านั้นนะครับ อีกเครื่องหนึ่งคือ u5.usablelabs.com กำลังรอเข้ามาช่วยอย่างสบายๆ เพราะ u3.usablelabs.com กับ u4.usablelabs.com นั้นยังไม่มี load เท่าไหร่เลย แม้ผู้ใช้จะเยอะเท่าไหร่ก็ตาม

ผมใช้ u3.usablelabs.com เป็น database server ซึ่งการติดตั้งเครื่องนี้เพื่อทำงานที่ dedicated อย่างนี้นั้น ทำได้อย่าง smooth & easy ครับ ไม่เหมือนการติดตั้งเครื่องเดียวเพื่อทำงานเป็นไม้จิ้มฟันยันเรือรบเหมือนเครื่องแม่ข่ายเก่าของเรา (livetwo.usablelabs.com)

u3.usablelabs.com นี่ผมป้องกันไว้หนาแน่นทีเดียว เรียกว่าใครหาญกล้ามา hack ระวังเจอตำรวจเคาะประตูบ้าน เพราะตอนนี้เครื่องอยู่ในประเทศไทยแล้ว มา hack ตอนนี้ก็เป็นอาชญากรรมที่เกิดขึ้นในประเทศไทยนะครับ อาจได้ไปเที่ยวศาลทหารในช่วงกฎอัยการศึกเช่นนี้ ผมขอเตือนผู้ที่มีใจรักในการ hack ทั้งหลายไว้ก่อนนะครับ

ต่อมาผมใช้ u4.usablelabs.com เป็น web and application server สำหรับให้บริการแก่ผู้ใช้ ซึ่งการติดตั้งก็ทำได้ smooth & easy เช่นเดียวกัน มาถึงตอนนี้ผมดีใจจริงๆ ที่เลือกพัฒนา KnowledgeVolution ด้วย Ruby on Rails

การติดตั้งเครื่องเพื่อบริการ site เดียวนี่งานเบากว่าการติดตั้งเครื่องเพื่อบริการ many many many sites ในเครื่องเดียวมากครับ เปรียบได้ก็เหมือนการทำอาหารนั่นละครับ ให้ทำอาหารจานเดียวการเตรียมอุปกรณ์อะไรต่อมิอะไรมันก็ง่ายกว่าการให้ทำอาหารสิบอย่างพร้อมๆ กัน

งานทั้งหมดนี่ผมเริ่มทำวันที่ 21 ยาวมาจนถึงวันที่ 22 ตอนเย็นๆ ซึ่งพอเตรียมทุกอย่างได้ที่แล้ว ผมก็ปิด GotoKnow.org ชั่วคราว (ด้วยข้อความ Good Bye San Francisco, Hello (Internet) Thailand) แล้วก็เริ่มย้ายข้อมูลซึ่งใช้เวลาหลายชั่วโมงเหมือนกัน ซึ่งช่วงนั้นผมก็ไปดูทีวี บอกแล้วว่า smooth & easy ครับ

พอวันที่ 23 เริ่มติดตั้งข้อมูลเรียบร้อย ผมก็แอบเปิด GotoKnow.org มาทดสอบการทำงานก่อน ปรากฎว่า smooth & easy กลายเป็น glitchy & tricky ไปแล้วครับ เพราะเจอ "segmentation fault" ตัวโตๆ ทีเดียว

การย้ายเครื่องแม่ข่ายคราวนี้ไม่ได้เป็นการย้ายไปยังเครื่องที่เร็วกว่าอย่างเดียว แต่เป็นการย้ายจาก 32-bit architecture ของเครื่องแม่ข่ายเดิม (และเครื่องที่ผมใช้ในการพัฒนา) ไปยัง 64-bit architecture ของเครื่องแม่ข่ายใหม่ด้วย

ช่วงในการเปลี่ยนแปลง architecture อย่างนี้จะเป็นช่วงที่เราจะเจอ bug ที่นึกไม่ถึงของโปรแกรมกันเยอะมาก เราอาจจะจำกันได้สมัยที่ย้ายจาก 16-bit architecture ไปยัง 32-bit architecture ในสิบปีที่แล้วที่ผ่านมา

ส่วนเจ้าปัญหาที่ผมเจอคือ library ที่ชื่อ ruby-gd2 ที่ผมใช้ในการประมวลผลรูปภาพและสร้าง security image นั่นเองครับ

ruby-gd2 เป็น Ruby library ที่ติดต่อไปยัง libgd ซึ่งเป็น C library ที่ให้บริการประมวลผลรูปภาพ โดยการติดต่อนี้ ruby-gd2 ได้ใช้ DL module ของ Ruby เพื่อทำการเชื่อมต่อดังกล่าว ส่วน libgd ก็ใช้ library ชื่อว่า freetype ในการประมวลผล font ต่ออีกทีหนึ่ง

"segmentation fault" เป็นปัญหาที่เกิดขึ้นจากการอ้างอิงหน่วยความจำไม่ตรง "segment" ซึ่งเป็นปัญหาที่เกิดขึ้นได้บ่อยๆ ถ้า libraries ใดสักตัวหนึ่งใน chain ที่ผมกล่าวมานั้นไม่ได้ทดสอบโปรแกรมของตัวเองให้ดีใน 64-bit architecture ซึ่งโดยส่วนใหญ่เกิดขึ้นจากการคำนวนขนาดตัวแปร (ที่ใหญ่ขึ้นแล้ว) ผิด

ข้อดีของ open-source คือเราไม่ต้องรอผู้ผลิตซอฟท์แวร์แก้ปัญหาให้เรา เนื่องจากเรามี source code อยู่กับมือ เราจึงสามารถแก้ไขเพื่อให้ทันการใช้งานของเราได้เลย

ผมจึงพยายามหาทาง "quick fix" ปัญหาที่เกิดขึ้น แต่ก็ทำได้ยากเพราะไม่มีเครื่อง 64-bit อยู่ใกล้ตัวที่จะทดลองได้อย่างสะดวก แต่สุดท้ายก็หาทางแก้ที่ "พอไปไหว" ได้ โดยการใช้ pre-defined font ของ ruby-gd2 มาสร้าง security image ไปพลางๆ ก่อน เลยได้ security image ที่มีตัวอักษรเล็กนิดเดียวอย่างที่เห็นครับ

พอถึงสามทุ่มวันที่ 23 จึงได้เปิด GotoKnow.org ให้ได้ใช้จริง โดยมีคุณ Conductor ได้กรุณาให้คำแนะนำผ่าน Google Talk อยู่ตลอดในช่วงการย้ายเครื่องแม่ข่ายเป็นผู้ใช้คนแรกครับ

ส่วนปัญหา ruby-gd2 ที่จะแก้ไขให้ทำงานได้เหมือนเดิม (และมากกว่าเดิม เพราะผมวางแผนจะใช้ ruby-gd2 ในการ plot รูป social networks) นั้น ผมก็เริ่มต้นกระบวนการการแก้ไขลำดับแรกไปแล้ว โดยการสั่งซื้อเครื่องคอมพิวเตอร์ที่ใช้ AMD 64-bit architecture มาทดลองที่บ้าน

ปัญหานี้ผมไม่หนักใจครับ ยัง smooth & easy ได้ แต่คนที่จะหนักใจคือ สคส. เพราะต้องซื้อเครื่องเพิ่มอีกแล้วครับ