2010年2月27日 星期六

為何要使用 CPANMinus

因為原本的 CPAN Shell 啟動時間慢,累贅的資訊太多,太多 Prompt,且對新手來說,太多預設設定要做,但新手只是需要儘快準備一個完整的開發環境來寫 Perl 程式碼而已!然而 CPAN Shell 由於太古老,該程式碼已經相當難維護、整理,所以一直沒有良好的修正。更別說是 CPANPLUS ,CPANPLUS 本身又相依於一堆模組,簡直是疊床架屋,對新手來說,安裝好 CPANPLUS 甚至要花上 10 分鐘!

所以 Miyagawa 寫了 cpanminus ,這個模組 CPAN Shell 啟動時間相當的快,而且不相依於其他累贅的模組如 Moose... :-P

cpanminus 只需要你有一個 C Compiler, Module::Build , ExtUtils::MakeMaker (Perl 都內建了), 甚至直接內嵌了 HTTP::LIte 模組。

所以安裝 cpanminus 根本不需要花上超過 3 秒的時間!想想看你在升級 CPAN 或是 CPANPLUS 的時候多麼痛苦!!

再來,常有使用者提出若無 root 權限,該如何安裝 CPAN 模組,這個問題一直是長期以來困擾大家的!而且又無完善解法。

只要以非 Root 使用者執行 cpanm 安裝模組,該模組自動會裝到 home 目錄底下 ~/perl5 ,也不需另外自行設定!

安裝方式相當簡單:

cd ~/bin
wget http://xrl.us/cpanm
chmod +x cpanm


這樣就可以了,因為 cpanm 只是一個單一的執行檔!

使用方式:

cpanm Module
cpanm MIYAGAWA/Plack-1.0000.tar.gz
cpanm ~/mydists/MyCompany-Framework-1.0.tar.gz
cpanm http://example.com/MyModule-0.1.tar.gz
cpanm http://github.com/miyagawa/Tatsumaki/tarball/master
cpanm --interactive Task::Kensho


你也可以到 github 上取得最新的版本! @miyagawa ROCKS!!

http://github.com/miyagawa/cpanminus

2010年2月18日 星期四

使用 keychain 管理 ssh 金鑰

一般來說要利用 ssh key 來做 remote ssh login 的時候,就會需要用到 ssh-agent。大多使用下列命令來啟動 ssh-agent

$ echo `ssh-agent` > .agent

如此會將 ssh-agent 的環境變數如 pid 等等輸出至 .agent 檔案內。

接著使用:

$ source .agent

將 .agent 環境變數載入進來。

接下來再使用 ssh-add 命令來將私有金鑰載入:

$ ssh-add path/to/key1

在 ~/.ssh/config 內,加入

Host yourhost.com
IdentityFile path/to/key1

以告知 ssh 使用 path/to/key1 的 private key,但記得將 key1.pub (public key) 新增至 remote 的 .ssh/authorized_keys 檔案內。

前面所敘述的 ssh-agent 命令使用時常會遇到管理的問題,所以還得自己寫 script 檢查是否已有既有的 ssh-agent 正在運行等等之類的繁瑣事項。而 keychain 則是一套 script 可幫你處理這些問題。

在 ubuntu 底下安裝 keychain:

$ sudo apt-get install keychain

以 macports :

$ sudo port install keychain



使用方式很簡單,不需要自己 launch 一個 ssh-agent ,只需直接呼叫 keychain 命令將 private key 載入:

$ keychain path/to/key1

接著 keychain 會告知該 ssh-agent 環境變數的檔案位置,提供給不同 shell 使用的 script ,只需將該檔案的 path 加入至 .bashrc 或 .zshrc ...

$ source ~/.keychain/....blah

即可。如此一來每當開新環境時,就不需再去檢查 ssh-agent pid ,或有 ssh-agent,就直接使用既有的的,若無,則 launch 一個新的 ssh-agent 並且更新 ssh-agent 的環境變數。

以下是我用來載入金鑰的 script:



由於我都將 public key , private key 放置於 ~/.ssh/keys 內,該 script 用以自動將 private key 載入。

2010年2月2日 星期二

Vim - glob 應用

臨時需要將一目錄下所有的檔案插入為 img tag ,所以臨時直接在 vim command line 下寫了 這樣的東西來應付:


整理了一下:

2010年2月1日 星期一

Vim - TreeMenu.vim

This is a TreeMenu class for VimL. so that you can render a tree menu in a buffer.

Synopsis:


and you can also hook a method to after_render when each time the menu buffer is updated , just like what i do in hypergit.vim - I need to redraw git help message when the buffer is updated by tree menu.


Menu Source:

hypergit.vim (A Git plugin for vim)

最近的作品 - hypergit.vim。先前的 fastgit.vim 經過一些思考後,打掉重寫了,新增的 GitMenu 讓原本越來越的 Command 得以有組織性的以樹狀選單呈現,更 Powerful。

正為了要有一個樹狀選單,所以晚上以 VimL 實做了 Helper Message Class 以及 TreeMenu Class ,以方便其他各種 Plugin 需要用時重用。

該 Git Menu 可自動 Parse Remote 名稱 、Branch 名稱以產生 TreeMenu ,以及各 Menu Node 都可像 Nerd Tree Plugin 一般延展、收和,或執行。

以下是 Screenshot:


Well, It's still under development.