generatedata.com – data generator

Generate test data instantly, just clicks.

GenerateData.com by Benjamin Keen

เอาไว้สร้างข้อมูลเยอะ ๆ สำหรับทดสอบ ใช้ง่ายมาก ๆ เลือกเอาท์พุตได้หลายรูปแบบ – ถ้าอยากเอาไปใช้ออฟไลน์ก็มีซอร์สโค้ดให้ด้วย

technorati tags:
,
,

WordPress authentication plugin for DokuWiki (updated)

dw-wordpress-auth is an authentication plugin for DokuWiki.
It let DokuWiki uses WordPress authentication instead of its own. This brings more integration in your DW+WP site.

This 1.2.3 version (2008-04-04) works with DokuWiki rc2008-03-31 and WordPress 2.5

Made for Creative Commons Thailand wiki.

dw-wordpress-auth เป็นปลั๊กอินระบบล็อกอินของ DokuWiki โดยมันจะทำให้ DokuWiki ใช้ระบบล็อกอินของ WordPress แทน ทำให้ระบบล็อกอินเป็นอันหนึ่งอันเดียวกันมากขึ้น สำหรับเว็บไซต์ที่ใช้ DokuWiki และ WordPress

รุ่น 1.2.3 (4 เม.ย. 2550) นี้ สำหรับใช้กับ DokuWiki rc2008-03-31 และ WordPress 2.5

ทำสำหรับใช้กับ วิกิครีเอทีฟคอมมอนส์ไทย

Download/ดาวน์โหลด: dw-wordpress-auth-1.2.3.tgz

For other versions/รุ่นอื่น ๆ: http://arthit.googlepages.com/bazaar


Version History

1.2.3 (04/04/2008)
  • Fix magic quotes double-kill bug, by checking MAGIC_QUOTES_STRIPPED flag.
    Code by Jan Wessely http://jawe.net/files/dokuwiki_wordpress/wordpress.class.phps
  • Modify DW’s html_login() in inc/html.php to make DW’s login form
    send login data to WP’s wp-login.php instead (modified html.php is included,
    copy it to inc/).
    If you want the original form back, just remove the code block
    between “START dw-wordpress-auth plugin” and “END dw-wordpress-auth plugin”.
    Then uncommented the following original code block.
1.2.2 (03/04/2008)
  • Modified to make it works with WP 2.5 and DW rc2008-03-31.
  • Updated code to use WP’s get_currentuserinfo(), instead of deprecated wp_get_cookie_login(), as suggested by Jan Wessely http://jawe.net/2008/04/01/wordpress-upgrade/
  • Modify DW’s default template’s main.php to make its login button
    points to WP’s login screen instead (modified main.php is included,
    copy it to lib/tpl/default/).
    If you want the original login button back, just remove the code block
    between “START dw-wordpress-auth plugin” and “END dw-wordpress-auth plugin”.
    Then uncommented the original code line:
    tpl_button('login')
1.2.1 (06/11/2007)
  • Modified to make it works with WP 2.3.0 and DW 2007-06-26b.
  • Update code to use WP’s do_action_ref_array, instead of do_action.
  • Swap the order to of user logged in status checking.
    Check for WP’s cookie first, then check for DW’s login form.
    Also if the WP’s cookie is ok, don’t bother checking for DW’s login.
  • Remove RoleID from ‘addUser’ query (don’t know it was for, but it
    doesn’t match the number of values to be inserted)
  • Disabled unrecommended queries related to add/updateUser,
    DW will handle this smartly by hidding related buttons
    from its web interface as well (cool).
1.2 (10/10/2006)

Any issue should be reported to art # siit.net. Thank you 🙂

updated 2008.04.04 19:20 ICT:
correct typo
“use WP’s wp_get_cookie_login(), instead of get_currentuserinfo()”
to “use WP’s get_currentuserinfo(), instead of deprecated wp_get_cookie_login()”.
Thanks Jan Wessely 🙂

technorati tags:
,
,
,

codepad + pastebin

เจ๋งอ่ะ codepad

เวลาอยากจะแชร์โค้ดอะไรเล็ก ๆ กับเพื่อน แปะลง IM มันก็เละ ๆ ดูยาก จะเปิดเมลส่ง ก็ดูลำบาก

หรือ บางทีจะลองโค้ดอะไรนิด ๆ หน่อย ๆ เช็คว่ามันใช่อย่างที่คิดรึเปล่า แต่ไม่มีคอมไพเลอร์ใกล้มือ

codepad ช่วยได้!

ลองเล่นดู แปะโค้ดอะไรก็ได้ลงไป แล้วจะลองรันด้วยก็ได้ หรือจะแค่แปะเฉย ๆ ก็ได้
จากนั้นเราจะได้ url มาอันนึง (ทำนองเดียวกะพวก tinyurl) ไว้ส่งไปให้เพื่อนได้ ทีนี้เพื่อนก็สามารถเข้าไปที่ url ที่ว่า เพื่อดูโค้ดเมื่อไหร่ก็ได้ (พร้อม syntax highlight ด้วย)

ชอบ ๆ

วันก่อน คุณชาญวิทย์ Groovy/Grails แนะนำ pastebin ในอีเมลกลุ่ม ตอนนั้นคิดว่าเจ๋งแล้ว เจอ codepad เข้าไป เราว่าเจ๋งกว่าอ่ะ ในแง่โค้ดนะ แต่ pastebin ก็รองรับภาษาเยอะกว่ามาก พวกล็อกไฟล์ก็ได้ด้วย diff หรือ config ไฟล์ก็ได้อีก

ลองเลือกใช้ดูครับ

[ ผ่าน duocore | thai-grails-user ]

technorati tags:
,
,

MySQL Thai full-text parser plug-in idea

MySQL 5.1 allows us to use a customized full-text parser.

poakpong ถามเรื่อง fulltext ในฐานข้อมูล MySQL ว่าเอาไว้ทำอะไร

ก็คือมันเอาไว้ระบุไว้ที่ช่องข้อมูล (field) ประเภทข้อความ (char, varchar, text) เพื่อบอกให้ MySQL มันทำดัชนี (index) สำหรับการค้นหาแบบ full-text search น่ะ

ที่เคย ๆ เขียนกัน เวลาจะหาอะไรใน MySQL เราก็จะใช้ LIKE "%คำที่หา%"
โดย LIKE มันจะวิ่งไปเปรียบเทียบข้อความในแต่ละช่องข้อมูล ทำนอง regular expression

ส่วนกรณี full-text search ใน MySQL จะใช้คำสั่ง MATCH (ชื่อฟิลด์) AGAINST (คำที่หา)
ซึ่งมันจะค้นจากดัชนีคำที่ MySQL ทำไว้ล่วงหน้า ซึ่งการค้นหาที่ตัวดัชนีแทนที่จะไปหาในตัวข้อความทั้งหมดนี้ ก็จะทำให้การค้นหามีประสิทธิภาพดีกว่า

อย่างไรก็ตาม การใช้ full-text search นี้ ก็ยังมีปัญหาสำหรับภาษาไทย นั่นก็คือ ตัวทำดัชนีคำน่ะ มันยังไม่รองรับภาษาไทย-ภาษาที่ต้องตัดคำก่อน (มีรองรับภาษาจีน/ญี่ปุ่นนิดหน่อย)

full-text search จึงยังใช้ไม่ได้สำหรับภาษาไทย ต้องใช้ LIKE กันไปก่อน

ใน MySQL รุ่น 5.1 (ตอนนี้ยังเป็น Release Candidate อยู่) ปัญหานี้ดูเหมือนจะมีทางออกได้ (ถ้ามีคนลงแรง)
เพราะ MySQL 5.1 เปิดช่องให้เขียน plug-in มาเสริมการทำงานได้ ซึ่งรวมถึง full-text parser plug-in ด้วย

full-text parser นี่ มีเอาไว้สร้างรายการคำเพื่อเอาไปใส่ในดัชนี

ถ้าเรามี full-text parser ที่สร้างรายการคำไทยได้ เราก็จะสามารถใช้ฟังก์ชั่น full-text search บน MySQL กับภาษาไทยได้ทันที ที่ระดับฐานข้อมูลเลย (แน่นอน เราต้องมีสิทธิลงปลั๊กอินที่ว่าลงในเซิร์ฟเวอร์ฐานข้อมูลด้วย ซึ่งในกรณีเราไปเช่าเว็บโฮสต์คนอื่นใช้ ก็คงลำบากหน่อย แต่ถ้าเป็นเครื่องเราเอง ก็ไม่มีปัญหา)

ไลบรารีตัดคำไทยที่ใช้งานได้นั้น เราก็มีแล้ว เช่นใน libthai หรือจะใช้ ICU/libicu ก็ได้ แม้ทั้งหมดนี้จะต้องมีการปรับแต่งเพื่อการสร้างดัชนีด้วย (ลักษณะของคำที่ตัดออกมาเพื่อจัดหน้ากระดาษ เพื่อทำดัชนี เพื่อการแปล เพื่องานที่ต่างกัน ก็มีลักษณะแตกต่างกัน) แต่คิดว่าน่าจะอยู่ในวิสัยที่จะทำได้

เป็นโครงงานจบการศึกษา – senior project – Google Summer of Code – ประกวด NSC … ??

(ภาษาโปรแกรม C หรือ C++)

(อาจจะมีคนทำอยู่/เสร็จแล้วก็ได้ … เหมือน อ.ธวัชชัย กับ พี่สัมพันธ์ เคยสนใจ (แต่ตอนนั้นโครงสร้างพื้นฐานยังไม่อำนวยให้แก้ไขได้ในลักษณะปลั๊กอินเช่นนี้) … ใครรู้อะไรก็แจ้งข่าวหน่อยครับ 😉 )

technorati tags: 

super("Robot Wars");

ตอนนี้ที่ภาคกำลังสนุกกับ Robocode
น้อง ๆ ที่ลงเรียนแลบ AI (ปี 3) กับแลบ OOP (ปี 2)
ต้องส่งโปรแกรมหุ่นยนต์ลงแข่ง จัดเป็นทัวร์นาเมนต์ (กติกา) เดินไปไหนมาไหน หรือขึ้นรถ ก็จะต้องได้ยินคนคุยกันเรื่องหุ่นเป็นไงมั่ง แข่งกับของคนนั้นคนนี้แล้วเป็นไง (ดูตัวอย่างที่ idiotao, d0m3z) — ปีที่แล้วก็มีแข่งเหมือนกัน (ผมไม่ได้แข่งกะเค้าหรอก แพ้น้องเปล่า ๆ :P)

Robocode เป็นเกมเพื่อการศึกษาการเขียนโปรแกรม โดยผู้เล่นจะเขียนโปรแกรมด้วยภาษาจาวา ควบคุมหุ่นยนต์รถถังให้สู้กัน ซึ่งก็เป็นการทำให้คนที่หัดเขียนจาวารู้สึกสนุกไปกับการเขียนโปรแกรมมากขึ้น อีกทั้งเห็นภาพชัด ๆ เลยว่า ที่เขียนไปมันจะมีผลลัพธ์ออกมายังไงบ้าง

Robocode battle

ตอนผมหัดเขียนโปรแกรมใหม่ ๆ ก็เคยเล่นเกมทำนองนี้
ชื่อ P-ROBOTS (download #1, download #2 – ไม่แน่ใจว่าอันไหนใหม่กว่า) ต่างกันตรงเป็นภาษาปาสคาล (ภาษายอดนิยมในสมัยนั้น สำหรับเริ่มเรียนเขียนโปรแกรม) และเป็นเท็กซ์โหมด ไม่ใช่กราฟิกโหมดอย่าง Robocode — แต่จำได้ว่า แค่นั้นก็สนุกแล้ว ดูตัว # วิ่งไปวิ่งมา

เว็บ RoboWiki
รวบรวมเรื่องเกี่ยวกะ RoboCode พร้อมข้อมูลเกี่ยวกับหุ่นยนต์ตัวดัง ๆ ไว้ครบครัน (บางตัวมีซอร์สโค้ดให้ด้วย)
โค้ดหุ่นหลายตัวเข้าขั้น |nw มาก ๆ
มีเอาเทคนิคการวิเคราะห์เชิงสถิติ หรือพวก ข่ายงานประสาทเทียม ไปใช้ด้วย จริงจังมาก แบบว่าทำนายเส้นทางการเดินของคู่ต่อสู้ได้ เขามีจัดเป็นลีกแข่งด้วยนะ

ใครสนใจ เสาร์อาทิตย์อยากหาอะไรสนุก ๆ เล่น ก็ลองไปโหลดมาเล่นกันครับ 🙂 เขามีตัวอย่างหุ่นมาให้จำนวนนึง เอาตรงนั้นมาแก้ ๆ ก็ได้ เพลิน ๆ

ข้างล่างนี่เป็นเอกสารที่อาจารย์ + น้องปี 4 เค้าทำให้น้องปี 2,3

technorati tags:
,
,

Groovy the 1.5

คุณชาญวิทย์ ครุกรูวี่ แจ้งมาในอีเมลกลุ่ม thai-grails-user:

Groovy 1.5 เลขรุ่นเดิมคือ 1.1 ออกแล้วครับ
เหตุผลในการปรับเลขรุ่นมาเป็น 1.5
ก็เพื่อสะท้อนให้เห็นความเปลี่ยนแปลงในการสนับสนุนโครงสร้างภาษาที่มากขึ้น
เช่น Annotation, Enum และ Generic เป็นต้นครับ

Groovy 1.5 เปลี่ยนแปลงระบบ method caching
ภายในทำให้ความเร็วโดยรวมเพิ่มขึ้นเช่นกัน

สำหรับรายละเอียดของ feature ใหม่ ๆ กิลโยม ลาฟอร์จ เขียนบนความบนไว้บน InfoQ

ผมชอบ safe navigation operator (?.) อ่ะ สะดวกดี

[ ลิงก์ InfoQ | ผ่าน ชาญวิทย์ แก้วกสิ ]

technorati tags:

Ruby/Rails update

Creating a Ruby Weblog in 10 Minutes – ใช้ NetBeans 6.0 สร้างเว็บล็อกด้วย Ruby on Rails ใน 10 นาที

Rails 2.0 ออกแล้ว – RESTful, template engine ใหม่, API authentication over (HTTP) SSL, simple query cache, เร็วขึ้นประมาณ 50-100%, syntax ใหม่ของ migration ที่สั้นลงมาก, ฯลฯ

RubiniusVM สำหรับภาษา Ruby, ใช้สถาปัตยกรรมแนว Smalltalk-80 เขียนด้วย C – ใช้กับ Rails ได้

แถม: Java SE 6 Update N Early Access – Java SE 6 ตัวใหม่ (หรือที่เคยรู้จักในชื่อ “Consumer JRE”) – ปรับปรุงการติดตั้งและอัพเดท, ลงเฉพาะเท่าที่ใช้ ลงเฉพาะ kernel ก่อน ที่เหลือค่อยโหลดตามมา, ใช้ hardware acceleration ได้, โหลดเร็วขึ้น, L&F (สกิน) ตัวใหม่ชื่อ Nimbus

technorati tags: 

looking for web automation tool

เว็บที่ดูแลอยู่ เช่าพื้นที่จาก Micfo.com ล่มเมื่อสองสามวันก่อน แล้วพอกลับมาอีกที ข้อมูลในฐานข้อมูลก็หายไปหมดเกลี้ยง

ฝ่ายซัพพอร์ตทำงานได้ห่วยมาก ตอบอีเมลแต่ละฉบับเหมือนขอไปที บอกมาได้ว่า “ไม่มี backup” โคตรโกรธ เมื่อก่อนไม่เป็นแบบนี้ พอล่มเมื่อไหร่ ยังไงก็ยังกลับมาได้เหมือนเดิม มี backup ให้ตลอด

ใครกำลังคิดจะใช้บริการ Micfo.com กรุณาคิดอีกที

พยายามจะกู้บล็อกคืนมาให้เพื่อน (ตัวเองก็เสียดายด้วย มีเรื่องน่าอ่านอยู่เยอะ) ทางหนึ่งที่พอไหวคือ ไล่ก๊อปปี้มาจาก Google cache แต่มันเยอะมาก น่าจะเกินพันได้ (ซึ่งเป็นเรื่องดี) ก๊อปไปได้แค่สามสิบอันก็เมื่อยแล้ว

มีใครพอจะแนะนำเครื่องมือ/ภาษาสคริปต์ที่ทำพวกนี้ง่าย ๆ บ้างครับ ผมไม่เคยเขียนอะไรทำนองนี้เลย พวก web scraping เนี่ย

ลักษณะของงานไม่มีอะไรมาก

  1. ไปที่หน้า Google cache ที่กำหนด
  2. ไล่ดาวน์โหลดลิงก์ที่อยู่ใต้ข้อความ “Cached” ให้หมด
  3. ไปหน้าถัดไป (เปลี่ยนค่า start ใน url)
  4. ถ้ายังมีหน้าถัดไปที่ว่าอยู่ ก็ทำ (2) อีกรอบ วนไปเรื่อย

cURL นี่ไหวมั๊ย หรือมีง่ายกว่านี้ ? เดี๋ยวคืนนี้จะลองดู

ป.ล.1 ส่วนเว็บบอร์ด น่าจะยากกว่า เฮ้อ

ป.ล.2 เบื่อ “สดศรี สัตยธรรม” และ “ผู้มีคุณธรรมสูง” ทั่วฟ้าเมืองไทย

technorati tags:

Gant – Groovy Ant

“A Groovy-based build system that uses Ant tasks, but no XML.”

Gant เป็นเครื่องมือประกอบสร้างซอฟต์แวร์ (build system) ที่ใช้ Ant ทำงาน และใช้ภาษา Groovy กำหนดค่าต่าง ๆ (แทนที่จะใช้ภาษา XML)

ตัวอย่าง (จากเว็บไซต์ Gant):

includeTargets < < gant.targets.Clean
cleanPattern << [ '**/*~' ,  '**/*.bak' ]
cleanDirectory << 'build'

target ( 'default' : 'The default target.' ) {
  println ( 'Default' )
  depends ( clean )
  Ant.echo ( message : 'A default message from Ant.' )
  otherStuff ( )
}

target ( otherStuff : 'Other stuff' ) {
  println ( 'OtherStuff' )
  Ant.echo ( message : 'Another message from Ant.' )
  clean ( )
}

แนวการพัฒนาของ Groovy/Grails อย่างหนึ่งที่ต่างจาก Ruby/Rails ที่พอสังเกตได้ก็คือ Groovy/Grails จะพยายามใช้/หรือทำงานร่วมกับเครื่องมือ/ไลบรารีที่มีอยู่แล้ว เช่น Jetty, Hibernate หรือกรณี Ant ในที่นี้ (ซึ่งแต่ละแนวก็มีข้อดีข้อด้อยต่างกัน)

technorati tags:
,
,