2017年8月17日 星期四

從零開始的 linux 學習指南

正在幫中興通識錄製微課程教學影片。 既然都已經寫文章鼓吹應把 regexp 列為 「實用到二十二世紀」 的程式語言 的第一名了, 當然就選擇把 regexp 當成這次四小時微課程的主題。 但是遇到一個小小的問題: 在沒有電腦教室的情況下, 我該怎樣才能用最簡單的方式讓 (有些可能沒玩過 linux 的) 學生可以照著影片操作 linux 命令列呢? 以下是我給 「linux 零基礎」 的讀者們的一些建議; 也特別要請小格的經常讀者們 (還有路過的訪客) 留言分享更簡單的方式, 或其他提醒。 最好要有中文教學連結。

2017年8月15日 星期二

face_recognition + t-sne-lab = 撞臉偵測器

覺得你自己或家人/朋友跟某名人長得很像嗎? 還是覺得身旁的誰跟誰撞臉呢? 讓 AI 來對你的照片發表它的意見吧! 快先到 測試網頁 玩一下囉! 注意: 按了紅色的 R, 等了一陣子圖片大致就定位之後, 記得要按藍色的 P 停止運算! 不然它會一直浪費你的 CPU。

2017年8月11日 星期五

自動(大量批次)尋找擷取、裁剪、模糊化、馬賽克照片中的人臉

需要從一大批相片當中偵測/擷取/裁剪出所有人臉嗎? 或是想把一大批相片當中的人臉通通打馬賽克或變模糊以保護隱私嗎? 這時你需要 facedetect。 對, 相機早就可以自動抓臉; 但是當命令列控發現一個不必寫程式就能用的命令列工具、 看到可以在 raspberry pi 上面寫 shell script 的可能性時, 這完全又是另一個等級的興奮感啊!

冰與火之歌原始海報1 原始海報1 的標記版 原始海報1 的模糊版 原始海報1 的馬賽克版
冰與火之歌原始海報2 原始海報2 的標記版 原始海報2 的模糊版 原始海報2 的馬賽克版

2017年8月7日 星期一

手機連線 owncloud 私有雲行事曆

owncloud 的行事曆 想要用雲端行事曆, 就必須把我的行程通通告訴 google 嗎? 不必! 用 owncloud 架設私有雲, 你也可以從 android 手機連線讀寫個人專屬的雲端行事曆。 其實我的 owncloud 根本就是為了行事曆這個功能而架的 :-)

2017年7月23日 星期日

32 bit linux 不支援 zfs 但還是可以享用 snapshot 快照

這幾天鐵齒之後學到的慘痛經驗, 很快筆記分享一下。 我試著要裝 32 bit (lubuntu-*-i386.iso), 並加裝 zfs 驅動程式。 官網 跟安裝畫面就已經警告說 zfs 大量使用 virtual memory, 所以在 32 bit 環境上會很不穩, 可是我就是鐵齒又有 OS 蒐集癖、 就是想要 把它的根目錄放進 zfs 裡面去。 裝完之後, 用 kvm 開機測試, 通過 initramfs, 甚至已經掛載位於 zfs 的根目錄, 所有服務也都一一漂亮地 [ok] 啟動, 然後就卡在進不了圖形介面, 甚至連 ctrl-alt-f2 等等終端機也叫不出來了。 就死當, 很徹底。 隔沒多久, host 的 root 帳號就收到 mail, 說 zfs 的 checksum error -- 我猜那一個 zpool 應該整個毀了。 還好當時有刻意先開一個新的 zpool 來測試, 沒牽連到原先已裝好的其他 64 bit 版 lubuntu。

好吧, 32 bit 的 linux 不能安裝 zfs 驅動程式; 但是它還是可以享用 zfs 的快照功能 -- 用 qemu-kvm。 在 64 bit、 支援 zfs 的 host 上面, 假設已有一個名為 tank 的 zpool。

  1. 建立一個 12G 的 zvol: zfs create -V 12G tank/ROOT/xenial32
  2. 用 qemu-kvm 把 32 bit 的 lubuntu 16.04 裝到第二顆硬碟或隨身碟或一個 lvm volume 去。
  3. 參考 隨遇而安四海為家的 linux, 用 fsarchiver 把剛裝好的 32 bit 備份起來, 再把它還原到 /dev/zvol/tank/ROOT/xenial32 去。
  4. 馬上建立一個快照: zfs snapshot tank/ROOT/xenial32@1-pristine
  5. 從這個 32 bit 版的 lubuntu 的 /boot 底下, 把 vmlinuz* 跟 initrd.img* 複製出來。
  6. 這個裝在 zfs 裡面的 32 bit linux 無法真的自己從硬體開機; 不過 qemu-kvm 可以啟動單一分割mykvm -kernel vmlinuz* -initrd initrd.img* -append 'root=/dev/sda' /dev/zvol/tank/ROOT/xenial32 或是在那個 zvol 裡面安裝某個開機管理員, 那麼命令列上的三個選項就可以直接省略。 至少還可以在 qemu-kvm 虛擬機裡面、 在 zfs 上面玩 32 bit 的 linux, 然後不時從 host 用 zfs snapshot 指令建快照。 Yeah!
[8/2 補充] 幫一個 zvol 建立 snapshot 之後, 該如何查看它的內容呢? 要先設定: zfs set snapdev=visible tank/ROOT/xenial32 然後在 /dev/zvol/tank/ROOT/ 底下, 原先的 xenial32 旁邊, 會出現每個 snapshot 的名字。 於是就可以用 read-only 的方式掛載這些裝置, 例如: mount -o ro /dev/zvol/tank/ROOT/xenial32@0-pristine /mnt/t2

2017年7月20日 星期四

資料科學/機器學習的好用入門工具 t-SNE 幫你看見高維度數值資料

手寫數字測試 t-sne 演算法 想像你有一個試算表, 裡面有幾十個數值欄位, 還有幾個 「分類用」 的字串欄位。 你想問: 如果我拿到一筆資料的所有數值欄位, 是否可以猜出它屬於哪一個分類? 比方說, 已知一個人的身高/體重/BMI/心跳速率/血壓/睡眠時間/肝指數GOT、GPT/... 是否可以猜出他比較可能是哪一種血型/星座/生肖/職業/...? (有點毛毛的例子, 不過也正好提醒大家: 現代的趨勢就是這樣 -- 你的隱私, 就是政府或大企業手中的大數據。) 這是機器學習領域裡面典型的分類問題 (classification)。 如果資料量不大 (例如只有幾百筆或幾千筆資料、 每筆只有幾十個或幾百個欄位), 可能不足以拿來訓練複雜的人工智慧演算法; 又或者你有大量的資料, 但想要在全力運算之前小量取樣, 並且用一個操作簡單運算量較低的演算法來迅速了解你的資料長相。 這時, 屬於非監督式學習類型的 t-SNE 演算法就非常適合拿來用肉眼觀察資料的群聚/分類現象。

2017年7月12日 星期三

跟同學交換 ethercalc 容器, 馬上理解 docker 的 volume、 port、 link

Ethercalc 是一個類似 google sheet 的共筆試算表服務。 (作者是數位政委唐鳳!) 除了 公用版 之外, 你也可以自己架設在私有雲裡。 最簡單偷懶的架設方法就用 docker。 電腦教室裡坐在隔壁的兩位 docker 新手, 還可以透過 「把我所架設的服務拿出來跟同學交換」 來學習 docker 的 -v (與 host 共用目錄)、 -p (通訊埠轉發)、 --link (建立 docker 之間的連結), 動手實作馬上比爬文更有感!

2017年7月5日 星期三

很犯規的 caffe 初體驗: 省略訓練直接跳到影像辨識

U. C. Berkeley 的 BVLC (現在改名叫做 BAIR) 所撰寫的人工智慧引擎 caffe 有一個 model zoo 頁面, 裡面都是現成的類神經網路模型, 有一些甚至已有訓練好的權重矩陣 (weight matrices) 可以下載, 連曠日廢時的訓練過程都可以省下來, 完全不需要 受 nvidia 的鳥氣。 對於不求甚解 (而且沒有 GPU) 的工程師來說, 這真是一個玩具天堂, 光是想要把這裡的資源都接上 I/O 變成簡單的命令列, 就已經有很多東西 (可惜很少文件) 可以玩了。 延續 不求甚解工程師的人工智慧學習捷徑地圖, 這次我寫了 caffenet-classify.py 圖像辨識指令, 當成我的第一個 caffe 外包裝小程式習作, 分享給大家玩, 也順便記錄一些心得。

2017年6月14日 星期三

pidgin 與 chatsecure 加密對話實況解說

pidgin 的 otr 外掛 本文用一個對話過程來解說 xmpp 的實際操作方式。 強烈建議動手實測之前請先讀一下結論那節! 以下實驗建中, chatsecure 的部分, 議用一個新的、 還沒有累積朋友的帳號來進行, 以免發生意外, 變成沒有朋友的人! 假設讀者跟朋友已 申請 xmpp 帳號並安裝 pidgin and/or chatsecure, 又假設讀者略懂略懂 非對稱式加解密。 安裝 pidgin 的那一方, 也請先安裝 pidgin-otr 套件, 並且在 「工具」=>「模組」 底下勾選啟用 otr (off-the-record) 功能。 可能還需要展開 「模組明細」、 點選 「設定模組」、 點一下 「Generate」 以便產生加密用的金鑰。 下文對話的兩個角色分別是:

簡稱 新貴 老貴
帳號 ckhung@xmpp.zone ckhung@jabber.org
OS CM (android) lubuntu 16.04
app chatsecure pidgin

2017年5月30日 星期二

透過 pxe 網路開機載入 live cd

很久以前就想玩 pxe 網路開機; 最近想要攻佔不歸我管的 windows 電腦教室, 才開始認真學。 做壞事克服逆境真是進步的最佳動力啊! 這篇 (中文) 很詳盡; 不過如果區網內已有一個 dhcp 伺服器, 而且不能關掉, 那該怎麼辦呢? 把自己的 dhcp 服務設定成 proxy 就可以了。 本文主要參考 這篇 manski.net 的英文文章, 因為它採用 dnsmasq, 讓設定變得很簡單, 而且文章本身也寫得簡單明瞭。 最後, 本文也說明如何透過 pxe 啟動特定幾張 live cd。 (但並沒有要透過網路安裝 linux。)

2017年5月28日 星期日

ubuntu 精簡/最小安裝

為了做一些實驗, 我需要安裝一個精簡版的 ubuntu。 從 官網 出發, 找到你要的版本 (例如我要給舊電腦用, 所以選 32-bit PC: Ubuntu 16.04 LTS "Xenial Xerus")、 下載 mini.iso。 用安裝光碟開機、 回答一些問題、 花一些時間等候安裝 base system。 出現選用項目清單時 (software selection), 除了原本就有的 standard system utilities 之外, 我只勾選了 openssh server。 不要勾 ubuntu server, 因為那會設定防火牆, 導致後續的網路實驗變得比較複雜。 (順便一提, 原來 lubuntu 也可以用這種方式安裝 啊!)

2017年5月22日 星期一

窮人的 proxmox 可攜式/行動機房

tux 開車載著機房 業餘機房管理員貴哥向系上要了一部較高階的桌機, 在上面安裝 proxmox 虛擬環境, 用它來架設私有雲、 管理幾部 linux 教學伺服器已經兩年了, 感覺超簡單超方便的, 很想分享給中小企業網管們, 還有喜歡電腦自主又想幫學校省錢的老師們。 小格舊版的 「虛擬機新手恩物 proxmox」 那篇蠻受歡迎的; 新版的 4.* 系列有很多改變, 所以決定重寫一篇。 也順便示範: 沒有伺服器和固定 IP 可用的窮人也能把 proxmox 安裝在一個 qcow2 檔或隨身碟裡面, 背著一間機房到處跑、 隨時拿出來練習! 這招拿來教 proxmox 很方便, 不會影響到電腦教室裡原本的 linux 系統。 (<== 真正的原始動機) 單純想玩 proxmox、 手邊有實體伺服器可用的讀者, 可以省略前面的虛擬環境架設, 直接用 proxmox 光碟啟動伺服器, 並且跳到第二節第4步。