MQTT用戶端入門 - 六、透過NB-IoT電信模組發送MQTT訊息,以Python和PHP為例

NB-IoT 或 LTE-M 都是 3GPP 電信組織針對 IoT 應用制訂的低功耗廣域無線電技術(LPWAN)。NB-IoT 資料透過 LTE/4G 電信網路傳遞。簡單說就是和 LTE/4G 共用基地台。你的手機收得到 LTE/4G 訊號的地方,你的 IoT 裝置就能使用 NB-IoT 電信模組發送資料。而 NB-IoT 模組也可以直接插一般 LTE/4G SIM 卡使用,只是資費比 NB-IoT 貴。

我在前公司接觸過兩家廠商的 NB-IoT 模組,一為 u-blox 的 SARA-N/SARA-R4系列,另一為 SIMCOM 的 SIM7000系列。因為是公司產品,不是我的著作權,所以不能公開程式碼。但可以說使用經驗,以及如何透過 NB-IoT 模組的 AT 指令發送原始的 MQTT 封包。

MQTT用戶端入門 - 五、.NET/C# 用戶端程式設計

.NET 平台可以使用套件 System.Net.Mqtt 設計 MQTT 用戶端程式。從套件的名稱空間可知,這是 .NET 平台正式的 MQTT 套件。由微軟旗下的 xamarin 團隊負責開發,專案托管於 System.Net.Mqtt 專案

MQTT 概觀請看 一、在 Debian 8 安裝 mosquitto

本文範例使用 C# 語言撰寫。並且說明三點使用須知:

  1. client ID
  2. 同步方法 Connect
  3. 分別主題處理方法

C# 的 this 參數修飾字與 extension method 說明

朋友前兩天問了個 C# 語法問題:

問個蠢問題

`public static byte[] xxxxxxxx(this short x)`

這種場合this的用意是甚麼?

第一眼,我的想法是「很像 Python 的語法」。

事實上,打從 C++ 開始,我用過的 OOPL 的 method call ,其隱含的意義都是 method(this) 。 表面上,我們寫成 個體.method() ,但實際上,編譯器是弄成 method(個體) 。「個體」 是函數方法隱含的第一個參數。因為這樣,這個函數才知道操作對象是哪個東西。

CommonGateway HTML公用函數與預設首頁

CommonGateway 是我多年前設計的迷你框架。我最初用它實作 RESTful API 項目,並沒有放太多用於網頁設計的內容。最近兩年用它設計一些網站專案。為了方便工作,增加了兩項關於網頁設計的功能:

  • HTML 公用函數
  • 預設首頁控制項

CommonGateway Authorize 認證註記功能教學

多年前,我寫了一個 PHP 框架 CommonGateway。我一直都用這個迷你框架實作 RESTful API 。只不過,以往都是用在區網內專案,或者 OpenData/OpenAPI 的案子,所以一直都沒想過用戶認證授權的功能。

直到去年,我接了一個案子。案子要求用戶經認證授權後才能存取 API。所以我參考之前使用 ASP.NET Core 的經驗,為 CommonGateway 增加了一個 @authorize 的註記,用於註記控制項或控制項方法是否要求用戶授權。

本文說明以 CommonGateway 框架設計 RESTful API 或網站時,如何使用認證授權功能。

學習 ECMAScript/JavaScript 6 - Promise 學習六步

Promise 是 ECMAScript 6 訂出的語言規範,用於延遲運算 (deferring) 的場合。 正式說明太難解釋了,所以我根據這兩年的使用經驗,決定換一種比較白話的講法。 ECMAScript 6 的 Promise 就是一種跳躍語法(goto),但不會執行到它這一行就立即跳躍,而是先上個標記,延至程式區塊結束才跳躍。 Promise 是延遲式跳躍。

雖然現在年輕人可能從來沒用過跳躍(goto) ,但應該不妨礙各位理解跳躍是什麼。 就連 JavaScript 也保留了一部份跳躍語法,那就是 label

本文將按下列六步,逐步說明 Promise 的使用概念與實例:

  1. Promise 建構式必須有一個執行者引數(executor)。
  2. Promise 建構式的 executor 可接受兩個引數,分別表示 then 和 catch 兩個跳躍點的名稱。
  3. Promise 標記時會保存指定的狀態內容。
  4. then/catch 串接實現非同步工作的同步化,且簡化程式的巢狀結構深度。
  5. Promise.all 可以一次收集多個 promise 的結果。
  6. 用函數包裝 Promise ,提高重用性。

SQL Datatypes 相容性整理

我只整理數值、序號、文字和日期這四種類型。至於 BINARY, BIT, MONEY, 地理位置, XML 等通用性太低的類型,則不使用。

下列是個人使用的資料庫系統,按個人喜好程度排列:

  • SQLite 3 (sqlite)
  • PostgreSQL 9.6 或更新版本 (pgsql)
  • SQL Server 2019 或更新版本 (mssql)
  • MariaDB 10.3 或更新版本 (mysql)

近日開始放置 Google AdSense 廣告

近日開始放置 Google AdSense 廣告。在文章頂端以及結尾處,各放一個廣告。

文章的標籤也做了調整,現在標籤是用 google adsense 搜尋。

希望可以彌補我的 domain name 註冊費。

K島歪串日常:「轉生成為史萊姆」論貨幣

關於我轉生變成史萊姆這檔事》是一套日本輕小說,並有動畫與漫畫改編。

故事中有個由矮人所建立的武裝大國德瓦崗,由於矮人擅長礦業和工藝品製造,所以矮人王國所鑄造的矮人金幣純度足,還有特殊魔法附上的防偽功能,這功能同時確保金幣外觀長久不損壞。世界諸國自古以來就以矮人金幣作為國際上貿易使用的貨幣。

主角建立的新興國家,因為主角推導了許多新興事業和技術,財富快速增長,漸漸成為世界的經濟中心。由於市面上流通的金幣不敷使用,主角想要自行鑄造矮人金幣,但卻被臣子們否決。說是有防偽設計,私鑄的不被市場接受。主角只好繼續收集矮人金幣。

作者在這段劇情中,打算描寫金幣數量和貿易戰之類的劇情。

我覺得作者自己都不懂貨幣史。他把「矮人金幣」當「美金」,用現代貨幣戰爭內容在寫這些劇情。

Fcitx輸入法引擎行列30字碼表添加二級簡碼~試驗中

繼「行列30字碼表添加一級簡碼」之後,我還是想把二級簡碼合併進來。但因為二級簡碼和特別碼重複衝突的狀況不可避免,我決定以特別碼為優先。所以合併進來的二級簡碼不保證每個字的位置都符合規定。

合併結果中,有九成以上的二級簡碼字,會出現在候選字清單的正確位置上。不到一成的重複字,位置有所挪動。

另外,我在處理二級簡碼過程中,發現來源的 array30.txt 中有錯誤編碼,已刪除那些錯誤。

下載已經轉換的表: 含二級簡碼的行列30字碼表

K島歪串日常:武道狂之詩的武林與現實生活

武道狂之詩》是一套武俠小說,並有漫畫改編。我看得是漫畫。

在此作品中,武當派摒棄了養生道術而偏重於武鬥實戰,並生起「天下無敵,稱霸武林」的野心。 K島民就劇情,討論武當派還算不算「白道」」,以及主角為何走復仇之路。

本文整理了我在討論串中提到的看法:

  1. 何謂名門正派
  2. 門派傳承重要嗎
  3. 弟子不能退出門派嗎
  4. 為什麼名門正派都用劍

Linux Mount Disk Image and Edit 掛載磁碟映像與編輯

我手上有一份磁碟映像 (disk image),它是從 SD 記憶卡或硬碟直接 dd 複製而來。 如果我需要修改磁碟映像的檔案系統內某個檔案的內容,我該怎麼做?

最笨的方法是把磁碟映像寫回記憶卡或硬碟,修改內容後,再重新做一個磁碟映像。 最好的方法則是利用 Linux 的 loop 設備 (loop device) 功能,把磁碟映像當成一個磁碟設備,直接掛載起來。 基本步驟如下:

  1. 首先查看磁碟映像的分割狀態。
  2. 計算指定分割區的起始位置。
  3. 掛載這個磁碟映像的分割區到指定目錄。
  4. 修改檔案內容。
  5. 卸載磁碟映像分割區。

同理,你也能直接編輯磁碟映像的分割區。

startx - Cannot open virtual console

我使用 Debian 虛擬機的習慣是啟動後保持在文字環境。先登入文字終端機環境,再視需要執行 startx 進入桌面環境。

但我安裝 Debian 10 後,執行 startx 會失敗。依程式訊息查看 ~/.local/share/xorg/Xorg.0.log ,錯誤重點如下:

Fatal server error:
[   ...] (EE) xf86OpenConsole: Cannot not open virtual console ? (Permission denied)

解法是編輯 /etc/X11/Xwrapper.config ,加入一行:

needs_root_rights=yes

編輯 Xwrapper.config 時,你會看到檔案內容中提示更動此檔後,必須執行dpkg-reconfigure xserver-xorg-legacy 變更 X 服務組態。存檔後照做。一般用戶就能執行 startx 了。

透過 dm (Desktop Manager) 登入桌面環境的使用者,不必動上面的東西。

Windows 10 VirtualBox 6.1 安裝 Debian 10 虛擬機狀況排除筆記

自從 Windows 10 增加 Windows 子系統 Linux 版 (WSL, Windows Subsystem Linux) 功能後,我已經很長一段時間都在用 WSL 跑 Debian 了。 這次要不是想裝一套純 Debian 10 虛擬機,還不知道 VirtualBox 6 現在這麼多毛病。 我不清楚是不是因為虛擬化功能愈來愈複雜,才導致 VirtualBox 6 的適應性變差。

host 系統: Windows 10 Home 64bit.

  • VirtualBox 6 安裝錯誤狀況: 找不到設備或檔案 (cannot open the device or file specified)。
  • Debian 10 為 guest 系統的錯誤狀況:
    • installation failed when select and install software.
    • black screen.

Fcitx輸入法引擎行列30字碼表添加一級簡碼

fcitx-table-array30 所採用的字根表中,包含行列30特別碼以及1996年新增特別碼。但不含一、二級簡碼和 w 特殊符號。

一級簡碼的使用率實在很高,沒它很難用。所以我將以前設計 TouchIME 時整理的行列30簡碼表拿出來,與 fcitx-table-array30 的字根合併。 All the data file is now in public domain.

不過我在合併過程中,發現一些問題,所以我最後只加入一級簡碼,放棄二級簡碼

我正在試驗「添加二級簡碼」。 但因有一部份二級簡碼字被迫挪動位置,所以我可能不會把它當正式結果。

Android手機使用趨勢防毒免費 QR Code 掃描器完成簡訊實聯制5步驟

廢話不多說,我是 Android 手機用戶,但我不想用「疾管家官方 LINE 帳號」這個方法通報。實在不夠快。

我一向都用「趨勢科技 QR Code 掃描器」。 「安全、免費、零廣告,QR 碼和二維條碼掃描」。真的沒廣告,也不用網路。

這個 App 也可以 5 步驟完成簡訊實聯制,第二次之後只要 3 步驟。

備註:微軟的 Microsoft Lens 或 Google 的 Google Lens 這兩個 App 一樣免費、無廣告。同樣5步驟完成實聯制。只是它們太肥了,啟動慢。