筆記》Windows 安裝 gtk-rs 開發環境

步驟 1:安裝 rustup

步驟 2:安裝 MSYS2

步驟 3:開啟一個「MSYS2 MSYS」shell:

更新套件與資料庫:

$ pacman -Syu

更新套件 :

$ pacman -Su

安裝 GCC toolchain:

$ pacman -S --needed base-devel mingw-w64-x86_64-toolchain

安裝 GTK 3:

$ pacman -S mingw-w64-x86_64-gtk3

步驟 4:編輯 Windows 環境變數:

  • 在使用者變數的 Path 裡加入:C:\msys64\mingw64\bin
  • 在使用者變數新增一個 GTK_LIB_DIR 變數,變數值為:C:\msys64\mingw64\lib
  • 修改完環境變數後,將 Windows 重新啟動。

步驟 5:開啟一個 Windows Terminal 或是 PowerShell:

輸入以下指令添加 target:

PS C:\> rustup target add x86_64-pc-windows-gnu

然後輸入「rustup show」指令查看 target,應該可以看到這兩行:

stable-x86_64-pc-windows-gnu
stable-x86_64-pc-windows-msvc (default)

接著輸入下列指令,把預設的 toolchain 改成 GNU:

PS C:\> rustup default stable-x86_64-pc-windows-gnu

步驟 6:使用 cargo 指令建立一個新專案:

PS C:\> cargo new my-gtk-app
PS C:\> cd my-gtk-app

然後在 Cargo.toml 的 dependencies 裡加入 gtk:

[dependencies]
gtk = "0.14.3"

編譯執行,看看有沒有錯誤訊息:

PS C:\> cargo run

讀書》A Tour of C++ 中文版

《A Tour of C++, 2/e》繁體中文版與簡體中文版

最近把《A Tour of C++, 2/e》中文版重讀了一次,上次讀的時候因為台灣譯本裡的一些翻譯名詞看不太懂(有些名詞既不是台灣傳統上的譯法,也不是中國那邊的譯法),所以最後也沒讀完就丟在一旁了。

最近開始想認真學習一下 Modern C++(因為想用 JUCE 寫跨平台程式 🙂),所以把《A Tour of C++, 2/e》繁體中文版又拿出來讀,並且另外買了簡體中文版,當繁體版看不懂時就翻簡體版來對照著看 XD

《A Tour of C++, 2/e》內容涵蓋了部分 C++20 特性,而且很薄(才兩百多頁),很適合拿來快速理解 Modern C++…(大誤)。嗯,對有 C++98 經驗的人來說,這本應該是不錯的現代 C++ 入門書,對沒什麼程式經驗的人來說,這本書恐怕不易消化 😅(其實我覺得 Bjarne Stroustrup 的書對新手來說都不算友善 XD,個人感想,勿戰)。

談 C++ 語言的書通常都很厚,光是看到那比磚頭還厚的厚度,就沒什麼動力讀下去,這本《A Tour of C++, 2/e》夠薄,拿來入門剛剛好。不過,我認為最好的 C++ 入門書還是《Essential C++》,薄薄一本只有兩百多頁,講述了 C++ 最基本最核心的部分,只可惜《Essential C++》是 1999 年出版的,內容對現在而言已經過時了…

說到《Essential C++》,讓我想到了 Stanley B. Lippman 在《Essential C++》前言裡提到他在迪士尼電影動畫公司工作時,有次被要求用 Perl 重寫一個工具程式,但他不懂 Perl,所以他想找一本 Perl 書籍來抱佛腳,而且那本書不能太厚,因為當時的情況需要快點讓那個 Perl 程式動起來,最後他找了《Learning Perl》(台灣譯本名為:《Perl 學習手冊》)來讀。這次的經驗讓他明白對於想立刻學會並使用 C++ 的人來說,《C++ Primer》過於龐大複雜了,因此他寫了《Essential C++》這本小書。

說到《Learning Perl》,又讓我想起我的第一份正職程式設計工作時的一件事 😅,當時我剛進去工作不到兩個禮拜,第一個任務是要把一本英文字典做成 iOS app,當時的老闆已經有寫好一支程式把字典的純文字檔轉換成他想要的特定格式,他讓我接手修改那支程式,那支程式是用 Objective-C 寫的,我當時研究了程式的內容與特定格式的結構後,發現那支程式的效果不好,因為還需要半人工的方式去修改文字檔,而且無法正確找出所有的格式問題,最後我決定重寫一支程式來處理格式的問題。

一開始我是用 Objective-C 去寫,寫了一堆 NSRegularExpression 😵,過了三個禮拜後,覺得寫 NSRegularExpression 實在太痛苦,而且寫到卡關了,所以決定改用 Perl 來處理格式問題。雖然之前有用 Perl 寫過一些小程式的經驗,但是當時有一陣子沒寫 Perl 了,已經忘光 Perl 怎麼寫,因此趕快重讀了《Perl 學習手冊》(忘記是第五版還是第六版了),用了約四、五天的時間讀了一遍《Perl 學習手冊》,然後開始寫 Perl script 來處理格式問題,後來寫了十幾支 Perl script 才終於解決完格式的問題(一支 script 處理一種格式問題),而且才花了一個多禮拜的時間 😁

雖然格式的問題解決了,但是我後來發現文字檔裡有少數的地方有亂碼(原本的字典純文字檔就有亂碼),結果最後還是得找工讀生拿紙本字典對照著文字檔找出所有的亂碼,並手動修正,噗,這樣一開始就請工讀生直接手動修改格式並修正亂碼不就得了 🙃 …… #這就是人蔘啊

好像越扯越遠了,今天先這樣囉,Bye~

Apple Vision Framework 試玩

這個月幾乎都在玩 Apple 的 Vision Framework,並寫了幾個 Demo app,分別有:

◎ 人臉檢測與 Object 檢測(查看原始碼):

◎ 手部姿勢檢測(查看原始碼):

◎ 手寫數字檢測(查看原始碼):

我覺得電腦視覺真的太好玩了,可以做很多有趣的應用,而且 Apple 已經推出 ARM 版 CPU 的 Mac 電腦了,希望 Apple 也能出一款體積比 Mac mini 還小的 Mac nano,用 ARM Mac 搭配 Vision Framework 與 CoreML 來做應用,應該會很有競爭力吧 (? 🤔 ,而且 macOS 的 GUI 比較容易寫的說(跟 GTK 相比)…

好書推薦:《TinyML|TensorFlow Lite 機器學習》

TinyML: Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers 繁體中文版

最近終於把這本書讀完一遍了,不過還沒嘗試執行書中的範例程式,等有空時再來試試:)

這本書裡用來執行範例程式的硬體開發板有:

  • Arduino Nano 33 BLE Sense
  • SparkFun Edge
  • ST Microelectronics STM32F746G Discovery kit

不過現在 TensorFlow Lite for Microcontrollers 也支援 ESP32 了,所以沒有上述的硬體開發板也沒關係,可以用 ESP32 來試試看。

書開頭的幾章先用「Hello World」範例帶領讀者走一遍完整的開發流程(從建立與訓練模型開始,然後執行程式,再到部署至微控制器),「Hello World」範例的功能其實很簡單,就是模擬正弦 (sin) 信號而已。

之後的章節陸續講解了喚醒詞偵測 (yes/no)、人體偵測、魔杖(手勢) 等功能的程式建構與模型訓練。

最後幾章講了 TensorFlow Lite for Microcontrollers 使用上要注意的地方,還有優化、除錯、移植等相關的技巧,最後還有提到安全與隱私方面的議題。

這本書厲害的地方是:我覺得作者在概念與基礎知識的講解上算是淺顯易懂,所以蠻推薦對 TinyML 有興趣的人來讀讀看這本書。

★ 2021 年 3 月時的補充說明:Raspberry Pi 基金會在 2021 年 1 月時推出了 Raspberry Pi Pico 開發板,而《TinyML|TensorFlow Lite 機器學習》的作者之一 Pete Warden 也在稍後將 TensorFlow Lite Micro 移植到了 Pi Pico 上,Pi Pico 的價格很便宜,而且很容易購買到,所以使用 Pi Pico 來製作 TinyML 應用的原型應該也是不錯的選擇。

好書推薦:《無限的力量》

infinite powers 繁體中文版

俗話說「感情問題一律建議分手」,不,我的建議是「感情問題一律讀微積分」。

就如同 Leonard Mlodinow 在《科學大歷史》裡提到他的父親曾說想到自己跟天上的星星是同樣東西組成的,就會感到安心一樣,想到這個世界的規律能由一條條的數學定律來描述,不也令人感到釋懷了嗎?🙂

切入正題,我最近讀了《無限的力量》這本書,這本書的內容比較像是微積分的發展史,作者並沒有在書中放了一堆數學式子 (謝天謝地!),而是由古希臘開始講起,藉由一則則的歷史故事,來說明「無限」這個概念是如何一步一步的發展成為微積分這門學問,且不時穿插說明微積分在現代都運用在哪些地方,並在最後提到了微積分的未來。

像我這種一題微積分都算不出來的數學白痴,讀這本書時也能讀的津津有味呢!此書大推!

好書推薦:《人工智慧開發實務 – 使用 Swift》

Practical Artificial Intelligence with Swift 繁體中文版

最近看了《人工智慧開發實務 – 使用 Swift》這本書,覺得這本書寫的真不錯。

不像其他有著艱澀數學與演算法的 Machine Learning 書籍,這本書是屬於實戰類型的書,只用了第十章稍微說明了那些可怕的 ML 演算法,其他章節則教你如何使用 Apple 系統內建的 framework 來做電腦視覺 (Vision)、自然語言處理 (Natural Language)、聲音分析 (Sound Analysis),語音識別 (Speech) 等功能,還有如何使用 CreateML 等工具來訓練自己的 ML 模型。

而且這本書提供了大量的範例程式碼,所以可以很容易的把那些功能運用在現有的 App 上。

這本書真的大推呀!👍 👍 👍

減肥人生

因為胖到危及健康了,所以開始騎單車運動,只是我習慣邊騎車邊想事情,所以常常會忘記自己騎到第幾圈了,所以寫了一個 iOS app 幫我自動計數騎了幾圈… XD

Taipei Maps – 台北生活的工具地圖

我寫了一個 Mac 版的地圖 app:Taipei Maps。

這個 app 目前使用了這些資料集:

  • 公共飲水機
  • 自來水直飲臺
  • Taipei Free 熱點
  • 自行車停放區
  • 垃圾清運點位 (垃圾車)
  • 行人清潔箱 (垃圾桶)
  • 台北市公廁
  • 新北市公廁
  • 郵局營業據點

可在地圖上查看這些資料的位置與相關資訊。

程式碼在此:https://github.com/wlmaplab/TaipeiMaps