i'm sam

軟體開發|自我成長|機機車車

[032] 總是做出最糟決策?

[032] 總是做出最糟決策?

這篇來好好反省今天早上發生的事... 今早因事擔擱,較晚出發上班。原本從家裡走路約十分鐘即可抵達公司,不過因為下雨手上又提重物,經過公車站牌時決定等個五分鐘看能不能走運搭到直達車(兩個站,約四個紅綠燈就到公司)。 五分鐘過了,直達車沒來,手有點痠,心裡又想:「乾脆搭優步好了」,拿出手機一看「抵達時間約五分鐘,下雨天,時間大概要再延長三分鐘,那我乾脆走路好了...」 「手好痠,乾脆搭計程車好了...」 「其實不是很遠,計程車一跳錶就七十五元,太浪費了...」 綠燈了,再等看看公車好了...,切!又沒等到。算了,還是走路好了... 浪費了十來分,最後我還是拎著重物,一步一步走到公司,花了八分鐘。(走到一半看到那班「直達車」開了過去 Orz) -------------------------------------------------------------------------------- 我學到了什麼? 1. 不要想太多(優柔寡斷),決定了就去做。手痠就在站牌多等幾分鐘,公車總是會來的。時間寶貴,從家裡就搭計程車,百元不到省了十分鐘,划算的。 2.
2 min read
[029] 給部門同仁的話(貮零一六)

[029] 給部門同仁的話(貮零一六)

Hi Team, 去年是公司第一個「滿滿的年」,謝謝各位這一年來的努力。對於一間剛起步的公司來說,我覺得表現平平,努力空間不小。我希望也相信不管是個人職涯(技術力、薪資力)或公司的發展,今年會比去年更好。 我們是小公司,每一員都是戰力,每一年都會有艱難的戰役。我希望各位不論如何都要挺住,可以放鬆但不要鬆懈。今年各位任職皆滿一年,可以安排放長假,不過請幫我個忙,務必提前「預約」,原則上不希望各位的請假「衝堂」。 今年年終獎金給得或許不如各位想得漂亮,但畢竟才剛起頭,大家一起努力,只要公司成長,老闆會很大方。坦白跟各位說,前三年的打底階段會很辛苦,要有心理準備。 幾件事希望各位務必自我要求: 1. 生活作息調整好,對自己或公司都是好事。有好體力才有戰力,作息規律是保持好體力的一大因素。 2. 試著用不同的「手法」解決問題。常用的技法要練熟,但不要排斥或忽視其他可能的工具或技術。 3. 記住「Done Done 工作術」
2 min read
[028] 你是我寶貝,但我要毒死你

[028] 你是我寶貝,但我要毒死你

說的是在兒女面前(家裡、車裡...)抽煙的父母——腦袋有洞需要看病的人。 > “對小孩說你是我寶貝,然後一直灌他二手煙。病得不輕,凸!” - Sam Tsai pic.twitter.com/RtLz49c4cR [https://t.co/RtLz49c4cR] — sam (@mhtx) January 28, 2016 [https://twitter.com/mhtx/status/692648541106343936] 為了一己之私(抽煙很爽我知道 [https://samtsai.ghost.io/ghost/editor/194/] ),明知道影響小孩健康甚鉅,還是硬灌「寶貝」二手煙,這不是智障是什麼?嫌自己命長,硬拉著小孩下水,寶貝寶貝,莫名其妙!
1 min read
[027] OmniFocus 出走潮

[027] OmniFocus 出走潮

OmniFocus 是許多 Mac/iOS 圈內人中意的工作(待辦)事項管理工具,在「涉入」該圈子前早有耳聞此軟體,第一印象是:「哇靠!一個工作管工具要價台幣近二仟,而且只支援 Mac,沒有跨平台,有沒有搞錯?」 Mac/iOS 圈內人有個共通特點:我欽定的東西都超級好用,貴也是有道理的。然後就一直推,一直推... 雖然 OmniFocus 1.x 大受歡迎,但 2.x 推出後似乎引起一些死忠粉絲不滿,有的認為介面設計失敗,有的認為新版功能不符期待。 最近該圈開始有人耐不住,紛紛出走,新的選項是 2Do [http://www.2doapp.com/],同樣也是 Windows 不沾鍋。(身為重度 Mac/Windows 兩棲,
2 min read
[026] 看 Code 說故事:Facebook Folly(三)- Optional
C++

[026] 看 Code 說故事:Facebook Folly(三)- Optional

先前 [https://samtsai.org/2016/01/22/022-facebook-folly-part-2/]的 Lazy 其中一個特性是:運算式/資源只會被執行/索求一次。實作此特性用到了 Optional,位置: * folly/Optional.h Lazy 實作 operator() 覆載函數如下: result_type& operator()() { if (!value_) value_ = func_(); return *value_; } value_ 可被用來「判斷是否已給值(Function func_ evaluated or not)」,也可用來儲值 func_ 的回傳值。 由此來看,Optional 可以讓原本的型別多了一種「供外界查詢是否已被賦值」的能力。
1 min read
[025] 人生就是不斷地撞牆

[025] 人生就是不斷地撞牆

撞牆就是「試錯」,親身體會效果為最。 明知為了更遠大的目標,棉花糖不能早吃,可還是忍不住誘惑,張口吃下,事後才反悔,但時間過了就沒了。 今天腦袋空空,不能怪台灣幾十年罕見的雪景,不能怪出人意外的事件。就怪自己不懂得珍惜「時間」,沒了才嘆可惜,又有什麼用呢? 「最想做的永遠不是手上正在做的」,缺少貫徹到底的意志力,信心便慢慢流失...
1 min read
[024] 一窩瘋

[024] 一窩瘋

台灣這幾天最重要的頭條新聞非「Snow」莫屬,難得能在台灣看到雪景,許多人放假前就計劃了賞雪行程。媒體(傳統或社交)推波助瀾,想也知道各大山肯定人滿為患。這就是「一窩瘋」。 我對這種「浪漫」是一點勁也沒,想到塞車、憋尿、低溫、爭吵、人禍,怎麼可能來勁! 有人說「自己沒勁也不要潑人冷水」,我說雪你都不怕了,還怕冷水嗎? 隨著年齡增長,又有了小孩,很多「活動」早已與我絕緣: * 跨年看煙火 * 一窩瘋賞XX * 大排長龍吃美食 說真的,人世間沒有什麼比「時間」更貴的了。花幾個小時看一樣「東西」,而那「東西」還不特別稀奇,怎麼算都不划算吶。 本來嘛,瘋不瘋是個人自由,可是為了讓那些「自私」的人滿足賞雪慾,可苦了警察跟救難人員(別說你不知「人多的地方容易出事」
1 min read
[023] 狂得有理?
Programming

[023] 狂得有理?

因為一篇文章 [http://www.yinwang.org/blog-cn/2016/01/18/java/],讓我這幾天連續看了這位名為 Yin Wang [http://bit.ly/1WDU7ER] 狂人的十來篇狂文。最初看的幾篇文章就是「這個程式語言爛,那個大師爛到不行,那間公司爛到吐血...」,幾乎名聲在外的人事物都被他評得一無事處。 這樣的評論有種 DHH-fu,總之就是狂。對這位狂人稍做調查 [http://bit.ly/1RF6Ebx],發覺來頭不小,似乎狂得有本事( 如此長的退學申請文件夠嗆的 [http://www.lofter.com/postentry?from=search&permalink=183ec2_47a02c] )。文章寫得不錯(比我好太多了),越看越有趣。對於軟體工程領域,他的許多觀點跟我相差甚多,
2 min read
[022] 看 Code 說故事:Facebook Folly(二)- Lazy
C++

[022] 看 Code 說故事:Facebook Folly(二)- Lazy

Facebook C++ library 檔案命名慣例為 FileName.h,也就是 Camel Case [https://en.wikipedia.org/wiki/CamelCase] 命名法,開頭大寫。我目前愛用的命名法是 Google 的 Snake case [https://en.wikipedia.org/wiki/Snake_case],長這樣:file_name.h。 單元測試使用 Google C++ test framework [https://github.com/google/googletest] ,各大開源專案的一致選擇。測試碼統一放在 test 目錄(我覺得複數 tests 較為合適)
3 min read
[021] 看 Code 說故事:Facebook Folly Library(一)
C++

[021] 看 Code 說故事:Facebook Folly Library(一)

Facebook 在 2012 年公開其內部重度使用的 Folly C++ library [http://on.fb.me/1ZEooDe]。快速瀏覽過 Folly 原始碼,發現主要開發人員之一是我稱之為 Template-man 的 Andrei Alexandrescu [https://en.wikipedia.org/wiki/Andrei_Alexandrescu],非人類。 Andrei Alexandrescu 有一本書叫《Modern C++ Design [http://amzn.to/1QmUBi2]》,是我最初接觸 C++ Template 的書,當時看的是侯捷老師的中譯本《C++設計新思維 [http://www.taaze.tw/apredir.
2 min read
[020] 「持續寫作」二十天小結

[020] 「持續寫作」二十天小結

「第二十天了呢...」,心裡這樣想著,我還想繼續寫下去。小結目前為止的感想: 1. 文章內容沒深度,寫作能力果然停留在國中程度... 2. 評論不到位,說了比沒說還糟。 3. 技術方面的文章太少,應多專注在「本業」。 4. 總是趕在最後一刻才交作業,一天一篇不到千字的文章就覺得有壓力,時間的掌控有很大的進步空間。 5. 移動式的寫作環境不夠純熟,總是要有筆電才能好好寫文。(說明「移動式寫作環境」也是個好題目) 其實幾年前(Movable Type 時期)開始就有寫東西的習慣,只是通常寫到一半就中斷了,原因不外乎「我在幹嘛啊?與其浪費時間寫沒人看的文章,倒不如多寫一些程式,看幾集美劇...」「截圖、修圖、潤飾文字...,太累了...」 現在我的心態變了,沒人看我寫給自己看,就當做筆記,而且寫作過程常出現靈感,也算意外收穫。「持續寫作」的目的是培養毅力,慢慢寫,多多看,寫作力總會提昇。 因為「
2 min read
[019] C++ Class 的設計考量(一)
C++

[019] C++ Class 的設計考量(一)

昨天 [https://samtsai.org/2016/01/18/018-function-should-not-have-side-effect/] 談到函數(Function):「好的函數不該有副作用」。今天來談物件,以及生成物件的類別(Class)。 1. 介面設計成讓使用端不容易誤用。 2. 少用繼承(Inheritance [https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)], is-a 關係),善用合成(Composition [https://en.wikipedia.org/wiki/Object_composition] , has-a 關係)。 3. 內部實作露出越少越好。 介面設計成讓使用端不容易誤用 以 Virtual Function 為例,底下 Animal 類別有一個
2 min read
[017] 人善被人欺

[017] 人善被人欺

以「遲到」這件事來說「人善被人欺」的真理。 來說個故事。我有一位朋友甲君,每次與他相約,十有八九遲到。誇張一點甚至比約定的時間晚一個小時,後來乾脆把約定時間「提前」。不過,對於「遲到老手」甲君來說,不管提前多久,他總是有辦法遲到。 有一回,跟一位共同朋友(Mutual Friend)聊到這事,他說週遭的朋友,包括甲君在內,很少有人會慣性遲到。我納悶,遲到大王怎麼可能不遲到? 共同朋友說與甲君稍熟時,便發覺他有遲到惡習。對於這種遲到大王,他早有應付之道。有一回,他跟甲君約好一同出遊,約定時間過五分鐘甲君還沒出現,他毫不遲疑,獨自出發前往目的地。事後朋友對甲君說:「大家的時間都寶貴,五分鐘是我給朋友的最大限度。」之後甲君與這位朋友相約,幾乎不遲到。 仔細回想,每次遇到甲君遲到,我都傻呼呼地等他出現,聽他說那些明顯有漏洞的理由,平白地浪費許多寶貴時間。或許當時甲君真有罪惡感,由於遲到的「成本」
2 min read
[016] 衛生麻將++

[016] 衛生麻將++

三五好友偶爾聚聚,打打衛生麻將,好不快活。麻將好玩,偶有驚喜,不過傳統玩法有點無趣。那天心血來潮,跟朋友「試用」新玩法:增加 Bonus 點數來增加胡牌台數。 玩法有兩種: 1. 29中發白 2. 19東南西北中發白 版本一:29中發白 莊家共擲「兩次」骰子。第一次擲三粒骰子;第二次擲二粒骰子,決定「獎勵牌」。「獎勵牌」點數對應如下: 1. 2-9:不論哪一門,胡的牌點數若是「獎勵牌」,則「加三台」。 2. 10(中)、11(發)、12(白):若胡的是「獎勵牌」,「加五台」。若胡的不是「獎勵牌」,但是手上有「獎勵牌」
2 min read
[015] 糟糕的 Medium 「上一頁」體驗

[015] 糟糕的 Medium 「上一頁」體驗

Medium [https://medium.com] 愈來愈受歡迎,許多名人紛紛將部落格移往這個由 Twitter 創辦的寫作平台。國外對於 Medium 的編輯器評價不低,我在中文輸入方面的體驗不太好,不過今天的重點在閱讀,不在寫作。 一些有名的公司或個人選擇將文章放到 Medium 上,使其磁吸效應愈來愈強大,連一向愛自幹的 37signals 家都決定搬到 Medium [http://bit.ly/204vOSg],可見其吸引力。 但是,今天在 Medium 讀一篇文章 [http://bit.ly/1Rhsh1w] 時發現一個擾人的問題:「上一頁」不是回到先前閱讀的地方,而是回到文章開頭。範例如下圖: 問題的步驟: 1. 打啟任一文章(必須有人留言)。範例:http://bit.ly/1Rhsh1w 2.
1 min read
[014] 我的備份策略(二)

[014] 我的備份策略(二)

昨天 [https://samtsai.org/2016/01/13/013-backup-plan-1/] 提到「活」的資料備份,漏掉了一個重要備份策略:系統備份。 Backblaze [https://www.backblaze.com/cloud-backup.html#af9kje] 是將電腦檔案備份至雲端,略過了「系統檔案」,也就是作業系統本身是沒有備份的,只有使用者的資料會備份。 系統之所以重要,是因為它能在電腦無預警罷工,開不了機(我遇過 SSD 掛了,當場死給你看),能讓你在短時間內回復至可運作的狀態。Mac 上,我使用的系統備份工具有: * OS X Time Machine。備份至兩個不同地方: NAS 以及外接硬碟。一天至少一次。 * SuperDuper [http://www.shirt-pocket.com/
1 min read
[013] 我的備份策略(一)

[013] 我的備份策略(一)

幫你的資料買幾份保險,出事時才有得「理賠」。電腦「意外」來得快又突然,昨天還好好地,怎麼今天就開不了機了?「重要資料遺失救不回來」是很痛苦的事,不要輕易嘗試! 所幸,幫寶貴資料買保險一點也不難。在說明怎麼做之前,必須釐清幾件事: * 單純把「檔案複製到隨身碟」不算備份。以我協助處理過的案例,以及親身經歷,在搶救資料的危急時刻到來時才發覺,那個用來備份資料的隨身碟或外接硬碟,幾乎毫無用處: * 重要的資料沒有備份到 * 電腦認不到裝置 * 被寵物或小孩弄丟了 * 狡兔三窟,資料最少要備份到三處不同地方,而且要用不同的方式與週期進行備份 * 備份就是為了還原,要確定備份的資料有辦法安全地還原,否則白搭 以下是我目前的備份策略與工具,之所以說是「目前」,因為資訊科技進步神速,昨天可行的策略,明日可能就不堪用,所以每隔一段時間就要檢視調整備份策略。 我把資料備份分成兩種: * 「活」的資料備份 * 「靜止」的資料備份 「活」的資料備份 即時反應目標電腦上當前的資料,這類型的備份常於背景自動完成,一小
4 min read
[012] 坐板凳  看爭議

[012] 坐板凳 看爭議

身為一個局外人,前天在心得戰火點燃當天,寫了一篇對於〈心得戰火的心得文 [http://bit.ly/1ZUL0S1] 〉。我有寫作力低的自覺,所以只敢在自己的場子撒野。 由於完全不了解個中「私怨」,我用旁觀者的角度看〈心得文〉,讀完感覺很不舒服,文章寫得不厚道。一個三輩子不愁吃喝的人把那些覺得東西不錯吃的人說成「平常可能都吃飼料」,怎麼看都不厚道,甚至相當刻薄。(當然,能有三輩子花不完的財富,我羨慕的要死!) 我相信「同一邊」也是有人覺得不妥,但在心裡自我解讀成「一切都是為了節目效果,重點在其他地方。」或者,「這一切都要由事主承擔,誰叫她...」 是啊,就私怨嘛。「以前打別人,現在被打也是活該」,這很好懂,但也很難懂。難懂的是,這就是你們的「格局」嗎?或許有機會了解更多,才有辦法弄清楚為什麼格局會這麼小,明明都是成年人啊,而且也小有成就不是? 談談今日最新的〈自爆文〉(說是自爆其實也沒有全爆,不過這麼做是對的,
3 min read
[011] 我的生活作息

[011] 我的生活作息

近五年來(女兒出生那段「黑暗期」不計),我的睡眠時間如下: * 每晚十二點前睡著。是睡了,不是剛上床。 * 隔天早上八點左右起床。(十一點睡的話,七點半以前就會自動醒來) 起頭是另一半強迫改變我的作息,開始的幾個月有抗拒,覺得晚上才能專心做一些自己有興趣的事(例如追美劇XD),早睡把大好的時間浪費了。慢慢發覺作息調整後,即使不睡午覺,下午也不會有精神不濟,反應遲滯,大腦不靈活的徵狀。 感受到好處,我也不再排斥早睡了(在台北,十二點前就寢算早的吧?)。 觀察並詢問公司有午睡習慣的同事,就寢的時間皆為凌晨以後,而且一睡就是半小時,勉強醒來臉色看起來相當痛苦。似乎少有人能體會十分鐘午睡魔力 [http://bit.ly/1IYMZAL]。 接下來我想要嘗試一些改變:就寢時間不變,但起床時間提前半小時或一小時。利用這「多」出來的時間,趁著「惡魔女孩」還在睡夢中,做一些自己的事。看看書,讀幾篇文章,寫寫字,應會有不少收獲。
1 min read
[010] 做著做著...就愛上了

[010] 做著做著...就愛上了

意外地接連兩天讀到概念上同質性極高的文與書,實在幸運。 Basecamp 的創辦人 Jason Fried 寫了一篇文章——〈Do you have to love what you do? [http://bit.ly/1VSP4jn]〉,主要是說他不同意這樣的說法: > The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle. 對於剛出社會的職場新鮮人,希望找到符合自己興趣,自己喜歡的工作乃人情之常,但絕不能將此定為「
2 min read
[009] 不要用父子關係去理解 C++ Inheritance
C++

[009] 不要用父子關係去理解 C++ Inheritance

昨天跟同事討論到 C++ 繼承,主要是從「用何種方式去描述或理解 C++ Inheritance [http://bit.ly/1PkcKYG] 比較精確」來切入。他說繼承像是「父子關係」,我卻覺得這樣不夠精確。本篇旨在描述我的想法。 C++ Inheritance [http://bit.ly/1PkcKYG] 讓兩個物件成為 is-a [http://bit.ly/1OTuLTw] 關係,若 Object Q 繼承了 Object Y,那麼我們可以說 Q is-a Y——因為 Q 俱備了 Y 的所有介面,故可被當做 Y,但 Q 卻不是
2 min read
[008] 是詐騙還是錯誤期待?

[008] 是詐騙還是錯誤期待?

一天,一位有十年以上 C 語言程式設計能力的「人才」,付費去上《Intro to C Programming》的課。課後,痛批講者無良,竟然教這麼粗淺的東西,這種等級的「技術」根本看書就學得會,於是怒罵授課方有如詐騙集團,更引來許多「同溫層」友人大力圍剿,一人一句,擲地有聲... 真的是詐騙嗎?還是這位「人才」根本去了不該去的地方,或是對該堂課產生「錯誤期待」? > 除此之外,這門兩小時的課,廢話大概佔了起碼一小時又三十分鐘... 既然都說是 Intro 了,擺明就是入門課程,老手勿入。你是人才而且經驗豐富,這課當然不適合你啊。心得隨人寫,但一開始的角度就錯了,這樣的心得要說「對事不對人」,難以置信。 你不能覺得課上得太淺,不符合期待,就寫了好像很有道理的所謂「心得」,暗指(
3 min read
[007] 我的 WorkFlowy 使用法:寫字台
WorkFlowy

[007] 我的 WorkFlowy 使用法:寫字台

溫馨提醒 讀完本文後想要申請 WorkFlowy,務必使用底下連結(或到這個共享清單 [https://workflowy.com/s/BS0jCVUs3L] 自己挑一個),讓你的容量加倍: * https://workflowy.com/invite/21d12cbe.lnx -------------------------------------------------------------------------------- 正文開始 > TaskPaper knows about four things: projects, tasks, notes, and tags. TaskPaper [http://bit.ly/1PQfqlr] 為一 Mac app,目前 v3 處於預覽版。這是一款支援 Markdown,並於純文字上延伸出更多有用的功能,如 To-do list, Tag,甚至有
2 min read