Saturday, March 05, 2005

Web Form โดยไม่ใช้ Table tag

เจอ blog นี้

http://www.themaninblue.com/writing/perspective/2004/03/24/

อยากทำ form โดยไม่ใช้ table tag มานานแล้ว
พอแยก Semantic ออกจาก presentation แล้ว code
clean ขึ้นเยอะ


Related link from Roti

Azureus Stat Component

ช่วงนี้ใช้ Azureus ซึ่งเป็นโปรแกรม Bittorent ตัวหนึ่ง
ชอบใจตรงหน้าจอ Statistic ที่แสดงผลเป็น graph หน้าตาสวยงาม
เนื่องจากช่วงนี้พัฒนา Eclipse plugin อยู่ ก็เลยสนใจ UI ของคนอื่น
ที่พัฒนาด้วย SWT หรือ JFace


azureus stat view Posted by Hello

เกิดความสงสัยว่า เขาใช้ opensource library ในการทำ graph
หรือเปล่า ถ้าใช่จะได้เอาไปใช้บ้าง ก็เลยเข้าไปดู source code
ปรากฎว่าเขา implement เอง ไม่ได้ใช้ library ของใคร
เท่าที่ดูก็ออกแบบ clean ดี
แบ่ง package เป็นส่วน View กับ Component
ตัว View จะ delegate ให้ component ทำหน้าที่ render
ในที่นี้ก็คือ
ActivityView delegate ให้ SpeedGraphic รับหน้าที่ render


Class Diagram Posted by Hello

Note ไว้กันลืม เพื่อ project ไหนต้องการ monitor tool จะได้
มีตัวอย่างไว้ Assign

Related link from Roti

Thursday, March 03, 2005

ทดลองใช้ JGAP

อ่านเจอมานานแล้ว พึ่งได้ฤกษ์ทดลองใช้
JGAP เป็น genetic algorithms component

ไปได้ยินโจทย์่ว่า
เดิมในฐานข้อมูลลูกค้า อนุญาติให้ลูกค้าเลือก bank
ได้มากกว่า 1 bank ปัจจุบันต้องการเปลี่ยนให้ลูกค้า
ใช้ได้เพียง bank เดียวเท่านั้น
ปัจจุบันมีลูกค้าประมาณ 400000 ราย
มีจำนวน bank อยู่ 6 bank
ต้องการให้ computer ทำการเลือกธนาคารให้ลูกค้า
โดยให้แต่ละธนาคารได้จำนวนลูกค้าไปเท่าๆกัน

หลังจากได้ยินโจทย์ก็เกิด idea อยากลองใช้ JGAP solve

Step 1.
เริ่มแรกสุดที่ต้องทำการก็ออกแบบ Chromosome ว่า
จะประกอบด้วย Gene อะไรบ้าง
ลองกำหนดให้ Gene หนึ่งๆ คือ รูปแบบการเลือกธนาคาร

bank-> A B C D E F
รูปแบบที่ 1 1 0 0 0 0 0
รูปแบบที่ 2 0 1 0 0 0 0
....
รูปแบบที่ 64 1 1 1 1 1 1

ดังนั้นใน 1 chromosome จะมี gene ยังสิ้น 64 gene
จากนั้นก็เขียนโปรแกรมให้อ่านข้อมูล Raw Data
ทำการนับจำนวนคน โดย group ตาม pattern
ตัวอย่างการนับที่ได้
010011=>6370 (มีคนที่เลือกธนาคาร B, E, F ทั้งหมด 6370 คน)
ค่า 6370 จะเป็น constrain ของ Gene นั้น
ที่จะสามารถ distribute จำนวนคนไปยัง bank B หรือ E หรือ F
รวมแล้วไม่เกิน 6370 คน

ข้อมูลใน gene 1 gene ประกอบด้วย
  • constrain (ข้อมูลนี้ fix ไ่ม่เปลี่ยนไปในแต่ละรุ่น)
    • pattern การเลือก bank
    • จำนวนคนทั้งหมดที่เลือก bank ตาม pattern นี้
  • data (ข้อมูลนี้จะเปลี่ยนไปเรื่อยๆ เมื่อ evolution ไปยังรุ่นต่อไป)
    • ข้อมูลจำนวนคนที่แต่ละ bank ได้รับ
Step 2.
implement random method ของ Gene
ในตอนเริ่มต้น chromosome แต่ละ chromosome
จะถูกสร้างโดยการ random ขึ้นมา
ดังนั้นต้อง implement method นี้ให้ gene แต่ละ gene
ทำง่ายๆโดยใช้วิธี random ไปเลยว่าแต่ละธนาคารจะได้รับแจกคนไปเท่าไร

Step 3.
implement Mutation mehod ของ Gene
ทำง่ายๆโดย สุ่มโอนคนระหว่าง ธนาคารภายใน Gene นั้นๆ

Step 4.
ออกแบบ Fitness Fuction โดยถ้า chromosome ไหนได้แต้มสูง
chromosome นั้นก็มีโอกาสอยู่รอดสืบลูกสืบหลานได้
ทำง่ายๆ โดย จำนวนคนที่แต่ละธนาคารได้ ต้องไกล้เคียงกับ
400000/6 (จำนวนคนทั้งหมด/จำนวนธนาคาร)
ยิ่ง chromosome ไหนเข้าไกล้ค่าอุดมคติก็ยิ่งได้ค่าสูง

ในการ Run
สิ่งที่ต้องกำหนดก็คือ จำนวน Population ที่ใช้
จำนวนครั้งของการ evolution ที่เกิด
เลือกใช้ Population -> 500
evolution -> 10 รุ่น
ได้ผลลัพท์ดังนี้

ธนาคาร A ได้คนไปทั้งสิ้น 64162,
ธนาคาร B ได้คนไปทั้งสิ้น 65580,
ธนาคาร C ได้คนไปทั้งสิ้น 66109,
ธนาคาร D ได้คนไปทั้งสิ้น 63307,
ธนาคาร E ได้คนไปทั้งสิ้น 66026,
ธนาคาร F ได้คนไปทั้งสิ้น 68684,

เวลาในการ run = 7370 ms

ตัวอย่าง ผลลัพท์การ distribute
pattern จำนวนรวม A B C D E F
-------------------------------------------------------
111010=>6311 1337,1116,1913,0,1945,0,
001100=>6393 0,0,1161,5232,0,0,
010000=>6125 0,6125,0,0,0,0,
100100=>6422 1396,0,0,5026,0,0,
000011=>6398 0,0,0,0,82,6316,



สรุป
ผลลัพท์ที่ได้ยังไ่ม่น่าพอใจนัก
คงจะเป็นผลจากการออกแบบ fitness function ,
mutation method
ที่ยังไม่ค่อยดีนัก

ทดลองเปลี่ยนค่า จำนวน evolution
พบความประหลาดใจว่า จำนวนรุ่นยิ่งสูง
ผลลัพท์ยิ่งผิดผลาดมากขึ้น
สงสัยเราออกแบบ fitness function ผิดแน่ๆเลย

ไว้ถ้ามีโอกาสได้ data จริง ก็จะลอง
run ดูกับ data จริงดูว่าจะได้ผลลัพท์เป็นอย่างไร
(คิดว่ารูปแบบการเลือกธนาคารใน data จริง
จะมีลักษณะเฉพาะมากกว่า data test ที่เกิด
จากการ random)

Related link from Roti

Monday, February 28, 2005

Continuous Testing - PAG

Eclipse Plugin ที่น่าใช้อีกตัว
Continuous Testing - PAG
ไว้จะลองทดสอบดู

Related link from Roti

GeoPhrase - Get a GeoPhrase on your page

วันนี้เจอ Blog อันหนึ่งส่งข้อความทักทาย
"Ary you from Bangkok"
ก็เลยสงสัยว่าเขา integrate logic เข้าไปใน blogger อย่างไร
ดูใน html ก็พบ tag

Are you from

ที่แท้เป็นบริการของ
GeoPhrase - Get a GeoPhrase on your page
แต่เขาบอกว่าบริการนี้จะมี ad ด้วย
ก็คือ 1 ใน 50 ครั้งจะเกิดการ open ad
แต่ก็จำกัดว่า ip หนึ่งจะเกิด Ad ได้ไม่เกิน 1 ครั้งต่อ 1 วัน

รู้สึกว่า Service เล็กๆน้อยๆเหล่านี้มีเยอะขึ้นทุกวัน

Related link from Roti

CSDL - Software Tools and Services - Jupiter

Eclipse Plugin ที่น่าสนใจ
CSDL - Software Tools and Services - Jupiter

Related link from Roti

Sunday, February 27, 2005

อยากขี่จักรยาน !!!

วันนี้ออกไปปั่นจักรยานเล่น (ฝากลูกให้แม่เด็กเลี้ยง)
วนไปทาง ม.เกษตร
ค่อยรู้สึกหายอยากหน่อย
เดิมทีมีนัดขี่จักรยานกับพี่ๆปีละ 1 ครั้ง
เป็น trip ขี่รอบประเทศไทย
(ทำมาได้ 2 ปีแล้ว ปีแรกขี่จากกรุงเทพ ไป อุบล
ปีที่ 2 อุบลไปนครพนม)
ปีนี้เริ่มต้นที่นครพนม เลาะลำโขงขึ้นไปต่อ
ติดว่ามีลูกอ่อน
หวังว่าปีหน้าแม่เด็กจะลาพักร้อนมาเลี้ยงลูกแทน
http://www.thaimtb.com/cgi-bin/viewkatoo.pl?id=45141

Related link from Roti