邁向成功的 8 個秘密 ( by Richard St. John )

今天收到朋友分享的一則影片,一則短短三分半的英文演說,淺顯易懂的成功觀念,價值 4,000 美金,值得一看。底下附上演說原文(含保哥的摘要註解),讓有興趣的人研讀,訓練英文閱讀能力與聽力。 若想直接看有中文字幕的版本,可以點選這個連結

英文演說的原文如下:

This is really a two-hour presentation I give to high school students, cut down to three minutes. And it all started one day on a plane, on my way to TED, seven years ago. And in the seat next to me was a high school student, a teenager, and she came from a really poor family. And she wanted to make something of her life. And she asked me a simple little question: she said, what leads to success? And I felt really badly, because I couldn't give her a good answer. So I get off the plane and I come to TED. And I think, geez, I'm in a middle of a room of successful people. So why don't I ask them what helped them succeed and pass it on to kids? So here we are, 7 years, 500 interviews later and I'm going to tell you what really leads to success.

The first thing is Passion. ( 擁有熱情 )

Freeman Thomas says, "I'm driven by my passion". TED-sters do it for love, they don't do it for money. Carol Colleta says, "I would pay someone to do what I do". The interesting thing is, if you do it for love, the money comes anyway.

Work. ( 認真工作 )

Rupert Murdoch said to me, "It's all hard work. Nothing comes easily. But I have a lot of fun."  Did he say fun?! Rupert? Yes, TED-sters do have fun working, and they work hard. I figure they're not workaholics (工作狂), they're workafrolics (工作玩家). [註: 演說者自創的字,是 work 與 frolic 的組合]

Good. ( 擅長某些事 or 擁有專長 )

Alex Garden says, "To be successful, put your nose down in something and get damn good at it." There's no magic; it's practice, practice, practice.

And focus. ( 專注於一件事 )

Norma Jewison said to me, "I think it all has to do with focusing yourself on one thing".

And push. ( 讓自己不斷進步 )

David Gallo says, "Push yourself. Physically, mentally, you gotta push, push, push."  You've got to push through shyness and self-doubt. Goldie Hawn says, "I always had self-doubts. I wasn't good enough, I wasn't smart enough, I didn't think I'd make it."  It's not always easy to push yourself and that's why they invented mothers. [笑..]  Frank Geary said to me, "My mother pushed me".

Serve! ( 為他人提供服務 )

Sherwin Nulan says, "It was a privilege to serve as a doctor. "Now a lot of kids tell me they want to be millionaires. And the first thing I say to them is, "OK, but you can't serve yourself. You got to serve others something of value. Because that's the way people really get rich".

Ideas. ( 富有創意的想法 )

Bill Gates says, "I had an idea: founding the first micro-computer software company." I'd say it was a pretty good idea. And there's no magic to creativity and coming up with ideas. It's just doing some very simple things.  And I give lots of evidence.

  • Listen (聆聽)
  • Observe (觀察)
  • Be Curious (好奇心)
  • Ask Questions (時常發問)
  • Problem Solve (解決問題)
  • Make Connections (多多交流)

Persist. ( 無條件的堅持下去 )

Joe Kraus says, "Persistence is the number one reason for our success". You got to persist through failure (遭遇失敗), you got to persist through CRAP, which of course means: Criticism (被批評), Rejection (被拒絕), Assholes (被小人中傷) and Pressure (與壓力共處). [笑..]

So, the big end. The answer to this question is simple. Pay $4,000 and come to TED!  Or failing that, do the 8 things -- and trust me, these are the big 8 things that lead to success.

Thank you TED-sters for all your interviews!

這場演說讓我覺得最陌生的的單字不外乎是 Workafrolics 這個字了,這個字是演講者 Richard St. John 演說中自創的詞彙,是 work (工作)  與 frolic (歡樂) 的組合字,有「樂在工作」的意思,但我覺得翻譯成「工作玩家」還比較貼切一些。

有鑑於我時常被別人說成是個工作狂(workaholics),現在終於有個更貼切的名詞了,就是工作玩家(Workafrolics),下次不要再說我是「工作狂」了。

雖然我長時間工作,倒不如說我長時間在玩樂,因為心情上是差很多的,而且也比較沒壓力,我在查詢 Workafrolics 時看到一篇 Workafrolics work harder but live longer 文章,說 Workafrolics 的人比較長壽,而且新科學人(New Scientist)雜誌還有專文與數據證明這件事,不過要觀看全文必須買雜誌才看的到。

相關連結

  

此文章由 will 發表於 2009/5/31 下午 06:21:48

永久連結 | 評論 (4) | 此文章的RSSRSS comment feed |

分類: 心得分享

標籤: ,

收藏:

關於【在 GDI+ 中發生泛型錯誤】出現的時機

我之前也曾經在處理圖片相關工作時遇過 "在 GDI+ 中發生泛型錯誤" 的錯誤,最近我們又再次遇到了,雖然這類問題多試幾次就很快能解決,但因為同樣的問題出現好幾次了,卻不太知有哪些出現的時機,因此做了一些研究,以便於下次更快速的判斷解決之道。

我先把中、英文錯誤訊息列出來:

  • System.Runtime.InteropServices.ExternalException: 在 GDI+ 中發生泛型錯誤
  • System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+

GDI 的全名是 Graphics Device Interface 的縮寫,是在 Windows 平台內十分重要的核心元件,負責處理許多跟影像物件有關的工作,包括繪製直線、曲線、字型、材質、處理縮圖、裁切圖片、...等。而 GDI+ 則是以 C++ 語言所開發的 GDI 介面,可直接利用系統硬體(顯示卡)資源對圖片相關操作進行加速處理,詳細的技術細節可參考 Graphics Device Interface - Wikipedia, the free encyclopedia 的說明。

在 .NET Framework BCL 中所有與繪圖有關的類別 (System.Drawing 命名空間) 也都幾乎不是 Managed 組件,幾乎都是透過 Unmanaged GDI+ 元件進行圖形操作,所以只要發生 GDI+ 的錯誤就一定不是 .NET 程式語法的錯誤,而且錯誤訊息是直接從 GDI+ 傳來的,繁體的作業系統就會回應中文訊息、英文的作業系統就會回應英文訊息,透過 Thread.CurrentThread.CurrentCulture 是沒辦法指定錯誤訊息的。

由於「在 GDI+ 中發生泛型錯誤」實在不容易除錯,尤其是 .NET 初學者更難以判斷問題發生的原因,往往是瞎子摸象、到處亂查、到處亂試。

首先,我們已經知道錯誤發生的地方一定不是 .NET 程式語法的問題,所我們就要找出其他可能發生的原因,我整理一些我曾經發生過的問題,以及有可能發生問題的地方供各位參考:

  • 與『檔案系統』有關的問題
    • 目錄權限不足,無法寫入或無法讀取 ( 包括把檔案寫入 UNC 路徑 )
      解決之道
      : 設定正確可讀取或寫入的權限
    • 檔案權限不足,無法寫入或無法讀取 ( 包括把檔案寫入 UNC 路徑 )
      解決之道: 設定正確可讀取或寫入的權限
    • 目錄不存在,所以根本無法寫入檔案
      解決之道: 先建立目錄,然後再進行寫入 ( Image.Save , Bitmap.Save )
  • 與『圖檔格式』有關的問題
    • 透過 Image.FromStream 載入圖片時,其 Stream 無法使用 Seek 方法
      解決之道: 將無法 Seek 的 Stream 先寫入 MemoryStream 再進行載入即可。在 MSDN 上 Image.FromStream 的備註有寫:「在 Image 的存留期內,資料流都必須保持開啟。」
    • 遇到了無法轉換的圖檔類型
      解決之道: 一般來說,GIF, JPEG, PNG 應該都沒問題,但還是有些圖檔格式無法透過 GDI+ 進行轉換,這時也會發生錯誤。遇到這個問題必須透過 UI 告訴使用者避開一些無法轉換的圖檔類型。我之前會遇到這個問題是因為在測試時亂選圖,剛好選到一張不能轉換成功的圖 ( 註: 該圖檔好像是顏色數非常少的 GIF 檔,年代有點久遠我記不太清楚了 )

我能想到的只有這些,總之跟 .NET 沒關係就是了,如果下次再遇到類似的問題,以上幾種狀況還找不到解法的話,請多多查詢 MSDN 並多看一下「備註」的部分,或參考以下相關連結。

相關連結

  

此文章由 will 發表於 2009/5/30 下午 02:02:10

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: .Net | Tips

標籤: , ,

收藏:

看看 Google I/O 在玩些什麼,體驗未來的網路世界

Google I/O 是 Google 一年一度的開發人員大會,昨天在 YouTube 剛看完第一天的 Keynote 演說,就感覺到技術又多、又炫、又複雜,建議有興趣的人可以上官網觀看 (高解析度的喔)。但是這一切都是為了要將未來的網路世界「簡單化」。Web 的世界已經是非常複雜了,日後也只會越來越多東西加入,為了要促進 Web 朝向下一代演化,Google 對於促進網路標準化可說是費了十足的功夫,也慢慢包山包海的什麼都做,但要推廣到大眾市場可能還有好一段路要走。

像是這次的 HTML 5 就是一個很大的重點,這是個非常具有殺傷力的新標準,Opera 的 CEO Von Tetzchner 還說:「HTML 5 可處理豐富的多媒體內容,這意味 Adobe 專屬的 Flash 大致上將變得可有可無。」如果到時 Flash 變的可有可無,那麼 Silverlight 呢? ( 備註: HTML 5 規格可能要等到 2012 年才會有正式版,但現在就已經有 Browser 實做了,到時一定又有相容性的問題,我們永遠的痛 )

另外 JavaScript 的效能改進也非常有趣,在 Keynote 中所展示的 Web 3D 技術 (還在早期研發階段) 可透過 JavaScript 直接存取 GPU 的資源,讓繪圖相關工作交由 GPU 處理,互動的部分交由 JavaScript 處理,到時真的要實現高畫質 3D 的 Web Game 將不會只是概念。另外像是即時遠端的影像,實做 Motion Detection 等操作,都可以透過 JavaScript 來處理,並搭配背景執行程序提升網頁回應效能,以後開發 Web 應該會越來越像在開發 Windows Form 一樣,該注意的事情將會更多,開發人員又有的學了。

總之,Google 就是企圖將 Browser (瀏覽器) 的功能發揮到極致,最終的目標就是要取代作業系統(OS),在以前我們會覺得不太可能,但現在我已經不敢保證,因為 Google 正在一步步實現,而且還走的越來越大步。

還有 Google Wave 也是另一個挺有創意的應用,看 Google 如何讓使用者在 Web 環境下的即時互動協同作業,他可以讓你在寫信的時候,收信端直接看到你在打字,而且是打一個字對方的螢幕就出現一個字,就像是在用即時通訊一樣,甚至比現在常見的即時通訊還即時,除此之外所有對話過程還可以錄製下來,還可以日後重播讓你回一起當時對話的過程!這些在 Keynote – Day 2 的影片中都有展示,也非常的有趣與驚豔。多瞭解一些新技術有助於拓展開發人員的視野,也能夠多激盪出一些創意。

Google I/O Keynote Day 1

Google I/O Keynote Day 2

 

相關連結

  

此文章由 will 發表於 2009/5/29 下午 02:04:08

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: Web

標籤:

收藏:

使用 jQuery Media Plugin 實做影片播放前預覽圖片功能

我們最近有個需求需要在首頁播放 wmv 影片,但為了不驚擾使用者,所以預設是不自動播放的,但是在頁面中宣告載入影片的地方卻會黑黑的一片 (如下圖示),因此客戶就要求說要先顯示一張圖片,然後點擊圖片後再播放影片。雖然不是個很難的功能,但我找到了個 jQuery Media Plugin 可以很方便的幫我處理這個需求。

當載入 Media Player ActiveX 時若預設不自動播放影片會顯示黑壓壓的一片 

jQuery Media Plugin 不止可以播放 wmv 影片,還支援多種影片格式,其中包括:

  • Quicktime
    • aif, aiff, aac, au, bmp, gsm, mov, mid, midi, mpg, mpeg, mp4, m4a, psd, qt, qtif, qif, qti, snd, tif, tiff, wav, 3g2, 3pg
  • Flash
    • flv, mp3, swf
  • Windows Media Player
    • asx, asf, avi, wma, wmv
  • Real Player
    • ra, ram, rm, rpm, rv, smi, smil
  • Silverlight
    • xaml
  • iframe
    • html, pdf

如此多的影片、動畫格式之外,還支援 sIFR ( Scalable Inman Flash Replacement ),甚至於其他文件格式(pdf, html),都可以透過這套 jQuery Media Plugin 進行動態載入的工作,如果副檔名是尚未定義的,你還可以自行定義播放器與副檔名的對應,可說是非常的實用。

jQuery Media Plugin 的運作原理也很簡單,先宣告一個 <a> 標籤,套上 class="media" 類別樣式,然後執行此 Plugin: $('a.media').media();

要實做影片播放前預覽圖片的功能就變的十分容易,如下 HTML 應該很容易理解:

<a class="media {width:260, height:195, autoplay:1}" href="video1.wmv" 
   onclick="$(this).media();return false;">
    <img src="/images/video1_image.jpg" width="260" height="195" />
</a>

主要需注意的地方只有幾點:

  1. 設定一個圖片用來做影片預覽或進行播放影片用的示意圖,高度寬度需先指定。
  2. 在套用一個 A 標籤 (超連結),並套上 class 屬性,並明確指定播放時影片的高度(height)、寬度(width)、與是否自動播放(autoplay)。
  3. 然後在 A 標籤再多加上一個 onclick 事件,用以啟用 jQuery Media Plugin,並記得加上 return false; 避免直接下載 video1.wmv 影片。

不過目前的最新版 ( v0.90 ) 有些問題,無法正確解析設定在 <a> 標籤 class 屬性中的選項值(Options),我有對 jquery.media.js 做出一些錯誤修正,需要的人可以到以下網址下載:

jquery.media.js (15.40 kb)

相關連結

  

此文章由 will 發表於 2009/5/28 下午 04:58:00

永久連結 | 評論 (10) | 此文章的RSSRSS comment feed |

分類: JavaScript

標籤: ,

收藏:

品質來自對細節的講究

“品質來自對細節的講究”是我一直以來的信念,對於軟體開發上的種種細節我都不放過,盡量不讓自己處於模糊地帶,這樣才能在下次遇到相同或類似問題時得以迅速理解並解決,除了可以縮短處理問題的時間外,最重要的是可以提升軟體品質,以及在撰寫程式初期能就避免細節中潛藏的瑕疵。

我目前在公司裡最主要的工作是帶領一群軟體工程師開發軟體專案,時常帶大家一起寫 Code、看 Code,有時間的時候還會替他們做 Code Review 並點出一些程式撰寫的問題或提供更好的寫法,對他們的要求不曾少過。

曾經有位工程師問我:「保哥,我以前都一直認為寫程式不就是 "解決問題" 而已嗎?而且以前的主管也從來不會問我為什麼要這麼寫或哪裡寫不好要改,為什麼你還要花時間看我們寫的 Code,有時還會要求我們將寫好沒問題的 Code 進行重構(Refactoring)或整個打掉重練?」

我回答他:「我們是個軟體團隊,每個人都需要自律,並且負起一位工程師應付的責任,每個人的技術知識都應該不斷精進,你不應該滿足於 "解決問題" 這個層級,而應該進而 "理解原理" 與 "探究細節",從這個角度出發所寫的東西不但有成就感,也更踏實。」

我還說:「我們彼此都應能互相支援,任何時刻都可以輕易的接起另一位工程師寫的程式並讓軟體繼續發展下去,沒有怨言,只要架構清楚、程式碼撰寫習慣一致就比較不會有問題。像我們公司有些四、五年前做的專案到現在還在維護,如果當初沒要求程式寫法,我想現在維護起來一定非常辛苦,想想你過兩年後如何維護你現在寫的程式吧。」

我是個熱愛程式設計的人,對我來說寫程式很有趣、很有新鮮感,但有趣的地方絕不止於 "解決問題" 而已,我曾經也這麼想過,但後來我理解到,問題總會有解決的一天,但當同樣的問題不斷出現時,你會知道問題可以解決,但慢慢的你就會失去新鮮感、失去成就感,寫程式就會變成例行公事,就不好玩了。

軟體不像建築工程般做不好會危及人的性命,我們不見得需要先規劃好所有細部藍圖才開始施工,我們只要有個架構、瞭解大致的需求就可以開始動工了,做錯了就是 "",責無旁貸的"",寫軟體一定要預留 "修改" 的空間,這就是我盡力要求 "可維護性" 的關係。我們公司一年可以接數十件大大小小的軟體專案,如果每個專案都只能由開發的人來維護,那人力配置一定會極度不平衡,相對的軟體品質遲早出問題。

再者,你應該也知道客戶講的東西經常 "昨是今非",越大的案子越是這樣,連簽了名的文件都還能不算數,對於一些小範圍的更動軟體來說本來就應該是合理的,但我看到有些朋友對於客戶修改規格的舉動經常忿忿不平,還有一些經常接案的外包人員來說,也經常在為一些很小幅度的規格變更堅持己見,但是光花在不願意修改所溝通的時間我想軟體早就不知道修完幾遍了,一切都出在對軟體專案錯誤的認知,或是自己的寫的軟體不容易修改所做出的 "合理反應"。

客戶心情好或是內心極度愧對我們時,有時還會好心的主動提出願意付錢請我們修改程式,我們為了繼續經營客戶,這種案子當然要繼續接下去。所以無論如何只要是我們開發出來的軟體,一定要盡量預留軟體修改的空間,以免每個客戶都只做一次生意,那很累。若是客戶不要求,且案子真的確定完成後需求不可能會變更情況下,那也真的沒什麼好要求的了。

隆重聲明一下,我當然不可能認同客戶狂亂的規格變更,凡事總有個界線在,我只是想強調做軟體專案應該與客戶站在同一陣線,以客戶滿意度為依歸。但若遇到超級沒 sense 又很愛凹你做東做西且打死不追加預算的客戶時,你可以有兩個選擇:(1) 直接退錢說不做了 (2) 硬著頭皮改到底。

我幾年前曾經花了幾萬塊去上超強記憶力的課程,印象最深的只有一句話:「人的 "記憶" 幾乎是無限的,人之所以會忘記是因為 "回憶" 的方式有問題。」

技術的細節如此的多,有人會問我:「我怎麼可能把所有細節都記得,有需要再查 Google 就有了啊。」首先,Google 查到的東西不見得是對的,你不瞭解細節自然也無法判斷對錯。當然,我也不例外,我會忘事情,技術細節也會忘,但那不是忘記,只是回憶不起而已,有些知識被消化了,已經進入潛意識,寫程式時你會很自然的會將你曾經學過、認真研究過的東西都給用上,只是你不知道而已。

若真的要回憶起舊時記憶的最佳方式,就是不斷的在腦中建立索引!像我自己寫部落格文章,腦子裡記得的只有關鍵字而已,這些關鍵字就是我的索引資料,因為都是自己寫的東西,關鍵字自己最清楚,所以我隨時可以找到想要找的資料,找不到才會去翻 Google 的資料。

我前幾天就有個有趣的經歷,我在看別人寫的程式,他寫的資料統計程式一直有數據不正確的情況,我看了好幾個小時竟看不出問題所在,最後無意間發現原來他寫的類別定義了一堆類別層級(Class)的欄位變數(Field),並且共用於多個方法,他以為這些變數只要宣告一遍然後所有方法(Method)都可以直接使用很方便,卻完全沒有想到這會造成極大的副作用(Side Effect)。我最早一開始寫程式時很喜歡使用「全域變數」,當時是我在寫 Perl、PHP 的時代,但就因為吃過很多 Debug 的虧,老早就不用這種開發技巧了,但在看別人的 Code 時卻不會直覺的想到,只有自己寫 Code 時才會避開這個問題,而這就是對技術細節內化的最佳證據。

有一句話說得很好:「時間花在哪裡,成就就在哪裡」想要做好軟體工程師的角色,就應該多花時間專研技術細節,這並非是一條不歸路,做軟體的人,不滿意隨時可以轉換跑道,但你走這條路的時候不認真就是浪費時間,你只要有付出努力就一定會獲得有價值的東西,畢竟寫程式是腦內革命,不是每個人都走的下去的,但要長期走下去就必須要有源源不絕的熱情、對新知的無限渴望與用不完的新鮮感。

以上是我的個人觀點,歡迎切磋討論。

  

此文章由 will 發表於 2009/5/27 下午 09:02:29

永久連結 | 評論 (8) | 此文章的RSSRSS comment feed |

分類: 團隊合作 | 心得分享

標籤: ,

收藏: