JUCE

[175] 印度軟體外包經驗

幾個月前因應專案需求,將部分工作外包給印度的工程師。花點時間反思,並紀錄下來。 上半年由於承接的軟體專案時程較趕,在台灣短時間內找不到熟悉 JUCE 的開發人員,幾經思量後,決定到 JUCE 官方論壇 尋找外包人力。 題外話。論知名度,JUCE 與 Qt 相差甚遠,與 wxWidgets 也有不小差距,這種情況在台灣尤其明顯。現在(2017)詢問一百個資深的 C++ 工程師,大概不到一個聽過 JUCE。希望過兩年情況有所改善... 「徵工訊息」發出約兩天後,

  • Sam Tsai
    Sam Tsai
5 min read
C++

[153] JUCE Diary #14:Catch Test Framework

Catch 在 C++ 單元測試、自動化測試領域算是新兵。由於設計優良,使用簡便,近來頗受好評。JUCE 內建了單元測試機制,雖然大部分情況下比夠用還多,不過,為了避免落入「固步自封」的工程師死亡陷阱,偶爾還是要看看窗外的世界,弄髒手,動動腦。 JUCE 論壇經常出現高手分享自己的作品,昨天就看到 varx 這個把 Reactive-Extension, RxCpp 導入到 JUCE 的專案,太有才,改天一定要試試。不過,今天的重點不在該專案,原因是我挖了專案原始碼來看,

  • Sam Tsai
    Sam Tsai
4 min read
JUCE

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

前言 C++ namespace 的用意是減少名稱衝突,Objective-C 則是以「加上前贅詞」(「贅」者,多餘、沒有用處。)的方式處理,老實說有點不牢靠。 JUCE 的公開類別置放於 juce:: 命名空間裡。不過,預設情況下由於 JuceHeader.h 引入了 using namespace juce;,因此使用 JUCE 類別不需要加上 juce::。這麼做純粹是為了節省打字時間,並試圖讓「版面」更乾淨,

  • Sam Tsai
    Sam Tsai
3 min read
Programming

[127] 開始玩 Livecoding.tv:JUCE #1

今年的新任務是在 Livecoding.tv 上直播「寫程式」。Handmade Hero 是我的偶像,他的撰碼技巧以及「邊講話邊寫程式」的技能讓我佩服萬分。 初期的規劃是以 JUCE/C++ 為主要內容,最好是能帶到一些 Design Pattern 實務應用。不會特別區分難度,應該是以入門為主。時間長度控制在半小時,試著用三十分鐘講一個主題。Live Coding 的挑戰是沒有辦法後製,遇到問題立即解決,處理不來當機立斷,下回再解。 藉由 Live Coding 來練習口條,

  • Sam Tsai
    Sam Tsai
1 min read
JUCE

[102] JUCE Diary #12 : 答客問:InterprocessConnectionServer

網友在這篇文章問到 InterprocessConnectionServer 與 InterprocessConnection 的使用方式。本文以一簡易程式來說明如何使用這兩個類別。範例程式做的事情如下: 啟動一個 Server 程式監聽網路 Port 52713 啟動一個 Client 程式連接到本機(localhost) Port 52713 連線成功後,Client 會傳送資料到 Server Server 收到資料進行處理 Client 與 Server 皆為 JUCE Console Project,文章內的程式碼皆為片段,完整的程式碼請見文末的

  • Sam Tsai
    Sam Tsai
4 min read
JUCE

[066] JUCE Diary #11: Inter-process Communication

IPC (Inter-process Communication) 指的是兩支程式透過某種方式進行單向或雙向資料傳輸。不同平台有不同的資料傳輸技術,Windows 上使用的是 Named Pipe ,Mac & Linux 則使用 socket。 土法鍊鋼打造 IPC 需要寫不少程式碼,因此,許多有規模的專案都會將其包裝成函式庫,把大量苦工碼藏起來,開放出簡單易用的介面給客人用。有心觀察其內部設計,除 JUCE 外,Chromium 也是不錯的選項。 JUCE 除了有 InterprocessConnection class 把各平台的資料傳輸技術包裝成通用的介面,更進一步把常用的功能包裝成兩個簡單易用的

  • Sam Tsai
    Sam Tsai
2 min read
JUCE

[062] JUCE Diary #10: JUCE and Xamarin

即時處理音訊需要較高的效能,若是要運作在手持裝置上,最好能充份運用其有限的運算資源。撰寫高效能的應用程式,C++ 最適合。正式專案用過 JUCE 後就愛上了她。 最近在評估 Xamarin,想到如果能在 Xamarin 上使用 JUCE 處理效能導向的功能,就太美妙了。 輕輕一搜,果然找到了。底下影片展示了 Xamarin 開發的 Android, iOS app 如何整合 JUCE 寫的 Library,值得一看:

  • Sam Tsai
    Sam Tsai
1 min read
JUCE

[059] JUCE Has New Forum (Finally!)

自從接觸 JUCE 以來,其 Forum 的使用體驗真的很差。所幸,一切在昨天結束了。 JUCE 新的論壇使用 Discourse 開源碼專案。Discourse 是 Stack Overflow 那個 Jeff Atwood 與其他人的傑作,目標是讓傳統論壇站台消失進化,讓世界更文明。 JUCE 新論壇的反應時間更快,瀏覽體驗更好,光這一點就加了一千分不只。不過,「無法取稅每一個人」確實是不變的定理,還是有人對新論壇系統表示強烈不滿(屑)。 速度快,又是

  • Sam Tsai
    Sam Tsai
1 min read
JUCE

[054] JUCE Diary #9: Android app Development

近年來許多專案宣稱使用 Web 技術(JS + CSS + HTML)開發跨平台,特別是 Mobile app (Android and iOS),省時又省力。大概是對 Web 技術不熟悉,因此這樣的工具對我的吸引力極低。 這一年來接觸 JUCE 甚深,由於它宣稱自己跨很大,不只跨桌面(Windows, Mac, Linux),還跨到行動裝置(Android , iOS)去,剛好有需求於是花點時間玩了一下。 官方在 JUCE

  • Sam Tsai
    Sam Tsai
1 min read
JUCE

[049] JUCE Diary #8: Memory Might Leak

先前提到 JUCE 應用程式的初始化區塊之一為 initialise method。程式執行時,在初始化階段有一常見的情境: 一旦某一條件成立或某些條件不成立時需停止執行。 若在 initialise 發現程式必須終止,最直覺的作法是呼叫 systemRequestedQuit。不過,這麼做在 Windows 上會出現 Memory Leak,如下圖: 解決方法是離開 initialise 後再想辦法停止執行,但 initialise 無回傳值(void),故無法以回傳值停止。MessageManager::callAsync 可以在 Main Thread

  • Sam Tsai
    Sam Tsai
1 min read
JUCE

JUCE Diary #4: Pricing Change in v4

去年(2014)底,JUCE 被 ROLI 買了,當時 JUCE 的版本是 v3。今年十一月,伴隨 JUCE v4 的推出,其售價策略有所調整,整體來說,變貴了,而且貴很多。 價格的變化出乎許多人意料,這個討論串可看出眾人有多困惑。 究竟差多少呢?以開發跨平台(Desktop, Android, iOS)的需求來說,價格差了三倍以上! 調整前的售價,不分平台,選擇一次付清而且支援多產品(最貴的方案)

  • Sam Tsai
    Sam Tsai
2 min read