2019年9月7日 星期六

commento 幫任何靜態網頁加上留言/投票功能

想幫你的網站加上留言功能嗎? 熱門的 disqus 有一些隱私疑慮; 於是我搜尋到 commento。 比較簡單的方法是 到官網註冊付費使用。 點 「Try the Demo」、 在文字輸入框打幾個字、 (不必登入) 勾選 「comment anonymously」、 點 「add comment」, 你的留言就出現了。 管理員也可以設定禁止 (或審查過才准發表) 匿名留言。 至於投票, 當然一定要登入, 算是簡單版的防止灌票。 畢竟我是因為官網強調尊重隱私而被吸引過來的, 當然就選擇自己架囉。 以下安裝設定筆記分別在 Debian 9 及 lubuntu 18.04 執行。 自己架的版本只成功了 http 而沒有 https。

2019年9月2日 星期一

gmail 打包檔一片亂碼? 交給 hypermail 轉成 html

每年暑假例行的 gmail 打包下載, 抓回來解壓縮後的 *.mbox 檔都是一堆亂碼。 如果從頭到尾都是 base64 編碼的內容那也還容易處理 -- 就用 base64 -d 指令即可解碼。 最煩的是: 在 *.mbox 裡面, base64 編碼的內容混雜鑲嵌在正常 ascii 文字當中。 偶爾需要回頭找前幾年的信件, 就必須用 mutt -f abc.mbox 之類的方式, 把每個 *.mbox 逐一手動打開來檢查。 今年終於找到救星: hypermail。 原來過去十幾年來, W3C 一直拿它來做通信論壇歸檔管理。 因為太穩定了, 所以很久沒有更新了, 在 ubuntu 套件庫裡面找不到, 只好去 github 抓原始碼回來編譯。

2019年8月22日 星期四

暫時隱藏 android 手機相片資料夾

近日開始, 從香港入境中國, 會被檢查手機。 其實有兩個簡單的方法可以暫時隱藏手機相片資料夾。 這是 security by obscurity (which is no security!) 用白話講, 這是很弱的偽裝, 只夠對付忙碌的第一線檢查人員; 如果一開始就已被盯上、 已被列入特殊觀察名單, 那麼這兩招其實是無效的。

2019年8月19日 星期一

網頁表格轉 csv, 瀏覽器 inspector 手動剪貼版

玩資料視覺化, 經常需要從網頁上下載表格, 再轉成 csv。 以前就曾搜尋到 sebsauvage.net 上面的 html2csv.py, 後來忘記了; 最近又重新發現一次。 很簡單: python2 html2csv.py abc.html 它會把 abc.html 裡面的所有表格串在一起, 產生一個 abc.csv 。 如果有合併列或合併欄等等比較複雜的狀況, 還是需要後續處理, 但至少比自己寫 regexp 簡單多了。 全文完。

下載 html 檔 喂~ 這樣就結束? 這篇未免太 ㄌㄢˋ ㄩˊ ㄔㄨㄥ ㄕㄨˋ 了吧! [現在有同音異字的成語太多了, 我都不知道國字該怎麼寫才對...] 至少應該要交代一下如何取得 html 啊。 如果是大量的靜態網頁, 可以用 wget 或 lynx -dump 或 curl 取得。 有可能需要 設定 user agent 才不會被網站拒絕。 如果是 javascript 所動態產生的、 上述指令無法取得的網頁呢? 如果頁面數量很多, 那就考慮用 puppeteer。 如果只是單一或少數的 [js 動態產生的] 頁面, 那就手動另存新檔就好。 可是有一些 js 頁面需要你點幾個地方之後, 才會動態填值進表格。 這時 firefox 的 console 就很好用了 -- 即使不是 js 程式設計師也值得學一下。

2019年8月7日 星期三

尺規作圖遊樂場 Dr. Geo

過圓外一點 C 做切線 CE 跟 CF 還記得小時候學的 (沒有刻度的) 直尺與圓規作圖嗎? 光用這兩個工具, 就可以畫出相似三角形、 三角形的外接圓/內切圓等等圖形。 這是很燒腦又很好玩的益智遊戲。 用電腦畫更好玩, 因為繪圖完成後, 你可以用滑鼠抓著原圖的頂點或圓心, 改變原圖 (例如三角形) 的大小/形狀/位置的同時, 看著衍生圖 (例如外接圓或內切圓) 跟著變動, 超有成就感! 十幾年前我寫過 DrGeo: 物理老師也會心動的幾何教學玩具。 後來 Dr. Geo 大改版; 幾個月前得知: 新版的 Dr. Geo 不僅支援中文顯示, 也支援中文輸入, 今天終於要來重寫一篇新版的介紹文了。

2019年8月3日 星期六

簡單語音指令辨識

完整的自然語言語音辨識很複雜; 但在很多應用場合中, 如果可以讓用戶以十來個簡單語音指令控制電器/電腦/apps, 就已經很方便了, 而想要訓練這樣的類神經網路, 門檻當然比完整的語音辨識低很多。 Simple Audio Recognition (以下簡稱 SAR 一文) 所介紹的 tensorflow 原始碼當中的 speech_commands 範例, 就是這樣的工具。 餵一段一秒鐘的聲音, 它會判斷這是 "yes", "no", "up"、 "down"、 "left"、 "right"、 "on"、 "off"、 "stop"、 "go" 當中的哪一個語音命令, 或是未知的聲音 (UNKNOWN) 或是無聲 (SILENCE) (其實可能是很小聲的背景噪音)。 假設讀者已經先照著 貴哥的 colab 初學筆記 認識了 colab 的基本操作, 今天這篇文章將接續著帶大家用 colab 把 speech_commands 的操作流程幾乎走一遍。

2019年7月13日 星期六

貴哥的 colab 初學筆記

Google colaboratory 提供短暫 (數小時) 的免費雲端 GPU 算力, 真是深度學習初學者的福音啊! 前提是你要有 google drive 的帳號, 並且略會操作 Jupyter Notebook。 網路上已有很多入門教學文; 貴哥一看到有 shell 可用, 忍不住就好奇多探索一些, 於是也寫一篇自己的初學筆記。 基於 「站在巨人肩膀上」 的原則, 比較多人介紹的基本操作就只簡單帶過, 細節可參考 台大機械所 Wei-Hsiang Wang 的 Colab 基本操作筆記 (中文) 及 fuat 的 Google Colab Free GPU Tutorial (英文)

2019年7月9日 星期二

「Docker pull 卡住不動」 的實驗計畫

不太確定為什麼, 偶爾會遇到 docker pull 抓映像檔抓到一半突然卡住不動。 很多人都遇過相同的問題, 而且很多年了都沒有解決, 到現在 Bounty Source 還在懸賞。 我在電腦教室特別常遇到這個問題; 可惜上課期間來不及研究。 這篇的目的是希望下次再遇到時, 可以做一些實驗, 確認一下到底是伺服器那頭的問題, 還是我們這頭的問題。 如果夠多人測試不同的排列組合, 並且到上述 issue 回報自己的排列組合, 說不定對開發者除錯會有一些幫助。

以下提到設定檔的地方, 都以 lubuntu 18.04 bionic beaver 為準。

2019年6月27日 星期四

文字檔控用 SQL 語法肉博 csv

我是奉行 unix 哲學 的文字檔控。 用 grep 從 csv 檔撈資料的時候突然想到: 可不可以改用 SQL 指令來查詢 csv 檔呢? 果然搜尋到 qtextql 兩個專案。 而且後者直接用 apt install textql 安裝就可以用。 這工具除了讓 SQL 老手可以很方便地檢索 .csv 檔之外, 也很適合拿來當作 SQL 語法入門, 讓初學者可以 (省略無聊而繁瑣的建立資料庫步驟) 在十分鐘之內單刀直入從 (比較有趣的) SELECT 指令開始學起。

2019年6月5日 星期三

avfs: 不必解開, 直接把壓縮檔當成目錄大搖大擺走進去

我每年會備份一次個人檔案。 硬碟上有歷年的 .tgz 備份檔。 有時需要把舊文件挖出來看。 問題是: 不記得我要的檔案在哪一年份的備份裡。 於是逐年 [解壓縮、 搜尋、 刪掉] 直到找到為止, 有點麻煩。 今天終於發現一招好用的方案: 採用 AVFS。

2019年5月12日 星期日

用 certbot 幫同網域下眾網站創建共用的 ssl 憑證

從去年起, chrome 已經開始把 http (沒有 s) 的網站標示為不安全了。 現代的站長一定要學會 用 let's encryp 把 http 網站升級成 https 網站 (中文)。 但是如果你 (1) 擁有同網域底下一整個艦隊很多個網站, 但是 (2) 懶得逐一申請, 而且 (3) 委託代管 DNS 或自管 DNS, 那麼就可以直接拿同一個憑證給同網域的所有網站共用。 例如我擁有 frdm.info, 委託 pchome 代管 DNS, 而且想要讓 abcdef.frdm.info 跟 uvwxyz.frdm.info 及其他子網域都共用同一組 ssl 憑證。 以下就是我的筆記。 也可以參考 Sam Tang 的中文文章 Saurabh Palande 的英文文章

2019年4月22日 星期一

已經是邊緣人不能再遺失手機通訊錄了啊!

先前手機摔壞了, 螢幕碎到不能看, 還好 adb 連線 還可以用。 於是用 scrcpy 從電腦操作搶救資料。 其中一個任務是要把通訊錄倒出來。 結果發現不知為何連 「通訊錄」 app 的匯出功能也壞掉了。 查看一下舊的匯出檔, 發現上次備份是三年前 orz。 可是電話跟簡訊 apps 明明都還看得見通訊錄, 顯然資料還在。 搜尋到 這個問答, 得知檔案放在 /data/data/com.android.providers.contacts/databases/contacts2.db 。 不過 /data/data 這個目錄需要 root 權限才可以進入。 把它 copy 到 /sdcard 底下, 再用 adb 或 primitive ftpd 把它傳到電腦上。 這是一個 sqlite 格式的檔案。 在 lubuntu 底下, 需要安裝 sqlite3 套件才能處理。 再下載 sqlite 轉 vcf 的 shell script, 最後終於成功地把通訊錄救出來。 還好我早已 幫手機取得 root 權限, 不然通訊錄就這樣毀了, 我會不會變得跟冥王星一樣邊緣啊~~ (抖)