Theppitak's blog

My personal blog.

25 กุมภาพันธ์ 2552

Fading Out the Translation

เดิมคิดว่าจะรอให้เสร็จงานแปล GNOME 2.26 แล้วค่อยเขียนเรื่องนี้ แต่คิดว่าเขียนตั้งแต่ยังแปลไม่เสร็จน่าจะเป็นประโยชน์กว่า เผื่อว่าจะช่วยเรื่องการส่งต่องานได้

ผมได้ตัดสินใจที่จะทำงานแปล GNOME 2.26 เองเป็นรุ่นสุดท้าย ในรุ่นถัด ๆ ไป ผมคิดว่าจะรับตรวจทานและ commit คำแปลจากอาสาสมัครให้เท่านั้น การตัดสินใจลดบทบาทงานแปลนี้ ก็ด้วยปัจจัยหลาย ๆ อย่าง:

  • ผมคิดว่าผมทำงานแปลมานานเกินไปแล้ว ผมเริ่มเข้าร่วมงานแปลเมื่อประมาณปี 2546 ด้วยเหตุผลที่ เคย blog ไว้ จนถึงตอนนี้ก็เกือบ 6 ปี ผ่านรอบการออกรุ่นของ GNOME มาราว 10 รุ่นในฐานะผู้ประสานงานแปล สมควรที่จะมีผู้รับช่วงต่อได้แล้ว
  • สุขภาพไม่เอื้ออำนวย โดยปกติแล้ว ผมจะไม่โหมแปลหนัก ๆ แต่จะใช้ความสม่ำเสมอ ทำเก็บเล็กผสมน้อยไปเรื่อย ๆ ทำให้เบาแรงในระยะยาว แต่ในระยะหลังนี้ ปัญหาตาแห้งและปวดนิ้ว ทำให้ผมแปลได้น้อยลงอีก ทำให้ไม่สามารถเร่งงานได้แม้ในช่วง string freeze นี้
  • งานแปลได้ทำให้ผมห่างจากงานพัฒนามานาน โดยเฉพาะในช่วงหลัง ๆ ที่นักแปลขาประจำได้ทยอยผละออกไป ทำให้งานแปลมาตกที่ผมมากขึ้น และได้เข้ามากินเวลาการทำงานพัฒนาและงานอื่น ๆ ทำให้ความคืบหน้าของงานเหล่านั้นเป็นไปได้ช้า หรือสะดุดบ่อย ๆ ตัวอย่างเช่น:
    • งานพัฒนาใน GNOME การมายุ่งกับงานแปลทำให้ผมห่างหายจาก bugzilla ของ GNOME ในขณะที่บทบาทของ "translator" ถูกเน้นให้เด่นชัดขึ้น เวลาที่มีบั๊กภาษาไทยหรือบั๊กทั่ว ๆ ไป ผมจึงต้องเริ่มต้นสร้างความคุ้นเคยกับทีมงานซึ่งมีการผลัดเปลี่ยนเข้ามาใหม่ ความเสียหายหนึ่งที่เห็นได้คือ ผมได้เสียสิทธิ์ในการเป็น maintainer ของมอดูลภาษาไทยใน GTK+ และ Pango ไปแล้ว (เช่น ตัวอย่างใน GNOME #457086)
    • งานพัฒนาที่ LTN ไม่ว่าจะเป็นเรื่องฟอนต์, libthai และอื่น ๆ ผมจำต้องพักงานเหล่านี้ตามจังหวะ string freeze ของ GNOME ซึ่งเท่ากับว่า ผมมีเวลาในช่วง 3-4 เดือนเท่านั้นในการทำงานทุกอย่าง รวมถึงงานต่าง ๆ นอก LTN ด้วย (เช่น งานใน Debian, Mozilla) ก่อนที่จะมาอุทิศให้กับงานแปล ทำให้งานพัฒนาเหล่านั้นทำได้ไม่เต็มเม็ดเต็มหน่วยนัก
    • กระบวนการสมัครเป็น Debien Developer มีบางจังหวะที่ได้รับข้อสอบมาในช่วงที่ GNOME กำลัง string freeze ทำให้ผมต้องแจ้งชะลอการทำข้อสอบออกไป เปิดโอกาสให้ Application Manager ของผมไปทำการสอบผู้สมัครคนอื่นไปก่อน แล้วก็รอจนถึงรอบที่เขาว่างอีกทีถึงกลับมาตรวจข้อสอบผม ทำให้กระบวนการต้องยืดเยื้อออกไปเป็นปี
    • งานรับจ้างต่าง ๆ การทำงานอิสระนั้น ไม่ได้อิสระทุกอย่าง สุดท้ายก็ยังมีเรื่องที่ควบคุมไม่ได้ ผมเคยพูดถึง "ฤดูงานเข้า" บ่อย ๆ ซึ่งมักจะมาพ้องกับช่วงก่อน GNOME ออกรุ่นเสมอ ๆ ทำให้จัดตารางงานได้ลำบากในช่วงนี้.. ผมแอบคิดว่า มันต้องไม่บังเอิญแน่ ๆ ที่ทุกอย่างมาประดังพร้อมกันอย่างมีจังหวะ อย่างน้อย รอบการออกรุ่นของสองอย่าง คือ GNOME และ Ubuntu ก็น่าจะมีอิทธิพลไม่มากก็น้อย หรือไม่ ก็อาจจะอยู่ในช่วงจบไตรมาส ซึ่งเป็นจังหวะของธุรกิจก็ได้ ซึ่งถ้าผมเป็นอิสระจากงานแปลมากกว่านี้ ก็อาจจัดการอะไร ๆ ได้ง่ายเข้า งานต่าง ๆ บางงานนั้น เกี่ยวข้องกับงานพัฒนา FOSS เสียด้วยสิ
  • ประโยชน์ที่ได้จากงานแปล ผมยังคงเชื่อว่างานแปลนั้นมีผู้ใช้ประโยชน์ แม้จะไปได้ยินเสียงบ่นต่าง ๆ ว่า "แปลไปทำไม ใคร ๆ ก็ใช้เมนูอังกฤษ" (ลองอ่าน คำอธิบายของ mk เขาเขียนไว้ยาวแล้ว รวมทั้ง เหตุผลที่ผมเข้าร่วมงานแปล ด้วย) เพียงแต่ภาระต่าง ๆ มันหนักเกินไปสำหรับคนตัวเล็ก ๆ อย่างผมจะทำโดยลำพังได้ งานแปลนั้นสำคัญ แต่งานอื่นก็สำคัญไม่แพ้กัน

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

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

ป้ายกำกับ: , ,

22 กุมภาพันธ์ 2552

Pegu

เมื่อปีกลาย ผมได้ blog ไว้เกี่ยวกับ ประวัติศาสตร์พม่าที่เกี่ยวเนื่องกับเรื่องผู้ชนะสิบทิศ โดยค้างเติ่งไว้แต่ตอนแรก สรุปถึงเรื่องราวเพียงคร่าว ๆ ของศูนย์อำนาจต่าง ๆ ของดินแดนพม่า และการเปลี่ยนแปลงในยุคนั้น ส่วนตอนที่สองนั้น เขียนค้างไว้ยังไม่เสร็จ แต่แล้วก็สูญหายไปกับฮาร์ดดิสก์ที่พังไป ทีแรกว่าจะเลิกเขียนไปเลย แต่ก็ไปเจอ blog ของคุณ angeduriz เกี่ยวกับ ตะเลง มอญ รามัญ แล้วก็ รายงานของเธอ เกี่ยวกับเรื่องประวัติของมอญในยุคเริ่มต้น (เป็นภาษาฝรั่งเศส ถ้าคนไม่รู้ภาษาฝรั่งเศสอย่างผมจะพยายามอ่าน ก็คงอ่านจาก google translator) ทำให้เกิดสนใจอยากหยิบมาเขียนใหม่ รายละเอียดคงไม่มากเท่าฉบับร่างเดิมที่เขียนตอนที่ยังสดใหม่อยู่ แต่ก็อาศัยโน้ตย่อที่จดไว้ในกระดาษมาเป็นโครงได้

รายงานของคุณ angeduriz นั้น เกี่ยวกับเรื่องของมอญในยุคเริ่มแรก และตอนที่สองที่ผมร่างไว้ ก็เริ่มจากเรื่องของหงสาวดีของมอญก่อนพอดี แต่จะเป็นยุคปลายคริสตศตวรรษที่ 13 ซึ่งก็คงไม่ซ้ำซ้อนอะไรกัน แต่เพื่อความต่อเนื่อง ก็ขอเท้าความสักนิด เกี่ยวกับมอญในยุคแรก ๆ

มอญถือเป็นชนชาติแรก ๆ ที่ตั้งถิ่นฐานในดินแดนสุวรรณภูมิ ในชื่อของอาณาจักรสุธรรมวดี หรือ สะเทิม (Thaton) โดยมีศูนย์กลางอยู่ที่หงสาวดี (Hanthawaddy) หรือพะโค (Pegu หรือ Bago) มอญเป็นศูนย์กลางของพุทธศาสนานิกายเถรวาทในดินแดนสุวรรณภูมิมาตั้งแต่แรก โดยไม่มีการผ่านวัฒนธรรมฮินดูและพุทธมหายานเหมือนชนชาติอื่น ๆ ในภูมิภาคเลย จวบจนปัจจุบัน ต่อมา เมื่อชนชาติพม่าเริ่มเข้ามาสู่ดินแดนแถบนี้ และตั้งอาณาจักรพุกาม (Pagan) แทนที่อาณาจักรศรีเกษตรหรือพยู (Pyu) ในแถบพม่าตอนเหนือ พระเจ้าอนิรุทธ์ หรือ อโนรธา (Anawrahta) แห่งพุกามได้ยกลงมาตีสะเทิมแตก และมอญก็ตกอยู่ใต้อำนาจของพุกาม จนกระทั่งพุกามถูกมองโกลรุกรานบ้าง ทำให้อำนาจของพุกามเรื่อมเสื่อมสลาย มอญจึงเริ่มแยกตัวเป็นอิสระได้ โดยเป็นจุดตั้งต้นของราชวงศ์มะกะโท อันเป็นยุคที่เกิดเรื่องราวของเรื่องราชาธิราช จนกระทั่งถูกชนชาติพม่าปราบลงอีกครั้งในเรื่องผู้ชนะสิบทิศนี่เอง

อ่านเพิ่มเติมเรื่องของหงสาวดียุคต้นได้จากบทความ มอญ: ชนชาติบนแผ่นดินสุวรรณภูมิ ที่เว็บ MonStudies.com ซึ่งคัดลอกมาจากเว็บบ้านจอมยุทธอีกที (ต้นฉบับไม่อยู่แล้ว)

ฉะนั้น ข้อมูลประกอบของฝ่ายมอญสำหรับวรรณกรรมทั้งสอง จึงเริ่มจากเรื่องของพระเจ้าฟ้ารั่ว (Wareru) หรือมะกะโทนี่เอง และไปสิ้นสุดที่สมัยของพระเจ้าสการะวุตพี (Takayutpi) ซึ่งถูกพระเจ้าตะเบงชะเวตี้ (Tabinshweti) ปราบในเรื่องผู้ชนะสิบทิศ

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

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

ตรงนี้เป็นการอ้างประวัติศาสตร์โดยย่อของเมืองหงสาวดีตลอดราชวงศ์มะกะโทภายในย่อหน้าเดียว โดยอ้างถึงเรื่องของพระเจ้าราชาธิราชมังสุระมณีจักรนิดหน่อย ซึ่งสามารถขยายความได้ดังนี้

พระเจ้าฟ้ารั่ว (Wareru) หรือ มะกะโท ในเรื่องราชาธิราชระบุว่า เดิมเป็นพ่อค้าชาวเมาะตะมะ (Martaban) ได้ไปทำการค้าถึงสุโขทัยและได้ทำราชการกับพระร่วงเจ้าเป็นนายกองเลี้ยงช้าง ต่อมาได้พาพระธิดาพระร่วงหนีกลับมาเมาะตะมะ และวางแผนกำจัด "อลิมามาง" (Aleimma) พม่าผู้ครองเมืองเมาะตะมะในขณะนั้น แล้วตั้งตนเป็นอิสระจากพม่า ปราบดาภิเษกขึ้นเป็นกษัตริย์มอญที่เมาะตะมะ โดยได้รับพระราชทานพระนามจากพระร่วงว่า "พระเจ้าฟ้ารั่ว" (Wareru)

พระเจ้าฟ้ารั่ว ได้ทำการต่อต้านพม่าร่วมกับ Tarabya แห่งเมืองพะโค โดยต่างได้อภิเษกกับธิดาของอีกฝ่ายหนึ่งด้วย แต่หลังจากขับไล่พม่าออกไปได้แล้ว Tarabya กลับวางแผนลอบสังหารพระเจ้าฟ้ารั่ว แต่ไม่สำเร็จ หลังการสัประยุทธ์กัน พระเจ้าฟ้ารั่วจับตัว Tarabya ได้ แต่ปล่อยตัวไปหลังจากพระรูปหนึ่งได้ขอชีวิตไว้ แต่ต่อมา Tarabya ก็ยังวางแผนลอบสังหารพระเจ้าฟ้ารั่วซ้ำอีก แต่ชายาซึ่งเป็นธิดาพระเจ้าฟ้ารั่วได้เตือนบิดาเสียก่อน Tayabya จึงถูกประหารชีวิต พระเจ้าฟ้ารั่วจึงปกครองเมืองมอญแต่ผู้เดียวตั้งแต่นั้นมา

พระเจ้าฟ้ารั่ว ถูกลอบสังหารในที่สุด โดยลูก ๆ ของ Tarabya โดยหลังจากลอบสังหารเสร็จก็พากันหนีออกบวช แต่ก็ถูกเหล่าขุนนางจับสึกเพื่อสำเร็จโทษ แล้วถวายราชบัลลังก์ให้อนุชาของพระเจ้าฟ้ารั่วสืบต่อ โดยในช่วงนี้ อาณาจักรมอญได้ปกครองลงไปถึงทวาย (Tavoy)

แผ่นดินมอญช่วงนี้มีเหตุไม่สงบอยู่ตลอดเวลา มีการผลัดแผ่นดินบ่อย ถ้าหักลบปีที่พินยาอูขึ้นครองราชย์ กับปีที่พระเจ้าฟ้ารั่วสิ้นพระชนม์ ก็ห่างกัน 57 ปี และในผู้ชนะสิบทิศอ้างว่าช่วงนี้มีกษัตริย์สืบทอดถึงหกชั่วกษัตริย์ เฉลี่ยตกแผ่นดินละไม่เกินสิบปี ก็นับว่าวุ่นวายเอาการอยู่

พินยาอู (Binnya U) ขับไล่พวกกบฏออกไปพ้นจากแผ่นดินได้ แต่ต่อมาอีก 10 ปี ก็เกิดกบฏขึ้นอีกโดยคนในราชสำนักร่วมกับเจ้าเชียงใหม่ พินยาอูซื้อใจเจ้าเชียงใหม่ด้วยการอภิเษกธิดาให้ แต่ก็ยังไม่สามารถกู้เมืองเมาะตะมะคืนมาจากกบฏได้ ทำให้ต้องไปอยู่ที่ Donwun (ตองหวุ่น?) เป็นเวลา 6 ปี ก่อนที่จะถูกพวกกบฏรุกเข้ามาอีก พินยาอูต้องหนีไปที่พะโค แล้วซ่อมกำแพงเมือง ตั้งมั่นอยู่ที่นั่น ก่อนที่จะเจรจาสงบศึกกับพวกกบฏได้ และไปนำตัวธิดากลับจากเชียงใหม่ เนื่องจากไม่ได้รับการใส่ใจเท่าที่ควร ดังนั้น หงสาวดีหรือพะโคซึ่งเคยเป็นเมืองหลวงเก่าของสุธรรมวดี จึงกลับมาเป็นเมืองหลวงของมอญอีกครั้งนับตั้งแต่บัดนั้น

พอก่อน เอาลง blog เลยละกัน ถ้ารอให้เขียนเสร็จจริง ๆ คงจะยาวเกินไป และอาจไม่มีโอกาสได้ลง blog เลยเหมือนร่างฉบับก่อน ไว้โอกาสหน้านึกอยากเขียนค่อยเขียนต่อที่เรื่องของมังสุระมณีจักร พระเจ้าราชาธิราช

อ้างอิง:

G. E. Harvey. History of Burma. Frank Cass & Co. Ltd., 1967.

ป้ายกำกับ: , ,

The God-Damned Bike Week

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

นี่มันก็มาอีกแล้วครับ หลังจากที่มาอาละวาดตอนกลางวันไปบ้างแล้ว เมื่อคืนนี้ก็เป็นเหมือนปีกลายอีก เดี๋ยวฝูงใหญ่ เดี๋ยวฝูงเล็ก รบกวนการพักผ่อนของชาวบ้าน เมื่อคืนผมเลยอดนอนทั้งคืน เพราะสะดุ้งตื่นกับเสียงมอเตอร์ไซค์นรกนี้

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

ปีนี้ ผมคงจะไม่สามารถพึ่งพาใครได้อีก ก็คงได้แต่เขียนบันทึกบ่นไว้ที่นี้

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

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

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

ป้ายกำกับ: ,

19 กุมภาพันธ์ 2552

GNOME 2.26 Translation Begins

GNOME 2.25.91 (2.26 beta 1) ออกแล้ว อันเป็นการเข้าสู่ช่วง string freeze เพื่อให้นักแปลสามารถทำงานได้เต็มที่ ก่อนที่จะออก GNOME 2.26 ตัวจริงในอีก 1 เดือนข้างหน้า (ตาม กำหนดการ)

พ่อแม่พี่น้องที่รู้สึกว่าหงุดหงิดกับคำแปลของ GNOME อยากปรับให้ได้อย่างใจ หรือไม่ได้หงุดหงิด แต่อยากได้ GNOME ที่แปลไทยสมบูรณ์ หรือไม่ได้อยากได้ฉบับแปลสมบูรณ์ แค่อยากแปลเอามัน ก็ ขอเชิญ ครับ

ป้ายกำกับ: ,

16 กุมภาพันธ์ 2552

On Rubik's Cube Solutions

blog ควันหลงจากการพักผ่อนวันอาทิตย์ครับ..

ใคร ๆ ก็เล่นรูบิกกัน ผมมีรูบิกลูกหนึ่งที่บ้าน มีคนให้มานานแล้ว ก็ไม่ได้ไปแตะต้องมัน จนน้องชายมากระตุ้น จนตอนนี้ท่าทางจะเหลือผมบ้าอยู่คนเดียวในบ้านละ

วิธีมาตรฐานของรูบิก ก็คงไม่พ้น วิธี ของ Jessica Fridrich ที่เรียกว่า CFOP แต่จนป่านนี้ ผมยังไม่สามารถทำได้ เพราะมัวแต่ไปสนใจวิธีอื่นที่น่าสนใจกว่าสำหรับผม

ผมเป็นประเภทขี้เกียจท่องจำน่ะ วิธีของ Fridrich จะต้องจำสูตรมากมายในขั้นสุดท้าย พอไปเจอวิธีที่ง่ายกว่า อาศัยความเข้าใจมากกว่าท่องจำ ก็เลยไม่เคยกลับมาหัด CFOP อีกเลย ในแง่หนึ่ง การท่องจำสูตรอาจช่วยลดขั้นตอนได้เยอะ แต่ผมก็พอใจที่จะทำในทางที่ตัวเองถนัด และจำติดหัวได้นาน แม้จะใช้เวลาแก้มากกว่าก็ตาม

ผมทดลองวิธีต่าง ๆ ไปมาพอสมควร แต่แล้วก็พบว่า วิธีของ Mark Jeays จะกลายเป็นวิธียืนพื้นสำหรับผมเสมอ ๆ สามารถปรับวิธีของคนอื่นมาใช้ได้ตลอด โดยวิธีนี้ แบ่งออกได้เป็น 4 ขั้นใหญ่ ๆ คือ

  1. Solve (F2L - 2) โดยไม่ต้องทำ F2L (First-2-Layers) ให้ครบ แต่เว้นไว้มุมหนึ่ง ซึ่งประกอบด้วย 2 ชิ้น ขอบหนึ่ง มุมหนึ่ง เอาไว้เป็น /tmp
  2. Solve (Last Layer Edges + 1) โดยวางชิ้นขอบ 5 ชิ้นที่เหลือของชั้นสุดท้าย และของชั้นกลางที่เว้นไว้ ให้ถูกตำแหน่ง โดยใช้ /tmp ที่เว้นไว้นั้นให้เป็นประโยชน์
  3. Permute (Last Layer Corners + 1) โดยวางมุมของชั้นสุดท้าย และของชั้นล่างที่เว้นไว้ ให้ถูกตำแหน่ง แต่ไม่จำเป็นต้องหันถูกด้าน เป็นขั้นแรกที่มีสูตรให้จำ แต่ก็ไม่ซับซ้อนเกินไป
  4. Orient (Last Layer Corners + 1) โดยหันด้านของมุมทั้งห้าที่ถูกตำแหน่งจากขั้นที่แล้วให้ถูกด้าน ขั้นนี้มีสูตรเหมือนกัน แต่ปรากฏว่าเป็นสูตรที่ดัดแปลงมาจากสูตรของขั้นที่แล้ว ผมเลยถือว่ามีสูตรแค่ชุดเดียวให้จำสำหรับวิธีของ Jeays นี้!

สำหรับการดัดแปลงสูตรอื่นมาใช้กับวิธีของ Jeays เนื่องจากวิธีการต่าง ๆ มักจะทำ F2L จนครบหมด แล้วสูตรของชั้นสุดท้ายก็จะซับซ้อนเหมือนกันหมด ฉะนั้น การปรับมาใช้กับวิธีนี้ ส่วนมากเลยปรับใช้กับแค่ขั้นแรก คือ (F2L - 2) เท่านั้น ยกเว้นวิธีที่มาทางใช้กระบวนท่าน้อยด้วยกัน ถึงจะปรับใช้กับขั้นท้าย ๆ ได้

วิธีต่าง ๆ ที่ผมได้ใช้ในขั้น (F2L - 2):

  • มั่ว โดยทำหน้าแรกแบบไม่มีสูตร แล้วใช้สูตรหมุนชิ้นขอบ 90 องศามาทำชั้นกลาง อันนี้เริ่มจากทำหน้าแรกได้เอง แล้วไปต่อไม่ถูก เลยหาสูตรทำชั้นกลางมาเพิ่ม
  • วิธีที่สอนที่ Rubiks.com (วีดิทัศน์) โดยทำกากบาท ตามด้วยมุมของชั้นแรก แล้วใช้สูตรหมุนชิ้นขอบ 90 องศาทำขอบชั้นกลาง เป็นวิธีที่สอนกันโดยทั่วไปนั่นแล เพียงแต่เมื่อใช้กับวิธีของ Jeays การเว้นไว้แถวหนึ่งทำให้ไม่ต้องเสียเวลากับขอบชิ้นสุดท้ายที่บางทีวางถูกที่แต่สลับหน้าซะงั้น ผมใช้วิธีนี้อยู่นานเหมือนกัน
  • วิธีของ Lars Petrus เป็นวิธีที่ไม่ได้เริ่มจากกากบาท แต่เริ่มจากมุม 2x2x2 แล้วขยายเป็น 2x2x3 แล้วไปหมุนที่ชั้นเปลือกรูปตัว V ที่เหลือเพื่อทำ F2L ขั้นสุดท้ายให้เป็น 2x3x3 แต่แน่นอนว่าผมเว้นไว้แถวหนึ่ง ทำให้ในขั้นนี้ไม่ต้องพยายามแยกแยะ good edge, bad edge ให้ครบ เอาแค่ 2 edge ที่จำเป็นก็พอแล้ว วิธีของ Lars Petrus เขาบอกว่าเป็นวิธี non-destructive คือทำแล้วไม่ต้องไปพังของเดิมชั่วคราวเพื่อทำกลับใหม่ แต่ปรากฏว่าเป็นวิธีที่ต้องตาไวมาก ๆ และต้องคอยจำบริเวณที่ทำไปแล้วให้ดี อย่าไปพังมัน ที่ต้องจำเพราะมุมที่เลือกอาจไม่ซ้ำกันในแต่ละครั้ง ไม่เหมือนการทำกากบาทในวิธีอื่นที่ตำแหน่งค่อนข้างตายตัว อีกทั้งบริเวณที่ทำจะซิกแซ็กไปมา ถ้าไม่คล่องเรื่องมองภาพสามมิติจะลำบากพอสมควร แต่ก็นับเป็นวิธีที่น่าสนใจวิธีหนึ่ง
  • วิธีของ Jeays เอง หลังจากไปลองวิธีอื่น ก็กลับมาดูที่วิธีของครูบ้าง ปรากฏว่า ไม่ต้องจำสูตรอะไรเลย แม้แต่สูตรหมุนชิ้นขอบ 90 องศา เพราะการมี /tmp ทำให้ทุกอย่างง่ายดาย ไม่ต้องกลัวทำของเดิมพัง นี่ถ้าผมได้ทำวิธีนี้ก่อน ผมคงจะไม่ได้จำสูตรอะไรเลยอย่างแท้จริง
  • วิธีของ Fridrich (hint) และแล้วก็กลับมาหาวิธีของต้นตำรับอีกครั้งอย่างไม่ตั้งใจ ซึ่งวิธีนี้หลังจากทำกากบาทแล้ว จะทำ F2L ด้วยการจับชิ้นขอบและชิ้นมุมมาลงที่มุมทีละคู่ โดยไม่ได้แยกขั้นตอนระหว่างมุมกับขอบ วิธีนี้มีอธิบายเป็นภาษาไทยอยู่ที่ Thailandcube.com (อ่านยากนิดหนึ่ง น้ำเยอะไปหน่อย ต้องใช้ตะเกียบควานหาเนื้อเอา) ก็เป็นวิธีที่น่าสนใจ ในแง่ที่น่าจะลดขั้นตอนได้เยอะ เป็นวิธีล่าสุดที่ผมกำลังลองฝึกอยู่

ส่วนขั้นถัด ๆ มาของวิธี Jeays นั้น เนื่องจากเป็นการใช้ความเข้าใจเป็นหลัก จึงไม่ค่อยจำเป็นต้องหาสูตร และเนื่องจากเป็นการแตกแขนงออกไปจากวิธีอื่น จึงไม่ค่อยมีสูตรมาปรับใช้ แต่ก็ไม่ใช่ไม่มี เพราะผมไปเจอวิธีหนึ่งที่แนวทางคล้ายกัน คือไม่เน้นกระบวนท่า เป็น วิธีของ Phillp Marshall

วิธีของ Marshall มีสูตรเพียง 2 สูตรเท่านั้น สูตรหนึ่ง ใช้ทำขอบ อีกสูตรหนึ่ง ใช้ทำมุม เป็นวิธีที่สูตรน้อยก็จริง แต่ต้องอาศัยจินตนาการสามมิติค่อนข้างมาก ผมไม่ได้หัดทั้งกระบวนการ แต่ปรากฏว่า สูตรมุมที่แสนเรียบง่ายของเขา สามารถเอามาลดขั้นตอนในวิธีของ Jeays ได้อย่างเหมาะเจาะ!

ในขั้น Permute (Last Edge Corners + 1) นั้น ถ้าทำตามวิธีของ Jeays จะต้องสลับชิ้นมุมทีละคู่ จนกว่าจะวางตำแหน่งถูกทั้งหมด แต่ถ้าใช้สูตรมุมของ Marshall ประกอบ จะเหลือการสลับที่จำเป็นอย่างมาก 2 ครั้งเท่านั้น และบ่อยครั้งที่สลับแค่ครั้งเดียวก็พอ ที่เหลือใช้สูตรมุมของ Marshall มาหมุนชิ้นมุมทีเดียว 3 ชิ้นลงล็อคเป๊ะ!

และทั้งหมดนี้ คือวิธีที่ผมใช้แก้ Rubik's cube ในปัจจุบัน โดยที่ยังทำ CFOP ไม่สำเร็จเลยสักครั้ง..

เวลาที่ใช้.. คงไม่เร็วอะไรมากมายครับ ติดแหง็กอยู่ที่ 2 นาทีมานานแล้ว ที่เล่ามาทั้งหมด ก็เพื่อจะบอกว่า ผมสนุกกับ approach มากกว่า performance แต่ก็พยายามปรับปรุง performance ด้วย approach (ที่ลดการท่องจำให้เหลือน้อยที่สุด) ด้วยเหมือนกัน

จอมยุทธ์ท่านได้มีข้อชี้แนะโปรดอย่าช้า

อ้อ.. รูปประกอบใน blog สร้างเอาเองด้วยโปรแกรม Wings 3d บน Debian ครับ หลังจากที่พยายามอยู่ทั้งวันกับ Blender โดยไม่ประสบความสำเร็จ คิดว่าถ้าทำ texture บน Blender ได้สำเร็จ คงงามกว่านี้เยอะ :-P

ป้ายกำกับ: ,

14 กุมภาพันธ์ 2552

Let's Celebrate

Geek Hero Comic's 1234567890

xkcd's Happy Valentine's Day

(ไม่เคยผิดหวังกับความ geek ของ xkcd จริง ๆ)

แล้วก็.. apt-get dist-upgrade เช้านี้ เริ่มมีแพกเกจจาก experimental เข้ามาที่ unstable แล้ว รอแต่ประกาศ Lenny release วันนี้ (ตามเวลาสากล ซึ่งอาจเลยไปถึงพรุ่งนี้ตามเวลาบ้านเรา) เท่านั้น

Lenny ออก ต้องฉลอง ไม่ใช่ว่ารอใช้ Lenny แต่รอให้ Sid กลับมาอาละวาดเหมือนเก่าต่างหาก แล้วผมก็จะได้ใช้ซอฟต์แวร์รุ่นใหม่ล่าสุดอีกครั้ง ในระหว่างฟูมฟัก Squeeze

ความจริง Debian ไม่ต้อง release เลยจะดีที่สุดนะ ออกทุกปีครึ่งผมว่ายังนานไม่พอ infinity เลยจะมีความสุขมาก จะได้ใช้ Sid ที่ "release early, release often" อย่างแท้จริงตลอดไป :-)

/me สนับสนุน CUT อีกครั้ง

ป้ายกำกับ:

12 กุมภาพันธ์ 2552

Recent Changes to Blog Template

ไม่ได้ปรับ template ของ blog มานานมาก ยังไม่ขยันพอจะเปลี่ยน theme ครับ แต่ปรับเนื้อหารอบ ๆ เสียหน่อย การเปลี่ยนแปลงในช่วงเร็ว ๆ นี้ก็มี:

  • เพิ่ม google custom search ซึ่งไม่ได้ค้นเฉพาะ blog นี้ แต่ได้ปรับไว้ให้เหมาะสำหรับผู้ใช้ Debian/Ubuntu และลินุกซ์โดยทั่วไป เน้นหาจากเว็บภาษาไทยก่อน แต่ก็รวมเว็บภาษาอังกฤษด้วย ลองใช้บริการกันได้ครับ ผมไม่ได้ค่าโฆษณาใด ๆ นอกจากคุณจะคลิกโฆษณาในผลการค้นหา
  • เก็บกวาด dead link ไปยังบล็อกของเพื่อน ๆ ที่ได้ลบบล็อกทิ้งไปแล้ว และได้พบว่าบางคนที่หายหน้าไปนาน อย่างเช่น SF-Alpha ก็ยังคงเขียนบล็อกอยู่! หรือจะเป็นคุณ Donga ที่มักจะเจอทางเมลหรือทางอื่นมากกว่า ก็ยังบล็อกอยู่เช่นกัน
  • เพิ่มลิงก์ไปยังบล็อกของเพื่อนบางคนเท่าที่นึกได้ ไว้เดี๋ยวทยอยเพิ่มอีกครับ
  • เพิ่มลิงก์ไปที่ Boolim Blog กับ Longdo Blog ที่เขียนกันเป็นทีมด้วย (แต่ละทีมนี่ ผมแจมแค่นิดหน่อยเอง)
  • เพิ่ม Ubuntuclub และ Debianclub ในลิงก์เว็บข่าวลินุกซ์ (ไม่ได้เก็บกวาดนานขนาดไหน ดูได้จากอายุของเว็บทั้งสองนี้ :-P)
  • เพิ่มการประกาศไลเซนส์ของบทความใน blog โดยใช้ Creative Commons แบบ Attribution + Share-Alike 3.0 เพื่อความชัดเจนในเจตนาการแบ่งปัน

ไว้ว่าง ๆ ค่อยมาปรับต่อ..

ป้ายกำกับ: ,

Writing Weeks

พักนี้รู้สึกตัวเองขยันเขียนเป็นพิเศษ นอกจากเรื่อง Red Cliff 2 ที่ blog นี้ ก็ยังมีบทความที่อื่นอีก:

มีบางเรื่องจะเขียนเพิ่มอีก แต่พักไว้ก่อน คิดว่าช่วงนี้ งานแปล GNOME 2.26 (รวมทั้ง help) สำคัญกว่า

ปล. ขยันเขียน แต่ปรากฏว่าขี้เกียจถ่ายรูปอย่างมาก หลังจากที่รูปถ่ายหายไปทั้งกระบิกับฮาร์ดดิสก์ที่เจ๊งไป.. รอ build อารมณ์ + แรงบันดาลใจใหม่ครับ

ป้ายกำกับ: , , ,

08 กุมภาพันธ์ 2552

Red Cliff 2

ไปดูมาแล้วครับ Red Cliff 2 หลังจาก blog ถึงตอนแรก ไปเยอะแล้ว ตอน 2 เลยเป็นเรื่องเก็บเล็กผสมน้อย

  • โรคระบาด เป็นตัวแปรสำคัญของศึกเซ็กเพ็ก หนังแอบใส่ความว่าเป็นอาวุธชีวภาพของโจโฉ ดูเหมือนคนเขียนมังกรอหังการ์ หมาป่าคะนองศึก ก็คิดคล้ายกัน ว่าเป็นฝีมือมนุษย์ (ชงต๊ะ) แต่คนทัพโจโฉก็ติดโรคด้วย ปล่อยอาวุธยังไงหว่า โดยความเห็นส่วนตัว คิดว่าเป็นไปได้ยากที่จะปล่อยเชื้อโรคในแม่น้ำแยงซีเกียงที่กว้างใหญ่และเชี่ยวกรากอย่างนั้น และข้อเท็จจริงตามที่เล่าชวนหัวบอกคือ โรคพยาธิปากขอเป็นโรคประจำถิ่นของบริเวณลุ่มน้ำแยงซีเกียง แม้ทุกวันนี้
  • แทรกบทผู้หญิงเยอะมาก ทั้งน้องสาวซุนกวนที่แฝงตัวไปเป็นสายลับ ทั้งเสี่ยวเกี้ยวที่เข้าไปเกลี้ยกล่อมและถ่วงเวลาโจโฉ โดยบทบาทของเสี่ยวเกี้ยวช่วยเน้นบุคลิกส่วนที่อ่อนไหวของโจโฉออกมา
  • ใช้บทกวีของโจโฉมาเดินเรื่อง โดยเลือกเอา "เพลงแกล้มสุรา" ซึ่งบ่งบอกปณิธานของโจโฉได้เป็นอย่างดี ขอคัดสำนวนแปลของ โชติช่วง นาดอน จากหนังสือ "เงาพระจันทร์ในคมกระบี่":
    เอาเพลงแกล้มสุราชีวายาวฤๅสั้น
    ก็เพียงน้ำค้างเช้า
    อดีตมากเศร้าร้องร่ำลำนำ
    ตรอมตรำตรึงตรา
    สิ่งผ่อนโศกามีแต่สุราตู้คัง
    อาวรณ์อาลัยสหายเอยข้าห่วงพะว้าพะวัง
    หลั่งรินเพลงในวันนี้
    "อาภรณ์ชุดเขียวตรึงตราฤทัย"
    "สำเนียงกวางฟานไล่หญ้าพงพี
    สหายประเสริฐข้ามีผิวขลุ่ยแลพลิ้วพิณ"
    ความตรมพล่านพลุ่งมิขาด
    ยามใดจักได้
    จันทร์อันใส กระจ่าง
    ข้ารอผู้ข้ามเขาข้ามทุ่งมา
    จักน้อมเสวนา
    สรวลเสพสังสรรค์
    ร่วมรำลึกความหลัง
    เดือนแจ่ม ดาวจาง
    วิหคผกผิน เวียนบินหาคาคบ
    ยังไร้กิ่งใดพำนัก
    ภูเขาฤๅหน่ายสูงทะเลฤๅหน่ายลึก
    เจ้าโจวคายข้าวโลกจึงบังคม
    สำนวน "เจ้าโจวคายข้าว" นี้ หมายถึงโจวกงต้าน หรือ "จิวกง" ในราชวงศ์โจว (จิว) ซึ่งมีความอ่อนน้อมถ่อมตนในการคบหากับผู้มีสติปัญญาความสามารถ ถึงขนาดกำลังกินข้าวอยู่ก็รีบหยุดทันทีเพื่อมารับแขกที่มาขอพบ แม้ตนจะมียศศักดิ์สูงเพียงใดก็ตาม ตรงนี้เองที่โจโฉนำมาเป็นแบบอย่างในอุดมการณ์ของตนที่จะกอบกู้บ้านเมือง
  • ดูเหมือน จอห์น วู จะดักคอคนประเภทผมไว้ด้วย ที่ได้ปรามาสเล่าปี่ที่คอยแต่จะชุบมือเปิบในศึกเซ็กเพ็กนี้ ด้วยการเขียนบทให้เป็นอุบายของจิวยี่ เพื่อจะมาตลบหลังโจโฉในภายหลัง เอาเป็นว่าไม่พูดละเอียดละกัน เผื่อใครยังไม่ได้ดูแต่เผลออ่านมาถึงตรงนี้จะได้ไม่เสียอรรถรสเกินไปนัก :-)
  • เรื่องเรือฟางรับเกาทัณฑ์ยังคงใส่เข้ามา แต่เอามาผูกรวมกับกรณีหลอกฆ่าชัวมอ เตียวอุ๋น ด้วย ก็เป็นการรักษาบรรยากาศการประชันปัญญาระหว่างจิวยี่กับขงเบ้ง แต่ทำได้แนบเนียนขึ้น กลายเป็นว่าจิวยี่ก็ทำทัณฑ์บนไว้ด้วย แล้วก็บังเอิญกรณีหลอกเอาเกาทัณฑ์ก็ไปช่วยเสริมให้โจโฉฆ่าชัวมอ-เตียวอุ๋นด้วย
  • ไม่ผิดหวังที่ไม่มีบทขงเบ้งตั้งปะรำทำพิธีเต๋าเรียกลม แต่เผยข้อมูลกันตรง ๆ เลย ทำให้เรื่องดูสมเหตุสมผล ไม่น้ำเน่าเหมือนฉบับงิ้ว ..นี่คงกลายเป็นโจทย์สำหรับผู้สร้างสามก๊กยุคใหม่ไปแล้ว ที่จะบำบัดความเน่าของสามก๊กฉบับงิ้ว และปรับให้ทุกอย่างสมเหตุสมผลขึ้นด้วยทัศนะของผู้สร้างเอง
  • เทศกาลอะไรสักอย่าง ผมจำชื่อไม่ได้ ที่เป็นการรวมญาติพี่น้อง และมีการกินขนมบัวลอยแบบมีไส้.. แต่ไปค้นข้อมูลแล้ว ใกล้เคียงกับเทศกาลหยวนเซียว (แต้จิ๋ว: ง่วนเซียว) มากที่สุด ซึ่งเป็นเทศกาลประดับโคม วันที่ 15 หลังตรุษจีน ขนมบัวลอยมีไส้นั้น เรียกว่า ถวนหยวน แปลว่า คืนสู่เหย้า อันนี้ไม่แน่ใจว่า จอห์น วู ต้องการแทรกเรื่องประเพณีจีน (ซึ่งบังเอิญอยู่ในช่วงที่หนังออกฉาย คือตรงกับ 9 ก.พ. หรือวันมาฆบูชานี้) หรือมีข้อมูลทางประวัติศาสตร์ ว่าศึกเซ็กเพ็กแตกหักในช่วงเทศกาลนี้
  • กำเหล็งพลีชีพ! มายังไงเนี่ย กะจะให้สามก๊กจบมันตรงนี้เลยหรือ
  • ตอนท้าย จิวยี่และทัพพันธมิตรปล่อยโจโฉไป ในฉบับงิ้วนั้น กวนอูเป็นคนปล่อย จากการดักตีหัวตามทางตามแผนขงเบ้ง แต่ตามประวัติศาสตร์นั้น โจโฉเผาทัพเรือตัวเองเพื่อกำจัดโรคระบาดก่อนถอนทัพกลับเอง.. จะเป็นยังไงก็ตาม แต่จุดประสงค์ของหนังคือ ต้องการให้จิวยี่ทิ้งคำพูดเด็ด "รบแล้วมีใครได้อะไรบ้าง" เมื่อรวมกับที่เสี่ยวเกี้ยวตั้งชื่อลูกในครรภ์ว่า "ผิงอัน" ที่แปลว่า "สงบสุข" และฉากสงครามบ้าระห่ำยืดเยื้อจนเอียน ก็สื่อความมาตลอดเรื่องว่า "หยุดสงครามเถอะ" คือเป็นหนังสงครามเพื่อสันติภาพ

ปิดท้ายด้วย โคลงนำเรื่องสามก๊ก ซึ่งในหนังมอบให้เสี่ยวเกี้ยวเป็นผู้ร่าย..

๏ น้ำแยงซีรี่ไหลสู่บูรพา
คลื่นพัดกวาดพาวีรชนหล่นลับหาย
ถูกผิดแพ้ชนะวัฏจักรเวียนว่างดาย
สิขรยังคงตะวันยังฉายนานเท่านาน

๏ เกาะกลางชลคนตัดฟืนผมขาวเฒ่าหาปลา
สารทวสันต์เห็นมาเหลือหลายที่กรายผ่าน
สังสรรค์สุราป้านใหญ่ให้ตำนาน
เก่าเก่าใหม่ใหม่สรวลสราญเล่ากันมาฯ

๚ะ๛

ป้ายกำกับ: , , , ,

04 กุมภาพันธ์ 2552

GNOME non-source-dir build

แล้วก็มาถึงเรื่อง VPATH build สำหรับ GNOME เสียที ซึ่งก็ปรากฏว่าไม่ได้ง่ายแบบทีเดียวออกเหมือน Mozilla เนื่องจาก GNOME มีแพกเกจแยกย่อย และใช้มอดูลภายนอกประกอบด้วยมากมาย

ถ้าคุณยังไม่มีพื้นฐานเรื่องการใช้ JHBuild ก็มี ชุดบทความภาษาไทย เขียนไว้ที่ GNOME ไทย และสามารถอ่าน คู่มือฉบับล่าสุด จาก GNOME Library ได้ และยังมีข้อมูลบางอย่างที่เป็นประโยชน์ที่ GNOME Live ด้วย

หลังจากตั้งค่า config ต่าง ๆ ของ JHBuild แล้ว ก็สามารถกำหนดให้ JHBuild คอมไพล์โปรแกรมนอก source tree ได้ โดยกำหนดตัวแปร buildroot ใน ~/.jhbuildrc เช่น:

buildroot = os.path.expanduser('~/build/gnome')

แค่นี้แหละ สำหรับการตั้งค่า JHBuild ง่ายมากใช่ไหม? แต่สิ่งที่ตามมานั้น ไม่ได้ง่ายอย่างที่คิด เพราะปรากฏว่ามีหลายมอดูลทีเดียวที่ build นอก source tree ไม่ผ่าน!

นี่น่าจะเป็นเหตุผลที่แฟ้ม sample.jhbuildrc ที่มากับ JHBuild ไม่ได้มีตัวอย่างการตั้ง buildroot เลย หรือในทางกลับกัน อาจเป็นเพราะไม่มีตัวอย่างนี่เอง ที่ทำให้แทบไม่มีใครสนใจจะทดสอบการ build แบบนี้เลย

ไม่เป็นไร ไหน ๆ เราก็มีสิทธิ์ชงเองได้ ในบรรดามอดูลที่ build ไม่ผ่านนั้น สามารถแบ่งได้เป็น 2 พวก:

  1. พวกไม่รองรับ VPATH build เลย ซึ่งส่วนมากเป็นมอดูลภายนอก เช่น samba4, opal, ptlib บางโครงการไม่ใช้ automake หรือแม้กระทั่ง autoconf เลยด้วยซ้ำ
  2. พวกที่รองรับ VPATH build แต่มีข้อผิดพลาดในกฎการ make หรือในซอร์สโค้ด โดยเฉพาะมอดูลที่มีการ generate source ทั้งหลาย

หลังจากอ่านคู่มือ JHBuild ในส่วนที่เกี่ยวกับ Module Set File Syntax ก็พบว่าสามารถกำหนดให้ยกเว้นการ build นอก source tree สำหรับมอดูลที่ไม่รองรับได้ เพียงแต่ module set ปัจจุบันของ JHBuild ยังไม่มีข้อมูลพวกนี้เท่านั้น ก็เลยชงเองซะ โดย file GNOME #569778 เพื่อไล่เติมข้อมูลสำหรับมอดูลที่ไม่รองรับ พร้อมทั้งแก้บั๊กในแพกเกจที่รองรับแต่มีข้อผิดพลาดด้วย

สำหรับแพกเกจที่มีปัญหา ก็ file bug ไปที่แพกเกจนั้น ๆ เป็นรายตัว โดยดูรายชื่อได้จาก dependency ของบั๊กดังกล่าว ตลอด 5 วันที่ผ่านมา ก็ file ไป 15 บั๊ก ปิดไปแล้ว 8 สนุกใช่เล่น เพราะแต่ละบั๊ก ลักษณะปัญหาจะไม่เหมือนกัน ต้องวิเคราะห์ไปตามกรณี ช่วยตัวเองแล้ว ยังได้ contribute ให้ GNOME ไปในตัว

สรุปว่าตอนนี้ก็ build ผ่านไปเกือบหมดแล้วครับ ที่เหลือก็ตามตรวจแก้มอดูลที่เหลือต่อไป และรอเขารับแพตช์

ป้ายกำกับ:

02 กุมภาพันธ์ 2552

VPATH Build

ตอนที่แล้ว build Mozilla นอก source tree ไปแล้ว คราวนี้ก็ถึงตา GNOME บ้าง แต่ก่อนจะเขียนต่อไป ขอกล่าวถึงการ build นอก source tree สักหน่อย เผื่อว่าบางคนจะยังไม่เห็นภาพ

การคอมไพล์โปรแกรมใน ระบบของ GNU นั้น โดยปกติเราอาจจะ configure, make และ make install ในไดเรกทอรีที่เก็บซอร์ส ซึ่งจะสร้างแฟ้ม object ต่าง ๆ ลงในไดเรกทอรีนั้นเลย และถ้าเราต้องการลบแฟ้ม object ดังกล่าวเพื่อให้เหลือแต่ซอร์ส ก็สามารถสั่ง make clean (หรือ make distclean หรือ make maintainer-clean ตามระดับความสะอาดที่ต้องการ รายละเอียดพูดแล้วยาว อ่าน reference ดีกว่า ถ้าสนใจ) แต่ในบางครั้ง เราต้องการจะแตะต้อง source tree น้อยกว่านั้น ด้วยเหตุผลบางประการ เช่น

  • ต้องการรักษาความสะอาดของ source tree อย่างเต็มที่ เพราะในบางกรณี Makefile ที่มีการดัดแปลงเองก็อาจจะ clean ไม่ครบ ทำให้บางครั้งนักพัฒนาไม่เข้าใจปัญหาของผู้ใช้ที่ build ไม่ผ่าน (เช่น ใน GNOME #569977) หรืออาจจะเป็นเหตุผลเรื่องการ backup ข้อมูล โดยไม่ได้ต้องการ backup แฟ้มไบนารีด้วย การ build ลงใน source tree ก็หมายความว่าต้อง clean ให้หมดก่อน backup แล้วในการ build ครั้งต่อไปก็ต้องเริ่ม build ใหม่หมด
  • ต้องการ build โปรแกรมหลายแบบ โดยใช้ configure option ที่ต่างกัน การ build ลงใน source tree ก็หมายความว่า ถ้าจะเปลี่ยน configuration ก็ต้อง configure ใหม่ แล้ว build ใหม่หมด ถ้ามีการเปลี่ยนแปลงซอร์สบางส่วน แล้วต้องการกลับไป build option เดิมใหม่ ก็ต้อง clean option ปัจจุบันก่อนแล้วไป configure ใหม่เช่นกัน ซึ่งไม่สะดวก กรณีของ multi-configuration นี้ที่พบบ่อยสำหรับผม ก็คือการ configure เพื่อ build รุ่นทดสอบในระหว่างพัฒนา กับ configure อีกแบบหนึ่งเพื่อ release และโปรแกรมที่มี configuration option เยอะ แม้แต่รุ่นทดสอบเองก็อาจต้องแยกเป็นหลายแบบ

การ build โปรแกรมนอก source tree ช่วยได้ โดยไปสั่ง build จากไดเรกทอรีอื่น ซึ่งจะอ่านซอร์สจาก source directory แต่เขียนแฟ้ม object ลงในไดเรกทอรีที่ build แทน คุณสามารถสร้างไดเรกทอรีสำหรับ build กี่ชุดก็ได้ โดยแต่ละชุดก็ใช้ configure option ต่าง ๆ กันไป โดยจะไม่มีการแตะต้อง source tree เลย

ตัวอย่างที่ 1: สร้างไดเรกทอรีย่อยใต้ source tree เพื่อ build

$ cd foo-0.1.0
$ mkdir build.debug
$ cd build.debug
$ ../configure --enable-debug
$ make
$ sudo make install

ตัวอย่างที่ 2: สร้างไดเรกทอรี build ข้างนอกต่างหากเลย

$ mkdir -p ~/build/foo.debug
$ cd ~/build/foo.debug
$ ~/src/foo-0.1.0/configure --enable-debug
$ make
$ sudo make install

การ build ลักษณะนี้ เป็นไปได้ด้วยกลไกที่เรียกว่า VPATH ของ make ซึ่ง เอกสารของ GNU make บอกว่ามีมาตั้งแต่ make ของ System V แล้ว เพียงแต่ไม่มีเอกสารอธิบายในตอนนั้น และเริ่มมีการกล่าวถึงเป็นครั้งแรกในเอกสารของ 4.3 BSD โดยอ้างว่าเป็น feature ที่คล้ายกับ VPATH ของ System V

VPATH นี้ เป็นตัวแปรที่มีความหมายพิเศษใน make คือเป็นรายการไดเรกทอรีที่จะค้นหาแฟ้ม ไม่ว่าจะเป็น source หรือ target ในลักษณะเดียวกับตัวแปรสภาพแวดล้อม PATH ของเชลล์ เช่น สมมุติว่ามีการกำหนด:

VPATH = ../src:../includes

จะทำให้กฎที่เขียนแบบนี้:

foo.o: foo.c

มีความหมายประหนึ่งว่าเขียนแบบนี้ด้วยในกรณีที่หา foo.c ไม่เจอในไดเรกทอรีปัจจุบัน:

foo.o: ../src/foo.c

หรือถ้าที่ ../src/foo.c ยังไม่เจออีก ก็จะไปหาที่ ../includes/foo.c ต่อไป

ทีนี้ ถ้าลองเปิด Makefile.in ที่สร้างจาก automake ขึ้นมาดูสักแฟ้ม ก็จะเห็นบรรทัดนี้:

VPATH = @srcdir@

ซึ่งเมื่อเรียก configure เพื่อสร้าง Makefile เทมเพลต @srcdir@ นี้ ก็จะถูกแทนที่ด้วย dirname ของ configure ที่ใส่ในบรรทัดคำสั่ง ตามด้วย subdir ที่ Makefile.in นั้น ๆ อยู่ ผลก็คือ เราเรียก configure โดยอ้างพาธไหน make ก็จะเพิ่มพาธนั้นในการค้นหาซอร์สด้วย ทำให้เราสามารถออกมา build นอก source tree โดยที่ยังสามารถอ่านซอร์สจาก source tree ได้ด้วยประการฉะนี้

ยาวซะแล้ว กลายเป็น blog เรื่อง VPATH build ไปเลย ไว้คราวหน้าค่อยเขียนถึงการ build GNOME ทั้งตัวนอก source tree ละกัน

ป้ายกำกับ: ,

hacker emblem