2013年3月31日 星期日

Java 各種亂數產生器(PRNG)的弱點

原文網址:http://www.javacodegeeks.com/2013/03/weaknesses-in-java-pseudo-random-number-generators-prngs.html

這是 Kai Michaelis、Jörg Schwenk 還有我在 RA Conference 2013 的 Cryptographers' Track 發表論文的總結。 你可以取得我演講時的投影片、還有論文全文。 我們對常見 Java library 所產生的亂數序列進行分析, 這些 Java library 用了 PRNG(Pseudo Random Number Generator,通常是 SecureRandom), 我們發現在特定條件下有明顯的弱點。 為了讓這篇文章盡可能簡短,各種 PRNG 所用的演算法、詳細的 bug 描述、 統計檢驗的結果都略過不提,但是論文裡頭都有。 我們的調查涵蓋 PRNG 本身、以及它們用來作 seed 的 entropy collector (例如沒有可用的實數產生器時)。 底線:需要品質良好的亂數時,不要使用 PRNG!

2013年3月28日 星期四

Dart 會是 Web 的未來嗎?

原文網址:http://highscalability.com/blog/2013/3/20/dart-is-it-the-future-of-the-web.html

John McCutchan 有很長一段職場生涯是在 Linux kernel 領域, 現在以程式碼最佳化大師的身份被挖去 Google 的 Dart 團隊。 這轉折還蠻令人好奇的,直到你看到這個影片: 〈透過 Dart 將 SIMD 帶進 web 領域〉。 John 說了同行都能懂的理由,他喜歡 Dart 有三個原因: 效能、效能、還是他媽的效能。

2013年3月27日 星期三

簡介 Java 8 的 default method

原文網址:http://www.javacodegeeks.com/2013/03/introduction-to-default-methods-defender-methods-in-java-8.html

我們都知道 Java 裡頭的 interface 僅包含 method 的宣告、並沒有實作的部份, 任何 implement interface 但又不是 abstract class 的 class 必須提供這些 method 實作。 看看下面這個例子:

functional interface:Java 8 重新製作的概念

原文網址:http://www.javacodegeeks.com/2013/03/introduction-to-functional-interfaces-a-concept-recreated-in-java-8.html

下面這些 interface,全世界各地的 Java 開發人員至少用過一個以上: java.lang.Runnablejava.awt.event.ActionListenerjava.util.Comparatorjava.util.concurrent.Callable。 上述這些 interface 當中有一個共同的特點,就是它們只定義了一個 method。 JDK 當中有一堆這樣的 interface、Java 開發人員也製造了一堆。 這些 interface 也被稱為 Single Abstract Method interface(SAM interface)。 普遍常見的用法是產生一個 anonymous inner class 來使用這些 interface:

2013年3月22日 星期五

Java Collection API 的怪事

原文網址:http://www.javacodegeeks.com/2013/03/java-collections-api-quirks.html
感謝 tkcn 在 Java 技術上的協助。

在提到 Java Collection API 時,我們會認為已經了解全部的東西了, 像是 ListSetMapIterableIterator。 我們已經準備好 補強 Java8 的 Collection API

但在那之後,每隔一段時間我們就會偶然發現這些奇怪的怪事, 來自於 JDK 深處、以及向下相容的遙遠歷史。 讓我們來看一下這些不可修改(unmodifiable) 的 collection。

2013年3月20日 星期三

你懂 JIT compiler 了嗎?

原文網址:http://plumbr.eu/blog/do-you-get-just-in-time-compilation

還記得最後一次被寫 C 的人笑是什麼時候的事情嗎? Java 真的有夠慢、慢到他們打死也不會考慮用這樣的語言? 其實從很多方面來看,這種講法還是成立啦。 但是在大型企業的軟體骨幹中(這是 Java 的典型用途), Java 的效能絕對可以跟其他技術相抗衡。 這可能都要感謝神奇的 JIT。 在解說 JIT compile 技巧前,讓我們先多講一些它的背景。

2013年3月19日 星期二

Java 的 method call 要付出多少代價?

原文網址:http://plumbr.eu/blog/how-expensive-is-a-method-call-in-java

我們都遇到過這種場景: 看著設計不良的 code,聽著寫出這 code 的人辯稱:「你不能為了設計犧牲效能啊!」 而你就是無法說服那個人放棄那有 500 行的 method, 理由是一連串的呼叫有可能降低效能。

2013年3月18日 星期一

最流行的 application server

原文網址:http://www.javacodegeeks.com/2013/03/most-popular-application-servers.html

這是我們發表關於 Java 統計資料系列報導的第二篇。 所使用的數據是來自於免費版 Plumbr 安裝資料, 我們在過去六個月當中收集到 1024 種不同的環境。

本系列的第一篇文章分析的是底層——JVM 在什麼作業系統上執行、 是 32 還是 64 bit(譯註:原文打 62,應該是 typo)、 以及 JVM 供應商與版本號碼。 在這篇文章中,我們將焦點放在所使用的 application server。 這比預期的挑戰大一點,我們找到最好的解法是去解析 bootstrap classpath, 用類似 grep -i tomcat classpath.log 的查詢方式。 這還蠻簡單的,結果發現了一些相反的事情:

2013年3月16日 星期六

Agile 的 11 個謠言與 2 個真相

原文網址:http://www.javacodegeeks.com/2013/03/11-agile-myths-and-2-truths.html

我提供了許多 Agile 的訓練課程、也講了很多 Agile 的事情(BCS Bristol tonight)。 有些問題一再地出現,結果就是人們開始相信這些 Agile 謠言。 因此我一再地把時間花在拆穿這些謠言上。

我一直有一個小清單,上面有 11 個重複出現的謠言, 還有兩個對於一些團隊或公司比較難接受的真相。

2013年3月14日 星期四

web platform 這詞會取代 HTML5 嗎?

原文網址:http://www.2ality.com/2013/03/web-platform.html

當 web platform 出現在各平台、用來實作 application, 它看起來像是在加強替換 HTML% 的力道(已經很大程度地替換掉 Ajax 了 Ref.1)。 在這個脈絡下,這兩個術語都代表了 web browser 上的程式語言平台。 前者包含 JS;後者沒有,嚴格來說它包含了以 JS 為基礎的 API。

為甚麼 web platform 是個好選擇?

這是確實發展中的事情,原因有三: 第一,web platform 將實際平台描述的更好。 HTML5 當中的 HTML 暗示著「web browser 上除了 JS 的其他東西」, 但是 JS 是這個平台不可分割的一部分。 其次,一個不必要的版本號碼限制了 HTML5 的壽命。 再者,我們、以及知道什麼是 web 的人早就談論過 web apps 了。 所以「web apps 是奠基在 web platform 上」是很適合的用法。

因此,當 web 社群聚在一起讓 web 開發的文件更完善時, web platform 的名字就被選來撰寫文件。 感謝這些努力,web platform 也有一個 logo 了:

web platform logo

web platform 日益重要

越來越多的作業系統讓你使用 web platform 來撰寫一流的 apps。例如:

此外,Google 跟 Mozilla 都在研究如何讓 web apps 變成原生的桌機應用程式: [packaged apps](Google 的第一步:Chrome app launcher)與 Mozilla 的 Desktop WebRT

2013年3月13日 星期三

ECMAScript 6 的參數 destructuring 功能與 forEach()

原文網址:http://www.2ality.com/2013/02/foreach-es6.html

這篇文章會簡單介紹 ECMAScript 6(以下簡稱 ES6) 的 destructuring、 以及這個功能對 forEach() 這個 array method 的好處。