0%

開發程式的過程中最常做的事就是編譯、運行、看結果,若結果不符預期,對原始碼進行修改後再執行一樣的步驟直到運作正確為止,一來一回著實耗費工程師不少寶貴時間。此外,修改代碼時還需要注意不要影響到其它地方的程式碼運行,若因此而產生錯誤就要花更多時間修改,是一種維護成本。長時間下來,這樣的程式碼難免成為所謂的「遺毒」。自動化測試這時候就能派上用場,自動化測試是解決這個問題的一種方法,也是最根本的方法,讓電腦代替人工進行對 Codebase 的測試,除了有省時省力的好處,同時也是降低維護成本的關鍵。

閱讀全文 »

當我在學 Design Pattern 時,請教前輩:「抽象是什麼?」對方熱心的一陣瘋狂輸出解釋並舉些範例,我的心中最後冒出一個想法:「聽起來好抽象。」同時依然無法體會抽象的含義,這便是我的親身經歷。就是這麼奇怪,我知道什麼場景可以用這個詞,但背後含意卻不清楚。為了徹底弄懂「抽象」的含義,特別寫成文章強迫自己去弄懂「抽象」的意思。

閱讀全文 »

單位轉換是多數系統中會碰到的課題,單純兩個單位之間的轉換還算容易,而多個單位的轉換就有點困難。以「速度」來說,在 m/s, mph 與 km/h 等數種單位之間互相轉換,排列組合就多達九種以上;而「貨幣」幾乎是每一個國家一種單位,需要在更多單位之間做轉換。如何寫出易於維護可擴展的單位轉換程式碼是非常重要的,這篇文章帶領讀者從數學角度出發,一步步推導出單位轉換公式並將其化為最簡。

閱讀全文 »

如果 WebSocket 伺服器頻繁向客戶端發送訊息,是否會影響客戶端的請求?是否應該使用多個 WebSocket 連接來分開數據流量?所以我用 Golang 來做這個場景的基準測試。最後,讓我來和大家分享一下這個結果。

閱讀全文 »

Prometheus 是監控與告警系統的工具集,將數據以時間序列的格式存在 TSDB (Time Series Database) 中,並提供 PromQL 來對資料做查詢。histogram_quantile 為其中一個聚合函式,讓我們能夠透過 histogram 類型的 metric 推算出指定的百分位數所對應的值,應用更靈活。在解讀數據之前,個人認為要先了解數據是如何得到的,因此這篇文章紀錄 histogram_quantile 的演算法原理。

閱讀全文 »

跨平台是一種趨勢,但也造成開發上許多不便之處。例如:有些服務 (Server) 只能運行在 Windows 環境,而對應的用戶端 (Client) 開發被要求在 Linux 環境。這種情況下,可能會被較多人採用的是 VM 的技術,用以建置這樣的開發環境。得益於 Windows 近年來推出的 WSL2,使虛擬化技術更進一步,成為一種解決方案,因此這篇文章將記錄如何安裝 WSL2 並搭配 VS Code 在 Windows 上進行 Linux 應用開發。

閱讀全文 »

若要撰寫與 NFC 讀取相關的應用,需要先了解對應的 Tag 內存使用方式,這篇文章會以市面上常見的 NFC 晶片 NTAG213 來做說明,透過範例解讀讓讀者更容易理解 Datasheet 內的敘述。

閱讀全文 »

RFID (Radio Frequency IDentification) 是一種身份識別技術,採用無線通訊對目標標籤進行識別與讀寫;NFC (Near-field communication) 算是 RFID 的一種應用情境,但其通訊距離較短,適合用在注重安全性的應用上,例如:電子支付等。NDEF (NFC Data Exchange Format) 為 NFC 的主要資料格式,使 NFC 標籤 (Tag) 與讀取器 (Reader) 不會受到廠商的限制。這篇文章主要舉例說明如何解讀 NDEF。

閱讀全文 »

Git 起手式中很重要的一件事就是設定作者資訊,因為不同的專案想要顯示的作者資訊可能會想要不同。例如:自己的專案當然就是以個人的 E-Mail 作為作者資訊,但公司的專案可能就會需要以公司的 E-Mail 來顯示。這裡記錄如何設定預設作者資訊、特定路徑預設的作者資訊、單一 Repo 作者資訊。

閱讀全文 »

一著名的強化學習演算法為 Q Learning,可以這樣比喻它學習的方式:小孩對世界充滿了好奇並探索時,會觀察父母的表情來判斷當下的行為是好或壞,或者做什麼事會得到糖果或被懲罰,再藉由這些過去的經驗得到更多獎勵。此篇文章藉由 Q Learning 的想法來實現 AI 自走迷宮,透過簡短的程式讓 Q Learning 的學習步驟具象化,非常適合已先自行閱讀 Q Learning 演算法相關文章但頭腦還處於混沌、難以想像 Q Learning 實際運作的讀者。

閱讀全文 »