หน้าเว็บ

วันศุกร์ที่ 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