พยายามตามหาคำนิยามของ JavaFX มานานมาก วันนี้คิดว่าพอได้คำตอบ
JavaFX = (JRE + multimedia extension) + new scripting language + more supported platforms
หรือถ้าอธิบายให้ง่ายขึ้นไปอีก JavaFX คือ Sun’s AIR เหมือนกับ Silverlight คือ Microsoft Flash
ที่ต้องบอกว่าเป็น Sun’s AIR เพราะว่าเป้าหมายของ JavaFX คือแอพพลิเคชันนอกเบราว์เซอร์ ส่วนจะไปรันในพีซี มือถือ หรือว่าเครื่องเล่นดีวีดี ซันจะ(พยายาม)สร้าง runtime ให้ (ถ้าอุปกรณ์ของคุณไม่สนับสนุน ก็ถือเป็นความซวยไป เหมือนกับ iPhone ไม่มี Flash)
เพื่อความสะดวกในการเปรียบเทียบ ก็ขอเทียบกับ AIR ละกัน
Multimedia extension หมายถึงฟีเจอร์ด้านกราฟฟิกและวิดีโอต่างๆ ที่ไม่เคยเป็นของถนัดของจาวา แต่โดนบังคับใส่เพราะว่าคู่แข่งคือ Adobe เซ็ตมาตรฐานไว้สูง ไม่มีก็ขายไม่ออก
จุดขายของ Java เดิมคือ JRE มีติดตั้งอยู่ทั่วไป จากสถิติของ Blognone 90.54% ติดตั้ง JRE มาแล้วโดยระบบปฏิบัติการ ส่วน Flash เหมือน Adobe จะอ้างเลขว่า 98-99%
ปัญหาของทั้ง JavaFX และ AIR คือไอ้ฟีเจอร์ที่เพิ่มเข้ามาเนี่ย (ของ AIR ก็คือพวก local storage และอื่นๆ) มันไม่มีใน runtime ที่ชาวบ้านติดตั้งกันอยู่เยอะแล้วตามตัวเลขข้างต้น ดังนั้นถ้าอยากใช้ฟีเจอร์ใหม่ ก็ต้องดาวน์โหลดรันไทม์ใหม่นะจ๊ะ
ผมเคยคุยกับใครไม่รู้จำไม่ได้แล้วว่า ผมมองว่า RIA เป็นสงครามชิงพื้นที่ ใครมี runtime เยอะกว่าชนะ ซึ่งกลยุทธของ Adobe ในการหลอกให้ชาวบ้านลง AIR ก็ตรงไปตรงมาคือหาโปรแกรมดีๆ ดังๆ มาล่อให้เยอะเข้าไว้ โดยตัว runtime สามารถโหลดไปพร้อมกับโปรแกรมได้อัตโนมัติ
สถานการณ์จำลองของฝั่ง Adobe คือคนเข้าเว็บ Pownce เพราะเห็นว่า Leah Culver น่ารัก (อวดก่อนว่าผมเคยนั่งติดเธอตอนไป FOWA) ทีนี้เห็นลิงก์ในเว็บ Pownce ว่ามีโปรแกรมไคลเอนต์ให้ดาวน์โหลด ก็กดโหลดตามประสานักท่องเว็บจอมโหลด พอจะลงโปรแกรมมันบอกว่า ต้องการ AIR runtime ด้วยนะ ตอบ OK ไปโปรแกรมก็จัดการให้ ได้ส่งข้อความผ่าน Pownce client คุยกับ Leah สมใจ
ฝั่ง JavaFX ก็คล้ายๆ กัน คือ เข้าไปในหน้าแอพพลิเคชัน JavaFX (ลองจากหน้านี้ได้) กดปุ่ม Launch มันจะไปเรียก Java Web Start ขึ้นมา (ซึ่งเทียบได้กับ AIR runtime) แล้ว Java Web Start จะทำการ extend ตัวเองให้มีฟีเจอร์เพิ่มเติมใน JavaFX โดยการโหลด extension มาเก็บไว้ (ถือเป็นการอัพเดต JRE ในตัวให้เป็น JRE เวอร์ชันแถม FX) แล้วก็โหลดตัวแอพพลิเคชันจริงๆ มาอีกครั้ง พอเสร็จกระบวนการทั้งหมด เราก็ได้ใช้โปรแกรมสมใจเหมือนกัน
สรุปว่าในแง่กระบวนการติดตั้ง runtime ก็ใกล้เคียงกัน JavaFX อาจจะได้เปรียบนิดๆ ตรงที่การติดตั้งทำได้ง่ายกว่า ไม่ต้องกด Ok มากเท่า (เพราะถือเป็นการติดตั้ง extension ลงใน JRE ที่ติดตั้งบนระบบปฏิบัติการอยู่แล้ว ต่างจาก AIR runtime ที่เป็นการติดตั้งโปรแกรมลงในระบบปฏิบัติการใหม่) กับเรื่องขนาดของตัว runtime ที่ต้องโหลด แต่ในยุคบรอดแบนด์คงไม่มีผลมากนัก เพราะกระบวนการนี้ทำครั้งแรกครั้งเดียวพอ
โลกยุคนี้ไม่ได้มีแต่ desktop OS อีกต่อไปแล้ว มันยังมีอุปกรณ์พิสดารประหลาดๆ โผล่มาอีกเรื่อยๆ ซึ่งกระบวนการติดตั้งหรืออัพเกรด runtime ของอุปกรณ์เหล่านี้มันต่างไปจาก desktop OS เพราะว่าบางทีผู้ใช้ไม่มีสิทธิ์เพิ่มเติมอะไรลงใน OS ของมันได้ (ยกเว้นจะ flash firmware ซึ่งชาวบ้านปกติก็ไม่ทำกัน)
ทางออกก็คือสร้างตัว runtime เวอร์ชันใหม่ แล้วส่งให้ผู้ผลิตฮาร์ดแวร์ติดตั้งให้แต่โรงงาน
ฝั่ง JavaFX เรียกตัว runtime ใหม่ว่า JavaFX Mobile แถมใช้คำเรียกซะหรูว่าเป็น Mobile OS ให้คนงงเล่น กำหนดเสร็จเห็นบอกว่าปี 2009 สไตล์ของ JavaFX คือเป็น OS ของมือถือตัวใหม่แยกต่างหากไปเลย ส่วน runtime บนมือถืออย่างพวก Android, Symbian, Windows Mobile, BlackBerry นั้นไม่มีข้อมูล
ฝั่ง Adobe บอกว่ามีในแผนแน่นอน (ไม่มีก็โง่แล้ว) แต่ยังไม่บอกว่าเมื่อไร
นอกจากมือถือแล้ว JavaFX มีแผนจะไปลงเครื่องเล่น Blu-ray และ TV ซึ่งจะตามมาในอย่างเร็วก็คงปี 2010 ส่วนฝั่ง Adobe ยังไม่มีข่าวออกมา
บน desktop ระบบปฏิบัติการอื่นๆ JavaFX กินขาดเพราะอาศัยบุญเก่าของ JRE ที่มีอยู่บนหลายแพลตฟอร์มอยู่แล้ว ทำได้ไม่ยาก ส่วน Adobe มีชื่อเสียเรื่องนี้มานาน เพราะ Flash บน Linux มันห่วยมากแถมไม่มี Flash x64 หรือ PPC ถึงจะมี AIR Linux แต่ก็เป็นประชากรชั้นสองเพราะได้ใช้ช้ากว่าชาวบ้านเขาเยอะ
ส่วนบน desktop หลักคือ Windows กับ Mac นั้นเสมอกัน หรือถ้าวัดเฉพาะตอนนี้ก็ต้องบอกว่า Adobe เหนือกว่าตรงที่ออกของจริงมาให้ลองใช้นานแล้ว ส่วน JavaFX ยังเป็นตัวอ่อนอยู่
สรุปว่าประเด็นนี้ แบ่งๆ กันไป JavaFX ดูอนาคตสนับสนุนแพลตฟอร์มเยอะกว่า แต่ Adobe มีของแพลตฟอร์มหลักให้ใช้แล้ว อย่างไรก็ตาม ที่แน่ๆ คือไม่น่าจะมีบน iPhone ทั้งคู่
นอกจากเพิ่มความสามารถให้ JRE แล้ว สิ่งที่เพิ่มเข้ามาใน JavaFX คือภาษาใหม่ที่เรียกว่า JavaFX Script
โปรแกรมที่เขียนด้วย JavaFX Script จะถูกแปลเป็น bytecode ดังเช่นเขียนด้วย Java ปกติ (รวมถึง JRuby, Jython, Groovy และอื่นๆ)
ทำไมถึงต้องสร้าง JavaFX Script ขึ้นมาอีก? ไหนว่า Java เป็นภาษาเทพ?
เหตุผลก็คือกลุ่มเป้าหมายหลักของ JavaFX (และ RIA) ไม่ใช่คนที่เขียน business logic หรือ J2EE หรือต่อกับ Oracle 10g Enterprise แต่เป็นบรรดาดีไซเนอร์ที่ทำ Flash อันควายๆ ในหน้าแรกของเว็บไทยเกือบทุกแห่งต่างหาก การจะให้ดีไซเนอร์เหล่านี้มาเขียนโค้ดแบบ Object-Oriented คงทำได้ยากพอๆ กับเอา Flash ออกจากหน้าแรก แต่ถ้าเป็นภาษาในระดับเดียวกับ ActionScript/MXML นั่นก็พอไหว
สรุปว่าถ้าเขียนจาวาเป็นอยู่แล้ว อยากมาเขียน JavaFX ก็ไม่ต้องลงเรียน JavaFX Script ใหม่ ใช้ภูมิปัญญาเดิมที่มีอยู่ได้ แต่นักพัฒนา Flash/Flex เดิมจะอยากมาหัดเขียน JavaFX Script ไหม อันนี้ผมยังกังขา
(หมายเหตุ: เพื่อความแฟร์ต้องบอกว่า Microsoft ก็เจอปัญหาเดียวกันในการดึงคนมาเขียน C# หรือภาษาอื่นๆ ในตระกูล .NET เพื่อทำ Silverlight)
นอกจากนี้ยังมีประเด็นรายล้อมอื่นๆ เช่น เรื่องของเครื่องมือ ซันกำลังพยายามทำเครื่องมือพัฒนา JavaFX เอาใจดีไซเนอร์หรือเว็บโปรแกรมเมอร์เป็นการใหญ่ เช่น ปลั๊กอินสำหรับ Netbeans เพื่อเอาใจโปรแกรมเมอร์ฮาร์ดคอร์, เครื่องมือออกแบบที่เทียบได้กับ Expression Studio ของไมโครซอฟท์ เอาใจพวกกึ่งๆ และปลั๊กอินสำหรับ Illustrator/Photoshop เพื่อเอาใจพวกดีไซเนอร์จ๋าๆ
ตรงนี้คงสู้กับ Adobe ได้ยากเพราะเป็นเจ้าของ Illustrator/Photoshop อยู่แล้ว ส่วนฝั่ง IDE ทาง Adobe ก็อาศัยประโยชน์จาก Eclipse ออกมาเป็น Flex Builder ให้ใช้ (ขาย) อีกเหมือนกัน แถมยังเอาใจนักพัฒนายากจนโดยการเปิดซอร์ส AIR SDK แบบคอมมานด์ไลน์ให้ด้วย อารมณ์ว่าถ้าจนแต่ใจรักก็ยังสามารถพัฒนา AIR ได้
ผมหาคำเรียกไม่ถูก แต่ถ้าให้พยายามอธิบาย JavaFX เป็นการพัฒนาอีกสายของ Java โดยพัฒนาเพิ่มเติมมาจาก Java สายหลักอีกที จับกลุ่มเฉพาะทาง (ที่ดันใหญ่หน่อย) ตัวแกนหลักของ Java ก็ยังพัฒนาไปตามทางของมันเองไม่เกี่ยวกัน ถ้าชีวิตนี้กะว่าเขียน J2EE บนเว็บขายอย่างเดียว ก็ไม่ต้องสนใจอะไร JavaFX เลย ต่อไปโหลด JRE มา มันคงขายพ่วงส่วนขยาย JavaFX มาให้ ซึ่งไม่ใช้ก็ไม่เป็นไร แต่ถ้าอยากใช้ มันก็มีให้ใช้
วิธีการพัฒนาแบบนี้มันจะคล้ายๆ กับ .NET Framework 3.0 ท่ีไมโครซอฟท์รวมเอาพวก WPF หรือ WCF เข้ามา โดยไม่ปะปนกับตัวแกนหลักของ .NET (ซึ่งเอาเข้าจริงมันก็คือแกนของ .NET 2.0 แล้วค่อยมาพัฒนาอีกครั้งตอน 3.5) ถ้ายังรัก Windows 98 อยากสร้างโปรแกรมด้วย GDI อยู่ก็ไม่ต้องไปสนใจ WPF แต่ถ้าติดใจ Vista อยากทำหน้าต่างใสๆ WPF ก็มีให้ใช้ใน .NET 3.0
ส่วนประเด็นว่าทำไมผมถึงเข้าใจว่า JavaFX คืออะไร ขอยกไปไว้หัวข้อสุดท้าย
คู่แข่งโดยตรงของ JavaFX คือ AIR (และคาดว่า Silverlight เวอร์ชันนอกเบราว์เซอร์จะตามมาอีกไม่นานนัก) มาลองเปรียบเทียบกันในแง่มุมต่างๆ
สรุปว่าฝั่งผู้ใช้นั้น เทียบแล้วพอๆ กัน แต่ฝั่งนักพัฒนา Adobe ทิ้งห่าง และตอนนี้ยังไม่เห็นเหตุผลอะไรที่เราควรใช้ JavaFX แทน AIR ยกเว้นกรณีของคนที่อยู่ในโลกของ Java จริงๆ แต่ถ้าพวกกึ่งๆ JavaFX ไม่มีอะไรน่าดึงดูดเลย
นอกจากนี้ Adobe ยังออกสตาร์ทไปล่วงหน้า นำไปหลายช่วงตัว ปัจจุบันเริ่มมีโปรแกรม AIR เจ๋งๆ อย่าง Google Analytics Suite ออกมาให้เห็น พาร์ทเนอร์รายใหญ่ๆ อย่าง Pownce หรือ eBay มีไคลเอนต์เวอร์ชัน AIR ให้ดาวน์โหลด ถ้า JavaFX ไม่มีหมัดเด็ดฮุกปลายคางจริงๆ ผมก็ไม่เห็นเหตุผลอะไรที่ eBay จะสร้าง JavaFX client ขึ้นมาอีกให้ซ้ำซ้อน (ยกเว้นซันจ่ายเงินจ้าง ซึ่งมันก็ไม่ practical เพราะต้องจ่ายทุกรายไป)
เหตุผลที่ผมไม่เข้าใจว่า JavaFX คืออะไร มีสาเหตุเดียวล้วนๆ คือ ฝ่ายประชาสัมพันธ์ของซันอ่อนด้อยมากๆ
ลองดูคำนิยามบนเว็บไซต์ JavaFX (ซึ่งทำเว็บได้ห่วยมากๆ อีกเช่นกัน)
JavaFX is a family of products for creating Rich Internet Applications (RIAs) with immersive media and content.
อ่านแล้วก็ไม่เก็ตอยู่ดีใช่ไหมครับว่ามันคืออะไร บอกแค่ว่าเป็น products ซึ่งเป็นคำที่เลื่อนลอยมาก iPhone ก็เป็น product, Windows Vista ก็เป็น products
ดูจาก java.sun.com กันบ้าง
Build rich internet applications (RIAs) with the JavaFX family of products. It includes the tools and platform SDK for developers, web scripters, and designers to create dynamic applications for the next generation of web delivered content. Learn more about JavaFX technology and how you can build applications for desktop, mobile devices, and TV screens here.
ความอ่อนด้อยของซันคือ ไม่สามารถนิยาม JavaFX แบบชัดๆ ได้ว่าคืออะไร เช่น Solaris คือ ระบบปฏิบัติการ, OpenOffice คือ ชุดโปรแกรมออฟฟิศ, Netbeans คือ IDE, MySQL คือ ฐานข้อมูล
ลองดูคู่แข่งว่าทำกันอย่างไร ถึงไมโครซอฟท์ไม่พูดออกมาตรงๆ แต่สื่อทั่วโลกก็รายงานออกมาในโทนเดียวกันว่า Silverlight คือ Microsoft Flash (ซึ่งเป็นการอธิบายโดยใช้การเปรียบเทียบของที่มีอยู่แล้ว) ฟังนิดเดียวอ๋อ
ถ้าเอาตรรกะนี้มาใช้กลับ AIR คือ Adobe .NET Framework หรือจะเป็น Adobe JRE ก็ได้เช่นกัน
แต่ซันไม่สามารถทำแบบเดียวกันได้ บอกได้แค่ว่า JavaFX คือ “อะไรสักอย่าง” ที่เกี่ยวข้องกับ RIA เท่านั้น
Java Applet ก็ถือเป็น RIA ยุคแรกๆ JavaFX เกี่ยวอะไรกับ Applet รึเปล่า?
สาเหตุหนึ่งของความงงงวยนี้ ส่วนหนึ่งมาจากยุทธศาสตร์ไร้สาระของซันเอง ที่ตั้งชื่อผลิตภัณฑ์ในตระกูลขึ้นต้นด้วย JavaFX เหมือนกันทั้งหมด ทั้ง JavaFX เฉยๆ, JavaFX Mobile และ JavaFX Script
ลองเทียบแบบนี้ดูครับ
จะเห็นว่ามันมีวิธีตั้งชื่อที่เข้าท่ากว่ากันเยอะ ปัญหาในประเด็นนี้มี 2 ข้อคือ อันแรกตั้งชื่อซ้ำซ้อน (ซึ่งพอให้อภัยได้เพราะว่าไมโครซอฟท์ก็ทำบ้าง) แต่ข้อสองคือชื่อของ JavaFX เฉยๆ นั้นไม่อธิบายให้กระจ่างชัดว่ามันต่างจาก JavaFX ตัวอื่นๆ อย่างไร (generic เกินไป) อย่างน้อยๆ ถ้าเรียกเป็น JavaFX Platform คงจะลดความสับสนลงมาได้ระดับหนึ่ง
อย่าลืมว่าเวลาพูดกันภาษาปาก เราไม่มีทางพูดชื่อเต็มอยู่แล้ว เช่น เดินมาเห็นเพื่อนเขียนโปรแกรมอยู่ ถ้าถามว่าเขียนภาษาอะไร เพื่อนเราคงไม่ตอบว่า “เขียน JavaFX Script อยู่” แน่ คำตอบย่อมเป็น “เขียน JavaFX” อยู่แล้ว ปัญหานี้จะไม่มีถ้าตั้งชื่อตัวภาษากับแพลตฟอร์มให้ต่างกันออกไป
หมายเหตุ: Java language กับ Java platform ก็มีปัญหานี้ (ผมเชื่อว่าไม่มีใครอธิบายคำว่า Java เฉยๆ ว่าเป็น platform แน่) แต่พอยิ่งมี JavaFX เข้ามา มันเลยยิ่งยุ่ง
ไมโครซอฟท์แก้ปัญหานี้ได้อย่างฉลาดคือเรียกตัวภาษาให้ต่างจากแพลตฟอร์ม แถมภาษาที่มีอยู่เดิมอย่าง VB พี่แกก็ห้อย .NET แถมมาให้เป็น VB.NET จะได้ไม่สับสน
ที่น่าเศร้าเคล้าน้ำตาคือ ทั้ง JavaFX Script และ JavaFX Mobile มีชื่อเดิมอยู่แล้วคือ F3 กับ SavaJe แต่ซันไปซื้อมาแล้วเปลี่ยนชื่อให้ยุ่งเปล่าๆ
จะอ้างว่า JavaFX เป็นเทคโนโลยีใหม่ที่หาคำมานิยามไม่ได้ ก็คงฟังไม่ขึ้นนัก เพราะบริษัทอื่นๆ ที่เปิดตัวเทคโนโลยีแนวใหม่เหมือนกัน เค้าก็แก้ปัญหานี้ได้ โดยการนิยามหมวดใหม่ของตัวเองขึ้นมา (เช่น Twitter “microblogging” หรือ Facebook “social network”)
ในเว็บของซันมีแต่บอกว่า JavaFX ดีเทพแบบนั้นแบบนี้ มีฟีเจอร์อ่านชื่อแล้วรู้สึกไฮโซเป็นสิบๆ แต่ถ้าบอกไม่ได้ว่ามันคืออะไร ความพยายามทั้งหลายก็สูญเปล่า
การสื่อสารและประชาสัมพันธ์ผลิตภัณฑ์ เป็นเรื่องสำคัญมากๆ ในยุคนี้ บางบริษัทอย่างแอปเปิล ถึงกับใช้การตลาดนำวิศวกรรมเสียด้วยซ้ำ และผลที่ออกมาคือ วิธีการสื่อสารของแอปเปิลเคลียร์มาก คนฟังคำโฆษณาของแอปเปิลแป๊บเดียวแล้วเข้าใจทันทีว่า iPod ใช้ดีแค่ไหน (“เก็บเพลงได้ 5,000 เพลง”) หรือทำไม Leopard ถึงดีกว่า Tiger (“เร็วขึ้น 3x”)
แต่ซันไม่สามารถทำอะไรแบบนี้ได้เลย ขนาดผมนั่งอ่านแล้วอ่านอีก ทั้งเว็บและบทวิเคราะห์ตามเว็บต่างๆ มากมาย ว่าจะเข้าใจว่า แท้จริงแล้ว JavaFX คืออะไร ใช้เวลาไปปีครึ่ง (นับจากวันประกาศ JavaFX เดือน พ.ค. 2007)
ใครมีคนรู้จักอยู่ซัน รบกวนส่งบล็อกนี้ไปให้อ่านเถิดครับ อย่ารอมันตายก่อนคลอดเลย
JavaFX
อัพเดต
วิเคราะห์ถึง JavaFX ได้กระจ่างชัดมากครับ
ผมก็เข้าใจมันลึกๆ จากที่นี่หละครับ ( จากที่เคยเข้าใจว่าเป็น Sun’s AIR เฉยๆ)