19 December 2014

Kitt

slimfold soft shell wallet

Thin . Light . Strong

โดย kitty ณ 19 December 2014 17:48 GMT

16 December 2014

Kitt

A New Wheel Set

สอย Campagnolo Scirocco 35mm CX มาจนได้ ตั้งใจจะสอย Bitex แต่ของค้างที่ท่าเรืออีกนาน และ Scirocco เหลือชุดเดียวในร้าน ไม่คว้าตอนนี้ก็ไม่รู้จะมาอีกเมื่อไหร่ น้ำหนักรถลดไปเกือบครึ่งกิโล ผ่านไป 100 กม. แล้วโม่เริ่มดัง ลื่น แรง inertia เยอะขึ้น เป็นทั้งข้อเสีย คือ ออกตัวไม่พุ่ง รอบไม่ถึงก็ต้องอดทนนิด และข้อดีคือ ปั่นถึงรอบแล้ว flywheel effect ทำงาน ใช้แรงน้อย ยิงหนีง่าย เจอ head wind แล้วไม่แผ่วเร็ว โดยรวมแล้วดีมากเลย :)

โดย kitty ณ 16 December 2014 14:55 GMT

14 December 2014

LookHin

ติดตั้งและใช้งาน Tor + Vidalia บน Linux Mint

ผมเคยเขียนวิธีติดตั้งและใช้งาน Tor บน windows ไปแล้ว วันนี้มาดูการติดตั้งและใช้งาน Tor บน Linux กันบ้างครับ และเหมือนเดิมในตัวอย่างผมจะใช้ Linux Mint โดยเราจะติดตั้ง Vidalia ซึ่งจะทำให้เราจัดการกับ Tor ได้ง่ายขึ้น ผ่านโปรแกรมที่เป็นกราฟฟิก ไม่ต้องไปแก้ไขไฟล์คอนฟิกอะไรให้ยุ่งยาก

เนื่องจากเคยเขียนไปแล้วรอบหนึ่ง ฉะนั้นรอบนี้ก็มาเริ่มติดตั้งกันเลย ไม่ต้องพูดอะไรกันยาว ถ้าอยากอ่านยาวๆ ไปอ่านได้จากบทความเก่านะครับ http://www.unzeen.com/article/2629/

ทำการติดตั้ง Tor และ Vidalia

1
sudo apt-get install tor vidalia

เมื่อติดตั้งเสร็จแล้วให้ทำการเปิดโปรแกรม Vidalia ขึ้นมา แล้วคลิกเข้าไปที่ Setting
tor-vidalia-linux

คลิกเลือกที่ Sharing และเลือก Run as a client only
tor-vidalia-linux

จากนั้นคลิกที่ Advanced ในช่อง Tor Control ให้เลือกเป็น Use Unix domain socket (ControlSocket) คลิก OK เพื่อบันทึกข้อมูล

ถ้าหากในขั้นตอนนี้คลิก OK เพื่อบันทึกข้อมูลไม่ได้ แสดงว่า Tor Service ยังไม่ถูก start ขึ้นมา ให้เราทำการ start service ของ tor ด้วยคำสั่งต่อไปนี้ก่อนครับ

1
$ sudo service tor start

tor-vidalia-linux

จากนั้นคลิก Start Tor
tor-vidalia-linux

ขั้นตอนถัดไปให้ทำการคอนฟิกบราวเซอร์ให้เรียกใช้งาน Tor ในตัวอย่างผมจะใช้ Firefox นะครับ ให้เข้าไปที่ Preferences -> Advanced -> Network และทำการคลิกที่ Settings ในส่วนของ Connection
tor-vidalia-linux

ในหน้า Connection Settings ให้เลือกมาที่ Manual proxy configuration และใส่ค่าในช่อง SOCKS Host เป็น 127.0.0.1 และ port 9050
tor-vidalia-linux

เรียบร้อยแล้วครับ ให้ทดสอบเปิด URL https://check.torproject.org/ เพื่อทดสอบว่าเราใช้งานระบบของ Tor แล้วหรือยัง

โดย LookHin ณ 14 December 2014 09:42 GMT

การติดตั้ง Burg Boot Loader บน Linux Mint

จากครั้งที่แล้วที่เราได้ทำการแก้ไขหน้า GRUB Boot Loader จะเห็นว่าแก้ไขอะไรได้ไม่มาก วันนี้เราจะมาลองใช้โปรแกรมอีกตัวหนึ่งคือ Burg Boot Loader ซึ่งจะช่วยให้หน้าจอ Boot Loader ที่ใช้ในการเลือกเข้า OS ต่างๆ ในเครื่องของเราดูดีขึ้นกว่าแต่ก่อน โดยในตัวอย่างนี้ผมจะทำการติดตั้งบน Linux Mint 17.1 คิดว่าถ้าเป็น Debian หรือ Ubuntu ก็น่าจะติดตั้งแบบเดียวกันทั้งหมด

ขั้นตอนไม่ยุ่งยากครับ เริ่มจากการเพิ่ม repo เข้าไป จากนั้นก็ทำการติดตั้งได้เลย

1
2
3
$ sudo add-apt-repository ppa:n-muench/burg
$ sudo apt-get update
$ sudo apt-get install burg burg-themes

ในระหว่างติดตั้งจะมีหน้าจอขึ้นมาถามเกียวกับค่าคอนฟิกต่างๆในระบบนะครับ เราไม่ต้องแก้ไขค่าอะไรให้เรากด OK ไปให้หมดเลยครับ จนถึงหน้าจอสุดท้ายที่จะให้เราเลือก Harddisk ที่เราจะติดตั้ง MBR โดยเราสามารถเลือก Harddisk ที่ต้องการได้โดยการกด Space Bar ให้ช่องด้านหน้ากลายเป็นเครื่องหมายดอกจัน จากนั้นกด OK เป็นอันเสร็จเรียบร้อยครับ (ปกติของคนอื่นจะติดตั้งไปที่ /dev/sda แต่ของผมติดตั้งลงใน Harddisk ตัวที่ 2 เลยได้เป็น /dev/sdb นะครับ)

ถ้าหากในขั้นตอนการติดตั้ง ระบบไม่ได้ถามให้เราเลือกติดตั้ง Burg ไปที่ MBR ของ Harddisk ตัวไหน ให้เราทำการติดตั้งเองโดยใช้คำสั่งต่อไปนี้

1
$ sudo burg-install /dev/sdb

ขั้นตอนถัดไป ต้องทำการเลือก Theme และปรับความละเอียดของหน้าจอกันอีกเล็กน้อย

1
$ sudo burg-emu

เมื่อเข้าไปแล้วจะเจอหน้าจอเหมือนในรูปนะครับ ให้ทำการกด F2 เพื่อเลือก Theme
burg boot loader

หลังจากเลือก Theme เสร็จเรียบร้อยแล้ว เดียวเรามาปรับความละเอียดของหน้าจอกันต่อครับ โดยให้เข้าไปแก้ไขที่ไฟล์ /etc/default/burg ซึ่งเราจะแก้กัน 2 จุด คือ

1. เอา # หน้า GRUB_DISABLE_LINUX_RECOVERY=”true” เพื่อไม่ให้แสดงตัวเลือก Recovery
2. ทำการแก้ไขความละเอียดของหน้าจอ โดยแก้ GRUB_GFXMODE=saved เป็น GRUB_GFXMODE=1366×768 (ความละเอียดของจอตัวเองเท่าไรก็ใส่ตามนั้นนะครับ ตรงนี้แนะนำให้พิมพ์ลงไปเองนะครับ ถ้าก๊อปปี้ไปอาจจะติดอักขระพิเศษไปด้วย อาจจะทำให้ผิดพลาดได้)

1
$ sudo nano /etc/default/burg

burg boot loader

ส่วนรูปโลโกของ OS ต่างๆ ถ้าเราไม่ชอบอันที่เขาให้มา เราสามารถเข้าไปเปลี่ยนได้เองที่ /boot/burg/themes/icons นะครับ

หลังจากแก้ไขไฟล์เสร็จแล้วให้สั่ง

1
$ sudo update-burg

เพียงเท่านี้เราก็จะได้หน้าจอ Boot Loader ที่ดูดีขึ้นมาทันที อย่างของผมเลือก Theme refit และเปลี่ยนโลโกจาก Linux Mint เป็นรูปเพนกวินก็จะได้หน้าจอประมาณนี้ครับ
burg boot loader

หากต้องการกลับไปใช้ GRUB ใหม่อีกรอบ ให้ใช้คำสั่งดังนี้ครับ

1
sudo grub-install /dev/sdb

โดย LookHin ณ 14 December 2014 08:28 GMT

10 December 2014

Kitt

Skillet Sausage and Potatoes

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

โดย kitty ณ 10 December 2014 23:08 GMT

8 December 2014

LookHin

เทคนิคการใช้งานคำสั่ง wget เพื่อดาวน์โหลดไฟล์

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

1. อันนี้พื้นฐาน สั่งดาวน์โหลดไฟล์แค่ไฟล์เดียว ใช้คำสั่ง wget แล้วตามด้วย URL ของไฟล์ที่ต้องการ

1
$ wget http://www.linuxmint.com/documentation/user-guide/Cinnamon/english_17.0.pdf

2. หากต้องการเปลี่ยนชื่อไฟล์ด้วยหละก็ให้เพิ่มออปชั่น -O เข้าไป

1
$ wget -O Cinnamon.pdf http://www.linuxmint.com/documentation/user-guide/Cinnamon/english_17.0.pdf

3. จำกัดความเร็วของการดาวน์โหลดด้วยออปชั่น –-limit-rate

1
$ wget --limit-rate=200k http://www.linuxmint.com/documentation/user-guide/Cinnamon/english_17.0.pdf

4. ถ้าหากว่าโหลดไฟล์ไม่เสร็จเครื่องหยุดทำงานไปก่อน ให้เพิ่ม -c เพื่อสั่งให้โหลดต่อจากของเดิม

1
$ wget -c -O Cinnamon.pdf http://www.linuxmint.com/documentation/user-guide/Cinnamon/english_17.0.pdf

5. สั่งให้โหลดเป็นแบ็คกราวโพรเซส โดยเพิ่มออปชั่น -b โดยตัว wget จะสร้างล็อกไฟล์ชื่อ wget-log ขึ้นมา เราสามารถดูว่าโหลดถึงไหนแล้วได้จากล็อกไฟล์นี้

1
$ wget -b http://www.linuxmint.com/documentation/user-guide/Cinnamon/english_17.0.pdf

ดูล็อกไฟล์ว่าดาวน์โหลดถึงไหนแล้ว

1
$ tail -f wget-log

6. สำหรับบางเว็บไซต์ถูกจำกัดว่าจะต้องโหลดจากบราวเซอร์บางตัวเท่านั้น ให้เพิ่มออปชั่น –-user-agent เพื่อกำหนดให้เป็นบราวเซอร์ที่ต้องการ

1
$ wget --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" http://www.linuxmint.com/documentation/user-guide/Cinnamon/english_17.0.pdf

7. คราวนี้มาลองโหลดทีละหลายๆไฟล์บ้าง ให้ทำการใส่ชื่อ URL ที่ต้องการดาวน์โหลดไว้ในเท็กไฟล์ ในตัวอย่างผมตั้งชื่อว่า download-list.txt

download-list.txt

1
2
3
4
http://www.linuxmint.com/documentation/user-guide/Cinnamon/english_17.0.pdf
http://www.linuxmint.com/documentation/user-guide/Cinnamon/chinese_16.0.pdf
http://www.linuxmint.com/documentation/user-guide/Cinnamon/dutch_17.0.pdf
http://www.linuxmint.com/documentation/user-guide/Cinnamon/german_17.0.pdf

จากนั้นสั่งดาวโหลดทีละหลายๆไฟล์โดยเพิ่มออปชั่น -i แล้วตามดวยชื่อเท็กไฟล์ที่เราได้สร้างเตรียมไว้

1
$ wget -i download-list.txt

8. ต่อไปมาลองดาวน์โหลดเว็บไซต์ทั้งเว็บมาเก็บไว้ดูในเครื่องกันบ้าง โดยใช้ออปชั่น –-mirror และ ./www-local คือไดเร็กทอรี่ที่ต้องการให้เก็บข้อมูล

1
$ wget --mirror -p --convert-links -P ./www-local http://www.lookhin.com

9. คราวนี้ถ้าเราอยากได้แค่ไฟล์ที่มีนามสกุล .pdf จากเว็บไซต์ทั้งเว็บ เราก็ใช้คำสั่ง -r –-no-parent -A และตามด้วยนามสกุลของไฟล์ที่ต้องการ

1
$ wget -r --no-parent -A.pdf http://www.linuxmint.com/documentation/user-guide/

10. หากต้องการดาวน์โหลดไฟล์จาก FTP ก็สามารถทำได้เช่นกัน

1
$ wget --ftp-user=USERNAME --ftp-password=PASSWORD ftp://ftp.yourdomain.com/document/linux.pdf

โดย LookHin ณ 8 December 2014 02:16 GMT

6 December 2014

LookHin

เปลี่ยนสีตัวอักษรและใส่ภาพพื้นหลังให้เมนูของ GRUB Bootloader

ปกติแล้วหลังจากที่เราติดตั้ง Linux เสร็จเรียบร้อย เวลาที่บูตเข้าระบบจะเจอกับหน้าจอของ GRUB Bootloader ซึ่งจะมีตัวอักษรสีขาวบนพื้นดำ หรือไม่ก็จะมี background ที่ติดมากับ Linux ที่เราติดตั้ง เราอาจจะไม่ค่อยชอบมันเท่าไรแต่ก็ต้องเจอทุกครั้งที่บูตเครื่องแน่นอน หลายคนอาจจะไม่ทราบว่าเราสามารถเปลี่ยนรูป background ตรงนี้ได้ ซึ่งขั้นตอนก็ไม่ได้ยุ่งยากอะไร เดียววันนี้เรามาลองทำการเปลี่ยนดู (ผมทดลองบน Linux Mint 17.1 นะครับ เข้าใจว่าสาย debian ก็น่าจะมีวิธีการคล้ายๆกันทั้งหมด)

เริ่มแรกหาภาพที่จะเอามาใช้เป็น background กันก่อนครับ โดยให้ใช้เป็นภาพ .PNG ขนาด 640*480 pixel และสี 8-Bit อันนี้ภาพตัวอย่างของผมนะครับ ไฟล์ภาพตัวอย่าง

เมื่อได้ภาพที่ต้องการแล้วให้ทำการแก้ไขไฟล์ /etc/default/grub.d/50_linuxmint.cfg

1
$ sudo nano /etc/default/grub.d/50_linuxmint.cfg

ให้ทำการเพิ่มคำสั่ง GRUB_BACKGROUND เข้าไป โดยในตัวอย่างผมจะเอาภาพไปไว้ที่ /usr/share/backgrounds/linuxmint-qiana/grub-boot.png นะครับ

1
GRUB_BACKGROUND="/usr/share/backgrounds/linuxmint-qiana/grub-boot.png"

grub-change-background-text-color

เมื่อทำการใส่ภาพพื้นหลังเรียบร้อยแล้ว เรามาจะทำการแก้ไขสีของตัวอักษรและสีพื้นหลังให้มันเข้ากับภาพที่เราใส่เข้าไปเมื่อสักครู่นี้

1
$ sudo nano /etc/grub.d/06_mint_theme

เพิ่มบรรทัดต่อไปนี้ลงไปในส่วนของ set_mono_theme() โดยมี format เป็น สีตัวอักษร/สีพื้นหลัง แต่เราถ้าใส่พื้นหลังเป็น black มันจะเป็น transparent นะครับ งงกับมันเหมือนกัน – -‘

1
2
3
set menu_color_highlight=black/green
set menu_color_normal=black/black
set color_normal=black/black

grub-change-background-text-color

โดยสีที่เราสามารถใส่ได้มีทั้งหมดดังนี้

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
black
blue
brown
cyan
dark-gray
green
light-cyan
light-blue
light-green
light-gray
light-magenta
light-red
magenta
red
white
yellow

ขั้นตอนสุดท้ายสั่ง update-grub

1
$ sudo update-grub

grub-change-background-text-color

เรียบร้อยแล้วครับ บูตเครื่องครั้งหน้าจะเจอกับหน้าจอ GRUB Bootloader ประมาณนี้ครับ

grub-change-background-text-color

โดย LookHin ณ 6 December 2014 13:57 GMT

25 November 2014

Thep

FOSS Behind my Wedding

blog นี้เป็น blog แรกที่ผมเขียนภายใต้สถานภาพ สมรส หลังจากที่ได้เข้าพิธีแต่งงานไปเมื่อวันที่ 26 ต.ค. ที่ผ่านมา (นับถึงวันที่ 25 พ.ย. ที่เขียน blog นี้ ก็ครบ 30 วันพอดี)

ชีวิตผมซึ่งอยู่กับ ซอฟต์แวร์เสรี และ โอเพนซอร์ส อยู่แล้ว ก็เป็นธรรมดาที่จะมีสิ่งนี้เข้ามาพัวพันกับงานครั้งนี้

วีดิทัศน์

เริ่มจากการเตรียมวีดิทัศน์แนะนำตัวบ่าว-สาว ผมกับเจ้าสาวช่วยกันคัดรูปถ่ายของพวกเราตั้งแต่วัยเด็กจนโต แล้วนำมาสร้างเป็นวีดิทัศน์เล่นภาพสไลด์พร้อมเพลงประกอบ

เครื่องมือแรกที่ใช้คือ dvd-slideshow ซึ่งเป็นชุด command-line สำหรับสร้างวีดิทัศน์จากแฟ้ม spec ซึ่งเป็น text file แต่ติดปัญหาว่ามันมี error message และ gen video ไม่สำเร็จ จึงได้ file Debian #750626 พร้อมเสนอแพตช์แก้ ซึ่งเริ่มมีผลในรุ่น 0.8.4.2-3 ของ Debian

นั่นเป็นการทดลองเครื่องมือก่อน แต่เมื่อเริ่มได้รูปภาพจำนวนหนึ่งมา การจะนั่งจัดเรียงภาพด้วยการ edit text file พร้อมกับเจ้าสาวซึ่งไม่ใช่นักคอมพิวเตอร์ มันก็ลำบากอยู่ จึงได้ไปหาเครื่องมือตัวอื่น จนกระทั่งพบ imagination ซึ่งเป็น GUI โดยใช้ GTK+ 2.0 ซึ่งทำให้สามารถลากจัดลำดับรูปภาพได้ พร้อมกับมี transition ที่หลากหลายกว่า

ปัญหาเกิดขึ้นเมื่อจะ gen video กลับ gen ไม่ได้ เพราะหา FFmpeg ไม่เจอ เนื่องจาก FFmpeg ได้ถูกตัดออกจาก Debian ไปแล้ว จึงได้ไปค้นบั๊กของ Debian พบ Debian #722293 ซึ่งมีผู้รายงานไว้ และได้ forward bug ไปที่ต้นน้ำ (Imagination #78) จึงตามไปคุยและเสนอแพตช์ที่ต้นน้ำ พร้อมกลับมาแปะแพตช์ไว้ที่ Debian ด้วย

ผู้พัฒนาต้นน้ำดูจะไม่กระตือรือร้นสักเท่าไรกับแพตช์ที่เสนอ หลังจากตรวจสอบไปก็พบว่า FFmpeg ยังไม่ตาย ไม่ได้เปลี่ยนชื่อเป็น libav อย่างที่ผู้ดูแลแพกเกจใน Debian และ Ubuntu พยายามจะสื่อถึงผู้ใช้ แต่ libav เป็น fork หนึ่งของ FFmpeg ซึ่งทีม Debian เลือกมาใช้แทน แต่ในดิสโทรอื่นยังคงใช้กันอยู่ และผู้ใช้ Debian/Ubuntu บางส่วนก็ต้องการกลับไปใช้ FFmpeg เหมือนเดิม (อ่าน ตัวอย่างเรื่องเล่าสถานการณ์) และมีนักพัฒนา Debian เสนอกลับเข้ามาใหม่ จนกระทั่ง ได้เข้า experimental และ sid ในที่สุด (แต่ไม่ทัน Jessie freeze จึงไม่มีใน Jessie)

อย่างไรก็ดี ในขณะที่ผมทำวีดิทัศน์ของผมอยู่นั้น Debian ไม่มี FFmpeg ทั้งใน testing และ unstable จึงได้ผลักดันแพตช์ให้ imagination กลับมาทำงานได้ โดยเพิ่มระดับความรุนแรงของ Debian #722293 จาก important เป็น grave เพื่อให้มันกลายเป็น RC bug เพราะถึงอย่างไร FFmpeg ก็จะไม่มีใน Jessie ถ้า Debian จะออก Jessie พร้อมกับ imagination ที่ต้องการ FFmpeg มันก็จะไม่สามารถ gen video ได้เลย จนในที่สุด แพตช์ก็เริ่มมีผลในรุ่น 3.0-5 ของ Debian ส่วนที่ต้นน้ำนั้น ผมเข้าใจแล้วว่าบั๊กนี้ไม่ถือว่ารุนแรงนอก Debian/Ubuntu

เป็นอันว่า กว่าผมจะเริ่มทำวีดิทัศน์ได้ ก็ได้แก้ RC bug ใน Debian ไปแล้ว 2 bug และสามารถสร้างวีดิทัศน์ได้ตามที่ต้องการ

พิมพ์ซอง

ตัวการ์ดเชิญนั้น แน่นอนว่าผมพิมพ์เองไม่ได้ ก็สั่งร้านพิมพ์ให้ แต่การพิมพ์ชื่อแขกที่จะเชิญลงที่หน้าซองนั้น จำเป็นต้องทำระบบให้เป็นอัตโนมัติสักหน่อย

ผมเริ่มจากเขียน shell script เอง โดยอ่านรายชื่อจาก text file มาสร้างแฟ้ม LaTeX ก่อนคอมไพล์เป็น PDF ทีละราย แต่นั่นทำให้จำนวนไฟล์เยอะมาก PDF 1 แฟ้มต่อแขก 1 คน

ผมจึงมองหาวิธีทำ mail merge ใน LaTeX ดู ก็พบแพกเกจ mailmerge แต่ปรากฏว่าต้องใส่รายชื่อใน LaTeX source เลย แทนที่จะแยกออกมาข้างนอกต่างหาก กลายเป็นว่า PDF ไฟล์เดียวมีซองของแขกทุกคน ทำให้เพิ่มแขกที่จะเชิญทีละกลุ่มได้ลำบาก (คุณนึกออกไหม? เวลาที่นึกได้ว่าควรเชิญญาติคนนั้นเพิ่ม เพื่อนคนนู้นทวงการ์ดเชิญ เพื่อนที่ได้การ์ดแนะนำว่าควรเชิญคนนั้นคนนี้เพิ่มอีก ฯลฯ ผมจึงต้องเตรียมพร้อมที่จะพิมพ์ซองเพิ่มได้ตลอดเวลา)

จนกระทั่งพบแพกเกจ textmerg ที่ตอบโจทย์ของผม เพราะสามารถทำ master file ของซองเอาไว้ แล้วจัดการรายชื่อแขกในแฟ้มภายนอกต่างหาก จากนั้นสั่งคอมไพล์และจัดพิมพ์ซองทีละกลุ่ม หนึ่งกลุ่มหนึ่งไฟล์ ทำให้จำนวนไฟล์ไม่เยอะเกินไป และสามารถคัดแยกได้สะดวก ว่ากลุ่มไหนพิมพ์ซองไปบ้างแล้ว กลุ่มไหนยังไม่พิมพ์

สำหรับ LaTeX ไม่พบบั๊กอะไรครับ ใช้งานได้ราบรื่นดี รายละเอียดการใช้งานสามารถศึกษาจากเอกสารของแพกเกจได้ไม่ยาก (บน Debian ก็แค่สั่ง texdoc ชื่อแพกเกจ บนเทอร์มินัล) หรือถ้ามีเวลา ผมอาจจะเขียนวิธีการในภายหลัง

นั่นคือการใช้ FOSS ในการเตรียมงานแต่งงานของผมครับ ผ่านมาได้ด้วยดี ก็บันทึกไว้เป็นกรณีศึกษาเสียหน่อย :-)

โดย Thep (noreply@blogger.com) ณ 25 November 2014 09:08 GMT

23 November 2014

Kitt

when it happens, it happens ..

เมื่อคราวปี 49 “เคย” มีเหตุมาแล้ว มันก็เลยกลายเป็นตำนานต่อๆ กันมา

โดย kitty ณ 23 November 2014 16:35 GMT

순두부찌개

วันนี้ทำกับข้าวให้คุณนายชิม “순두부찌개” สตูว์เต้าหู้อ่อนรสจัดของเกาหลี ทำง่าย อร่อยง่าย 55+

โดย kitty ณ 23 November 2014 16:32 GMT

{AWE+PAO}

Congrats! See you both on the day.

โดย kitty ณ 23 November 2014 16:32 GMT

20 November 2014

Kitt

ซูชิ

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

โดย kitty ณ 20 November 2014 13:58 GMT

18 November 2014

Kitt

Bike Wheels

เห็นพี่ๆ ปั่นจักรยานวินเทจใช้ Campag. Shamal สวยเข้ากับรถมาก วันนี้เลยเข้าเว็บชมชุดล้อ อ่านรีวิวไปเรื่อย เริ่มอยากได้ Campag. Scirocco แต่ว่าพอดูราคาแล้ว คงได้ Bitex ไปแทน Scirocco กับ Bitex มีจุดเด่นต่างกันนิดหน่อย (ราคาก็ต่างกัน ~2-3 กิโล) Scirocco สวย แข็ง และโมเมนตัมแถวๆ 30+ km/h ดี ในขณะที่ Bitex พุ่ง ตอบสนองดี ลื่น และถ้าเลือกรุ่นที่โม่ดีแล้ว “ลื่นมากๆๆ” มีนักปั่นโพสไว้ว่า ทดสอบ Bitex ไหลลงเขา ไม่ปั่น ได้ถึง 80 กม/ชม ทางเรียบสำหรับผม ทั้งคู่น่าจะทำให้ถึง av. 35+ ได้ไม่ยาก แรงอีกหน่อยอาจจะไป 40+ ถึงเวลานั้นค่อยไปกับทีมเคียมห้วย

โดย kitty ณ 18 November 2014 00:36 GMT

20 October 2014

Kitt

Google Slides

Google Slides เวลาสั่งพิมพ์ เลือกขขนาดกระดาษไม่ได้ มันออกเป็น US Letter อย่างเดียว สืบย้อนกลับไปพบว่ามันเป็นแบบนี้มา 2 ปีแล้ว ที่ต้องการเวลานี้ใน Google Slides มี สองรายการ เลือกขนาดกระดาษเวลาพิมพ์ได้ รันเลขหน้าอัตโนมัติ ได้สองรายการนี้ก็แทบจะ cover หมดแล้ว ย้าย platform ได้เลย /me .. ชอบ snap to guide เจ๋ง และ มีประโยชน์ :)

โดย kitty ณ 20 October 2014 09:47 GMT

18 October 2014

Kitt

Coffee

เมื่อวานขณะขับรถผ่านร้านกาแฟ เกิดระลึกชาติได้ว่า ดื่มกาแฟมาตั้งแต่ มัธยมสอง แทบไม่หยุดเลย .. คำนวณหยาบๆ ก็ไม่น้อยกว่า ยี่สิบห้าปี หลังๆ ทำไมคิดอะไรเป็นเลขปีมันเยอะจัง วันก่อนนับว่าใช้ลินุกซ์นานขนาดไหนก็ร่วมยี่สิบปี นับเฉพาะเดสก์ท็อปก็สิบห้าปีแล้ว สงสัยจะเข้าสู่วิกฤติ จิบกาแฟดีกว่า :P

โดย kitty ณ 18 October 2014 18:02 GMT

17 October 2014

Kitt

KAIST/IPFGRU 2012

Oct. last year I’ve attends KAIST/IPFGRU 2012, held in Seoul and also visited friends in Busan. Here are some photo. :)

โดย kitty ณ 17 October 2014 16:54 GMT

A minute, an hour, a day, and a lifetime.

첫눈에 반하는것 … 일분 걸린다 누군가를 좋아하게 되는건 … 한시간 누군가를 사랑하게 되는 시간 … 하루 누군가를 잊는건 … 평생 걸린다 —  진주 목걸이 Love at first sight … a minute Liking someone … an hour Loving someone … a day Forgetting someone … a lifetime — Pearl Necklace

โดย kitty ณ 17 October 2014 16:18 GMT

ม.๗

ม.๗ มันคือ default ที่วางท้ายสุดใน switch หรือ else สุดท้าย ใน else-if construct command ใน default / else ต้องหยิบเอา functions ที่เคย define มาแล้ว ใช้กันมานานมาใช้ โดย pass parameter ของกรณีนี้ไปเป็น input ถ้าจำเป็น จะ wrapper / template / polymorphism อะไรก็ว่ากันไป .. #ห๊ะ

โดย kitty ณ 17 October 2014 16:18 GMT

Migrate to MariaDB

Just drop a note that I’ve just migrated from Percona to Maria DB. See if it goes well ..

โดย kitty ณ 17 October 2014 16:17 GMT

The 10-Books Quest

พี่ Theppitak Karoonboonyanan กับ Kamthorn Krairaksa แท็ก quest หนังสือสิบเล่ม ส่งงานครับ 1. วงกลมกลับหัว (อาจารย์เซน กิลเบิร์ต) + การ์ตูนเซ็น (various) อ่านช่วงที่ตามหาคำตอบบางอย่างในชีวิต เปิดหูเปิดตามากๆ 2. Foundation Series (Isaac Asimov) อ่านครบทุกภาค แต่นับแล้วก็ยังประทับใจเฉพาะภาคที่ Asimov เขียน ลึกซึ้งมาก 3. Robot Series (Isaac Asimov) I, Robot + Elijah Baley ไม่แน่ใจว่ายังเหลือภาษาไทยอีกไหม 4. Michael Bolitar Series (Harlan Coben) 5. Harry Bosch Series (Michael Connelly) 6. Kosuke Kindaichi […]

โดย kitty ณ 17 October 2014 16:17 GMT

มหกรรมหนังสือระดับชาติครั้งที่ 19

เข้า กทม. ไปบรรยายเรื่อง Cloud บ่ายแก่ๆ ว่างมาเดินงานหนังสือ มาไวไปไว คินดะอิจิยอดนักสืบ ตอนที่ 27 เสือดำจากรัตติกาล คินดะอิจิยอดนักสืบ ตอนที่ 28 โรงละครผีสิง คินดะอิจิยอดนักสืบ ตอนที่ 29 หน้ากากมรณะ คินดะอิจิยอดนักสืบ ตอนที่ 30 ปฏิทินแม่มด มิเกะเนะโกะโฮล์มส์ แมวสามสียอดนักสืบ ตอนที่ 21 สนามสอบมหาภัย มิเกะเนะโกะโฮล์มส์ แมวสามสียอดนักสืบ ตอนที่ 22 ปริศนาโฮล์มส์หนีออกจากบ้าน เอส คำสาปกลายพันธุ์ พุ่มรัก พานสิงห์ ชุด 5 คดีล่าคนเจ้าชู้ พุ่มรัก พานสิงห์ ชุด 6 คดีศพล่องหน หมดไป 1,627 บาท สบายใจละ

โดย kitty ณ 17 October 2014 16:14 GMT

16 October 2014

LookHin

เพิ่มความปลอดภัยให้ระบบล็อกอินบนเว็บด้วยการทำ 2 Step Verification

บทความนี้จะเป็นการแนะนำการใช้งาน Google Authenticator และทดสอบการทำ 2 Step Verification แบบ TOTP (Time-based One-time Password) เพื่อเป็นแนวทางในการทำระบบล็อกอินในหน้าเว็บไซต์ให้มีความปลอดภัยมากขึ้น โค้ดที่ใช้ทดสอบในบทความนี้จะเป็น PHP ที่สามารถโหลดได้ฟรีจาก Github หรือหากต้องการใช้ไลบรารีในภาษาอื่นเช่น Python, .NET หรือ HTML5 ให้ลองดูจากข้อมูลอ่างอิงจาก Wikipedia ในท้ายบทความนะครับ

อย่างแรกสุดให้ทำการติดตั้ง Google Authenticator กันก่อนครับ ถ้าใครใช้ Android หรือ iOS ก็โหลดกันจากสโตร์ของแต่ละค่ายได้เลย โดยค้นหาคำว่า Google Authenticator และทำการติดตั้งให้เรียบร้อย เมื่อติดตั้งแล้วจะได้หน้าตาประมาณนี้

Google Play
https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2

App Store
https://itunes.apple.com/en/app/google-authenticator/id388497605?mt=8

google-authenticator-2-step-verification

google-authenticator-2-step-verification

จากนั้นทำการโหลดไลบรารีจาก https://github.com/chregu/GoogleAuthenticator.php ทำการ unzip ให้เรียบร้อย เดียวเราจะใช้เฉพาะไฟล์ที่อยู่ในโฟลเดอร์ /lib

google-authenticator-2-step-verification

เขียนโปรแกรมเพื่อสร้าง Security Key ซึ่ง Key ที่ได้จะเป็นตัวอักษรภาษาอังกฤษกับตัวเลขรวมกัน 16 ตัว จากชุดตัวอักษรต่อไปนี้ “ABCDEFGHIJKLMNOPQRSTUVWXYZ234567″ เราอาจจะสุ่มออกมา 16 ตัวเองก็ได้นะครับ

1
2
3
4
5
6
7
8
9
<?php
include_once("lib/GoogleAuthenticator.php");
 
$g = new GoogleAuthenticator();
$secret = $g->generateSecret();
 
echo $secret;
 
?>

google-authenticator-2-step-verification

นำค่า Security Key ที่ได้ไปสร้าง QR Code อันนี้ใครจะทำโปรแกรมสร้าง QR Code เองก็ได้ ซึ่งผมแนะนำให้สร้างเองดีกว่าอย่างน้อย Security Key ก็จะได้ไม่หลุดออกไปที่อื่น แต่ในบทความนี้จะใช้ทดสอบการทำงานเท่านั้น ฉะนั้นผมจะสร้างจากเว็บที่ให้สร้าง QR Code แบบออนไลน์เลยนะครับ ในทีนี้ผมจะใช้ http://qrcode.kaywa.com/

โดยให้ใช้สตริงต่อไปนี้ในการสร้าง QR Code

1
otpauth://totp/LABEL?secret=SECURITY_KEY&issuer=ISSUER_NAME

LABEL = ข้อมูลที่จะแสดงในโปรแกรม Google Authenticator ว่ารหัสนี้จะใช้กับอะไร
SECURITY_KEY = Security Key ที่เราสร้างจากขั้นตอนที่แล้ว
ISSUER_NAME = ชื่อหน่วยงานของเรา

จริงๆ ทั้ง LABEL และ ISSUER_NAME เราสามารถตั้งเป็นอะไรก็ได้นะครับ

จากตัวอย่างสตริงที่จะใช้สร้าง QR Code ของผมก็จะเป็น

1
otpauth://totp/www.unzeen.com?secret=DG4WCXVUVYENHLLS&issuer=2-Step-Login

เมื่อสร้างแล้วจะได้ QR Code ออกมาประมาณนี้

google-authenticator-2-step-verification

ทำการสแกน QR Code ที่ได้ เพื่อทำการเพิ่มข้อมูลลงในโปรแกรม Google Authenticator เมื่อเสร็จแล้วจะเห็นว่ามีรหัสของเราขึ้นมาแสดงที่หน้าของโปรแกรม Google Authenticator อย่างในรูป

google-authenticator-2-step-verification

ขั้นตอนสุดท้าย เขียนโปรแกรมเพื่อทำการตรวจสอบว่ารหัสที่ป้อนเข้ามาถูกต้องหรือไม่

1
2
3
4
5
6
7
8
9
10
11
12
<?php
include_once("lib/GoogleAuthenticator.php");
 
$g = new GoogleAuthenticator();
 
if ($g->checkCode("DG4WCXVUVYENHLLS",$_GET['code'])) {
    print "YES \n";   
} else {
    print "NO \n";
}
 
?>

google-authenticator-2-step-verification

อ้างอิง:
http://en.wikipedia.org/wiki/Google_Authenticator
https://github.com/chregu/GoogleAuthenticator.php
https://support.google.com/accounts/answer/1066447?hl=en

โดย LookHin ณ 16 October 2014 05:37 GMT

14 October 2014

LookHin

การตั้งเวลาของเครื่องเซิร์ฟเวอร์ CentOS 6.5

พอดีว่าผมกำลังจะทำระบบล๊อกอินในหน้าเว็บไซต์ให้เป็น 2 Step Verification แบบ Time-based One-time Password เลยต้องทำการกำหนดค่าเวลาบนเซิร์ฟเวอร์ให้ตรงกับ NTP Server เลยถือโอกาสเอามาเขียนเก็บไว้หน่อยเป็นบันทึกช่วยจำ โดยจะลองเปลี่ยนทั้งค่า Time Zone ลองตั้งค่าเวลาเอง และกำหนดให้เซิร์ฟเวอร์ใช้ค่าเวลาจาก NTP Server ส่วนเรื่องการทำ Time-based One-time Password ไว้คราวหน้าจะเขียนอีกรอบหนึ่ง

อย่างแรกทำการตรวจสอบก่อนว่าระบบของเราตั้ง Time Zone เป็นประเทศไทยแล้วหรือยัง ด้วยคำสั่ง

1
cat /etc/sysconfig/clock

จะเห็นว่า Time Zone ปัจจุบันของเราเป็น America/New_York ซึ่งจะทำให้เวลาไม่ตรงกับเวลาในประเทศไทย
centos-set-timezone-ntp

ถ้าหากยังไม่ใช่ Time Zone ของประเทศไทย ให้ทำการเปลี่ยนด้วยการแก้ไข /etc/sysconfig/clock ให้เป็น ZONE=”Asia/Bangkok”

1
nano /etc/sysconfig/clock

centos-set-timezone-ntp

จากนั้นทำการอัพเดท Time Zone ด้วยคำสั่ง

1
tzdata-update

และทำการตรวจสอบเวลาปัจจุบัน

1
date

centos-set-timezone-ntp

หากต้องการตั้งเวลาใหม่ ให้ใช้คำสั่ง

1
date MMDDhhmmCCYY.ss

โดยความหมายของตัวอักษรแต่ละตัวดังนี้ครับ MM = month, DD = day, hh = hour, mm = minute, CCYY = 4 digit year, ss = seconds

ตัวอย่าง หากเราต้องการแก้ไขวันเวลาให้เป็นวันที่ 11 October 2014 เวลา 10.10 ก็จะสามารถสั่งได้ดังนี้

1
date 101110102014.00

หรือจะใส่แบบนี้ก็ได้เช่นกัน

1
date -s "10:10:00 October 11, 2014"

centos-set-timezone-ntp

จากนั้นเรามาลองทำการตั้งเวลาของเครื่องโดยใช้ Network Time Protocol (NTP) กันต่อเลยครับ เริ่มจากติดตั้ง package ntp กันก่อน

1
yum install ntp

centos-set-timezone-ntp

จากนั้นสั่งสตาร์เซอร์วิสและกำหนดให้ ntpd ทำงานทุกครั้งที่เปิดเครื่อง

1
2
service ntpd start
chkconfig ntpd on

centos-set-timezone-ntp

เรียบร้อยครับ เท่านี้เครื่องของเราก็จะมีเวลาที่ตรงกับ NTP Server แล้วครับ

โดย LookHin ณ 14 October 2014 05:20 GMT

4 October 2014

Thep

Thanks

ไม่ได้ blog ขอบคุณผู้สนับสนุนเสียหลายเดือน แม้จะได้อัปเดตหน้า ขอบคุณ มาตลอด แต่ด้วยเวลาที่มีจำกัด จึงพยายามใช้ในการทำงานให้เต็มที่ครับ ก็ขออนุญาตขอบคุณย้อนหลัง 5 เดือนกันเลย

ขอขอบคุณย้อนหลัง สำหรับผู้สนับสนุนงานพัฒนาซอฟต์แวร์เสรีของผมในช่วงเดือนพฤษภาคม-กันยายนที่ผ่านมา คือ:

ขอขอบคุณผู้สนับสนุนทุกท่าน การสนับสนุนของท่านช่วยให้ผมสามารถเจียดเวลามาทำงานพัฒนาได้โดยไม่ต้องกังวลเรื่องการเงินจนเกินไป ก็ขอให้ทุกท่านมีความสุขกับซอฟต์แวร์เสรี และขอให้เจริญก้าวหน้าในหน้าที่การงานนะครับ

ช่วงที่ผ่านมา นอกจากงานที่ได้เขียน blog บันทึกมาเป็นระยะแล้ว ก็ยังมีงานแปล GNOME, Debian, Xfce ที่ยังคงทำเป็นระยะเช่นเคย โดยยังได้เข้าร่วม ทีมไทย ใน Translation Project เพิ่มเติมด้วย (เริ่มที่ leafpad ตัวเดียวก่อน เพื่อเรียนรู้ระบบ)

และในช่วงเดือนกันยายนที่ผ่านมา ผมก็ได้รับคำท้า IceBucketChallenge จากพี่โดมทาง FB โดยผมเลือกที่จะแปรคำท้าเป็น Iceweasel Challenge ด้วยการบริจาคแพตช์ให้ Firefox/Iceweasel ซึ่งผมได้เลือก Bug #425915 ว่าด้วยการวิเคราะห์ขอบเขตของคำไทยในข้อความทั่วไป ซึ่งจะส่งผลถึงการเลื่อนเคอร์เซอร์ทีละคำ, การเลือกคำด้วยดับเบิลคลิก, การส่งคำให้ระบบอำนวยความสะดวกแก่ผู้บกพร่องทางกายภาพ (accessibility) ฯลฯ ปรากฏว่าบั๊กนี้ไม่หมูอย่างที่คิดครับ นับแต่แพตช์แรกจนถึงวันนี้ก็ปรับแก้มาเรื่อย ๆ จนผ่านไป 1 เดือนก็ยังไม่แล้วเสร็จ แล้วผมค่อยเขียน blog เล่าในโอกาสต่อไปนะครับ

โดย Thep (noreply@blogger.com) ณ 4 October 2014 08:05 GMT

21 September 2014

Sothorn

การตั้งค่าต่างๆ บน CentOS 7

หมวดหมู่: 

เช่น hostname locale date time ฯลฯ

โดย sothorn ณ 21 September 2014 14:31 GMT

เปลี่ยน runlevel บน CentOS7 ด้วย systemd target

หมวดหมู่: 

ต้องการดูว่า ปัจจุบัน runlevel อะไร

$ systemctl get-default
graphical.target

หากต้องการเปลี่ยน runlevel ให้ใช้คำสั่ง

systemctl set-default name.target

โดยที่ name ดูได้จากตารางด้านล่าง

เช่นเปลี่ยนเป็น runlevel3

# systemctl set-default multi-user.target

 

หากต้องการเข้า rescue mode ในขณะที่ทำงานอยู่ ให้ใช้คำสั่ง

# systemctl rescue

 

Comparison of SysV Runlevels with systemd Targets

Runlevel Target Units Description
0 runlevel0.target,
poweroff.target
Shut down and power off the system.
1 runlevel1.target,
rescue.target
Set up a rescue shell.
2 runlevel2.target,
multi-user.target
Set up a non-graphical multi-user system.
3 runlevel3.target,
multi-user.target
Set up a non-graphical multi-user system.
4 runlevel4 .target,
multi-user.target
Set up a non-graphical multi-user system.
5 runlevel5.target,
graphical.target
Set up a graphical multi-user system.
6 runlevel6.target,
reboot.target
Shut down and reboot the system.

 

 

 

อ้างอิง : https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/index.html

โดย sothorn ณ 21 September 2014 13:31 GMT

2 September 2014

Thep

swath 0.5.3

swath 0.5.3 ออกแล้วเมื่อวานนี้ รุ่นนี้เป็นการปรับพจนานุกรมตามหลัง การอัปเดต TeX hyphenation pattern ซึ่งปรับตามพจนานุกรมของ LibThai 0.1.21 อีกทอดหนึ่ง แต่พร้อมกันนี้ก็มีการเปลี่ยนแปลงอย่างอื่นที่น่าสนใจด้วย

คุณ +Sorawee Porncharoenwase รายงานมาใน Google+ ส่วนตัวว่าพบบั๊ก 2 ตัวใน swath เมื่อใช้งานกับ plain text:

บั๊กแรกนั้น ความจริง swath จองที่ไว้สำหรับบรรทัดยาวถึง 2000 อักขระ ซึ่งข้อความตัวอย่างที่คุณ Sorawee ให้มาก็ไม่ได้เกินนั้น เมื่อตรวจสอบก็พบว่ามาจากโค้ดส่วนอ่าน-เขียน UTF-8 ที่จองบัฟเฟอร์ไว้รองรับแค่ 1 ไบต์ต่ออักขระ ในขณะที่ UTF-8 ต้องการถึง 6 ไบต์ต่ออักขระใน extreme case จึงได้จองเนื้อที่ไว้ให้เพียงพอ ก็แก้ปัญหาได้

บั๊กที่สอง มีวิธีแก้ได้สองวิธี คือเข้าไปล้วงในอัลกอริทึมตัดคำระดับล่างของ swath เลย หรือแก้ที่ตัวอ่าน token เพื่อให้ส่งเฉพาะภาษาไทยเข้าสู่อัลกอริทึมตัดคำเท่านั้น ผมเลือกอย่างหลัง ด้วยเหตุผลสองประการ:

  1. โค้ดระดับล่างของ swath นั้น เป็นโค้ดที่คนเขียน (ซึ่งไม่ใช่ผม) อ่านรู้เรื่องคนเดียว และไม่ได้ออกแบบให้รองรับการปรับเปลี่ยนอะไรมากนัก การเข้าไปแตะโค้ดส่วนนี้จึงเสี่ยงเกินไป
  2. ใน file filter ทั้งหลาย ทั้งสำหรับ LaTeX, HTML และ RTF ต่างก็ใช้วิธีส่งเฉพาะ token ภาษาไทยไปให้อัลกอริทึมตัดคำทั้งนั้น ในขณะที่ส่วนจัดการ plain text กลับส่งเข้าไปทั้งก้อนโดยไม่แยก การแก้ส่วนจัดการ plain text ให้ทำงานแบบเดียวกันจึงดูสมเหตุสมผล

และก่อนที่จะออก swath ในแต่ละรุ่น ผมพยายามจะทำความสะอาดโค้ดไปทีละนิด สำหรับรุ่นนี้ สิ่งที่ทำคือตัดโค้ดที่ไม่ได้ใช้งานทิ้ง ได้แก่โค้ดส่วนทำ shaping ภาษาไทยใน LaTeX filter ซึ่งไม่มีการเรียกใช้มานานมากแล้ว ตั้งแต่มี thailatex (ซึ่งปัจจุบันคือ babel-thai ใน CTAN) ที่รองรับการทำ shaping ผ่าน virtual font มาตั้งแต่ต้น เมื่อตัดโค้ดส่วนนี้ไป ก็ทำให้ขนาดของโปรแกรมที่ strip แล้วลดลงประมาณ 4 KiB

นอกจากนี้ ก็ได้ปรับข้อความใน man page นิดหน่อยด้วย หลังจากที่ thailatex เปลี่ยนเป็น babel-thai มาระยะหนึ่งแล้ว (ประกาศเมื่อปีกลาย) ก็กล่าวถึง babel-thai ให้เหมาะสม

อัปโหลดเข้า Debian Sid แล้วครับ คุณควรจะเจอแพกเกจใหม่ตั้งแต่เมื่อเช้าแล้วแหละ

โดย Thep (noreply@blogger.com) ณ 2 September 2014 07:10 GMT

23 August 2014

Udomsak

Docker Linux Container

You should to know what is or not about Docker.


https://news.ycombinator.com/item?id=8212908


Docker Release version 1.2  
https://blog.docker.com/2014/08/announcing-docker-1-2-0/



โดย udomsakc (noreply@blogger.com) ณ 23 August 2014 07:21 GMT

21 August 2014

Thep

LibThai 0.1.21

LibThai 0.1.21 ออกแล้ว โดยรุ่นนี้ นอกเหนือจากการปรับพจนานุกรมตัดคำตามปกติ ก็ยังมีการเพิ่มสมรรถนะของตัวตัดคำเล็กน้อยด้วย

ตอนที่ยกเครื่องตัวตัดคำของ LibThai เขียนใหม่เมื่อ 8 ปีที่แล้วนั้น (การประเมินผลขณะ merge เข้า trunk) ก็ได้คิดเผื่ออัลกอริทึมแบบอื่นไว้ขณะออกแบบเหมือนกัน กะว่าอาจมาปรับเพิ่มในอนาคต แต่ก็ไม่ได้กลับไปดู จนมาถูกกระตุ้นด้วยการเปิดไฟล์ HTML บางไฟล์ด้วย Firefox/Iceweasel แล้ว พบว่าใช้เวลานาน จึงได้เอาความคิดนี้มาปัดฝุ่นใหม่ โดยพยายาม refactor โค้ดเตรียมรองรับอัลกอริทึมอื่นไว้

และก็ได้คิดออกแบบอัลกอริทึมแบบ longest matching ดู โดยอาศัยโครงจากอัลกอริทึม maximal matching ปัจจุบัน แต่ขณะสำรวจและวิเคราะห์โค้ดเดิม ก็กลับเกิดไอเดียที่จะลดขั้นตอนของโค้ดเดิมขึ้นมาแทน

ผมใช้ callgrind วัดเวลาที่ใช้ในฟังก์ชันต่าง ๆ ก็พบว่าฟังก์ชันที่กินเวลามากที่สุดคือ brk_recover_try() ซึ่งใช้สำหรับหาจุด recover จากคำที่ไม่อยู่ในพจนานุกรม จึงพยายามมุ่งมาลดขั้นตอนในฟังก์ชันนี้

ผมมีสมมุติฐานมากมาย ตั้งแต่การลดการ assign การคัดลอก และการตรวจค่าเล็ก ๆ น้อย ๆ ที่ไม่จำเป็นออก ไปจนถึงการปรับกระบวนการคิดของอัลกอริทึม แล้วก็ต้องโยนทิ้งไปหลายเรื่อง เพราะบางเรื่องเอาเข้าจริงกลับทำให้ใช้เวลาเพิ่มขึ้น มีเพียงเรื่องเดียวที่ทำให้ลดเวลาได้อย่างจริงจัง คือการปรับวิธีตรวจสอบจุด recover จากการ match คล้ายการตัดคำปกติ มาเป็นการ match แบบละโมบ (greedy) โดยพยายาม match คำให้ได้มากคำที่สุดสำหรับแต่ละทางเลือกที่หยิบออกมา ซึ่งมีผลทำให้พบคำตอบได้อย่างรวดเร็วในกรณีที่จุดนั้นสามารถ recover ได้ อีกทั้งไม่ต้องไปเสียเวลาเลือกทางเลือกมาพิจารณาให้มากเกินไป เพราะจุดประสงค์ของการ recover ก็แค่พิจารณาว่าแต่ละจุดสามารถ recover จาก error ได้หรือไม่เท่านั้น ไม่ได้ต้องการ solution ที่สวยงามว่า recover แล้วต้องได้การตัดคำที่ดีที่สุด

ความจริงแนวคิดนี้ก็เคยทำไปแล้วตั้งแต่รุ่นแรก ๆ ด้วยการหยุดทันทีที่พบคำตอบแรก ไม่ต้องไปสนใจลองคำตอบอื่น แต่ครั้งนี้ได้เร่งให้พบคำตอบแรกเร็วขึ้นไปอีก

แนวคิดอื่นที่ยังทำไม่สำเร็จก็เช่น ลดจำนวนการ recover ลง, ลดขนาดของ search space ลง, ทำ cut-off แต่ไว้ค่อยคิดต่อไป รวมถึงการสร้างอัลกอริทึมแบบอื่นด้วย แต่ตอนนี้ขอออกรุ่นที่ปรับสมรรถนะเล็กน้อยนี้ก่อน ให้ทันใช้ใน Jessie ที่กำลังจะ freeze ในเดือนตุลานี้ โดยถือหลัก ออกเนิ่น ๆ ออกถี่ ๆ (release early, release often) เพื่อให้ตัวไลบรารีถูกทดสอบแต่เนิ่น ๆ ด้วย

สำหรับสมรรถนะตัวตัดคำที่เพิ่มขึ้นในรุ่นนี้ วัดเวลาจากกรณีทดสอบโดยใช้ callgrind:

คิดเป็นเวลาที่ลดลง = 2.50%

แต่นี่นับรวมทั้งหมดตั้งแต่เปิดพจนานุกรม, ตัดคำ, ปิดพจนานุกรม ซึ่งเวลาที่ใช้เกี่ยวกับพจนานุกรมนับเป็นสัดส่วนที่มากเอาการอยู่ และเป็น fixed cost ที่เกิดเพียงครั้งเดียวเท่านั้นตลอดโพรเซสที่เรียกตัวตัดคำของ libthai ดังนั้น ผมจึงวัดเวลาที่ใช้ในการเปิด-ปิดพจนานุกรมมาหักลบใหม่:

เมื่อหักลบเวลาเปิด-ปิดพจนานุกรม จะเหลือเวลาสำหรับช่วงตัดคำจริง ๆ คือ:

คิดเป็นเวลาที่ลดลง = 7.93%

หรืออัตราเร็วที่เพิ่มขึ้น = 1 / (1 - 0.0793) - 1 = 0.0861 หรือ 8.61%

โดย Thep (noreply@blogger.com) ณ 21 August 2014 10:07 GMT

6 August 2014

Udomsak

บันทึกส่วนตัว

ปูมบันทึก บันทึกตามเวลาโลก


วันที่  6  เดือน สิงหาคม พุทธศักราช 2557  เวลาประมาณ สี่ทุ่มครึ่ง เปลียน Status relation ship บน facebook  เป็น


In Reletionship  กับ  "ใครสักคน"  ที่ไม่มีใครรู้จักหน้าตา  วาเป็นใครที่ไหน ยังไง


มาพร้อมกับ  33 Like


เปลียนทั้งที่ไม่รู้ว่าจะเป็นอย่างไรต่อไป ปล่อยให้เป็นเรื่องของในอนาคต แค่ทุกวันนี้มีความสุข ก็พอใจแล้ว


ทำวันนี้ให้ดีที่สุด  :)    

#me  





โดย udomsakc (noreply@blogger.com) ณ 6 August 2014 16:56 GMT