PlaidML 讓你的 Macbook 也能用內建顯卡加速 Keras 機器學習!

相信很多使用 Macbook 的朋友在做機器學習相關的實驗或學習的時候,對於沒有 CUDA 來協助運算這件事情非常苦惱,因為用純 CPU運算,就算今天你的電腦有 32 核心也比用 GPU 運算來得慢上好幾倍。

而說到 GPU 運算程式設計框架,除了常聽到的,由 NIVDIA 所維護與支持的 CUDA 外,其實還有另外一個,那就是 OpenCL

OpenCL 常出現在 AMD 的顯示卡上,此外,還有 Intel、ARM 等多家廠商皆有硬體支援 OpenCL,而以 Intel 為願算核心(高階機種還有 AMD 獨顯)的 Macbook 也同樣有支援 OpenCL 技術。(編按:2020 新款 Mac 所採用的 M1 核心內建神經網路單元,速度更快)

所以如果想在沒有 CUDA 運算資源的情況下加速的話,顯而易見的,我們要來借用 OpenCL 的能力,在 Mac 上施點魔法啦~

閱讀全文〈PlaidML 讓你的 Macbook 也能用內建顯卡加速 Keras 機器學習!〉

RESTful API 測試很煩,只好動手寫屬於自己的測試了

寫在最前面

嗨,大家好久不見!

距離上次發表新文章已經是好久以前了,主要是開始進入職場上班工作後,回家只想休息打遊戲,一不小心就富奸化了。不過也因為工作的因素,最近累積了不少研究記錄可以來慢慢更新上來。

API 測試

RESTful API 測試在許多後端伺服器軟體工程師是非常常見的一個開發環節,而如何驗證與測試 API 的傳呼結果則是一件令人感到煩躁的事。大部分的人應該都有使用過 Postman 這一個圖形化介面的測試工具,他其實算簡單,而且提供的功能相當多樣,幾乎覆蓋了所有 API 的測試需求。此外,這工具也有提供自動化測試工具的方式。

所以,既然有簡單的測試方式,為什麼不乾脆用他就好,還要自己來寫一個呢?

因為當測試項目多又捨不得關掉頁籤的時候,你就會知道那有多煩躁了…在數十個頁籤中翻找那個先前暫時放著的測試內容…

所以我就想說,既然要這樣翻翻找找或使用他的工具建立一套不太活化的自動測試流程的話,那乾脆就自己來寫一個吧!

閱讀全文〈RESTful API 測試很煩,只好動手寫屬於自己的測試了〉

Node.js 與 Socket.io – 即時聊天室實作:資料庫

經過前兩篇()文章,我們的聊天室現在有了一個可以記憶的小腦袋,不過進過Demo的人大概都會有個疑惑:「說好的紀錄呢?怎麼都是空白的?」

這是因為 Heroku 免費方案會把閒置的伺服器程式切入休眠狀態,當有外部請求時才會重新啟動(這也是為什麼Demo頁面偶爾啟動會很慢的原因),而我們的記憶體資料也會在此時被重置成像新的一樣。

所以,我們不能把資料單單存在記憶體中,我們現在要來把資料放到「資」、「料」、「庫」!

閱讀全文〈Node.js 與 Socket.io – 即時聊天室實作:資料庫〉

老闆!來一個能支援 Socket.io 的 NGINX Reverse Proxy Server 吧!

NGINX 是一個現在相當多人使用的 HTTP 伺服器程式,他能做的事情非常的多,而且重點在於它效率更快更好。但今天這篇文章並不是要來介紹 NGINX 有多好,而是要來帶大家設定 NGINX 的反向代理(Reverse proxy)伺服器,讓你其他不是單純 HTTP 的網站程式(如Node.js)也能夠利用到 NGINX 的眾多好處。

閱讀全文〈老闆!來一個能支援 Socket.io 的 NGINX Reverse Proxy Server 吧!〉

Node.js 與 Socket.io – 即時聊天室實作(二)

在上一篇Node.js 與 Socket.io – 即時聊天室文章,我就假設你看過了也做完了,我們有了一個「超級無敵簡單」的聊天室,但那實在是太簡單了、太陽春了。

身為一個聊天室,它沒有前人的紀錄,也沒有每人專屬的名稱,喔對,還不會紀錄名稱!這真是太令人失望的聊天室,實在是太失望,完全就只是個拿來作為教學用的超級無敵簡單版本。作者到底做了什麼鬼東西啊!

喔等等,作者好像就是我。

好吧,為了盡棄前嫌,我決定來改良改良,增加一些新功能。

閱讀全文〈Node.js 與 Socket.io – 即時聊天室實作(二)〉

Node.js 與 Socket.io – 即時聊天室實作

許久沒有寫文章了(你好像常這樣說欸!),今天要來稍微講講專門用來實作即時通訊的 Node.js 模組 – Socket.io。

Socket.io 其實是一個完整實作 Websocket 的函式庫,他提供更簡單的方式讓開發者可以方便的使用 Websocket 這樣的通訊技術來實作許多應用。

我將以實作一個簡易聊天室作為範例來介紹這一個模組。

閱讀全文〈Node.js 與 Socket.io – 即時聊天室實作〉

Commander,教你如何用 Node.js 開發 CLI 工具!

身為一位 CLI(Command Line Interface, CLI) 控,自幹開發用的輔助工具時當然也要自幹一個屬於自己的 CLI 工具啊!不然怎麼對得起那個常駐在下方的 Terminal 呢?不過自幹工具不是本篇重點,今天是要來跟大家講講 Commander 這一個 Node 模組。

Commander 是一個專門解析啟動程式時所輸入的參數的模組。以我們最常輸入的 npm install 這個指令為例子來說明,npm 是指程式名稱,install則是指要程式執行的動作,這個就是所謂的參數,以 C 語言來說的話大概就是 argv 這個放在 main 括號中的東西了。

閱讀全文〈Commander,教你如何用 Node.js 開發 CLI 工具!〉

GT Pack – 私藏的 Webpack 整合簡化模組。

嗨,大家好久不見。

筆者最近正朝著萬能的全端開發者邁進,而最近遇到了一個棘手的問題,就是使用 Webpack 時的各種麻煩事,所以我與我的好夥伴好朋友 Single Zero 就一起弄了這一個整合包模組,讓我們只要一些基本的設定後,什麼 ES6、Less、樣版引擎啥的都能快速搞定,而且支援在不同需求中的不同設定,然後只需要在專案根目錄下一次 webpack 指令便能根據各自的設定完成打包。

雖然比起全自由的wepback.config.js有些許限制,但個人覺得夠用了 XD

而且因為有了這個模組,我們考試都考100分就不需要再手動安裝和設定一堆有的沒的,設定到腦神經衰落還不會動。

閱讀全文〈GT Pack – 私藏的 Webpack 整合簡化模組。〉

Node.js 做一個 NPM 模組更新或安裝的進度條

前陣子因為專案需求,我需要一個在使用 npm 更新或安裝模組時回推提示的方式。原本的想法是直接透過 Node 呼叫 Shell Script 來做這件事情,等 Shell Script 做完就將視為動作完成。

但這樣其實有缺點,除了回送的無用資訊很多之外,那就是我們無法讓更新的動作被主程式所監視,還有最重要的是,這樣的方式沒有辦法做出進度條!這很重要!更新的 UI 上無法顯示進度條是我無法接受的事!

閱讀全文〈Node.js 做一個 NPM 模組更新或安裝的進度條〉

NodeJS – 為 console.log 加上時間與檔案紀錄。

如果你有開發 Node.js 的經驗,一定相當常運用其內建的 console.log() 來作為 Debug 的方式之一。

而當整個系統完成或上線之後,就比較無法使用這種方式去找後續發生的問題,因為我們不見得能看到系統端終端機中的內容,但若為了這個紀錄功能要多寫一個 function 然後替換掉原本拿來 debug 用的 console.log …這也太麻煩了吧。

幸運的是,JavaScript 允許你用 Override 的方式來覆寫原有的程式,改成你所需要的樣子。

等一下我們就要來覆寫 console.log 這個 function 來為它加入時間戳記以及寫入一個檔案作為紀錄的功能。 閱讀全文〈NodeJS – 為 console.log 加上時間與檔案紀錄。〉