Syshen's Murmur

  • Archive
  • RSS
  • Ask me anything

Hehe, just tried something interesting. :)

    • #websockets
    • #html5
    • #node.js
    • #nodejs
    • #iOS
  • 4 days ago
  • 1
  • Permalink
  • Share
    Tweet

一日破百

為了下禮拜的北濱一百而備戰,原本只打算騎到金山來回,大概 100 多公里,但是突然覺得好像可以騎上陽金,然後就這麼上了陽明山,再從巴拉卡新莊子回到淡水,再回到新莊。就這樣這一天騎了 112 公里,最高點陽明山二子坪海拔 855 公尺。

Untitled

Untitled

Untitled

    • #bicycle
    • #bike
    • #cycling
    • #caad9
  • 6 days ago
  • Permalink
  • Share
    Tweet

用 mocha 編寫 Node.js unit test

以往在缺乏好的 framework 下,所以一直少有人注意 javascript 的 unit testing,而且在做 frontend 時,整合測試比 unit testing 來得重要,因為多數的問題都出在瀏覽器相容性上,或者與介面的互動上。不過在這個 Node.js 大放光彩的時代,每天都有無數的開發者為 Node.js 開發模組,對一般開發者來說,有這麼多模組可以用當然開心,因為不需要自己再去發明輪子,但是卻也帶來另外一個隱憂 — 四處可見不穩定甚至未經測試的模組,所以當我們在選定一個模組時,最好是要注意該模組是否有完整的測試程式,這是用來審視原作者對於模組的程式品質是否在意的重要指標。

目前有幾套一開始專為 node.js 專案而開發的 unit testing framework,例如 nodeunit、vows、跟這一篇要介紹的 mocha。我個人使用過 vows 跟 mocha,其實這兩套 framework 大同小異,他們都是 BDD 類型的 unit testing (mocha 支援其他種開發方式,如 TDD),都能過產生各類的測試結果報表,如 spec、xunit 等,目前兩者也都廣泛被其他 Node.js 模組所採用,但我個人偏好使用 mocha,原因是它比 vows 更簡潔容易。

Mocha 的主要作者是 Node.js 裡的名人 TJ Holowaychuk,重量級的 web framework - express 就是他的另外一個作品。

要用 mocha 編寫測試程式,首先就要了解一下 BDD 的概念,BDD 的全名是 Behavior Driven Development,要了解什麼是 BDD 可以先看一下這篇文章:http://dannorth.net/whats-in-a-story/

有別於傳統 TDD 的開發流程,BDD 從 user story 出發來編寫測試程式,所以在測試的描述裡多半會寫成如 “When [scenario], giving [conditions], it should [expected results]” 的字句,這麼做的好處是,除了可以確保你的程式不會超出或者小於 user story 的範圍外,而且當主程式寫錯時,你立刻可以知道哪些 user story 受到影響,而且影響的範圍有多大。所以因為如此,當採用 agile 或者 scrum 的開發流程時,BDD 會是一個很好用的工具。

底下的範例會用一個我正在寫的 Node.js 模組 nodeha 為例,這是一個簡單的 reversed proxy 模組,可以用來作 load balancing 跟服務的 high avaliability,模組原始程式碼在 https://github.com/waveface/nodeha (目前還在開發當中,歡迎有興趣的人一起參與)

一個簡單的 mocha 測試程式如下:

每一個 test case 都是以 describe() 函式開始,用 describe 來描述每個 test case 所要測試的情境(scenario),describe 可以一層一層呼叫下去,用起來的感覺就會很像在層層描述所要測試的情境。而你要驗證的結果要放在 it() 函式裡,會用 it 是因為它在英文裡是一個主詞,所以 it 裡第一個參數會是個字串,用來描述你所預期的測試結果,通常會用 “should xxxx” 來表示,接起來看的話就會是 “it should xxxx”。

上面的程式是同步執行的,第一個 test 結束後才會接下一個,不過在 javascript 裡多的是 asynchronous 的程式用法,所以能不能測 async 程式,容不容易寫,也是檢視一個 unit testing framework 好不好用很重要的指標,而在 mocha 裡,測 async 程式是很簡單的事,訣竅在於多個 done() 的函式呼叫。

如果你要驗證的結果會在某個 callback 裡被傳入,在使用 it() 呼叫時,it() 的 callback 會帶給你一個參數,這是一個 function 的 reference ,通常我們會把它命名為 done,你必須在驗證完結果再呼叫 done(),如此一來 mocha 才知道這個 test case 已經執行結束。

當你編寫完程式程式後,簡單執行的方法就是:

% mocha test.js

test.js 就是你的測試程式。mocha 還些不錯的功能,像是在執行過程中偵測變數是否有變數 leak 的情況,雖然這個功能可以幫我們找到一些可能的 bug,但在某些情況下還挺煩人的,所以如果不想要讓 mocha 抱怨這個錯誤的話,可以在執行時加上 —ignore-leaks 的參數。

mocha 支援多種執行結果的顯示模式,如果你想要跟一些 CI 的流程做整合,如 jenkins ,那麼可以試著用 xunit 的格式,如果只想要單純知道測試結果成功或者失敗,可以不加任何參數,那麼 mocha 就會用 unit testing 最常見的格式,以點點點來表示總共測試了多少項目,哪些成功哪些失敗。至於我最常用的是 list 跟 spec。list 格式是將所有測試的 story 從上到下排列下來,而 spec 則是根據 scenario 做 grouping,各有好處,但我覺得這樣的顯示方式最適合 BDD 的精神,最容易理解測試對於 user story 的影響。要指定哪種輸出方式只需要給予 -R 以及輸出格式的名稱即可,如 “-R spec” 。

-R spec

-R list

-R xunit

使用 BDD 時可以用 Node.js 內建的 assert() 函式來驗證程式執行結果,但是一般來說也會使用同是 TJ 寫的 should.js 模組,使用 should 模組的好處是連驗證程式的風格都具備 BDD style,例如:

should.not.be.true(ret);

或者

a.should.equal(“hello”);

當 should.js 模組被引入時,會自動在所有物件中置入 should 屬性,所以你可以在任何物件後面接上 should 來執行檢驗。

mocha 功能五花八門,甚至不只支援 BDD 模式,也同時支援 TDD 開發模式。在 TDD 開發下,不再使用如 describe() 跟 it() 函式,而是改用 suite() 、setup() 與 test(),同時也不太會再用 should 模組,而是直接使用 Node 中的 assert() 函式,執行測試時也必須加上 —ui tdd 的參數來表明這是一個 tdd 的測試程式。

    • #javascript
    • #mocha
    • #node.js
    • #nodejs
    • #unit test
  • 1 week ago
  • 1
  • Permalink
  • Share
    Tweet

Art Pai: 有BACKBONE真是太好了

minipai:

有BACKBONE真是太好了是我在JSDC分享的講題(投影片),這是在我又把個人網站「改版」後冒出的心得。那時覺得可以分享一下,就臨時報名Lightning talk,很幸運的剛好有人退出Lightning talk,所以就得已在JSDC上台了。但是這是我第一次上台演講,根本是緊張到講得亂七八糟,原本預備五分鐘的內容被我快講成三分鐘就結束了 orz。

…

minipai 的 lightning talk 在這裡: http://youtu.be/NSslVdw9qE0

Source: minipai

    • #jsdc
    • #javascript
    • #backbone.js
  • 1 week ago > minipai
  • 1
  • Permalink
  • Share
    Tweet
The ones that win are the ones that ship.

Dive into HTML5

http://diveintohtml5.info/past.html

    • #book
    • #quote
  • 2 weeks ago
  • Permalink
  • Share
    Tweet

台 72 線上

Untitled

這場比賽應該是 a lot of fun,路線雖然短,但有一定的挑戰性。前半段苗栗縣政府封了半條台 72 線快速道路,只讓自行車上,所以這個時候可以享受有如真正比賽般的高速感,輪車、集團等等都來了。後半段則要爬一座八角棟山,我後來查了地圖,這段山路在 UCI 的分級裡可以算得上 2 級坡,難怪每個人到了這裡紛紛中箭下馬,不管是上好公路車還是普通的通勤車都一樣,紛紛下車牽車而上。

不過這一天我卻騎的零零落落。一開始由於太晚抵達出發點,匆匆報名完畢就要準備出發,差點連水壺都忘了拿,當然連簡單的熱身都沒有。而且一開始我就太看得起自己,立刻衝了出去,一直往集團最前面殺去,甚至搭上一列高速列車,在台 72 線上一直以 35 - 40km/hr 的速度前進,在大概前行了 30 公里後,我才發現這強度對我現在的身體狀況來說太強了,車速也因此開始慢了下了,果然在出璜坑附近就完全跟不上領先集團的列車了。幸好進休息站時也沒被其他集團超越,只不過為了獲得喘息,在休息站停留了相當長的時間,此時我也發現我的屁股疼痛不已,猜想應該是剛剛拉速度時,多半用到了我較少使用的後大腿肌,造成肌肉酸痛。

過了休息站就是要上八角棟山,這裡的坡度最少也有 8%,最大大概也有 16-17%,總長度大概有四到五公里,我看 strava 中把這段路標註為 2 級坡,我的媽阿!爬 4 級坡我是沒問題,但 2 級坡就完全不行了,再加上前半段體力耗盡,所以這段路大概有 2/3 的路段都是牽車而上(這裡幾乎 80% 以上的車友也都是下車牽車),實在是感到氣餒。

最後帶著 3 小時 15 分的成績回家,成績大概有在前 1/3 左右,副作用是疼痛的小腿肚(應該是前一天按摩所造成),後大腿肌群也痛,也讓我體認到平路的騎乘也是要練的,否則比賽時就很難維持在一定的高強度下。

starva 的紀錄:

Untitled

Untitled

Untitled

Untitled

    • #bike
    • #cycling
    • #bicycle
    • #cycling contest
    • #自行車
    • #自行車活動
  • 3 weeks ago
  • Permalink
  • Share
    Tweet

溫馨的阿姆斯特丹小公寓

_3319567

好像在不寫些什麼,這趟荷蘭之旅會隨著記憶淡薄逐漸消逝。

在歐洲旅行,B&B 是最經濟實惠又方便的住宿首選,但是我又特別喜歡 apartment 這個歸類。因為 在 B&B 通常都是與其他旅客或者主人共用浴室洗手間,甚至廚房等等,但在歐洲一些大城市中,偶而你可以找到 apartment 這種好康,為什麼說是好康呢?因為通常廚房浴室等都會是 apartment 的附屬,住在 apartment 裡可以享受如同住旅館的隱密性,但又不像 hotel 般如此高價。只不過 apartment 的房間數量通常不多,需要一些好運氣才能找到。

剛好這次荷蘭旅遊計畫的早,所以連帶旅館早在出發前幾個月就在 survey 了,尤其我們因為要在阿姆斯特丹待上四個晚上,所以花了特別多的精神在找尋阿姆斯特丹的住宿。對我來說,最有用的網站就屬 bedandbreakfast.nl 這個網站了,在這裡可以找到許多 B&B 詳盡的資料,也可以透過他們網站去跟對方聯絡並預定,而我就是透過這個方式找到了 Ans 夫人的 apartment:http://www.bedandbreakfast.nl/bed-and-breakfast/5762/

對所有想去阿姆斯特丹的人,我都會推薦 Ans 夫人的這間小公寓。其實嚴格來說,它不能算是公寓,它其實是 Ans 夫人與他先生買的公寓中的一間房間,但是這間房間享有一個大衛浴,一張 King size 的大床,簡單的單人沙發,更棒的是擁有一個小花園,Ans 夫婦特別將這棟公寓最棒的小花園獨立出來讓給這間房間。所以即便公寓位於王子運河(Prinsengracht)旁,緊鄰著市區電車站跟大馬路,但是房間內卻是相當安靜。如果是好天氣的話,即使赤著腳走到花園也無妨。只是在我們停留的這幾天,溫度幾乎都在 10 度以下,這麼好的花園對我們來說卻是個浪費,面對著漂亮的花園景色卻毫無慾望想要坐到戶外享受早餐。

Ans 夫人是個很注重房客隱私的好房東,我們在這裡住了幾晚,大部分都靠留紙條溝通我們的需求,而每兩日 Ans 夫人也會為我們準備豐盛且好吃的早餐,並送到房門口,而且即使這樣,她也盡量不打擾我們。Ans 本人看起來有些年紀了,但是高雅的氣質令人欲親近又敬重,講話雖然急躁了些,但卻反而顯得她的誠實無欺,住在那裏讓我們都有受到照顧的感覺,所以在我們 check-out 的那天,我老婆也特別買了一束鬱金香送她,感謝這幾天她對我們的照顧。

Ans 的公寓位於 Prinsengracht 709A, 1017JW, Amsterdam,可以於車站搭乘 1, 2, 5 號電車於 Prinsengracht 站下車,下車後走路兩分鐘就到了。公寓附近就是來茲廣場 (Leidseplein),有酒吧餐廳星巴克等,Apple Store 也在來茲廣場,所以想逛街大概 10 分鐘就可走到來茲廣場。附近 Leidsestraat 街上也有 B&H 超市,買東西回去吃也方便。而國家博物館(Rijksmuseum)跟梵谷美術館(Van Gogh Museum)更是走路 15-30 分鐘的事。在來茲廣場也可以搭乘運河巴士遊 Amsterdam。所以在地理位置上 Ans 的公寓真是個超級方便的地方!

至於價格,因為在市中心,比一般 B&B 貴一些,大概是每晚 95 歐元,每兩日 Ans 夫人會準備兩日份的早餐(所以別一次嗑光了)。

_3319567

不起眼的公寓外觀:

IMG_3283

從室內望向花園:

_3319568

早餐:

_3319569

房內鬱金香

IMG_3281

早晨的王子運河:

<_3319571

    • #travel
    • #armsterdam
    • #旅行
  • 1 month ago
  • Permalink
  • Share
    Tweet


100 冥誕
Pop-upView Separately

Robert Doisneau

100 冥誕

    • #photographer
  • 1 month ago
  • Permalink
  • Share
    Tweet

我看荷蘭自行車

_3309349

剛從荷蘭短期自助一星期回來了,時差加上長途飛行的疲倦,一回來就整整睡了十二個小時之久。這次荷蘭行,不算長,花了一個星期,但也走訪了幾個地方,包含荷蘭首都 Amsterdam,南方港口大城 Rotterdam,古城 Utrecht,以及幾個鄉下小鎮像是 Alkmaar、Giethoorn、Zaanse Schans等等,也算實際感受到這個以自行車、風車、運河聞名世界的國家,當然也稍稍觀察了一下荷蘭人民如何運用自行車,幾個簡單的想法:

1) 荷蘭是真正的自行車王國!要稱自行車王國,不是自行車多就好,或者有在生產自行車(像某小島),荷蘭的自行車道規劃是全球最完整的,幾乎每條汽車道路旁都會有自行車道,主要幹道還會有獨立自行車道,左右兩旁個一,有時候自行車道的面積還比汽車道大。就算沒有獨立自行車道,道路最兩旁最少也會畫出自行車專用路線。路上更是不缺自行車專用號誌。自行車道也遍佈全國各地,從大城市到鄉下農田與森林裡都可以看到,而且維護良好,道路平整且寬敞,騎起車來舒服又不用擔心危險。

2) 大多數自行車種類還是以通勤車或者俗稱的淑女車為主。荷蘭人似乎不重視自行車外觀,所以不管男女老少,看到他們通常騎著爛爛的淑女車跑來跑去,而且每台車子前面一定要有籃子,或者是可以裝籃子的鐵架。看來他們重視自行車的實用機能遠大過於外觀。

3) 大鎖不可少。可能自行車失竊率高,每台自行車上都有個超大的鎖頭跟鏈條,每台停好的車一定都會牢牢鎖在欄杆上,所以你常可以在 Amsterdam 的運河旁看到一整排鎖好好的自行車。不只自行車,荷蘭人也喜歡偉士牌機車,每台偉士牌機車也都會用大鎖將輪胎鎖起,每次看到這麼多鎖,不禁會想這應該不是什麼治安好的國家吧。

4) 路權:自行車 > 行人 > 電車 > 汽機車。在這個國家行人要自己保重,因為有一種車絕對不會讓你,那就是自行車,滿街的自行車橫衝直撞,遇到行人就是當當當,絲毫不會停下來讓你過馬路,倒是汽車常常會主動停下讓行人過馬路。Amsterdam 的自行車還不算多,Utrecht 的自行車才是可怕,行人過馬路絕對要左右張望,仔細選好空檔切入,免得被車撞得人仰馬翻。

5) 都市裡,自行車還是通勤為主,要到比較鄉下的地方才容易看到有人以單車作為運動,單速車就極少見了。捷安特不枉深耕荷蘭以久 (捷安特歐洲總部在荷蘭 Lelystad),捷安特公路車的比率甚高!大概佔了六成左右吧,看來除了在台灣常見到捷安特外,在荷蘭一樣常碰到捷安特。路上遇到的公路車,大多數都是 2 到 5 個人一個 group 一起騎車,比較少像台灣一次都是遇到一大群。

6) 舊城區裡多半是石板路,路面又小,單行道多,像是 Amsterdam 跟 Utrecht 都一樣,在這些城市裡開車並不容易,車自然就少,所以我猜就因為是這個原因,造就這個國家自行車如此發達。但不代表這個國家的人民就都不開車,高速公路上的車也是一堆,尤其愛開德國車 (偶而也可以遇到德國自行車品牌 CUBE)。

7) 荷蘭天氣並不好,天冷又常下雨(多半是小雨),但無礙於荷蘭人愛騎自行車,似乎是習慣了吧,就算天再冷,還是常常可以見到他們穿著薄外套優雅的騎著自行車。

8) 騎車一定要優雅。這點讓我印象非常深刻的是,荷蘭人身材好,高大又不胖,騎車姿勢優雅好看,上半身多半挺的直直的,踩著輕鬆的頻率,有時候手上還握著一束鮮花,看來不趕時間但速度卻又飛快。

9) 小折其實沒那麼多,最常見到小折的地方是火車站跟火車上。小折廠牌則以 Brompton 跟 Dahon 為主,看他們用起 Brompton 很輕鬆,可以迅速把車摺疊起來,帶上火車,下了火車也可以立刻展開,推著車走。

10) 火車車廂雖然分上下兩層,但大多是座位,走道空間狹小,車廂間的空間也不大,連放行李箱都顯促狹了,所以帶腳踏車上火車的人並不多,也多半以小折為主。

11) 市區的公車跟電車是不給腳踏車上的,所以我還真沒看過有腳踏車有上公車,或擺放在公車前後面的,跟我以前聽到的傳聞有些落差。

12) 極少山坡,是個可以飆單車的地方!

13) 只要有道路施工,其實腳踏車道還是最先被犧牲而封鎖的道路。

14) 車滿為患。只要到車站附近的自行車停車場,會看到比台大更誇張的情形,上萬台自行車可說是疊在一起停放,而且幾乎都是老舊自行車,所以不禁猜測,大概有八成的自行車都是處於無主狀態,而會成為無主狀態應該是因為車主找不到自己的車停在哪裡吧。

所以,總括來講,荷蘭人愛騎腳踏車,政府也鼓勵,所以自行車交通建設舉世無雙,但只要仔細觀察,還是會處處看到自行車有所不便之處。

其中一天,我們在霍肯夫花園附近租過自行車遊覽花田,在荷蘭騎單車的感覺是爽的,不僅比台北的自行車道好,風景更是優美,騎起來身心靈都會感到愉悅。

_3309427

_3309410

_3309393

_3309350

_3309418

_3309309

<更多照片待處理中 …>

    • #自行車
    • #bicycle
    • #cycling
    • #netherlands
    • #travel
    • #旅遊
    • #holland
    • #單車
  • 1 month ago
  • 2
  • Permalink
  • Share
    Tweet

Good design is innovative
The possibilities for innovation are not, by any means, exhausted. Technological development is always offering new opportunities for innovative design. But innovative design always develops in tandem with innovative technology, and can never be an end in itself.

Good design makes a product useful
A product is bought to be used. It has to satisfy certain criteria, not only functional, but also psychological and aesthetic. Good design emphasises the usefulness of a product whilst disregarding anything that could possibly detract from it.

Good design is aesthetic
The aesthetic quality of a product is integral to its usefulness because products we use every day affect our person and our well-being. But only well-executed objects can be beautiful.

Good design makes a product understandable
It clarifies the product’s structure. Better still, it can make the product talk. At best, it is self-explanatory.

Good design is unobstrucsive
Products fulfilling a purpose are like tools. They are neither decorative objects nor works of art. Their design should therefore be both neutral and restrained, to leave room for the user’s self-expression.

Good design is honest
It does not make a product more innovative, powerful or valuable than it really is. It does not attempt to manipulate the consumer with promises that cannot be kept.

Good design is long-lasting
It avoids being fashionable and therefore never appears antiquated. Unlike fashionable design, it lasts many years – even in today’s throwaway society

Good design is thorough, down to the last detail
Nothing must be arbitrary or left to chance. Care and accuracy in the design process show respect towards the consumer.


Good design is environmentally-friendly
Design makes an important contribution to the preservation of the environment. It conserves resources and minimises physical and visual pollution throughout the lifecycle of the product.

Good design is as little design as possible
Less, but better – because it concentrates on the essential aspects, and the products are not burdened with non-essentials.
Back to purity, back to simplicity.

from Dieter Rams’ ten principles for good designs 
    • #design
    • #principles
    • #guidelines
    • #Dieter Rams
  • 2 months ago
  • Permalink
  • Share
    Tweet
← Newer • Older →
Page 1 of 17

About

About me / Tags / Archive / Random /

Twitter

loading tweets…

  • RSS
  • Random
  • Archive
  • Ask me anything
  • Mobile

Effector Theme by Carlo Franco.

Powered by Tumblr