Friday, November 17, 2006

ถ้าเป็น yaws หล่ะ

เห็น Guruguru เขาลอง compare Rails กับ Web.py ดู
มีผลลัพท์จากคำสั่ง
ab -n 300 -c 100
เปรียบเทียบให้ดู
ผลลัพท์ ก็ไม่เป็นที่น่าแปลกใจสำหรับผมนะ
แต่ด้วยความมันส์ในอารมณ์ อยากรู้ว่า ถ้าเป็น yaws (web server ของ erlang) หล่ะ
ค่าที่ได้จะออกมาประมาณไหน

Disclaimer
เนื่องจากเครื่องก็คนละเครื่อง นำมาเปรียบอะไรกันไม่ได้หรอกนะ

source code
<erl>
out(A) ->
{ok, Name} = queryvar(A, "name"),
{html, f("hello ~s", [Name])}.
</erl>


ผลการทดสอบ

Server Software: Yaws/1.61
Server Hostname: 127.0.0.1
Server Port: 8000

Document Path: /hello.yaws?name=world,
Document Length: 13 bytes

Concurrency Level: 100
Time taken for tests: 0.319860 seconds
Complete requests: 300
Failed requests: 4
(Connect: 4, Length: 0, Exceptions: 0)
Write errors: 0
Total transferred: 52500 bytes
HTML transferred: 3900 bytes
Requests per second: 937.91 [#/sec] (mean)
Time per request: 106.620 [ms] (mean)
Time per request: 1.066 [ms] (mean, across all concurrent requests)
Transfer rate: 159.44 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.5 0 7
Processing: 1 8 3.3 8 22
Waiting: 1 7 3.2 7 21
Total: 2 8 4.1 8 22

Percentage of the requests served within a certain time (ms)
50% 8
66% 10
75% 10
80% 10
90% 14
95% 19
98% 20
99% 21
100% 22 (longest request)


ผลที่ได้ รู้สึกจะดีเกิดคาดไปหน่อย
หวังว่าคงไม่ได้ทำอะไรผิดนะ

Note: ทำไมตัวเลข total transfered ของเรา มันมากกว่าของเขา 5 เท่าหว่า
Document Length ก็เท่ากัน

Related link from Roti

IBOutlet

เมื่อวานไป train เรื่อง cocoa ที่ทาง Apple จัดให้ฟรีมา
มีประเด็นติดใจเรื่อง IBOutlet
ว่าจริงๆแล้วมันคืออะไร
ประเด็นหลักๆที่เป็นจุดเริ่มต้น ก็คือ
ใน XCode การ paint หน้าจอ gui เราจะทำผ่าน Interface Builder
ทุกอย่างที่ paint หรือ compose จะเก็บไว้ pack ในโครงสร้างที่เรียกว่า NIB file
ซึ่งมันตรงข้ามกับ approch ของ java ที่เวลาเรา paint gui
สิ่งต่างๆที่ paint หรือ setting จะถูก generate ออกมาในรูป java code
,ดังนั้นพวก widget ต่างๆของ swing
ที่เราเลือก paint ลงไป จะเห็นเป็นตัวแปรกันจะๆ ใน source code เลย
ถ้าอยาก customize widget ไหน
ก็สามารถเขียน code เข้าไปแก้ได้ทันที

ประเด็นคำถามที่เกิดขึ้นเมื่อวาน ก็คือ แล้วถ้าเราอยาก access object ต่างๆ
ที่อยู่ใน gui หล่ะ เราจะทำอย่างไร
เช่นอยากเข้าไป customize format ของ NSTextfield
มีคำตอบหนึ่งที่ได้มา ก็คือการใช้ IBOutlet
แต่ก็เป็นคำตอบที่เลาๆ คือไม่ exactly ว่า IBOutlet คืออะไร

Note: สำหรับคนที่ไม่รู้จัก IBOutlet
ลองดูตัวอย่างภาพการใช้งาน

@interface ConverterController : NSObject
{
IBOutlet NSTextField *amountField;
IBOutlet Converter *converter;
IBOutlet NSTextField *dollarField;
IBOutlet NSTextField *rateField;
}


ลองหานิยามของ IBOutlet ใน AppKit ดู
จะพบว่ามันอยู่ใน file
<AppKit/NSNibDeclarations.h>
และมีนิยามแบบนี้

#ifndef IBOutlet
#define IBOutlet
#endif

Bingo, มันคือ macro เปล่าๆ ที่ไม่มีผลในการ compile
ดังนั้นสำหรับผมแล้ว IBOutlet คือ marker อันหนึ่งใน source code
ที่ถูกใช้โดย interface builder
(IB ที่เห็นเป็น prefix ของ IBOutlet ย่อมาจาก Interface Builder)
ทำให้เราสามารถลากโยง(ผ่านทาง GUI)
ให้ instance (controller)
สามารถ access UI widget ที่เราต้องการได้
หรือถ้าพูดในมุมมองของ oop, IBOutlet
ช่วยให้เรากำหนด relationship ระหว่าง object
ผ่านทาง GUI tool (drag-drop).

สำหรับประเด็นในตอน runtime
นั้นขึ้นอยู่กับ strategy การเก็บ Nib file
ของ apple ว่าเป็นแบบ pure serialize, pure definition,
หรือ definition + serialize
(pure definition ถ้ายกตัวอย่างก็เช่น xul ของ mozzila)
ถ้าการเก็บมีรูปแบบของ definition เข้ามาปน
ก็จะมีประเด็นว่า หลังจาก initialize object ขึ้นมา จาก definition file แล้ว
ก็จะต้องมีการ set dependency ตาม relationshipt ที่ได้ define ไว้

Related link from Roti

ไม่แม่น

ผมมีปัญหาเรื่องความจำ
คือเป็นคนไม่ชอบจำแบบแม่นยำ (เรียกกฎหมายไม่ได้แน่)
แต่ชอบจำเลาๆ ผสมกับความรู้สึกนิดๆ
ถ้าส่วนผสมของความรู้สึกมากหน่อย
ก็จะจำเพี้ยนไปได้เยอะ

อย่างเช่น
ผมจำได้เลาๆว่า float มัน ไม่ exactly
เช่นค่า float 0.1 ใน computer มันไม่ใช่ 0.1 จริงๆ
แต่ก็ไม่รู้ว่า จริงๆแล้วมันเป็นเท่าไร
แต่ประเด็นก็คือ ความจำในส่วนนี้ผมผสมความรู้สึกมากไปหน่อย
ค่าที่อยู่ในใจ ก็เลยเพี้ยนค่อนข้างสูง เช่นเพี้ยนไปเป็น 0.103 อะไรแบบนี้

ปัญหาก็จะเกิดเวลาที่มีประเด็นปัญหาทาง software ให้ต้องวินิจฉัย
แล้วเรานำความรู้เลาๆไปร่วมวินิจฉัย
ซึ๋งบางครั้งความเพี้ยนนี้จะพาเราเข้าป่าไปได้เหมือนกัน

วันนี้ก็เลยนั่งหาว่า float 0.1 จริงๆแล้วมีค่าเท่าไร
คำตอบคือ ค่า float 0.1 คือ
1.10011001100110011001101 × 2^-4
หรือประมาณ 0.100000001

*อ้างอิง What Every Computer Scientist Should Know About Floating-Point Arithmetic

Note: Lew ก็เคยเขียนเรื่องนี้ใน in-depth ของ blognone
Decimal

Related link from Roti

Wednesday, November 15, 2006

ประสบการณ์

พึ่งโดดงานพาลูกไปเที่ยวทะเลมา 2 วัน
ได้อ่าน post เรื่อง ประสบการณ์ ที่ eYacht
ก็เลยซาบซึ้งเป็นพิเศษ

Related link from Roti

Tuesday, November 14, 2006

Ubuntu -> TIS-620

บริษัท ผมยังมีโปรแกรมเก่าๆ ที่ต้อง maintain ด้วย terminal อยู่
เดิมที่อยู่ใน windows ก็จะใช้พวก teraterm
ตอนนี้ย้ายมาใช้ ubuntu edgy ก็เจอปัญหาใหม่

ปัญหาแรก ก็คือจะ set encoding อย่างไร
ลองสั่ง locales -a แล้ว ก็มองไม่เห็น th_TH
ทดลองสั่ง
sudo dpkg-reconfigure locales
แทนที่จะขึ้นหน้าจอฟ้าๆมาให้เลือก
มันก็ดัน automatic generate en_*.utf8 ขึ้นมาเยอะแยะไปหมด

เอาใหม่ หันไปใช้ synaptic
เลือกลง language support th
อ้าได้ th_TH.utf8 มาแล้วโว้ย แต่ยังขาด TIS-620 อยู่

สุดท้ายก็ลองแก้ file
/var/lib/locales/supported.d/th
เพิ่มบรรทัด
th_TH.TIS-620 TIS-620
สั่ง sudo dpkg-reconfigure locales ซ้ำ

สำเร็จอย่างงงๆ
(เป็นการมั่วให้ได้ผลลัพท์ แต่ไม่เข้าใจว่าเกิดอะไรเบื้องหลังบ้าง
เข้าข่าย Programming by Coincidence)

Related link from Roti

The Pledge

วันนี้เปิด TV. ไปสะดุดตากับรายการ reality series ที่ชื่อ The Pledge
ที่ถ่ายทำคนธรรมดา 15 คน ที่ commit ว่าจะเข้าร่วมการแข่งขันไตรกีฬา
ที่สะดุดตา ก็เพราะ
  • รายการ Triathlon นี้จัดที่ภูเก็ต (Laguna Phuket Triathlon)
  • ผมก็เคย commit เข้าร่วมรายการนี้เหมือนกัน

เห็นแล้ว ก็เลยอยากนำมาเผยแพร่ต่อ

สาเหตุหลักๆที่ผมเคยเข้าแข่ง Triathlon ก็คือ
"ความอยากที่จะลองทำสิ่งที่ไม่คิดว่าจะทำได้"
อย่างว่ายน้ำ ผมมาหัดว่าย freestyle ตอนอายุ 25
เริ่มแรกนี่ สระ 10 เมตร ยังว่ายไม่ถึงเลย
หรือวิ่งก็เหมือนกัน เป็นคนไม่ชอบวิ่งมาแต่เด็ก
เวลาเล่นกีฬา ก็จะเลือกที่มันวิ่งน้อยสุด

ลองอ่านบันทึกผมในช่วงนั้นดูว่าบรรยากาศมันเป็นอย่างไร

เช้าวันที่ 2
ผมเข้าไปจัดของในบริเวณจุดเปลี่ยนการแข่งขั้น
ตอนประมาณ 6.30 น.
คนค่อยๆทยอยกันมา
บรรยากาศคึกคักมาก
ทั้งเจ้าหน้าที่และนักกีฬา
แต่ละคนอยู่ในชุดทะมัดทะแมงมากเลย
ผมได้ที่จอดจักรยานในสุด ช่วยให้
หลบความวุ่นวายใด้มากขึ้น
การเตรียมก็เป็นการเตรียมอุปกรณ์
ชุดต่างๆที่ต้องใช้ รวมทั้งอาหาร+น้ำดึ่ม
ช่วงนี้นักกีฬาต้องทยอยให้เจ้าหน้าที่เขียน
เบอร์ตามตัว มีเขียนที่ไหล่ซ้าย ใหล่ขวา
ต้นขาหน้าซ้าย ข้างขาขวา กับน่องขวา
ผมได้เบอร์ 311

ช่วง 7.15 ได้เวลาเดินทางไปจุดปล่อยตัว
ว่ายน้ำ วันนี้แสงสวยมากเลย ฟ้าครึ้มๆแต่
มีแสงแดดสาดลงมา ทำให้บรรยากาศดู
อิ่มตาดี ยิ่งมีนักกีฬา 400 คน ในชุดว่ายน้ำ
หลากสี + หมวกว่ายน้ำสีเหลือง + ทะเลเรียบ
บรรยากาศ สุดบรรยาย
ก่อนปล่อยตัว พวกนักกีฬาก็ลงไปว่ายวอร์ม
ในน้ำกัน ผมก็เลยถือโอกาศลงไปฉี่ด้วย
จากนั้นก็ขึ้นมากินน้ำไปอีกขวดเพื่อป้องกัน
ไม่ให้ปากเค็มมากนักเวลาว่ายน้ำ
8.00 น. เริ่มการปล่อยตัว ทุกคนวิ่งกรูกันลงน้ำ
ผมวิ่งช้าๆออกไป เพราะไม่อยากไปแย่งที่ว่าย
กับเขา ha ha แต่หลบไม่พ้นแฮะ การว่ายน้ำ
เป็นกีฬาที่ค่อนข้างโกลาหลเหมือนกัน ว่ายกัน
ไหล่เบียดใหล่ มือชนขาเลย ช่วงที่ว่ายอยู่
มีอยู่คนหนึ่งความเร็วเท่ากับผมเลยเจอกัน
ตลอดทาง เขาคอยตัดหน้าตัดหลังอยู่ตลอด
เวลา เดี๋ยวก็ว่ายไปทางซ้าย เดียวก็ตัดมาทาง
ขวา ไม่รู้ว่าผมว่ายเบี้ยวหรือเขาว่ายเบี้ยวกันแน่
ทุ่นแรกอยู่ห่างฝั่งไป 300 เมตร
ส่วนทุ่นที่สองวางขนานฝั่งไปอีก 400 เมตร
ทุ่น 3 ก็ว่างขนานฝั่งไปอีก 400 เมตร
กว่าจะถึงแต่ละทุ่น มองแล้วมองอีก
ทุ่นสุดท้ายห่างฝั่ง 330 เมตร คราวนี้ใจชื้น
แล้วมองเห็นฝั่งแล้ว เริ่ม speed ปนหอบเล็กๆ
ถึงผั่งได้รู้สึกดีใจมาก หันไปมองข้างหลังแล้ว
ต้องร้องไชโย เพราะพบว่ายังมีคนข้างหลังเราอีก
พอสมควร (ไม่เป็นที่โหล่แล้ว) จากนั้นก็วิ่งขึ้นฝั่งไป
ลง lagoon น้ำจึดเพื่อจะว่ายอีก 370 เมตร
อันนี้สิเริ่มเหนื่อยแล้ว เริ่มเสียอาการ (ว่ายเอียง
ไปเอียงมา ) อ้อข่วงที่ไกล้ๆผั่ง
เริ่มปวดฉี่อีกครั้ง แต่ฉี่ไม่ออก สงสัยกำลังเหนื่อย
มั้ง สมองคิดใหญ่ เฮ้ยถ้าไม่ฉี่เดี๋ยวตอนแข่ง
จักรยานจะฉี่ยังไงหล่ะ ก็เลยเบ่งใหญ่เลย
เฮ้อ เป็นการฉี่แบบระยะยาว ในทะเลนิดหนึ่ง
แล้วเก็บไปต่อในน้ำจึดอีกนิดหนึ่ง
พอถึงอีกฝั่ง ก็วิ่งช่วงสั้นๆเพื่อไปเอาจักรยาน
บรรยากาศบังคับให้ต้องวิ่ง ทั้งๆที่อยากจะเดิน
มากกว่า ไปถึงจักรยาน ใส่รองเท้า เสื้อกางเกง
พร้อมกับกินกล้วยไป 1 ลูก แล้วก็วิ่งพาจักรยาน
ออกมา แหมกองเชียร์คึกคักมาก
ทำให้วิ่งฉิวเลย (ปกติจะอู้มาก) ขึ้นจักรยานได้ก็
ไปโลด

ช่วงจักรยาน ระยะทาง 55 กิโลเมตร ช่วง 8
กิโลแรกเป็นภูเขาสูง
เจอเขาปุ๊บก็จอดเข็นปั๊บ : ) ไม่น่าเกลียดหรอก
เพราะมีเพื่อนเข็นเต็มเลย แต่ตอนลงเขานี่สิ
สนุกมาก แต่ต้องระวังแหกโค้ง
ช่วงที่ 2 เป็นเนินเล็ก เนินกลาง โค้งเล็กโค้งน้อย
เป็นทางถนัด ก็เลยค่อยๆใส่แซงไปเรื่อยๆ
ระหว่างทางจะผ่านชุมชนเป็นระยะระยะ
ก็จะมีเด็กคอย hello กับผู้ใหญ่นั่งดูเป็นกลุ่มๆ
หน้าที่เราก็คอยแจกยิ้มอย่างเดียว
พอช่วงกิโลที่ 40 แรงหมด (ซ้อมมาแค่นั้น)
หมดแรงนี่หมดจริงๆเลยนะ ป้อแป้ๆไปเรื่อยๆ
พวกที่เราแซงไปก็ค่อยๆทะยอยแซงกลับมาจนหมด
ผมก็กัดฟันขี่ต่อไปอีก 15 กิโล พวกกลุ่มหลังๆ
ก็เริ่มคุ้นหน้าคุ้นตากันตอนนี้แหล่ะ

พอกลับมาถึงจุดเปลี่ยนจักรยาน คราวนี้ใครจะวง
ใครจะวิ่ง กูไม่วิ่งแล้ว เดินจูงจักรยานไปเก็บ
นั่งพักเหนื่อยสักพัก (เอ้อระเหยเลยแหล่ะ)
คว้ากล้วยออกมากินอีกหนึ่งลูก
กิน chocolate อีก 4 อัน ค่อยๆเปลี่ยนเสื้อกับรองเท้า
ระหว่างนั้นก็จะมีคนเข้ามาเป็นระยะๆ แต่ละคน
เข้ามาปุ๊บก็วิ่งออกไปปั๋บ ไม่รู้จะรีบร้อนไปไหนกัน

ถึงช่วงวิ่งนี่สิ โหดของจริง กิโลแรก ตะคริวกินสองขา
เลยทั้งเหนือเข่า และน่อง โชคดีที่หน่วยพยาบาลผ่านมา
เขาเห็นเรากระย่องกระแย่งก็เลยปราดเข้ามาทายาให้
ค่อยสบายขึ้นหน่อย
ในช่วงวิ่งนี้มีจุดให้น้ำทุก 2 กิโลเมตร ผมหยุดกิน
ทุกจุดจุดละสองแก้ว ช่วงนี้เป็นช่วงวิ่งสลับเดิน
(จริงๆแล้วเดินมากกว่าวิ่ง) มันเหนื่อยแล้ว ประกอบ
กับเห็นคนเดินเยอะแยะ เมื่อมีตัวอย่างแล้วก็เลยต้อง
ทำตามสักหน่อย เดี๋ยวเขาจะว่าเราเป็นพวกนอกคอก
ช่วงนี้แหล่ะได้เพื่อนเยอะ ทักทายกันไปเรื่อย
อากาศตอนวิ่งร้อนมากจ้ะ แดดตอนเที่ยงเปรี้ยงเลย
ถึงเส้นชัยได้รู้สึกดีใจที่สุด (ไม่เป็นที่โหล่แล้ว : )
แค่เกือบๆ เฉยๆ )

Related link from Roti

Monday, November 13, 2006

Ruby 's Core Extension ใน Rails

เห็นคุณ Apirak post เรื่อง เจอของเจ๋งใน ruby
เลยขอโฆษณา feature ของ Rails หน่อย

ข้อดีอย่างหนึ่งของ Ruby ก็คือ Class มัน Open
ความหมายก็คือ เราสามารถ extends class ได้
โดยไม่ต้องไปยุ่งกับการ edit และ recompile ตัว source ของมัน

ถ้าเราไปดูใน Module ActiveSupport ของ rails
จะเห็นว่ามันมี directory อยู่อัน ที่ชื่อ core_ext
ตรงนี้คือที่ rails ใช้เก็บ extension ต่างๆ ที่ rails ต่อยอดจาก ruby core class



อย่างตัวอย่างที่คุณ Apirak ยกมา
x = x + 1.month 

ถ้าลองเปิด file core_ext/nummeric/times.rb ดู
จะเห็นว่าเขาเขียนไว้ประมาณนี้
module ActiveSupport #:nodoc:
module CoreExtensions #:nodoc:
module Numeric #:nodoc:

...
module Time

def seconds
self
end
alias :second :seconds

def minutes
self * 60
end
alias :minute :minutes

def hours
self * 60.minutes
end
alias :hour :hours

def days
self * 24.hours
end
alias :day :days

def weeks
self * 7.days
end
alias :week :weeks

...

จะเห็นว่าเขียนเป็น module อยู่
file ที่ include จริงๆ จะอยู่ใน core_ext/numeric.rb
class Numeric #:nodoc:
include ActiveSupport::CoreExtensions::Numeric::Time
include ActiveSupport::CoreExtensions::Numeric::Bytes
end


ลองดูตัวอย่างอื่นๆ ที่ rails เขา extends ไว้
1.even? # => false
2.odd? # => false

1.ordinalize # => "1st"
3.ordinalize # => "3.rd"

[1,2,3].to_sentence # => "1, 2, and 3"


ของที่บ้านเราใช้กัน ก็น่าจะพวก
11.to_thai # => สิบเอ็ด

Related link from Roti

NJUG #2

วันนี้ไปงาน narisa java user group ที่จัดโดย comunities ของ www.narisa.com
มี roofimon เป็นหัวเรือใหญ่ แล้วก็ dean4j หรือ xcaliber เป็นผู้สนับสนุน
รูปแบบ work ใช้ได้เลย, นั่งพูดคุยกันในร้านอาหาร
โดยมีบรรยากาศเป็นแบบไม่เป็นทางการ
(งานนี้จัดที่ bangkok jazz house ตรงถนนพญาไท)
ดูรูปที่ Nonster ถ่ายได้ที่นี่ Link

เมื่อเปรียบเทียบกับงาน blognone แล้ว
ส่วนที่แตกต่างจาก blognone ก็คือ
ลักษณะการ present จะเป็นแบบโต้ตอบมากกว่า
นั่นคือมีการพูดเสริม หรือพูดถาม ณ ขณะที่ทำการ present
ไม่ต้องรอให้บรรยายจบ แล้วค่อยถาม
ซึ่งผมว่ามันดีกว่าบรรยายแบบ solo คนเดียว

ปัญหาหนึ่งที่ต้องเจอในการ meeting
ก็คือเรื่องการทำให้คนที่มาเจอกัน เกิดความคุ้นเคยกัน
และพูดคุยกันได้ (อันนี้เป็นปัญหาที่ codefest ของ nectec ก็เจอ)
บรรยากาศตอนแรก ระหว่างที่รอให้เริ่มงาน
คนที่คุยไม่เก่งอาจจะเกิดความรู้สึกอึดอัดได้
เพราะลักษณะการนั่งที่ค่อนข้างไกล้ชิด หันหน้าชนกัน
พวกนี้ต้องแก้โดยการมี คนที่มีลักษณะสบายๆ
มีบุคลิกเข้ากับคนง่าย
มาคอยเป็นคนเชื่อมประสานให้เกิดการพูดคุย
(หรือไม่ก็ต้องใช้วิธีมอมเหล้า)
โชคดีที่บุคลิกของ roofimon เขาเป็น type นี้อยู่แล้ว
ก็เลยช่วยให้บรรยากาศสบายขึ้น

ที่น่าสนใจอีกเรื่องก็คือ กลุ่มคนที่ไป ~20 คน
มีผู้ที่อ่าน blognone แค่ 3-4 คน
???

ส่วนเรื่องที่พูดคุยกัน ก็มีเรื่อง
Acegi กับ tapestry

เรื่อง Acegi นี้ ถึงเคยใช้แล้ว
แล้วก็เคย post ไว้ด้วย Acegi อีกที
แต่ก็ลืมไปเกือบหมดแล้ว
แถมกลับไปอ่าน ก็รู้สึกว่า ที่เรารู้ตอนนั้น มันเป็นแค่ short cut ให้พอทำงานได้
ไม่ได้ get idea จริงๆ ว่าอะไรเป็นอะไร
มานั่งฟังคราวนี้ คิดว่า get idea แล้ว
ขอบคุณวิทยากรด้วย
(กลับมา ก็ไปเปิด Reference ของ Acegi หน้า 18-19 อ่านทบทวนอีกที)

ส่วนเรื่อง tapestry ที่ผมพูด
เกิดความผิดพลาดขึ้น 2 อย่าง
อย่างแรกก็คือ
ผมนึกว่าจะมีการพูดเรื่อง JSF ก่อน
เลยฝากเนื้อหาทั้งหลายไว้ให้คนที่พูด JSF เป็นคนพูด
ปรากฎว่าหัวข้อ JSF งดไป
(ซวยละสิ ใครจะเกริ่นนำให้วะ)
ข้อผิดผลาดที่สองก็คือ
เจ้า linux มันต่อ projector แล้วกลายร่างเป็น mode 800x600 อีกแล้ว
ทำให้การ demo ที่เป็นกะว่าจะค่อยๆขึ้นรูปขึ้นร่าง มันทำไม่ได้
เพราะ eclipse dialog มันล้นจอ
ตัว layout manager ของ SWT ก็ดันไม่ได้ออกแบบมา กรณีที่จอเล็กว่าเนื้อหา
ก็เลยไม่มี scrollbar ขึ้นมาช่วย scroll

พอ config dialog ไม่ได้ ก็ทำให้ขั้นตอนมันขาดไปขั้นหนึ่ง
จะหันไปแก้ xml file ด้วยมือ ก็ไม่แน่ใจว่าจะหาเจอหรือเปล่า
(Note:
กลับมาบ้าน แล้วยังติดใจอยู่ ลองใช้คำสั่ง grep -R หาดู
จึงรู้ว่าตัว config นี้มันเก็บไว้ใน directory
WORKSPACE_NAME/.metadata/.plugins/org.eclipse.debug.core/lauches/
)
ผลก็เลย demo ไม่ได้ตามที่เตรียม step ไว้
ก็เลยขอติดเป็นการบ้านไว้กับคนที่ไป NJUG ในครั้งนี้
ว่าคราวหน้าจะจัดเป็น workshop ให้แล้วกัน
(พูดอีกอย่าง ก็คือ จะเตรียมตัวให้มากกว่านี้)

Related link from Roti