2017年10月4日 星期三

在低解析度的實體螢幕上用動態視野換取高解析度的享受

xrandr panning 的效果 筆電的解析度只有 1366x768, 跑 kvm 時, 虛擬機的解析度就只能調成 800x600, 好呆的感覺, guest 裡面的 app 如果不夠貼心 (對解析度的需求太貪心), 可能會連按鈕都按不到。 以這個例子來說, 可以按著 alt 鍵再用滑鼠移動視窗, 問題就解決了。

不過更一般地來說, 要怎樣才能用低解析度 (小螢幕) 的價格與重量得到高解析度 (大螢幕) 的享受呢? X Window 有一個神奇的功能, 讓你的實體螢幕彷彿只看到想像中的虛擬螢幕的一小部分, 每當滑鼠移到邊界時, 這一小塊看得見的視野的範圍也就跟著改變。 看 這支影片 比較清楚: 他的解析度也是只有 1366x768, 但是到了 1:01 時, 「panned screens」 按下 ok, game 的程式碼就以為螢幕變大了。 注意看他每次滑鼠移到邊邊時, 遊戲背景就會跟著移動; 但是對 game (或是其他任何 apps) 的程式碼而言, 它一直以為螢幕就是很大、 背景其實一直是保持固定不動的。

2017年9月27日 星期三

ssh X forwarding 失敗除錯

從甲電腦用 ssh 連線到乙電腦時, 如果多加一個 -X 選項, 像這樣: ssh -X me@乙電腦 之後就可以在乙電腦上執行 GUI 程式, 視窗會丟回甲電腦來。 這叫做 ssh X forwarding, 很好用。 不太確定是什麼原因, 最近我的筆電當成乙電腦 (ssh server) 時, 這個功能突然失效了。 這篇短文 拯救了我: 連線時改下 ssh -v -X me@乙電腦, 這個 -v 會叫 ssh 多印一些除錯訊息。 再根據錯誤訊息 (沒抄下來, 忘記了) 找到 文章, 說在乙電腦的 /etc/ssh/sshd_config 裡面加一句 X11UseLocalhost no, 再重新啟動服務: systemctl restart ssh, 於是 ssh -X 就又可以用了! 這句話是什麼意思? 根據手冊 man sshd_config 這個問答, 看來是叫乙電腦的 sshd 服務放寬一點, 不要太嚴格。

順便一提, 在乙電腦上 sudo 變身成 root 之後, 也有可能就無法再開啟 GUI 視窗。 [這就是 unix 的文化啊! 一般用戶的視窗, 預設 root 是不能任意侵犯的。] 有搜尋到 123 等等文章; 不過其實我自己已經很久沒遇過到這個問題了。 回頭一查, 發現很久以前就已經在 root 的 .bashrc 裡面設定 export XAUTHORITY=/home/ckhung/.Xauthority 所以一直都很順暢。 註解裡寫著這招是從 archlinux 的文件 學來的。 真是太愛 archlinux 社群了! 連我們非 archlinux 用戶都經常受惠於他們超優質的文件。

2017年9月25日 星期一

編譯別人的程式的除錯技巧

最近玩 AI 一直在編譯別人寫的軟體。 最常遇到的問題, 不是別人寫的程式有錯, 而是我的環境跟他的環境沒有 100% 相同, 所以原來 ok 的程式碼, 到了我的環境就編譯失敗。 以下是我 編譯 ENet 時學到的一些除錯技巧與心得。

2017年9月18日 星期一

推薦一個編譯影像處理 AI 軟體的 docker image

玩 AI 時, 經常需要自己編譯軟體。 很麻煩的是, AI 軟體經常有很長一串相依套件, 其中有些套件很難編譯。 以我最近在玩的影像處理為例, opencv 跟 boost 是兩個很常用到但編譯起來困難重重的套件。 還好找到 docker-cmake-opencv-boost 這個現成的 Dockerfile。 向作者求助兩次之後, 得到 迅速有效的回應。 我就直接拿原作者的 Dockerfile 來用:

2017年9月16日 星期六

linux X11 環境更改滑鼠指標圖示

滑鼠指標圖示從很細的一條直線變成骷髏頭 在 linux 的 X Window 下, 要如何修改滑鼠指標圖示呢? 搜尋 「ubuntu 滑鼠 圖示」 可以找到很多簡短的中文教學文。 我這篇則要多筆記幾個連結跟命令列小工具。

2017年9月14日 星期四

Caffe 遷移學習範例: 分辨猿類相片

用 caffe 做 transfer learning 的過程及所需檔案 如果英文已經不錯了, 要學一點點西班牙文相對就不會太難; 但是英文能力對於學習彈鋼琴可能並沒有幫助。 這就是 transfer learning 學習遷移的現象。 類神經網路也是這樣: 已經訓練好、 可以辨識 1000 種類型相片的 caffe 圖像辨識模型, 如果要再拿來改訓練成 「辨識六種猿類相片」 的模型, 因為工作內容很類似, 所以對就花的運算資源相少很多, 也相對比較容易訓練得好。

2017年9月9日 星期六

wordnet 名詞從屬關係繪圖

dog cat horse domestic_ass cow ox sheep 的 hypernyms ape 的 hyponyms Wordnet [官網 維基百科] 是 Princeton 大學所建立的英文詞典。 裡面的詞彙 按照觀念 整理, 而不是按照字的拼字/外形整理。 例如 "fall.n.01" 是 「秋天」 的概念, 跟 "autumn.n.01" 是同一個概念, 兩者只是第 15236859 號名詞的不同寫法; 而 "fall.v.01" 則是另一個字 「跌倒」, 它是第 1972298 號動詞。 名詞之間有從屬關係。 例如 "great_ape" 巨猿有三個 hyponym (下義詞): chimpanzee (黑猩猩)、 gorilla (大猩猩)、 orang_utan (紅毛猩猩); 反過來說, "great_ape" 是 chimpanzee 的 hypernym (上義詞)。 可以大約把這理解為界門綱目科屬種的階層分類概念; 但它是英文詞典不是生物辭典, 所以畫出來的樹狀關係並不具有真正生物分類學的意義。 而且畫出來的也未必是樹狀關係, 有可能是 directed acyclic graph。

2017年9月5日 星期二

百毒不侵救命碟 「貴哥實驗室版」: 不必燒毀、 麻瓜可自製、 圖書館/電腦教室幾乎零管理

請到 這裡 下載最新版的 gregslab*.iso 。 這是我上課用的 live CD。 請把它燒成 DVD、 用它開機之後, 打開一個終端機, 可以這樣自製 「百毒不侵救命碟」:

ls /dev/sd*
# 插入隨身碟
ls /dev/sd*
# 查看一下比剛才多出什麼? 例如多出 /dev/sdz 跟 /dev/sdz1, 那麼就:
sudo mbootuz.py mkboot /dev/sdz
# 密碼是一個空格 (不良示範, 不要學)
sudo mbootuz.py mklive -p greg.img -P 2G /dev/sdz

其中 -p 後面的檔名請根據你的姓名或代號命名; -P 後面的值代表幫 linux 預留多大的可寫入空間。 (也就是會多吃掉隨身碟那麼多空間。) 就這樣, 兩個指令, 複製時間不到五分鐘, 你已成功自製 mbootuz.py mklive 版的開機隨身碟! 以下是詳細解說。

2017年9月3日 星期日

把已灌入硬碟的系統變成 live cd

live-boot 的開機流程 玩出來了! 太感動了! Debian 系列 (含 *ubuntu) 有一個 live-boot 套件, 它可以把你已安裝在硬碟上的 linux 系統打包變成一張開機光碟 (live CD)。 這有什麼好處?

  1. 因為光碟是唯讀的, 所以你可以把系統用 squashfs 的方式壓縮到很小, 很省空間。
  2. 這張光碟可以用 pxe 從網路開機。
  3. 你可以把這張光碟放到隨身碟上, 再加上 persistence 功能, 又讓它變成可寫入的版本。 幫麻瓜製作開機隨身碟變得又快又簡單!。

2017年9月1日 星期五

從相片的 exif 資料撈描述字串、 用 imagemagick 在相片上寫字 (批次處理相片檔的命令列入門練習)

可愛狗狗照片集錦 需要批次大量修圖時, ImageMagick 超好用。 命令列麻瓜/新手/小學生請跟著我做, 勇敢踏出滑鼠選單便利但局促的保護傘, 感受一下 「用電腦」 跟 「被電腦用」 的差別。

2017年8月30日 星期三

lubuntu 停用/啟用自動掛載隨身碟

pcmanfm 的自動掛載選項 當你把隨身碟插入電腦時, windows 會自動打開檔案總管; 不過要移除隨身碟之前, 必須先關閉檔案總管, 再點一下 「放心/安全移除硬體」。 因為 windows 會自動幫你 掛載 mount 隨身碟上每個分割裡的 檔案系統; 但它不能幫你決定何時要 卸載 umount 隨身碟。 lubuntu 預設也有類似的行為。

但因為我的課經常要製作開機隨身碟, 有了這個功能反而不方便, 所以我所製作的開機機隨身碟、 開機光碟都會取消這個功能。 從 這裡 學到: 這個功能在 pcmanfm 檔案總管理面, 從 「編輯」=>「偏好設定」=>「磁碟管理」 進去, 把 「自動掛載」 底下的三個選項都取消掉, 這樣以後插入隨身碟時, 就不會自動掛載, 而需要手動下 mount ... 指令。

2017年8月27日 星期日

ImageNet 所有圖檔類別的 wordnet 定義

在上一篇 「下載 ImageNet 訓練圖片的一小部分」 裡面, 我們看到 ImageNet 的圖檔, 絕大部分都不屬於那 1000 類拿來訓練圖像辨識的圖片。 今天我們要幫所有類別的圖片都產生文字說明, 得到 imnet-wnid-full.csv 這個檔案。 它各個欄位的意義分別是: wordnet 代號、 在 ImageNet 當中出現的次數、 是否屬於 1000 類訓練辨識的圖片、 簡要文字說明、 詳細文字說明。 有了這個檔案, 我們就快要可以玩 transfer learning 了!