2014/04/18

10 Reasons why Java Rocks More Than Ever

我喜歡Java,從2000年開始使用Java到今天已經有14年了。對我而言,用Java來開發各種系統,都是很美好的經驗。

Java,對有些人來說,是種語言。但對我來說,Java不只單單是種語言,她還是個執行平台(JVM),更是個很漂亮的API。

今天看到這篇文章10 Reasons why Java Rocks More Than Ever,裡面提到的十點,真的點出了我也認同的Java十大優點:

Part 1: The Java Compiler
Java的結構讓Java程式在compile時可以快速且簡易,也沒有複雜的linking問題

Part 2: The Core API
經過十多年來的演進與累積,JDK core API無論在功能與效能上,都有明顯的進步。一般的程式,只要用core API幾乎就足夠了

Part 3: Open Source
這一點對我來說真的是獲益良多。Internet上充滿了一大堆好用的Java open source,你想得到或想不到的功能都有,讓我可以在很短的時間,就能做出符合需求的系統。不過對我也有些困擾,就是有太多類似功能的libraries/frameworks,讓我得花不少時間去評比與測試,來決定用那一個

Part 4: The Java Memory Model
Java在memory的規劃上完全支援了concurrency computing。這個只要用Java寫過threading就能體會它的好,連C++11與C11都加入了這樣的memory model了

Part 5: High-Performance JVM
JVM加上了JIT,讓這個雖然是虛擬機器(VM),但跑起來卻不笨重。有不少benchmark的評比,Java跑起來的速度不會差C/C++太多,尤其是在server environment,雖然有不少C/C++的忠實者不太同意,不過它的效能在一般用途上真的是夠好了

Part 6: Bytecode
bytecode對JVM來說,其實就是這個VM的machine code。所有的Java程式都要先compile成.class的file,裡面就是可以在JVM上執行的bytecode。現在也有其他語言(http://c2.com/cgi/wiki?OtherLanguagesForTheJavaVm)可以compile成bytecode了,所以不一定只能用Java語言才能寫出能在JVM上執行的程式了

Part 7: Intelligent IDEs
對Java programmers來說,這一點真的很幸福,像Eclipse, Netbeans這些IDE,功能強大,而且不用錢

Part 8: Profiling Tools
由於JVM的結構容易與外界溝通,所以Java的開發者有不少profiling工具,可以來量測CPU, memory等等的使用狀況,幫助做performance的調校

Part 9: Backwards Compatibility
當你寫了十幾二十年的程式,看到好久以前寫的程式,不用修改就能在新平台上執行,你就會知道那是何等值得感動的事
Java就是這麼可愛,不像某家公司,換個版就夠你改得要死

Part 10: Maturity With Innovation
Java從1995誕生至今也快20年了,它的成熟度如何,看看金融界使用的情況就知道了,連在火星上都有它的足跡。Java仍在演進,與時俱進地不斷創新功能,這也是為何有這麼多Java的死忠者願意跟著它走。

你喜歡Java嗎?Java還有很多我都還未接觸過的面,值得大家一起來學習與分享。

2014/04/15

OpenSSL的HeartBleed漏洞

最近OpenSSL的HeartBleed漏洞鬧得沸沸揚揚,讓很多使用者與開發者都心存恐懼。那到底什麼是HeartBleed漏洞?

從SSL/TLS的heartbeat機制講起
OpenSSL是SSL/TLS protocol的實作之一。目前這個漏洞也要從這個通信協定談起。詳細的內容大家可以參考wiki的文章,這裡不多做贅述。一般使用者最常使用到的應該就是其上層的https協定了。

當通訊的兩端建立起安全通道(secure channel)後,為保持此通道不會被結束,client端可以送heartbeat信號給server,而server則會回應給client。
如下圖,client會先送任意的內容及此內容的長度給server,server會再將此內容與長度回覆給client。這個內容的最大長度是64K bytes。



這種heartbeat機制是很常用的機制,很多協定或應用都會使用這樣的機制。但為什麼OpenSSL出了問題?

首先,OpenSSL只有1.0.1 ~ 1.0.1f這幾個版本有問題,之前的版本並沒有問題,之後的版本也修復了這問題。

其次,出問題是因為OpenSSL在實作上的問題,不是SSL/TLS通信協定的問題。
OpenSSL在實作上會開一個64K bytes的buffer space,供來自所有clients的通訊共用。當有來自client的heartbeat時,OpenSSL會將送來的內容寫到此buffer,再將符合長度的內容由此buffer回傳給client。
於是,這就產生了問題。如下圖,當有心的client送的內容只有5 bytes長,卻宣稱有25 bytes;OpenSSL server並沒有去查真正的內容是多少,完全信任client所宣稱的長度,所以會老老實實的送回25 bytes的資料給client。



我們可想想,如果client只送1-byte的內容,卻宣稱長度有64K bytes,則等於獲得了整個buffer的內容。再從這裡去過濾所得到的內容,或許就可以得到其他clients與server間的對話內容。(想想網路銀行、購物網站等等,他們不都是用https來傳送你的銀行帳號、信用卡號、識別碼...等等的機密或隱私資料嗎)

雖然對有心人來說,很難預測可以從這64K bytes中取得什麼資料,不過不斷地送heartbeat,再透過程式來自動過濾擷取到的資料,還是可以撈到不少有用的資料。

既然事情發生了,怎麼解決?
對server side的管理者來說,先看看有沒有使用OpenSSL,而且是1.0.1~1.0.1f這幾個版本。如果是,那就儘快換掉。
對client使用者來說,你也不知道那些server是用OpenSSL 1.0.1~1.0.1f這些版本。最好是跟相關網站確認他們有沒有這樣的漏洞以及該如何處理。如果資料已被拿走了,最好的方法可能就是把密碼、信用卡等等的趕快換了。

參考1
參考2


2014/04/13

安藤忠雄的建築http://www.benesse-artsite.jp/chichu/images/page_photo2.jpg

日前參加了由李清志教授主講的安藤忠雄作品導覽演講,雖然只有一個多小時,但讓我對他的作品有更多的瞭解

李教授一開始先介紹了安藤的生平,如何形成了日後他的風格與作風。接著介紹了清水混凝土的施工方式,以及安藤與他的工班間的磨合

李教授提到了很重要的一點,為何安藤的作品都是由清水混凝土構成,沒有太多的裝飾,因為安藤希望「讓光影在牆上表演」。
Yes! 建築的牆面是硬的,而光影則是軟的;建築物是靜的,而光影是動的,會隨著一天的時間與四季的變化而更動。有硬有軟,有靜有動,這樣就夠精采了。太多的贅飾反而模糊了重點。就用光影,讓建築物也有大自然的脈動。

李教授首先介紹了住吉的長屋,一棟佔地僅14坪的兩層樓矩形混擬建築,從外觀完全看不見窗,只有一個黑洞般的門,安藤留下了透空的中庭,讓屋子與四季互動

接著介紹大阪茨木市光之教堂,這個作品應該很多人都不陌生

還有北海道水之教堂,這是個很知名的婚禮教堂,李教授一直推崇這裡的美,並建議未婚的朋友如果想結婚,可以考慮這個教堂

李教授也播放了一段寶兒在這教堂所拍的MV,讓大家感受一下這教堂的美


介紹完西式教堂,李教授接著介紹了佛教的本福寺水御堂,這是蠻顛覆傳統的佛教寺廟建築,但若是從佛教的哲觀來說,也不會違背佛教的理念


接著稍微帶了一下淡路夢舞台
高瀨川邊的Time's商場

最後花了不少時間,介紹了瀨戶內海的直島,這裡有美麗的Benesse House旅店與收藏著莫內睡蓮的地中美術館(其實整個島都是美術館了),當然在這裡還有草間彌生的南瓜,這應該很多人都看過了

還有明石大橋旁的4x4


一個多小時的演講,雖然短短的,可是卻很充實。讓大家體會到安藤的作品不是只有硬梆梆的靜態建築,還有的是柔美的動態光影。讓我更知道要用怎樣的角度來瞭解與欣賞這位大師所追求的融入環境的作品。



2014/04/10

到Open Catalog挖寶


DARPA的Open Catalog將逐步公開許多軟體與文件,有空可以來挖挖寶