2014年4月25日 星期五

死法無法預測

原文網址:https://plumbr.eu/blog/you-cannot-predict-the-way-you-die


在花了一天對付另一個 Heisenbug:每當我快抓到原因,它就會變了樣;我想我在這個 case 中學到的東西應該有分享的價值。

我寫了一個簡單的範例來展示這個狀況。在這個例子中,我建立一個 Map 然後用無窮迴圈往裡頭狂塞 key-value:

class Wrapper {
  public static void main(String args[]) throws Exception {
    Map map = System.getProperties();
    Random r = new Random();
    while (true) {
      map.put(r.nextInt(), "value");
    }
  }
}

2014年4月24日 星期四

外部 JS 呼叫 Java static method

內容有點無腦,先把結論寫在前面:

外部 JS(官方文件稱為「handwritten JS」,其實不同 GWT Module 就滿足這個條件)要呼叫 Java 的 static method,必須先透過 JSNI 設定 $wnd.methodName = @fooPackage.FooClass::javaMethodName(*),後續使用 $wnd.methodName() 來達到目的。

關鍵在於 JSNI 中:

  • javaMethodName() 後頭不需再加 ()
  • javaMethodName() 的參數某些情況下可以省略 field descriptor,直接用 * 代替。

update:感謝 darkk6(ptt.cc)提醒,讓我發現我不但死腦筋,而且還少測了一種寫法… 所以文章就要重新翻修了 (艸

2014年4月5日 星期六

NIO.2 的檔案操作

前言

以往 Java 要操作檔案時,總得自己去面對 XXStream、XXReader、XXWriter,一不小心就迷失在 class hierarchy 迷宮中而搞不清楚到底該怎麼寫才好 [淚目]。NIO.2 的出現,提供了簡單好用的 method 來解決這些困擾。

這篇都還在 Java 7 的範圍。已經出的 Java 8 也對 NIO.2 做了一些改善,中文資料可先參考 Ingram Chen blog 的 File operation 章節。

2014年4月1日 星期二

GWT RPC 的 deserialize 行為與 IE8

原文網址:http://blog.oio.de/2014/03/28/gwt-rpc-deserialization-vs-ie8/


幾乎每個 web 開發人員都知道,當 JS 執行時間過久 browser 就會跳出討厭的對話框問你要不要取消。在 IE 上頭會顯示「這個網頁的指令碼造成 Internet Explorer 執行速度緩慢」。

這篇文章將說明 IE8 的特殊行為、它如何影響 GWT RPC 的 deserialize 機制、以及如何解決這些問題。