build desktop app_by_xulrunner

51
XULRunner + JS 開發跨平台且 具擴充性應程式 Rack Lin 阿土伯 @JSDCTW2013

Upload: rack-lin

Post on 02-Jun-2015

834 views

Category:

News & Politics


0 download

TRANSCRIPT

Page 1: Build desktop app_by_xulrunner

 XULRunner  +  JS  開發跨平台且具擴充性應⽤用程式  

   

Rack  Lin  阿土伯  @JSDCTW2013

Page 2: Build desktop app_by_xulrunner

about:me

•  ViViPOS  Co.,  Ltd    技術總監  –  利用 JavaScript  寫 〞收銀機〞(傳統產業,全新感受)  

•  CoCo  都可、50嵐、歇腳亭、Yamaha  、星聚點KTV……    

•  PHP  /  JavaScript  /  Java  Programmer  (目前移情於 Scala  )    

•  [email protected]  •  hRps://twiRer.com/racklin  •  hRp://www.plurk.com/racklin  •  hRps://www.facebook.com/racklin1002  •  hRp://racklin.blogspot.tw/      (生小孩後就變癈墟)  

Page 3: Build desktop app_by_xulrunner

about:me  

•  我是坐在電腦前端的工程師。  

Page 4: Build desktop app_by_xulrunner

跨平台程式開發

•  工程師的浪漫?寫跨平台程式是我的夢想。  

Page 5: Build desktop app_by_xulrunner

跨平台定義  

•  下忍時以為跨平台程式就是:    跨            Windows  95  /  Windows  98  /  Windows  NT              Windows  XP  …………    

Page 6: Build desktop app_by_xulrunner

跨平台定義  

•  中忍時跨平台程式是:    跨            Windows  /  Linux  /  Mac  OSX      

Page 7: Build desktop app_by_xulrunner

跨平台定義  

•  上忍時跨平台程式是:    跨            Windows  /  Linux  /  Mac  OSX      Mobile            Android  /  iOS  /  Firefox  OS  

Page 8: Build desktop app_by_xulrunner

跨平台定義  

•  只有火影能:    跨            Windows  8  /  Windows  8  RT    

Page 9: Build desktop app_by_xulrunner

跨平台的挑戰  

•  GUI  ToolKits    •  Binding  Languages    •  …  •  …  •  …  •  因為  JSDC  +  時間關係  – 總之選定 XULRunner  +  JS  

Page 10: Build desktop app_by_xulrunner

在開始談 XULRunner  前

你聽過 Rich  Client  Pla`orm  嗎?  

Page 11: Build desktop app_by_xulrunner

Rich Client Platform  (wiki)  

• A standard bundling framework  

• User interface management  • User settings management  • Storage management  • Window management  • Update manager  

- Eclipse RCP  

- Netbeans Platform  

- Spring Framework RCP  

Page 12: Build desktop app_by_xulrunner

Netbeans  Pla`orm

•  Empty  app1  (30MB)

Page 13: Build desktop app_by_xulrunner

WHY  RCP

•  寫完一支程式很容易,完成一個產品是很困難的。  – 經常 Branch  /  Code  Generator    

Customer  A

Customer  B

Customer  C

Page 14: Build desktop app_by_xulrunner

是做產品還是代工?  

•  你希望再代工多少個, 讓我們數到十。  

Page 15: Build desktop app_by_xulrunner

WHY  RCP

•  Upstream  Core  Components    

•  Customizadon  – Customer  A  (  Core  +  A1  +  B1  +  C1  ….)  – Customer  B  (  Core  +  A1  +  C1  +  D1  …)  – Customer  C  (  Core  +  A1  +  E1  +  F1  …)  

XULRunner  /  Applicadon  Launcher

Core  (Main  UI  /  API)

Page 16: Build desktop app_by_xulrunner

將專案拆成小模組

•  這裡的模組化,並不是程式中的套件或模組,而是彼此獨立的應用程式。  

•  小模組易於開發及測試  •  小模組昇級容易且快速  •  小模組各思其職  

•  想想 eclipse  /  netbeans  IDE  .  •  想想 firefox  /  google  chrome    

Page 17: Build desktop app_by_xulrunner

一堆小模組

Page 18: Build desktop app_by_xulrunner

產品

Page 19: Build desktop app_by_xulrunner

Javascript  界的 RCP  

XULRunner  

Page 20: Build desktop app_by_xulrunner

Firefox  

•  Firefox  是基於 XULRunner  下開發。  – 在 URL  中輸入  – chrome://browser/content/  

Page 21: Build desktop app_by_xulrunner

Incepdon?  

Page 22: Build desktop app_by_xulrunner

XULApp  StarterKit •  hRps://github.com/racklin/xulapp-­‐starterkit    

•  Build  Scripts  (MacOSX  /  Linux  /  Windows)  •  Skeleton  UI  Sehngs  

– Window  /  Menubar  /  Statusbar  •  Javascript  Libraries  

–  jQuery  –  GREUdls  –  Lodash  

•  Embedded  Develop  Tools  –  SQLite  Manager  –  DOM  Inspector  –  JSConsole  

 

Page 23: Build desktop app_by_xulrunner

XULApp  StarterKit

•  MacOSX  DMG  (34MB)

Page 24: Build desktop app_by_xulrunner

XULRunner 基本特色

•  Cross-­‐Pla`orm  •  I18n  /  l10n    •  Gecko  rendering  engine  – HTML5  *  – CSS3  –  JavaScript  – XML  (XSLT,  XMLHRpRequest,  DOMParser)  

 

Page 25: Build desktop app_by_xulrunner

當成 PhoneGap  用

XULApp  StarterKit  Demo  

Page 26: Build desktop app_by_xulrunner

HTML5  /  CSS3  /  JS

hRps://github.com/racklin/xulapp-­‐starterkit-­‐app-­‐webapp-­‐wrapper  hRps://github.com/racklin/xulapp-­‐starterkit-­‐app-­‐todomvc  

Page 27: Build desktop app_by_xulrunner

萌典 Windows/Linux/MacOSX  

Preferences  System  

Page 28: Build desktop app_by_xulrunner

萌典 Windows/Linux/MacOSX  

Preferences  System  

Page 29: Build desktop app_by_xulrunner

XULRunner  神兵

•  XUL  – XUL  – XUL  Overlays  

•  Preferences  System  •  XPCOM(Cross-­‐Pla`orm  Component  Object  Model)  – C++  /  Python  /  Java  /  Javascript  – Low  Level  API  

•  Ex.  File  Systems  /  Databases  /  Thread  

Page 30: Build desktop app_by_xulrunner

XULRunner  利器

•  Installadon  and  upgrade  mechanism  – XPInstall  

•  Extension  Manager  •  XBL  –  reusable  components  

Page 31: Build desktop app_by_xulrunner

 XULRunner  +  JS  開發跨平台且

具擴充性應⽤用程式  

Page 32: Build desktop app_by_xulrunner

XUL  

•  XML  User  Interface  Language。  – 啥?  – 它提供了⼀一套跨平台的widget定義。  

•  BuRon  /  List  /  Tree  /  Tab  /  Menubar.  

– Why  ??  我們已經有 HTML5    了?  •  如同 Java  中的 Swing  /  SWT    •  XUL  使用的是 Nadve  Pla`orm  UI.    HTML  則是由 CSS  中定義,各平台一致。  

Page 33: Build desktop app_by_xulrunner

Mac  OSX  XUL  DEMO  

Page 34: Build desktop app_by_xulrunner

Linux  XUL  DEMO  

Page 35: Build desktop app_by_xulrunner

大家看出差異了嗎?  

Page 36: Build desktop app_by_xulrunner

沒有是正常的!  

Linux  裝了  mac4lin  -    Mac  OS/X  主題  

Page 37: Build desktop app_by_xulrunner

XUL  Overlays  

•   由 chrome.manifest  中以 URI  定義  –  overlay  chrome://a/content/a.xul  chrome://b/content/b.xul  

•  UI  overlays  –  Like:  $(‘#id’).arer(<html>)  ,  $(‘#id’).before(<html>)  – 發生在 DOMContentLoaded  Event  Trigger  之前  

•  Scripts  Hook  –  Javascript  Script  tag  也能 overlay  ,  所以我們可以於 Extensions  插入 js  至現有程式中。  

Page 38: Build desktop app_by_xulrunner

XUL  Overlays  

 

•  還有一個兄弟 override  – 用另一個 URI  內容 取代原 URI  內容。  – overide  chrome://a/content/a.xul  chrome://b/content/b.xul  

Page 39: Build desktop app_by_xulrunner

Live  Coding  Demo  

XUL  Overlays  /  Override  

Page 40: Build desktop app_by_xulrunner

XUL  Overlays  /  override  

•  它解決了程式設計師在實作 Plugin  的困苦  – 在即有程式中,感知擴充程式的存在並溝通  – 在即有畫面中,提供擴充程式描繪 UI  /  佈局  

•  Override  它解決了  – Live  Patch  bugs  – Template  /  Reports  

Page 41: Build desktop app_by_xulrunner

Preferences  System  

•  about:config  看到的東西  

•  App  or  Extensions  目錄下的 \defaults\preferences\*.js  as  system  preferences.  

•  Profile  目錄下的 prefs.js  as  user  preferences.  

•  Merge  system  and  user  preferences  when  startup  .  

Page 42: Build desktop app_by_xulrunner

Preferences  System  

•  Key-­‐Value  Databases  (  JSON)  •  User  Preferences  •  Registry  System  •  Inter-­‐Process-­‐Communicadon  (別這麼用)  

Page 43: Build desktop app_by_xulrunner

XPCOM  

•  提供 Driver  /  Adaptor  – DBUS  /  OSD  /  VKB  /  ZeroMQ  

•  利用 C++  實作高效能  

•  mozIJSSubScriptLoader    – 強大邪惡的存在  – Extend  DSL  -­‐>  JS  – Encode  JS  – Trial  Expire  Date    

Page 44: Build desktop app_by_xulrunner

Ready  for  Producdon  ?  

工程師都怕將來被釘在牆上  

Page 45: Build desktop app_by_xulrunner

XULRunner  Hall  of  Fame  

•  Firefox  •  Komodo  Edit  •  Flickr  Uploader  •  VIVIPOS  – 全球超過 6000 台收銀機日以繼夜的當白老鼠  

Page 46: Build desktop app_by_xulrunner

LIVE  DEMO

VIVIPOS  

Page 47: Build desktop app_by_xulrunner

HDM9  

•  在眾設計師面前, VIVIPOS  太醜。  

向業界可敬的對手    CASIO  POS    山寨 致敬  

Page 48: Build desktop app_by_xulrunner

剩下十秒鐘了  

Page 49: Build desktop app_by_xulrunner

買房子最重要的三件事:  LOCATION        LOCATION      LOCATION  

 寫軟體最重要的三件事:  

EXTENSION  EXTENSION  EXTENSION

Page 50: Build desktop app_by_xulrunner

工商服務  

歡迎提案合作  

Page 51: Build desktop app_by_xulrunner

Resources

•  Slide:    hRp://goo.gl/w1WIh  

•  XULApp  StarterKit:  hRps://github.com/racklin/xulapp-­‐starterkit  

•  XULRunner  –  MDN  hRps://developer.mozilla.org/en-­‐US/docs/XULRunner