ISAG's Blog --AYBABTU

Wednesday, September 29, 2004

แนะนำกล้อง: Canon's new 16.7MP Digital SLR, with WiFi

แค่อ่านผ่านข่าวครั้งแรกเราก็สะดุดกึก พวกเค้าอยู่กันที่ 8MP แต่ลุงหนอนวิ่งนำมาที่ 16.7MP ซะแล้ว แถมมี 803.11a/g ให้เลือกใช้ด้วยนะ ใครบ้ากล้องแถมกระเป๋าเบาเตรียมตัวไปซื้อได้เลย (พวกกระเป๋าหนักมีแต่เงินเหรียญ)
ข้อมูลเพิ่มเติมคิดว่าอ่านเองดีกว่า ขี้เกียจแปล (จริงๆแล้วกลัวแปลผิด)
รายละเอียดใน dpreview
รายละเอียดใน cannon
ถกกันใน /.

ปล. อีกหน่อยกล้องถ่ายรูปจะโดน hacked ไม๊เนี่ย วัยรุ่นกลุ้มใจเจงๆ

Wednesday, September 22, 2004

แนะนำเวบ: The FreeBSD Laptop Compatibility List

ชาวลีนุกซ์เค้ามี Linux on Laptops สำหรับคนที่คิดจะลง Linux บน Laptop (ตามชื่อมันเลย)
เพื่อไม่ให้น้อยหน้าเค้า ขอเอาใจชาวปิศาจแดง FreeBSD ด้วยเวบไซต์นี้ The FreeBSD Laptop Compatibility List ข้อมูลอาจจะไม่เยอะเท่าฝั่งลีนุกซ์ แต่ก็ดีกว่าไม่มีล่ะเน๊าะ ใครระห่ำแตกลง FreeBSD บน Laptop แล้วมาเล่าบ้างเน้อ ยังไม่เคยเห็นคนทำแบบนั้นตัวเป็นๆเลยซักที..

Monday, September 20, 2004

คำแนะนำสำหรับการเขียน blog

ตอนนี้ผมปิด feature ที่จะเติม <br> และ <p> แล้ว ดังนั้นทุกครั้งที่ต้องการขึ้นบรรทัดใหม่เราต้องใส่ tags นี้กันเอาเองนะครับ เหตุผลที่ปิดก็เพราะหลายๆครั้งที่ blogger มันพยายามเติม <p> ในตำแหน่งที่ไม่ถูกต้องหลายครั้ง และก็เป็นปกติ ระบบอะไรก็ตามที่มีอัติโนมัติมากๆ มักจะนำเราไปสู่ปัญหาในตอนหลัง

เรื่องเปลี่ยน font อีกเรื่อง ระวังนะครับ เพราะว่า blogger เองมันก็ไม่ฉลาด จะเปลี่ยนซ้ำไปซ้ำมาไม่ได้ ปกติผมจะใช้ <tt> </tt>กับ <pre> </pre> เพื่อเปลี่ยน font เป็น fix-width ปล. ถ้าเรื่องของใครยังมีเว้นบรรทัดผิด เข้าไปแก้ดูด้วยนะครับ ถ้ามีปัญหาอะไรมาว่ากันอีกที

ดีไวซ์ไดรเวอร์ จาก 2.4 ถึง 2.6 : ตอนที่ 1 "Hello World\n"

จาก Linux Kernel 2.4 ถึง 2.6 มีการเปลี่ยนแปลงหลายอย่าง ทั้ง Kernel, System Calls รวมไปถึง Device Driver และการจัดการต่างๆ เอกสารชุดนี้จะอธิบายวิธีการแปลงดีไวซ์ไดรเวอร์จากเคอร์เนลเก่า (2.4) ไปยังเคอร์เนลใหม่ (2.6) เราจะสันนิษฐานว่าผู้อ่านมีความคุ้นเคยกับการเขียนดีไวซ์ไดรเวอร์อยู่บ้างแล้วระดับนึง..


โปรแกรมแรกของหลายๆคนคงหนีไม่พ้นโปรแกรม Hello World ใครๆก็ใช้โปรแกรมนี้เป็นแบบฝึกหัดแรก เราก็จะถือเก๋เริ่มด้วยโปรแกรม สวัสดีโลก เหมือนชาวโลกเค้าบ้าง จะเขียนกันแบบ kernel loadable module (อีกแบบก็ built-in คงรู้ความแตกต่างกันอยู่แล้ว)
มาดูโค้ดดีไวซ์ไดร์เวอร์สำหรับ kernel 2.4 กันก่อน:

  #define MODULE
  #include <linux/module.h>
  #include <linux/kernel.h>

  int init_module(void)
  {
      printk(KERN_INFO "Hello World\n");
      return 0;
  }

  void cleanup_module(void)
  {
      printk(KERN_INFO "Goodbye cruel world\n");
  }
โมดุลสวัสดีโลกง่ายๆนี้ อาจจะดูธรรมดา แต่จากรุ่นหนึ่งสู่รุ่นหนึ่ง จากยุคของ ๒.๔ ถึง ๒.๖ เราต้องแปลงโฉมโมดุลนี้ซะใหม่ เปลี่ยนกันตั้งแต่บรรทัดแรกเลย
    #define MODULE
ไม่จำเป็นอีกแล้วสำหรับมาโคร MODULE ตัวนี้ เพราะใน ๒.๖ นั้น ใช้ระบบการ build kernel/module แบบใหม่ และมาโครนี้จะถูก define แล้วโดยอัติโนมัติ (เรื่อง ระบบ build kernel จะพูดถึงกันอีกที)

ใน 2.4 เราใช้การประกาศคู่ฟังก์ชั่น init_module/cleanup_module แต่ใน 2.6 จะใช้การประกาศฟังก์ชั่นผ่าน module_init/module_exit ถึงตอนนี้ก็ยังอาจจะใช้คู่เดิมได้อยู่ แต่เราแนะนำให้เปลี่ยนชื่อใหม่แล้วประกาศผ่านฟังก์ชั่นชุดใหม่จะดีกว่า อ่อ เกือบลืม ฟังก์ชั่น module_init กับ module_exit ประกาศอยู่ใน <linux/init.h> ถ้าจะใช้ก็ต้อง include ด้วยเน้อ
เปลี่ยน ๒ สามจุด ตอนนี้หน้าตาของโปรแกรมสวัสดีโลกของเราก็เป็นแบบนี้:

    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/kernel.h>

    static int hello_init(void)
    {
        printk(KERN_ALERT "Hello World\n");
        return 0;
    }

    static void hello_exit(void)
    {
        printk(KERN_ALERT "Goodbye cruel world\n");
    }

    module_init(hello_init);
    module_exit(hello_exit);

โมดุลของเราตอนนี้ก็พร้อมจะถูก compile แล้ว แต่เอาไว้ว่ากันต่อคราวหน้าดีกว่า.. อ่อ โมดุลสวัสดีโลกของเราตอนนี้ ถ้าถูกโหลดเข้าไปใน Kernel เรานอกจาก "Hello World\n" แล้ว ยังจะได้ message นี้ด้วย

    hello: module license 'unspecified' taints kernel.
ซึ่งจะว่าไปก็ไม่ซีเรียสอะไรมาก แค่บ่นๆว่าทำไมเอาโมดุลไลเซนส์น่าเกลียดมาทำให้ kernel เปรอะเปรื้อน (แปลแล้วน่าเกลียดแฮะ) ถ้าจะไม่ให้มีเมสเซสนี้ก็แค่ประกาศ
    MODULE_LICENSE("Dual BSD/GPL");
เรื่อง module license ก็ไม่ใช่เรื่องใหม่อะไร มีมานานแล้วแต่บางครั้งก็หลงลืมไม่ได้ใส่กัน มาตอนนี้แนะนำให้ใส่กันได้แล้ว และการประกาศไลเซนส์แบบนี้ยังจะช่วยให้เราสามารถเข้าไปเรียกใช้งาน GPL-only symbols ได้ด้วย (มีอะไรบ้างอย่าถาม แปลมา)



ปล. เนื้อหาและความรู้จาก

Saturday, September 18, 2004

แนะนำเวบ: วิกิพีเดีย

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

วิกิพีเดีย ภาษาไทย


"Pen and ink is wit's plough." - John Clarke.

อยู่ลาดกระบัง อยากได้ iso ของ Debian จัง

หญิงสาว: อยากได้ iso ของ Debian จังเลย จะเอาไปลงหัดเล่นให้เก่งๆเหมือนเธอบ้าง ไปดาวน์โหลดที่ไหนเหรอ
ชายหนุ่ม: ... (มันเป็นอะไรของมันวะ)< br>


วิธีการได้มาซึ่ง iso ของตัว Installer มีได้หลายวิธี ขอ iso จากเพื่อนโต๊ะข้างๆ, ขโมยซีดีเพื่อนมาสร้าง iso, ฯลฯ แต่วิธีปกติที่คนปกติจะทำได้มี ๓ วิธี

๑) ดาวน์โหลด full cd iso image(s) จาก mirror site ใกล้ตัว เข้าใจว่าที่ isag01 น่าจะมีให้ดาวน์โหลด แต่ผมหาไม่เจอแฮะ (ใครรู้บ้างว่าอยู่ไหน?) อิมเมจไฟล์ที่ดาวน์โหลดจะเป็น iso สำหรับ stable และ testing อ่อ แต่ของ testing เนี่ยจะ regenerated ทุกๆอาทิตย์ หน้าสำหรับดาวน์โหลดอยู่ ที่นี่ ครับ

๒) ดาวน์โหลดด้วย BitTorrent เอ่อ ไม่รู้ที่นู่นฮิตกันหรือเปล่า BitTorrent เนี่ย เราชอบมากเลย มันเป็นระบบแชร์ไฟล์แบบ peer-2-peer เราไม่เคยใช้ BitTorrent ดาวน์โหลดอิมเมจเหมือนกัน คิดว่าถ้ามี seeder ใกล้ตัวก็อาจจะเร็ว แต่ถ้าไม่มีก็คงช้าน่าเกลียดเลย ดาวน์โหลด bittorrent file ได้ ที่นี่ testing สร้างใหม่ทุกอาทิตย์เหมือนกัน ลงโปรแกรมไคลเอนต์ของ BitTorrent ได้ง่ายๆ ด้วย
# apt-get install bittornado-gui


๓) สร้างอิมเมจเองด้วย jigdo ใช้เดเบียนมาหลายปี พึ่งได้ลองใช้ jigdo มันเยี่ยมมากเลย!! iso สร้างใหม่ตอนนั้นเลย แพจเกจต่างๆใหม่และสดมากๆ แรกๆอาจจะงงๆหน่อย (งงพอๆกับตัว installer ของ debian เลย) แต่เราว่า ถ้าต้องการของดี วิธีนี้เป็นวิธีที่ดีที่สุดแล้ว (แต่แย่ที่สุดเรื่องความง่าย) ขอแนะนำให้ลองใช้กันดู ถ้าคุณติดใจ debian ได้ก็จะติดใจ jigdo ได้ไม่ยาก ยิ่งถ้าอยู่ลาดกระบังมี full mirror site ใกล้ๆอย่าง isag01 แล้วเนี่ย ซู้ดดด ยอดด ข้อมูล jigdo เพิ่มเติม ที่นี่ครับ เกือบลืม jigdo เป็นวิธีเดียวที่จะได้มาซึ่ง DVD image (มีใครครอบครอง dvd burner แล้วบ้าง?)


๒ อาทิตย์ก่อนลง sarge ที่บ้านจากอิมเมจที่สร้างด้วย jigdo ไม่ได้ลงเครื่องใหม่นานมากๆแล้ว ตอนนี้จากที่เคยบู้ทด้วย bf24 กลายมาเป็น บู้ทด้วย linux26 ไปแล้ว เท่ห์ๆ แล้วก็เผื่อใครยังไม่รู้ debian installer มีได้หลายแบบนะครับ ไม่ใช่ว่าจะมีแต่ full cd แบบที่ใช้ๆกัน แบบที่เป็น bussiness card image ก็มี แบบ Net install ก็มี มีมากหลายแบบให้เลือกใช้ตามความเหมาะสม (แต่แบบใช้ง่ายๆยังไม่มี -_-") หน้าหลักของ Debian Installer



ข้อมูลอ้างอิงจาก "Installing Debian GNU/Linux via CD images"

Tuesday, September 14, 2004

แนะนำหนังสือ: The Design and Implementation of the FreeBSD Operating System

The Design and Implementation of the FreeBSD Operating System
โดย Marshall Kirk McKusick และ George V. Neville-Neil (เจ้าเก่า)
Addison-Wesley, 2004
ISBN 0-201-70245-2
683 หน้า

หนังสือเล่มนี้ที่ Amazon
หนังสือเล่มนี้ที่ Unixreview
หนังสือเล่มนี้ที่ Google

ยังไม่ได้เป็นเจ้าของเล่มนี้ แต่ใส่ไว้ในตะกร้าแล้ว มีเงินเมื่อไหร่ค่อยว่ากัน (ราคามันเหือดเหลือเกินนี่นา 59.99 US$) ดูจาก review หลายๆที่แล้ว หนังสือเล่มนี้เหมาะกับ Free/BSD Fellow และ Kernel Hacker ผู้สนใจทั่วไป

แนะนำโปรแกรม: Global

แนะนำโปรแกรม Global ใช้สำหรับทำ tag ซ้อสโค้ด หรือพูดง่ายๆ เอาไว้สร้าง webpages (หรือ ฯลฯ) จากซ้อสโค้ด โปรแกรมนี้ถือเป็นหนึงในทูลสำคัญที่สุดโปรแกรมหนึ่งในงาน Kernel Hacking ในบางครั้ง เราต้องการรู้ว่า symbol ไหน structure ตัวไหนถูกประกาศในไหน เราก็ใช้โปรแกรมนี้หา จะดู chain ของ kernel function call ก็ไต่คลิ้กๆตาม hyperlink ไปเรื่อยๆ

ถ้าคุณเป็น kernel hacker ไม่แนะนำให้พลาดโปรแกรมนี้ด้วยประการทั้งปวง

โฮมเพจของ Global
นี่ตัวอย่าง webpages ที่สร้างด้วย Global

ใส่ options ให้เป็น .gz ฝั่ง server ได้ด้วย เอ่อ หมายถึง html files จะบีบด้วย gzip ทุกครั้งที่ browser เรียกมา apache จะขยายออกมาให้โดยอัตโนมัติ (สำหรับ debian ใช้ได้เลย)

ถ้าใช้ debian
# apt-get install global

Monday, September 13, 2004

command line กับ file

command line ของ Unix/Linux เป็นเหมือนยาขม บ้างก็ทนอมจนหวาน บ้างก็บ้วนทิ้งตั้งแต่แรกแตะลิ้น ขอแนะนำเทคนิคเล็กๆน้อยๆกับการค้นหาไฟล์ ย้าย เปลี่ยนชื่อไฟล์บน Linux

  1. จะหาไฟล์ที่มีคำว่า XXX ได้ด้วยคำสั่งง่ายๆ
  2. bash$ grep XXX *
    หรือถ้าจะเข้าไปหาถึงข้างในก็เติม -R เป็น grep -R XXXX *


  3. หาไฟล์ที่มีชื่อว่า YYY ได้ด้วยคำสั่งธรรมดาๆว่า
  4. bash$ find ./ -name YYY 
    หรือถ้าจะใช้ wildcard ให้ YYY เป็นส่วนนึงในไฟล์ก็ได้เป็น find ./ -name *YYY*


  5. แล้วถ้าหาไฟล์ที่มีส่วนนึงในชื่อเป็น XXX และมีคำว่า YYY อยู่ข้างในล่ะ?
  6. bash$ find ./ -name *XXX* -exec grep YYY -l {} \;


  7. ถ้าจะเปลี่ยนชื่อไฟล์ทั้งหมดใน directory ที่มีคำว่า DSC*.JPG เป็น dsc*.jpg ล่ะครับ?
  8. for i in `ls DSC*.JPG ¦
     grep ^D ¦
     sed -e "s/DSC//" ¦
     sed -e "s/.JPG/./"`;
     do echo mv DSC"$i"JPG dsc"$i"jpg ; done
    เอ่อ คำสั่งนี้ยาวหน่อย แล้วคำสั่งก็ไม่เหมาะจะเอาไป execute มั่วๆเพราะมีบั๊กอยู่บ้าง เหมาะใช้ใน folder ที่มี file pattern เดิมๆ อย่างไฟล์ที่ออกมาจากกล้องดิจิทัล
    อธิบายคำสั่งนิดนึงละกัน จะได้ใช้กันอย่างปลอดภัย
    ๑) เริ่มแรกเรา ls ไฟล์ในไดเร็กโทรีที่มีชื่อเชื่อว่า DSC*.JPG ก่อน
    ๒) แล้วก็เลือกเอาเฉพาะที่เริ่มต้นด้วย D
    ๓) หลังจากนั้นก็ตัดหัว (DSC) ออกด้วย sed -e "s/DSC//"
    ๔) ส่วนหางก็เอาออกด้วย sed -e "s/.JPG/./"
    ถึงตรงนี้เราได้ input อยู่ในตัวแปล $i แล้วก็ do คำสั่งได้เลย อ่อ $i ต้องใส่ "" ด้วยไม่งั้นเชลล์จะเอาไปมั่วกับ JPG และ jpg ที่ต่อท้าย

    คำเตือน: สำหรับคำสั่งนี้ แนะนำให้ do echo... ก่อน ถ้าทุกอย่างโอเคแล้วก็ค่อยเอาคำว่า echo ออก

ต้องกู้ Filesystem อีกแล้ว

คราวนี้เป็นปัญหาเรื่อง RedBoot กับ JFFS2 เซ็งมาก งานกู้ระบบเนี่ยมันยากจริงๆ ทุกคำสั่งที่จะพิมพ์ต้องคิดดีๆ แถมระบบยิ่งเล็กยิ่งกู้ยาก จะใส่ kernel append line เข้าไปโต้งๆแบบ lilo ก็ไม่ได้ ต้องมาทำ kernel ใหม่ แล้วให้มัน init=/bin/bash ถึงจะได้ command line มาแล้วก็บรรเลงเพลงสวรรค์ค่อยๆงัดไฟล์ขึ้นมาทีละไฟล์ๆ ตอนนี้กำลังทำอยู่ จะสำเร็จหรือไม่โปรดติดตาม..
RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry point
RedBoot           0x00000000  0x00000000  0x00040000  0x00000000
RedBoot config    0x01F80000  0x01F80000  0x00001000  0x00000000
FIS directory     0x01FC0000  0x01FC0000  0x00040000  0x00000000
rootfs            0x00040000  0x00040000  0x006C0000  0xA0100000
linux             0x01E80000  0xA0108000  0x00100000  0xA0108000
userfs            0x006C0000  0x006C0000  0x01780000  0xA0100000
RedBoot>
นี่คือ partition table เจ้าปัญหา สังเกตุที่ rootfs มันเข้าไปทับกับ user คือขนาดของ rootfs ต้องเป็น 0x00680000 ถึงจะถูก ไม่รู้แม่งกลายเป็น 0x006C0000 ได้ไง rootfs ที่เต็มปรี่ผสมกับเริ่ม Initialize userfs กลายเป็นตูด rootfs และ หัว userfs ทับกันส่งผลให้เกิดเหตุการณ์ filesystem corruptiong นรกแตกครั้งนี้

จุดเริ่มต้นของ rootfs 0x00040000 บวกกับขนาดของมัน 0x00680000 ได้ 0x006C0000 เป็นจุดเริ่มต้นของ userfs พอดี


ปล. เมื่อ ๒ สามเดือนก่อนเจอ file ขนาดใหญ่กว่าขนาดของ hdd ทำอะไรก็ไม่ได้ จะลบก็ไม่ได้ต้องเข้า sigle แล้วใช้ reiserfs มา rebuild-tree ใหม่หมด เสียวหน่อยต่ก็ไม่ปวดหัวท่านี้ กู้ reiserfs บน PC ลุ้นกว่านี้แต่ก็ง่ายกว่านี้เยอะเลย

blog แรกของพวกเรา

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