2012年6月17日 星期日

GWT 的 Super Dev Mode 是怎麼運作的?

原文網址:http://tbroyer.posterous.com/how-does-gwts-super-dev-mode-work

GWT 的 Super Dev Mode(別名:Super Draft Mode)一個月前第一次 tease,然後持續發展到上個禮拜正式 land,for your testing pleasure.(譯註:翻譯不能 Orz)

這個 Dev Mode 強化了哪些東西?

在回答這個問題前,讓我們先回頭了解一下 Dev Mode 的構造,它是由 browser plugin 與 code server 所組成、用 TCP 的 socket 彼此溝通以在 JVM 中執行你的 GWT 碼然後跟 browser 互動(以及執行 JSNI),而不用先跑一次漫長的 compile 過程。GWT 的 Dev Mode 也可以(額外)嵌入一個 servlet container(預設是 Jetty 6,也可以用其他的),所以它可以執行 server 端的程式碼。在 GWT 開發指南中可以找到這張圖:
Dev Mode 其中一個優點是在 JVM 中執行你的 client 端程式碼,你可以使用標準的 Java debugger,有 breakpoint、可以觀察變數......等等。此外,server 端的程式碼也在同一個 JVM 上頭執行,就更容易 debug(不過只適用於小程式)。缺點就是需要一個 browser plugin(它得在 UI thread 中阻斷 JS 的執行,但是同步的 XMLHttpRequest 沒辦法提供夠好的效能、Dev Mode 又很聒噪地一直發,更不用說同步的 XHR 將要被淘汰了。)

2012年6月9日 星期六

GWT 已死!

原文網址:http://www.guynirpaz.com/2012/04/28/gwt-is-dead/
翻譯:Alice Liu
校正:PsMonkey

GWT 已經死了啦... 至少對 Totango 來說是這樣的。我們正處於將所有 Totango UI 轉換到 native HTML5 的最後階段。我知道這對於有在關注前端 JavaScript framework 的人而言可能不是什麼新聞,但是在過去幾個月中,我被問了好多次關於使用 GWT 的看法,現在我要清楚表明——我不推薦任何人開始使用 GWT,因為這是個沒有未來的 project。

2012年5月26日 星期六

App Engine 1.6.6 版發佈

原文網址:http://googleappengine.blogspot.com/2012/05/166-sdk-released.html

我們實在太興奮了,迫不及待分享 Search API 這個功能;不過,五月份我們還是有正規的版本發佈時程,裡頭有滿滿的新功能、錯誤修正、以及對一些小東西作粹鍊。

Search API

配合 Search API,我們在 Admin Console 的畫面中加入一個目前仍在實驗階段的 quota 額度限制。我們也修正一些 bug、改變一些 API 的命名以增加一致性。

service 改進

因為不再支援 Master/Slave datastore,新的使用者將不能建立 Master/Slave application。我們強烈建議開發者將現有的 Master/Slave application 轉換到 HRD 上

功能更新

我們一直找尋解除系統限制的方式,讓開發者可以從 App Engine 平台中獲得更多。在這個版本中,開啟付費功能的 application 現在可以設定多達 100 個 cron 工作。(謎之聲:還不是只爽有付錢的人...)

最後,我們每週將會提示一小部份的 admin console 使用者參加使用者滿意調查。

當然,我們沒辦法把所有要告訴你們的東西都放上來,所以請不要忘記閱讀完整的版本更新紀錄(PythonJavaGo 版)。Stack Overflow 的 App Engine 板是很棒的地方,可以讓你從社群、App Engine 團隊中的成員得到技術上的協助,我們也持續地在 Google Group 上討論 App Engine。

譯註:文末還有一段,是 Google App Engine 正在找尋 Solutions Architects

2012年5月4日 星期五

Hibernate + HSQLDB 炸裂

測試環境:Hibernate 4.1.2、HSQLDB 2.2.8、Java 1.6

抓了兩個 H 的最新版,結果前後炸了四五個小時才能開始塞資料。茲紀錄如下。

大抵上是參考 《Hibernate 學習筆記》 (中文嘛...... [毆飛]),只不過 database 改成用 HSQLDB Server 版。

第一個遇到的問題是:只要一作 session.beginTransaction(),Hibernate 就會炸「No suitable driver found for jdbc:hsqldb:hsql://localhost/DBNAME」,最後找到的解法是在建立 Configuration 之前就先執行「Class.forName("org.hsqldb.jdbc.JDBCDriver")」。(參考資料:Hibernate forum

順便補一下,似乎在 Hibernate 4 以後 Configuration.buildSessionFactory() 就被 deprecated 掉,不過(到目前為止)使用起來還是正常。至於標準寫法我沒研究,可參見 stackoverflow

第二個遇到的問題是 session.save() 時 HSQLDB 會炸「user lacks privilege or object not found」,據說如果用 Hibernate 3.6 跟 HSQLDB 1.8 就不會有這種困擾...... Orz。這篇提到要將 Hibernate 的 hibernate.hbm2ddl.auto 設定為 create,實際上要設定成 update。參數之間差別如下:(參考資料:Hibernate reference
  • create:系統 init 時會作檢查 table 是否存在,有的話就會 drop 掉重建。
  • validate:只有在 table 存在時,系統才能正常 init。
  • update:理想狀況,init 時沒 table 會建,有 table 就續用。(不過如果系統運作中有外力 drop table,則會出錯)

做了這些手腳之後,目前 save() 之後東西都會乖乖進資料庫了。於是又寫一篇可能沒多久之後就沒意義的 debug / 教學文...... 軟體業阿...... [遠目]

2012年5月1日 星期二

GWT Elemental library

原文來自於 +Ray Cromwell 以及後續某些 comment。

特別感謝 +YC Ling 指正 bleeding edge 用法。

Ray Cromwell:
為甚麼 GWT 的 SuperDevMode 還沒有 commite 到 trunk?幾個星期前,我提到一個 Google 內部、給 GWT 用的 library,簡稱「clevername」。由於種種原因,目前 SuperDevMode 跟 Google 內部的東西產生了一些相依性,其中一個就是「clevername」。