ถ้าความไม่มีประสิทธิภาพมันอยู่ในโปรโตคอล ถ้าความไม่ปลอดภัยมันอยู่ในวิธีการจัดการหน่วยความจำของระบบปฏิบัติการ โค้ดที่ดีที่สุดของเรา ก็มีประสิทธิภาพได้สูงสุดแค่ที่กำแพงของโปรโตคอลจะอนุญาต ปลอดภัยได้สูงสุดเท่าที่การอ่านเขียนหน่วยความจำของระบบปฏิบัติการมันจะสนับสนุน
Tag: programming
แปะ embed ง่าย ด้วย oEmbed
oEmbed is a format for allowing an embedded representation of a URL on third party sites. The simple API allows a website to display embedded content (such as photos or videos) when a user posts a link to that resource, without having to parse the resource directly.
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) ได้ แต่ยังไม่รองรับขอบเขตย่อหน้า และยังเรียกดูเป็นรายเอกสารไม่ได้ (รุ่นนี้ทำงานกับคลัง ORCHID แบบที่ถูกเอา document-related metadata ออกไป)
ดาวน์โหลด & ติดตั้ง
แพ็คเกจ rotic รุ่น 0.3 ซอร์สโค้ดเผยแพร่ด้วยสัญญาอนุญาต GNU GPLv2 ตาม NLTK – ดาวน์โหลด rotic-0.3.tar.gz
วิธีติดตั้ง อ่าน README.TXT และ INSTALL.TXT – อย่าลืมดาวน์โหลดคลังข้อความมาติดตั้งด้วย รายละเอียดและสัญญาอนุญาตของข้อมูลแต่ละชุด อยู่ใน CORPORA.TXT
มีคำแนะนำอะไร เขียนมาบอกกันได้ครับ อยากจะลองทำให้มันเอาไปใช้ในการเรียนการสอนได้ – ไม่เฉพาะสำหรับนักเรียนคอมพิวเตอร์เท่านั้น แต่สำหรับนักเรียนภาษาศาสตร์ ฯลฯ ด้วย
ตอนนี้ความเร็วไม่ค่อยดีเท่าไหร่ โดยเฉพาะการโหลดตัว ORCHID ซึ่งใหญ่มาก ส่วนหนึ่งเป็นเพราะโค้ดยังซ้ำซ้อนอยู่หลายจุด เช่นตรงการแปลง utf-8 ที่น่าจะทำได้ตั้งแต่ระดับแรก ๆ ที่อ่านเข้ามาเลย ไม่ใช่มาแปลงเอาตอนหลัง-ต้องวนลูปอีกหนึ่งครั้งแบบขณะนี้ โค้ดยัง refactor ได้อีกเยอะ ใครคล่อง Python ก็ช่วยดูหน่อยนะครับ ผมแค่พอเขียนไถ ๆ ได้ ขอบคุณครับ 🙂
ตัวอย่างจาก example.py
1. พิมพ์ข้อความมั่ว ๆ ขึ้นมาจากตัวแบบ n-gram ที่สร้างจากคำในคลัง foosci :
foosci_text = nltk.Text(foosci.words())
foosci_text.generate()
ผลลัพธ์ :
… ซึ่ง ทฤษฎี สรุป ความรู้ ของ เรา เอา ไส้เดือน ไป ปล่อย ใน พื้นที่ ๆ มี ความ สงสัย ระหว่าง ความ เชื่อ เรื่อง มิติ ใหม่ นี้ …
2. พิมพ์ คำ/ชนิดคำ จาก 5 ประโยค
แรกของคลัง ORCHID
โปรดสังเกตว่า เราใช้ชุดชนิดคำ (POS/tagset) แบบง่าย สามารถสลับชุดชนิดคำได้โดยสลับค่า simplify_tags :
for sent in orchid.tagged_sents(simplify_tags=True)[0:5]:
print "[",
for (word, tag) in sent:
print word + "/" + tag,
print "]"
ผลลัพธ์ :
[ การ/FIX ประชุม/V ทาง/N วิชาการ/N /PUNC ครั้ง/C ที่_1/DETN ]
[ โครงการวิจัยและพัฒนา/N อิเล็กทรอนิกส์/N และ/CONJ คอมพิวเตอร์/N ]
[ ปีงบประมาณ/N /PUNC 2531/N ]
[ เล่ม/C /PUNC 1/DETN ]
[ ศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ/N ]
3. หาค่าการกระจายของสองคำ การ
และ ความ
ใน 4 หมวดของคลัง BEST
โปรดสังเกตว่า ตรงคำที่เราจะป้อนเข้าไปให้ฟังก์ชั่นต่าง ๆ ของ NLTK เราจะแปลงมันเป็น utf-8 encoded str ก่อน :
cfd = nltk.ConditionalFreqDist(
(genre, word)
for genre in best.categories()
for word in best.words(categories=genre))
genres = ['news', 'encyclopedia', 'novel', 'article']
prefixs = [w.encode("utf-8") for w in [u'การ', u'ความ']]
cfd.tabulate(conditions=genres, samples=prefixs)
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 ตัดประโยคแบบถึก ๆ ด้วย .split(‘\n’) จะได้ข้อมูลออกมาหน้าตาประมาณนี้ (จะเห็นว่าข้อมูลมันไม่ได้สมบูรณ์มาก มีแท็ก HTML โผล่มาด้วย-อันนี้เป็นที่ข้อมูลป้อนเข้าที่ dump มา) :
<?xml version="1.0" encoding="utf-8"?>
<roti>
<entry id="4947" url="http://www.foosci.com/node/401" ...>
<tags> <tag>LHC</tag> <tag>quantum physics</tag> ... </tags>
<title> <w>บิดา</w> <w>ของ</w> <w>อนุภาค</w> ... </title>
<content>
<s> <w>p</w> <w>นัก</w> <w>วิทยาศาสตร์</w> ... </s>
<s> <w>pcenter</w> <w space="1"> </w> <w>ภาพ</w> ... </s>
...
</content>
</entry>
<entry>
...
</roti>
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/*
Robocode Thailand Contest 2009
Robocode Thailand Contest 2009 การแข่งขันการเขียนโปรแกรมจาวาเพื่อควบคุมหุ่นยนต์รถถัง
Robocode เป็นเกมที่แต่ละทีมจะพัฒนาโปรแกรมด้วยภาษาจาวา เพื่อควบคุมหุ่นยนต์รถถังให้ต่อสู้กันแบบอัตโนมัติ โดยแต่ละทีมไม่สามารถควบคุมหุ่นยนต์ของตัวระหว่างการแข่งขันได้ จึงเป็นเกมที่ฝึกทักษะการเขียนโปรแกรมและการนำอัลกอริทึม (algorithm) หรือวิธีการต่าง ๆ รวมถึง ปัญญาประดิษฐ์ (artificial intelligence – AI) มารวมกันเพื่อทำให้หุ่นยนต์มีประสิทธิภาพมากที่สุด เว็บไซต์วิชาการ.คอม เล็งเห็นประโยชน์ของเกม Robocode นี้ว่าจะช่วยฝึกทักษะต่าง ๆ ให้กับเยาวชนและผู้ที่สนใจ จึงร่วมกับศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ (เนคเทค) และสถาบันเทคโนโลยีนานาชาติสิรินธร มหาวิทยาลัยธรรมศาสตร์ จัดการแข่งขัน Robocode Thailand Contest 2009 เพื่อค้นหาสุดยอดทีมกับสุดยอดหุ่นยนต์ประจำปีนี้ โดยการแข่งขันในรอบคัดเลือก จะดำเนินการผ่านเว็บไซต์วิชาการ.คอม ส่วนการแข่งขันในรอบสุดท้าย ซึ่งเป็นการชิงชนะเลิศระดับประเทศ จะจัดการแข่งขันในช่วงต้นปี 2009 ภายในงานมหกรรมการแข่งขันด้านไอซีที ซึ่งดำเนินการเป็นประจำทุกปีโดยเนคเทค
download attachments from Gmail using FTP/script
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:
Fund raise for APC 2008
APC 2008 (Associated Programming Contest 2008) เป็นการแข่งขันเขียนโปรแกรมคอมพิวเตอร์ ภาษา C/C++ ออนไลน์ ลักษณะประมาณ Google Code Jam หรือโจทย์คอมพิวเตอร์โอลิมปิก งานนี้น้อง ๆ ทีมงานเขาจัดกันเอง ไม่ได้มีสปอนเซอร์อะไร ทำไปเพราะใจรักล้วน ๆ ก็เลยไม่ได้มีของรางวัลอะไร
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 และเพิ่มฟังก์ชันที่ถูกเรียกใช้บ่อย ๆ (เช่นการค้น/เลือก element ด้วย class) เข้าไปเป็น API มาตรฐาน (แบบเป็น native ไม่ต้องไปอิมพลีเมนต์เองด้วย JavaScript ซึ่งก็จะทำให้ประสิทธิภาพดีขึ้น)