Grep in vim

怎麼直接在 vim 裡面直接去 grep 檔案呢?
答案在這裡:grep.vim – Grep search tools integration with Vim
安裝步驟很簡單,下載以後,把 grep.vim 丟到 $HOME/.vim/plugins (Windows 就是 c:\documents and settings\your_name\vimfiles\plugins)。
接著就是設定啦,打開你的 $HOME/.vimrc (Windows 是 c:\documents and settings\your_name\_vimrc ),加入下面設定,主要是告訴 grep.vim grep 與 find 的路徑。因為我是用Native Win32 ports of some GNU utilities,又安裝在 c:\tools,所以就是:

let Grep_Path=’C:\tools\UnxUtils\usr\local\wbin\grep.exe’
let Grep_Find_Path=’C:\tools\UnxUtils\usr\local\wbin\find.exe’
let Grep_Xargs_Path=’C:\tools\UnxUtils\usr\local\wbin\xargs.exe’
let Grep_Skip_Dirs=’CVS’
let Grep_Default_Options=’-ir’
let Grep_Cygwin_Find=0
let Grep_Null_Device=’NUL’
let Grep_Shell_Quote_Char=””

完成這些步驟之後,重新打開vim,就可以用 :Grep your_pattern 來進行搜尋了。
搜尋的結果,vim會切割出另外一個 Windows 來顯示(通常在下面),你可以切換到該視窗(ctrl+w j),直接瀏覽搜尋結果,如果確定該行是你要的結果,也可以直接按下 Enter,vim 就會自動打開那個檔案並移到該行去。
這比你利用 console 去 grep,再手動切回 vim 來開檔要快多了。
如果要關閉搜尋結果,輸入 :cclose 就可以關閉。
:copen 是打開搜尋結果。
:colder 是切換到上一個搜尋結果。
:cnewew 是切換到較新的搜尋結果。
更多的用法,可以參照官方網頁

cvs2cl.pl

早上試了半天,怎麼樣都無法讓 cvs log 輸出成比較美的樣子…
後來還是請 Google 大神幫忙,很快他就告訴我,可以用 cvs2cl.pl 這個 perl script 來幫忙。
由於我是在 CygWin 下執行 CVSNT,所以我稍稍修改了一下 script,將這行

my @log_source_command = qw( cvs log );

修改為

my @log_source_command = ( “/cygdrive/c/program files/cvsnt/cvs”, “log” );

果然很快就搞定了~~
輸出的結果果然就跟坊間的 ChangeLog 一樣。
Note:
Perl 的 qw( ) 會把內容拆成字串陣列,所以 qw( cvs log ) 會被拆開成兩個字串 “cvs” 與 “log”。
非常感謝這位大德的投影片

以 script 產生 5000 首 mp3

5000 首 mp3 ?!
去哪裡生啊,靈機一動,不如使用 script 來產生,快又有效。
最早的一個版本是拿一個樣板的 mp3 來複製,可是又怕內容有版權問題,所以後來改用 Text to Speech 的軟體來將文字轉成聲音…
我的環境:Fecora Core 5
會用到的套件:Festival (text2wave)、lame (轉 wave 為 mp3)、id3tag (為轉好的 mp3 上 id3 tag)。
程式碼如下:

#!/bin/sh
#
# run2.sh
# This script is used to generate short songs.
# You can decide how many songs should be generated by modify LIMITSONGS variable.
#
# Dependency:
# festival (Text to speech by text2wave)
# lame (convert wave to mp3)
# id3tag (tag the generated mp3)
#
# Tested environment:
# Fedora Core 5
#
ITER=1
LIMITSONGS=5002
((TOTAL=LIMITEDSONGS – 1))
while (($ITER text.txt
text2wave -F 19200 -o $WAVEFILE text.txt
lame $WAVEFILE $NEWFILENAME
id3tag –artist=$ARTIST –album=$ALBUM –song=$TITLE –genre=classic –track=$ITER –desc=”generated by script.” –total=$TOTAL $NEWFILENAME
((ITER = ITER + 1 ))
rm -f $WAVEFILE
done
rm -f text.txt
echo “done.”

LIMITESONGS 用來控制要產生的數量。
TEXT 則是要說的文字,目前 festival 還不支援中文,所以只能放一些英文字串。
托福,也因此我學到 bash script 裡面可以運算變數內容,作加減乘除,以前我以為只能運算文字內容而已,真的是不經一事不長一智。

錯誤 1935

在某些時候,安裝 .Net framework redistributable package 會失敗,出現如下的錯誤訊息:
錯誤 1935。An error occured during the installation of assembly component {….}. HRESULT: -2147319761.
netframeworkinstallation_1935_error
這時候你可以參考這位大老寫的剖析,相當清楚:Troubleshooting 1935 and 2908 errors during installation
我(或者應該說是我朋友)遇到的情況是用如下步驟就可解決:

  1. 將 %windir%\system32\mscoree.dll (在 Windows 98/me 上是 %windir%\system\mscoree.dll) 更名。
  2. 如果 %windir%\system32\urttemp 存在的話,刪除掉。(在 Windows 98/me 上是 %windir%\system\urttemp)
  3. 重新執行 .Net framework redistributable package 安裝程式

sp_attach_db

用法很簡單…

EXEC sp_attach_db @dbname = N’pubs’,
@filename1 = N’c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf’,
@filename2 = N’c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf’

在 osql command line mode 下輸入以後,記得再輸入 go,表示執行指令。
參考資料:

冷泡茶

兩三年前在看電視的時候,就發現了冷泡茶的方法。

後來經過實驗之後,的確蠻好喝的,可以幾乎 100% 複製出回甘的感覺。

方法如下:找個寶特瓶,抓適量茶葉丟進去,加開水,丟到冰箱,放置約五到六小時就大功告成。以 600 cc 為例,茶葉的量約半個掌心。

注意事項:

  1. 不要拿茶包,拿好一點的茶,否則你永遠也別想泡出好喝的冷泡茶。
  2. 不要用熱開水或溫開水,要用冷開水。
  3. 不要丟在冰箱太多天。

SELinux tip

今天要用到時,才驚覺以前的筆記居然不見了…,努力回想了好一陣子,才想起來。
一般來說,如果不熟的話,最好是關掉 SELinux 選項。
那我為甚麼要用?…..別問了吧….
SELinux 的 policy 真的是複雜,複雜到我實在是不太想看下去。
這裡有個簡單的方法可以幫你產生 policy,首先,先去執行被 SELinux 阻擋的程式,然後執行
#audit2allow -d -o xxx.policy
這會產生 xxx.policy
接著把這個檔案複製到 /etc/selinux/targeted/src/policy/domains/misc/local.te
切到 /etc/selinux/targeted/src/policy/
執行 make reload
這樣就大功告成了。
p.s. 我的環境是CentOS 4.3,RHEL、WHEL、Fedora應該都差不多。

2006續約的考量

本來有想要把線路升級成 2M/256k,可是在仔細考量之後,發現我根本用不到那麼多,所以決定還是維持原樣:1M/64k。
然後把月繳改為年繳,預期可以更省下一些上網費用。
1M/64k:
月繳:219 x 12 = 2628
年繳:2292
2628 – 2292 = 336
電路費:410 x 12 = 4920
如果是用 2M/256k:
月繳:259 x 12 = 3108
年繳:2688
3108 – 2688 = 420
電路費:440 x 12 = 5280

Porting

也許移植一個 .Net application 到其他平台上,並不如想像中容易。
正如 Java application 並不是 100% 的 run anywhere。
Mono專案的頭頭最近把Paint.NET移植到 Linux 的Mono上,你可以看看這篇他的文章:Porting Paint.NET to Mono
看到這個標題,我是很高興的,可是看完以後,發現移植的過程曲折離奇,其中的過程頗值得玩味。