2009/12/24

Colorsvn 讓 SVN 一目了然

就像 colordiff 一樣,小小顏色卻能大大提高 diff 檔的可讀性。習慣用命令列 svn 指令的人應該會喜歡 colorsvn (http://colorsvn.tigris.org):


Ubuntu 的正式套件目前還沒有收錄 colorsvn,可用以下方法安裝:
  1. 到以下位置下載 .rpm 檔:
    http://www.console-colors.de/index.php?n=ConsColors.Downloads
  2. 利用 alien 來安裝 .rpm 檔:
    sudo alien -i colorsvn-0.3.2-1.noarch.rpm
  3. 在 .bashrc 增加 alias svn='colorsvn'
PS 1: 若你安裝完之後看不到顏色,請檢查是否有 `/etc/colorsvnrc` 或 `~/.colorsvnrc`。若沒有,可以下載 colorsvn 的 tarball,裡面有個 colorsvnrc-original,可以拿這個檔案出來用。

PS 2: 裝了 colorsvn 之後,svn diff 一樣沒有顏色,需要搭配 colordiff

2009/11/18

Subversion 的 Log

使用 Subversion 之類的 version control system 時,commit log 是非常重要的一項資訊。在你追查歷史時,可以幫助你回復記憶或幫助別人迅速理解 changeset 的目的。

但人吃五穀雜糧長大,打字難免會錯。因此,就有修改 commit log 的需求產生。Subversion 安裝預設是無法修改 commit log 的。以下是開放此項功能的方法 ($REPOS 代表 repository 的目錄):
cd $REPOS/hooks
mv pre-revprop-change.tmpl pre-revprop-change
chmod +x pre-revprop-change
若設定正確,就可以用以下指令來修改任一版本的 log:
svn pe -r 1234 --revprop svn:log $REPOS

svn ps -r 1234 --revprop svn:log "New commit log" $REPOS
若你恰好跟我一樣,也用 Trac 搭配 Subversion 時,正確的 log 更重要。因為 log 可用來搜尋 changeset。不過 Trac 上的 log 是你 commit 時,Trac 偷偷複製的。你改了 Subversion 的 log,Trac 並不知道,所以 Trac 上的 log 還是舊的。

解決方法是要求 Trac 重新校正 log:
# Trac 0.12 以前
trac-admin $PROJENV resync 1234
# Trac 0.12 及以後
trac-admin $PROJENV repository resync "" 1234
其中 $PROJENV 是 Trac 的 environment 位置;1234 是 revision number,若你改了很多 log,省略這個參數就可以全部一起校正。

每次手動校正 log 很麻煩,管理也不方便。所以可以將上述指令寫在另外一個 Subversion 的 hook script -- post-revprop-change:
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"
TRAC_ENV="..."

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then
PYTHON_EGG_CACHE=/tmp trac-admin $TRAC_ENV repository resync "" $2
# 若你的 Trac 比 0.12 版舊,請改用以下這一行
# PYTHON_EGG_CACHE=/tmp trac-admin $TRAC_ENV resync $2
exit 0;
fi
注意!上面的 TRAC_ENV 要設定到對應此 repository 的 Trac environment。

2009/11/01

由 Ubuntu 9.04 升級到 9.10 很不平順

由 Ubuntu 9.04 升級到 9.10 很簡單:執行 系統->管理->更新管理員,應該會看到 有新的發行版,只要按 升級 就可以將 9.04 升級到 9.10。

但升級後發現中文介面不見了,變成全英文介面。這倒還好,反正英文介面也是可以看中文文件。比較麻煩的是無法輸入中文。後來摸索了很久,終於研究出把中文介面找回來的方法:開啟 System -> Administration -> Synaptic Package Manager,點選 Installed 然後在 Quick search 輸入「hant」。這樣會列出所有已安裝的 Traditional Chinese 相關套件,全選這些套件然後 Mark for ReinstallationApply 即可重新安裝這些套件,重新開機之後便找回中文介面。

不過,問題還沒有完全解決。9.10 的輸入法引擎由 SCIM 改成 IBUS,我習慣用酷音輸入法搭配許氏鍵盤。但這種組合似乎還有 bug:會自動切回標準鍵盤。每次發生這種現象之後,就要重設一次鍵盤。又摸索了一陣子,終於找到解決方法:換回 SCIM。方法如下:
  • 系統->管理->語言支援
  • 鍵盤輸入系統 = scim
另外,升級到 9.10 也幫我解決不少 9.04 的問題:
  • 不支援 Asus 某款 NB 上的 Fn 功能鍵
  • 不支援上述 NB 的 Realtek High-Definition 音效控制晶片
  • Minicom 搭配某款 USB-to-serial adapter (/dev/ttyUSB0) 啟動時會有亂碼
總結:升級過程雖然有點不平順,但我還是 Ubuntu 的衷心擁護者,強烈推薦大家轉換到這個開放的平台。

2009/10/16

CuteCom 的 Input History

CuteCom 是 Linux 上相當好用的 terminal emulator 之一 (請參考 這裡)。他最大的特色是有一個 input history,會保存最近輸入過的指令,隨時可以點選取用。

比較討厭的是,輸入錯誤的指令也會佔據有限的 history 空間,令人想除之而後快。不過 CuteCom 似乎沒有提供刪除 history 的介面。後來找到一個解法,直接編輯設定檔:
vi .config/Unknown\ Organization.conf
修改最底下那行 History= 就可以了。

超好用的 colordiff

如果你跟我一樣習慣用 diff 來比較前後版程式修改了哪些地方,你一定也會喜歡 colordiff。顧名思義,它是有顏色的 diff -- 以不同顏色來顯示刪除或新增的地方,這讓 diff 的結果一目了然。

安裝方法:
sudo apt-get install colordiff
使用方式:
  • colordiff file1 file2
  • colordiff -u file1 file2 | more
  • colordiff -u file1 file2 | less -R
  • svn diff file1 | colordiff
若不想改變平常下指令的習慣,可以這樣做:
  • 在 .bashrc 加上一條 alias diff='colordiff'
  • 將 .subversion/config 的 diff-cmd 設成 colordiff
這樣以後 diff 和 svn diff 就直接變成彩色版了。

2009/09/13

在 Ubuntu VM 上安裝 VirtualBox Guest Additions

VirtualBox Guest Additions 能讓 guest OS 和 host OS 之間更緊密合作,也提供 guest OS 許多額外的功能 (例如和 host OS 分享資料夾)。想享受這些好處,請參考如下步驟安裝 VirtualBox Guest Additions。

首先,啟動 guest OS,並在所屬視窗的功能表上點選 Devices,然後再點 Install Guest Additions。注意!這並不會啟動安裝的動作,而是將安裝光碟插入 guest OS 的光碟機中。你必須手動執行安裝的指令。請用以下指令看看安裝光碟的內容:
sudo -s
ls -la /media/cdrom
註:若看不到任何東西,表示你的 Ubuntu 沒有自動幫你 mount 剛插入的光碟。請用以下指令自己來:
mount -t iso9660 /dev/cdrom /media/cdrom
若一切順利,你應該會看到幾個 VBox 開頭的檔案。然後,請執行以下指令:
/media/cdrom/VBoxLinuxAdditions-x86.run
如果你的 guest Ubuntu 才剛安裝完畢,上述指令應該會提醒你缺了哪些東西以至於無法安裝。以下是我剛安裝好 jeos-8.04.3-jeos-i386 之後所得到的「提醒」:
VirtualBox 3.0.6 Guest Additions installation
Please install GNU make.
Please install the build and header files for your current Linux kernel.
Ther current kernel version is 2.6.24-24-virtual
Please install the GNU compiler.
Problems were found which would prevent the Guest Additions from installing.
Please correct these problems and try again.
此時你必須發揮見招拆招的精神把這些問題解決:
apt-get install make
apt-get install linux-headers-2.6.24-24-virtual
apt-get install gcc
將缺少的東西補足之後,再執行一次 VBoxLinuxAdditions-x86.run 即可完成安裝的動作。

Reboot 之後,執行以下指令應該可以看到 guest OS 已經載入幾個 VirtualBox 的 kernel modules (如 vboxvfs、vboxadd 等):
lsmod | grep vbox
恭喜!這代表你已經大功告成了!

2009/08/28

在 Ubuntu 上設定 PPPoE 連線

在 Ubuntu 上設定 PPPoE 連線非常簡單,只要執行 pppoeconf 即可。它會一步一步詢問你所需要的設定,程序大致如下 (若要中斷程序,可以按 Esc):
  1. 首先找出機器上所有的網卡,如果沒有遺漏就可以進到下一步
  2. 接下來會自動偵測這些網卡的連線上是否有 PPPoE 伺服器 (PPPoE Access Concentrator)。若 MODEM 有開,網路也接對,應該會自動找到連接 PPPoE 的網卡
  3. 接下來會詢問你是否要用 noauth 與 defaultroute 兩個選項。一般來說,應該回答「是」
  4. 再來是輸入帳號和密碼,請查閱 ISP 給你的帳號資料卡
  5. 接下來會問你是否要使用 ISP 配發的 DNS 伺服器。一般來說,應該回答「是」
  6. 再來會詢問是否要限制 MSS。一般來說,應該回答「是」
  7. 接下來會問是否想在開機的時候就啟動連線。可看自己的需求來回答
順利的話,完成上述步驟時,PPPoE 應該就已經連接成功了。有以下指令可以操控連線:
  • plog => 查看 PPPoE 連線最近的 log,故障排除時很有用
  • poff => 斷線
  • pon dsl-provider => 啟動上述設定的連線
  • ifconfig ppp0 => 查看 PPPoE 連線的結果
內行一點的人,可以編輯 /etc/ppp/peers/dsl-provider 來微調上述設定。