i'm sam

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

[156] 函數或類別
C++

[156] 函數或類別

先前寫過 C++ 類別的設計手法 [https://goo.gl/kJRPcK],其中一個是「滿足條件才能生成物件」。其實,需求若只是產生 TheTea ,使用函數(Function)即可滿足,有需要寫成類別嗎?本文以此例探討:To class, or not to class. 以函數實作 把先前的 TeaMaker 類別實作貼過來: class TeaMaker { TeaMaker(Tea, Sugar, Ice); TheTea Make(); }; 相應的函數可實作成: TheTea MakeTea(Tea, Sugar, Ice); 同樣是接收三個輸入參數,產生輸出(TheTea),上述函數實作滿足了「當前」的需求。一般來說,呼叫函數不需要先建物件,再呼叫其成員函數,
6 min read
[154] Apple 成就了 App Store 紅海生態?
Apple

[154] Apple 成就了 App Store 紅海生態?

前陣子,曾是開發人員的 Matt Gemmell 這篇〈Damage〉 [https://goo.gl/MoTpES]文章引起不少討論 [https://mjtsai.com/blog/2017/05/04/software-pricing-damage/]。 文中列出幾個 Apple 造成 App Store 生態圈低劣,對開發人員極度不友善但對黑蘋果極度有利的策略。底下截錄並提供我自己的看法: > Target the largest customer base, so they get 30% of the biggest potential income. That means selling at a low price, because
5 min read
[153] JUCE Diary #14:Catch Test Framework
C++

[153] JUCE Diary #14:Catch Test Framework

Catch [https://github.com/philsquared/Catch] 在 C++ 單元測試、自動化測試領域算是新兵。由於設計優良,使用簡便,近來頗受好評。JUCE 內建了單元測試機制 [https://www.juce.com/doc/classUnitTest] ,雖然大部分情況下比夠用還多,不過,為了避免落入「固步自封」的工程師死亡陷阱,偶爾還是要看看窗外的世界,弄髒手,動動腦。 JUCE 論壇經常出現高手分享自己的作品,昨天就看到 varx [https://forum.juce.com/t/varx-reactive-extensions-rx-for-juce/22537] 這個把 Reactive-Extension, RxCpp [https://github.com/Reactive-Extensions/RxCpp] 導入到 JUCE
4 min read
[152] Memory #9: 專一辦休學回去唸高中是正解?
memory

[152] Memory #9: 專一辦休學回去唸高中是正解?

來台北唸五專,一到三年級住宿舍(四年級不能住,有故事以後再說)。專一上住 504 房,同寢室四位學長,都用功型的,結果來了一位存心要玩的學弟... 印象中,第一星期還沒有過完,其中一位四年級學長語重深長的對著我說:「學弟,現在休學回去唸高中還來得及,五專的未來的出路不是很好,你要想清楚...」 什麼情況?當時我有些納悶,追問他為什麼這麼想。大概只記得: > 這間五專已經不像十幾二十年前那麼權威,學生競爭力不如以往,倒不如待在高中唸三年,打好理論基礎,未來攻讀碩、博士,再朝有興趣的領域發展。 當時壓根兒不會想回去唸高中,在台北沒人管我,而且人家說五專畢業後即可進入企業任職,早一點賺錢養活自己。要升學也有管道,應該不至於像學長說得那麼糟糕吧? 現在回想起來,如果當年留在嘉義,發展肯定會跟現在不同,至於是更好或更糟,誰說得準呢? 後來五專唸得不好,我對電子類,尤其是理論型的課提不起勁,雖然多次發奮圖強,最後皆以失敗收場。唯二能該提起興趣的,大概是計概跟體育課了吧。 記得那年電子學,我刻意坐在最前排,打算專心上課,
2 min read
[151] Memory #8: 第一個程式作業是挫折
memory

[151] Memory #8: 第一個程式作業是挫折

專二學過兩個程式語言——C and Pascal。記得那時期末考 Pascal 是用紙筆寫程式,不是上機考,那時不覺得瞎,現在回想起來真的是蝦小! 之後計概主修 C 語言,當時開發工具是 Turbo C。老師出的第一個作業讓我印象深刻,不是因為太難或很有啟發性,而是其實很簡單,但當時的我想破頭也寫不出最佳解。反觀同住宿舍的同學不到一小時就弄好了。當時的我受挫很深,差點對程式設計失去興趣。 > 那道題我記得是用巢狀 for loop 來解,好像是給定一個數字代表矩陣長度,然後由 1 開始計數,填滿矩陣後印出至螢幕。是的,就這麼簡單,當時我的竟然沒想到要用兩個 for loop 來解題! 所幸後來漸入佳境,期末作業是寫五子棋,雖然完成度不高,但過程體會到程式設計的樂趣,也為此種下軟體工程種子。記得當時老師要我們試著讓人跟電腦下棋,也就是「人工智慧」,當時太嫩,沒搞出什麼毛。 其他同學有人寫
1 min read
[150] Memory #7: 抽菸是一次十根才夠
memory

[150] Memory #7: 抽菸是一次十根才夠

從小,我是公認的「乖孩子」。成績好,又會幫忙家裡的事。但眾人萬萬沒想到,其實我骨子裡的反動因子一點也不少。有一天,被同學兼好友背叛,經歷了落地以來最慘的一次教訓... 小學五、六年級,有幾次跟班上幾個死黨學大人抽菸,也不是真的抽,就是吸一口然後嗆到,玩幾次後就不太有興趣了。 班上有位早熟成績又好的班花,不少人對她有好感,我也是其中之一。後來還因為她跟死黨翻臉,不相往來。關係惡化到最後,他竟然把我們一起抽菸的事告訴叔叔,然後就爆開來了... 記得那天下午,我在家看電視,老爸也在。叔叔突然來訪,我說有事要跟同學出去玩,結果叔叔把我攔住,說有事要跟我說。他跟我爸說我在學校抽菸,問我是不是真有其事。我承認,然後就被跪下了。 印象最深的一幕是,一輪毒打後,老爸拆開一包黃長壽(那時好像一包二十元的樣子),把十幾根香菸往我嘴裡塞,然後點火,要我大口吸。乾,是真的很難受,心理跟生理都難受。忘了最後如何「脫身」,總之是人生難忘的體驗。 這件事牽連了住隔壁的兒時摯友,真是過意不去。
2 min read
[149] Memory #6: 暗戀是苦甜滲半
memory

[149] Memory #6: 暗戀是苦甜滲半

「為什麼放牛班的女孩那麼美?」,這個問題困擾著國中時期的我。 我是一個「內斂」的男孩,一直到畢業,班上沒有人知道(或者是我不知道其他人知道)我暗戀「放牛班」的那個女孩。 「升學班」與「放牛班」位於不同大樓,兩棟大樓平行而立,我跟心儀的女孩同一年級,她的教室在隔壁大樓同層樓,同一個區塊。因此,要補捉到她的身影不是件太難的事。 有一回,對面棟幾位女孩打掃時間竟玩起相互潑水的遊戲,「夏天+學生制服+潑水」...。很自然地,升學班這邊窗戶佔滿了整排「書呆子」爭相目睹這美好風景。我的她也在玩水耶... 有時候,我會藉故在「正常」(升學班要留下來課後輔導)下課時間到「放牛班」必經路線等她,只為一睹女孩風采。有一次,等著等著,女孩來了,天上卻倒下了一盆髒水——愛惡作劇的同班同學故意整我,當時,真糗! 我就這麼默默注意著女孩,一直到畢業前夕...有一天,決定打電話給她—
2 min read
[148] 在傳統的 Desktop app 裡呼叫 UWP API
Windows 10

[148] 在傳統的 Desktop app 裡呼叫 UWP API

緣起 前陣子有個專案需要在 Windows 10 的環境用程式去控制 Bluetooth(藍牙)Radio 開關。專案初期評估此功能屬低技術門檻,應有現成的 Windows API 可以用。不過,事實證明我太天真了。最後是利用 UWP API 來解決,細節我會另撰文說明,本章主要說如何在 Desktop app 裡呼叫 UWP API。 Desktop app 能夠使用 UWP API 嗎? 答案是肯定的。一直以來,微軟對於軟體開發介面的設計態度是儘可能保持往前相容,這麼做對開發者友善,這是優點。缺點是包袱多,走不快。這方面微軟的「取捨」做得不錯。 不過,不是所有的 UWP API 都能被 Desktop app
3 min read
[147] Memory #5: 英文課
memory

[147] Memory #5: 英文課

我國一(精確一點應該是國一入學前的新生輔導課)開始學 ABCDEFG,之後對英文課印象最深的一幕是:英文老師出了一個當時課本沒教的題目(不算太難的課外題),全班問了一輪(第一輪我沒想到答案),連公認最聰明的同學也答不出來。 後來我想到了答案,由於不太肯定便沒有主動舉手。英文老師似乎看到我欲言又止的模樣,要我到台上寫答案。於是,我在黑板上填了 whom (關係代名詞,受格)。被英文老師稱讚後,全身輕飄飄,後面發生什麼事,我也不記得了。 -------------------------------------------------------------------------------- 關於「公認最聰明的同班同學」,他一直是我的競爭對手(良性競爭)。我國中畢業便到台北唸書,較少回南部。幾年後老弟告訴我,我輩全校第一名畢業的同學,智商高人一等的他,竟然出車禍往生了... 這麼厲害又努力的人(我看過他那讀到破爛的參考書,那不是常人做得到的),前途無可限量,沒想到...唉,可惜。
1 min read
[146] Memory #4: 補習是為了退步
memory

[146] Memory #4: 補習是為了退步

我家務農,國中時幾乎每天下課以及假日都要到田裡幫忙,記得幾次跟老爸說想跟同學去玩,他常回:「翅膀硬了,要飛了嗎?(台語)」。除了沒時間,家裡也沒閒錢讓我補習。而且,不補習成績維持班上前五,全校前十,缺乏補習的動機。 忘了是國二還是國三,我媽突然問我要不要補數學。我沒多想,就說好啊。便跟同村另一位同學,一個禮拜一次,下課後騎腳踏車到鎮上的數學老師家補了一個月數學。沒想到,之後的那次段考成績反而大幅退步,證明我與補習班無緣。至於退步的原因呢,我想應該跟課後到遊樂場打幾場快打旋風才回家沒太大關係吧? 印象中,我在家也不太看書。主要是上課聽老師說,自習時用一點心,就差不多了。拜託,幫忙家裡的農事也很費體力的耶,再加上以前的卡通那麼好看,誰在家還在唸書啊!
1 min read
[145] Memory #3: 得意的數學成績
memory

[145] Memory #3: 得意的數學成績

國中時,有一次數學段考題目同學都覺得難,但我考完蠻有自信能拿高分。幾天後成績發佈,老師把考卷發下來讓同學自行檢查,我才拿了 67 分左右,雖然失望,但班上「最聰明」的同學也沒考好,稍稍減緩了失落感... 無意間又看了考卷一眼,「咦?老師好像漏加了 30 分!」,再三確認無誤後,鼓起勇氣走到黑板前請老師「定奪」,確定我只錯了一題,改正後分數是 97 分!印象中,我走回位子上時,嘴角怎麼也無法停止上揚... ...一直到下一次段考,數學老師說,分數跟上一次段考比,倒退一分打一下屁屁。那一次,我是真的,真的只拿了六十幾分,被修理了三十幾下。老師很狠,要班上「最聰明」的同學操刀,打到十幾下我受不了,要求「分期付款」,剩下的明天再還。 先苦後甘,先甘後苦。蔡童得馬,焉知非禍 Orz...
1 min read
[144] Memory #2: 成績優秀的鄉下男孩?
memory

[144] Memory #2: 成績優秀的鄉下男孩?

我畢業於嘉義小鎮裡的某國中,成績還算優秀。輕鬆考進嘉中,不過該屆最低錄取分數低到讓人不敢相信那是「第一志願」。後來到了台北唸五專,全班四十幾位同學只有我幹這「傻」事。 北五專沒考上第一志願的第一志願「電機科」,只報到了「電子科」。有人說北部競爭激烈,初比拼,果然厲害。依我的程度,若報名北部高中聯招,大概考不上前三志願吧。 「唸五專」這事,事後證明確實是悲劇,我一手造成的悲劇。直到現在,我依然在想:「當初要是好好唸書,或許就...」 不過,這唸頭不會持續太久,我還要快樂地寫程式、玩電腦、搞技術,那那麼多時間後悔啊。 Cover: https://unsplash.com/?photo=h4Zsa61xJes
1 min read
[143] Memory #1: 五學分的物理期未不考
memory

[143] Memory #1: 五學分的物理期未不考

一個五專唸了快六年沒畢業的魯蛇,時不時回想起當年做的「蠢事」... 五專電子科二年級有一門五學分物理課,上下學期,共十學分。我重修了三次,還是被當。而我知道原因——「懶惰,提不起勁」。 四年級,第三次重修物理的期末考,外面下著傾盆大雨,早該出門應試的魯蛇,依舊躺在分租的雅房床上,想著:「馬的,排在第一堂考物理...(又睡著了)」 「愚蠢至極!」,現在的我回想著。看了這部影片勾起的回憶: Cover Image: https://unsplash.com/?photo=sodlELbrZJk
1 min read
[142] JUCE 5 以及新授權模式
JUCE

[142] JUCE 5 以及新授權模式

昨天收到 JUCE 5(目前的版本是 4.3.1) 即將於下月推出的通知信,同時公佈新的授權模式 [http://mailchi.mp/juce/juce-5-sneak-peek-on-the-licensing-options-909081] 。下表是第二個版本,JUCE team 在第一個版本發出後收到不少使用者回饋,並「順應民意」在 24 小時內做出了修改: JUCE Indie 變便宜但加上營收上限 原本的 JUCE 4 授權分兩個層級:JUCE Indie , JUCE Pro。兩者的授權費用一模一樣(月繳 $49 鎂),但 JUCE Pro 可用來開發 Mobile app(Android/iOS)。新的授權把 JUCE Indie 的費用降至月繳
3 min read
[141] Microsoft Hardware Dev Center 中加入 CHID 並發佈至 Windows Update
Microsoft

[141] Microsoft Hardware Dev Center 中加入 CHID 並發佈至 Windows Update

先前寫過 Sysdev 上在通過認證的驅動程式加上 CHID 的作法 [https://samtsai.org/2016/06/24/096-chid-for-whql-driver-distribution/],隨著 Microsoft 慢慢把大家趕到新的 Microsoft Hardware Dev Center 後,那篇文章的內容也過時了。剛好前陣子幫客戶送認新的案子,來交代一下新站的「申報」方式。 現在登入到 Sysdev [https://sysdev.microsoft.com/hardware] 首頁會看到一個警告框,明示今年三月底大概要舉家搬到 Microsoft Hardware Dev Center(MHDC) 去了: EV Code Signing Certificate 記得第一次在新的 MHDC 認證驅動程式時,因為去年公告的 Code Signing
4 min read
[140] 不要浪費時間在手遊(二)
rant

[140] 不要浪費時間在手遊(二)

發洩一下。 你沒有「時間太多的問題」,你的問題是「腦袋有個洞,而且不知道要補起來!」 手遊智障率沒有百分百,卻高得嚇人,差不多是十個手遊之人九個腦袋有洞的程度。 不是每一個手遊都不好,但市面上多數大打廣告的產品大概都碰不得,特別是那些要你不斷「灌溉」時間的無良遊戲。 在路上遇到有人不燒金紙卻燒新台幣,大把大把的新台幣往火堆裡扔,你會覺得這人腦袋有問題,錢太多也不用這樣吧,神經病。那就對了,沉迷手遊差不多就是這樣。不懂得把握寶貴的時間,到頭來獲得了什麼? 「時間就是金錢」、「寸金難買寸光陰」,「手遊中人」消磨時間等於在燒錢,看起來燒得很快樂,我卻覺得很愚蠢。 再說一次,你沒有「時間太多的問題」,所以根本不需要「消磨時間」。覺得我錯了?那表示你生病了。有病要去看醫生,早期發現早期治療,還有救。真的,為了你的下半生,趕快去掛號。精神科。
1 min read
[139] JUCE Diary #13:C++ namespace 的必要
JUCE

[139] JUCE Diary #13:C++ namespace 的必要

前言 C++ namespace [http://en.cppreference.com/w/cpp/language/namespace] 的用意是減少名稱衝突,Objective-C 則是以「加上前贅詞」(「贅」者,多餘、沒有用處。)的方式處理,老實說有點不牢靠。 JUCE 的公開類別置放於 juce:: 命名空間裡。不過,預設情況下由於 JuceHeader.h 引入了 using namespace juce;,因此使用 JUCE 類別不需要加上 juce:: 。這麼做純粹是為了節省打字時間,並試圖讓「版面」更乾淨,但不應視為「最佳實務」。這個預設行為可以透過定義 DONT_SET_USING_JUCE_NAMESPACE=1
3 min read
[138] Visual Studio 2017, 寫在安裝前...
Visual Studio

[138] Visual Studio 2017, 寫在安裝前...

每當有新版本的 Visual Studio [https://blogs.msdn.microsoft.com/vcblog/2017/03/07/visual-studio-2017-for-c-developers-you-will-love-it/] 推出,我會盡量過濾不必要的「雜訊」,把焦點放在 C++ 以及 IDE 增強的功能。「地表最強」前些天釋出正式版,無法在第一時間安裝,原因是: > Visual Studio 2017 推出正式版,嗯... pic.twitter.com/gIN72Zxri8 [https://t.co/gIN72Zxri8] — sam (@mhtx) March 8, 2017 [https://twitter.com/mhtx/status/839360038141587456]
3 min read