Page Layout
เหมาะสำหรับผู้ไม่คล่อง CSS เช่นผม
สำหรับ copy ไปใช้อย่างเดียว
Ruthsarian Layouts
ใน site เดียวกันนี้มีแถม
Cryptography javascript library
Cryptonoke
แต่้ถ้าจะดูเป็นเรื่องเป็นราว ก็ต้องอันนี้
http://pajhome.org.uk/crypt/md5/
Friday, March 11, 2005
อ่านเอาเพลิน 2
Peeking Into Google: "e president of operations and vice president of engineering, offered a rare behind-the-scenes tour of Google's architecture on Wednesday. Hoelzle spoke here at EclipseCon 2005, a conference on the ope"
Related link from Roti
Ha ha. What 's this ?
search เจอโดยบังเอิญ
Idea เขาร้ายเหมือนกันครับ
จับ blog เราเข้าตลาดหุ้นเสียแล้ว
BlogShares - pok 's blogger
ใครมี blog ก็ลองเปลี่ยน blog parameter ดูนะครับ
"http://blogshares.com:81/blogs.php?blog=http://pphetra.blogspot.com%2F"
Idea เขาร้ายเหมือนกันครับ
จับ blog เราเข้าตลาดหุ้นเสียแล้ว
BlogShares - pok 's blogger
ใครมี blog ก็ลองเปลี่ยน blog parameter ดูนะครับ
"http://blogshares.com:81/blogs.php?blog=http://pphetra.blogspot.com%2F"
Related link from Roti
Wednesday, March 09, 2005
ทดลอง Jboss-TreeCache
ใครที่เคยเขียน Web Application ที่ Scale ใหญ่หน่อย
คงจะรู้ว่าการ implement Application Cache นั้นจะช่วย
ให้ชีวิตยืนยาวขึ้นเล็กน้อย (ไม่เครียดกับปัญหา server ตอบสนองช้า)
ปกติผมจะใช้ OSCache
ซึ่งเท่าที่ใช้มาก็ ok ดี (ยกเว้นว่ามีปัญหา
อยู่ที่จุดการ implement monitor ที่จะใช้จับ
statistic การใช้ cache)
แต่มี opensource cache อยู่ตัวหนึ่งที่ผมสนใจอยากรู้
นั่นก็คือ Jboss TreeCache
สิ่งที่แตกต่างออกไปใน jboss-treecache ก็คือ
1. เป็น cache ที่มีลักณณะเป็น tree
cache โดยทั่วไปจะมีลักษณะเป็น HashTable คือ มี key แล้วก็ value
การเข้าถึง cache จะใช้คำสั่ง
put (Object key, Object value)
get (Object key)
ส่วน jboss-treeCache จะใช้คำสั่งในลักษณะ
put (String treePath, Object key, Object value)
get (String treePath, Object key)
ดูๆ ก็เหมือนไม่มีอะไรพิเศษ เพราะจริงๆแล้ว
เราสามารถตั้งชื่อ key ให้มีลักษณะกลุ่ม tree ได้เหมือนกัน
เช่น
put ("erp.po.Order." + order.getId(), order)
เมื่อเทียบกับ
put ("/erp/po/Order", order.getId(), order);
ก็ไม่ได้ให้ความรู้สึกแตกต่างกัันมากนัก
แต่ความแตกต่างๆจริงๆ จะไปอยู่ที่การ implement aspect
intercept ใน Jboss-treeCacheAOP
ซึ่งขอยกยอดคำอธิบายไปอยู่ข้างท้ายสุด
2. support Transaction scope
การแก้ไขข้อมูลใน cache ร่วมอยู่ใน transaction ด้วย
ถ้า rollback , ก็จะเกิด undo ใน cache ด้วย
ตัว Jboss-treeCache แยก package ออกเป็น 2 ส่วนหลัำกๆคือ
เนื่องจาก concept ของการ cache ที่เราสามารถเลือก
option ให้ทำการ slide Object ที่ put ลงไปออกเป็น
node ย่อยๆ เช่นสมมติเรามี
class Person
private Long id;
private String name;
private Address addr;
class Address
private String line1;
private String line2;
ถ้าเรา Config ให้ Class Person ให้เป็น aop-enabled
แล้วเราสั่ง put Person Object ลงใน cache
ตัว treeCache จะทำการแยกส่วน object ออกเป็น
node ย่อยๆ (แทนที่จะเก็บ object Person ลงไปตรงๆ)
มีลักษณะเป็น tree ตามนี้
+Node Person
-Node id
-Node name
+Node addr
Node line1
Node line2
ที่นี้ข้อดีของการทำอย่างนี้คืออะไร
ในกรณีที่ Environment ที่เป็น Cluster
ถ้าเราสั่ง
person.getAddr().setLine1("bah");
ถ้าเป็น cache ทั่วๆไป ก็จะต้องมีการ replicate
object Persion ทั้งก้อนออกไป
แต่ถ้าเป็น treeCacheAOP จะมีการ replicate
ออกไปเฉพาะส่วน line1 เท่านั้น (ทำเฉพาะ node ที่เปลี่ยนแปลง)
ซึ่งถ้าเป็นเช่นนี้ traffic ของการ replicate ก็จะมีขนาดเล็ก
ทำให้ไม่เกิดปัญหา bottleneck
หรือ lag ที่เกิดจากการ serialize object ขนาดใหญ่
เท่าที่ลอง set server ขึ้นมา 2 server
เพื่อทดสอบ treeCache (แบบไม่ใช่ AOP)
replication feature ดู
ก็ไ่ม่พบความยุ่งยากอะไร ใช้ตรงๆดังนี้
ตอน initialize
tree = new TreeCache();
tree.setClusterName("test");
tree.setCacheMode(TreeCache.REPL_ASYNC); // replicate แบบ Async
tree.startService();
มันจะ set ค่า default ของ JGroup ให้เอง
เวลาใช้ก็แค่
getTreeCache().put("pok", getKey(), getValue());
ข้อเสียอีกอย่างของ treeCache ก็คือ
ถ้าเราใช้นอก server jboss
dependency ของ library มันจะเป็นหางว่าวเลย
ต้องเพิ่ม jar ลงไปไม่น้อยกว่า 8 ตัว
ข้อมูลเพิ่มเติม
คงจะรู้ว่าการ implement Application Cache นั้นจะช่วย
ให้ชีวิตยืนยาวขึ้นเล็กน้อย (ไม่เครียดกับปัญหา server ตอบสนองช้า)
ปกติผมจะใช้ OSCache
ซึ่งเท่าที่ใช้มาก็ ok ดี (ยกเว้นว่ามีปัญหา
อยู่ที่จุดการ implement monitor ที่จะใช้จับ
statistic การใช้ cache)
แต่มี opensource cache อยู่ตัวหนึ่งที่ผมสนใจอยากรู้
นั่นก็คือ Jboss TreeCache
สิ่งที่แตกต่างออกไปใน jboss-treecache ก็คือ
1. เป็น cache ที่มีลักณณะเป็น tree
cache โดยทั่วไปจะมีลักษณะเป็น HashTable คือ มี key แล้วก็ value
การเข้าถึง cache จะใช้คำสั่ง
put (Object key, Object value)
get (Object key)
ส่วน jboss-treeCache จะใช้คำสั่งในลักษณะ
put (String treePath, Object key, Object value)
get (String treePath, Object key)
ดูๆ ก็เหมือนไม่มีอะไรพิเศษ เพราะจริงๆแล้ว
เราสามารถตั้งชื่อ key ให้มีลักษณะกลุ่ม tree ได้เหมือนกัน
เช่น
put ("erp.po.Order." + order.getId(), order)
เมื่อเทียบกับ
put ("/erp/po/Order", order.getId(), order);
ก็ไม่ได้ให้ความรู้สึกแตกต่างกัันมากนัก
แต่ความแตกต่างๆจริงๆ จะไปอยู่ที่การ implement aspect
intercept ใน Jboss-treeCacheAOP
ซึ่งขอยกยอดคำอธิบายไปอยู่ข้างท้ายสุด
2. support Transaction scope
การแก้ไขข้อมูลใน cache ร่วมอยู่ใน transaction ด้วย
ถ้า rollback , ก็จะเกิด undo ใน cache ด้วย
ตัว Jboss-treeCache แยก package ออกเป็น 2 ส่วนหลัำกๆคือ
- treeCache
- treeCacheAOP (extend จาก treeCache)
เนื่องจาก concept ของการ cache ที่เราสามารถเลือก
option ให้ทำการ slide Object ที่ put ลงไปออกเป็น
node ย่อยๆ เช่นสมมติเรามี
class Person
private Long id;
private String name;
private Address addr;
class Address
private String line1;
private String line2;
ถ้าเรา Config ให้ Class Person ให้เป็น aop-enabled
แล้วเราสั่ง put Person Object ลงใน cache
ตัว treeCache จะทำการแยกส่วน object ออกเป็น
node ย่อยๆ (แทนที่จะเก็บ object Person ลงไปตรงๆ)
มีลักษณะเป็น tree ตามนี้
+Node Person
-Node id
-Node name
+Node addr
Node line1
Node line2
ที่นี้ข้อดีของการทำอย่างนี้คืออะไร
ในกรณีที่ Environment ที่เป็น Cluster
ถ้าเราสั่ง
person.getAddr().setLine1("bah");
ถ้าเป็น cache ทั่วๆไป ก็จะต้องมีการ replicate
object Persion ทั้งก้อนออกไป
แต่ถ้าเป็น treeCacheAOP จะมีการ replicate
ออกไปเฉพาะส่วน line1 เท่านั้น (ทำเฉพาะ node ที่เปลี่ยนแปลง)
ซึ่งถ้าเป็นเช่นนี้ traffic ของการ replicate ก็จะมีขนาดเล็ก
ทำให้ไม่เกิดปัญหา bottleneck
หรือ lag ที่เกิดจากการ serialize object ขนาดใหญ่
เท่าที่ลอง set server ขึ้นมา 2 server
เพื่อทดสอบ treeCache (แบบไม่ใช่ AOP)
replication feature ดู
ก็ไ่ม่พบความยุ่งยากอะไร ใช้ตรงๆดังนี้
ตอน initialize
tree = new TreeCache();
tree.setClusterName("test");
tree.setCacheMode(TreeCache.REPL_ASYNC); // replicate แบบ Async
tree.startService();
มันจะ set ค่า default ของ JGroup ให้เอง
เวลาใช้ก็แค่
getTreeCache().put("pok", getKey(), getValue());
ข้อเสียอีกอย่างของ treeCache ก็คือ
ถ้าเราใช้นอก server jboss
dependency ของ library มันจะเป็นหางว่าวเลย
ต้องเพิ่ม jar ลงไปไม่น้อยกว่า 8 ตัว
ข้อมูลเพิ่มเติม
- TreeCache
- TreeCacheAOP
- ส่วนใครที่คิดจะใช้ ให้ดู todo ให้ดีเสียก่อน มี bug ร้ายแรงอยู่ตัว
Related link from Roti
Tuesday, March 08, 2005
TrimPath javascript component
มี javascript ที่น่าสนใจอยู่ 3 ตัว
ตัวที่น่าสนใจมากก็คือ template engine
โดยเฉพาะถ้านำไปใช้กับ xmlrpc
- spreadsheet component เป็น spreadsheet ที่เขียนด้วย javascript และ run บน browser
- TrimQuery เป็น sql parser ที่ช่วยให้เรา select ข้อมูลที่อยู่ใน structure array ได้
- Javascript Template เป็น template engine ที่ฝังอยู่ใน web page ได้
ตัวที่น่าสนใจมากก็คือ template engine
โดยเฉพาะถ้านำไปใช้กับ xmlrpc
Related link from Roti
SWF -> Web App Framework
ตอนนี้มี Web Applicaion Framework อยู่เต็มไปหมดแล้ว
แต่ตัวนี้น่าสนใจตรงที่มี feature IPU (inplace page update)
ใครที่สนใจตัดต่อไปใช้กับ framework อื่นๆลองเข้าไปดูได้
SWF Overview
SWF How to use Region (ว่าด้วยเรื่อง IPU)
แต่ตัวนี้น่าสนใจตรงที่มี feature IPU (inplace page update)
ใครที่สนใจตัดต่อไปใช้กับ framework อื่นๆลองเข้าไปดูได้
SWF Overview
SWF How to use Region (ว่าด้วยเรื่อง IPU)
Related link from Roti
หมกมุ่นกับ thumb drive bootable
ช่วงนี้กำลังลง linux Ubuntu บนเครื่อง Notebook ของตัวเอง
ด้วยความที่ไม่เคยจัด partition มาก่อน
ก็เลยต้องงัดเอา partition magic มาใช้
เหลือบไปเห็น menu "rescue disk"
ก็เลยคิดอยากมีบ้าง แต่บนเครื่อง notebook
ดันไม่มี floppy disk (จริงๆก็มีนะ แต่พังไปแล้ว)
ก็เลยอยากให้มันอยู่บน ThumbDrive แทน
โดยให้เครื่องสามารถ boot ได้ด้วย thumbdrive
หาบทความเกี่ยงกับเรื่องนี้อ่าน
ได้ความตรงกันว่า
ถ้า bios support ก็ boot ได็ไม่มีปัญหาอะไร
เพียงแต่หาทางเขียน boot record ลงบน thumb drive
โดยเขาบอกว่า ให้เรา format dirve floppy disk ก่อน(แบบ boot ได้)
จากนั้นก็ใช้ Tool mkbt copy boot record จาก
floppy ไปลง thumb drive
ฟังดูง่ายดี แต่เครื่องเราดันไม่มี floppy
ก็เลยต้องเสาะหา floppy image
ไปเจอบนแผ่น partition magic มี
rescue disk floppy image อยู่
ก็เลยใช้ mkbt จัดการ copy เสีย
ที่นี้ก็เกิดปัญหาอีกว่า เราจะจัดการเอา content
ต่างๆที่อยู่ใน floppy image ไปลง
บน thumb drive ได้อย่างไร
ไปได้ tool VFD ที่เป็น software ทำ Virtual Floppy Driver
สามารถ mount floppy image เข้าเป็น drive
บน window ได้
สุดท้ายพอลอง boot ดูก็เงียบ boot ไม่ได้
เกิดความสงสัยว่าอะไรที่ผิด
ก็เลยเปลี่ยนจาก mkbt มาใช้
Hp Drive key format utility (url นี้แปลกๆ เข้าได้บ้างไม่ได้บ้าง มีการ redirect อุตลุดเลย
ถ้าเข้าไม่ได้ให้ลอง search หา SP27213.exe ดู)
ซึ่งสามารถใช้กับ thumb drive ยี่ห้ออื่นๆได้
tool นี้ช่วยให้เรา format thumb drive โดยเลือก option
ิให้ boot ได้ แต่ tool นี้ใช้กับ rescue disk ของ partition magic ไม่ได้
มันฟ้องว่า system file ไม่ครบ (คิดว่ามันคงมองหา kernal.sys
ซึ่งใน boot image ของ partition magic ไม่มี)
ก็เลยหาไปหา freedos มาลองทดสอบดู
พบว่า boot ได้ แต่เสียใจด้วยมันไม่ support ntfs
ลองเอา MS-Dos7.10 มาลองบ้าง
เห็นว่า support ntfs ด้วย
ปรากฎว่า boot ได้แต่มี error จำนวนหนึ่ง
ก็เลยหยุดดีกว่า ชักเกินเลยแล้ว
สรุปใช้ rescue CD ดีที่สุด
ด้วยความที่ไม่เคยจัด partition มาก่อน
ก็เลยต้องงัดเอา partition magic มาใช้
เหลือบไปเห็น menu "rescue disk"
ก็เลยคิดอยากมีบ้าง แต่บนเครื่อง notebook
ดันไม่มี floppy disk (จริงๆก็มีนะ แต่พังไปแล้ว)
ก็เลยอยากให้มันอยู่บน ThumbDrive แทน
โดยให้เครื่องสามารถ boot ได้ด้วย thumbdrive
หาบทความเกี่ยงกับเรื่องนี้อ่าน
ได้ความตรงกันว่า
ถ้า bios support ก็ boot ได็ไม่มีปัญหาอะไร
เพียงแต่หาทางเขียน boot record ลงบน thumb drive
โดยเขาบอกว่า ให้เรา format dirve floppy disk ก่อน(แบบ boot ได้)
จากนั้นก็ใช้ Tool mkbt copy boot record จาก
floppy ไปลง thumb drive
ฟังดูง่ายดี แต่เครื่องเราดันไม่มี floppy
ก็เลยต้องเสาะหา floppy image
ไปเจอบนแผ่น partition magic มี
rescue disk floppy image อยู่
ก็เลยใช้ mkbt จัดการ copy เสีย
ที่นี้ก็เกิดปัญหาอีกว่า เราจะจัดการเอา content
ต่างๆที่อยู่ใน floppy image ไปลง
บน thumb drive ได้อย่างไร
ไปได้ tool VFD ที่เป็น software ทำ Virtual Floppy Driver
สามารถ mount floppy image เข้าเป็น drive
บน window ได้
สุดท้ายพอลอง boot ดูก็เงียบ boot ไม่ได้
เกิดความสงสัยว่าอะไรที่ผิด
ก็เลยเปลี่ยนจาก mkbt มาใช้
Hp Drive key format utility (url นี้แปลกๆ เข้าได้บ้างไม่ได้บ้าง มีการ redirect อุตลุดเลย
ถ้าเข้าไม่ได้ให้ลอง search หา SP27213.exe ดู)
ซึ่งสามารถใช้กับ thumb drive ยี่ห้ออื่นๆได้
tool นี้ช่วยให้เรา format thumb drive โดยเลือก option
ิให้ boot ได้ แต่ tool นี้ใช้กับ rescue disk ของ partition magic ไม่ได้
มันฟ้องว่า system file ไม่ครบ (คิดว่ามันคงมองหา kernal.sys
ซึ่งใน boot image ของ partition magic ไม่มี)
ก็เลยหาไปหา freedos มาลองทดสอบดู
พบว่า boot ได้ แต่เสียใจด้วยมันไม่ support ntfs
ลองเอา MS-Dos7.10 มาลองบ้าง
เห็นว่า support ntfs ด้วย
ปรากฎว่า boot ได้แต่มี error จำนวนหนึ่ง
ก็เลยหยุดดีกว่า ชักเกินเลยแล้ว
สรุปใช้ rescue CD ดีที่สุด
Related link from Roti
สรุป Trip จักรยาน
ตอนนี้พวกพี่สมชายกลับมาเรียบร้อยแล้ว
เริ่มสรุป Trip กันแล้ว ดูได้ที่นี่
สรุปทริป..ปั่นจักรยานซำเหมา เลาะริมแม่น้ำโขง เลียบชายแดน ไทย-ลาว จาก นครพนม-น่าน 12-26 ก.พ.48
เริ่มสรุป Trip กันแล้ว ดูได้ที่นี่
สรุปทริป..ปั่นจักรยานซำเหมา เลาะริมแม่น้ำโขง เลียบชายแดน ไทย-ลาว จาก นครพนม-น่าน 12-26 ก.พ.48
Related link from Roti
Sunday, March 06, 2005
ทำความรู้จัก org.apache.commons.modeler Component
ตัว Common Modeler ก็คือ component
ที่ออกแบบมาให้เราสามารถ implement JMX MBean
ได้ง่ายขึ้น(โดยเฉพาะส่วน metadata ซื่งเป็นส่วนที่น่าเบื่อ)
ย้อนอธิบายหลักการของ JMX สักนิดหนึ่ง
Architecture ของ JMX แบ่งเป็น 4 ส่วน
ตัว Tivoli ก็คือ JMX implementation ของ IBM
Mbean สามารถ implement ได้ 2 แบบหลักคือ
ส่วน Dynamic นั้นยืดหยุ่นกว่า มี interface กลางๆแบบเดียว
(รูปแบบคล้ายๆ Reflection)แล้วเรา implement interface นั้น
ส่วน ModelMBean นั้น Extend จาก Dynamic MBeanแต่เพิ่ม
feature ต่างๆ มีความยืดหยุ่นมากกว่า ส่วนที่ชัดเจนในแง่ implement
ก็คือ ในส่วน ModelMBean นั้น provide class มาให้แล้ว
เราเพียงแต่ plug ส่วน operation หรือ Attribute
ของเราเข้าไปโดยผ่านทาง Method ที่กำหนด (setModelBeanInfo)
กรณี OpenMBean นั้น extend จาก Dynamic เช่นกัน เพียงแต่
มีข้อกำหนดว่า Attribute ทั้งหลายจะมี DataType อยู่ในกลุ่มที่
Spec. กำหนดเท่านั้น (พวก Simple Datatype)
สำหรับ common modeler นั้น base อยู่บน ModelMBean
โดยมีวัตถุประสงค์ให้เราสร้าง MBean ได้ง่ายขึ้น
การใช้งานเบื้องต้น
ที่ออกแบบมาให้เราสามารถ implement JMX MBean
ได้ง่ายขึ้น(โดยเฉพาะส่วน metadata ซื่งเป็นส่วนที่น่าเบื่อ)
ย้อนอธิบายหลักการของ JMX สักนิดหนึ่ง
Architecture ของ JMX แบ่งเป็น 4 ส่วน
- Management Application นี่คือส่วนที่ user ใช้งาน
- Distributed Layer เป็นช่องทางการสื่อสารระหว่าง Agent layer กับ Management App. โดยเลือก config ได้หลากหลาย protocol
- Agent Layer คือ MBean Server ประกอบด้วย service 4 อย่าง คือ Timer, monitoring, dynamic loading, relationship services.
- MBean คือ Class ที่ห่อ Resource ที่ต้องการจัดการไว้ และเปิดช่องทางในการจัดการกัย Resource นั้นๆ
ตัว Tivoli ก็คือ JMX implementation ของ IBM
Mbean สามารถ implement ได้ 2 แบบหลักคือ
- Static
- Dynamic
- ModelMBean
- OpenMBean
ส่วน Dynamic นั้นยืดหยุ่นกว่า มี interface กลางๆแบบเดียว
(รูปแบบคล้ายๆ Reflection)แล้วเรา implement interface นั้น
ส่วน ModelMBean นั้น Extend จาก Dynamic MBeanแต่เพิ่ม
feature ต่างๆ มีความยืดหยุ่นมากกว่า ส่วนที่ชัดเจนในแง่ implement
ก็คือ ในส่วน ModelMBean นั้น provide class มาให้แล้ว
เราเพียงแต่ plug ส่วน operation หรือ Attribute
ของเราเข้าไปโดยผ่านทาง Method ที่กำหนด (setModelBeanInfo)
กรณี OpenMBean นั้น extend จาก Dynamic เช่นกัน เพียงแต่
มีข้อกำหนดว่า Attribute ทั้งหลายจะมี DataType อยู่ในกลุ่มที่
Spec. กำหนดเท่านั้น (พวก Simple Datatype)
สำหรับ common modeler นั้น base อยู่บน ModelMBean
โดยมีวัตถุประสงค์ให้เราสร้าง MBean ได้ง่ายขึ้น
การใช้งานเบื้องต้น
- การ define MBean จะทำผ่านทาง XML file
- ตัว MBean Class นั้นให้ extend BaseModelMBean โดย implement operation เป็น method ธรรมดา
public class GroupMBean extends BaseModelMBean {
public void addRole(Role role){
}
}
- การ register mbean จะทำผ่าน Class Registry
URL url= this.getClass().getResource
("/com/mycompany/mypackage/mbeans-descriptors.xml");
Registry registry = Registry.getRegistry();
registry.loadMetadata(url);
ข้อมูลเพิ่มเติม
JMX Introduction
http://www-128.ibm.com/developerworks/java/library/j-jmx1/
เอกสารสำหรับ Common Modeler จะมีอยู่ใน JavaDoc เท่านั้น
http://jakarta.apache.org/commons/modeler/apidocs/index.html
Related link from Roti
Subscribe to:
Posts (Atom)