Saturday, March 26, 2005

มี java มานานแล้ว ในที่สุดก็มี bangkok

opensource project ตัวนี้มี code name ว่า bangkok
ตอนแรกนึกว่าคนไทยเขียน แต่ check ดูแล้วไม่ใช่แฮะ

Related link from Roti

Friday, March 25, 2005

config xterm function key

ช่วงนี้มีความจำเป็นต้องกลับไปช่วย maintain ระบบเก่า
ที่ต้องใช้ terminal emulator ในการ coding
แต่มีปัญหาว่า function key ที่ xterm map ไม่ตรง

ก็เลยเขียน shell script ง่ายๆสำหรับการ override function key
xterm  -title "SSO" -sb -sl 1200   -geo 80x24   \              
-cr red -xrm \
"XTerm*vt100.translations: #override
Shift F1: string(0x1b) string("Wa")
Shift F2: string(0x1b) string("Wb")
Shift F3: string(0x1b) string("Wc")
Shift F4: string(0x1b) string("Wd")
Shift F5: string(0x1b) string("We")
....
~Shift F1: string(0x1b) string("WA")
~Shift F2: string(0x1b) string("WB")
~Shift F3: string(0x1b) string("WC")
~Shift F4: string(0x1b) string("WD")
....
-e telnet 192.10.1.1 &

อ่านเพิ่มเติมได้ที่นี่ xterm Faq

Related link from Roti

Thursday, March 24, 2005

Joda Bean

อยู่ที่ Joda
หลายคนที่เคยเขียน UI คงเคยรู้ว่ามีแนวทางในการ
ส่ง business object ไปยัง UI layer อยู่ 2 พวกคือ
  • พวกที่นิยม Type Safe พวกนี้จะใช้ Java Bean
  • พวกที่นิยม Generic พวกนี้จะใช้ HashMap

จุดเด่นของพวก generic ก็คือง่ายต่อการ binding เข้ากับ UI component
ส่วนข้อเสียก็คือการเปิดโอกาสให้เกิด bug หรือ runtime error ได้ง่ายขึ้น

ตัว Joda Bean จะเป็นลูกผสมของ 2 พวกนี้
คือใช้ hashMap เป็น base class แต่ก็สามารถ
set property ในลักษณะ Type Safe ได้เช่นกัน
การเขียน Joda Bean จะเชียนดังนี้
public interface Person extends Bean {
StringProperty surname();
String getSurname();
void setSurname(String surname);
}

เราเพียงแต่เขียน interface
พอถึงเวลาใช้ ก็เพียงแต่
Person person = (Person) JodaFactory.create(Person.class);

Joda จะใช้ Java 1.3 Proxy ในการสร้าง class person ให้เรา

การนำไปใช้
กรณีที่เราต้องการ binding เข้ากับ swing JTextField
JTextField textField = new JTextField();
Person person = (Person) JodaFactory.create(Person.class);
SwingBinder binder = new SwingBinder();
binder.bind( textField, person.surname() );

Note: Joda binding ยังไม่ support พวก combobox, table component

นอกจากนี้ยังสามารถใช้ XPath ในการ access ได้ด้วย
XPath xpath = new XPath("address[2]/town/text()");
Profile profile = (Profile) JodaFactory.create(Profile.class);
String str = (String) xpath.selectSingleNode(profile);

Related link from Roti

color schema

สำหรับผู้ที่ขี้เกียจเปิด color schema book
หรือ programmer ผู้ที่มีปัญหาในการเลือกสี
color schema

Related link from Roti

IE send request for PDF twice

project ที่แล้วมี PDF report ที่เขียน jasper ไป 74 ตัว
ไม่เห็น issue นี้เลย (หรือว่า server จะเร็วจัดจนไม่เกิด
performance drop)
http://www.mail-archive.com/user@struts.apache.org/msg23445.html
ต้องกลับไปดู log ใหม่แล้ว

Related link from Roti

tomcat trimspace

ได้ความรู้ใหม่มา
ปกติเวลาเรา view html source
จาก page ที่สร้างจาก jsp
เราจะเห็นบรรทัดว่างๆอยู่ทั่วไปหมด
ใน tomcat 5.5.x เราสามารถ config ไม่ให้
มี whitespace พวกนี้โดย
 <init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>

Related link from Roti

toogle

ใครเคยใช้ search engine ตัวนี้หรือยังครับ
http://www.c6.org/toogle/

Related link from Roti

Maven Eclipse Plugin

ใครที่เคยใช้ java คงจะเคยใช้ ant มากันแล้ว
ข้อเสียของ ant (จริงๆก็ไม่ใช่ข้อเสียหรอก) ก็คือ
ไม่ว่าจะเขียนกี่ project
file build.xml ก็หน้าตาอีหรอบเดิมทุกที
(คนที่เคยเขียน ant คงรู้ว่า วิธีการเขียน
ant ที่เร็วที่สุดก็คือการ copy, paste จาก
build file เก่า)
จนมีคนคิดว่า เอ๊ะทำไมเราต้องมาเขียน
อะไรซ้ำไปซ้ำมา ก็เลยเกิดเป็น maven
ขึ้นมา

การเขียน maven ถ้าเป็น project ธรรมดา
ก็เพียงเขียนแต่ project.xml ซึ่งเป็น descriptor
อธิบายรายละเอียดของ project
ซึ่ง key สำคัญตัวหนึ่งที่ maven จัดการให้ก็คือ
library dependency ซึ่ง maven จะจัดการหา
jar file ตาม version ที่เราระบุให้
โดย mavenจะ maintain jar file นั้นไว้ใน
local repository ของตัวเอง กรณีทีในเครื่อง
local ไม่มี file นั้น ก็จะทำการ download
จาก remote repository (ผมชอบ feature นี้มาก
เพราะแทนที่เราจะมี jar file ที่ใช้บ่อยๆอย่าง log4j.jar
กระจายอยู่ในทุก project ถ้าใช้ maven ก็จะ
เกิดการ share jar ไว้ที่ repository ที่เดียว)

ที่นี้ถ้าเราต้องการใช้ eclipse ร่วมกับ
maven , maven ก็มี plugin อยู่ตัว
ที่ช่วยในการ generate .project กับ
.classpath ให้เรา (เป็น file ที่ eclipse
ใช้ในขบวนการ build) ทำให้เรา
เปิด eclipse มา edit source ได้เลย
ไม่ต้องไปเสียเวลา add jar file เข้ามา
ใน build path อีก

การใช้ก็ไม่ยากอะไร
เขียน project .xml เสร็จ ก็สั่ง
maven eclipse

ตัว file .classpath ที่ maven สร้างให้จะสร้างตามนี้
1. the build source directory
2. the build unit test source directory
3. the JRE being used
4. the appropriate version of JUnit
5. each Maven project dependency
6. an output directory for compiled code: target\classes
7. any .zip source archives

ตัวอย่าง .classpath ที่ maven gen ให้
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry excluding="" kind="src" path="src/main/java">
</classpathentry>
<classpathentry excluding="" including="" kind="src" path="src/main/resources">
</classpathentry>
<classpathentry output="target/test-classes" kind="src" path="src/test/java">
</classpathentry>
<classpathentry kind="var" path="MAVEN_REPO/junit/jars/junit-3.8.1.jar">
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
</classpathentry>
<classpathentry kind="var" path="MAVEN_REPO/log4j/jars/log4j-1.2.8.jar">
</classpathentry>
<classpathentry kind="output" path="target/classes">
</classpathentry>
</classpath>

จะสังเกตุเห็นว่า มี variable อยู่ตัวที่ชื่อ MAVEN_REPO (maven repository location)
ซึ่งเราต้องเข้าไป manual add ใน eclipse เอง
หรือไม่ก็สั่ง
maven eclipse:add-maven-repo 

แต่การสั่งแบบนี้ต้องมีการ set ค่า ${maven.eclipse.workspace}
(eclipse workspace location)
ไว้ใน project.properties ด้วย

อ่านเพิ่มเติม

Related link from Roti

Wednesday, March 23, 2005

ปัญหา encoding ของ eclipse

ช่วงนี้อยู่ระหว่างการย้ายสภาพแวดล้อมการทำงาน
จาก window ไปเป็น linux (ubuntu)
ก็เลยมี issue ให้จัดการเยอะหน่อย
ล่าสุดก็เป็นกรณี eclipse editor preference ไม่มี encoding thai ให้เลือก
ทดลองสั่ง LANG=th_TH ก็พบ warning ตอน start eclipse
(process:5042): Gdk-WARNING **: locale not supported by C library

ก็เลยต้อง reconfig locales ใหม่ให้ถูกต้อง
sudo dpkg-reconfigure locales

Related link from Roti

ศึกษา ADHD case

ตอนนี้กำลังง่วนอยู่กับการศึกษา super-computer ที่บ้ายอยู่
กำลังหาหนังสืออ่านกรณี Attention Deficit Hyperactivity Disorder (ADHD)
กับกรณี Autistic Disorder
เพื่อไว้กรณี super-comp ของเราจะเข้าข่ายนี้

ปล. ใครยังไม่มีลูก ก็ลองหาลูกสักคนดูนะ
โปรแกรมยากมาก
debugger ก็ไม่มีให้ด้วย

Related link from Roti