最近使用Visual Studio 2010寫些C#的程式,有一點不太習慣的地方是,VS不會要求你那裡要加try/catch (用慣VS的人應該不會覺得不習慣啦,是我這種用過Java的人才這麼感覺吧)
這好處是可以忘了有exception這回事,就暢快的跟著happy path寫下去;可是,人生總是不會如此美好,該出錯的地方一定會出錯的
那開發者就很難去預想run-time時那裡會出錯,就算有心想去加try/catch,也不知道那些method會丟出exception,又會丟出那個exception class (除非去翻文件,可是,這不是IDE應該幫PG減輕負擔的地方嗎?)
結果,就加了一堆都是catch Exception的code
有Java開發經驗的人,應該會知道method後面會定義要丟那些exception,如:
public void foo() throws IOException, ParseException
在Eclipse, NetBeans等這些免費的tools裡寫程式,IDE總會提醒你那個method會丟出exception,你必須加try/catch或是在目前的method中加上throws。
一直在想,為什麼Java的工具可以做得到,Visual Studio卻沒這功能,而且VS經過這麼多代了,難道VS的users都不用這些功能?或是不抱怨VS沒有這樣的功能?
查了一下,確實還有些users在抱怨,可是...就是做不到
後來研讀了一下,推測了VS為什麼沒有這樣的功能 (對.NET我還不是很熟,所以有說錯敬請見諒,也請指教)
因為像在C#裡method的定義,並沒有像Java的throws的宣告
在Java的工具中要做到這樣的功能很容易,tool只要去查你叫用methods的宣告,就可以知到這些methods有沒有丟exceptions,丟怎樣的exceptions,然後再提醒PG要處理,但是.NET中method並沒有這樣的宣告,如果VS要做到這樣的結果,就必須去scan所有使用到的methods的內容,然後一層一層往上追上去,即使已經翻成MSIL的library也必須要去追
Java只要追你叫用到的那些methods的宣告;.NET則要追你叫用到的那些methods的內容,還有他的祖宗八代、親戚五十等等所有相關到的內容
這也可以體諒為什麼VS/.NET不提供這樣的功能了,實在是做不到 (應該說很難做到,如果要做,用VS寫程式應該會lag蠻嚴重的)
所以,用VS寫程式,就先當個happy PG吧
exception,等被丟出來再說吧
2013/07/09
2013/07/06
賈伯斯的 10 個簡報技巧
賈伯斯的 10 個簡報技巧
- 圍繞主題 :賈伯斯在2008年發表MacBook Air時,一開場就說:「今天的空氣裡有些不同的東西。」
是個相當巧妙又點出主題的隱喻。 - 展現熱情 :賈伯斯總是用awesome、
cool的字眼來感染全場的情緒。 - 列出大綱 :賈伯斯的演說段落分明,一張簡報搭配一個主題,
段落間的安排與串連也十分流暢,給予觀眾層次感, 可以跟著演說節奏前進。 - 提供有意義的數字 :例如iPhone在200天總共賣了400萬支,
這樣的說法對觀眾沒有太大的意義,但是當賈伯斯進一步解釋: iPhone每天可以賣出2萬支。 這數字背後的意義代表著Apple是美國的市場龍頭。 - 打造令人難忘的一刻 :賈伯斯從牛皮紙袋裡拿出超薄MacBook Air的那一幕,是許多人終生難忘的場景。
- 視覺化的呈現 :很多人喜歡在簡報中放滿複雜的文字與圖表,
但賈伯斯則讓投影片只呈現簡單的字詞與圖片, 讓大家把焦點集中在產品身上。 - 簡報是一場表演 :通常賈伯斯的簡報,會穿插圖片與影片,
再加上產品展示與現場來賓,就像一場電影或舞台劇一樣精采。 - 不要因為小錯誤而壞了大局 :發生狀況時,記得用幽默化解尷尬就好。
- 推銷產品的好處 :別忘了科技突破的目的,是要帶給消費者價值與好處。例如:
MacBook Air是最輕薄的筆記型電腦, iTunes是下載音樂與電影的更佳方式,而不是容量、 速度或輕薄等技術面的突破。 - 不斷練習 :賈伯斯能做出精采的簡報,並不是因為他是天才,
而是因為他在每一場簡報前都經過長時間練習並測試每個細節。
2013/06/15
2013/06/10
jQuery AJAX的怪現象
在使用jQuery,以下列AJAX方式來取得回應時,如下程式,browser發出request後,進入到error的error handler。檢視xhr這個回傳物件,發現status是200 OK,responseText裡也有回傳回來的JSON物件。但一直沒有頭緒這樣為何會進入到error handler。
var url = "";
$.ajax({
url: url,
type: 'GET',
dataType: 'json',
error: function(xhr) {
alert('Ajax request error.');
},
success: _display
});
後來查了資料發現,如果dataType定義為 'json',jQuery會去檢查responseText的內容是否符合JSON的語法定義,並將responseText的內容轉變為JavaScript的物件(Evaluates the response as JSON and returns a JavaScript object. )。所以,如果回應的內容有JSON syntax error的情況,便無法順利轉成JavaScript物件,也就會去trigger error handler了。
所以我的問題就應該是在回傳的JSON內容有問題。使用JSON validator去檢查,果真如此
(網路上有不少JSON validator,可以查一下。我常用的是 http://jsonlint.com/) 。修改一下server side的回傳程式,就OK了。
var url = "
$.ajax({
url: url,
type: 'GET',
dataType: 'json',
error: function(xhr) {
alert('Ajax request error.');
},
success: _display
});
後來查了資料發現,如果dataType定義為 'json',jQuery會去檢查responseText的內容是否符合JSON的語法定義,並將responseText的內容轉變為JavaScript的物件(Evaluates the response as JSON and returns a JavaScript object. )。所以,如果回應的內容有JSON syntax error的情況,便無法順利轉成JavaScript物件,也就會去trigger error handler了。
所以我的問題就應該是在回傳的JSON內容有問題。使用JSON validator去檢查,果真如此
(網路上有不少JSON validator,可以查一下。我常用的是 http://jsonlint.com/) 。修改一下server side的回傳程式,就OK了。
2013/03/09
千萬損失的慘痛教訓
這是一個蠻慘痛的case study,值得借鏡
很多人會有「這麼衰的事不會發生在我身上」,其實這就是一個組織對「萬一」的代價的忍受程度了
也所以有那麼多的公司會願意引入發展流程,來降低「萬一」的發生機率
因為「萬一」如果發生,除了這個case有危機造成損失外,賠上的聲譽更是難以估算,甚至還丟了長期客戶的忠誠度
文章共六篇,有點長,但是蠻值得花些時間看
千萬損失的慘痛教訓(一)
http://ideas.esast.com/?p=422
千萬損失的慘痛教訓(二)
http://ideas.esast.com/?p=475
千萬損失的慘痛教訓(三)
http://ideas.esast.com/?p=576
千萬損失的慘痛教訓(四)
http://ideas.esast.com/?p=576
千萬損失的慘痛教訓(五)
http://ideas.esast.com/?p=709
千萬損失的慘痛教訓(六) –完結篇
http://ideas.esast.com/?p=770
訂閱:
文章 (Atom)