Programming
www.tanabutr.co.th/photobook
Qt way - 3 นาทีกับการเขียนโปรแกรม GUI ง่ายๆบนลินุกซ์
Submitted by poonlap on Tue, 2004-11-30 22:58.ว่าจะไม่เขียน Blog ต่อแล้วแต่อดไม่ได้. เขียนหน่อยแล้วกัน, เป็นการแบ่งความรู้สำหรับคนที่ต้องการเริ่มเขียนโปรแกรมด้วย Qt. อันนี้พอจะเป็นจุดเริ่มต้น (きっかけ) ได้ครับ.
ตัวอย่างต่อไปนี้เป็นการเขียนโปรแกรมด้วยภาษา C++ โดยใช้ Qt library. ในระบบที่ต้องการลองต้องมี Qt library 3.x อยู่. ถ้าเป็น Gentoo ก็ติดตั้ง Qt ได้ด้วยคำสั่ง emerge.
Code less. Create more. - Qt
Submitted by poonlap on Tue, 2004-11-30 22:54.ช่วงนี้อ่านหนังสือ C++ GUI Programming with Qt 3 อยู่เพราะมีเหตุต้องเขียนโปรแกรม C++ แบบ GUI บนลินุกซ์ (bias). ยิ่งอ่านยิ่งรู้สึกจะกลายเป็นสาวก Qt ซะแล้วเพราะรู้สึกว่าดีและสร้างโปรแกรมด้วย Qt ง่ายจริงๆ. มีแนวคิดที่ต่างจากการสร้าง GUI เรื่อง moc (meta-object complier), signal/slot (ใช้แทน callback function) ทำให้เขียนโปรแกรมได้ง่ายขึ้น.
หนังสืออ่านอยู่เป็นฉบับดาว์นโหลดแล้วเก็บไว้อ่านในรถไฟเวลาเดินทางไปทำงาน. เนื้อหาก็เหมือนกับหนังสือที่ขายแหละครับ. หลายคนอาจจะสงสัยแล้วจะขายหนังสือไปทำไม? ตอนแรกผมก็คิดอย่างนั้นเหมือนกัน. หนังสือเล่มนี้แถม CD-ROM ข้างในมี
- Qt 3.2.1 Non-Commercial Edition for Windows
- Qt 3.2.1 Free Edition for Mac OS X
- Qt 3.2.1 Free Edition for Unix/Linux with X11
- Borland C++ Builder 5 Non-Commercial Edition
- Borland C++ Builder 6 Trial Edition
- Source code for the book's examples
ถ้าคนใช้ที่ลินุกซ์โดยปรกติเช่นผมดาว์นโหลดหนังสือมาอ่านก็เพียงพอแล้ว. แต่ยิ่งอ่านแล้วอยากซื้อเพื่อเอา CD-ROM ครับ. สาเหตุที่สำคัญคืออยากใช้บนวินโดวส์ดูว่าเป็นอย่างไรและผมไม่มี compiler สำหรับบนวินโดวส์ด้วย. อีกอย่าง, ทาง Trolltech เองก็มีให้ดาว์นโหลด Qt สำหรับวินโดวส์เหมือนกันแต่ต้องการ Microsoft Visual C version 6 เท่านั้น (? ไม่แน่ใจ). แถมไม่ค่อยเปิดเผยเท่าไหร่ไม่เหมือนกับ Qt บนลินุกซ์. อย่างนี้ซื้อหนังสือดีกว่าได้ทั้งหนังสือและ Borland C++ Builder 5 มาใช้ด้วยกันเลย. มีคนเขียนสรุปการติดตั้ง Qt บนวินโดวส์ที่มากับหนังสือให้ดูแล้วด้วย.
ที่หนังสือแถม Borland C++ Builder นี่น่าจะเป็นเพราะ Borland ถือหุ้นของ Trolltech อยู่ด้วย 8.3 %. สรุปว่าหนังสือเล่มนี้ดีครับ. ดาว์นโหลดอ่านได้ฟรี, ใครอยากลองใช้ Qt บนวินโดวส์เช่นผมก็อาจจะซื้อหนังสือเป็นเล่มเก็บไว้, เป็นการระดมผู้พัฒนาซอฟต์แวร์แบบหนึ่ง, โฆษณา Qt, Borland ไปในตัว.
เคยเขียนโปรแกรม GUI บนลินุกซ์ด้วยด้วยภาษา C++ เลยเลือกใช้ Gtkmm (Gtk+ แบบใช้ C++) กับ glade (GUI builder)
เชลล์สคริปต์เบื้องต้น ตอนที่ 4 - ตัวแปรพิเศษ
Submitted by poonlap on Mon, 2004-11-29 22:53.วันก่อนพูดเรื่องตัวแปรสภาพแวดล้อมไปนี้วันนี้ขอพูดเรื่องตัวแปรพิเศษครับ.
ตัวแปรพิเศษ
ถ้าอ่าน man bash ในช่วงของ special parameters จะเห็นว่ามีตัวแปรพิเศษอยู่หลายตัว. ตัวแปรเหล่านี้โดยปรกติเชลล์จะเตรียมไว้ให้อยู่แล้วไม่ต้องสร้างเอง, และมักจะเป็นตัวแปรที่เปลี่ยนค่าไม่ได้ (read-only). ตัวแปรที่ใช้บ่อยและสำคัญๆได้แก่
เชลล์สคริปต์เบื้องต้น ตอนที่ 3 - ตัวแปรสภาพแวดล้อม
Submitted by poonlap on Thu, 2004-11-25 22:48.ตัวแปรสภาพแวดล้อม
ตัวแปรที่ใช้ในเชลล์จะมีสองแบบคือตัวแปรธรรมดากับตัวแปรสภาพแวดล้อม (environment variable). ตัวแปรสภาพแวดล้อมจริงๆแล้วก็คือตัวแปรธรรมดาแต่มีผลที่โปรแกรมที่รันในเชลล์นั้นจะสืบทอดตัวแปรสภาพแวดล้อมและค่านั้นไปด้วย. ตัวอย่างตัวแปรสภาพแวดล้อมที่เราคุ้นเคยกันเช่น PATH เป็นต้น.
เชลล์สคริปต์เบื้องต้น ตอนที่ 2
Submitted by poonlap on Wed, 2004-11-24 22:47.ต่อจากตอนที่ 1.
รันเชลล์สคริปต์
วิธีการรันเชลล์สคริปต์เหมือนเป็นเรื่องที่ไม่ต้องสอนกันแต่คนเริ่มต้นใหม่ๆอาจจะตกหลุมได้ง่ายๆ. ถ้าคุณมีเชลล์สคริปต์อยู่ในไดเรกทอรีที่ทำงานอยู่แล้วรันเชลล์สคริปต์เหมือนกับคำสั่งทั่วๆไปอาจจะเกิดข้อผิดพลาดได้.
เชลล์สคริปต์เบื้องต้น ตอนที่ 1
Submitted by poonlap on Wed, 2004-11-24 22:45.ขอเริ่มเรื่องสั้นๆแนะนำเชลล์สคริปต์เบื้องต้นไปแต่ละวันแล้วกันครับจะได้ไม่หมดมุขมีอะไรเขียนใน blog บ้าง. อาจจะเป็นประโยชน์สำหรับผู้ที่เริ่มใช้ลินุกซ์และอยากเรียนรู้ลึกไปอีกหน่อยนอกเหนือจากการใช้ desktop environment ทั่วๆไปครับ.
Firefox ICU patch ใน Gentoo
Submitted by poonlap on Fri, 2004-11-19 22:42.คุณโชครายงานมาว่าออก Firefox 1.0 ที่ลง patch ICU ไว้ตัดคำภาษาไทยในลินุกซ์ทะเลรุ่นใหม่แล้วเลยอยากมาลองกับ Firefox ใน Gentoo บ้าง. ทำแบบนี้ครับ.
- ดึงข้อมูลแพกเกจล่าสุดมาก่อน.
# emerge sync
- ดาว์นโหลด patch ไปไว้ที่ได้เรกทอรี files. รู้สึกว่ามันเป็น patch สำหรับ 0.9.2 แต่ก็น่าจะใช้ได้, ต้องลองดู.
# cd /usr/portage/net-www/mozilla-firefox/files # wget -nd ftp://ftp.opentle.org/people/mrchoke/patches/firefox-0.9.2-icu-thai-lwbr.patch
- emerge icu ก่อนถ้ายังไม่มีในระบบ.
# emerge icu
- ตรวจสอบดูว่า firefox รุ่นล่าสุดคืออันไหน.
# emerge -pv mozilla-firefox These are the packages that I would merge, in order: Calculating dependencies ...done! [ebuild U ] net-www/mozilla-firefox-1.0-r3 [1.0-r2] -debug +gnome +java +ldap -mozdevelop -moznoxft -mozsvg -mozxmlterm -xinerama -xprint 0 kB Total size of downloads: 0 kB
- ในกรณีนี้คือ 1.0-r3 เพราะฉะนั้นไปแก้ไฟล์ mozilla-firefox-1.0-r3.ebuild ที่อยู่ในไดเรกทอรี /usr/portage/net-www/mozilla-firefox. เพิ่มบรรทัด
epatch ${FILESDIR}/firefox-0.9.2-icu-thai-lwbr.patchต่อจากบรรทัด
epatch ${FILESDIR}/mozilla-firefox-1.0-kp_separator.patch - ตรงบรรทัด
mozconfig_annotate '' --enable-oji --enable-mathml
แก้เป็น
mozconfig_annotate '' --enable-ctl --enable-oji --enable-mathml
คือเพิ่มความสามารถ complex text layout ไปด้วย. จะแสดงสระไม่ลอย.
- emerge
# USER="xprint" emerge mozilla-firefox Calculating dependencies ...done! >>> emerge (1 of 1) net-www/mozilla-firefox-1.0-r3 to / >>> md5 src_uri ;-) firefox-1.0-source.tar.bz2 >>> Unpacking source... >>> Unpacking firefox-1.0-source.tar.bz2 to /var/tmp/portage/mozilla-firefox-1.0-r3/work * Applying mozilla-firefox-1.0-4ft2.patch ... [ ok ] * Applying mozilla-firefox-1.0-kp_separator.patch ... [ ok ] * Applying firefox-0.9.2-icu-thai-lwbr.patch ... [ ok ] >>> Source unpacked. ~x86 ... --enable-ctl mozilla.org default ...ดูตอนคอมไพล์ว่าต้องเป็นอย่างตัวอย่างข้างบนครับคือมีการ patch และ --enable-ctl.
- ขั้นสุดท้ายเกี่ยวกับ ctl ต้องไปแก้ไฟล์ /usr/lib/MozillaFirefox/res/fonts/fontEncoding.properties. เพิ่มบรรทัดต่อไปนี้
encoding.loma.ttf = x-thaittf-0.wide encoding.kinnari.ttf = x-thaittf-0.wide encoding.tlwgtypewriter.ttf = x-thaittf-0.wide encoding.tlwgmono.ttf = x-thaittf-0.wide encoding.purisa.ttf = x-thaittf-0.wide
ถัดจากบรรทัด
encoding.norasi.ttf = x-thaittf-0.wide encoding.garuda.ttf = x-thaittf-0.wide encoding.dbthaitext.ttf = x-thaittf-0.wide
ตรงนี้จะแก้ที่รหัสต้นฉบับก่อนคอมไพล์ก็ได้แต่ลืมครับ.
หน้าจอจะเป็นแบบนี้ครับ.

ขยายจอออกอีกนิดจะเห็นว่าตัดคำได้สวย, และสระวรรณยุกต์ไม่ลอย. ต้องขอขอบคุณคนทำ patch จริงๆNATTAPOL KRITSUTHIKUL สำหรับ patch อันนี้และคุณสัมพันธ์สำหรับ patch อันใหม่.
Two books today
Submitted by poonlap on Fri, 2004-11-05 22:31.

วันนี้ไปเจอมาสองเล่มครับ.
- Linkers and Loaders โดย John R. Levine. เขาให้อ่านฟรีฉบับที่เป็น manuscript ที่ยังไม่ได้ขัดเกลาด้วย.
- Linux Device Drivers, 2nd Edition โดย Alessandro Rubini & Jonathan Corbet หนังสือนี้ผมมีเก็บไว้ที่บ้านไม่ได้อ่านเท่าไหร่นัก. จากเว็บไซด์ที่แนะนำมีให้ดาว์นโหลดเป็น PDF ทั้งเล่มเลย. หนังสืออนุญาต (license) ของหนังสือเป็นแบบ GNU Free Documentation License ครับ.
C bookmark
Submitted by poonlap on Fri, 2004-10-29 22:27.เว็บนี้เคยอ่านเมื่อ 3-4 ปีที่แล้ว, นึกขึ้นได้เลยเอามาบุคมาร์คหน่อยครับ. ชื่อ Programming in C - UNIX System Calls and Subroutines using C ยาวจัง. ว่าจะซื้อหนังสือของ Richard Stevens หลายๆเล่มแต่ก็ไม่ได้ซื้อซะที. มีอยู่เล่มเดียวคือ Unix Network Programming เอดิชันเก่า.
Just Another Perl Hacker
Submitted by poonlap on Tue, 2004-10-26 22:23.วันนี้อ่านนิตยสารที่อ่านเป็นประจำเจอโค้ด perl แปลกๆแบบนี้ครับ.
#!/usr/bin/perl
($_,$a)=split(/\./,<DATA>);@b=(reverse)=~m@.@g;map{print $b[$_]}split(//,(reverse $a));__DATA__
!drw ,oleH.9827365432210.
ถ้ารันแล้วจะได้ผลลัพธ์เป็น
Hello, World!
ในนิตยสารเขียนไว้ว่าเป็น Just Another Perl Hacker เลยไปเปิดเว็บตามเจอที่ wikipedia ว่าเป็นการเขียนโปรแกรมภาษา perl ให้อ่านไม่รู้เรื่องแต่ผลออกมา OK.