C++ [253] 那一年,我與 JUCE 相遇 公司開業以來最大的軟體開發案,在評估不到兩個禮拜就決定以 JUCE 做為主要開發工具,這風險不低吶(老大說他不懂,由我全權決定)。難道是梁靜茹給的「勇氣」?
JUCE [234] 新版本 JUCE 5.4 釋出 JUCE 最新版 5.4 今日釋出,正式支援 macOS 10.14 Mojave and iOS 12。這個版本也支援 Windows hiDPI,還有 per-monitor DPI-aware 讓 JUCE 應用程式隨著螢幕的 DPI 動態調整其大小。
JUCE Featured [231] 更多 JUCE 的五四三 接觸 JUCE 約莫四年,對 JUCE 有一些心得,但不敢說摸得透徹,僅就一些使用經驗以及對於 JUCE 這個專案、公司,以及創辦人的側面觀察提出我的心得。
JUCE [175] 印度軟體外包經驗 幾個月前因應專案需求,將部分工作外包給印度的工程師。花點時間反思,並紀錄下來。 上半年由於承接的軟體專案時程較趕,在台灣短時間內找不到熟悉 JUCE [https://juce.com/] 的開發人員,幾經思量後,決定到 JUCE 官方論壇 [https://forum.juce.com/c/juce-jobs] 尋找外包人力。 [https://imgur.com/E8DMvax]題外話。論知名度,JUCE [https://juce.com/] 與 Qt [https://www.qt.io/] 相差甚遠,與 wxWidgets [https://www.wxwidgets.org/] 也有不小差距,這種情況在台灣尤其明顯。現在(2017)詢問一百個資深的
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
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 的費用降至月繳
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
JUCE [135] Livecoding.tv: JUCE #6 應觀眾要求改用破英文面對。 這集示範如何使用 juce::DrawableButton [https://www.juce.com/doc/classDrawableButton] class 來顯示圖文合併的按鈕。另外用到了 juce::Array [https://www.juce.com/doc/classArray] 來實作載入 SVG 圖檔的函數。
JUCE [134] Livecoding.tv: JUCE #5 在 Facebook Live 直播幾集,發覺受眾跟 Livecoding.tv 上的差很多。依我少得可憐的朋友來看,臉書直播的對象多為台灣人,而且多為圈外人。而 Livecoding.tv 的屬性很明確就是技術類,出沒人士多以英語系為主。 接下來我希望 Facebook Live 以及 Livecoding.tv 做不同的主題,看看反應如何。
LiveCoding.tv [132] Livecoding.tv: JUCE #4 前天直播時犯了新手錯誤,加上沒注意到 Livecoding.tv 站務人員的大聲呼喊,五十分鐘的直播報銷了。昨天針對同一個主題(JUCE Unit Test Framework)又做了一次。 沒想到直播中途有人提問,最後應觀眾要求改用「破英文」說明 JUCE Unit Test Framework... (事後聽發現紅軸機械鍵盤的聲音太大了)
Programming [127] 開始玩 Livecoding.tv:JUCE #1 今年的新任務是在 Livecoding.tv 上直播「寫程式」。Handmade Hero [https://www.youtube.com/channel/UCaTznQhurW5AaiYPbhEA-KA] 是我的偶像,他的撰碼技巧以及「邊講話邊寫程式」的技能讓我佩服萬分。 初期的規劃是以 JUCE/C++ 為主要內容,最好是能帶到一些 Design Pattern 實務應用。不會特別區分難度,應該是以入門為主。時間長度控制在半小時,試著用三十分鐘講一個主題。Live Coding 的挑戰是沒有辦法後製,遇到問題立即解決,處理不來當機立斷,下回再解。 藉由 Live Coding 來練習口條,同時尋找未來課程的靈感。這對我是全新的體驗,前途不明,期許至少撐個十集。
JUCE [102] JUCE Diary #12 : 答客問:InterprocessConnectionServer 網友在這篇文章 [https://samtsai.org/2016/05/07/066-juce-diary-11-inter-process-communication/]問到 InterprocessConnectionServer 與 InterprocessConnection 的使用方式。本文以一簡易程式來說明如何使用這兩個類別。範例程式做的事情如下: 1. 啟動一個 Server 程式監聽網路 Port 52713 2. 啟動一個 Client 程式連接到本機(localhost) Port 52713 3. 連線成功後,Client 會傳送資料到 Server 4. Server 收到資料進行處理 Client 與 Server 皆為 JUCE Console Project,文章內的程式碼皆為片段,完整的程式碼請見文末的 Gist。由於只是示範,故省略許多錯誤判斷,請多留意。 Server-side:
JUCE [066] JUCE Diary #11: Inter-process Communication IPC (Inter-process Communication [https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx] ) 指的是兩支程式透過某種方式進行單向或雙向資料傳輸。不同平台有不同的資料傳輸技術,Windows 上使用的是 Named Pipe [https://msdn.microsoft.com/en-us/library/windows/desktop/aa365590(v=vs.85).aspx] ,Mac & Linux 則使用 socket。 土法鍊鋼打造 IPC 需要寫不少程式碼,因此,許多有規模的專案都會將其包裝成函式庫,把大量苦工碼藏起來,開放出簡單易用的介面給客人用。有心觀察其內部設計,除 JUCE
JUCE [062] JUCE Diary #10: JUCE and Xamarin 即時處理音訊需要較高的效能,若是要運作在手持裝置上,最好能充份運用其有限的運算資源。撰寫高效能的應用程式,C++ 最適合。正式專案用過 JUCE [https://www.juce.com/] 後就愛上了她。 最近在評估 Xamarin [https://www.xamarin.com/],想到如果能在 Xamarin 上使用 JUCE 處理效能導向的功能,就太美妙了。 輕輕一搜,果然找到了。底下影片展示了 Xamarin 開發的 Android, iOS app 如何整合 JUCE 寫的 Library,值得一看:
JUCE [059] JUCE Has New Forum (Finally!) 自從接觸 JUCE 以來,其 Forum 的使用體驗真的很差。所幸,一切在昨天結束了。 JUCE 新的論壇 [http://forum.juce.com/]使用 Discourse [https://www.discourse.org/] 開源碼專案。Discourse 是 Stack Overflow 那個 Jeff Atwood [http://blog.codinghorror.com/] 與其他人的傑作,目標是讓傳統論壇站台消失進化,讓世界更文明。 JUCE 新論壇的反應時間更快,瀏覽體驗更好,光這一點就加了一千分不只。不過,「無法取稅每一個人」確實是不變的定理,還是有人對新論壇系統表示強烈不滿(屑) [http://forum.juce.com/t/new-forum-opinion/
JUCE [058] JUCE Summit 2015 影片集 去年的 JUCE Summit 2015 錄影放出來 [https://www.youtube.com/results?search_query=JUCE+Summit+2015] ,雖不及原本的期待,卻也學到了不少。底下整理幾個我覺得值得一看的影片,附上相關資源。 Developing Graphical User Interfaces with JUCE 由 Julian Storer 本人講解 JUCE GUI 的基本架構,包含了重要 GUI Class 說明,以及如何處理鍵盤與滑鼠事件等。 Obsessive Coding Disorder 也是 Julian Storer(JUCE Founder),提出幾個 JUCE C++ 程式碼的「標準」
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
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(); }); 上面程式碼寫在
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