2018年5月19日 星期六

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

我習慣用 geeqie 看圖/相片。 在任一張圖片上按右鍵, 有一個 「copypath」 功能, 可以把這張圖的路徑複製起來, 以便貼到命令列上做其他處理。 可是 「按滑鼠、 用老花眼找到 copypath、 再點一下」 這個動作如果要重複幾百次, 好浪費時間啊。 我寧可把時間拿來研究如何設定快速鍵。

2018年5月17日 星期四

既遠端又變身的 X forwading

我在本地電腦 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

2018年5月6日 星期日

xmpp 加密簡訊自由軟體再出發

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 f-droid。

2018年4月10日 星期二

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

想玩一點 AI, 又不想自己直接面對 封閉的 nVidia 顯卡驅動程式 嗎? 如果你的訓練資料沒有隱私或機密的問題, 那就上雲端租用 GPU 吧。 我採用的是 floydhub。 根據 這一篇比較文, floydhub 的效能比 AWS 跟 paperspace 略遜一籌; 不過他們以軟體環境取勝: 有許多現成的深度學習 docker 環境 可選。 而且當初我起步機器學習, 就是靠他們做的一些 docker images, 所以就寫介紹文來回饋囉。

2018年4月2日 星期一

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

overlayfs 示意圖 以下三件事有什麼共通處?

  1. debian-live 光碟的 persistence 機制 用一層薄薄的 (例如 2G) 可讀寫空間來製造 「從 live CD 開機, 後來卻竟然可以將工作階段寫入硬碟」 的假象。
  2. 撰寫 dockerfile 時第一句 from 拿某個 (即使很厚重的) base image 當作地基, 如果後面的變動沒很多, 那麼在 docker build 時, 扣除下載 base image 的時間, 你的 docker image 本身的建立其實花不了多少時間。
  3. 有一個 4G 大小的 iso 檔, 我想改它的開機圖片跟選單, 可以不要把整張光碟的內容複製到硬碟上修改嗎?

答案: 它們都可以用 overlayfs 來實現。 把玩 overlay 文件系統 這篇簡中文章有很詳細的解說。 單純從 end-user 的角度來說, 其實沒有細讀也 ok, 只需要想像 gimp 或 inkscape 編輯圖片時的 「圖層」 概念, 再圖片搜尋一下, 對 overlayfs 就可以理解八九成了。 本文就不解釋原理, 直接實作第三項工作來認識 overlayfs。 (插圖取自 Data and Network Management for Containers -- Docker Tutorial)

2018年3月24日 星期六

scrcpy 透過 adb 把手機投影到電腦上, 連影片也能看!

scrcpy 從電腦上看手機播影片 先前寫過 用 adb 把手機變身實物投影機, 那招不需要安裝任何軟體, 但只能秀出靜態的手機畫面快照。 最近發現 scrcpy 連手機上播放影片, 電腦都可以跟得上、 即時顯示, 對老師上課示範 android 手機/平板操作來說真是太方便了!

最終執行時只需要兩個檔案: 在電腦上的 scrcpy 執行檔, 以及會被它透過 adb 傳到手機上的 srcpy-server.jar (算是在手機上跑的伺服器)。 也就是說, 不需要在手機上安裝 apk。 手機也不需要 root。

2018年3月10日 星期六

用 noscript 阻斷不明程式、 保護瀏覽器的安全與隱私

NoScript 操作介面 瀏覽器是你的電腦與外面廣大網際網路的最直接接觸面。 即使是你從來沒聽過、 不小心第一次造訪的網站, 它的 javascript 程式碼也都會進入你的瀏覽器執行。 這也是病毒、勒贖軟體、挖礦軟體最常走的入侵管道。 所以保護瀏覽器安全的最基本方式, 就是只允許部分 javascript 執行。 Adblock Plus 適用於多種瀏覽器, 它比較寬鬆: 「原則上放行; 只阻擋黑名單」; 而這篇要介紹、 最近 UI 大改版的 NoScript 僅適用於 firefox, 它比較嚴格: 「原則上阻擋; 只放行白名單」。

2018年2月25日 星期日

老舊電腦救星 antix

antix 17 桌面 Antix 是專為老舊電腦設計的 linux; gantix17 是貴哥版的 antix 17, 可以從 朝陽科大 朝陽資管 的伺服器下載。 它讓你用 2017 年的作業系統啟動 (二十世紀末等級?) 32bit、 256MB 記憶體的電腦。 如果要正常使用, 建議至少要有 1G 的記憶體。 若有 2G 的記憶體, 還可以退出開機光碟或拔掉開機隨身碟, 表演豪邁帥氣裸奔!

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 混著用不特別區分。