หน้าเว็บ

วันพฤหัสบดีที่ 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

วันศุกร์ที่ 28 มกราคม พ.ศ. 2554

Grigori Perelman ผู้พิชิตโจทย์ปัญหารางวัล 1 ล้านเหรียญ

วันนี้นั่งอ่านประวัติของคนพิสูจน์ Poincare conjecture ใน wiki แล้วสนุกดีครับ

Poincare conjecture เป็นปัญหาเดียวที่มีคนแก้ได้และได้รับการยอมรับในกลุ่มปัญหา Millennium Prize Problemsที่มีอยู่ 7ข้อ (P vs NP เป็นหนึ่งในนี้) ถ้าใครแก้ข้อไหนได้จะได้รับรางวัล 1 ล้านเหรียญ

คนที่แก้ ปัญหานี้ได้ชื่อว่า Grigori Perelman เป็นนักคณิตศาสตร์ชาวรัสเซีย แต่ Perelman ปฏิเสธที่จะรับรางวัล 1 ล้านเหรียญนี้ และไม่ไปเข้าร่วมพิธียกย่องสำหรับการแก้ปัญหานี้ได้

เหตุผล ที่เค้าปฏิเสธคือ proof ของเค้านั้นก็เกิดขึ้นจาก Richard Hamilton ได้แนะนำโปรแกรมสำหรับหา solution แต่ไม่มี proof เค้าบอกว่าการ proof ของเค้านั้นไม่ได้ยิ่งใหญ่ไปกว่า Richard Hamilton ดังนั้นเค้าจึงคิดว่ามันไม่แฟร์ที่จะไม่แชร์รางวัลกับ Hamilton เลยคิดว่าการตัดสินใจที่จะมอบรางวัลนี้ให้กับเค้ามันไม่ยุติธรรม ก็เลยปฏิเสธรางวัลไป

เหตุการณ์นี้คือเมื่อปีที่แล้วที่ผ่านมา (ปี 2010) แต่ก่อนหน้านั้นในปี 2006 เค้าเคยได้รับการเสนอชื่อให้รับเหรียญรางวัล Fields Medal ของ IMU (International Mathematical Union) ซึ่งรางวัล Fields Medal ถือว่าเป็นรางวัลที่สูงสุดสำหรับนักคณิตศาสตร์ โดยจะจัด 4 ปีครั้ง ให้เหรียญรางวัล 2-4 คน ในแต่ละครั้ง แต่ Perelman ก็ปฏิเสธที่จะรับรางวัลเช่นกัน โดย Sir John Ball ได้ไปหาเค้าเองและให้ทางเลือกคือ 1. รับและไปร่วมงาน 2. รับแต่ไม่ไปร่วมงาน ถ้ารับแต่ไม่ไป จะจัดส่งเหรียญมาให้ แต่ Perelman เลือกข้อ 3 คือ ไม่รับและไม่ไปร่วมงาน สาเหตุที่ปฏิเสธคือรางวัลไม่ได้มีส่วนเกี่ยวอะไรกับเค้าเลย เมื่อทุกคนเข้าใจว่าการพิสูจน์นั้นถูกต้องเค้าก็ไม่จำเป็นต้องได้รับการยอมรับอื่นอีก เค้าไม่สนใจในเงินทองหรือชื่อเสียง เค้าไม่ต้องการเป็นสัตว์ในสวนสัตว์ เค้าไม่ใช่ฮีโร่ของคณิตศาสตร์ เค้าไม่แม้กระทั่งว่าเค้าประสบความสำเร็จ และนั่นเป็นเหตุผลที่เค้าไม่ต้องการให้ใครมาคอยจ้องมองที่เค้า

โดย ก่อนหน้ารางวัลนี้เค้าก็เคยปฏิเสธรางวัลให้ทรงเกียรติจาก European Mathematical Society โดยเหตุผลคือ เค้ารู้สึกว่ากรรมการที่ตัดสินรางวัลนั้นมีคุณสมบัติไม่ผ่านที่จะประเมินผล งานของเค้า แม้จะประเมินในทางบวกก็ตาม

ตอนเด็กๆนั้น Perelman เคยแข่งคณิตศาสตร์โอลิมปิกนานาชาติ (IMO) โดยได้เหรียญทองซึ่งเค้าสามารถทำ perfect score ได้

ใครอยากเห็นหน้าตาของ Grigori Perelman หรืออ่านประวัติส่วนอื่นๆก็ลองดูได้นะครับ http://en.wikipedia.org/wiki/Grigori_Perelman (อ้างอิงจากวันที่ 28 ม.ค. 54)

วันอาทิตย์ที่ 9 มกราคม พ.ศ. 2554

วิธี switch version ของ java บน ubuntu

ในกรณีที่เราลง java ไว้หลาย version เช่น 1.5, 1.6 แล้วเราต้องการเปลี่ยนเวอร์ชันให้ใช้คำสั่ง

sudo update-alternatives --config java

จะมีรายการ java ทั้งหมดที่มีในเครื่องขึ้นมาให้เลือก ก็ให้เลือกเลขที่ต้องการ เป็นอันเสร็จ

สามารถตรวจสอบว่าตอนนี้ version เป็นอะไรได้ด้วยคำสั่ง

java -version


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

ที่มา
http://ubuntuforums.org/showthread.php?t=655101

วิธีทำให้ Python เรียก script อื่นทำงาน (execute external script)

ถ้าเรามี script ไฟล์ python (.py) อยู่ไฟล์นึง แล้วเราอยากให้ script ไฟล์ python อีกฝ่ายมาเรียกไฟล์แรกทำงาน(คล้ายๆการ include ใน php) ทำได้ดังนี้

สมมติว่ามีไฟล์ hello.py ซึ่งมีโค้ดดังนี้อยู่
print 'hello world'


คราวนี้ในไฟล์ที่สองชื่อ run.py จะเรียกใช้ hello.py

วิธีแรก
ในไฟล์ run.py ให้ใช้คำสั่ง execfile

...
execfile('hello.py')
...


กรณีแรกนี้คือสั่งเรียกไฟล์ python อื่น แต่ว่าถ้าเราต้องการเรียก script หรือ shell command ใดๆนอกจาก python ก็ทำได้เหมือนกัน โดยใช้วิธีที่สอง

วิธีที่สอง
ในไฟล์ run.py ให้ import โมดูลชื่อ os แล้วเรียก os.system(command) เช่น

import os
...
os.system('python hello.py')
...


หรือ

import os
...
os.system('cat hello.py | grep hello')
...


สำหรับวิธีแรกจะใช้ได้กับ python-2.x แต่ถ้าเป็น python-3.x ให้ใช้วิธีตาม link นี้แทน http://stackoverflow.com/questions/436198/what-is-an-alternative-to-execfile-in-python-3-0

ระบบที่ทดสอบ
Python: 2.6.6
OS: Ubunut 10.10

ที่มา
http://stackoverflow.com/questions/1027714/how-to-execute-a-file-within-the-python-interpreter

วันศุกร์ที่ 7 มกราคม พ.ศ. 2554

วิธีตรวจสอบว่า PHP request เป็น GET หรือ POST

มีหลายๆครั้งที่เราต้องการให้โค้ด php ไฟล์หนึ่งรองรับทั้ง GET และ POST ดังนั้นจะต้องมีส่วนที่ใช้ในการตรวจสอบว่า request ที่เข้ามายังหน้าเว็บเป็นประเภท GET หรือเป็นประเภท POST วิธีทำก็ง่ายๆดังนี้

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// …
}


ระบบที่ทดสอบ
PHP: 5

ที่มา:
http://stackoverflow.com/questions/1372147/php-check-whether-a-request-is-get-or-post

วันอังคารที่ 4 มกราคม พ.ศ. 2554

วิธี FTP แต่ไม่เอา (exclude) บาง folder

มีรุ่นน้องถามมาว่าถ้าอยาก FTP เอาไฟล์แต่ว่าไม่อยากเอาโฟลเดอร์ที่มีชื่อบางอย่าง เช่น โฟลเดอร์ .svn ที่มีอยู่ในทุกๆโฟลเดอร์ย่อยมาด้วยจะทำยังไง

จริงๆก็คงทำได้หลายวิธี แต่วิธีที่ผมชอบสุดคงเป็น wget ครับ

wget -r ftp://url/folder --exclude-directories="*/foldername"


เช่น ถ้าต้องการ copy ตั้งแต่โฟลเดอร์ xyz ลงไปทั้งหมด แต่ไม่เอาโฟลเดอร์ .svn ก็ทำดังนี้

wget -r ftp://abc.com/xyz --exclude-directories="*/.svn"


ในกรณีที่ต้องมี username, password ก็ให้ execute command สำหรับการ log in ไปก่อน ดังนี้

wget --execute "login=username" --execute "passwd=password" -r ftp://abc.com/xyz --exclude-directories="*/.svn"

จริงๆพวก username, password ใส่ไว้รวมกับ ftp://username:password@abc.com/xyz เลยก็ได้ แต่จะมีปัญหาถ้า username มี special character เช่น เครื่องหมาย "@"

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

อ้างอิง
http://www.gnu.org/software/wget/manual/wget.html