更新 Github Page 自訂網域名稱的 IP

今天更新部落格一份文件後, github 發了一封 “Page build warning” 的提示信,信中說我的網站域名指向一個過期的 IP 位址。

The custom domain for your GitHub Pages site is pointed at an outdated IP address. You must update your site’s DNS records if you’d like it to be available via your custom domain. For more information, see https://help.github.com/en/articles/using-a-custom-domain-with-github-pages.

Mosquitto 設置安全性 Websocket (wss)

我早先在網頁前端使用 MQTT 處理訊息時,大多是在內網或非加密性網站。所以我用 mosquitte 架設的 MQTT 服務只啟用了一般性的 ws 協定。但近日開發一項基於 PWA 的網站應用 (Web App) 時,看到 mqtt 連線失敗的訊息,才知道處於 https 狀態的網頁, mqtt 也必須走安全性的 wss 連線。

所以我又花了不少時間,將公司內的 mosquitto 服務設置加進 wss 協定。本文也會特別說明 mosquitto 在 Windows 平台上設置 wss 的注意事項。事實上,我大部份時間就是耗在 Windows 平台上頭。

使用 OpenSSL 從 PFX 憑證文件匯出 PEM 憑證與金鑰

本文說明如何使用 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 - non-jquery-ui

notifyOSD 是一個在畫面角落顯示提示訊息的網頁 UI 項目。以固定位置浮動視窗,顯示提示訊息。訊息採堆疊方式管理,新的訊息將疊在已有訊息之上,並在下方顯示已有幾筆提示訊息。

它不使用其他 JavaScript 套件。

Source Repo: non-jquery-ui

overlayMessage - non-jquery-ui

overlayMessage 是一個顯示全頁覆蓋訊息的網頁 UI 項目 。它完全獨立,不使用其他 JavaScript 套件。

其設計目的是在執行非同步工作時,顯示覆蓋全頁的訊息,阻擋使用者操作頁面的內容。例如使用 XmlHttpRequest 上傳表單資料時,防止使用者在上傳完成前修改表單。

Source Repo: non-jquery-ui

PENTAX DA 鏡頭整理

PENTAX DA 鏡頭是針對 PENTAX 數位相機,搭配 APS-C 感光元件的鏡頭群。 我排除了可用於全片幅感光元件的 FA 與 D FA 鏡頭群。

分類上,基於 PENTAX 的鏡頭設計哲學,我選擇先按濾鏡尺寸分組。然後再以用途分組推薦。

Windows Subsystem for Linux (WSL) 使用 Linux GUI 桌面軟體與中文字型

自從微軟將 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 使用 4G 數據網路

在進行智慧農業的案子時,如何讓 Raspberry Pi 連接 internet 也是一個令人困擾的問題。在空曠的農田中, WiFi 訊號收不到,乙太網路不夠長。在 Raspberry Pi 上裝一個 4G 網路設備,可說是必然的答案。在蒐集資料以及實際使用後,我個人認為使用 4G Router (俗稱 4G 行動分享器) 是最簡易的解決方案。

Raspberry Pi 使用 Grove LoRa 無線模組負擔 LoRa Gateway 角色

本案例於 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 。

Arduino Serial 與 String 使用經驗 - readBytes

智慧農業 4.0 成果陳列區

繼前文「readString 使用經驗」,本文將談 serial.readBytes() 的使用經驗。

前文的感測模組屬於定時主動回報模式。而本文案例用的感測設備,則是終端指令互動模式。它不會主動回報任何資料。使用者必須透過 serial 埠連接進入它的 console ,輸入指令取得它的回應內容。理論上,用 readString() 方法同樣能處理它的輸出資料。只是它原本是設計和 PC 互動,並不考慮另一端的記憶體用量需求,導致它的輸出資料很長。當我使用 Arduino Pro Mini 控制板,在讀出它的資料接著呼叫字串方法加工時,會 OOM (Out of memory)。使我不得不換用 readBytes() 方法。

Arduino Serial 與 String 使用經驗 - readString

最近參與了一個智慧農業 4.0 相關的案子,這類案子通常都要整合環境感測模組(水位、氣溫)、無線訊號模組和自動控制系統。而且因為農地周圍常常沒有穩定的市電,故這些農業用途的設備基本都需要用電池供電。在低電力供應的限制下,我第一次用了 Arduino 控制週邊模組。 Arduino 開發工作本身並不困難,難在接上它的感測模組並沒有一定的資料輸出、入格式。幾乎每種感測模組都需要針對它的特性調整資料讀取動作。

智慧農業 4.0 成果發表會現場

本文案例,感測模組接上 Arduino 控制板的 Serial 針腳,透過 Serial 埠送出感測資料。當 Arduino 讀到感測資料後,要將資料透過無線訊號模組傳送給遠地的資料收集裝置。基於無線訊號模組的資料傳輸特性,應將資料先放入封包,以封包為單位傳送出去。

但本文案例的感測模組送出的資料內容沒有固定長度,也沒有固定的結束字元。一筆感測資料內容包含多行文字,但換行字元放在每行開頭,最後一行不附加換行字元。因此我也不能用換行字元判斷它是否送完一筆資料了。

MQTT用戶端入門 - 四、在 Windows 10 安裝 mosquitto 補遺

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 觸控筆與筆芯替代品

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)的使用內容

由於留言板的使用率非常低,且 disqus 系統會拖長網頁載入時間,所以我調整了我的留言板機制。

現在大部份文章都不會看到留言板了。具共同主題或同系列的文章,則會共用同一主題的留言板。

少量的意見回饋與交流,使用 twitter 和 facebook 足以。

台灣 119 求救簡訊 APP 使用說明與開發筆記

「台灣 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 安裝。

Touch IME HTML5 輸入法引擎使用手冊

Touch 輸入法 Copyright (C) 2013 遊手好閒的石頭成 <shirock.tw@gmail.com>

Touch IME is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with this program.  If not, see
<https://www.gnu.org/licenses/lgpl-3.0-standalone.html>.

You should see https://rocksources.googlecode.com/ to get more information about Touch IME.

LGPLv3

List device path and product name of USB video devices

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 設備名稱的小工具。