หน้าเว็บ

วันเสาร์ที่ 10 กันยายน พ.ศ. 2554

วิธีแก้ไข Metadata Title ของไฟล์ PDF

ถ้ามีไฟล์ pdf แล้วอยากแก้ไข metadata เช่น Title ของไฟล์สามารถทำได้ง่ายๆโดยใช้ Tool ชื่อ exiftool

เวลาใช้งานก็สั่งดังนี้
exiftool -Title="New Title" filename.pdf

วันพุธที่ 1 มิถุนายน พ.ศ. 2554

วิธีใช้ latex สร้างไฟล์ pdf โดยให้ embed font ติดไปด้วย

ผมมีปัญหาว่าเขียนไฟล์ .tex (latex) แล้วพอจะคอมไพล์เป็นสกุล .pdf แล้วมันไม่ยอม embed font บางตัวติดไปให้ โดย font ส่วนใหญ่ที่ไม่ embed ติดไปให้นั้นจะเป็น font พวก Base 14 ได้แก่
ผมจึงนำวิธีที่แก้ไขปัญหานี้มาเขียนไว้ครับ (ผมใช้ latex, dvips, ps2pdf)

1. ทำการคอมไพล์ไฟล์ .tex ให้ได้เป็นไฟล์ .dvi
latex filename.tex

2. หลังจากนั้นแปลงไฟล์ .dvi ให้เป็นไฟล์ .ps
dvips filename.dvi

3. สุดท้ายก็แปลงเป็น .pdf
ps2pdf -dPDFSETTINGS=/printer -dEmbedAllFonts=true filename.ps


จุดสำคัญคือข้อ 3 ครับ ตรง -dPDFSETTINGS ถ้าเกิดผมไม่ใช่ option นี้เข้าไป ตรงส่วน -dEmbedAllFonts จะไม่ทำงาน ซึ่งผมคิดว่าค่า default ของ -dPDFSETTINGS ในเครื่องผมเป็น screen ไม่ใช่ printer ซึ่ง screen จะทำให้ EmbedAllFonts เป็น false โดยอัตโนมัติ

สำหรับการตรวจสอบว่า Font ได้ถูก embed เข้าไปรึยังนั้นให้ใช้คำสั่ง
pdffonts filename.pdf
โดยดูชื่อ Font ที่ใช้ และดูที่คอลัมน์ emb ว่าเป็น yes

ส่วนวิธี embed font ด้วยโปรแกรมและระบบปฏิบัติการอื่นดูเพิ่มเติมได้จาก
http://www.sas.upenn.edu/computing/help/students/dissertation-pdf



ระบบที่ทดสอบ
OS: Ubuntu 11.04
latex: TexLive 2009 (pdftex 3.1415926-1.40.10-2.2)
dvips: 5.98
ps2pdf: 9.01

ที่มา
http://www.sas.upenn.edu/computing/node/1225/
http://ismir2005.ismir.net/pdf.html

วันจันทร์ที่ 23 พฤษภาคม พ.ศ. 2554

Double.NaN == Double.Nan ได้ false !!!

วันนี้เพิ่งรู้ว่า Double.NaN == Double.Nan จะได้ค่าเป็น false เสมอ (ทดสอบในภาษา Java)

ขอสรุปวิธีแก้ปัญหาไว้ตรงนี้เผื่อคนขี้เกียจอ่านครับ
ถ่าจะทดสอบว่าค่าหนึ่งๆเป็น NaN รึเปล่าจะใช้ x == Double.NaN ไม่ได้ แต่สามารถใช้ Double.isNaN(x) ได้แทน (ภาษา Java)


ส่วนคำอธิบายขอก๊อปปี้จาก twitter ตัวเองมาแปะตามลำดับเวลาล่ะกัน (ขี้เกียจเรียบเรียงเช่นกัน :P)

- ที่ไม่เท่ากันเกิดจากคอมไพเลอร์ทำตามมาตรฐาน floating point IEEE 754 ที่บอกว่า NaN ไม่เท่ากับ NaN

- จริงๆแล้ว bit pattern ที่ represent ค่า NaN นั้นไม่ได้มีค่าเดียว แต่มีเป็น range เลย

- โดย Double.NaN จะไปเรียกเมธอด Double.longBitsToDouble(0x7ff8000000000000L) ซึ่ง 0x7ff8000000000000L เป็น bit pattern หนึ่งที่เป็นไปได้

- ซึ่งถ้าดูผิวเผินแล้วเหมือนว่า Double.NaN กับ Double.NaN ก็น่าจะได้ค่าเดียวกัน เพราะส่ง bit pattern เดียวกันเข้าไป

- (เสริม NaN มี 2 แบบถ้า bit ขึ้นต้นด้วย 0 คือ signaling NaN (sNaN)ถ้าขึ้นต้นด้วย 1 คือ quiet NaN (qNaN) ดังนั้น 0x7ff8000000000000L คือ sNaN)

- ซึ่งถ้า sNaN ถูกกระทำการทางคณิตศาสตร์แล้วค่าจะเปลี่ยนเป็น qNaN ซึ่งค่าไม่เท่าเดิม

- ในขณะที่บางโปรเซสเซอร์ เพียงแค่มีการ copy ค่า (ในระดับโปรเซสเซอร์) ก็จะทำการแปลงค่าทันที

- นอกจากแปลงประเภทแล้ว bit pattern ก็อาจเปลี่ยนไปใน range ของ NaN ที่มีอยู่

- ดังนั้นการเรียก Double.NaN หรือ Double.longBitsToDouble(0x7ff8000000000000L) ก็อาจจะได้ค่า NaN ในรูปแบบ double ที่มีbit patternไม่เหมือนเดิม

- ดังนั้นถ่าจะทดสอบว่าค่าหนึ่งๆเป็น NaN รึเปล่าจะใช้ x == Double.NaN ไม่ได้ แต่สามารถใช้ Double.isNaN(x) ได้แทน (ภาษา Java)

อ้างอิง
Javadoc
- http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Double.html#NaN
- http://download.oracle.com/javase/6/docs/api/java/lang/Double.html#longBitsToDouble(long)

IEEE 754 Standard
- http://en.wikipedia.org/wiki/IEEE_floating-point_standard
- http://en.wikipedia.org/wiki/NaN
- http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4610935&con=yes&userType=inst

วันศุกร์ที่ 20 พฤษภาคม พ.ศ. 2554

วิธีตรวจสอบ encoding ของไฟล์บน Ubuntu

ในกรณีที่เราอยากรู้ว่าไฟล์นั้นมี encoding เป็น UTF-8, TIS-620 ฯลฯ นั้นสามารถทำได้โดยใช้คำสั่งนี้

file -bi filename

ระบบจะบอกประเภทไฟล์ และ encoding ของไฟล์มาให้ เช่น

text/x-php; charset=utf-8

หมายถึงประเภทไฟล์คือไฟล์ที่เป็นข้อความประเภท php และมี encoding เป็น utf-8 เป็นต้น


ระบบที่ทดสอบ
OS: Ubuntu 11.04

วันพฤหัสบดีที่ 5 พฤษภาคม พ.ศ. 2554

บีบไฟล์ (Compress) PDF สำหรับ Ubuntu

ถ้ามีไฟล์ PDF ซึ่งมีขนาดใหญ่มากและต้องการบีบอัดให้มีขนาดเล็กลง ขอแนะนำตัวนี้ครับ PDF Compress https://launchpad.net/compress-pdf โดยจะทำงานในรูปแบบของ Nautilus Script นั่นคือสามารถคลิกขวาที่ไฟล์แล้วสั่งงานได้เลยไม่ต้องเปิดโปรแกรมเพิ่มครับ

ที่ผมลองใช้กับไฟล์ PDF ที่มีแต่รูปขนาดใหญ่ๆรวมกัน 800MB สามารถลดลงมาได้เหลือ 700KB ครับ

วิธีการติดตั้ง
1) ดาวน์โหลดจาก https://launchpad.net/compress-pdf
2) ทำการแตก zip ไฟล์ออกมา (tar zxvf Compress-PDF-1.x.tar.gz)
3) เอาไฟล์ Compress PDF ที่แตกออกมาไปไว้ใช้ ~/.gnome2/nautilus-scripts

วิธีการใช้งาน
1) คลิกขวาไฟล์ที่ต้องการทำการบีบอัด แล้วเลือก สคริปต์ (Scripts)-> Compress PDF
2) เลือกระดับการบีบอัด (ความเล็กของไฟล์ แลกมากับ ความละเอียดของรูปหลังการบีบอัด)
3) บันทึกไฟล์ไว้ที่ที่ต้องการ

ระบบที่ทดสอบ
Compress PDF: 1.4
OS: Ubuntu 11.04 with Unity

ที่มา
https://launchpad.net/compress-pdf

ป.ล. เนื่องจากเป็น Nautilus Script ดังนั้นรองรับ GNOME แต่ไม่รู้รองรับ KDE รึเปล่า

ป.ล. 2 มีอีกเทคนิคนึงคือใช้ pdf2ps ในการแปลงไฟล์ไปเป็น .ps (postscript) ก่อนแล้วค่อยใช้ ps2pdf แปลงกลับมาเป็น pdf ก็จะมีขนาดเล็กลงมาก
ตัวอย่าง
pdf2ps original.pdf middle.ps
ps2pdf middle.ps compressed.pdf

ที่มา http://pandemoniumillusion.wordpress.com/2008/05/07/compress-a-pdf-with-pdftk/

วันพฤหัสบดีที่ 3 มีนาคม พ.ศ. 2554

เหตุผลที่แนะนำให้ใช้ Mozilla Firefox หรือ Google Chrome

วันนี้ได้ทำการส่งอีเมลให้ความรู้เกี่ยวกับ IE, Firefox และ Chrome กับบุคลากรในสำนักงานนวัตกรรมแห่งชาติ จึงเอามาแชร์กันไว้ที่นี่ด้วยครับ
---------------------------------------------------------------------------------------------
เหตุผลที่ฝ่าย IT แนะนำให้ใช้ Mozilla Firefox หรือ Google Chrome

หลายท่านในสำนักงานคงคุ้นเคยกับการที่ฝ่าย IT พยายามผลักดันให้ใช้ Firefox หรือ Chrome แทน Internet Explorer (IE) ของ Microsoft นะครับ ซึ่งก่อนจะอธิบายเหตุผลในแง่ความสามารถแล้ว ผมอยากให้ดูสถิติการใช้งาน Web Browser ตั้งแต่ปี 2008 - 2011 http://gs.statcounter.com/#browser-ww-monthly-200807-201102

จากสถิติแสดงให้เห็นว่า IE นั้น คนทั่วโลกใช้งานน้อยลงเรื่อยๆ (45.44%) โดยมี Firefox (30.37%) และ Chrome (16.54%) ที่กินส่วนแบ่งมาได้ (โดยเฉพาะ Chrome ที่กำลังมาแรงมาก) โดยถ้าดูในทวีปยุโรปจะเห็นว่ามีคนใช้ Firefox มากกว่า IE แล้ว http://gs.statcounter.com/#browser-eu-monthly-200807-201102

ส่วนอีก 2 ประเทศที่น่าสนใจคือเวียดนาม http://gs.statcounter.com/#browser-VN-monthly-200807-201102 กับ ไทย http://gs.statcounter.com/#browser-TH-monthly-200807-201102 มีการใช้ IE (44.14% กับ 72.28%) มีการใช้ Firefox (39.62% กับ 15.07%) (ตัวเลขแรกคือเวียดนาม ตัวที่สองคือไทยครับ)


แล้วทำไมคนทั่วโลกถึงได้มีอัตราการใช้ IE ที่ลดลงเรื่อยๆ?

ที่เห็นได้ชัดสุดผมอยากให้ลองดูการวัดประสิทธิภาพโดยเว็บ Six Revisions ซึ่งเป็นเว็บที่มีชื่อเสียงในด้านการให้ความรู้เกี่ยวกับการพัฒนาเว็บ ไซต์ http://sixrevisions.com/infographs/browser-performance/ และเว็บ CybernetNews http://cybernetnews.com/browser-comparison-internet-explorer-firefox-chrome-safari-opera/
จะเห็นได้ว่า IE 8 ซึ่งเป็นตัวปัจจุบันมีประสิทธิภาพแย่กว่า Web Browser ตัวอื่นมาก ไม่ว่าจะเป็นในแง่ ความเร็วในการเปิดหน้าเว็บ การใช้งาน CPU หรือปริมาณ RAM ที่ใช้ก็ตาม

แต่ที่สำคัญคือในเรื่องการปฏิบัติตามมาตรฐานเว็บไซต์ จากการทดสอบด้วยชุดทดสอบ Acid3 คะแนนเต็ม 100 Firefox 3.5 ได้ 93 Chrome 3 ได้ 100 แต่ IE 8 ได้เพียง 20 ซึ่งประเด็นนี้ทำให้นักพัฒนาเว็บทั้งหลายปวดหัวกันมาก เพราะสร้างเว็บตรงตามมาตรฐานแต่ถ้าเปิดด้วย IE กลับเปิดแล้วเพี้ยนหรือเปิดไม่ขึ้น ดังนั้นนักพัฒนาจึงต้องทำเว็บหลายเวอร์ชันให้รองรับกับสิ่งที่ไม่ใช่มาตรฐาน (เว็บไซต์ nia.or.th ก็ทำทั้งรูปแบบที่รองรับ IE และ Web Browser อื่นที่ได้มาตรฐาน แต่ในขณะที่เว็บไซต์ที่ใช้กันเองภายในเพื่อเป็นการประหยัดเวลาจึงเน้นพัฒนา ตามมาตรฐานก่อน เพราะสามารถควบคุมการใช้งาน Web Browser ได้)

แล้วทำไมคนส่วนใหญ่ยังใช้ IE กันอยู่?
เหตุผลง่ายๆเหตุผลหนึ่งคือ IE แถมติดมากับ Windows ครับ โดยเฉพาะ Windows XP ที่แถม IE 6 มาให้ ซึ่งอายุของ IE 6 ก็ร่วมทศวรรษแล้ว (เริ่มปี 2001) ถึงกับมีบางเว็บตั้ง campaign ต่อต้าน IE 6 เลยทีเดียว (http://www.ie6nomore.com/) ในยุโรปถึงกับออกใช้มาตรการป้องกันการผูกขาดโดยให้ผู้ใช้สามารถเลือก Browser ได้เองตอนลง Windows ครั้งแรก

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

แต่ก็น่ายินดีที่ในอนาคต IE 9 ของ Microsoft ที่กำลังจะออกมาในเร็วๆนี้ในสนใจที่จะทำตามมาตรฐานเว็บมากขึ้น และได้พัฒนาประสิทธิภาพที่ดีขึ้นมาก มาช้ายังดีกว่าไม่มานะครับ

แล้วถ้า Browser ตัวใหม่ของแต่ละค่ายออกมาเมื่อไหร่จะมาเล่าสู่กันฟังอีกทีนะครับ
---------------------------------------------------------------------------------------------------

วันอาทิตย์ที่ 13 กุมภาพันธ์ พ.ศ. 2554

วิธีแปลงรูปเป็นภาพวาดดินสอด้วย GIMP (Image to pencil drawing)

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

1. เปิดไฟล์ภาพขึ้นมา
2. ให้ทำการ duplicate layer ของภาพนี้ขึ้นมาอีกอัน
3. ใน layer ที่ duplicate ขึ้นมา ให้ไปที่ Color (สี) -> Colorize (ธาตุสี-ความอิ่มสี) แล้วปรับ Saturation ให้เป็น -100 เพื่อลบสีออกก่อน
4. ให้ทำการ duplicate layer ที่ไม่มีสีนี้เพิ่มขึ้นมาอีกอัน (กลายเป็นมี 3 layer)
5. ใน layer ใหม่ให้ไปที่ Filter (ฟิลเตอร์) -> Blur (มัว) -> Gaussian Blur แล้วปรับ Blur Radius ให้เป็น 4.0 ทั้ง vertical และ horizontal และ Blur method ใช้เป็น RLE
6. ไปที่ Color (สี) -> Invert (กลับสี) แล้วไปปรับ opacity (ความทึบแสง) ของ layer นี้เป็น 50%
7. ทำการ merge layer นี้กับ layer อันด้านล่าง (อันก่อนนี้)
8. แล้วทำการ duplicate layer ใหม่นี้อีกครั้งนึง และปรับ mode ของ layer ใหม่นี้เป็น dodge เป็นอันเสร็จเรียบร้อย

แต่ถ้าทำแล้วรู้สึกว่าเส้นดินสอมันจางไป ให้ทำเพิ่มดังนี้
9. merge layer ใหม่กับ layer อันด้านล่าง
10. duplicate layer นี้อีกครั้ง และปรับ mode ของ layer ใหม่เป็น multiple เส้นจะเข้มขึ้น
11. ถ้ายังเข้มไม่พอก็ให้ทำ step 9-10 ใหม่จนกว่าจะพอใจ

ระบบที่ทดสอบ
OS: Ubuntu 10.10
GIMP: 2.6.10