Category Archives: Blog

Shopping

สัปดาห์ก่อนโน้นออกตุนเสบียง ไปเจอลูกอมยี่ห้อ UNIX กับมาม่าต้มยำเส้นชาเขียว (- -‘) … สอยมาซะ

SCO จะฟ้องมั้ยวะเนี่ยะ ลอล .. (ที่จริงคนที่ฟ้องได้น่าจะเป็น Open Group ซึ่งถือสิทธิ์ TM ของ UNIX)

แกะมาม่าใส่ถ้วย .. (อันนี้ถ้วยบะหมี่เอฟเอฟ ขนาดกำลังพอดี มีฝาให้ด้วย)

เส้นมาม่าผสมชาเขียว …

สุกแล้ว รสต้มยำ มีแต่เครื่องปรุงกับ พริก ไม่ให้น้ำมัน พริกเผา .. กินแล้วก็ ok เอาอะไรมาก บะหมี่กึ่งสำเร็จรูป

It’s a ramdisk – not tmpfs !

แจ้งที่ผิด ของ blog เมื่อวานนะครับ .. สำหรับ udev จะให้ทำงานได้ต้อง enable ramdisk (CONFIG_BLK_DEV_RAM) ไม่ใช่ tmpfs .. และควรตั้ง Initial RAM disk support (CONFIG_BLK_DEV_INITRD) ด้วย .. :P

เริ่มทยอยทำ Extras packages สำหรับ TLE 7.0 แล้ว .. อยากคอมไพล์ด้วย GCC 3.4 ให้ได้ทั้งหมด (TLE 7.0 ใช้ GCC 3.4 เป็นตัวหลัก และ GCC 3.3 เป็นตัว compat.) บางแพ็กเกจก็คอมไพล์ยากเป็นบ้าทั้งที่ใช้ GCC 3.3 แล้วผ่านฉลุย …. GCC 3.4 มันคงเข้มงวดมากขึ้นแหละ โดยเฉพาะ C++

สองสามวันมานี้ #tlwg สนทนาธรรมกันบ่อย โยงไปถึงกลศาสตร์ควอนตัม (quantum mechanics) ด้วย .. ในบางมุมมองแล้ว ทั้งสองเรื่องเป็นการพยายามอธิบายสิ่งเดียวกันนั่นแหละ .. :)

g-v-m again

อย่างที่บอกไปวันก่อนเรื่อง gnome-volume-manager ว่ามันอาศัยการทำงานของโปรแกรมอื่นๆ อีกหลายตัว ซึ่งยุ่งๆ อยู่ประมาณนึงเหมือนกัน .. สมมติ ว่าเสียบ USB drive เข้ากับ USB port การทำงานจะประมาณนี้

usb -> kernel -> /sbin/hotplug -> udev -[dbus] -> hald – [dbus] -> g-v-m

เมื่อมีอุปกรณ์ใหม่ปรากฏในระบบ hotplug ในเคอร์เนลจะได้รับสัญญาณจากฮาร์ดแวร์ เคอร์เนลจะแจ้งเตือน userspace ผ่านทาง /sbin/hotplug .. สคริปต์ของ hotplug จะเรียกใช้ udev ซึ่งทำหน้าทีสร้างไฟล์ใน /dev เพื่อใช้ในการอ้างอิง USB drive จากนั้น HAL (daemon/agent) จะได้รับสัญญาณผ่านทาง D-BUS ว่ามีอุปกรณ์เพิ่มเข้ามาในระบบ .. HAL จะเป็นตัวแจ้งผ่านทาง D-BUS ไปยัง applications ต่างๆ เพื่อให้รู้ว่ามี USB drive ต่อพ่วงเข้ามา (สำหรับกรณีนี้ HAL จะทำหน้าที่ update /etc/fstab ด้วย) .. g-v-m ก็จะได้รับแจ้ง และทำงานตามคอนฟิกที่ผู้ใช้กำหนดไว้ (e.g., load kernel modules & mount USB drive)

สำหรับการติดตั้งใช้งาน จะวุ่นวายหน่อยก็ตรง udev ซึ่งจะควรจะทำงานเป็นอันดับแรกๆ ใน init scripts ตามหลัง sysfs ติดๆ (udev ต้องใช้ข้อมูลจาก sysfs ในการทำงาน) แปลว่า udev ต้องสามารถสร้างไฟล์ใน /dev ได้ก่อนที่จะ remount / เป็น read/write หลายๆ ดิสโตรจึงเลือกให้ udev ทำงานบน tmpfs แทนสตอเรจจริงๆ .. ใครที่คอมไพล์เคอร์เนลเองก็อย่าลืม enable tmpfs ไว้ด้วยเน้อะ

Linux TLE Logo

ดราฟต์โลโก้ ‘โลมา’ เป็น svg จากภาพบิตแม็พ 48×48 จุด .. ลอกอยู่พักใหญ่ก็เลิก วาดใหม่หมดเลยดีกว่า โดยให้ออกมาคล้ายๆ โลโก้เดิม จะได้ไม่ผิดสังเกตมาก .. ผลลัพธ์ออกมาเป็นแบบนี้:

ดูแล้วมั่วๆ พอสมควร แต่พอย่อเป็นไอคอนแล้วก็คงไม่เห็นความมั่วหรอกน่า :P

PS: ‘โลมา’ ไม่ใช่ ‘ปลาโลมา’.. โลโก้วาดบน Inkscape 0.39 / Aowthai

gnome-volume-manager

หนึ่งในฟีเจอร์ที่น่าสนใจของ GNOME 2.8 คือ gnome-volume-manager (g-v-m) ซึ่งช่วยให้ใช้งาน removeable storage ต่างๆ ได้ง่ายขึ้น เช่น เสียบ USB drive หรือแผ่นซีดีแล้ว mount ให้อัตโนมัติ แสดงไอคอนบนเดสก์ท็อปให้เลย หรือเสียบกล้องดิจิทัลก็จะเรียกโปรแกรมจัดการภาพถ่าย (e.g., gphoto, gthumb) ให้ โหลดแผ่น DVD แล้ว Xine playback ให้เลย ฯลฯ

g-v-m อาศัยการทำงานร่วมกับ HAL, D-BUS, udev และ Hotplug ซึ่งโยงเข้าไปถึงในเคอร์เนล .. ติดตั้งใช้งาน ไม่ยาก default config ทุกดิสโตรเตรียมไว้หมดแล้ว ก็ควรจะทำงานได้เลย .. แต่ถ้าอยากรู้รายละเอียดลึกๆ แล้วค่อนข้างวุ่นวายอยู่เหมือนกัน ตอนนี้พอจับใจความได้บ้างแล้ว ไว้รู้เรื่องมากกว่านี้จะมาเล่าให้ฟังอีกที :P

เก็บตก packages ของทะเล

  • แก้ BitTorrent ให้ใช้กับ wxPythonGTK2
  • แก้ owner ของ xbase กับ anjuta
  • อัปเดต mono กับ gtk-sharp เป็น 1.0.2

พักนี้วุ่นวายกับงานเอกสาร .. เขียน document class ของ LaTeX เองนี่ัมันยากเหมือนกันแฮะ T_T

Move to GCC 3.4

สัปดาห์ที่แล้ว MrChoke แจ้งมาว่า ทะเลจะใช้ GCC 3.4 เป็นคอมไพเลอร์หลัก และใช้ GCC 3.3 เป็น compat .. แปลว่า ต้อง rebuild แพ็กเกจทั้งหมด (T_T) .. นั่งปั่น เสาร์-อาทิตย์ สองวันเสร็จ ทั้งหมด 319 RPMS / 199 SRPMS .. เข้า people เรียบร้อยแล้ว :)

ยังเหลือ extras ที่มีจำนวนพอๆ กัน .. แต่อันนี้ทยอยทำไปเรื่อยๆ ได้

สั่ง apt-get update/upgrade จาก NECTEC ปรากฏว่ารีบูตแล้วค้าง .. ไม่มี /dev/console ! .. เลยบูตแผ่นทะเล สั่ง linux rescue เข้าไป MAKEDEV .. make อะไรได้เอาหมดเลย ตอนนี้ /dev เกือบๆ หมื่นไฟล์ (- -‘) .. ก็ยังดีกว่าใช้งานไม่ได้แหละ .. เฮ่อ

แก้โค้ด atom feed นิดหน่อย ตอนนี้โปรแกรม feed reader อย่าง sage หรือ thunderbird ควรจะรับ feed จาก kitty.in.th ได้แล้ว :)

(Kernel < 2.6.9 RC2) + (Xorg >= 6.8) + i830 + DRI = Kernel Oops !

หลังอัปเกรดเป็น Xorg 6.8/6.8.1 พบว่า FPS ของ glxgears ลดลงไปเกือบครึ่ง ทีแรกเข้าใจว่าเป็นเพราะ Xorg มันช้าเอง .. แต่พอมาเห็น syslog ถึงได้รู้ว่าไดรเวอร์ DRM ของ i830 ในเคอร์เนลมันมีปัญหา เวลาจะโหลดทำงานจะเกิด Oops! .. พอ i830 DRM มันโหลดไม่ได้ Direct Rendering เลยไม่ทำงาน ..

อาการก็จะประมาณนี้

Sep 19 12:05:51 peorth kernel: [drm:i830_dma_initialize] *ERROR* can not find dma buffer map!
Sep 19 12:05:51 peorth kernel: [drm:i830_irq_emit] *ERROR* i830_irq_emit called without lock held
Sep 19 12:05:51 peorth kernel: mtrr: 0x98000000,0x8000000 overlaps existing 0x98000000,0x200000
Sep 19 12:05:51 peorth kernel: Unable to handle kernel paging request at virtual address f000e2d3
Sep 19 12:05:51 peorth kernel:  printing eip:
Sep 19 12:05:51 peorth kernel: b023b091
Sep 19 12:05:51 peorth kernel: *pde = 00000000
Sep 19 12:05:51 peorth kernel: Oops: 0000 [#1]
Sep 19 12:05:51 peorth kernel: Modules linked in: ipv6 ohci1394 ieee1394 usbhid yenta_socket uhci_hcd usbcore snd_intel8x0 snd_ac97_codec snd_pcm snd_timer snd_page_alloc snd_mpu401_uart snd_rawmidi snd_seq_device snd soundcore orinoco_cs ds pcmcia_core orinoco hermes e100 sg scsi_mod
Sep 19 12:05:51 peorth kernel: CPU:    0
Sep 19 12:05:51 peorth kernel: EIP:    0060:[]    Not tainted
Sep 19 12:05:51 peorth kernel: EFLAGS: 00013296   (2.6.8.1-ck6)
Sep 19 12:05:51 peorth kernel: EIP is at i830_kernel_lost_context+0x11/0x70
Sep 19 12:05:51 peorth kernel: eax: f000e2c3   ebx: 00000000   ecx: 00000010   edx: bf15cc10
Sep 19 12:05:51 peorth kernel: esi: b03f76a0   edi: bedbe000   ebp: b03f7820   esp: bedbeed0
Sep 19 12:05:51 peorth kernel: ds: 007b   es: 007b   ss: 0068
Sep 19 12:05:51 peorth kernel: Process X (pid: 1027, threadinfo=bedbe000 task=bf15cc10)
Sep 19 12:05:51 peorth kernel: Stack: 00000000 b023d207 b03f76a0 affff718 00003286 00000000 b03f76a0 b02372e3
Sep 19 12:05:51 peorth kernel:        b03f76a0 b03f7d0c b03f7d14 b014d8c0 bedbef14 08806bf0 00000000 00000001
Sep 19 12:05:51 peorth kernel:        0000000a 00000000 bf15cc10 b01163f0 00000000 00000000 beeb7d80 bf2d01e8
Sep 19 12:05:51 peorth kernel: Call Trace:
Sep 19 12:05:51 peorth kernel:  [] i830_dma_quiescent+0x17/0xb0
Sep 19 12:05:51 peorth kernel:  [] i830_lock+0x203/0x2b0
Sep 19 12:05:51 peorth cups-config-daemon: cups-config-daemon startup succeeded
Sep 19 12:05:51 peorth kernel:  [] do_sync_read+0x80/0xb0
Sep 19 12:05:51 peorth kernel:  [] default_wake_function+0x0/0x20
Sep 19 12:05:51 peorth kernel:  [] default_wake_function+0x0/0x20
Sep 19 12:05:51 peorth kernel:  [] i830_ioctl+0xe4/0x160
Sep 19 12:05:51 peorth kernel:  [] sys_ioctl+0xc9/0x240
Sep 19 12:05:51 peorth kernel:  [] sysenter_past_esp+0x52/0x71
Sep 19 12:05:51 peorth kernel: Code: 8b 40 10 8b 90 34 20 00 00 81 e2 fc ff 1f 0
0 89 51 14 8b 43

และถ้าดูด้วย glxinfo หรือ xdriinfo โปรแกรมก็จะรายงานว่า direct rendering มันไม่ทำงาน

ทางแก้ เท่าที่หาเจอเวลานี้ มีสองทาง

ติดตั้งเคอร์เนล >= 2.6.9 RC2 ซึ่งรวมไดรเวอร์ตัวใหม่เข้าไปแล้ว ไดรเวอร์ใหม่นี้ชื่อ i915 รองรับกราฟิกชิปของอินเทล ตระกูล 830 845G 852GM 855GM 865G 915G เป็นไดรเวอร์ที่ใช้กับ Xorg >= 6.8 และ XFree86 > 4.4 .. ส่วน Xorg < 6.8 และ XFree86

More on Timing belt

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

อ่อ ไหนๆ ก็ไหนๆ พูดถึงคำว่า ‘กำหนดการ’ ซักหน่อย หลายๆ คนมักจะไปใช้คำว่า ‘หมายกำหนดการ’ แทนโดยไม่รู้ว่า ‘หมายกำหนดการ’ เป็นคำราชาศัพท์ ใช้ในความหมายของลำดับขั้นตอนในราชพิธี .. พิธีการของสามัญชนให้ใช้ ‘กำหนดการ’ เฉยๆ เน้อะ ..

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

ลองกูเกิ้ลดู จะรู้ว่าคนไทยใช้สองคำนี้ผิดมากขนาดไหน :P

GNOME 2.8 / Timing Belt

ข่าวใหญ่ประจำวัน สำหรับวันนี้คงไม่พ้น GNOME 2.8 .. อยากใช้แต่ยังไงตอนนี้ก็คงต้องรอ emerge หรือไม่ก็รอ MrChoke .. (เห็นว่ากำลังทำเลย :D)

บ่ายๆ ขับรถกลับไปกรุงเทพฯ .. เกือบถึงเมืองพลก็ได้ยินเสียง แป๊ก .. แล้วรถก็ดับ ..จอดเปิดฝากระโปรงรถดูก็ไม่เห็นสิ่งผิดปกติ .. ซึ่งเป็นลางไม่ดี เพราะแสดงว่าปัญหาอยู่ข้างใน .. พอดีว่าตำรวจทางหลวงผ่านมาเลยลากรถไปที่อู่ในตัวอำเภอพล .. ถึงอู่่ ช่างเปิดฝาครอบสายพานไทม์มิ่งดูเป็นรายการแรก แล้วก็เห็นว่ามันขาด.. อา ซวยแล้ว .. ไอ้สายพานไทม์มิ่งหรือสายพานราวลิ้นนี่เป็นที่เลื่องลือว่าขาดแล้วเป็นเรื่องใหญ่มากๆ ถึงขนาดยกเครื่องใหม่เลยก็มีให้เห็นกันนักต่อนัก .. สายพานไทม์มิ่งเป็นตัวเชื่อมระหว่างแคร็งก์ชาฟต์ที่เป็นตัวส่งกำลังกับแคมชาฟต์ที่ทำหน้าที่หมุนเปิด/ปิดวาล์วไอดีและไอเสียให้ถูกต้องตามจังหวะ หากสายพานขาดขณะรถวิ่งจะมีโอกาสสูงที่วาล์วจะเปิดค้างไว้ พอลูกสูบเคลื่อนที่ขึ้นมันก็จะตีวาล์ว เสียน้อยหน่อยก็ก้านวาล์วคด หนักกว่านั้นก็อาจจะเป็นกระเดื่องหัก แคมชาฟต์คด ลูกสูบเสียหาย เกียร์ธรรมดาลูกสูบอาจจะบดจนพังได้ทั้งเครื่อง ยิ่งวิ่งเร็ว ยิ่งมีโอกาสเสียหายมาก .. ปัจจุบันรถส่วนใหญ่ (รวมทั้งรถผมด้วย) จะมีกำหนดเปลี่ยนสายพานไทม์มิ่งทุกหนึ่งแสนกิโลเมตร ไม่ว่าจะเสียหายหรือไม่ถึงอายุเมื่อไหร่ก็ต้องเปลี่ยน ดีกว่าไปขาดกลางทาง .. ตอนรถวิ่งครบแสนผมก็เข้าศูนย์เปลี่ยนไปแล้ว .. วันนี้ที่ขาด ODO อยู่ที่แสนเจ็ดกว่าๆ ..ไม่น่าขาดได้เลย .. ก็นับว่าโชคดีที่เป็นรถเกียร์ออโต้ กำลังวิ่งที่ราวๆ 120 พอสายพานขาด เกียร์จะเปลี่ยนเข้าเกียร์ว่างและเครื่องจะดับอัตโนมัติ จากนั้นสตาร์ทให้ตายยังไงก็ไม่ติด .. ความเสียหายที่เกิดกับรถผมก็เลยแค่ก้านวาล์วไอเสียคดทั้งสี่ก้าน .. เฮ่อ (T_T)

Swap .. or not ?

วันนี้แวะเอาแผ่นซีดีไปฝากพี่เทพที่บ้าน นั่งคุยกันสารพัดเรื่อง นานทีเดียว .. :)

เรื่องนึงที่คุยกันคือเรื่อง swap ในลินุกซ์ .. มีกรณีแปลกๆ ที่่ผ่านตา คือ มีคนเอาหน่วยความจำมาทำเป็น RAM disk แล้วเอามาใช้เป็น swap บนเคอร์เนล 2.4 .. อ่านเรื่องเต็มๆ ได้ที่ http://kerneltrap.org/node/view/3660 .. คอมเมนต์ยาวมาก ผู้เขียนบทความพยายามอธิบายว่าการใช้หน่วยความจำมาทำเป็น swap ดีกว่า การ swap ลงดิสก์ (ซึ่งก็แหงๆ ล่ะ) .. และการทดสอบโดยผู้เขียนเองได้ผลว่าใช้หน่วยความจำทำ swap ดีกว่า ไม่มี swap เลย .. อันนี้ดูไม่น่าเป็นไปได้ แต่ก็ไม่มีอะไรชี้ชัด ตามคนต่างคอมเมนต์ตามสมมติฐานซะมากกว่า .. สรุป .. ไม่มีคำตอบ .. ลองกันเอาเอง

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

ขนาดของ swap เดิมเชื่อกันว่าควรจะตั้งไว้ประมาณ 2 x หน่วยความจำ .. ที่อ่านๆ เจอ เรื่องนี้มีที่มาอยู่หลายทาง หนึ่งในนั้นคือ มาจากขนาด swap ของระบบยูนิกซ์สมัยแรกๆ .. และอีกหนึ่งมาจากเหตุที่เคอร์เนลรุ่นแรกๆ ทำงานได้ไม่ดี ถ้าขนาด swap เล็กเกินไป .. ปัจจุบัน swap ไม่จำเป็นต้องเป็นสองเท่าของหน่วยความจำ สำหรับเดส์กท็อป หน่วยความจำ 256 – 512 MB ตั้ง swap ไว้ซัก 512 MB ก็น่าจะเกินพอแล้ว มากกว่านี้ก็เปลืองเนื้อที่เปล่าๆ ยิ่งถ้าหน่วยความจำเยอะกว่านี้ swap ก็จำเป็นน้อยลง .. อีกอย่างนึงคือ ขนาดของ swap มีลิมิตที่ kswapd ซึ่งตอนนี้ ยังทำงานเป็น 32-bit .. ขนาด swap สูงสุดอยู่ที่ 2 GB/โพรเซส .. หากจะตั้ง swap เกิน 2 GB ก็ได้ แต่ kswapd จะอ้างอิงได้แค่ 2 GB แรก

สำหรับเคอร์เนล 2.6 มีการเปลี่ยนแปลง VM ไปจาก 2.4 ค่อนข้างมาก สามารถปรับแต่งการทำงานของ VM ให้เหมาะกับภาระงานของเครื่องนั้นๆ ได้ระดับนึง กระนั้นก็ยังไม่ถือว่าสมบูรณ์แบบ (เช่นเดียวกับโอเอสอื่นๆ ที่สนับสนุน VM/swapping ทุกๆ ตัว) .. ระยะหลังเลยเริ่มมีเสียงว่า เคอร์เนลอาจจะต้องทำ VM ไว้ใช้สำหรับงานต่างๆ กัน เช่น การใช้เป็นเดสก์ท็อป ทั่วไปแล้วมีหน่วยความจำ 128 – 512 MB การใช้งานแอพพลิเคชันหลากหลาย เปลี่ยนแปลงตลอดเวลา และต้องการการตอบสนองที่ดี – สลับหน้าจอแอพพลิเคชันได้เร็วขึ้น 1 วินาทีมีความหมายมากกว่าคอมไพล์เคอร์เนลได้เร็วขึ้น 1 นาที – VM สำหรับเดสก์ท็อปอาจจะต้องทำงานแบบนึง ในขณะที่ เซิร์ฟเวอร์ ตามทฤษฎีมีหน่วยความจำที่มากกว่า มีแอพพลิเคชันที่อยู่ในหน่วยความจำค่อนข้างแน่นอน ไม่ค่อยมีการเปลี่ยนแปลง VM ก็อาจจะต้องทำงานอีกแบบ ..

จะว่าไป .. หลังๆ มีแพตช์/kernel tree ที่ปรับแต่งสำหรับเดสก์ท็อปหรือเซิร์ฟเวอร์โดยเฉพาะอยู่เหมือนกัน .. :)