然後呢,兩年前買了一組 GPi Case + 樹莓派 zero W 做遊戲掌機,前陣子再把樹莓派升級成 zero 2 W,可以玩遊戲變多、變得更實用好玩了(中間發生一次 GPi Case 無預警故障,費盡洪荒之力再把它 DIY 修好,詳細歷程寫在這篇文章「GPi Case 維修紀事」),千挑百選找到 SupremeTeam 製作的版本,它是用 Retropie 加上各種魔改手段而成,對它唯一不滿的地方是英文介面,在 2.8 吋 320x240 解析度上閱讀英文介面,實在是頗傷眼力,所以嘗試著把它改成中文介面。
突然意識到,Visual Studio Code 理所當然支援 Windows 平台啊!一定也能在 Windows 平台上這麼玩才對。如果能補足這個部分,那就滿足「一套原始碼,通吃 Windows / macOS / Linux (x86/64/ARM) 全平台」全制霸的目標。在以往所接觸過的領域中,雖然 Python/NodeJS (Javascript) 也做得到,不過 Python / NodeJS 本身並非原生運行,透過即時轉譯的效能比需編譯的 C/C++ 差,「全平台通吃」的程式碼,對於希望原始碼能以原生運行的意義上來說,還是有些不同。
為了攻克「在 Linux 上撰寫的 C/C++ 程式也能在 Windows 上運行」的目標,也就花了點時間研究。本來以為應該不難,沒想到還是繞了好大一圈,又踩了不少坑,所以這部分又值得寫一篇文章來好好抱怨一番,到底坑在哪裡。
九月時工作上接到一項任務,內容是評估某硬體方案的可能性。該硬體設備廠商有提供 Windows 與 Linux 兩種方案讓客戶選擇,為了趕進度,所以直接以熟悉的 Windows 方案使用 C# 進行試作,可惜評估結果不盡人意(硬體問題)。然而在此評估過程中,也讓我意識到 Linux 可能也是商用硬體設備的選項之一,所以在中秋節連假期間,除了吃飯睡覺拉屎看電視打電動逛街人擠人之外,把剩下的時間全都花在學習建置「Linux 環境開發 C/C++」這件事情上了。四天連假結束,算是有點收獲,開篇文章把這些學習心得記錄下來,免得以後很快又忘記。
這篇文章以「在 Linux 環境下開發 MQTT C/C++ Client 應用程式」為目標情境,打造 Linux 環境下相對友善的 C/C++ 開發環境,使用 Linux 版 IDE 工具進行 C/C++ 程式開發。
撰寫「具備用戶介面(User Interface)」的應用程式,對於我這種依賴 IDE 開發工具(Integrated Development Environment,整合開發環境)的碼農來說,就像吃飯喝水那樣的直覺,甚至於忘了第一支 Hello world 的用戶介面是怎麼做出來的。這些年來寫過 Windows、macOS、iOS(iPhone/iPad/Apple Watch/Apple TV)、Android 等平台的應用程式,早期的 Windows CE(PDA 裝置)程式開發也接觸過一段時間。然而,有個地方一直都沒碰觸,對我而言也是未知的領域,那就是 Linux 平台的用戶介面應用程式。
大致說來,每個平台都有一套最知名、最強大、最多人使用、教學資源最豐富的 IDE 工具,例如 Windows 平台有微軟官方的 Visual Studio,macOS 有蘋果官方的 Xcode,Android 平台有 Google 官方的 Android Studio。然而在 Linux 上,似乎就少了一套強而有力、專門針對 Linux 視窗環境的 IDE 工具,所以就一直不清楚,如何在 Linux 上寫一支具有用戶介面的應用程式(這裏不談 Linux 系統的瀏覽器運作 HTML5 網頁)。
前陣子工作上接手一份來自古老時代的程式碼,是用 PyQt4 寫的,功能是提供一個使用者操作介面,讓樹莓派主機透過主板 GPIO 介面去控制幾個周邊設備。原作者早已失聯,不過有留著當時的開發筆記重點。順著考古的遺跡,意外讓我補足這一塊技能,原來透過 Python + Qt,也能輕鬆寫出對應 Linux 桌面版的用戶介面應用程式。
然而,使用 PyQt 開發 Linux 版的用戶介面,依然無法像 Visual Studio、Xcode 那麼方便,中間的過程還是有些需要手動生成操作的步驟,決定開一篇文章來記錄。所以了,若是您對「開發 Linux 環境的 UI 應用」感興趣,或是想知道如何寫出「UI 介面控制樹莓派 GPIO 周邊的應用程式」,可以參考這篇文章的內容。
其實早在一月選舉前,政府已派員至武漢參加病毒研討,在疫情尚未明朗的氛圍中,預先判斷將來演變為大規模人傳人的可能性極大(2019.12.31),更搶在比 CHO...呃..不是,是 WHO 承認疫情擴散之前祭出手段,除了針對從疫區入境的航運人口實施隔離管制,也更早宣布將口罩納入管制醫療用品。嚴禁口罩出口、徵收民間口罩工廠的出貨,全力加開口罩產線,超商限量販售等,一連串管制口罩的大動作,初期一度造成民眾恐慌,導致到處買口罩隊伍大排長龍、多數人買不到口罩、不肖商人囤貨伺機漲價、人人瘋搶口罩等亂象,史稱「口罩之亂」。直到政府祭出鐵腕,宣佈實施獨步全球的「口罩實名購買制」措施,「口罩之亂」才逐漸平息。
雖然也有「快樂擁有神器」的方式,不過,快樂的時光總是短暫,時間到了,總得找好其他備案。有另一款亦稱神級且開源的開發神器:微軟出品的 Visual Studio Code(簡稱 VS Code),它也能做到 PHP 語法自動提示、Debug 斷點調試的功能。雖然 VS Code 是微軟出的,不過這玩意卻很大方的援其他平台,在 Windows、macOS、Linux 都能使用,不像 Visual Studio 總是只出現在 Windows 平台。
嚴格說來,Visual Studio Code 的原始功能只是增強版的文字編輯器,IDE 開發工具(Integrated Development Environment,整合開發環境)常見的Debug 調試與程式碼自動提示功能,必須透過外掛才能實現。也因為外掛,VS Code 可以寫的程式語言也不僅 PHP,業界主流常見的 C/C++/JAVA/Python/Swift... 都有,或許要反過來問:VS Code 不能寫什麼?(這時候,Object-C 默默舉手...)。
說了那麼多,真正的重點是:Visual Studio Code 是免費的!
廢話說完了,進入正題。要讓 Visual Studio Code 支援 PHP 開發的做法很簡單,不過設定的方式怪怪的,一旦忘記就會鬼打牆,所以開一篇文章來紀錄。
近年物件導向程式設計中有個常見的名稱:Delegate(委派)。假設有個主要物件 A ,需透過某物件 B 處理一些事情(例如解壓縮、網路下載...等工作),視 B 處理到某些情況時將狀況回報給 A 之後,A 再進行後續處理,那麼就會設定 B 的委派角色為 A。A 多半是應用程序中主要的畫面,B 則是自定的程序,在開發應用的實例上,類似 B 的角色有很多個在同時運作,按照一般教學的寫法,主畫面 A 就會負責接收一大堆委派結果,程式就會顯得又臭又長。
有在持續關注黑蘋果議題的用戶應該可以觀察到,用黑蘋果的人越來越多了,連某熱門的屋賣場甚至還開設「黑蘋果套餐」來減少用戶選購時的麻煩。這代表安裝黑蘋果的難度越來越低,依 ING 原則選購硬體之後,再找台 OS X 電腦搞定一支 USB 安裝碟,就差不多可以開始啃黑蘋果了。網路上的黑資源越來越多,也不缺我個人寫黑專題,所以現在來換換口味,聊聊目前軟體開發界最夯的話題:Apple Watch 的 APP 開發。
最早大家的猜測是,Apple Watch 的 APP 可能是一個獨立的平台,也有人猜測 Apple Watch APP 可能有專屬的 Watch APP Store,不過直到相關細節正式公開介紹,大家才漸漸得知 Apple Watch 只是 iPhone 的一項附屬型的產品。可是,到底是怎樣的附屬方式呢?其實從開發者的角度,來嘗試開發 Apple Watch APP ,就能很快地理解了。