ทำแม็กกาซีนออนไลน์ด้วย MegaZine3

เมื่อวันก่อนมีเด็กฝึกงานกรมที่ดินขึ้นมาที่สำนักงานมาถามเรื่องโปรแกรม ทำ E-Book ชื่อ Flip Book บอกว่าที่สำนักงานแจกโปรแกรมฟรีเล่นเอางงกันไปเลย ผมเองไม่ค่อยมีความรู้เรื่องนี้เท่าไร ก็เลยได้ลองค้นหาโปรแกรมแนวๆ นี้มาลองเล่นดูบ้าง ซึ่งโปรแกรมที่คล้ายๆ Flip Book มีหลายตัวมาก วันนี้ผมจะมาแนะนำ MegaZine3 ครับ
MegaZine3 เป็นโปรแกรมใช้สร้าง E-Book ประกอบไปด้วย Flash Script สำหรับไปติดตั้งบนเว็บ และโปรแกรมสร้างไฟล์ข้อมูลหนังสือ ซึ่งโชคร้ายโปรแกรมสร้างไฟล์ข้อมูลหนังสือมันไม่ support linux 😛 แต่ไม่เป็นไรครับ ทาง MegaZine3 ได้แนะนำทางออกให้ 2 ทางคือ ใช้ SWFTools ในการแยกไฟล์ PDF ไปเป็นไฟล์ Flash หรือใช้ ImageMagick ในการแยกไฟล์ PDF ไปเป็นภาพ ซึ่ง MegaZine3 สามารถสร้างหน้าหนังสือจากภาพและไฟล์ Flash ได้
ดูตัวอย่าง
หนังสือเปิดโลกโอเพนซอร์ส
มาลงมือกัน เริ่มจากสร้างไฟล์เอกสารของเรามาก่อนบน OpenOffice.org Writer ครับดังนี้

จากนั้นดาวน์โหลด MegaZine3 มาครับ คลี่ไฟล์ออกจะพบ folder แบบนี้

ให้คุณสร้างไดเรคทอรี data ลงในไดเรคทอรี megazine จากนั้น export ไฟล์หนังสือของเราจาก OpenOffice.org Write ไปเป็น PDF ใส่ลงในไดเรคทอรี data ที่เราเพิ่งสร้างเมื่อกี้ จากนั้นเราจะใช้ ImageMagick แยกไฟล์ PDF ไปเป็นไฟล์ภาพกันครับ
ไฟล์ PDF ที่ได้ผมใช้ชื่อว่า mybook.pdf ให้เราใช้เครื่องมือจาก ImageMagick ดังนี้ (ใครมีวิธีที่ดีกว่านี้ก็สามารถเลือกวิธีของคุณได้นะครับ ไม่บังคับ)

convert mybook.pdf mybook-%d.jpg

เราจะได้ไฟล์ mybook-0.jpg ไปจนถึง mybook-15.jpg ตามจำนวนหน้าของหนังสือครับ

จากนั้น แก้ไขไฟล์ megazine.mz3 ซึ่งเป็นไฟล์ข้อมูลหนังสือที่เป็นรูปแบบ XML ดังนี้
ใน element book ให้เพิ่ม attribute ดังนี้

<book
pageheight="842"
pagewidth="595"
bgcolor="0xCCCC99"
pagethickness="0.3"
maxloaded="10"
minscale="0.3"
plugins="backgroundsounds, batchpages,navigationbar, gallery, overlays, titles, anchors, swfaddress, links, keyboardnavigation, slideshow, options"
>
<foreground>
<box background="image(gui/engine/poweredby.png)" width="160" height="45" anchors="pw-w,ph-h" url="http://www.megazine3.de/" target="_blank"/>
</foreground>
<chapter>
<page stiff="true" anchor="cover">
<img src="data/mybook-0.jpg" aa="true" width="595" height="842"/>
</page>
<page>
<img src="data/mybook-1.jpg" aa="true" width="595" height="842"/>
</page>
<page>
<img src="data/mybook-2.jpg" aa="true" width="595" height="842"/>
</page>
<page>
<img src="data/mybook-3.jpg" aa="true" width="595" height="842"/>
</page>
...
<page>
<img src="data/mybook-15.jpg" aa="true" width="595" height="842"/>
</page>
</chapter>
</book>

เปิดไฟล์ index.html เพื่อดูผลลัพท์ได้เลยครับ จะได้ผลลัพท์ดังนี้

หรือจะดู online ได้ที่เว็บไทยโอเพนซอร์ส ลองเอาไปประยุกต์ใช้กันดูได้ครับ

แก้ปัญหา DOS บน Apache

ปัญหา DOS และ Brute Force Attack เป็นปัญหาที่หลายๆ คนอาจได้พบบ้าง แต่ถ้า DDOS ก็ตัวใครตัวมันครับ 😛 ปัญหาเหล่านี้เป็นปัญหายอดนิยม โดยเฉพาะเครื่องที่โดน Attack มักจะมีของสำคัญๆ อยู่ในนั้น เช่น รูปภาพ, ไฟล์ข้อมูล หรือ ตกเป็นเป้าเพื่อใช้ยืมเครื่องไปยิงเครื่องอื่นๆ ต่อ ซึ่งวิธีการที่ยอดฮิดมากคือการยิงผ่านช่องโหว่ของ Web Application ที่เราใช้ๆ กันอยู่อย่างเช่น CMS, โปรแกรมจัดการฐานข้อมูล เป็นต้น หากวัตถุประสงค์เพื่อก่อกวนให้ Apache ทำงานไม่ได้ หรือเครื่องเซิร์ฟเวอร์ทำงานไม่ได้ มักจะโดน DOS หรือ DDOS แต่เราสามารถป้องกันเหตุการณ์เหล่านี้ได้ โดยใช้ fail2ban ครับ
มาวิเคราะห์สถานการณ์กันก่อน คำถามที่ต้องถามตัวเองคือ เราจะทราบได้อย่างไรว่าเครื่องไหน IP อะไรเข้าข่าย attack เราบ่อยครั้ง ? คำตอบง่ายๆ ก็ดู log หน้าเว็บที่ถูกเรียก และปริมาณของ package ที่ส่งเข้ามา ยกตัวอย่างเช่น เว็บ ABC โดน DOS โดยมีเครื่องคอมพิวเตอร์ไม่ซ้ำ IP เปิดเว็บหน้าหนึ่งซึ่งพยายามจะดาวน์โหลดไฟล์ xxx.exe ที่ไม่มีอยู่ในเครื่องเซิร์ฟเวอร์ของ ABC เลย ถ้าอย่างนี้เรียกโดน 2 เด้ง แสดงว่าเซิร์ฟเวอร์(เคย)มี trojan ฝังอยู่ และเครื่องที่ติด trojan หรือ virus ก็พยายามขยายตัวเองออกไปยังเครื่องอื่นๆ อย่างนี้เว็บ ABC ก็จะมี traffic จำนวนมหาศาลดาวน์โหลดไฟล์ xxx.exe นี้ หากเรามาพิจารณา log ไฟล์ จะพบ Error 404 ที่เรียกไฟล์ xxx.exe ดังนี้

...
220.191.231.206 - - [05/Mar/2007:11:50:20 +0100] "GET http://www.abc.com/xxx.exe HTTP/1.0" 404 534 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
...

หาดูที่ log จะพบว่า เครื่องที่เรียกไฟล์ xxx.exe นี้มาจาก IP Address 220.191.231.206 หากมีการ attack นิดเดียว เราสามารถใช้ iptables มา band IP Address นี้ได้ แต่ถ้ามีมากจนนับไม่ได้นี่ก็ต้องใช้เครื่องมือช่วยครับ นั่นคือ fail2ban นั่นเอง ในส่วน config ไฟล์ชื่อ jail.conf เราสามารถใช้ regular expression ในการจัดการ filter ข้อมูลใน log ไฟล์ที่เราต้องการได้ ในที่นี้คือ IP ของเครื่องปลายทางที่เรียกไฟล์ xxx.exe นั่นเอง เราก็จะสามารถเพิ่ม config ให้ fail2ban ได้ดังนี้

[apache-trojan-xxx]
enabled = true
filter = ^<HOST> - .*GET.*/xxx\.exe
logpath = /var/log/apache/access.log
maxretry = 6

แค่นี้เราก็ได้วิธีการ band เครื่องที่เป็นปัญหาแล้ว 🙂 ลองเอาไปประยุกต์ใช้กันดูนะครับ

ติดตั้ง Gnome Shell ใช้กัน

เนื่องจากกระแส Ubuntu Unity แรงมาก ในขณะที่โครงการคล้ายๆ กันอย่าง Gnome Shell เสียงแผ่วๆ ลง Gnome Shell มาพร้อมกับ Gnome 3 เป็น Windows Manager ตัวใหม่ที่สามาถทำงานแบบ Composit Manager ได้ในตัว มีลูกเล่นแพรวพราว ซึ่งทาง Gnome แนะนำว่า Windows Manager ตัวนี้เจ๋งที่สุดแล้ว แต่ทว่ากระแสของ Unity ที่พัฒนามาพร้อมๆ กันออกจากแรงมากกว่า หลังจากการสนับสนุน Composit Manager ที่เราคุ้นเคยอย่าง Compiz และยังมีการพัฒนาร่วมกับ Compiz เพื่อให้การแสดงผลของ Unity มีความสวยงามและราบรื่นมากขึ้น ทำให้กระแสของ Gnome Shell แผ่วลงไปทันที และเป็นที่แน่นอนแล้วว่า Ubuntu ไม่เอา Gnome Shell และไม่มีการบรรจุ Gnome Shell ลงใน Ubuntu 11.04 อย่างแน่นอน ทำให้เราๆ ท่านๆ ที่อยากใช้ของใหม่อย่าง Gnome Shell ทำใจไม่ได้ วันนี้เลยมาแนะนำวิธีติดตั้ง Gnome Shell กันครับ
วิธีนี้เป็นวิธีการ Build Gnome Shell จากซอร์สโค้ด แต่ไม่ต้องห่วงครับเรามี script ให้ใช้ดังนี้ ก่อนอื่นติดตั้ง jhbuild กันก่อน

sudo apt-get install jhbuild

จากนั้นเอา script มาครับ

wget http://git.gnome.org/cgit/gnome-shell/plain/tools/build/gnome-shell-build-setup.sh

สั่ง run script เพื่อสร้างตัวติดตั้งดังนี้

chmod +x gnome-shell-build-setup.sh
./gnome-shell-build-setup.sh
jhbuild

จากนั้นใช้ jhbuild สั่ง build ได้เลย เมื่อรอจน Build เสร็จเราสามารถเรียกใช้ Gnome Shell ได้โดยใช้คำสั่ง

~/gnome-shell/source/gnome-shell/src/gnome-shell --replace

 

จำกัดจำนวนการเชื่อมต่อให้ Apache ด้วย mod_limitipconn

หลายท่านที่ใช้บริการดาวน์โหลดไฟล์ในโครงการ Suriyan, Chantra, ThaiOS และเอกสารใน pub.thaiopensource.org อาจสงสัยว่าทำไมดาวน์โหลดไฟล์ยากจัง? และดาวน์โหลดได้เพียงไม่กี่กิโลไบต์ สาเหตุมาจากการใช้งานที่ท่วมท้นของสมาชิกทำให้เน็ตเวิร์คภายใน SIPA เดี๊ยง ถึงเดี๊ยงที่สุด 😛 และทีมงาน Thai Open Source ก็โดนดุตามระเบียบ ก็เลยทำให้มีการแจ้งย้ายแหล่งดาวน์โหลดทั้งหมดไปไว้ที่ pub.thaiopensource.org และทำการ shape bandwidth ด้วย mod_cband เพื่อให้ Apache คุม bandwidth ของเว็บที่ให้ดาวน์โหลดไว้ ให้วิ่งไม่กี่กิโลไบต์ ทำให้ลดเรื่องการใช้ bandwidth เกินกำลัง แต่ปัญหาที่ตามมาคือ ไฟล์ iso ขนาด 1.5GB ใช้เวลาดาวน์โหลดประมาณ 9 วัน T_T ใช่ครับ 9 วัน ไร้สาระมากๆ และระยะเวลายิ่งนานผู้ใช้ก็ยิ่งซอยชิ้นของไฟล์ให้มากขึ้น และคิดว่ามันจะช่วยให้ดาวน์โหลดเร็วขึ้นซึ่งนั่นคิดผิดครับ 😛 ผมก็เลยตัดสินใจ กดเครื่องคิดเลขและเปลี่ยนมาจำกัดจำนวนการเชื่อมต่อของแต่ละ IP ให้ Apache แทน ซึ่งมีวิธีการดังนี้
เครื่องมือที่เรานำมาใช้จำกัดจำนวนการเชื่อมต่อของแต่ละ IP ชื่อ mod_limitipconn ซึ่งเจ้าตัวนี้สามารถกำหนดไดเรคทอรี และชนิดของไฟล์ที่เราต้องการจำกัดจำนวนการเชื่อมต่อได้ ยกตัวอย่างเช่น เว็บไซต์ http://pub.thaiopensource.org/suriyan-archive ในไดเรคทอรี suriyan-archive ทั้งหมดผมต้องการจำกัดการเชื่อมต่อเพื่อดาวน์โหลดไฟล์ iso ที่อยู่ในนั้น เราก็สามารถทำได้ มาดูของจริงกันครับ Continue reading จำกัดจำนวนการเชื่อมต่อให้ Apache ด้วย mod_limitipconn

ใช้ OpenOffice.org ทำหนังสือทำมือ (Booklet)

ผมจำได้ว่าเคยเขียนวิธีการใช้ OpenOffice.org Writer ระดับเซียนไปแล้วเมื่อหลายปีก่อน วันนี้จะมาแนะนำ การใช้งาน OpenOffice.org Writer อีกเช่นเคย แต่เป็นการทำหนังสือทำมือหรือ Booklet ถ้านึกไม่ออกว่าเป็นยังไงให้นึกถึงหนังสือสวดมนต์เล่มเล็กๆ เย็บด้วยแม็กตรงกลางแล้วพับครึ่ง อย่างนี้เขาเรียกว่า Booklet ครับ เนื่องจากแฟนผมหาวิธีทำหนังสือทำมืออยู่ระยะหนึ่งซึ่งพยายามมาก พยายามแม้กระทั่งอยากจะหัดใช้ Adobe Indesign เลยทีเดียว ถึงแม้ว่า Microsoft Office 2007 ที่ซื้อมามันก็สามารถทำได้ แต่ด้วยความหงุดหงิดก็เลยหาวิธีทำ Booklet บน OpenOffice.org Write บ้าง แหมโปรแกรมโอเพนซอร์สระดับโลกขนาดนี้ทำไม่ได้ก็เชยแล้วล่ะครับ ผมลองทำออกมาแล้วได้หน้าตาแบบนี้ครับ
booklet
วิธีการทำมีดังนี้ครับ ให้คุณพิมพ์เอกสารตามปกติ ใส่เลขหน้าปรับแต่งให้สวยงามดังภาพ

จากนั้น ตั้งค่าเครื่องพิมพ์ให้กำหนดหน้าเป็น Brochure

แล้วก็สั่งพิมพ์หน้า-หลัง พับกลางแล้วเย็บแม็กได้เลยครับ 🙂 ง่ายมั๊ย

1 อาทิตย์กับ Ubuntu, LMDE, Debian

ผมพยายามที่จะสร้าง Linux Distribution ตามที่ใจต้องการ ซึ่ง Suriyan ไม่ได้ตอบสนองความต้องการของผมมากนัก แต่พอลองไล่ Distribution ที่ติดอันดับ 1-5 ของ ditrowatch ที่พัฒนามาจาก Debian ก็พบว่า ไม่มี Distribution ไหนที่ตอบความต้องการของผมได้เท่า Ubuntu (และ Fedora แต่ Fedora ไม่ใช่ Debian Based น่ะ) ซึ่งเงื่อนไขที่ผมก้าวข้ามไปไม่ได้คือการอัพเดทได้ตลอดชีพ ซึ่งขัดกับการพัฒนา Linux Distribution ในปัจจุบัน ซึ่งทะยอยออกทีละหลายๆ รุ่นใน 1 ปี ซึ่งผมมองว่ามันออกเร็วไปหน่อย 😛 แต่ release often ก็เป็นกลยุทธหนึ่งในการกระตุ้นการพัฒนาและทำการตลาดได้เป็นอย่างดี ซึ่งทุกๆ Distrition ก็เป็นแบบนี้ ไม่เว้นแม้กระทั่ง Fedora เอาเป็นว่าจาก 1 อาทิตย์ที่ผ่านมา จากการทดสอบ ทดลองผมสรุปได้ดังนี้
LMDE

  • live-initramfs ถูกแก้ไขจนหาไม่เจอ
  • ใช้ package จาก 3 คลังหลักๆ ได้แก่ debian, linuxmint และ debianmultimedia
  • live-installer คล้ายๆ กับ Ubiquity ของ Ubuntu รุ่นก่อนๆ
  • package หลายตัว patch โดยทีมงานของ LinuxMint ทำให้ไม่ค่อยเหลือเค้าโครงของ Debian มากนัก

Debian

  • มี debian-live-installer แล้ว เหมือนกับ debian installer ปกติ
  • ในเวอร์ชั่น 6 โปรแกรมยังเก่าอยู่มาก
  • live-initramfs พัฒนาต่อจาก casper แต่ดูโค้ดแล้วแปลกๆ
  • unstable, testing ยังไงก็ยังเก่ากว่า trunk ของแต่ละ project มากๆ
  • เอา live-installer ของ LinuxMint มาใช้ได้

Ubuntu

  • เพิ่มมีโครงการประหลาดๆ มากขึ้นอย่าง Unity
  • บางโปรเจคมีเฉพาะใน Ubuntu อย่างเช่น Jockey แต่ port ไป Distro อื่นไม่ได้
  • อาจจะต้องใช้เวลากับ Ubuntu เยอะพอสมควร แต่คงน้อยกว่า Debian เยอะ
  • การแก้ปัญหาเรื่อง repo ในแผ่นเป็นเรื่องที่ดี และการใส่เป็น local repo ใน image ก็เป็นเรื่องที่ยิ่งดีกว่า

ที่ผมพยายามหาทาออกให้ตัวเองก็เพราะว่า ผมต้องการพัฒนา Linux Distribution ที่จริงๆ จังๆ มากกว่าที่ Suriyan เป็นอยู่ในตอนนี้ ซึ่งยังดูครึ่งๆ กลางๆ ระหว่าง Ubuntu หรือ Suriyan ซึ่งการต่อยอดในด้านภาษาไทยและความพร้อมของโปรแกรมที่มีใน Suriyan นั้นพัฒนาไปไกลมาก จนทำให้คิดว่าน่าจะทำเป็น Linux Distribution แบบเต็มที่ได้แล้วแต่ก็คงไปไม่รอดเท่าไร เพราะมีกันอยู่ 2 คนคงทำอะไรไม่ได้มากน่ะครับ เอาเป็นว่าคงกลับมาใช้ Ubuntu เหมือนเดิม แต่คงต้องลงลึกในรายละเอียดของ package มากขึ้นกว่านี้

Suriyan แยกสายการพัฒนา

ผมได้มีโอกาสได้ร่วมพัฒนา Suriyan มากว่า 4 รุ่น แต่ยังไม่สามารถแยกขาดจาก Ubuntu หรือใช้แนวทางการพัฒนา Distribution ในแบบที่ผมต้องการได้ ทำให้รู้สึกว่าเป็นงานหนักทุกครั้งที่ต้องคอย build ทุกๆ 6 เดือน และตอนนี้ SIPA เองก็ยังไม่สามารถบอกได้ว่าโครงการ Suriyan จะเดินหน้าต่อไปอย่างไร สำหรับผมแล้วการแยก Suriyan ออกมาอีก 1 รุ่นเพื่อเป็นทางเลือกสำหรับการใช้งานแบบไม่ต้องตามเวอร์ชั่น ไม่ต้องติดตั้งกันทุกครั้งที่ออกรุ่นเป็นเรื่องที่น่าสนใจ และง่ายในการจัดการ ส่งผลการจัดการทำได้ง่ายขึ้น ซึ่ง Suriyan ในแบบที่ผมต้องการอยากให้เป็นแบบ rolling release ส่วนการออกรุ่นสามารถออกตอนไหนก็ได้ ตามกำหนดระยะเวลาหรือไม่ตามระยะเวลาได้เช่นกัน สำหรับแผนการพัฒนาคงออกมาเร็วๆ นี้ คงจะได่เอามาเล่าใหฟังในครั้งหน้า

ติดตามคลังซอฟต์แวร์บน Thai Open Source

สืบเนื่องจากการย้ายเครื่องเซิร์ฟเวอร์จาก CAT IDC เนื่องจากเครื่องเซิร์ฟเวอร์ใช้แบนด์วิธเกินจนปัญหาเรื่องแบนด์วิธเต็ม จึงได้ย้ายเครื่องเซิร์ฟเวอร์เข้ามาอยู่ใน Data Center ของ SIPA เพื่อใม่ให้เกิดผลกระทบอื่นๆ ตามมา หลังจากย้ายเข้ามาอยู่ที่ Data Center ที่ SIPA ได้ 3-4 เดือน ก็พบว่าปริมาณการใช้แบนด์วิธของเครื่องมากจนเกิดผลกระทบกับการให้บริการ อินเตอร์เน็ตภายในของ SIPA ดังนั้นทีมงานจึงขอย้ายไฟล์ในโครงการต่างๆ ไม่ว่าจะเป็น Suriyan, Chantra, ThaiOS, Mekha เป็นต้น ย้ายไปยังคลังซอฟต์แวร์กลางใช้ชื่อโดเมนเป็น http://pub.thaiopensource.org เพื่อให้การจัดการทำได้สะดวกยิ่งขึ้น คุณสามารถติดตามการพัฒนาซอฟต์แวร์โอเพนซอร์สในโครงการต่างๆ ภายใต้การดูแลของ Thai Open Source และพันธมิตรได้เช่นเดิมและง่ายมากขึ้นอีกด้วย