สัปดาห์ที่แล้ว เราได้มีโอกาสขยับ KnowledgeVolution มาอยู่บน Ruby on Rails 2.0.2 แล้วได้ทดลอง deploy กับ Leaners.in.th เป็นไซต์แรก (เพราะอยู่คนละเครื่องแม่ข่ายกับไซต์อื่นๆ) ปรากฎว่า bugs กระจาย ไล่หาอย่างไรก็ไม่เจอเสียที โดยส่วนใหญ่ error message จะเกี่ยวข้องกับกระบวนการ caching ครับ
ครั้งนี้เป็นการไล่ bugs ที่หมดเรี่ยวหมดแรงจริงๆ ครับ เพราะไม่เจอ จุดที่เคยเจอก็กลับไม่เจอ แปลกใจอย่างมาก
ก่อนหน้านี้ผมเคยเจอว่า gettext 1.10.0 มีปัญหากับ memcache-client เพราะ gettext ไป rewrite บาง functions ของ memcache-client ทำให้ทำงานได้เอ๋อ ผมก็เลยพยายามไล่ไปในจุดนั้น โดยคิดว่าต้องเป็นเรื่องเดิมอีกแน่ๆ โดย gettext 1.90.0 นั้นต้องมีปัญหาอะไรอีกแน่ๆ ผมก็หาไม่เจอ
ไล่ไปอีกหลายต่อหลายจุดที่เคยเจอว่ามีปัญหา ก็ไม่เจอ ทำเอาต้องกุมขมับ มึนตึ๊บ
แล้วก็ไปเจอว่าปัญหาอยู่ที่ plugin ชื่อ WillPaginate ที่นำมาใช้ โดย function ชื่อว่า paginate_by_sql ของ plugin นี้มีการใช้งาน subquery ซึ่งเป็นสิ่งที่ทำงานได้ช้ามากใน MySQL และวิธีในการใช้ subquery ของ WillPaginate ทำให้ database server ต้องทำงานหนักและต้องมีการส่งข้อมูลระหว่างเครื่องแม่ข่ายเยอะ แต่ WillPaginate ก็มี function ชื่อ WillPaginate::Collection.create ให้สร้าง collection เองซึ่งเราก็สามารถ optimize ให้ทำงานได้เร็วขึ้นได้
ตกลงว่าปัญหานี้ก็แก้ได้ไป และ SmokePing ของ Learners.in.th ก็กลับมาเขียวเหมือนเดิม
สิ่งที่น่าสนใจคือ "อคติ" (bias) ที่ผมมีทำให้พยายามแก้ปัญหาในเรื่องที่ผมเคยเจอ แต่ก็ไม่เจอ
การมีทักษะในการหาปัญหาแล้วแก้ได้นั้นถือว่าเป็น tacit knowledge ของโปรแกรมเมอร์ ซึ่งปัญหาก็ย่อมอยู่ในจุดที่เราเคยเจอ แต่วิธีการนี้กลับเป็นตัวบังตาเราเองไม่ให้เห็นปัญหาในจุดอื่นๆ ที่เราสมควรค้นหาด้วย ทำให้เสียเวลามากและเกือบทำให้หาปัญหาที่แท้จริงไม่เจอ
อคติเกิดจากการเรียนรู้ เป็นความรู้ฝังลึก เป็นประสบการณ์ ให้เราแยกแยะปัญหาได้ แต่อคติก็เป็นตัวบังตาไม่ให้เห็นสิ่งที่ควรเห็นเช่นกัน
ตกลงว่าอคติเป็นสิ่งที่ดีหรือไม่ดีกันแน่?
เขียนโปรแกรมนี่ก็ได้ปรัชญาชีวิตเยอะครับ
ผมก็เป็นครับ เวลาไล่ bug , ถ้าอัด video มาดูก็จะเห็นพฤติกรรมซ้ำๆซากๆได้เลย