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

2011年5月22日 星期日

小技巧: 用看不見的字元分隔資料

處理文字時, 偶而會需要將類似的東西串在資料庫表格的一個欄位裡或文字檔的一行文字裡。為了避免分隔符號和別的文字衝到, 從同事 P 那學到一個不錯的小技巧: 用看不見的字元分隔, 比方說 unicode 的 1 ~ 5 等。

用 Python 寫就是 "\u0001", 用 mysql 則是 char(1), VIM 會用 ^A 表示 (\u0002 則用 ^B), 最妙的是, Firefox 會用一個小方格在裡面填入 0001 表示它, 所以寫到資料庫後, 用 phpMyAdmin 看也不會有問題, 真是太貼心了。通常為了方便, 可能會用 "\u0001\n" 表示, 這樣在 phpMyAdmin 裡看時, 也會換行表示。

其它應用方式, 像是填入字串表示未定義時, 可以用 "\u0001UNDEFINED", 避免單用 "UNDEFINED" 可能會和這樣的內文衝突。而要用 mysql 取值時, 可配合 concat 表示: concat(char(1), "UNDEFINED")。

2010年3月19日 星期五

python -m SimpleHTTPServer: 測網路的好幫手

昨天才從 victor 那看到 Top Ten One-Liners from CommandLineFu Explained, 今天就用上其中一條。

測兩台機器之間是否網路正常、無防火牆阻檔, 最好的做法就是立即跑個 server, 從 client host 用 telnet 連線看看。於是在 server host 打下面的指令, 就會有個簡易 web server 跑在 port 8000:
python -m SimpleHTTPServer 8000

再從 client host 打下面的指令連到 server:
telnet SERVER_HOST 8000
正常來說會有「Connected to ...」的字樣, 接著隨便打串字按 enter 後會收到回傳 400 的網頁。

python 內建這種模組也挺不錯的。

2010年2月18日 星期四

用 rlwrap 幫任何命令列工具加上 code completion、command history

用慣 shell 後, 用命令列工具時總想按個 tab 就補完指令, 按上下就能搜尋過去打過的指令。遺憾的是, 不是每個命令列工具都支援這個功能。沒關係, 你的心聲 rlwrap  (readline wrapper) 聽到了!!

在 Ubuntu 下安裝 rlwrap 的方法是.....沒錯, 和你猜的一樣:
sudo aptitude install rlwrap
啟動方式是:
rlwrap ARGUMENT COMMAND
以 sqlite3 為例, 啟動方式是:
rlwrap -a -r sqlite3
-a 表示不管原本的程式是否有用 readline, 都改用 rlwrap。 -r 表示記下所有打過和螢幕上出現的字彙。如此一來執行 「select * from my_table;」之後, 可以直接按 tab 補完 column name 或 table name 。

另外可以編輯 /etc/rlwrap/sqlite3 存入關鍵字 (如 select、where、limit), 這樣每次執行指令時都能自動補完這些字。檔案格式是一行一個字。rlwrap 會到 /etc/rlwrap/COMMAND 找預設關鍵字, 也可另外用 -f FILE 指定關鍵字。

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...