Spark - Java 輕量級的 Web 框架

這跟處理巨量資料的 apache spark 無關!

如果有時候只是要寫個沒幾個人用的 Restful API,或只是想要有個 HTTP 接口(透過 get/post)來呼叫我們寫好的 Java SE 程式,如果對架設 tomcat / Java EE Server 又不熟悉,那可以考慮用 Spark!

Hello World

Spark 2 以後需要用到 lambda 語法,需要安裝 Java 8。如果只有 Java 7,請找 Spark 1 或是去玩 play

以 Eclipse 為例,安裝 Spark 方法有兩種:

第一種比較簡單,直接建立 Maven 專案,在 pom.xml 加入對 spark 的 dependency 就好了。

第二種就到 github clone 下來,不過實際建立時,我還是得把這專案轉成 maven 專案,才能利用 pom.xml 把其他要用的 jar 檔抓回來...也可能我太笨沒抓到官方給的提示...

寫一個 HelloWorld.java 包含一個 main 如下:

import static spark.Spark.*;

public class HelloWorld {
    public static void main(String[] args) {
        get("/hello", (req, res) -> "Hello World");
    }
}

直接執行 HelloWorld.java,無需安裝另外的 Web Container,無需任何設定,在瀏覽器打開 http://localhost:4567/hello 就可以看到結果。

螢幕快照 2015-03-26 下午1.49.01

Spark 提供的功能

大部份 Restful API 需要的功能都有:
  • 指定 URL 路徑。
  • 存取 request 標頭/參數/...。
  • 回寫 response。
  • 處理 session。
  • 處理每個 request 前後插入 filter 做前置/後置處理。
除了單純回傳資料,也可以介接 Freemarker 這類的 HTML Template Engine,將要顯示的值以類似 JSP EL 的方式,填到預先寫好的 HTML Template 上。

也可以介接 AngularJS 做出類似 Gmail 這種只有一頁的 Web 網站。

部署

官網上沒有特別寫部屬的方式,試了一下。就直接在 Eclipse 上匯出一個可執行的 jar,執行的目標就指向有 main 的那支 java。

執行匯出的 jar 就會在本機上開啟 Web Server 了(參考下圖)!開發到使用完全就像執行一般 jar 一樣!

螢幕快照 2015-03-26 下午1.51.17

參考

Asus Zenfone 2 (ZE551ML) 入手

原本是使用紅米 note 3G 增強版,用了也快十個月吧,因為最近加入中華電信 4G 的企客方案,又要保留台哥大讓家人網內熱線,所以就開始找新的替代機,需求就是雙卡雙待支援 4G 然後不要超過八千。HTC 820、HTC E9 都很不錯,不過價錢都太貴了,紅米2 雖然便宜但 2G RAM 版本遲遲不在台灣開賣,擺明倒庫存給台灣所以不爽買。

此時 Zenfone 2 出了四個版本,用訂價記憶最快:

  • 4990:螢幕 5" HD,但只有單卡,所以打槍!
  • 5990:螢幕 5.5" HD(1280 * 720),雙卡雙通,已經想買!
  • 6990:螢幕 5.5" FHD(1920*1080),雙卡雙通,又附快充充電器,ROM 變成 32G,多一千多很多我想要的!理智線已斷!
  • 8990:主要就 RAM 2G 變成 4G,業界第一台 4G,但喊爽的,第一時間也沒賣。
3/9 當天就在全家預訂一台 6990 元的版本,後來的故事大家都知道,除了少數第一波的準時出貨,其他通路不是少量加減出貨,大部份都延到四月初"陸續"出貨。小米饑餓行銷好歹是有錢買不到,華碩是你錢都先繳了還要等一個月才有機會拿到。更誇張是預購得都沒拿到,反而很多通信行有現貨,而且還訂價加一兩千賣(新竹詢價),搞得第一批鐵粉天怒人怨,激怒行銷堪稱一絕!

罵歸罵,最後我還是在 01 二手市集上撿到了一台二手 6990 元的版本,下面就跟原本的紅米 note 比較一下。

DSC_0037
左邊是 Zenfone 2 右邊是紅米 note

兩台都是 5.5",差不多重量,外表質感的話是 Zenfone 2 勝出,軟體跟介面還是紅米 note 比較強,Zenfone 2 的 UI 大概跟原生的差不多(當然是有加了華碩的 APP 和雲端服務),主題跟圖示替換跟小米不能比,桌面空間那麼大但還是沒有辦法設成 4 * 5 排列,反正玩起來跟 nexus 差不多。

DSC_0038
左邊是 Zenfone 2 右邊是紅米 note

DSC_0041
左邊是 Zenfone 2 右邊是紅米 note

Zenfone 2 解析度是 1920 * 1080 比紅米 note 1280 * 720 規格上來的強,不過真正使用上,我自己是非常用力看才能明顯看出差距(兩眼要貼在手機上了)。反而是螢幕的顏色跟對比有比較大的差距。

紅米 note 的顏色比較暖,最大亮度比較亮,對比也比較好(黑比較黑)。相反地,Zenfone 2 顏色比較偏冷一些,黑色還是沒有紅米 note 的黑來的黑。不過以上都是兩個放在一起比較才看得出來。

Screenshot_2015-03-20-11-50-20

Zenfone 2 全新一開機起來,可用記憶體大概 700 MB,玩了一陣子把我該裝都裝了後(非遊戲玩家,只裝裝社群/社交 APP)可用記憶體大概是 300 MB 左右。

快充的部份試了一下,40 分鐘電量 14% > 67%,光這點我覺得就蠻值得多花一千升到 6990 元這個版本。

WiFi 連線的部份,連家裡/公司/其他手機熱點都沒遇到問題。

Android 5.0 支援雙擊螢幕就開機/關機的功能,這功能在大螢幕手機上(特別電源鍵還給你做到頭頂)相當實用!

2015-03-21 08.09.37
紅米 note 戶外 GPS Test

Screenshot_2015-03-21-08-09-48
Zenfone 2 戶外 GPS Test

GPS 戶外開起來兩秒就抓到了,同時間紅米 note 看到 9 顆,Zenfone 2 看到 19 顆,但紅米的信噪比(SNR)比較好,準確性反而就紅米 note 比較準。

不免俗,這兩天也把兩個手機去拍照比較一下,只挑了幾個自己比較常會碰到的情境,除了 HDR 其他全部都是預設值也沒開閃光,Zenfone 2 軟體已經更新到最新版,滑鼠滑到照片上會顯示是用哪台拍的,不太早破梗是讓大家自行感受一下。

對焦部份明顯 Zenfone 2 快很多,雖然跟 iphone 5 不能比,但總比紅米 note 拍好,小朋友臉都僵了來的強!

室內只有一般光源:

2015-03-20 22.59.56

2015-03-20 22.59.40

半開放空間:

2015-03-21 07.32.52

2015-03-21 07.33.05

物品近拍:

2015-03-21 08.33.09

2015-03-21 08.32.52

前鏡頭自拍:

2015-03-21 08.38.49

2015-03-21 08.39.42

戶外晚上:

2015-03-20 21.23.06

2015-03-20 21.23.06 (2)
上圖的原圖裁剪

2015-03-20 21.23.14

2015-03-20 21.23.14 (2)
上圖的原圖裁剪

2015-03-20 21.24.41

2015-03-20 21.24.41 (2)
上圖的原圖裁剪

2015-03-20 21.24.27

2015-03-20 21.24.27 (2)
上圖的原圖裁剪

戶外開 HDR:

2015-03-21 07.49.09

2015-03-21 07.49.09 (2)
上圖的原圖裁剪

2015-03-21 07.51.36

2015-03-21 07.51.36 (2)
上圖的原圖裁剪

目前用下來,除了能夠 4G 上網、快速充電、拍照對焦比較快,基本上我比較喜歡紅米 note,以當初紅米 note 五千不到的價格,還真的是打遍天下無敵手。我想我會等到紅米 note 4G 雙卡版出了,或是小米 note 比較便宜的版本出了,我應該就會跳回去了...