顯示具有 regexp 標籤的文章。 顯示所有文章
顯示具有 regexp 標籤的文章。 顯示所有文章

2025年2月3日 星期一

把所有帳號的信件都接收到自己的伺服器上 (四): 郵件標籤/搜尋工具 notmuch

假設你已經 用 mbsync 之類的把郵件下載到自己的 linux 機器, 以 maildir 的形式儲存。 今天要介紹 debian 的 notmuch 套件, 它可以跟 neomutt 等等 MUA 搭配使用; 不過今天先只介紹在命令列上獨立使用 notmuch。

2025年1月10日 星期五

把所有帳號的信件都接收到自己的伺服器上 (三): 從 zimbra 匯出 csv 格式的通訊錄; 匯入 neomutt 與 posteo

延續 mbsync + neomutt + msmtp 這一篇, 接下來我想把 zimbra (使用多年下來系統自動建立) 的 「姓名 email」 通訊錄搬到 neomutt 跟 posteo。 先講心得: 過程當中用 csv 檔比較方便處理; 處理 vcf 檔的工具太少了。 反正最後要轉 vcf 很簡單。

2024年5月29日 星期三

tesseract 之數字表格圖片轉試算表 (最簡單的 OCR 應用)

雜食小股東的股利收入 老婆:「快點啦! 報稅軟體都幫你下載好了,快來算啦!」 好吧, 就用她的 windows 電腦一路 「下一步」 快速通關。 謝謝財政部。 可是身為很多家公司的小股東的她, 還想要把所有股利收入逐筆放入試算表。 問題是: 下載的 pdf 是圖檔, 讀不出文字! 幹嘛啊, 這又沒有保護作用, 只是增加納稅人的麻煩而已, 真沒意思。 沒關係, 那就把 pdf 檔搬到我的電腦, 用 OCR (optical character recognition) 工具來讀吧。

2023年8月10日 星期四

用 iptables 對付惡意幫派網頁爬蟲

前一陣子查看了一下我的 apache 伺服器的 access.log, 發現竟然有成群結隊 (來自同一網段) 的惡意網頁爬蟲在輪流攻擊, 用 fail2ban 逐一擋根本對他們太客氣了, 甚至不一定擋得到。 於是改成連坐處分, 直接用 iptables 永久封鎖整個網段, log 檔變得安靜多了。

2023年7月1日 星期六

台中市環保地圖

最近想要清家裡, 把一堆舊衣服、 舊電器、 電腦週邊等等拿去回收。 於是搜尋到 iTaichung 環保地圖。 可是它把每個店家獨立顯示在一張地圖上, 感覺很難用。 於是製作了 台中環保商店地圖, 把所有的店家放在同一張地圖上, 並且在這裡記錄一下步驟, 順便當作網頁爬蟲/資料視覺化的教材。

2023年6月25日 星期日

判斷字串長度是否為質數的正規表示式

讀到一個神奇的正規表示式, 竟然可以拿來判斷字串長度是否為質數?!
^x?$|^(xx+?)\1+$
"|" 的左邊很簡單, 只是在比對長度為0或者1的字串。

比較燒腦的右邊則是在嘗試比對 「長度恰好為 p*(q+1)」 的字串。 小括弧裡面的部分抓取 「長度至少為2的子串, 越短越好」。 這裡用 non-greedy 的 +? 而不是較常見的 (greedy 的) + 來表達「越短越好」。 後面的 \1+ 表示 「重複前面小括弧比對成功的同一字串任意次, 至少1次」。 如果小括弧內的字串長度為 p, 後面的成功比對次數為 q, 那麼整個字串的長度就是 p*(q+1), 不是質數。

用 python 寫, 程式長這樣:

import re
def is_prime(n):
    return not re.match(r'^x?$|^(xx+?)\1+$', 'x'*n)

def primes_up_to(n):
    return [ i for i in range(n) if is_prime(i) ]

primes_up_to(100)

這一篇 有更詳細的解說。

2023年4月29日 星期六

試算表的 unpivoting/melting

有些試算表它的許多欄位恰好構成資料空間的某種分割, 例如12個月份、 各類交通工具、 4種血型、 全國22個縣市... 等等。 有時候我們會希望把這 N 個欄位合併成兩個欄位, 一個欄位紀錄原表格中的欄位名稱, 另一個欄位紀錄原表格的內容, 從而產生一個 「比較瘦、 N倍高」 的新表格。 這個轉換動作稱為 unpivotingmelting 這篇文章 的圖很清楚, 大推! 也可以參考 用 google 試算表做 unpivoting 的中文教學。

2018年8月30日 星期四

用 lynx 加 perl 的 csv 句型從網頁裡的表格產生試算表

如果說 三大 regexp 句型 是 「懶得學 perl 程式語言的系統管理員必學的三句 perl」, 那麼今天要介紹的就是第四重要的 perl 句型: perl -F, -nale 'print join(", ", @F[2,5,6])' 姑且就稱它為 perl 的 csv 句型吧。 它跟文字瀏覽器 lynx 合作, 可以把網頁的表格抓下來變成試算表。 當你不想為了一點小事開啟 calc 時, 就用它們來馴服 .csv 檔吧。

2017年9月1日 星期五

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

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

2016年4月4日 星期一

fail2ban: 新手老手 root 網管都要練的金鐘罩

fail2ban 標誌 只要你所管理的 linux 伺服器掛在網路上, 就一定要學會使用 fail2ban 保護它。 fail2ban 讓你用最少的力氣同時對 ssh 跟 apache 施以最基本的防護、 抵擋暴力攻擊和收割機騷擾。 本教學文主要針對新手; 但後半所提供的一些小程式,對老手可能也有用處。 [2018/2/3] 保護 ssh 的其他更多招術包含: 禁止 root 登入、 允許登入白名單、 用非對稱加解密取代密碼 以及 連鑰匙孔都藏起來的 SPA

2015年7月22日 星期三

csv 轉 geojson : 大批地址匯入你的私房地圖

中華電信臺中直營門市地圖 手中有一串地址 (例如某連鎖店), 想把這些地點加入你自製的私房地圖嗎? 先把它變成 csv 檔 -- 也就是 LibreOffice Calc 或 Microsoft Excel 之類軟體能夠讀寫的純文字版試算表檔案格式, 然後按照本文步驟, 不必寫程式 (因為別人和我已經幫你寫好了) 只要下幾個指令, 就可以把這些地址變成你的 umap 或 mapbbcode 私房地圖上的地標囉! 又, 如果你手邊的地址本來就是存在 ods 或 xls 或 xlsx 檔裡面, 也請先把它改存成 csv 格式。

([2015/10/13] 發現另一條路: 先用 csvtojson 再用 jq 兩階段轉檔。但本文不談。)

2015年7月6日 星期一

備份/搬家/還原/大量複製 openvz 虛擬機

備份/搬家/還原/大量複製 openvz 虛擬機 如果單純只是想要備份還原一兩部 openvz 虛擬機, 「布丁布丁吃什麼?」 有兩篇圖文並茂的詳盡說明: 採用 proxmox 網頁介面 採用命令列。 但如果你遇到跟我一樣的狀況, 需要幫學生或客戶一口氣建立幾十部 openvz 虛擬機, 那當然就要採用命令列的方式比較快。 本文精簡地重述如何用命令列備份還原, 並且把重點放在 「批次/大量複製」。

2015年5月17日 星期日

遭 ssh 暴力攻擊的防禦實戰記錄

最近半個月我的主機遭 ssh 暴力攻擊狀況 如果你有用 ssh 連線在管理某些主機, 請一定要不時查看一下 /var/log/auth.log。 粗心散漫的貴哥管理系上教學主機已經十幾年, 竟然直到最近才注意到有人持續用暴力嘗試所有密碼的方式, 企圖入侵我的主機的 root 帳號, 有時每小時的攻擊嘗試高達兩千多次! 還好我的 root 密碼夠亂, 不然早就毀了。 不論你的主機有沒有遭到攻擊、 沒空研究的讀者請至少照著第一節做。

[2016/4/4: 改推薦 fail2ban]

2015年5月10日 星期日

遭收割機騷擾及採 iptables 防禦的實戰記錄

用 iptables 阻斷騷擾前後的流量變化 去年六月間發現我管的 penguin 主機速度變得超慢。 查了一下 log 檔, 發現有 e-mail harvester (e-mail 收割機) 在騷擾。 於是學會用基本的 iptables 指令防禦。 整理筆記分享如下。

[2016/4/4: 改推薦 「用 iptables 對付惡意幫派網頁爬蟲」fail2ban 這兩篇 ]

2014年9月17日 星期三

vim 學習地圖

vim 學習地圖 vim 編輯器超強。 跟其他自由軟體一樣, 這種 「學一次, 用一輩子」 的 長線學習投資 非常有價值。 但是學 vim 跟學 linux 或學英文一樣 (撇開三者份量差異不談), 最好的策略並不是要密集投入多少小時一口氣全部學會。 正好相反, 應該 從最常用的少數功能開始, 天天使用, 但是隔一段時間或有需要時, 才多學一兩個次常用的功能, 長期緩步累積。 所以越常用的功能就會越熟悉。 此外, 新舊知識拿來發揮 組合的力量 也是學習重點。 至於不想學 vim 的人, 至少也要學會 逃生動作

我參考 這一頁的用語, 按照 vim 最常用的幾大操作模式畫成一張圖, 並且做成了一份 sozi 簡報, 以下是簡要說明。

2014年8月27日 星期三

在 osmand 裡面管理我的最愛地點 (favorites/my places)

舊版 osmand 「我的最愛」 新版 osmand 「我的最愛」 (順便介紹如何將 google maps 所匯出的 kml 檔轉成 osmand 的 「我的最愛」。) 我經常北中南三地跑。 前一次打開 離線地圖 osmand 的時候, 可能是在臺中; 下一次打開卻是在高雄。 手動縮放地圖/手指旅行找到想看的地方, 這當然也可以當作一種具有地理學習意義的休閒娛樂啦; 不過更有效率的方式, 就是從選單找到 「我的最愛」 ("favorites") 功能, 再從地點條列清單裡面找到想去地點的附近, 直接叫 osmand 把地圖聚焦到那個位置。 ("show on map")

設定 「我的最愛」 有幾種方式。

2014年8月7日 星期四

line-singularize : 網頁內的指定清單/列表「單列化」以便利 regexp 後續加工

這一篇文章的主角其實並不是 regular expressions, 但是可能只有那些平時有在用 regexp 的朋友才會覺得有用。 面對大量的文字格式 (html/xml) 條列資料時, 經常只需要一個 perl 的 regexp 命令, 就可以把它捏成你要的格式 -- 例如把一個網頁裡面的條列資料變成可以匯入試算表或資料庫軟體的格式。 但是 regexp 處理資料時, 原則上 以列為單位 比較好處理。 (其實 perl 也有 -000 的選項可以處理 「以段為單位」 的資料, 不過還是比較麻煩。) 所以我用 php + querypath 寫了一支小程式 line-singularize 把 html/xml 當中的某些指定資料變成每筆一列, 以利後續餵給 perl -ne 或 perl -pe 處理。

2013年10月27日 星期日

用 graphviz 繪製 debian 套件相依關係圖

「最佔空間的一些套件」 之間的相依關係 到底我的 debian (或 ubuntu/antix/...) 系統裡面, 哪些套件最佔用空間? 它們彼此之間的相依關係 (dependency) 如何呢? 其實 apt-* 系列指令可以部分回答這兩個問題。 不過畫出來的圖大到完全無法理解。 這篇就來示範一下如何畫出類似右圖的結果, 並且順便練習一下 grep、 graphviz、 輸入輸出重新導向、 pipe、 命令結果代換等等, 再次展示 「組合的力量」。

2013年4月5日 星期五

搜括網頁實戰入門: 用 firebug 跟 QueryPath (php 版的 jQuery) 學 DOM 跟 XPath

用 firebug 觀察 html 你會固定去某些部落格或新聞網站查看或下載文章/資料嗎? 希望把這些動作自動化 (省略手動點連結的動作) 批次化嗎? 或是你想寫一些小程式定期觀察某些網頁的某些欄位? 也許你需要學習 Document Object Model 跟 XPath? 總之, 如果你需要寫小程式抓取並分析網頁 (web scraping), 那就讓 firebug 跟 QueryPath (php 版的 jQuery) 來幫你吧。 本文介紹的是 2.1.2 3.0.5 版。 [2016/9/8 改用新版 QueryPath 重新檢查過本文。 2.1.2 版要這樣引用 require_once 'QueryPath/QueryPath.php'; 而 3.0.5 版要這樣引用 require_once 'QueryPath/qp.php'; 本文只介紹很基本的功能, 所以除了以上及安裝方式不同之外, 沒有其他大修改。 ]

2011年2月9日 星期三

用 Perl 的 regexp 對 Quoted-Printable 字串編碼解碼

古代某些電腦無法處理 8-bit 字元, 只能處理 7-bit 的 ASCII 碼 -- 基本上就是英文、 數字、 鍵盤上的標點符號等等。 當時如果兩部中文電腦要交換資料 (例如收發 e-mail), 就必須先把 8-bit 的中文轉碼變成 7-bit 的 ASCII 字元 (當然, 就會使用更多 bytes), 以免傳遞路徑當中的英文電腦 把多出來的一個 bit 砍掉, 遺失資料。 Quoted-Printable 編碼就是其中一種很簡單的轉碼方式。 本文介紹如何善用 perl 與 od 這兩個簡單工具, 不必寫程式就能將 qp 碼與 8-bit 碼互轉。

(沒有力氣讀完全文的讀者, 請至少要看一下 結論, 欣賞一下 「三句神功」 的成果有多麼精簡。)