Pentium III optimized packages

ค้างเรื่อง optimization packages ไว้นาน นั่งหาข้อมูลเพิ่มเติมแล้วก็เจอว่า โปรแกรมที่ optimize ไม่เหมือนกันอาจมี running time ต่างกันได้ถึง 20 – 30% .. เท่าที่รู้คือ default optflag ของ Red Hat/Fedora Core และ TLE ตั้งไว้ที่

-O2 -g -march=i386 -mcpu=i686

ซึ่งมีเสถียรภาพที่ดี และการันตีว่าใช้งานกับซีพียู x86 >= i386 ได้ทุกรุ่น แต่เรื่องประสิทธิภาพยังอัดได้อีกเยอะ อย่างแพ็กเกจที่ผม build ทั้งหมด (*.kit.{i386|i486|i686}.rpm) ตั้ง optflags ไว้ที่

-O3 --march=i386 --mcpu=i686 --pipe --fomit-frame-pointer

ก็จะเร็วขึ้นอีกนิด .. เมื่อวานอยากทำแพ็กเกจสำหรับ Pentium III มาใช้กับ Peorth (P-III 1 GHz) เลยซัด optflag ของ Pentium III ซะเต็มๆ (เอ่อ จะว่าเต็มๆ ก็ไม่ใช่แฮะ จะใส่มากกว่านี้ก็ได้ถ้าจะยอมลดเสถียรภาพ)

-O3 -march=pentium3 -pipe -fomit-frame-pointer
-fforce-addr -falign-functions=4 -fprefetch-loop-arrays

ที่จริงแล้วถ้าขยายออกมาจะยาวกว่านี้ เพราะ flag บางตัวจะ imply ตัวอื่นด้วย เช่น -O3 จะใส่ –finline-functions กับ -frename-registers เป็นต้น .. อุวะ .. ท่าทางเรื่องมันจะยาว ไว้จะเขียนมาให้อ่านอีกที .. กลับมาที่เรื่องแพ็กเกจก่อน เมื่อวานที่ optimize ไปแล้วคือ (ยก src.rpm มาให้ดูละกัน)

freetype-2.1.8-1.bci.1.pentium3.kit.src.rpm
glib2-2.4.5-1.pentium3.kit.src.rpm
gtk2-2.4.4-1.pentium3.kit.src.rpm
libgnome-2.6.1-1.pentium3.kit.src.rpm
metacity-2.8.1-2.1.pentium3.kit.src.rpm
nautilus-2.6.3-1.pentium3.kit.src.rpm
pango-1.4.1-2.pentium3.kit.src.rpm
qt-3.3.3-1.pentium3.kit.src.rpm
xorg-x11-6.7.0-2.1.pentium3.kit.src.rpm

เท่าที่ใช้งานจนถึงตอนนี้เสถียรภาพก็ถือว่า ok ยังไม่เจออะไรแปลกๆ .. ส่วนเรื่องประสิทธิภาพ ยังไม่รู้จะวัดยังไง ไม่มีเครื่องมือเลย .. ที่จริงพยายาม optimize glibc ด้วย แต่ไม่สำเร็จ ได้ binary มาไม่ครบ งงไปเลย (- -‘) .. ถ้า optimize glibc ได้ล่ะก็ ถึงจะใช้ทะเลประสิทธิภาพการทำงานก็ไม่ห่าง Gentoo เท่าไหร่แล้ว :)

หลังจากนี้ก็จะเป็นคิว optimize Athlon XP … ฮุๆๆ

Belldandy upgraded

ระยะหลังเซิร์ฟเวอร์หลัก (belldandy.kitty.in.th) เริ่มมีอาการไม่ค่อยดี วันนี้เลยได้รบกวนให้ทาง ISP ย้ายฮาร์ดดิสก์ มาไว้อีกเครื่องนึงที่ว่างๆ อยู่ .. ตอนนี้ belldandy เปลี่ยนมาใช้เครื่อง P-II 266 MHz เป็นการชั่วคราว ระบบทำงานได้ราบรื่น แต่ปัญหา segfault ยังอยู่เหมือนเดิม memtest หลายรอบแล้วก็ปกติ ซีพียูก็ไม่น่าใช่ ถ้าไม่ใช่ฮาร์ดแวร์ก็เหลือแต่ซอฟต์แวร์แล้วเนี่ยะ .. ยังไง ตอนนี้ต้องทนใช้ไปก่อน พร้อมกับหาสาเหตุไปด้วย

และเพราะเหตุนี้ เมื่อวานเลยสำรองข้อมูลเกือบทั้งหมดไปไว้ที่ขอนแก่น (skuld – mirror/backup ของ kitty.in.th) .. ถ้าเครื่องหลักเจ๊งจริงๆ ก็ยังมีเครื่องสำรองไว้บริการ .. :P

Gaim / Auto Identify with NickServ

หลายคนอาจจะพอทราบแล้วว่าการรับส่ง IM ที่เป็น 8-bit ใน gaim นั้นมีปัญหาเพราะเขา assume ว่า 8-bit เป็น ISO-8859-1 เสมอ .. ผมเคยแฮ็กตรงนี้ไปแล้วโดยให้ assume ตาม locale ของระบบแทน (เช่น th_TH จะเป็น TIS-620) แล้วก็ตรวจสอบผู้รับด้วยว่าสามารถรับ UTF-8 ได้หรือไม่ ถ้าไม่ได้ก็จะส่งข้อความโดย encode ตาม locale เช่นกัน .. ผมส่งแพตช์นี้ไปให้ gaim ตั้งแต่สมัยเวอร์ชัน 0.6 กว่าๆ ทีมพัฒนาเขาเคยปฏิเสธไปทีนึงแล้ว แต่ระยะหลังเริ่มมีคนเจอปัญหาแบบเดียวกันนี้ในภาษาอื่นๆ เลยมีแรงสนับสนุนให้แก้ปัญหามากขึ้น ท้ายที่สุดปัญหาการแสดง IM ที่ยังรับ-ส่งเป็น 8-bit อยู่ก็ได้รับการแก้ไขแล้วใน CVS โดยตั้ง encoding สำหรับการรับส่งข้อความ 8-bit ได้ที่ preferences .. ต่อไปก็ไม่ต้องแพตช์เองแล้ว :D .. (อาจจะได้แพตช์เพื่อตั้ง default encoding เป็น TIS-620 แทน :P)

อีกเรื่องนึง เกี่ยวกับ gaim เหมือนกัน .. ผมใช้ gaim เข้า IRC เป็นประจำ เพราะปกติก็จะ online IM ด้วย gaim ตลอดอยู่แล้ว สำหรับ IRC จะน่ารำคาญนิดหน่อยตอน login เพราะผม register nickname ไว้กับ NickServ ของ irc.freenode.net เวลาเชื่อมเข้าเซิร์ฟเวอร์เลยต้อง identify ตัวเองด้วย .. ทำบ่อยๆ เข้าก็เลยคิดว่าหาวิธีให้มัน identify อัตโนมัติดีกว่า .. ก็พอดีว่า gaim มันสามารถตั้งให้ส่งข้อความเวลามี buddy sign-on, online, ฯลฯ เลยใช้วิธีนี้แหละง่ายดี .. วิธีการก็คือ

  1. เพิ่ม NickServ เข้ามาเป็น buddy ก่อน วิธีที่ง่ายๆ คือส่ง “/msg NickServ help” ไปทีนึง พอ dialog ของ NickServ ปรากฏก็เลือกเมนู Conversation » Add .. ทำตามขึ้นตอนเพิ่ม buddy จนเสร็จ
  2. คลิ๊กขวาที่ชื่อ NickServ ที่ปรากฏใน Buddy List จะปรากฏเมนูขึ้นมา ให้เลือก Add Buddy Pounce แล้ว gaim จะแสดง dialog New Buddy Pounce
  3. ตั้งค่าดังนี้
    • Account: เลือก irc account
    • Buddy Name: NickServ – ถ้าทำตามขั้นตอนมามันควรจะขึ้นเป็น NickServ อยู่แล้ว ก็ไม่ต้องไปแตะมัน
    • Pounce When: เลือก Sign on อย่างเดียว
    • Pounce Action: เลือก Send a message แล้วพิมพ์ข้อความ IDENTIFY ตามด้วยรหัสผ่านที่ใช้
    • เลือก Save this pounce after activate
    • กด Save

ทีนี้เวลาเข้า irc มันก็จะ identify เองอัตโนมัติ ไม่ต้องพิมพ์เองแล้ว :)

Added: gaim 0.82 เพิ่งรีลีสตะกี้ .. account ICQ ตั้ง default encoding ได้แล้ว :)

Some Kernel Trees :P

เมื่อวาน blog เรื่องเคอร์เนลแพตช์ของ mm และ ck ไปแล้ว ยังมีแพตช์เคอร์เนลอีกหลายตัว แต่ละตัวก็ maintain tree ของตัวเอง มีจุดประสงค์ในการใช้ต่างๆ กันไป สรุปมาให้อ่านกัน:

  • aa tree ของ Andrea Arcangeli เน้นเรื่อง VM เป็นหลัก .. aa tree merge เข้าเคอร์เนลตั้งแต่ 2.4.10 .. VM ของเคอร์เนล 2.6 ก็มีพื้นฐานมาจาก aa tree
  • ac tree ของ Alan Cox .. Alan เป็น kernel maintainer ตั้งแต่ปลาย 2.0 2.2 เลยมาถึง 2.4 ช่วงต้นๆ ทุกคนยกย่องให้เป็นมือขวาของ Linus .. หลังวางมือ Alan ก็ยังมีส่วนช่วยงานเคอร์เนลอยู่อย่างต่อเนื่อง โดย maintain ac tree ที่มีฟีเจอร์ใหม่ๆ ที่ไม่อยู่ในวานิลลา .. ac tree ยังนับเป็นการทดสอบ bugfix และฟีเจอร์ ก่อนจะส่งให้ Marcello Tosatti (2.4 kernel maintainer ต่อจาก Alan) อีกทีด้วย .. ac patch หายร่วมปีแล้ว เพราะ Alan หยุดงานเคอร์เนลชั่วคราวไปเรียนต่อด้านบริหาร
  • bk tree เป็น snapshot จากโค้ดล่าสุดที่ merge เข้าเคอร์เนล .. ชื่อ bk มาจาก BitKeeper ซึ่งเป็นซอฟต์แวร์ SCM ที่ใช้ในการจัดการโค้ดของเคอร์เนลทั้งหมด คล้ายๆ CVS, SVN .. ลินุสเลือกใช้ BitKeeper เพราะสะดวกในการจัดการ changeset มากกว่าตัวอื่น .. BitKeeper เป็น commercial software แต่โครงการโอเพนซอร์สใช้งานได้ฟรี (as in free beer)
  • ck tree ของ Con Kolivas .. Con รวบรวมแพตช์เพื่องานเดสก์ท็อป/interactive/low latency เป็นหลัก และยังแฮ็ก scheduling ในเคอร์เนลให้เหมาะกับงานเดสก์ท็อป สมัยนึง ck tree เป็นแพตช์เซ็ตที่ทำงานเร็วกว่าวานิลลาจนรู้สึกได้
  • mm tree ของ Andrew Morton .. ตอนจะรีลีส 2.6 Linus ชวนให้ Andrew มาช่วย maintain kernel แต่ Andrew ก็แบ่งรับแบ่งสู้ สุดท้ายแล้ว Linus เลยเป็นคน maintain อย่างเป็นทางการ ในขณะที่ Andrew ช่วยรวบรวมแพตช์และแยก mm tree ไว้เพื่อให้ทดสอบกันในทำนองเดียวกับ ac tree / 2.4

นอกจาก tree ยอดนิยมข้างบนนี้ ก็ยังมี patch/patchset อีกเยอะนะ :

  • mjb ของ Martin J. Bligh (Scalability)
  • wli ของ William Lee Irwin (VM)
  • lsm ของ Chris Wright (Linux Security Modules)
  • osdl ของ OSDL (database/enterprise-level hacks)
  • dj ของ Dave Jones (I/O AGP)
  • rmap Rik van Riel (reverse mapping vm)

me:

[kitt@peorth web]$ uname -a
Linux peorth.kitty.in.th 2.6.8.1-ck4 #4
Tue Aug 24 21:30:27 ICT 2004 i686 i686 i386 GNU/Linux

Kernel Patches

mm4 patch สำหรับ 2.6.8.1 รีลีสแล้ว เร็วดังคาด .. แพตช์ตัวนี้มี experimental code ชุดใหม่เข้ามา ยังไม่ได้ทดสอบในวงกว้าง ใครอยากทดสอบหรือชอบเสี่ยงก็ ดาวน์โหลด ไปใช้ได้

ck4 patch ของ Con Kolivas รีลีสแล้วเหมือนกัน .. แพตช์/จูนสำหรับเดสก์ท็อปเช่นเคย มีแพตช์ workaround kernel กับ cdrecord ไว้แล้วด้วย ใครใช้งาน CD/DVD Writer เอาแพตช์นี้ไปใช้ก่อนระหว่างรอแก้ไขในเคอร์เนลจริงๆ อีกที ในแพตช์เซ็ตมี Reiser4FS ด้วย ว่ากันว่าเร็วโคตรๆ ..

CK แนะนำว่า เคอร์เนล 2.6 ไม่จำเป็นต้องใช้ kernel preemptible ก็ได้ จะ enable หรือ disable ก็ไม่รู้สึกอะไร เพราะ latency ของ 2.6 ถึงไม่มี preempt ก็ต่ำ(กว่า 2.4)อยู่แล้ว การ enable kernel preemptible อาจจะทำให้โปรแกรมบางโปรแกรมทำงานเพี้ยนอีกด้วย ผมก็เจอบ้างเหมือนกัน เช่น NVIDIA ถ้าภาระงานหนักๆ โมดูลจะทำงานอืดอย่างเห็นได้ชัด ALSA เองก็จะกระตุกๆๆ เท่าที่มีการรายงานบางจังหวะแย่ถึงขนาด latency เกิน 50 msec ก็มี ..

เพื่อแก้ปัญหานี้ Ingo Molnar กับ Arjan van de Ven (@ Red Hat) เสนอโมเดลและแพตช์ชื่อ “Voluntary Kernel Preemption” มาเสริมการทำงานของเคอร์เนล 2.6 .. วิธีการคือดึงเอาจังหวะ might_sleep() ในเคอร์เนลมาใช้ + แก้ไขโค้ด จัด schedule ใหม่ (ผมเดาว่า การใช้ might_sleep() คงเป็นที่มาของคำว่า voluntary – เพราะจุดที่เรียก might_sleep() แปลว่ามันอาสาที่จะ sleep แล้ว) .. การทดสอบ voluntary kernel preemption โดยตัว Ingo เองได้ latency ออกมาไม่ถึง 1 ms แม้จะอัดภาระงานเข้าไปเต็มๆ แล้วก็ตาม .. ตัวเลข 1 msec นี่ถือว่าเทียบเท่าหรืออาจจะดีกว่าเคอร์เนล 2.4 + low latency patch ของ Andrew Morton ที่กลุ่ม Linux Audio นิยมใช้กันเสียอีก :)

อย่างไรก็ตามแฮ็กเกอร์บางคน (i.e., Christoph Hellwig, Andrea Arcangeli) ก็ไม่ค่อยจะเห็นด้วยกับการใช้จังหวะ might_sleep() มา reschedule / preempt เพราะโดยหลักการแล้ว might_sleep() มีนิยามในการทำงานของมันเอง และถ้าจะทำอะไรกับ scheduling ก็มี cond_resched() API ให้ใช้อยู่แล้ว .. Ingo ก็ยอมรับว่ามันมีผลดีผลเสียที่ต้อง tradeoff กันอยู่ ที่เสนอให้ใช้ might_sleep() ก็เพราะมันได้ผลที่ดี ประหยัดกว่า และปลอดภัยกว่า .. จะใช้หรือไม่ก็ตัดสินใจเอาเอง โดยสรุป voluntary kernel preepmtion จะเหมาะกับเครื่องที่ต้องการ latency ต่ำๆ ต้องการการตอบสนองที่ดี เช่น digital audio/video workstation แต่อาจจะไม่เหมาะกับเซิร์ฟเวอร์ที่ต้องการทรูพุตสูงๆ .. voluntary kernel preemption สามารถ enable/disable ขณะที่เครื่องทำงานอยู่ได้ตลอดเวลาผ่านทาง /proc ..

ระหว่างนี้ Ingo กำลังทำแพตช์อีกตัวนึงเพื่อปรับปรุง kernel preemption โดยแพตช์ที่จะออกตามมานี้จะจูน preemption ในระดับ per-task ได้เลย :)

Aowthai: KDE 3.3 released / Kitty Extras: All packages re-linked

วันเสาร์เอา Peorth ไป Acer Service อีกที เปลี่ยนคีย์บอร์ดมาแล้วเรียบร้อย พร้อมกับได้ฮาร์ดดิสก์ 2.5 นิ้ว 20 GB ตัวใหม่มาอีกตัว .. จ่ายค่าช่างไป 800 + 7% บาท .. นะ ประกันสามปี อะไหล่ฟรีตลอดระยะประกันมันก็ดีอย่างนี้นี่เอง :D

อ่าวไทยเพิ่ม KDE 3.3 เข้ามาแล้ว .. apt-get + re-link กันได้ :P

Kitty Extras re-link กับ อ่าวไทยครบแล้ว ฝากทดสอบใช้งานกันหน่อยครับ (เมลมาก็ได้ หรือถ้าสะดวกที่ #tlwg ก็ได้ ผมอยู่ที่นั่นเกือบตลอดเวลาที่ตื่น).. Kitty Extras ชุดนี้ผมตัดแพ็กเกจออกจาก repo ไปหลายตัว เหตุเพราะ maintain ยากเหลือกเกิน บางตัวเปลี่ยนเวอร์ชันทีต้องใช้เวลาแก้ทั้งวันกว่าจะได้ binary rpm เพราะมันเปลี่ยนวิธีการติดตั้งอยู่เรื่อยๆ .. เจอบ่อยๆ เข้าก็เซ็ง เอาเวลาไปทำอย่างอื่นดีกว่า .. ช่วงนี้ todo ค้างบานเลย อยากเอาเวลาไปเขียนหนังสือ บทความ โปรแกรม แฮ็ก ฯลฯ .. เฮ่อ ..

Onamae wa?

Onamae wa 秋本 Akimoto (autumn book) 直樹 Naoki (straight tree)… ลอล.. มีคนเล่าให้ฟังนานแล้วว่ามีเว็บตั้งชื่อภาษาญี่ปุ่น .. เพิ่งได้ลองเล่น หลังอ่าน blog ของ bact’ .. เอาไปเล่นกัน: Name Generator

ไม่ได้เขียนอะไรเข้าห้องทดลองซะนาน วันนี้เพิ่มเรื่อง วิธีตั้งโดเมนภาษาไทย .. ใครมีโดเมน .th ในมือ สนใจก็ลองทำดูได้ครับ :)

สมาชิก #tlwg ได้ลอง KDE 3.3 แล้วบอกว่า ทำงานเร็วกว่า GNOME 2.6 อีก แถมฟีเจอร์เพียบ .. อืมม น่าสนใจ แต่ตอนนี้ก็ได้แต่รออ่านรีวิว จะ emerge มาลองก็กำลังเร่ง build แพ็กเกจอยู่ ไม่อยากกวนซีพียู .. ยังไงผมก็คงไม่ใช้ KDE อยู่ดี :P

.. กำลังสนใจ x86-64 ของ AMD ซึ่งออกชิป 64-bit มาเพียบจนงงไปหมด .. สอบถาม sf-alpha + กูเกิ้ลได้ความว่า ซีพียูตระกูล x86-64 ของ AMD มีสองรุ่นคือ

  • AMD Opteron แยกเป็น Opteron for Server และ Opteron for Workstation และยังแยกออกเป็น 3 series คือ 100 (1-way) 200 (up to 2-way) และ 800 (up to 8-way) .. เมื่อเร็วๆ นี้เพิ่งได้อ่าน ผลเปรียบเทียบประสิทธิภาพของ Opteron 150 กับ Xeon 3.6 GHz บนลินุกซ์ ผลคือ Opteron 150 กิน Xeon เกือบทุกรายการที่ทดสอบ .. ก็นะ .. ของมันแรง :P
  • AMD Athlon 64 ประกอบด้วย Athlon 64 สำหรับเครื่องเดสก์ท็อป Mobile Athlon 64 สำหรับโน้ตบุ๊ค และ Athlon 64 FX ออกมาชน Extreme Edition ของ Intel สำหรับเดสก์ท็อประดับ hi-end desktop เกมส์ ฯลฯ ..

ทั้งหมดนี่ที่พอจะหาได้ในบ้านเราก็มี Athlon 64 3000+ หรือ 3200+ ตัวละหมื่นกว่าบาท .. ส่วนเมนบอร์ดก็ราวๆ หกพัน สรุปว่า จะใช้ 64 บิตตอนนี้ ต่อให้มีตังค์ก็ไม่ได้หาซื้อกันได้ง่ายๆ นัก .. รออีกสักพัก เก็บตังค์ไปด้วย :P

นักกีฬาไทยได้เหรียญทองที่สองในโอลิมปิก :D

Setting Up Thai Domain Names

ไม่นานมานี้ THNIC เปิดบริการโดเมนเนมภาษาไทยฟรีให้กับเจ้าของโดเมน .th ทั้งหมดโดยที่ THNIC ให้ขอชื่อโดเมนภาษาไทยสำหรับโดเมนภาษาอังกฤษที่จดไว้กับ THNIC แล้ว หากผ่านการพิจารณาแล้ว THNIC จะทำการแม็ปชื่อโดเมนภาษาไทยกับโดเมนภาษาอังกฤษให้อัตโนมัติ โดยเซิร์ฟเวอร์ที่ THNIC จะเป็น DNS server สำหรับโดเมนภาษาไทยทุกตัวที่ขอจดไป .. อย่างไรก็ตามหากเราต้องการรัน DNS server สำหรับโดเมนภาษาไทยเองก็สามารถทำได้เช่นกัน

Internationalized Domain Name (IDN)

โดเมนภาษาไทยนี้จะต่างไปจากบริการของนิภาหรือบริการชื่อไทยอื่นๆ ก่อนหน้านี้ที่อาศัยการแฮ็กและติดตั้งซอฟต์แวร์เสริม (ที่ไคลเอ็นด์ และ/หรือที่ ISP).. สำหรับโดเมนภาษาไทยที่ THNIC ให้บริการคือระบบโดเมนหลายภาษา เป็นมาตรฐานที่ร่างโดย Internationalized Domain Name Working Group ของ IETF .. วิธีการของ IDN ปัจจุบันใช้การเก็บข้อมูลโดเมนเนมภาษาต่างๆ ในรูปแบบที่เรียกว่า punycode (กำหนดไว้ใน RFC 3492) ซึ่งสามารถบันทึกเก็บในฐานข้อมูลของ DNS เป็น ASCII ธรรมดาได้ .. เมื่อฐานข้อมูลเก็บเป็น punycode การ query จึงเป็น punycode ด้วย ตอนนี้ resolver ใน OS เกือบ/ทั้งหมดยังไม่สนับสนุนการแปลงโดเมนภาษาต่างๆ เป็น punycode ดังนั้นแอพพลิเคชันจึงต้องทำเอง (วิธีการที่ให้แอพพลิเคชันแปลงเป็น punycode เองนี่เรียกว่า IDN in Application หรือ IDNA – RFC 3490) .. ข่าวดีสำหรับลินุกซ์คือ บราวเซอร์ยอดนิยมทั้งหลาย i.e., Mozilla, Firefox, Opera จะแปลงโดเมนเนมใน URL เป็น punycode ให้อัตโนมัติ ผู้ใช้งานลินุกซ์จึงใช้งานโดเมนภาษาไทย หรือภาษาอื่นๆ ได้ทันที … ส่วน IE ต้อง ดาวน์โหลดปลั๊กอิน มาติดตั้งด้วย

Server Side

ฝั่ง DNS server ไม่จำเป็นต้องเปลี่ยนแปลง/แพตช์อะไรเลย เพราะ punycode ก็คือ ASCII ธรรมดาเหมือนโดเมนภาษาอังกฤษทั่วๆ ไป .. หากต้องการรัน DNS server สำหรับโดเมนภาษาไทยหรือภาษาอะไรก็ตาม วิธีการก็เพียงแค่สร้าง zone ใหม่สำหรับโดเมนนั้น โดยที่แปลงชื่อโดเมน หรือชื่อซับโดเมน หรือโฮสต์เนมในภาษานั้นๆ เป็น punycode ก่อนเท่านั้นเอง ยกตัวอย่างเช่น โดเมน kitty.in.th มีโดเมนภาษาไทยชื่อ แมวเหมียว.th

ขั้นแรกก็แปลง “แมวเหมียว” เป็น punycode ก่อน โดยแปลงที่ http://josefsson.org/idn.php ก็ได้ หรือจะเอาซอร์สจาก RFC 3492 หรือ http://www.gnu.org/software/libidn มาคอมไพล์ก็ได้ ..

แมวเหมียว = xn--y3cadscv5e5dg

สร้าง zone สำหรับ แมวเหมียว.th โดยใช้ punycode

zone "xn--y3cadscv5e5dg.th" {
        type master;
        file "sandbox/kitty.in.th-idn";
        allow-update { none; };
};

สร้างฐานข้อมูลในไฟล์ kitty.in.th-idn (หรืออะไรก็ตามที่ระบุไว้ใน zone) .. ข้อมูลที่ใส่ก็เหมือนฐานข้อมูลของโดเมนภาษาอังกฤษ เพียงแต่แปลงโฮสต์เนมเป็น punycode ก่อน แล้วค่อยเก็บลงไป

โดเมน = xn--l3ckx7ji

เว็บ = xn--r3cz4e3a

ไฟล์ = xn--w3cm5g8a

เมล = xn--y3ci3f

        IN      NS      ns.kitty.in.th.
        IN      MX      5       mail.kitty.in.th.

@               IN      A       203.152.18.6
xn--l3ckx7ji    IN      CNAME   ns.kitty.in.th.
xn--w3cm5g8a    IN      CNAME   ftp.kitty.in.th.
xn--r3cz4e3a    IN      CNAME   www.kitty.in.th.
xn--y3ci3f      IN      CNAME   mail.kitty.in.th.

รีสตาร์ทเนมเซิร์ฟเวอร์

# named.restart

ติดต่อ THNIC เพื่อขอให้ชี้ primary/secondary DNS server สำหรับโดเมนภาษาไทยมาที่เซิร์ฟเวอร์ของเราแทน

.. เสร็จแล้ว !

New memory module installed

ได้แรมมาใส่เพิ่ม Yggdrasil แล้ว .. ต้นเหตุมาจากที่บ่นๆ ไปวันก่อนว่า KDE Apps ใช้เวลา build นานและกินหน่วยความจำระหว่างคอมไพล์มาก พอหน่วยความจำไม่พอ swap ก็ทำงาน อืดไปกันใหญ่ .. พี่หน่อย @ Speed Net Club คงทนผมบ่นไม่ไหวแล้ว (ทั้งใน blog และ #tlwg) เลยอนุเคราะห์มา 256 MB :D .. ขอบพระคุณเป็นอย่างสูงครับ .. ตอนนี้ Yggdrasil มีหน่วยความจำ 512 MB แล้ว ทำอะไรได้คล่องแคล่วกว่าเดิมพอสมควรทีเดียว :D

ทดสอบ 2.6.8.1-mm1 patch แล้ว .. อาการของ cdrecord ยังเหมือนเดิม รอกันต่อไป .. ช่วงนี้เลย run k3b/cdrecord as root ไปก่อน ..สมาชิกใน #tlwg ก็ได้ข่าวมาว่า IPv6 stack ใน 2.6.8 ทำงานบกพร่อง (ไม่ confirm นะครับ .. ต้องรอทดสอบอีกที) .. ดูท่าทางแล้ว เลขเวอร์ชันของ mm-patch สำหรับ 2.6.8 คงจะวิ่งเร็วกว่าปกติ :P … (พูดไม่ทันขาดคำ ตะกี้เช็คที่ kernel.org .. mm2 ออกแล้ว – -‘)

KDE 3.3 รีลีสแล้ว .. รายละเอียดไปตามอ่านเอาเองครับ (me: เน็ตมีปัญหาเข้า kde.org ไม่ได้)

Acer Service โทรมาบอกว่าอะไหล่มาแล้ว :)

Many things happened

win32 codecs loading problem: ที่ผ่านมาลินุกซ์บางเครื่องไม่สามารถใช้งาน win32 codecs ได้ไม่ว่าจะผ่านทาง mplayer หรือ xine .. เรื่องนี้เคยเกิดกับผมเหมือนกัน เป็นๆ หายๆ อยู่พักนึง ก็เลยพยายามกูเกิ้ลจนพบว่า ปัญหานี้เกิดจาก combination ของ prelink + exec-shield + โปรแกรมที่ใช้งาน win32 codecs .. อธิบายนิดฟีเจอร์ exec-shield เพิ่มเข้าไปในเคอร์เนลเมื่อปีที่แล้ว (โดย Ingo Molnar @ Red Hat) exec-shield จะ remap address เวลาโหลดไลบรารีเป็นการป้องกัน buffer/stack/pointer overflow attack .. เดิม address remapping ทำโดยการสุ่มพื้นที่เวลาโหลดไลบรารี .. ภายหลัง Red Hat ก็เอาฟีเจอร์ prelink มาใช้งาน การสุ่มพื้นที่เลยเปลี่ยนไปทำตอน full prelink ซึ่งปกติจะทำงานทุกสองสัปดาห์ (อันนี้เองที่เป็นสาเหตุว่าทำไมมันเป็นๆ หายๆ) .. โอเค ร่ายมายาว ประเด็นคือ dll ใน win32codecs หลายๆ ตัวจำเป็นต้องโหลดลงพื้นที่ๆ กำหนดไว้เท่านั้น (e.g., 0x400000) ถ้า exec-shield/prelink เลือกโหลดไลบรารีบางตัวในพื้นที่ไปแล้ว ก็จะไม่สามารถโหลด win32codecs ได้ ผลก็จะกลายเป็น segmentation fault .. วิธีแก้ คือ ยกเลิกการใช้ exec-shield แล้วทำ full prelink โดย

แก้ไฟล์ /etc/sysconfig/prelink จาก

PRELINK_OPTS=-mR

เป็น

PRELINK_OPTS="-mR --no-exec-shield"

** สังเกตดีๆ อย่าลืมใส่ double quote

สร้างไฟล์ เป็นแฟล็กสำหรับ force full prelink

touch /var/lib/misc/prelink.force

สั่ง prelink

/etc/cron.daily/prelink

รอพักนึง

set executable stack flag สำหรับโปรแกรมที่ใช้ win32codecs i.e., mplayer, xine

execstack -s /usr/bin/mplayer
execstack -s /usr/bin/xine

ขั้นตอนนี้เท่าที่ลอง บางครั้งก็ไม่ต้องทำ YMMV ..

ข้อเสียของวิธีนี้คือ มีความเสี่ยงกับ overflow attack มากกว่าระบบปกติ .. tradeoff กันเอาเองเน้อะ (ref: http://mplayerhq.hu/DOCS/HTML/en/faq.html )

cdrecord กับ kernel 2.6.8.1: ใช้งานร่วมกันแล้วมีปัญหา cdrecord ไม่สามารถส่งคำสั่งผ่านเคอร์เนลไปเขียนซีดีได้ .. workaround คือถอยกลับไปใช้ 2.6.7 หรือใช้ cdrecord as root (me: setuid เอาก็ไม่ได้) .. fix ใช้แพตช์ (ตามหาใน LKML เอาเอง :p) หรือไม่ก็รอ mm-patch หรือเคอร์เนลตัวถัดไป .. OT: สำหรับคนที่อยู่กับ LKML มานานพอสมควร เห็นหัวข้อ cdrecord มาพร้อมกับ kernel คงพอเดาได้ว่าจะเกิดอะไรขึ้น .. Joerg Schilling (คนเขียน cdrecord) เป็นโปรแกรมเมอร์ที่เก่ง แต่พี่แกไม่ฟังใครเลย เอาแต่ใจเป็นที่สุด .. ครั้งนี้ก็เช่นกัน ต่อความยาวสาวความยืดกับ Jens Axboe (@ SuSE – kernel hacker – I/O) เรื่องเดิมๆ อีกแล้ว .. ลอล

Keyboard ของ peorth เจ๊ง: ยกไปเซอร์วิสที่ Zeer รังสิต คราวที่แล้วไปเคลมฮาร์ดดิสก์พนักงาน Acer Service ที่ Zeer พูดจาแย่มาก ผมเดินออกมาเลย รวย ไม่เคลมก็ได้ ไม่ง้อหรอกเว้ย .. เที่ยวนี้ดีขึ้น เลยเอาดิสก์ไปเคลมด้วยเลย นึกว่าจะได้ “สู้ว๊อย” ซะแล้ว .. ลอล .. anyway, อะไหล่ไม่มี เลยเอาเครื่องกลับมาใช้งานก่อน ..

kernel 2.6.8.1: มีผลของ make oldconfig (จาก 2.6.7-mm5) อีกเครื่องนึงมาเพิ่มเติม

  • Message Signaling Interrupts (MSI and MSI-X)
  • Sensor: Analog Device ADM1025 and compatible
  • Sensor: Analog Device ADM1031 and compatible
  • Sensor: National Semiconductor LM77