2009年11月29日 星期日

Twitter Stream

最近幾個月 Perl 社群最流行的就是 AnyEvent 的相關應用,Twitter 也不例外,利用這個 Net::Twitter::Stream 模組,可以即時取得最新的 Tweets,你可以設定你想要過濾的關鍵字,以下是範例:


想玩的人可以直接 copy 下來把 $user 以及 $pass 改掉就可以用了。 :P Perl 真的相當適合懶人呀,由此可知我就是個懶人。

2009年11月28日 星期六

VIM is not ...

很多人都問我說 vim 裡頭為什麼不能在 tab or buffer 裡面開一個 shell ... here is the answer:



也就是說,Vim 不是一個作業系統也不是一個 Shell,跑一個 shell 在編輯器裡面會是有點詭異的。他不會像 Emacs 那樣試著把所有東西納入進來,譬如說讓你收信、玩遊戲或什麼之類的。

當然你想要在 Tab 或是 Buffer 開一個 shell 也是可以的。內建的 shell 透過 :sh 命令可以開啟一個很簡陋的 shell 在 vim 裡頭。若要在 buffer 或 tabpage 可使用其他 plugin 來達到,譬如說 : shell.vim , shellinsidevim.vim.

使用 Git 管理自己的 dotfiles

什麼是 dotfile 呢?dotfile 就是你的那些 dot 開頭的檔案,譬如說 `.vim` `.vimrc` `.emacs.d` `.bashrc`

其實作法很簡單,先建立一個資料夾,初始化 Git repository,建立一個 Makefile 來自動產生 link。


然後撰寫你的 Makefile:


記得建立 .gitignore 來忽略你不想納入版本控制的檔案: .gitignore

vim/view/

然後現在你有自己的 Git Repository ,你可以把它 push 到任何其他的 remote (參見 git help remote 命令)

到了別的機器上頭,你只需要:

git clone git@host:/path/to/repo
cd repo
make init

即可初始化完成。

所以我寫好了這樣一段的 script 來自動建置環境:

Vim: some binding

I added this:

billw.vim colorscheme (improved)



最近使用的 Vim Colorscheme: billw.vim . 做了點小修改,Folded 以及 FoldColumn 比較不會這麼魗, 放到 `~/.vim/colors/` 裡頭即可使用:

Yi - A Haskell Text Editor


這是聽 MC 說才知道的。 Yi 這個編輯器全用 Haskell 寫成,並且提供多種編輯器前端,其中包含 ( vi , vim , emacs , nano .. )。所以你的 plugin 就可以用非常 powerful 的 haskell 來寫。 :P 聽起來非常有趣。

不過編輯器究竟還是編輯器,能生東西出來最重要。

2009年11月27日 星期五

I do hate Vim script

Actually I do hate Vim script.

Vim script has annoying multi-line declaration:

so if you get a large list to write , things like this will drive you mad.

In Vim script, we can't call another autoload function from the other. and object inheritance is using copy() function to copy another object.

and everyone is writing its own window manager code and helper functions in their plugins , it's totally redundant.

and why we should write capitalized function name ??!! why command name should start with an uppercase letter ?!

zsh prompt 加上 git branch

總之,我加上了幾行像這樣的東西:

2009年11月26日 星期四

perl-completion.vim now supports simple context completion.

Perl completion vim plugin now supports simple context completion. you can now declare a object variable that simply returned from a 'new' constructor of class.

It can't work out for variables that have the same name. it's not very smart but enough for scripting.

I think "Padre" has some good stuff i could borrow from.

2009年11月25日 星期三

Using Shipwright to build VIM::Packager bundle package

Shipwright is a good utility for solving CPAN dependency problem (not hell anymore) . all dependencies could be bundled together.

this is how i build VIM::Packager bundle package with shipwright:


so the installation of VIM::Packager bundle binary could be:

$ perl vim-packager-bundle.bin

Basically , Shipwright module creates a repository to import other cpan modules into the same space. the repository could be SVN , GIT ... etc.

At the end, we checkout the repository , and execute shipwright utility to build module installer. (vim-pacakger-bundle.bin)

2009年11月21日 星期六

Vim - fastgit.vim

最近一直在把 vimrc 整理出來,目前全都在 github.com 上面,歡迎自由取用:


剛剛整理好的是 fastgit.vim ,陸續在整理中。同時也歡迎任何的 feature request. :D

Unit Test for Vim Script

於是寫了一個 VimL 的 Unit Testing

2009年11月20日 星期五

Blogger-comment.js



記得以前寫了一隻很爛的 blogger comment toggle javascript. 因為換 template 爛掉,所以剛才花了一點時間重寫了。

直接放上 github (天阿好害羞):

http://github.com/c9s/blogger-comment.js

使用方式很簡單,只要新增一個 html/javascript widget ,然後將以下的 html 貼入即可:



# 另外要注意的是,Comment link 的 class 必需要有 ".comment-link" 才行。

Git - Alias

Git 的 Alias 非常彈性,你甚至也可以自己寫 script hook 成 git 的 sub command,我的 ~/.gitconfig 如下:



事實上我還寫了一個相當骯髒的 bash function:



懶人如我,只要確定自己修改了哪些部份,直接在 shell 底下 $ ci [commit message] 即可。(也不用加引號。)

這樣就無須另外啟動編輯器,commit 秒殺。XD

Git - 列出樹狀結構的 Log

這邊看到了這樣的一組 Alias



優點是 1. 樹狀結構,可以看到每個 commit 的 refer。 2. oneline message , 3. 豐富的色彩 4. commit id 以及時間。

借用一下人家的 screenshot:

2009年11月19日 星期四

VIM::Packager 使用

Vim script 有時候是非常煩人的東西,因為你每次都需要把他們一一複製到你的 VIM Runtime Path 裡頭 (通常為 `~/.vim`):

所以假設現在要安裝 cpan.vim 這個套件,那麼就得這樣做:

# go to libperl.vim page , download the libperl.vim file
# copy libperl.vim to ~/.vim/autoload/

# go to search-window.vim page , download the search-window.vim file
# copy search-window.vim to ~/.vim/autoload/

# download cpan.vim
# copy cpan.vim to ~/.vim/plugin/

# config .vimrc to usage cpan.vim

以上這些都還不是小問題,問題是 vim script 裡頭並不是每個檔案都標記了版本資訊,所以有時候換上了新版的 plugin ,可能導致其他東西爛掉。

另外一種方式是 Vimball , Vimball 的方式相當好,但是並不是每個寫 plugin 的人都懂得如何使用 vimball , 再者 vim.org 並不規定你一定要用 vimball 才可以上傳,而且 Vimball 還是有他侷限的地方。

VIM::Packager 就是幫你做這樣的事情,安裝 cpan.vim 可以相當容易:

$ cd cpan.vim
$ vim-packager build # 讀取 META 檔案 (包含 相依性資訊、套件名稱、版本、Vim 相容版本 ... etc ) 接著產生 Makefile
$ make install # 為你安裝所需要的相依套件,並建立紀錄

若要移除:

$ make uninstall

使用 VIM::Packager 建立 Plugin


步驟相當簡單,先建立作者資訊

$ cat > ~/.vim-author
author: Cornelius
email: cornelius.howl@DELETE.ME.gmail.com
^D

$ mkdir your-plugin.vim
$ cd your-plugin.vim
$ vim-packager init # 這樣會為你產生 META 檔案、以及建立所需要的資料夾,並且利用範本為你建立文件

$ vim META # 編輯套件資訊 (你還可以在 META 裡面加上 =script_id ,script id 對應此套件在 vim.org 的 id ,每當要釋出新版,便可以直接上傳 )

META file 的格式相當簡單,請看:


接著只需要再加上 plugin 的版本資訊即可:

$ vim vimlib/plugin/your-plugin.vim # 加上 『 " Version: 0.1 』 版本資訊
$ vim-packager build # 便會產生 Makefile

$ make dist # 幫你用 tar 打包起來

$ make bump # 提昇版本

$ make upload # 自動上傳到 vim.org

以上三個動作現在可以直接用 $ make release 串起來,也就是:

$ make release # tar 打包、提昇版本、自動上傳一次做到好。


當你在開發的時候,你也可以不需要安裝,可以利用 ln 來幫你直接連結到正在開發的檔案:

$ make link

或是

$ make link-force # 強制連結

Migrating svn repository to git

要將一個標準的 subversion repository (含有 trunk/ , branches/ , tags/ ) 轉移至 Git 其實相當容易。

$ git svn clone --prefix=svn/ --stdlayout http://example.com/svn

這樣 git 會自動將這些 Mirror 下來。

不過 git-svn 不會幫你處理 merge 的相關資訊,所以這個部份需要自己手動處理。若沒有讓 git 知道哪些 branch 曾經在哪些版本合併過,待你直接下 git merge [branch] 就會 conflict 到死。

假設我們有一個 subversion repository,rev1 的時候建立專案 , rev2 的時候開了一個 branch , rev3 的時候修改 branch , rev4 的時候把這個 branch 合併至 trunk。如果這些動作使用 git-svn clone 回來,那麼在 rev4 會遺失 rev3 的合併資訊只留下 rev1 為父節點的資訊。但事實上 rev4 的父節點應該是 rev3 以及 rev1 才對。

為了解決這個問題,git 的 repository 底下有一個奇妙的檔案叫做 .git/info/grafts ,這個檔案用來存放節點合併的資訊。

.git/info/grafts 的基本格式如下:

[合併版本] [合併目的] [合併來源]

假設我們剛剛的操作,有以下版本紀錄:


1 85de8c02f0b649dcdbbb0fb5045205900a28afac
2 1f47e9b22c0b4967a9338fd32ebbe745d769f0bc
3 f0bbdbf01a46f4bb0f79f330a7603ad1aca3bd40
4 1a0a6e58a2f6905b2165f6bad973b4c85356e100

那麼在 graft 底下可以這樣寫:
1a0a6e58a2f6905b2165f6bad973b4c85356e100   85de8c02f0b649dcdbbb0fb5045205900a28afac  f0bbdbf01a46f4bb0f79f330a7603ad1aca3bd40



這時候:

$ gitk

便可以看見合併的節點如何被相連起來

$ git merge [branch]

便不會 conflict。

VIM::Packager

VIM::Packager , 最近在寫的東西。 主要是為了彌補 Vim 本身對 script 安裝以及相依性問題的不足,另外再加上一些輔助開發的 makefile script.

可利用 $ vim-packager init 來產生 vim plugin 所需要的 skeleton ,以及 $ vim-packager build 來產生 Makefile 等等。

2009年11月18日 星期三

2009年11月14日 星期六

perl-completion



http://github.com/c9s/perl-completion.vim

which is defined with omni-completion. when filetype is perl , the completion function will be binded. this plugin completes function names for you and also base class function names.

you need to install VIM::Packager first, it solve dependencies for you. the depended scripts will be retrived from an url , which is on github.com.

remember to add path ~/.vim/bin to your $PATH env variable to make sure vimscript can find the scripts. the parsing utils will be installed in ~/.vim/bin/.

$ sudo cpan VIM::Packager

# run vim-packager to convert VIM meta file (VIMMETA)
$ vim-packager build
$ make install

just press C-x C-o after a $self-> or Package::Something-> to pop the completion menu up when you are in perl files.
and you can also integrate this to your autocomplpop plugin.

will support Moose TypeConstrant , Accessor completetion in future.

2009年11月8日 星期日

Vim User 買鍵盤,要注意的事項

Vim User 買鍵盤,除了鍵盤觸鍵、Layout 之外,一定要注意的事項:

1. ESC 好不好按:因為要從 insert mode 跳回 normal mode 這是一個非常常用的按鍵。不過如果你已經買了一個 ESC 非常小而且非常難按的鍵盤,你還是可以用 Ctrl-C 來跳回 Normal Mode. 像是中國牌子 Lenovo 的 X61 或是 X200 的 Esc 個人覺得非常不好按。

2. Shift 鍵的鍵深:如果買了一個鍵深較深的鍵盤, Shift 鍵會影響到你在下 :wq 的時後會不會變成 :Wq ( 我常常因為按太快變成這樣 ) 這樣的結果就是 Command Not Found .. 解法是自己 map 一個 command:

com! :W :wq

或者直接用 :x 也行的。

# kana 提到說其實也可以用 nnoremap ; : 解決 shift 的問題。我之前也用過一陣子,不過為了 ; : 兩個鍵調換,其實還蠻多東西要調整,會影響到其他的 map.

4. Function Key 好不好按:因為你可能會 bind 很多快速鍵到 F1-F12 上頭,如果 Function Key 也小到黏在一起,會造成你的痛苦。


Vim - mode line for todolist

有時候會想在 todolist 裡頭也能夠使用 fold 將每個 item 的 description 都 fold 起來只留下 header, 我之前寫了這樣的一小段 vim script: (至於為什麼字串要分開是因為怕讀 vimrc 的時候當成 modeline )


只要下 :Itemfy 指令,自動會將 current file 加上這行 modeline。 :-)

2009年11月7日 星期六

Firebug Command Line and Console Object

which is very useful.

http://getfirebug.com/commandline.html

http://getfirebug.com/console.html

2009年11月3日 星期二

臭阿宅根本沒有心

看到 cyberfay 大正姊的這篇 「不會等公車的阿宅」,這文章真是可愛又好笑。
而以女性的觀點來看大部分女孩子對男友的期待是:
「他要是真的有心就應該要想到啊!」
(這是我最常在女性聚會中聽到的)
女性會覺得一位男性要是真心在乎她
就自然而然會設想到這些事情
其實我反覆思索後常也覺得這些臭阿宅根本沒心
只是這顆心是綠野仙蹤裡機械人的那顆心
大部分的時候
阿宅只是不知該去往哪兒找
突然覺得,我以前好像也做過類似的事情耶,只是沒有這個那麼誇張啦。XD

不過,好像又看到了從前的我和你。

2009年11月1日 星期日