วันอังคาร, มิถุนายน 28, 2554

Native Swing ... อุดจุดบอด ให้ Java Desktop


พอดีไปรับอาสา Coaching ให้กับเด็ก interns ฝั่ง London ของที่ออฟฟิศ
เลยได้ของเล่นมาเล่นเยอะแยะมากมาย ... ไม่ว่าจะเป็น JavaFX หรือแม้แต่ SWT ...

สิ่งที่ได้เห็นคือ ความแตกต่างกันในเรื่องของ ความกระตือรือร้น
รวมไปถึง ความใฝ่รู้ในเรื่องที่ฝึกงาน ...
ระหว่างเด็กไทยกับเด็กฝรั่ง ในปีนี้ นั้นเห็นได้ชัดเจนมาก...
อาจจะเพราะทางฝั่งฝรั่ง assign งานให้โหดมาก
(แต่ได้ข่าวว่าฝั่งไทยก็โหดพอกัน)
และด้วยความที่เป็น Master Degree ก็เป็นได้ ...

ขอออกตัวแรงๆ ก่อนเลยว่า ส่วนตัวแล้ว ไม่ได้มองว่า Java เร็วส์ หรือ Java ค้างส์
แต่มองว่า Java คือ เครื่องมือทำมาหากิน ... ถึงแม้มันจะแย่ หรือ จะดียังไง
ทุกวันนี้ก็ยังต้องนั่งเขียนมัน ... นั่งแก้บั๊กมัน ... นั่งออกแบบมัน ...
และยังต้องนั่งปวดหัวกับมัน ดังนั้นจึงให้ความใส่ใจในการทำงานกับมัน ... 
ที่ไม่ได้เกิดขึ้นเพราะความชอบส่วนตัว หรือ ความเป็น zealot กากๆ แต่อย่างใด ...

เข้าเรื่องเลยดีกว่า ...
ตั้งแต่ทำ java desktop มาจะเกือบ 3 ปีได้ ... ก็เจอจุด pain หลายๆ อย่าง ...
ไม่ว่าจะเป็น code เมพ ... design แหล่ม ... หรืออะไรก็แล้วแต่ ...
สิ่งที่เป็นจุดบอดสำคัญๆ ของ java desktop คือ ยังเป็น UI ยุคเก่า ....
ที่แม้ชาวบ้านจะทำ Graphic เป็นระดับ HD ไปแล้ว ... java ก็ยังวิ่งอยู่ระดับ pixel ต่อไป ...

แต่หลังจากได้ coaching เด็ก interns ก็พบว่ายังมีบาง Lib ที่ไม่เคยคิดจะเข้าไปยุ่งกับมัน ...
มีความสามารถพอที่จะช่วยให้ java คลานต่อไปได้อีกหน่อย นั่นคือ SWT ...


SWT คือ UI toolkit อีกชุดของ java ที่พัฒนาโดย .. IBM ...
หลักๆ ของ SWT ที่แตกต่างจาก AWT คือ SWT จะพยายามทำทุก component ของ Java
ให้เป็น Native Component ... โดยผ่าน JNI ... ข้อดีข้อเสียของมันเป็นดังเหมือนดาบสองคม
นั่นคือ .... ดีที่เร็วส์ ... แต่เสียที่ไม่ cross platform (หรือพูดง่ายๆว่าต้องมี for window , for linux )

จึงเป็น Lib ข้าวนอกนา ในสายตาของคนที่วิ่งอยู่บน Standard JDK มาก ....
ซึ่งการรัน SWT พร้อมกับ Swing นั้นค่อนข้างที่จะบาป ยิ่งกว่าการเขียน AWT ผสมกับ Swing ..
เพราะ Thread ที่ใช้ ในการ render component นั้น จะแยกกันทำงาน ทำให้ยากต่อการ debug มาก ...

แต่ทั้งหมดนั้น ... เป็นเรื่องที่เกิดขึ้นเมื่อ 10 ปีที่ผ่านมา ....
ในวันนี้ มีคนหัวใส เขียน Bridge ระหว่าง SWT และ Swing ขึ้นมา ชื่อว่า Native Swing

คร่าวๆ เกี่ยวกับ Native Swing คือเป็น wrapper ที่ Bridge ระหว่าง Swing กับ SWT
และ SWT กับ Window Native โดยใช้ OLE Bridge อีกต่อนึง .... (เหมือนเขียน VB เรียก ActiveX)
ทำให้สามารถ integrate SWT Component ที่มีอยู่แล้ว ขึ้นมาใช้ได้ใน Swing App ปกติ ...
ที่น่าสนใจของ Library ตัวนี้ ก็คือ SWT Component อันได้แก่

JWebBrowser

ไว้สำหรับ embed Browser ลงใน Swing App ... ที่ครั้นจะรอ JavaFX ก็คงอีกนาน
(แม้ Beta version ออกมาก็ยังกาก เกินกว่าจะเทียบ native ได้ )
ข้อดีของ component ตัวนี้คือ เป็นการดึง Native Feature ของ IE มาใช้ ....
ดังนั้น หากเครื่องที่ลง IE9 ไว้จะพบกับความเร็วส์ ในการโหลด ตามประสิทธิภาพของ IE
พร้อมทั้งอาจจะเจอความห่วย ในรุ่นเก่าๆ ลงมาไปพร้อมกัน ..... ซึ่งหากไม่พอใจ
ก็สามารถใช้ XULRunner ของ Firefox มา embed แทนได้ ....
แต่ package application ก็จะมีขนาดใหญ่ขึ้น ตามขนาดของจิ้งจอกไฟ ...

 

ตัวต่อมาคือ

JFlashPlayer 

เป็น component ที่ดึง Flash ActiveX มาใช้ได้อย่าง ... เนียนมาก ... เนียนจนขนาดที่
สามารถทำ bridge กลับระหว่าง Java กับ Flash ได้ .... ซึ่งหากใครที่มองว่า Java Desktop
เป็น UI ล้าสมัย ... ก็สามารถทำ Flash มาต่อกับ API ที่มีอยู่เดิมให้มีลูกเล่นเพิ่มเติมได้มากขึ้น
ทั้งนี้ ก็ขึ้นอยู่กับ code ของ project นั้นๆ ว่ามีความ messy เพียงใด (ฮา)


มีหลาย component มากขี้เกียจรีวิวเยอะ เอาตัวสุดท้ายแล้วกัน ...

JMediaPlayer 

แทบน้ำตาไหลสำหรับ video player ที่สามารถเล่นบน java ได้ ...
ซึ่ง Lib นี้ก็มี bridge ให้ใช้กับ VLC ได้อีกเช่นกัน ...



สรุป
แม้ว่า SWT จะทำได้หลายอย่างโดยที่มี Native Swing เป็นตัวจัดการให้กับ Swing
แต่ทั้งนี้ก็ขึ้นอยู่กับว่า Feature ที่เป็น native นั้นๆ สามารถรองรับความต้องการของลูกค้า
รวมไปถึง time-to-market ได้ดีแค่ไหน .... และที่สำคัญคือ ...
License ในการ distribute เป็นอย่างไร ....
การทำ commercial app ที่มีลักษณะเป็น product ... ยากกว่าที่คุณคิดเยอะ ...
Related Posts Plugin for WordPress, Blogger...