Saturday, June 25, 2005

จดหมายผิดซอง

วันนี้ได้รับจดหมายเชิญ

Dear polawat phetra,

You are confirmed to attend:

Topic: Mobile & Entertainment Executive Summit Dinner
Date: Tuesday, June 28, 2005
Time: 7pm - 11pm (Reception 7pm, Dinner 8pm)
Location: San Francisco Museum of Modern Art
151 Third Street (between Mission and Howard Streets) (view map)
Dress: Business/Cocktail

Best Regards,
Alan Brenner
Vice President Engineering, Consumer & Mobile Systems Group


หึ มาจากไหนวะ
เลี้ยงใน Museum ด้วย งานน่าจะหรู

จากนั้นอีกวันต่อมา
Dear polawat phetra,

Please accept our apologies as you were recently sent the below message in error. Sun Microsystems deeply regrets any inconvenience this may have caused. We are taking action to update our processes to ensure that this does not happen again.

Thank you,
Sun Microsystems

Related link from Roti

Tuesday, June 21, 2005

Pan รูปขนาดใหญ่ด้วย javascript

ดูได้ที่ Link นี้

Related link from Roti

คนเหล็ก

ใน signal vs. noise วันนี้มี post
ที่ชี้ไปยัง Lance Armstrong 's physical advantage

Armstrong can ride up the mountains in France generating about 500 watts of power for 20 minutes, something a typical 25-year-old could do for only 30 seconds. A professional hockey player might last three minutes - and then throw up.


มีหนังสือแปลชีวประวัติของเขา
เป็นภาษาไทยด้วยนะ ออกมานานแล้ว

Related link from Roti

Monday, June 20, 2005

Long Request Filter

วันนี้เจอ Servlet Filter ที่น่าสนใจที่เดียว
ชื่อว่า LongRequest ใช้เป็น solution
สำหรับห่อ Web Application Request
ที่ใช้เวลา processing นานๆ
โดย filter ตัวนี้จะ intercept request
จากนั้นก็ส่ง page เล็กๆ ที่ทำหน้าที่แสดง
progress bar กลับไปก่อน
และเจ้า progress page ก็จะทำการ poll
ไปยัง filter เป็นระยะๆ
เมื่องานจริงๆ เสร็จก็จะทำการแสดงผล

ชอบ solution นี้ตรงที่มันไม่ต้องไปยุ่งกับ code
ที่เราเขียนเลย แค่ดัก intercept ตรงข้างหน้าเท่านั้นเอง

Related link from Roti

ruby ติดดิน

วันนี้เห็น blog Spring Live เขาอ้างถึง
post The Rise of Open Source Java
มี graph ยอดหนังสือของ O'REILLY ที่น่าสนใจ



ดูเจ้า ruby สิ ติดดินเชียว

Related link from Roti

Sunday, June 19, 2005

SWT Snippets

SWT Snippets

Related link from Roti

ใช้ jEdit ช่วยทำ Source Highlighting #2

วิธีการเขียน jEdit Plugin ก็คือ
เริ่มต้นที่ Plugin Core Class โดยเขียนง่ายๆดังนี้

package highlight;

public class HighlightPlugin extends EditPlugin {
public void start() {
}

public void stop() {
}

}

ในส่วน start กับ stop ใช้ในการเตรียม resources
ต่างๆที่ plugin จะใช้
ในกรณีของเราไม่ต้องการทำอะไรก็เลยเว้นไว้

จากนั้นก็ทำการเขียน plugin properties file
โดยมีชื่อเดียวกับ plugin class แต่ตัด word "Plugin"
ที่ต่อท้ายออก ในกรณีนี้ใช้ชื่อว่า Highlight.props

plugin.highlight.HighlightPlugin.activate=defer
plugin.highlight.HighlightPlugin.name=HighLight
plugin.highlight.HighlightPlugin.author=pphetra
plugin.highlight.HighlightPlugin.version=0.1
plugin.highlight.HighlightPlugin.depend.0=jedit 04.00.03.00

# Menu
plugin.highlight.HighlightPlugin.menu=highlight.convert

# Menu action labels
highlight.convert.label=convert to clipboard


ในตัว props จะประกอบด้วย 2 ส่วนคือ
ส่วน metadata กับส่วน menu
"highlight.convert" ก็คือ menuItem
ที่จะ add เข้าไปใน Plugin Menu

โดย ค่าของ plugin.highlight.HighLightPlugin.menu
มีความหมายว่า
  • ให้ add menu ที่มี label เป็นชื่อเดียวกับ Plugin Name เข้าไปใต้
    Plugins Menu
  • add menuItem ที่ชื่อ highlight.convert
    เข้าเป็น menuItem ของ menu ข้างบน


ส่วนกรณีที่มี submenu หลายๆอัน ก็แค่ใส่เรียงกันไป
เหมือนตามตัวอย่างข้างล่างนี้

plugin.highlight.HighLightPlugin.menu=highlight.current-buffer highlight.current
-selection highlight.dump

# Menu action labels
highlight.current-buffer.label=Current buffer
highlight.current-selection.label=Current selection
highlight.dump.label=dump


จากนั้นก็เขียน action mapping file
ที่ชื่อ actions.xml

<?xml version="1.0"?>
<!DOCTYPE ACTIONS SYSTEM "actions.dtd">
<ACTIONS>
<ACTION NAME="highlight.convert">
<CODE>
plugin = org.gjt.sp.jedit.jEdit.getPlugin("highlight.HighLightPlugin"
, true);
plugin.convert(textArea, view);
</CODE>
</ACTION>
</ACTIONS>

หลักการของ file นี้ก็คือ เราจะกำหนดว่า
เมื่อ action ถูก trig ให้ทำงาน
จะต้องทำงานอะไร
ซึ่งการสั่งว่าต้องทำงานอะไรนั้น จะใช้ BeanShell script
สำหรับในตัวอย่างนี้ กรณีที่ action highlight.convert
ถูกเรียกใช้ ก็จะทำการเรียกใช้
method convert ใน HighlightPlugin ของเรา

เพิ่ม method convert(..) เข้าไปใน HighlightPlugin ของเราดังนี้

public void dump(JEditTextArea textArea, View view) {
Selection[] selection = textArea.getSelection();
StringWriter sw = new StringWriter();
BufferedWriter out = new BufferedWriter(sw);

int last = 0;
for (int i = 0; i < selection.length; i++) {
if (selection[i].getEndLine() > last) {
last = selection[i].getEndLine();
}
}

// Sort selections by their start lines
MiscUtilities.quicksort(selection, new SelectionStartLineCompare());
int lastLine = -1;
for (int i = 0; i < selection.length; i++) {
int physicalFirst = selection[i].getStartLine();
int physicalLast = selection[i].getEndLine();

if (physicalLast <= lastLine) {
continue;
}

formatText(out, textArea, Math.max(physicalFirst, lastLine + 1),
physicalLast);

lastLine = physicalLast;
}
try {
out.flush();
out.close();
} catch (IOException io) {

}

Registers.setRegister('$', sw.toString());
}

จะเห็นว่าใน source code มีการทำ sorting ด้วย
เนื่องจาก jEdit สามารถทำ multiple selections ได้
จึงต้องจัดเรียงลำดับ block ให้ถูกต้องก่อน
จากนั้นก็ใล่ loop เพื่อทำการ format
แต่ละ block ให้เป็น html

ในการ convert เป็น html นั้น เราจะใช้
feature ของ jedit ในส่วนของ syntax highlighting เอง
โดยเราสามารถ access SyntaxStyle จาก JEditTextArea ได้
ซึ่ง jedit กำหนดไว้ว่า แต่ละภาษา
สามารถ config Token type ได้สูงสุด 18 แบบ
โดยวิธีกำหนด style ของแต่ละ syntax สามารถดูได้จาก
link นี้

source code ในส่วนที่แปลงเป็น html
ไม่ได้ลงไว้ให้ดูครับ เนื่องจากมันค่อนข้างยาว
ผู้ที่สนใจสามารถ download Code2HTML plugin
มาดูเป็นตัวอย่างได้

Related link from Roti

ใช้ jEdit ช่วยทำ Source Highlighting #1

อยากให้ blog ของตัวเอง
สามารถแสดง syntax highlighting ในส่วน source code ได้มานานแล้ว
แต่ยังไม่มีโอกาสสักที วันนี้ก็เลยมองหา solution ดู

กรณีที่เป็น unix command line
ก็จะมี tool ที่เรียกว่า source-highlight อยู่แล้ว
สามารถเรียกใช้ด้วยคำสั่ง
source-highlight -s java -f html -cstylename Main.java

แต่เนื่องจากวิธีนี้ไม่ค่อยสะดวกสบายนัก
เพราะขณะที่เราเขียน blog ด้วย editor
การ switch ไปใช้ command line ก็ไม่ใช่ทางเลือกทีี่ดีเท่าไร
(แถม output ที่ได้ ยังเป็น html ตัวเต็มๆ
ซึ่งเราต้องการแค่บางส่วนเท่านั้น )

ทางเลือกที่ 2 ที่เจอก็คือ
xmltools
แนวทางนี้ก็คือเขียน blog เป็น xml file เลย
จากนั้นก็ทำการ transform xml file นั้น
ทางเลือกนี้ก็น่าสนใจดี
เหมาะอย่างยิ่งสำหรับการเขียนเอกสาร ในลักษณะของ xml document
แต่ก็ยังไม่ถูกใจอยู่ดี

ทางเลือกที่ 3 ก็คือเขียนเป็น editor plugin หรือ script
ให้สามารถเลือกส่วนที่ต้องการ convert
จาก editor โดยตรง จากนั้นก็สั่ง
transform เพื่อให้เป็น html ที่ต้องการ

ตกลงใจเลือกทางเลือกที่ 3
จากการค้นดูใน net พบว่า
เจ้า jEdit มี plugin ที่ชื่อ Code2HTML อยู่
ก็เลยลอง load มาใช้
ผลลัพท์ที่ได้ก็ยังไม่น่าพอใจนัก เพราะ code ที่ gen
ออกมานั้นยังทำส่วน CSS ไม่ดีนัก

คำว่าไม่ดี ก็คือมันมี css element
ที่มีชื่อเป็น syntax1, syntax2, syntax3 ... ออกมาเต็มไปหมด
นอกจากนี้ การ gen ก็เป็นการ gen file html ทั้ง file
คือมี tag html, head, body ออกมาด้วย

สุดท้ายก็เลยทำการเขียน jEdit Plugin ขึ้นมาเอง
โดยใช้ตัวอย่าง code จาก code2HTML plugin
ซึ่งก็ได้ความมันส์พอสมควร เพราะมีบางอย่างที่คู่มือไม่ได้อธิบายไว้
ต้องไล่จากตัว source code ของ jedit เอง

Related link from Roti