Debian 套件版本新舊比較工具

我任職的公司使用 Debian 套件格式管理自行開發的各類軟體,也會將一些第三方的軟體打包為 debian 套件。套件維護者有時候會需要調整版本的描述方式,夾綴一些如 rev, update, fix 之類的字眼,以便使用者更容易理解套件的版本意義。但套件維護者在調整版本文字時,有時會搞錯版本文字所代表的新舊順序。例如 “1.0.0rev1” 和 “1.0.0-1” 何者代表的版本較新?

套件維護者需要一些工具幫助他決定如何調整版本文字的內容。本文介紹兩種比較版本文字新舊意義的方式。分別使用 dpkg 命令列工具與 python 的 apt_pkg 庫。

讓網頁在 Twitter 推文時顯示圖片 - 在 github pages 中加上 Twitter Cards 與 Open Graph 標籤

我最近轉推網頁文章時,注意到同樣只放上文字和連結的推文,有些來源的網頁在我沒有附上圖片的情況下,依然會在推文中顯示網頁中的圖片。而且這類型的推文愈來愈多。這種推文的效果很好,我也想在我的部落格 (使用 github pages) 中加上這種效果。

概觀

首先看下圖。圖中是兩篇同樣只放上文字和網頁連結的推文,但呈現效果卻不相同。

有無圖片效果的兩則推文

下方的推文只有文字內容。但上方的推文主動地顯示了該網頁中的圖片縮圖與摘要文字。看起來,上方推文的閱讀效果較佳。

虹膜辨識應搭配紅外線 LED 與紅外線濾鏡相機

大約一年前,我在「臉部辨識系統經驗談」提到虹膜辨識系統的可用性與照相鏡頭有很大的關係。當時,我認為日本 NTT 尚未徹底解決虹膜辨識系統的手機照相需求。

規劃將虹膜辨識應用於行動設備或家用消費級產品時,我們首先會想到一般的相機是否可用?遺憾的是,一般相機並不適合用於虹膜辨識。各位可以用自己的手機相機自拍眼睛周圍。從照片可以看出,由於反光等因素,甚至會在虹膜區域出現相機的倒影。故取出的虹膜特徵品質極差。

MQTT qos 機制,發佈者如何確認訂閱者收到訊息?

在 COSCUP 2016 無人機空汙監控物聯網 這場關於 IoT 實作經驗的議程中,與會者向講者提問了一個問題。大意是說透過 MQTT 發出控制命令後,有沒有辦法確認感應器收到命令了?

MQTT 的 qos 機制可以確保訂閱者收到訊息。但發佈方法是非同步動作,當方法返回時,並不等於訂閱者都收到訊息了。若發佈者想知道訂閱者是否收到或何時收到訊息時,確實需要多一道工作。

廢止紅十字會法是矯枉過正

首先說明中華民國紅十字會在國際上的關係。提到紅十字會的國際關係,就要提到三件事物。一個是概念性的「國際紅十字與紅新月運動」團體,另兩個則是具有正式組織架構的「紅十字國際委員會(ICRC)」和「紅十字會與紅新月會國際聯合會(IFRC)」。且 ICRC 和 IFRC 是兩個獨立組織,彼此沒有從屬關係。 ICRC、IFRC 以及各地紅十字會三者共同合作推動「國際紅十字與紅新月運動」。 ICRC 承認中華民國紅十字會,屬於「國際紅十字與紅新月運動」團體。但受限於 IFRC 的組織章程,中華民國紅十字會不是 IFRC 的會員。民進黨立委李俊俋說「中華民國紅十字會根本不被國際紅十字會承認」,顯然他沒有搞懂紅十字會組織間的關係。我也不知道他口中的「國際紅十字會」是哪個。

我的 USB DAC 連接方案

自從看了 xtreme 的 iFi Purifier2 開箱文後,我就在想能不能弄一個窮人版的。儘量拿一般人手上現有的零件,搭出一個便宜又有顯著效果的 USB DAC 連接器。

Part 1. FE1.1s

首先,第一個主角, axpro USB 2.0 Hub。

axpro USB 2.0 Hub

構造非常簡單,一個不到 150 元。原本是我帶筆電出差旅遊時用的,今天就請他為了數位音響界獻身。

Python Tools for Visual Studio 初步入門

Python Tools for Visual Studio (PTVS) 是一個銜接 Visual Studio 和 Python 解譯器的工具。現在是 Visual Studio 2015 安裝時的可選用內容。

注意,當你安裝 Visual Studio Community 和 PTVS 時, Visual Studio Community 安裝工具並不會一併幫你安裝 Python 解譯器,你得要自己下載 Windows 版的 Python 解譯器。推薦使用 CPython for Windows 。你可以選擇 Python2 或 Python3 。如果你打算用 Python 撰寫檔案處理小工具的話,我建議選擇安裝 Python3 ,它解決了 Unicode 檔名的處理問題。

Python 解譯器與 Visual Studio Community 的安裝順序並不重要。誰先裝都行。

2016年3月推薦主題文章

推薦主題文章 MQTT用戶端入門 :

另外,我在配合 Apache MQ 的 MQTT 模組時,遇到 qos 為 2 還是漏訊的情形。但配合 mosquitto 時就沒遇過。

最近規劃把 disqus 的最近留言 放到首頁側欄上。

上月底有點忙,配合「非本國國民自動通關系統」驗收,得到機場加班微調程式。硬體閘門廠商先後提供的控制規格文件和設備實際回報的內容不一樣。結果我得要自己一一觀察每個 sensor 的實際回報資料調整程式內的狀態表。這些人是在破壞軟體協作的信賴關係。

Debian 8 (jessie) WiFi 啟用後斷線

我的筆記型電腦 Thinkpad X200s 有好一陣子沒有使用 WiFi 網路。前兩天帶著出外勤時,才發現 WiFi 啟用後一下就斷線,之後再也連不上網路。不論是連接手機分享網路,或是無線 WiFi 基地台都相同。查看 dmesg 後發現下列錯誤訊息:

wlan0: authentication with xxxxx (try 1)
wlan0: authentication with xxxxx (try 2)
wlan0: authentication with xxxxx (try 3)
wlan0: authentication with xxxxx time out

MQTT用戶端入門 - 三、Python 用戶端程式設計

Debian 8 套件庫中提供了 python-mosquitto 作為 Mosquitto 的用戶端程式庫。但現在不用這個,改用 Paho 專案 提供的 Python 用戶端程式庫: Paho Python Client。此程式庫具有泛用性,連接對象不限於 mosquitto ,亦可連接支援 MQTT 協定的其他 MQ 服務。

系列文章

MQTT用戶端入門 - 二、JavaScript 用戶端程式設計

MQTT用戶端入門之二,本文說明 JavaScript 用戶端的程式設計內容。

你的 JavaScript 寄宿環境必須支持 WebSockets 介面。 WebSockets 是 HTML5 規範項目之一,主要網路瀏覽器近三年的版本基本都提供 WebSockets 介面。 node.js 使用者請自行確認。本文範例將以瀏覽器為操作環境。

系列文章

MQTT用戶端入門 - 一、在 Debian 8 安裝 mosquitto

本文簡單說明在 Debian 8 上安裝 MQTT 實作品 mosquitto 的經驗。

MQTT 是用於遙測裝置或行動式應用程式之間傳送訊息的協定。它最早由 IBM 規劃實作,並在 2013 年提交給 OASIS (結構化資訊標準促進協會) 成為現在 IoT (Internet of Thing) 領域的訊息傳輸標準之一。

MQTT 通訊協定預期用於無線及低頻寬網路。可針對行動式應用程式可靠地處理遞送訊息的複雜性,並保持低成本地進行網路管理。 MQTT 用戶端程式庫比較小。程式庫如同郵箱,使用連接至 MQTT 伺服器的其他 MQTT 應用程式傳送及接收訊息。透過傳送訊息(而不是保持連接至等待回應的伺服器),MQTT 應用程式可節約電池壽命。 IBM WebSphere MQ 資訊中心 MQTT 簡介

系列文章

DLNA 與 foobar2000

我個人一直使用 foobar2000 作為主要的播放軟體,本文介紹 foobar2000 的 DLNA 功能。

DLNA 角色功能

DLNA 定義了很多種功能角色,以音樂播放來說,可分成以下四種主要角色:

  • Media Server (DMS)
  • Media Controller (DMC)
  • Media Renderer (DMR)
  • Media Player (DMP)

山葉 Yamaha CA-S1

Yamaha CA-S1 是 Yamaha 於 1978 年發表的綜合擴大機,在當年屬於高階產品線。不過當年的 Yamaha 旗艦是價位更高、更經典的 C-2a 前級銘機 (同樣 1978 年發表)。 CA-S1 只在日本銷售,而且這個 S 系列當時沒有推出後續機種。所以拍賣市場上的能見度並不高,遠低於前輩的 CA-1000/CA-1000III ,以及同年的 C-2a 。

Yamaha CA-S1 正面照

github pages 升級 jekyll3

先說一聲春節快樂,年年有餘。

這幾天發現文章裡互相連結的內容,都找不到網頁。原來 github pages 的 jekyll 升級到 3.x 版,結果新版產生的 permalink 網址似乎不一樣。總之先更新本地端的 jekyll 版本。然後我決定玩大一點,把所有從樂多搬過來的舊文章都改為和樂多文章編號對應的 permalink ,而不用 jekyll 預設的規則。現在舊文章連結就是 http://blog.roodo.com/rocksaying/archives/文章編號.html => http://rocksaying.tw/archives/文章編號.html 。並加上 sitemap.txt 讓搜尋引擎更快更新此處的索引。

最後,我寫了一個自動更新程式,把樂多上所有文章的內容都改成指示讀者連到此處對應文章的連結資訊。

山水 Sansui AU-X901

山水 Sansui AU-X901 於 1987 年推出,是 AU-α707i 的國際版型號,屬於第八代 07 系列。在日本國內是老二,日本國內旗艦是 AU-α907i。但在國際市場,這台就是 山水 旗艦機。同時,這一年的 山水 換了新的國際商標,所以這台擴大機上的商標是新式的。

Sansui AU-X901 正面照

學習 ECMAScript 6 - Class

本文將介紹 ECMAScript 6 新式的 Class (類別) 語法。但直到本文發布時,實作支持此語法的瀏覽器還不多,多數還在測試階段。想要練習本文內容,你需要使用 JavaScript compiler ,例如 Babel,將包含 ES6 語法的 JavaScript 程式碼,轉譯為現在的瀏覽器認得的語法。

2016年3月10日正式發佈的 Firefox 45 已支持 Class 語法。

ECMAScript 之前雖然沒有提供 class 語法,但它仍然是一種個體導向程式語言(OOPL),只不過它屬於 prototype-based 這支比較冷門的派別。 prototype-based 這支的世界觀比較接近現實世界,因為在現實世界中是先有獨特的個體出現,我們才以觀察者的身份依共同特徵將複數個體分類,這才有類別。ECMAScript 仍然支援繼承 (inheritance) 、封裝 (encapsulation) 、動態連結 (dynamic binding) 這三種特性。

1980年代初期的 Philips Marantz PM 750DC

看到 Marantz PM 750DC 時,就算是 Marantz 的玩家,可能也會懷疑,有這款嗎?該不會是仿冒的吧?

Marantz PM 705DC 播放中

Marantz 在 1981 年時,因為母公司 Superscope 的財務問題,而將美國與加拿大以外的 Marantz 資產賣給 Philips 。參考 Marantz 歷史。所以在 1984 年以前, Marantz 品牌其實有兩個不同市場的產品線。一個是 Superscope 經營的美國與加拿大市場,另一個是由 Philips 的 Marantz Japan 經營的美國以外的國際市場。而 PM 4xx/5xx/7xx 就是由 Marantz Japan 在 1981~1983 年間,於美國以外的地區銷售的機種。PM 750DC 是此系列最高階機種。大約同一時間,美國市場銷售的是 Esotec 系列,例如 PM-5 Esotec 。