i'm sam

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

[056] 日本遊之一

[056] 日本遊之一

前陣子去了趟日本(東京、箱根),那是我第一次進入日本本島(先前曾坐郵輪到沖繩、石恒島)。此次旅遊見聞記錄如下。 此次的行程全由同行親友規劃兼招待(感恩),我只負責玩。第一天剛到飯店不久,女兒就發燒到三十九度,打亂了原本的規劃。 由於台灣流感疫情嚴重,我們擔心女兒會不會在台灣中招,到日本才發作。詢問飯店人員後得知附近就有一間醫院(JR 東京綜合病院),隔天趕緊帶她就診。幾年前在永漢日語(非常不認真地)學了三個月,只學了幾句問候語。當天在醫院櫃台用「LINE 中日翻譯」一句一句對話: 順利掛號。日本醫生可以進行英文對話,遇到的小兒科女醫生很有耐心,因此詢問病情以及快篩(不是流感)後的處理都沒有問題。醫藥費比想像中貴,不過還在合理範圍。(回國後才知道健保可以申請理賠,不過缺了一些紙本資料,還在處理中...) 兩個女人都不是流感,一個燒兩天,一個則是整個行程都戴口罩,一直到回國就診才慢慢痊癒。 待續...
2 min read
[055] 便宜的 Code Siging Certificate from DigiCert
DigiCert

[055] 便宜的 Code Siging Certificate from DigiCert

註:經網友提醒,本文所附連結,適用於未申請 DigiCert 用戶,若是既有 DigiCert 用戶,則該連結無法提供優惠。請留意! 前公司的 Code Siging Certificate 購自 VeriSign(後來被 Symantec 買走,而 Symantec 在業界的風評不太好 [http://bit.ly/1ZvAv7i])。新公司決定改買 DigiCert [https://www.digicert.com/] 提供的服務,一來便宜許多,二來服務較好(回應快速)。 價差 Code Signing Certificate 的價差: * DigiCert: USD $223/Year * Symantec: USD $499/Year
1 min read
[054] JUCE Diary #9: Android app Development
JUCE

[054] JUCE Diary #9: Android app Development

近年來許多專案宣稱使用 Web 技術(JS + CSS + HTML)開發跨平台,特別是 Mobile app (Android and iOS),省時又省力。大概是對 Web 技術不熟悉,因此這樣的工具對我的吸引力極低。 這一年來接觸 JUCE [http://juce.com] 甚深,由於它宣稱自己跨很大,不只跨桌面(Windows, Mac, Linux),還跨到行動裝置(Android , iOS)去,剛好有需求於是花點時間玩了一下。 官方在 JUCE 論壇維護了一篇文章 [http://bit.ly/1p1I2hh],教你如何使用 JUCE 開發 Android app,其中最重要的一點是: > 不要嘗試在 Windows
1 min read
[053] Google 不是用來消滅書本的

[053] Google 不是用來消滅書本的

許多人出了社會後幾乎不再碰書(小說、漫畫、壹週刊除外)。有些人不愛讀書,有些人覺得讀書無用,資訊網路發達,有些人覺得有了 Google,書是多餘的了。 大錯特錯。 有自信很好,太過自大就糟糕了。如果只是自己不看書,那就算了,鼓吹這種「讀書無用」的思想,拖人下水,糟糕透頂。 我不是愛書成痴的人,我是有目的得看書。講白一點,就是「撿現成」。花點錢(甚至不用花錢——善用圖書館),從別人整理好的書中吸取精華。消化吸收,依自己的角度去理解然後重組,再然後生產出「知識」。 不要有什麼東西都能用 Google 搞定的心態。Google 存在的目的不是要消滅看書的必要性,而是方便人們探索,更容易找到有用的資料載體,其中一大類就是書籍。你可以利用 Google 有效地過濾,找到各領域的「好書」,然後讀它。 我不是說所有的書都值得看,但值得看的書絕對不只「古書」
2 min read
[052] 老鼠與網路

[052] 老鼠與網路

更新(2016-06-17):上禮拜又被咬斷了。Orz.. -------------------------------------------------------------------------------- 為什麼網路不通?因為老鼠把光纖線路啃斷了! 今早發現公司網路不通,內網沒問題,對外連不上。檢查分享器,發現 PPPOE 撥不上,檢查中華電信的 MODEM,發現 PON 燈號亮紅燈。 由於公司連日有鼠輩出沒,直覺猜測是它們搞得鬼。果不其然,循線追查,命案現場發現: 去電客服,派員維修,早上通知,下午人來。在此之前,我用手機 4G 做為備援,應付約十台裝置(筆電+平板)的網路需求。從找問題到可對外連線,花了約二小時。在此紀錄設定,供日後參考。 牽扯到的裝置有: * iPhone 6s Plus * MacBook Air w/ Windows 10 * Vigor
2 min read

[051] Press Any Key To ...

(欠了太多債,只好用這種沒營養的填充品) 當螢幕進入省電模式或電腦進入睡眠模式,按鍵盤「任意鍵」或移動滑鼠通常就能喚醒螢幕或筆電。 「按任意鍵繼續...」這一個簡單的動作其實暗藏玄機。 根據我的觀察,當需要「按任意鍵繼續...」時,多數人會按那個因為很長所以好按的「空白鍵」,但這其實是錯的。 我認為是錯的理由是:「空白鍵」在許多系統,許多情境下,會觸發當事人意料之外的事件。例如:螢幕上的焦點是一個問你要不要刪除一個非常重要而且你不想要刪除的檔案。 一個設計良好的系統不應該讓你觸發該「刪除」動作,不過,現實生活中沒有完美的系統,所以你的「空白鍵」可能導致重要資料刪除而不自知。 下回,不論何種原因需要「按任意鍵繼續...」,請選擇左下角的 CTRL 鍵。(不要問其他鍵可不可以,沒必要為這種事浪費腦力。)
1 min read
[049] JUCE Diary #8: Memory Might Leak
JUCE

[049] JUCE Diary #8: Memory Might Leak

先前 [https://samtsai.org/2016/02/18/048-juce-diary-7-basics/]提到 JUCE 應用程式的初始化區塊之一為 initialise method。程式執行時,在初始化階段有一常見的情境: > 一旦某一條件成立或某些條件不成立時需停止執行。 若在 initialise 發現程式必須終止,最直覺的作法是呼叫 systemRequestedQuit。不過,這麼做在 Windows 上會出現 Memory Leak,如下圖: 解決方法是離開 initialise 後再想辦法停止執行,但 initialise 無回傳值(void),故無法以回傳值停止。 MessageManager::callAsync 可以在 Main Thread 執行特定程式區塊,適合用法解決我們遇到的問題。寫法如下: MessageManager::callAsync([this]() { systemRequestedQuit(); }); 上面程式碼寫在
1 min read
[048] JUCE Diary #7: 基本架構
JUCE

[048] JUCE Diary #7: 基本架構

Projucer 創建的專案範本包含的基本元素,其相關檔案如下: * Main.cpp * MainComponent.cpp * MainComponent.h 以時下流行的 MVC pattern 來類比,Main.cpp 大概就是 Controller,而 MainComponent.cpp/MainComponent.h 則是 View。Model 還沒有,視情況自己補。 上回 [https://samtsai.org/2016/02/18/047-juce-diary-6-basic-layout/] Projucer 建立的 GUIApp 專案的主要檔案 Main.cpp 裡頭有一個 GUIAppApplication class(類別,以後不中譯了),繼承自 JUCEApplication。這個 JUCEApplication
2 min read
[047] JUCE Diary #6: 地雷
JUCE

[047] JUCE Diary #6: 地雷

JUCE v4 版之後要求建立 ROLI 帳號才能下載 [https://www.juce.com/get-juce],過了那關之後會取得一個壓縮檔,裡頭放了 JUCE 的原始碼跟一支名為 Projucer 的工具。 建立 JUCE 專案的工作由 Projucer(v3 以前叫做 Introjucer) 全權負責,也是從 JUCE v4 之後,Projucer 會要求輸入 ROLI 帳密: 底下示範如何建立一個 GUI 應用程式(Visual Studio 2015): 上圖同時也示範了如何移除不需要的 JUCE Module。雖然 Audio Processing 是 JUCE 強項,但我的專案用不到,於是將其刪除。 地雷在這裡
3 min read
[046] 以 Trello 管理敗來的設計素材
tip

[046] 以 Trello 管理敗來的設計素材

BundleHunt [https://bundlehunt.com/shop/create-your-design-bundle/?ap_id=mht] 偶爾會出現一些讓人忍不住下手的組合包,一不小心手就滑了。同類型的推敗網站不少,我也敗了不少貨色。 有個問題,以設計素材(Icon, Logo, Theme, Banner, Plug-in, etc.)為例,時間久了我會忘記曾經買過哪些好貨,有時候甚至重複購買相同的產品。 這樣很糟,我試過用 Evernote 管理這些素材,但效果不彰。前陣子我改用(世界無敵好用、彈性可比少女雙峰的)Trello [https://trello.com/samtsai/recommend] 來管理我敗來的素材,效果不錯呢。 List 用來分類素材種類(Icon, Logo, UI Kit, etc.),每一張卡都放上截圖,方便日後快速檢視: Label
2 min read

[045] 滑鼠是無辜的!

有一些人有「砸」滑鼠的習慣動作: > 把貼在桌面的滑鼠舉高,重重地砸回桌面,一連數次。 其效果是製造出很大的聲響,釋放一些怒氣。以我十多年軟體開發經驗的觀察,常見引起「砸滑鼠」的原因有: 1. 鼠標不聽指揮 2. 程式非常難寫 3. 臭蟲無法可解 4. 主管偏不信邪 愛砸鼠的人以為這個動作對於解決問題有幫助,實則不然。相反地,會帶來許多壞處,我可以列出兩個: 1. 嚴重影響其他人的工作情緒 2. 對滑鼠造成無法彌補的傷害(滴水穿石的道理) 釋放了一些怒氣,卻因此增加了更多人的怒氣(專心做事被中斷,能不生氣嗎?)。 以前的滑鼠是滾輪,會卡垢,敲一敲會比較好滑,情有可原。光學滑鼠沒這問題了,砸得再用力也沒用。解決鼠標不聽話的方法很多,傷害(砸)她是最糟的一個。 滑鼠是戰友,請不要輕易傷害她。 軟體公司多是開放空間或小隔間,這個砸的動作發出的響聲絕對會影響到別人。讓人感覺無法控制情緒,
1 min read
[044] LICEcap + QuickTime Player = 快活

[044] LICEcap + QuickTime Player = 快活

LICEcap [http://www.cockos.com/licecap/] 是免費而且開源的螢幕錄製成動態 GIF 的好工具,支援 Windows and Mac,Basecamp 家也愛用這玩意兒。 好東西敞公司怎麼會放過,臭蟲回報或功能展示,我們會用 LICEcap 「錄」下來,放到 Issue Tracking 系統裡(FogBugz or Trello)或電郵寄給客戶,這免費工具幫了大忙。 不過,有個問題。一般來說,Animated GIF (GIF89a [http://bit.ly/1QFlYzv] )雖可用瀏覽器開啟(播放),卻無法控制播放速度或停止。想要跳過前半段,只能老老實實得等,浪費時間。 前陣子無意間發現,原來 QuickTime Player
1 min read

[043] 睡後收入

李笑來的「睡後收入 [http://bit.ly/20TSYPk]」名字取得貼切,主要是描述「被動收入」,李笑來這麼區分「主動收入」與「被動收入」: > 所謂主動收入,就是你必須幹點什麼才能獲得點什麼的那種收入;而被動收入則相反,就是那種你不必幹什麼但竟然可以有的收入。 我的主(專)業是軟體開發,也就是寫程式碼賣錢。目前的專案主要是幫客戶開發應用程式,非自有品牌也不直接接觸消費者。這是我的「主動收入」。 我想增加「被動收入」,目前可行的方案有: 1. 開發工具類軟體 2. 製作教學影片 3. 投資理財 4. 寫文章 工具類軟體主要是解決自己會遇到的問題,把賣相弄好,做個簡單的 Landing Page,然後便宜賣,慢慢賣。 教學影片則是把開發工具類軟體的過程錄製下來,仿 NSScreencast [http://nsscreencast.com/
1 min read

[042] 陸客出沒,品質低落

> 有陸客的地方,周遭品質立馬下降好幾檔次。#世界認證 [https://twitter.com/hashtag/%E4%B8%96%E7%95%8C%E8%AA%8D%E8%AD%89?src=hash] — sam (@mhtx) February 11, 2016 [https://twitter.com/mhtx/status/697721881865093120] 雖然早有耳聞,但以上是我親身體驗後所發的真心推。 有錢有閒出遊的強國人,在內地應是衣食無缺的富人,依時間點看,有可能是「富二代」,得到「目中無人大頭症」的機率相當高,匪夷所思的行為舉止是意料之中。 所以說,「減少陸客出口」對曾被凌虐的國家來說,真的不是件壞事。
1 min read

[041] 要讓救災更有效率...

就要盡量忽略家屬的指指點點。 我沒有救災的專業與經驗,此文純粹從新聞報導來看災難現場常見的「事件」,加上自己的見解。 就算只有一個人喪生,還是有人不平。救難人員該做的是不要理會這些家屬的「不平」,更不應該接受家屬「指導」,以專業訓練,全心全意執行救災任務,才能讓救災最佳化。 安撫家屬的情緒是必要的,提供宣洩的管道也是策略之一,但絕不能因此延誤救災。 家屬要做(但肯定做不到)的是「尊重專業」,災難現場最不理性,最缺乏邏輯的人是家屬,救災最大的阻力之一也是家屬。一方面說要把握時間救人,一方面又不斷「浪費」救難人員的時間(罵、亂、鬧)。 事後諸葛誰都會,但完美無缺的救難計劃只有電影裡找得到。「打擊救難人員士氣」是你們最不應該做的事,你們唯一能做的就是相信他們,然後等(喔,還有祈福)。 大家要平安。救難人員加油!
1 min read
[040] 台北和逸飯店民生館

[040] 台北和逸飯店民生館

台北市區中價位飯店,我推薦和逸民生館。理由: * 房間燈光明亮,設備乾淨。 * 二樓中午以後免費提供茶點、麵包與咖啡、果汁,除了健身房外,還有一間可容納十多人的會議室。使用二樓的房客不多,因此環境相當安靜。 * 服務人員態度不錯。 * 免費提供地下停車場。 * 床很大,兩張單人床拼起來,二大一小睡得剛剛好。 面向民生東路的房型有落地窗,若住的是「景隅客房」,有浴缸可泡澡,別有一翻趣味。 早餐雖不豪華卻也不算太差,水果、咖啡、蛋捲、吐司與白粥,基本配備。重點是環境乾淨清爽,不會有不適感。內人有節癖,她也覺得不錯。 不少飯店的室內光源偏暗,感覺就是怪。
1 min read

[039] 因為爸爸不陪我玩

近幾個月,感覺女兒越來越調皮,老是跟我唱反調,一直挑戰我的耐性,即使被我「修理」了幾次,隔天依然故我。 今天很認真的跟她對話,我問她為什麼要調皮,故意找爸爸媽媽的麻煩?她說:「因為爸爸都不陪我玩。」,然後紅了眼睛哭了... 「真正陪她的時間少之又少,爸爸不說故事也不陪我玩。爸爸只顧著工作,永遠做不完的工作,最討厭爸爸了(仿巧虎對白)。」我猜她心裡是這樣想的吧。 是啊,已經很長一段時間,人到家了腦袋裡裝的不是工作的事就是科技業的新聞,或者哪一個新的技術冒出來,心想裡著找時間研究研究。一直到上床睡覺,我幾乎沒有認真地陪伴女兒。 這真是難題。
1 min read

[038] 爺爺奶奶帶小孩?能避則避

昨晚除夕夜,女兒不小心被電暖爐燙傷,先用冷水沖(約五分鐘,後來醫護告訴我要三十分鐘),然後送急診。此時才意識到自己「意外處理常識」的嚴重缺乏。我知道「沖脫泡蓋送」,但沒認真推敲施作細節:第一時間沖冷水要持續三十分鐘,讓熱度散掉,避免燒到皮膚更底層,造成更嚴重的灼傷。 不過,最令我感到震驚的是親耳聽到「傷口『塗牙膏』、『米酒』就好,不用送到醫院」的鬼話! 我心裡一直有一種想法:在台灣,三、四十年次(或更年長)的老人家,有很大的比例其腦袋內的組織沒有跟著社會進步而進步,他(她)們的思維尚停留在「小時候的環境」,固執地的認為「一樣是人,一樣燙傷,以前有效的方法沒道理現在不管用」。 這些老人認為自己的經驗比現代醫療有用,古法才是最好的,而且一定要有虔誠的信仰,老天爺自然會幫助你。 「老天爺會優先幫助信徒,至於那些不信的人,自求多福。」 迷信的人通常較無法理性溝通,不符邏輯的「事」只要推給神明,
2 min read
[037] 持續控制體重

[037] 持續控制體重

我戒煙成功 [https://samtsai.org/2016/01/04/004-no-smoking/],卻減重失敗。體重的高點是結婚時的 98kg,幾年前透過運動與飲食控制(搭配工作壓力XD),「曾經」減到 85kg。「目標」達到後卻因為無法持續運動,又不忌口,又復胖到 92kg,一直維持到現在。 當初減重的法子簡單: * 中餐後走路十到十五分鐘。 * 晚餐後到公園運動三十分鐘(快走+小跑步)。記得當時買了 iPod nano 開始聽國外 podcast,當時的節目主要是 TWIT [https://twit.tv/],一集大概一小時,回到家差不多聽完。 * 每週約三天晨起繞著捷運帶狀公園走兩趟,差不多半小時。 * 飲料戒掉「純喫茶」。之前幾乎是一天一罐以上! 配合 iPod nano 邊走邊聽,不僅可以練習英文,而且感覺時間過得很快。
2 min read
Programming

[035] 再談設計範式(Design Pattern)

(又遲了,慚愧) 有些設計範式讓我一見傾心,其中之一是 Factory Method [https://en.wikipedia.org/wiki/Factory_method_pattern]。我對於這個範式的理解如下: > 「製造」與「使用」物件的責任應分離。工廠專責生產,客人只想使用服務,沒興趣知道東西怎麼做出來的。 散佈各處的 new Foo(x,y,z) 維護修改易出錯,感覺不踏實。由「生產地」集中出貨,需求有變,調整產線,有機會在不影響「客人」的情況下滿足需求變更。 沒接觸範式前,似乎有感覺這樣做比較好,看到「工廠範式」後晃然大悟,進一步理解發現其中的諸多變化,感覺功力大進(這當然是自我感覺良好,啊不然咧)。 把範式當工具,納入「
2 min read
[033] Apple Watch(一)

[033] Apple Watch(一)

(這篇是昨天要給的,今天還) 去年托老弟到日本帶回一支 Apple Watch,最便宜的款式。目前為止用了約五個月,沒什麼特別的感想,能夠天天戴不會受不了,已經超乎我的期待。 購入 Apple Watch 前,我已經先買了另一支我不知道什麼牌子的藍牙手錶,約台幣四仟五,戴了不到一個月就放在某個地方生灰塵了。主要原因是錶帶讓我感覺不舒服,而且會影響我寫打字,所以工作一定會脫下來。 Apple Watch 的錶帶很舒服,戴出門不會讓我想要脫下來,應該說沒震動的話幾乎感覺不到她的存在。而多數人嫌惡的電池只能撐一天多的先天不足,我倒覺得還好。對我來說,她反而比較像手機而不是手錶。手機天天充電是很平常的事,沒什麼不方便的。 目前為止覺得 Apple Watch 的情境有: 1. 來電提示與接聽與否 2. Line 通知 3. Slack 通知 4. 控制 Overcast 還有最重要的功能:現在幾點XD
1 min read
Programming

[034] 設計範式(Design Pattern)不可取?

出社會寫程式約四年後才「正式」接觸設計範式(Design Pattern),幾年的程式設計經驗確實遇到許多一再重複或類似的問題與解決方法,讀了 Design Pattern 才知道自己不孤單。 花了一些時間與心思「理解」Design Pattern 奧義,沒全懂,也不敢說理解透徹(大概是因為書籍的範例多以 Java 為主,而我恨透了 Java),但我深深覺得 Design Pattern 讓我寫程式的「眼界」開闊了許多。 Design Pattern 可說是前人一再撞牆後累積下來的結晶,歸納整理出來的範式,目的是減少後人撞牆的次數(注意,是「減少」,不是「避免」),要說這是壞東西,說不通。 有人愛,有人恨。任何事物都一樣。 先前看了王垠把 Design Pattern 跟四人幫評得一無是處的文章,今天又看到 TonyQ 討厭
1 min read

[031] 「持續」本身就是挑戰

(這篇是昨天的份額) 即使到目前為止的文章「深度」嚴重不足,即使每篇文章可能花不到半小時就能搞定,還是中斷了「一天一文」的寫作期望。 古有云:「滴水石穿」,世上大部分的事,只要能夠「持續不間斷」,其累積的能量驚人,可偏偏這能量無法立即感受到,以致於多數人開始沒多久就放棄了,而且堅信沒有人能做到。其一生也因此定調,無法再有突破。 雖然「斷了」,我還是想要繼續寫。雖然內容沒深度,卻能從中學到不少經驗,而每天自我要求,強迫自己在有限的時間內完成更多事,讓生活更有意義。 別人做得到,我一定也能做到!
1 min read