我早先在網頁前端使用 MQTT 處理訊息時,大多是在內網或非加密性網站。所以我用 mosquitte 架設的 MQTT 服務只啟用了一般性的 ws 協定。但近日開發一項基於 PWA 的網站應用 (Web App) 時,看到 mqtt 連線失敗的訊息,才知道處於 https 狀態的網頁, mqtt 也必須走安全性的 wss 連線。
所以我又花了不少時間,將公司內的 mosquitto 服務設置加進 wss 協定。本文也會特別說明 mosquitto 在 Windows 平台上設置 wss 的注意事項。事實上,我大部份時間就是耗在 Windows 平台上頭。
本文說明如何使用 OpenSSL 從 PFX 憑證文件匯出 PEM 格式的憑證與金鑰。
透過 SSL 協定建立瀏覽器和網站伺服器之間的安全通道時,必須使用符合 PKCS 標準的憑證文件。而 PKCS 訂立了多種憑證格式,常見的有 X.509 DER, X.509 PEM (Base64), PKCS#12 PFX 三種。這三種格式可以互相轉換。
雖然文件格式可以互相轉換,但大多數應用 SSL 加密通信資料的服務軟體,本身往往只支援其中一種格式。例如微軟 IIS 採用 PFX 格式,而 Apache HTTP Server 與 Nginx 則採用 PEM 格式。一般而言,非開放源碼的服務軟體多採用 PFX 格式;使用 OpenSSL 函數庫的開放源碼的服務軟體選擇 PEM 格式。當你要安裝的服務軟體採用的憑證文件格式與你手上現有的憑證不同時,你可以用 OpenSSL 工具自行轉換。
notifyOSD 是一個在畫面角落顯示提示訊息的網頁 UI 項目。以固定位置浮動視窗,顯示提示訊息。訊息採堆疊方式管理,新的訊息將疊在已有訊息之上,並在下方顯示已有幾筆提示訊息。
它不使用其他 JavaScript 套件。
Source Repo: non-jquery-ui
overlayMessage 是一個顯示全頁覆蓋訊息的網頁 UI 項目 。它完全獨立,不使用其他 JavaScript 套件。
其設計目的是在執行非同步工作時,顯示覆蓋全頁的訊息,阻擋使用者操作頁面的內容。例如使用 XmlHttpRequest 上傳表單資料時,防止使用者在上傳完成前修改表單。
Source Repo: non-jquery-ui
PENTAX DA 鏡頭是針對 PENTAX 數位相機,搭配 APS-C 感光元件的鏡頭群。
我排除了可用於全片幅感光元件的 FA 與 D FA 鏡頭群。
分類上,基於 PENTAX 的鏡頭設計哲學,我選擇先按濾鏡尺寸分組。然後再以用途分組推薦。
自從微軟將 Windows Subsystem for Linux (WSL) 正式釋出後, Windows 10 的使用者不必安裝虛擬機也可配置 Linux 環境,還可在 Microsoft Store 下輕鬆選擇你想用的 Linux 散佈版本。像是 Ubuntu, Debian, Kali Linux 都已經有 Microsoft Store 上的 App 版本。只要準備 1GB 左右的系統磁碟空間,你就能像安裝 Windows App 般安裝一套 Linux 終端環境。
在 WSL 的終端視窗下,使用文字終端軟體時幾乎沒有不適應之處。不過,人總是貪心的。文字終端軟體可以用,哪 Linux 的桌面應用軟體呢?我搜尋了網路上的相關文章,很快就成功跑起 Linux 桌面應用軟體,也順便解決了中文顯示的問題。
在進行智慧農業的案子時,如何讓 Raspberry Pi 連接 internet 也是一個令人困擾的問題。在空曠的農田中, WiFi 訊號收不到,乙太網路不夠長。在 Raspberry Pi 上裝一個 4G 網路設備,可說是必然的答案。在蒐集資料以及實際使用後,我個人認為使用 4G Router (俗稱 4G 行動分享器) 是最簡易的解決方案。
本案例於 Raspberry Pi 使用 Grove - LoRa Radio 模組,實作基本的 LoRa 無線應用。 Raspberry Pi 的角色是 LoRa Gateway 。它負責收集其他 LoRa 設備的訊號,再透過 Internet 發佈到 MQTT 頻道上。
作業系統與硬體支援
Grove LoRa Radio 模組的產品說明它不提供 Raspberry Pi 使用的 SDK 。但 Alexander Krause 為它寫了一個 Python 套件,名稱為 pyRFM 。各位可以在 Github 上取得 pyRFM 的源碼: erazor83/pyRFM。拜 Python 的跨平台特性所賜, pyRFM 一舉打破了 Grove LoRa Radio 的供應商對其他硬體平台支援不足的困境。只要可以運行 Python 環境的作業平台,都可以透過 pyRFM 使用 Grove LoRa Radio 。
繼前文「readString 使用經驗」,本文將談 serial.readBytes() 的使用經驗。
前文的感測模組屬於定時主動回報模式。而本文案例用的感測設備,則是終端指令互動模式。它不會主動回報任何資料。使用者必須透過 serial 埠連接進入它的 console ,輸入指令取得它的回應內容。理論上,用 readString()
方法同樣能處理它的輸出資料。只是它原本是設計和 PC 互動,並不考慮另一端的記憶體用量需求,導致它的輸出資料很長。當我使用 Arduino Pro Mini 控制板,在讀出它的資料接著呼叫字串方法加工時,會 OOM (Out of memory)。使我不得不換用 readBytes()
方法。
最近參與了一個智慧農業 4.0 相關的案子,這類案子通常都要整合環境感測模組(水位、氣溫)、無線訊號模組和自動控制系統。而且因為農地周圍常常沒有穩定的市電,故這些農業用途的設備基本都需要用電池供電。在低電力供應的限制下,我第一次用了 Arduino 控制週邊模組。 Arduino 開發工作本身並不困難,難在接上它的感測模組並沒有一定的資料輸出、入格式。幾乎每種感測模組都需要針對它的特性調整資料讀取動作。
本文案例,感測模組接上 Arduino 控制板的 Serial 針腳,透過 Serial 埠送出感測資料。當 Arduino 讀到感測資料後,要將資料透過無線訊號模組傳送給遠地的資料收集裝置。基於無線訊號模組的資料傳輸特性,應將資料先放入封包,以封包為單位傳送出去。
但本文案例的感測模組送出的資料內容沒有固定長度,也沒有固定的結束字元。一筆感測資料內容包含多行文字,但換行字元放在每行開頭,最後一行不附加換行字元。因此我也不能用換行字元判斷它是否送完一筆資料了。
本文說明在 Windows 作業系統上,如何將 Python 程式以 Windows 服務 (Windows Service) 的模式執行。這可以讓程式於系統開機後,自動在背景中工作。
Mosquitto 提供 Windows 系統的安裝包。但是有些事沒說清楚,對首次接觸者帶來些許困擾。我在此補充一些事。 v1.5.1 (2018-08-16) 有重要變動。
缺少功能
Mosquitto 的 Windows 系統安裝包在 v1.5.1 之前並未啟用 MQTT over websockets 功能。如果你需要這功能,你得要下載原始碼自行編譯。
而在 v1.5.1 (2018-08-16) 起,將 websockets 功能編入了。你只需要按 MQTT用戶端入門 - 二 的說明,在組態檔中啟用 websockets 。
至於我個人的作法則不一樣。因為是 Windows 10 ,所以我啟用 Windows Subsystem for Linux (WSL) 安裝 Ubuntu on Windows 。然後在 Ubuntu on Windows 中直接用 apt-get 安裝 mosquitto 套件,同 Debian 安裝 mosquitto。本文寫作時, Ubuntu on Windows 運行的散佈版本為 16.04 , mosquitto 套件版本為 1.4.8 ,已可使用 MQTT over websockets 。
Windows Subsystem for Linux 是好東西啊。
安裝時的必要項目
Mosquitto 安裝程式 (Native build) 會提示你在繼續安裝前,先複製與安裝兩個軟體。但我建議先中斷 Mosquitto 安裝程式,等安裝了下列三個軟體之後,才去執行 Mosquitto 安裝程式。喔,你沒看錯,是「三個」。
近幾年來,使用平板、手機播放線上音樂的人愈來愈多。他們雖然不是音響發燒友,但同樣會尋求更優雅舒適的音樂聆聽環境。他們希望有大顆的喇叭,可以讓手機播放的音樂繞樑於耳、餘韻不絕,而不是聽到手機小喇叭聲嘶力竭的破嗓音。為此,音響廠商近一、兩年推出的平價新產品,幾乎都將無線音樂串流列為支援項目。這類產品如 TEAC NT-503, Yamaha WXA-50, Pioneer N-70AE, Oppa Sonica DAC 等。
這波追求無線便利性的潮流,也影響了傳統音響發燒友。但我們通常已經擁有等級不差的傳統二聲道擴大機和高價位 DAC 。音響發燒友是一群不會為了音質而妥協的人,未必願意為了聆聽無線音樂串流去添加平價但降級的無線音樂串流設備。那麼我們就會想找可以連接手機和傳統擴大機的無線連接設備。本文將說明我的方式,讓平板、手機透過無線連接設備搭配傳統擴大機。
Lenovo Yoga Book 實在是令人驚艷的產品。那隻可替換筆芯的觸控筆可說是最大賣點。將觸控筆的筆芯換成原子筆筆芯後,可以放張紙在 Create Pad 上書寫並同步到 OneNote 記錄。不少消費者就是為了滿足手寫書寫感而買下它。
但是它給了我們兩種筆芯,卻只有一隻筆桿。說真的,應該很少有用戶會忍著不裝原子筆筆芯。然而帶著兩種筆芯換來換去實在很麻煩。Yoga Book 用戶絕對需要兩隻筆。還有,原子筆的筆芯是耗材,我們也想知道何處取得補充品。
Lenovo 網站上可以找到這些配件,但常常缺貨,更重要的是價格難以下手。替代品如下:
- 觸控筆: Samsung Galaxy Note series Stylus
- 原子筆筆芯: DT&CREATION Mini Star Refills
谷阿莫是以製作「X分鐘帶你看完某某電影」系列短片聞名的網路紅人。近日被電影片商控告侵權,谷阿莫挨告。電影片商:於網路取得非法影片已侵權。
一般對著作權有所了解的人,會想到以電影 90 分鐘以上的內容和短片不到 5 分鐘的內容比例來看,是否可以主張合理使用? 然而這類影評短片的製作者若要主張合理使用的話,片源的合法來源基本有兩種途徑。一是從片商公開的預告片,二是從自購的 DVD、BD 影像。而谷阿莫製作短片的片源並不合法,這正是電影片商之主張重點。
由於留言板的使用率非常低,且 disqus 系統會拖長網頁載入時間,所以我調整了我的留言板機制。
現在大部份文章都不會看到留言板了。具共同主題或同系列的文章,則會共用同一主題的留言板。
少量的意見回饋與交流,使用 twitter 和 facebook 足以。
「台灣 119 求救簡訊」是整合了 GPS 定位與 SMS 文字簡訊功能的應用程式。當使用者遇難需要向 119 消防局報案求助時,這個應用程式可以利用 SMS 文字簡訊送出求救訊息和 GPS 位置,讓消防局更快掌握受困者的地點。
此類工具對經常從事戶外活動的人頗有用處,各地方政府亦有發行類似的 App 。例如新聞「定位神準!119APP救出摸黑的登山客」。但受限於我國政府單位的短淺目光,僅在 Android 和 iOS 的軟體市集上發布此類 App 。
我用 HTML5 和 JavaScript 設計了「台灣 119 求救簡訊」這個純網頁版本的 Webapp 。此外,受益於微軟在 Windows 10 時增加了 UWP (Universal Windows Platform, 通用 Windows 平台) 的應用程式模式,同樣的源碼可以直接包裝成 UWP App 供 Windows 安裝。
UVC (USB video class - wikipedia) 泛指使用 USB 連接介面的影像產品。一般使用者最熟悉的 UVC 設備就是 WebCam 。除了 WebCam ,還有數位攝影機、電視卡、或具有照相功能的設備。故一台電腦接了兩台以上的 UVC 設備並非罕見。
在 Linux 核心中,會為可用的 UVC 設備各自分配一個 dev 路徑,檔名為 video 編號。例如 /dev/video0, /dev/video1 。但是當你的電腦接了兩台以上不同的 UVC 設備時,你將發現系統缺乏清楚的訊息告訴你這些 dev 路徑與 UVC 設備的關係。你不知道這些 dev 路徑各自代表哪一台 UVC 設備。當你的應用軟體需要用 dev 路徑開啟特定設備時,這會帶給你一些小麻煩。
本文以 shell script 和 python 分別實作了一個列出 dev 路徑與其代表的 UVC 設備名稱的小工具。