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

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

matplotlib 畫圖時採用 ttc 中文字型

1 週 1 天 ago
想要在 Ubuntu 18.04 底下用 python 的 matplotlib 畫圖, 第一個遇到的問題就是中文顯示。 這篇簡體中文教學文 onepiece_dn的专栏 寫得很清楚, 照做就成功了。 不過我想要改預設值, 不想每一句話都指定中文字型。 另一篇 ButteredCat 寫的簡中文章 解釋詳盡。 因為我用的字型是文鼎的 uaki.ttc 所以還需要再多加一步: 從 ttc 裡面把 ttf 挖出來。 以下是修改過的簡要步驟及程式碼; 詳細說明請參考上述連結。 除了安裝 python-matplotlib 套件之外, 如果你的程式是 python 2.7 而非 python3, 還需要手動安裝 python-pyqt5 套件。 查看系統裡已安裝哪些中文字型: fc-list :lang=zh 例如我自己看到其中有興趣的這一列: /usr/share/fonts
ckhung

在 ubuntu 18.04 底下為 kvm 打造的虛擬區域網路

1 週 3 天 ago
Ubuntu 18.04 Bionic Beaver 的網路設定改用 netplan 取代舊的 /etc/network/interfaces 設定方式。 如果只是單純的固定 IP 或 DHCP, 據說設定很簡單。 可是我想採用類似 手工精簡版 的方式來幫未來的 qemu-kvm guests 設定獨立式或可橋接外界的虛擬區域網路。 暫時沒有力氣學 netplan, 所以就照著 這個問答 強制改成舊的設定方式比較簡單。 但若不小心, 有可能會在開機時無限等待 dhcp 服務。 以下是我的 lubuntu 18.04 最終網路設定, 及一些有助除錯的筆記。 一、 懷舊網路設定 首先安裝幾個套件: apt install ifupdown2 bridge-utils qemu-kvm。 再來把 /etc/network/interfaces 改成類似這樣: #
ckhung

自架臉部表情判讀服務

2 週 3 天 ago
請看一下 原始網站: 我把這個判讀臉部表情 (及性別) 的程式 複製回來並小改一下, 然後打包成 face_classification docker 讓大家玩。 情緒判斷還蠻有一點像的; 可是鬍子先生為什麼竟然被判斷成女性呢? 一、 試玩 以下假設你已略懂 docker。 抓回我打包的 docker: docker pull ckhung/face_classification:18C 後面的 :18C 請依 最新狀況 調整。 啟動, 命名為 fc, 把服務放在 port 15984 : docker run -d --name fc -p 15984:8084 ckhung/face_classification:18C 找一張表情豐富的相片, 例如叫做 some_faces.jpg 。 可以包含不只一張臉。 把判讀結果直接畫在原圖上面。 傳回來的新的固定是
ckhung

在 docker 裡面跑 GUI 程式

2 週 3 天 ago
一開始玩 docker 主要都是為了伺服器的應用 (例如 ethercalc 或 ldap), 所以只需要文字介面。 最近玩 ML/DL/AI 程式, 經常需要顯示圖片。 每次都要在 docker 裡面用 AI 程式在分享的目錄裡產生圖片, 再從外面 (host) 用看圖軟體看, 有點囉嗦。 如果是影片, 就更麻煩了。 搜尋到這篇 Running GUI apps with Docker, 略微修改他的做法, 得到以下簡單步驟讓你可以在 docker 裡面執行圖形介面程式並直接顯示在 host 實體機的 X Window 環境。 我們拿 ubuntu 18.04 的官方 docker 及輕巧的 feh 看圖程式來做實驗。 查看你自己的 user name 跟 UID: echo $UID $USER 例如我看到 1000 ckhung。 啟動 docker: docker
ckhung

躲在 apache2 後面的 flask 範例, 含上傳檔案

3 週 1 天 ago
github 上面很多 ML/DL/AI 程式都以 python 撰寫, 可以從命令列執行。 但如果想要佈署, 例如想讓樹莓派可以把野外蒐集到的畫面或聲音傳回伺服器用 AI 程式判讀/分類, 那該怎麼辦呢? 常見的方法是用 flask 架一個簡單的 web server。 Flask 是 python 的一個模組, 所以從那裡要接上 python 所寫的 ML/DL/AI 引擎很方便。 Flask 單獨作為 web server 的方法很簡單, 請見 中文教學 或 官網。 但若你的伺服器已有 apache2, 要怎樣才能把 flask 接上去呢? 我們即將在 apache 的 /var/www 目錄底下建立兩個子目錄, 一個叫做 hello, 另一個叫做 upload。 希望等一下用 browser 連到 http://localhost/hello/ 跟 http://
ckhung

到 floydhub 租用雲端 GPU 玩人工智慧

3 週 6 天 ago
想玩一點 AI, 又不想自己直接面對 封閉的 nVidia 顯卡驅動程式 嗎? 如果你的訓練資料沒有隱私或機密的問題, 那就上雲端租用 GPU 吧。 我採用的是 floydhub。 根據 這一篇比較文, floydhub 的效能比 AWS 跟 paperspace 略遜一籌; 不過他們以軟體環境取勝: 有許多現成的深度學習 docker 環境 可選。 而且當初我起步機器學習, 就是靠他們做的一些 docker images, 所以就寫介紹文來回饋囉。 你需要先註冊一個帳號, 每個月可免費使用 CPU 20 小時。 然後根據 官網文件, 以普通人的身份下 pip install -U floyd-cli 在你的電腦上安裝 floyd 指令。 ( 會安裝在 ~/.local/bin 裡面) 再來下 floyd login 這會在瀏覽器開啟一個登入分頁。 登入後, 瀏覽器上會
ckhung

Android-x86 Nougat 版

4 週 ago
三年前曾經介紹過 android-x86 4.* 版。 前陣子為了上課需要, 再次試玩。 現在的 Nougat 版 (7.*) 已可安裝 google play; 不過目前對我來說, 有 f-droid 就夠了。 64 bit 好像沒什麼特別用處, 從官網下載 32bit 版本好了: android-x86-7.1-r2.iso。 另外, 我試過 CM 版 (CyanogenMod), 但是安裝完成後第一次開機要半小時、 adb 不能用、 有時安裝會卡在選語言的畫面。 總之還是用原始的 android-x86 比較穩。 一、 準備硬碟 用虛擬機來安裝作業系統比較方便, 可以一邊繼續做其他事。 網路上用 Virtualbox 的教學文比較多; 但我偏好用 kvm。 此外, zfs 的 snapshot 快照功能很好用, 所以我們要在 zfs 上面建一個 volume。 如果你
ckhung

xmpp 加密簡訊自由軟體再出發: conversations 與 gajim 入門教學

1 個月 ago
Xmpp 是一個古老的開放通訊協定, 所以有很多包袱, 開發者有不少怨言。 如果你跟你的朋友們從零開始尋找簡訊自由軟體, 那麼我會推薦 matrix/riot.im, 以後再撰文介紹。 先前我寫的 xmpp 及 加密 教學文其中介紹的 ChatSecure, 開發者現在已不再維護; 至於 pidgin 則因為不支援 OpenPGP 而且我沒試出傳圖片的方法, 所以也就暫時先 bye bye 了。 最近終於把兩者的替代品 -- 電腦版的 gajim 跟手機版的 conversations -- 的重要功能試出來。 如果你像我一樣有很多朋友在用 xmpp 通訊協定的話, 現在改推薦這兩套 xmpp 軟體。 這篇新文章用來取代過時的那兩篇。 以下的測試版本是: gajim 0.16.8-3 on lubuntu 17.04 及 conversations 2.1.4 from
ckhung

overlayfs 練習: 小改光碟 iso 檔, 何必大手筆複製?

1 個月 1 週 ago
以下三件事有什麼共通處? debian-live 光碟的 persistence 機制 用一層薄薄的 (例如 2G) 可讀寫空間來製造 「從 live CD 開機, 後來卻竟然可以將工作階段寫入硬碟」 的假象。 撰寫 dockerfile 時第一句 from 拿某個 (即使很厚重的) base image 當作地基, 如果後面的變動沒很多, 那麼在 docker build 時, 扣除下載 base image 的時間, 你的 docker image 本身的建立其實花不了多少時間。 有一個 4G 大小的 iso 檔, 我想改它的開機圖片跟選單, 可以不要把整張光碟的內容複製到硬碟上修改嗎? 答案: 它們都可以用 overlayfs 來實現。 把玩 overlay 文件系統 這篇簡中文章有很詳細的解說。 單純從 end-user 的角度來說, 其實沒有細讀也 ok, 只需要
ckhung

比較兩個大同小異的文字檔, vimdiff 版

1 個月 1 週 ago
[這篇是給習慣使用 vim 的讀者看的。 習慣 geany 或其他記事本類型/GUI 類型的讀者, 用 meld 會簡單很多。] 如果 f1.txt 跟 f2.txt 兩個文字檔內容差不多, 可以用 vimdiff f1.txt f2.txt 同時編輯/比較兩個檔案。 這會進入 split 模式, 出現左右兩個框 (panes) 左邊顯示 f1.txt, 右邊顯示 f2.txt。 而且 vim 會把兩檔的差異處用顏色標出來。 在這個模式下, 以下是一些好用的按鍵: ] c 跳到下一個差異處; [ c 跳到上一個差異處。 ctrl-w l 跳到右框、 ctrl-w h 跳到左框。 或是更簡單的 ctrl-w ctrl-w 跳到另一個框。 zo 展開相同的部分 (就是每個框左緣部分的 + 號)、 zc 收起相同的部分。 有時會需要改變框的寬度, 例如視窗大小改變時, 多出來的空間分配
ckhung

比較兩個大同小異的文字檔, meld 版

1 個月 2 週 ago
如果 f1.txt 跟 f2.txt 兩個文字檔內容差不多, 可以用 meld f1.txt f2.txt 同時編輯/比較兩個檔案。 meld 是圖形介面的程式, 非常直覺好用。 它會把差異處用顏色標示出來, 並且找到正確的差入位置。 按一下畫面中間的左箭頭或右箭頭, 就會以左邊或右邊的檔案為準, 更新另一邊的檔案, 把那一小段差異消除掉。 當游標位於左側時, 還可以用 「變更」 選單下的 「從右側合併所有更改」 一秒同化兩個檔案。 反之亦然。 如果不小心改錯了, 當然也可以用視窗上方工具列上的還原按鈕還原。 工具列下方兩個檔案名稱之間的垂直線可以拉, 可以改變兩個檔案佔據畫面的比例。 對了, windows 用戶也可以從 官網 下載安裝檔哦。
ckhung

(可離線/批次/命令列的) 把彩色相片變成黑白、 幫黑白相片上色

2 個月 3 週 ago
想要把彩色圖片變成黑白, 可以這樣下: convert color.jpg -colorspace Gray gray.jpg。 詳見 ImageMagick 手冊。 想要把黑白相片塗上顏色, 可以到 梅問題大大 及 攝影札記 所介紹的網站去上傳相片。 如果不想上傳, 想要離線作業, and/or 需要以指令的方式批次大量處理 -- 例如想要幫歷史黑白影片上色 -- 那就到 github 去下載 colorization 吧。 (有圖可看效果) 站在 docker 的肩膀上, 這個程式很容易安裝, 因為它所需要的相依套件, floydhub/dl-docker 裡面都已經備齊了。 先啟動 dl-docker: docker run -it --name ailab -v /home/ckhung/share:/root/share floydhub/
ckhung

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

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

geeqie 及其他 gtk 2.0 軟體的快速鍵設定

2 個月 4 週 ago
我習慣用 geeqie 看圖/相片。 在任一張圖片上按右鍵, 有一個 「copypath」 功能, 可以把這張圖的路徑複製起來, 以便貼到命令列上做其他處理。 可是 「按滑鼠、 用老花眼找到 copypath、 再點一下」 這個動作如果要重複幾百次, 好浪費時間啊。 我寧可把時間拿來研究如何設定快速鍵。 搜尋了一下, 很快發現這個設定檔: ~/.config/geeqie/accels 裡面列出所有的快速鍵。 找到這一列: ; (gtk_accel_path "/MenuActions/CopyPath" "") 哦, 看起來很簡單: 把代表註解的最前面的分號拿掉、 在空字串裡面填上我要的快速鍵 (例如 F12)、 存檔、 關掉 geeqie、 再重開一次, 應該就可以了吧? 結果 F12 鍵還是沒有用 :-( 不僅如此, 再次編輯 ~/.config/
ckhung

既遠端又變身的 X forwading

3 個月 ago
我在本地電腦 earth 使用帳號 ckhung (以下簡稱 ckhung@earth)。 用 ssh -X pandora.xxx.yyy 登入遠方主機 pandora 上的帳號 ckhung (以下簡稱 ckhung@pandora), 因為命令列上有 -X 而且 伺服器端已設定 X11UseLocalhost no, 所以 ckhung@pandora 的圖形視窗可以丟回 ckhung@earth, 這稱為 ssh X forwarding。 然後在 pandora 上面執行 su avatar 變身成 avatar@pandora 結果就無法執行圖形軟體了。 想用 xauth list 除錯, 電腦卡很久, 最後出現 xauth: timeout in locking authority file /home/ckhung/.Xauthority。 原來是因為
ckhung
已檢查
4 小時 20 分鐘 ago
大人問小孩: 「全世界的玩具隨便你挑? 這怎麼可能? 如果我要的玩具只有一個, 正好又被別人借走了呢?」
「玩具閘門後面, 每種玩具永遠只有一個。 任何人想玩, 隨時都可以生一個複製品給你。
這裡沒有人搶玩具。 這裡是 玩具烏托邦。」
* * * *
貴哥在這裡分享自由軟體跟免費雲端工具的知識與技術, 就是要打破 品牌肥羊 的迷思、 讓數位高牆倒下

(還有其他雜七雜八不想放到 「資訊人權貴ㄓ疑」 的筆記跟感言)
Subscribe to 玩具烏托邦 feed