2018年2月2日 星期五

連鑰匙孔都藏起來的 ssh 完全防禦: SPA

如果說 ssh 服務是進入伺服器的鎖頭, 那麼帳號密碼就是開鎖的鑰匙。 你可以用 密不透水的設定 來保護鎖頭, 或是用 fail2ban 把企圖開鎖但履試履敗的可疑份子擋在庭院之外一陣子, 讓他連試鑰匙的機會都沒有。 但其實另外還有一個中文世界鮮少人知道的終極絕招: 把鎖頭/鑰匙孔整個藏起來, 只當懂門路的人 (你自己) 用特定暗號敲門時, 才讓鎖頭/鑰匙孔短暫出現一兩分鐘。 今天要介紹的伺服器完全防禦機制叫做 Single Packet Authorization (SPA)

2018年1月30日 星期二

用 logrotate 實現 「近密遠疏」 的備份計畫

Logrotate 本來是拿來備份系統 log 檔用的; 不過被我拿來充份利用、 備份自己的資料 :-) 我每天都會 (至少一次) 把最近幾天內更動過的檔案 (文件/圖片/...) 備份起來, 比方叫做 backup.zip 。 因為這個檔案很小, 所以可以不時上傳到雲端、 下載到隨身碟上。 但偶爾還是會需要挖出較舊的備份, 把檔案還原到舊版。 所以我會用 logrotate 把過去一週的 backup.zip 每天保留一個版本。

2018年1月20日 星期六

ptx 公共運輸整合資訊流通服務平台 bash 及 php 範例

公車動態地圖 去年中才知道這個好站: 交通部透過 公共運輸整合資訊流通服務平台 (PTX) 提供各種大眾運輸工具的時刻/路線/動態/...等等政府開放資料, 正好可以拿來實作我心目中理想的 具有運算思維的公車動態地圖。 最近終於有空, 用它重新寫好公車動態 geojson 查詢 (範例: 公車即時動態 geojson 文字檔之 臺中市 151 路 高雄市 100 路; 其他都市名稱請見 官網說明文件 第 4 頁; 原始碼)。 壞掉好久的 朝陽科大五路線公車動態地圖 終於又可以動了! 以下分享範例程式及注意事項給 php 程式設計師。

2017年12月31日 星期日

概念性、宏觀視野的程序/執行緒同步機制總覽

同步機制總覽 大學時代, 作業系統這門課修得破破的。 後來當助教、 甚至現在自己教書再遇到作業系統, 也都不是那麼有信心。 特別是談論 processes 及 threads 的同步機制那一章: 各種硬體指令 (test-and-set、 compare-and-swap) 各種演算法 (Peterson's algorithm、 Bakery algorithm) 各種程式結構或資料結構 (spinlock、 mutex、 semaphore、 condition variable) 都很燒腦細胞。 更糟的是, 從來沒看過一篇宏觀的文章介紹這些機制彼此之間的關係, 就算看懂個別的演算法, 還是有見樹不見林的感覺。 還好現在有網路、 有 google。 爬了很多文之後, 整理這篇文章, 從宏觀角度著眼, 不鑽研程式碼 (但有很多超連結), 自己思緒變得清晰很多, 也希望對未來的作業系統課程師生以及多執行緒程式設計師有幫助。 本文假設讀者對於 context switch、 critical section 等等名詞已有概念。 以下 processes 跟 threads 混著用不特別區分。

2017年12月30日 星期六

ImageMagick mask : 批次遮罩疊圖 (例如局部著色)

遮罩疊圖的各階段圖片 先前曾經 在 gimp 裡面採用遮罩機制 幫相片只保留主角的顏色。 遮罩疊圖不僅限用於著色。 凡是需要 「把一張圖的一部分疊到另一張底圖之上」 的動作都適用。 如果有很多張圖要用相同的方式處理, 改用 ImageMagick 指令會比用 gimp 快。 最麻煩的部分是: 每張圖的遮罩很難自動產生。 不過現在 AI 那麼厲害, 很快地就會出現各種類似 街道圖片 semantic segmentation 語義分割 的類神經網路, 到時候這篇所介紹的技巧就會很有用了: 我們要解說如何用 ImageMagick 命令列把一張原圖及它的語義分割成果圖轉換成局部著色的圖。 我已更新 範例圖檔, 裡面包含九張原圖 (orig/*) 跟九張語義分割成果圖 (result/*) 所以你不需要架設 docker 等等, 只要有安裝 ImageMagick 就可以跟著實作。

2017年12月24日 星期日

街道圖片 semantic segmentation 語義分割實作

街道圖片語義分割結果 (只有「人」的部分著色)

所謂 (圖片的) semantic segmentation 語義分割 是指 「如何辨識一張圖片當中哪些 pixels 構成了人、 哪些 pixels 構成了車子、 ... 等等」 這個問題。 理論的部分 ( 知乎簡中原文 itread01 內容農場正體中文) 我也沒研究, 呵呵, 直接省略。 幾個月前上網找到 (僅適用於分析街道圖片的) ENet Semantic Segmentation 實作, 斷斷續續花了幾個週末 建立映射 撰寫 Dockerfile、 修改外包裝 python 程式, 這個週末終於把可用的版本上傳到 Dockerhub 的 ckhung/enet 去。 嗯, 效果不太好... 大家將就玩玩看吧!

跑 AI 程式時出現 illegal instruction 錯誤

跑 AI 程式時出現 Illegal instruction (core dumped) 這樣的錯誤, 很有可能是因為 CPU 太舊/太弱, 不支援某些向量運算。 先前 玩 face_recognition 的時候 遇到的是 dlib 函式庫需要 sse2/sse4 指令; 這次則是玩 ENet 又遇到 illegal instruction。 看了一些不完全相關的文章和錯誤訊息, 包含: draw_net 的 "OpenBLAS : Your OS does not support AVX instructions" 警告、 caffe 的 issue intel 論壇 等等, 最後的結論是: ENet 版的 caffe 需要 CPU 支援 avx 指令。 可以用 grep -i avx /proc/cpuinfo 查看你的 CPU 是否符合要求。 雖然沒有力氣重新編譯 ENet 版的 caffe 所以無法百分之百確認, 不過曾在五部電腦上測試過, 三部沒有 avx 指令的電腦在 python 程式碼 import caffe 時都出現 illegal instruction 的訊息; 兩部有 avx 指令的電腦確實都能順利執行。 如果你也跟我一樣拿古老的文書機來跑 AI 程式, 而且遇到相同的錯誤訊息, 請留言確認一下這個規則是否也適用你的狀況囉!

2017年12月9日 星期六

在 antix 17 裡面安裝中文輸入法

有一陣子我喜歡 用 antix 駕馭窮人的資源過富足的生活, 可是後來在較新版的 antix 上安裝中文輸入法一直失敗, 只好移民到 lubuntu。 最近再度嚐試 antix 17, 在論壇上獲得協助 終於試出來 fcitx 跟 ibus 的設定, 而且對輸入法的設定稍微長了一點知識。 以下每一節各自獨立, 各自適用於 全新安裝的中文版 antix; 如果不是全新安裝的系統, 有可能會失敗!! 我安裝的版本是 antiX-17_386-full.iso 。

2017年12月3日 星期日

用 GRASS 繪製燦坤各分店的勢力範圍地圖 Voronoi Diagram

燦坤各分店勢力範圍地圖 想像你有一張 「中華電信基地臺分佈地圖」, 並且假設每個基地臺的功率都一樣大。 地圖上的每一個點都可以問: 「哪一個基地臺離我最近?」 以便決定哪個基地臺的訊號比較強、 我的手機要跟誰連線。 以 (不會移動的) 「偶像 - 粉絲」 之間的關係來比喻, 每個偶像有自己的勢力範圍, 範圍內的所有點就是它的粉絲。 各勢力範圍之間的分界線由相鄰兩偶像的垂直平分線所組成。 這樣畫出來的圖稱為 Voronoi Diagram。 因為我拿不到基地臺座標, 所以只好改畫燦坤各分店的勢力範圍地圖。 目前可能沒什麼用, 因為分店跟粉絲的直線距離沒有太大意義; 但以後出現無人機送/取貨業務時, 這張地圖可能就有用了。

2017年11月26日 星期日

脊椎不正所引起的腰腿酸痛, 自推大腿就好了一大半

幾週前跟一位許久不見的老同學聊天。 他大腿痛到不太能走路, 檢查結果是椎間盤突出, 醫生說要開刀。 他嚇到了, 趕快上網大量爬文作功課, 搜尋到一支 「神棍」, 據說下腰椎的問題只需要自推兩週就會有改善。 他買回來自推三天, 突然聽到 「卡」 一聲, 腳就幾乎不痛了! 免去了開刀的痛苦和風險。 我自己也有脊椎側彎的問題, 雖沒疼痛, 但肚臍很明顯歪一邊, 坐公車或捷運時還會覺得自己像個怪叔叔, 一直倒向右側的蘿莉或正太 orz。 所以也很好奇地爬文、 照做。 「神棍」 還在海運路上, 我徒手自推, 第一晚做完後繼續做其他扭曲伸展動作時, 也是突然聽到 「卡」 的一聲, 感覺歪肚臍的狀況就減緩了一半。 介紹給家人用, 他們身體也都出現有感的小小改善: 「而且比復健省下好多時間。」 所以一定要跟久坐打電腦的讀者們分享一下。

2017年11月18日 星期六

GRASS 地理資訊系統入門指南

GRASS 地理資訊系統 GRASS (Geographic Resources Analysis Support System) 是一套極強大的地理資訊系統自由軟體。 它能處理網格資料、 向量資料 (例如 geojson) 及資料庫形式的表格資料。

2017年11月16日 星期四

用 TGOS 全國門牌地址定位服務繪製全家便利商店全國門市地圖

想要繪製某大規模連鎖店的全國門市地圖。 全家門市查詢 有簡單的靜態網頁, 最容易處理, 那就決定用全家當範例了。 用 wget 把所有網頁抓下來, 如 FamilyMart.tgz (打包壓縮檔)。

再從所有網頁當中撈出每個門市的店名、 電話、 地址: