-
“ทำหน้าที่ตัวเองให้ดีที่สุด” พอไหม? ลองพูดในภาษาโปรแกรมเมอร์
ถ้าความไม่มีประสิทธิภาพมันอยู่ในโปรโตคอล ถ้าความไม่ปลอดภัยมันอยู่ในวิธีการจัดการหน่วยความจำของระบบปฏิบัติการ โค้ดที่ดีที่สุดของเรา ก็มีประสิทธิภาพได้สูงสุดแค่ที่กำแพงของโปรโตคอลจะอนุญาต ปลอดภัยได้สูงสุดเท่าที่การอ่านเขียนหน่วยความจำของระบบปฏิบัติการมันจะสนับสนุน
-
NLTK corpus readers for NECTEC BEST and ORCHID corpora
ความเดิมจากตอนที่แล้ว ทดลองสร้าง corpus reader ใน NLTK ตอนนี้แก้การ encode ให้ใช้ได้กับ nltk.Text() แล้ว (แทนที่จะเก็บเป็น unicode ก็เก็บเป็น utf-8 encoded str แทน) พร้อมกับเพิ่มตัวอ่านสำหรับคลังข้อความ BEST และ ORCHID ด้วย ตัวอ่านคลัง BEST ในรุ่น 0.3 นี้ เรียกดูเป็นหมวดได้ (ข่าว วรรณกรรม สารานุกรม บทความ) เรียกดูข้อมูลกำกับขอบเขตคำ (word boundaries) ได้ แต่ยังไม่รองรับ <NE>named-entities</NE> กับ <AB>คำย่อ</AB> เนื่องจาก BEST ไม่มีข้อมูลขอบเขตประโยค ตัวอ่านคลังจะสร้างขึ้นเอง โดยสมมติ \n เป็นขอบเขตประโยค ส่วนตัวอ่านคลัง ORCHID ในรุ่น 0.3 นี้ เรียกดูข้อมูลกำกับขอบเขตคำและชนิดคำ (Part-of-Speech)…
-
playing around Thai blog corpus with NLTK
อยากจะลองเล่น NLTK กับข้อมูลภาษาไทยดู คิดไปคิดมา เอาข้อมูลจาก foosci.com มาลองดูละกัน เขาเปิดให้ใช้ เป็น ครีเอทีฟคอมมอนส์ แสดงที่มา-อนุญาตแบบเดียวกัน (CC by-sa) แต่ไม่อยากไปดึงมาเอง ขี้เกียจ เห็นว่าโครงการโรตี (อัลฟ่า) โดย Opendream ดูดบล็อกไทยจำนวนหนึ่งมาเก็บไว้ได้ระยะหนึ่งแล้ว เพื่อใช้ในการแนะนำลิงก์ (ดูตัวอย่างที่ keng.ws ที่ท้ายแต่ละโพสต์) ก็เลยเอาจากตรงนั้นมาใช้ละกัน ข้อมูลที่มีเป็น XML ที่ dump มาจาก MySQL เราก็เขียนสคริปต์ก๊อก ๆ แก๊ก ๆ ดึงเฉพาะที่อยากได้ออกมา ด้วย xml.etree.cElementTree (ตอนแรกใช้ ElementTree แตน ๆ แต่อืดเกิน เนื่องจากแฟ้มมันใหญ่) เอา HTML tags ออกด้วย Beautiful Soup แล้วตัดคำด้วย python-libthai ตัดประโยคแบบถึก ๆ ด้วย…
-
XMLHttpRequest with "lese-majeste" in the url got blocked as well – Holy CS Loxinfo
อัปเดตต่อจากกรณี Mashable.com got blocked – ความมั่วของ CS Loxinfo กับการบล็อคเว็บ จากการทดลองเพิ่มเติม พบว่า web api request (ซึ่งทำผ่าน url) ก็จะใช้ไม่ได้เช่นกัน เช่น ผมลองใช้บริการย่อลิงก์ ของ bit.ly โดยใช้ url : http://klongofconsciousness.wordpress.com/2009/01/23/dozing-german-arrested-for-lese-majeste/* ปรากฎว่า bit.ly มันเงียบครับ ไม่แสดงผลลัพธ์อะไร (ตามปกติมันจะแสดงผลลัพธ์ลิงก์ที่ถูกย่อ ในช่อง “Shortened URL”) เมื่อตรวจสอบดูก็พบว่า เมื่อกดปุ่ม “Shorten” ตัวหน้าเว็บ จะส่ง XMLHttpRequest ไปที่ http://bit.ly/api เรียกใช้บริการที่เซิร์ฟเวอร์ของ bit.ly เพื่อรับผลลัพธ์ (ตามลักษณะการเขียนโปรแกรมแบบ AJAX ซึ่งปัจจุบันนี้นิยมทั่วไป) โดยในการส่ง request ที่ว่านี้ ก็จะทำในรูปของการเรียก url ปกติ ซึ่งกรณีนี้ ก็จะเป็นในรูปแบบนี้…
-
Robocode Thailand Contest 2009
Robocode Thailand Contest 2009 การแข่งขันการเขียนโปรแกรมจาวาเพื่อควบคุมหุ่นยนต์รถถัง Robocode เป็นเกมที่แต่ละทีมจะพัฒนาโปรแกรมด้วยภาษาจาวา เพื่อควบคุมหุ่นยนต์รถถังให้ต่อสู้กันแบบอัตโนมัติ โดยแต่ละทีมไม่สามารถควบคุมหุ่นยนต์ของตัวระหว่างการแข่งขันได้ จึงเป็นเกมที่ฝึกทักษะการเขียนโปรแกรมและการนำอัลกอริทึม (algorithm) หรือวิธีการต่าง ๆ รวมถึง ปัญญาประดิษฐ์ (artificial intelligence – AI) มารวมกันเพื่อทำให้หุ่นยนต์มีประสิทธิภาพมากที่สุด เว็บไซต์วิชาการ.คอม เล็งเห็นประโยชน์ของเกม Robocode นี้ว่าจะช่วยฝึกทักษะต่าง ๆ ให้กับเยาวชนและผู้ที่สนใจ จึงร่วมกับศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ (เนคเทค) และสถาบันเทคโนโลยีนานาชาติสิรินธร มหาวิทยาลัยธรรมศาสตร์ จัดการแข่งขัน Robocode Thailand Contest 2009 เพื่อค้นหาสุดยอดทีมกับสุดยอดหุ่นยนต์ประจำปีนี้ โดยการแข่งขันในรอบคัดเลือก จะดำเนินการผ่านเว็บไซต์วิชาการ.คอม ส่วนการแข่งขันในรอบสุดท้าย ซึ่งเป็นการชิงชนะเลิศระดับประเทศ จะจัดการแข่งขันในช่วงต้นปี 2009 ภายในงานมหกรรมการแข่งขันด้านไอซีที ซึ่งดำเนินการเป็นประจำทุกปีโดยเนคเทค ผู้ที่สนใจสามารถดาวน์โหลดโปรแกรม Robocode ได้ที่ robocode.sf.net ศึกษาวิธีการพัฒนาหุ่นยนต์ได้จากบทความติว และส่งซอฟต์แวร์หุ่นยนต์ที่พัฒนาขึ้นเข้าแข่งขันได้ตั้งแต่วันนี้ โดยจะปิดรับสมัครและปิดให้อัปโหลดหุ่นยนต์ในวันที่ 20 มกราคม 2552 ที่มา…
-
download attachments from Gmail using FTP/script
(เอ เรามี Python66 ป่าวหว่า ? แบบอันนี้เขียนลง Django66 ได้ป่ะ ?) สรุปว่าเอาไปลง Pylons66 ครับ ดาวน์โหลดแฟ้มจาก Gmail ด้วย FTP (หรือสคริปต์) ง่าย ๆ ไม่ซับซ้อน แค่เรียกตัว ftp daemon (Gmail-FTP proxy) ให้ทำงาน, แล้วก็ใช้โปรแกรม FTP อะไรก็ได้ไปดึงแฟ้มมา. โดยแฟ้มที่จะดึงมาได้นั้น จะต้องเป็นแฟ้มแนบ (attachment) ที่อยู่ในจดหมายที่ติดป้ายว่า ‘ftp’. ตัวโปรแกรม ftp daemon ที่ว่านี้ คือสคริปต์ไพธอน (Python) เล็ก ๆ ที่ชื่อว่า gmailftpd.py มันอยู่ในแพคเกจ libgmail-docs ของ libgmail. ก่อนจะใช้งาน gmailftpd นี้ เราจำเป็นต้องมี libgmail กับ mechanize…
-
Developers’ Quick References
สำหรับนักพัฒนา search them all at: QuickRef.org (find as you type) want handy ones on your wall ? try these quick reference cards/cheat sheets: addedbytes.com (formerly ILoveJackDaniels.com) — regexp, mod_rewrite, game, microformats, web, javascript, dom, css, design refcards.com — editor, database, xml, software, web, telephony, typesetting DZone — jsf, struts, c#, netbeans, rss/atom, silverlight, jquery, groovy…
-
Fund raise for APC 2008
APC 2008 (Associated Programming Contest 2008) เป็นการแข่งขันเขียนโปรแกรมคอมพิวเตอร์ ภาษา C/C++ ออนไลน์ ลักษณะประมาณ Google Code Jam หรือโจทย์คอมพิวเตอร์โอลิมปิก งานนี้น้อง ๆ ทีมงานเขาจัดกันเอง ไม่ได้มีสปอนเซอร์อะไร ทำไปเพราะใจรักล้วน ๆ ก็เลยไม่ได้มีของรางวัลอะไร sugree, mk, kengggg และหลาย ๆ คนเลยคิดว่า น่าจะสนับสนุนน้อง ๆ เขาหน่อย เลยจะแจกเสื้อยืดสวย ๆ เป็นที่ระลึกความภูมิใจ ให้กับ 50 คนแรก (ดูประกาศที่ Blognone) ทีนี้จะหาเงินจากไหนดี เราก็ลงขันกันละกัน คนละนิดละหน่อย ใครอยากช่วย ก็ลงขันกันทาง Chipin ได้ครับ เท่าไหนก็ได้ (หรือจะช่วยบอกต่อก็ได้ โดยกดที่ปุ่ม ‘Copy’ ข้างล่างนี้ แล้วลอกโค้ดไปแปะที่บล็อก/เว็บบอร์ด) ไอเดียหลักของเรื่องนี้ น่าจะอยู่ที่ช่วยกันสร้างชุมชนเล็ก ๆ…
-
Processing.js – Processing in JavaScript
From the creator of jQuery, Processing.js brings Processing visualization language to JavaScript/DHTML platform. And for jQuery developers, try this Visual jQuery, an easy access jQuery API documentation. ลองเล่นดูนะครับ Processing บน JavaScript ตอนรันพวกเดโมต่าง ๆ นี่ ซีพียูอาจจะพุ่งกว่าปกติซะหน่อย แต่ก็เหมือนกับพวกเว็บ AJAX ทั่วไปครับ — ผมว่า JavaScript/DOM engine ของเว็บเบราว์เซอร์ในปัจจุบัน มันถูกใช้งานจนเกินขีดจำกัดของมันแล้ว คือตอนนั้นที่ออกแบบไม่ได้มีใครคิดว่ามันจะถูกนำมาใช้สำหรับงาน Rich Internet Application ที่มีภาพออบเจกต์ มีการโต้ตอบเยอะขนาดนี้ โครงการเว็บเบราว์เซอร์รุ่นใหม่ ๆ ก็เห็นจุดนี้และพยายามปรับปรุงประสิทธิภาพของ JavaScript engine…