taglist的安裝與使用

自從使用 ctags 以後,看code方便多了。最近又看到taglist,心想或許可以讓看code的生活變得更美好,所以就來摸索看看。
首先到這裡下載最新版本。
解開以後,有兩個目錄,一個是 doc,另外一個是 plugin,把他們複製到你的 HOME 的 vimfiles 目錄下(舉例:c:\documents and settings\your_name\vimfiles\),然後在你的 _vimrc 裡面指定 Tlist_Ctags_Cmd 變數,這是用來讓 taglist 知道 ctags 的路徑。
我是把 ctags.exe 放在 c:\tools 下,所以是這樣寫:

let Tlist_Ctags_Cmd=’c:\tools\ctags.exe’

這樣就大功告成了。
使用的時候,

  • 用 :TlistOpen 指令把 taglist 視窗叫出來,用 :TlistClose 指令關閉 taglist 視窗
  • 用 :TListToggle 來打開或關閉 taglist 視窗
  • 可以用 ctrl-w h 與 ctrl-w l 來切換 taglist 視窗與編輯視窗
  • 開啟檔案以後,taglist會自動把 tag 資訊列在左邊視窗。

。
備註:
我沒在 Linux 下用過,安裝方法應該差不多;記得把 HOME 替換為 /home,vimfiles/ 替換為 .vim/。
Console 模式下,有比較特別,文件說,因為 terminal/console 不支援變動視窗寬度,所以要設置 Tlist_Inc_Winwidth 為 0。

vim 的設定與一些快捷鍵

參考了幾篇文章以後,調整出 gvim 設定 (_vimrc/.vimrc)的最終版本.我把這份設定列在最後,作為以後參考:

如果要看 c/c++ 的 code, 可以用 ctags 預先為 c/c++ 程式產生 tags 檔案.
用法:

ctags -R

接著在看程式的時候,先用

set tags=your_tag_file

載入 tags 檔案,遇到變數或函數時,就可以按 g ctrl+] 或 ctrl+] 直接跳到該變數或函數的所在位置.
要往返的話,就按下 ctrl+t 返回.
如果要找對應括號的話,可以用 % (shift+5).
ctags 也可以 parse c# 的檔案,換句話說,你也可以用他來看 c# 的原始碼.
以後看 code 就輕鬆多了,之前應該早點聽 Irene 的話來學這個…~_~
再配合 Vim Intellisense, vim 真的是無敵了…
以下是 gvim 設定


" 繼承預設的 gvim win32 設定
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin
" 當輸入文字時隱藏 mouse
set mousehide
" 自動載入 ctags 產生的 tags 檔案.
set tags=./tags,tags
" 不自動存檔
set nobackup
" 自動縮排
set autoindent
set cindent
" 顯示行列位置
set ruler
" 自動找對應括號
set showmatch
" tab 設置
set shiftwidth=4
set tabstop=4
" 語法高亮度
syntax on
" 把 tab 展開成空白.
" set et
" 相反地設定
" set noet
" 下面都是從這裡抄來的: http://edt1023.sayya.org/vim/node10.html
" 使用 :update 代替 :w,以便在有修改時才會存檔,注意,這和 vi 不相容。
map <F2> :up<CR>
map <F3> :up<CR>:q<CR> " 存檔後離開
map <F4> :q!<CR> " 不存檔離開
map <F5> :bp<CR> " 前一個 buffer 檔案
map <F6> :bn<CR> " 下一個 buffer 檔案
" 單鍵 <F7> 控制 syntax on/off。倒斜線是 Vim script 的折行標誌
" 按一次 <F7> 是 on 的話,再按一次則是 off,再按一次又是 on。
" 原因是有時候顏色太多會妨礙閱讀。
map <F7> :if exists("syntax_on") <BAR>
\ syntax off <BAR><CR>
\ else <BAR>
\ syntax enable <BAR>
\ endif <CR>
" 按 F8 會在 searching highlight 及非 highlight 間切換
map <F8> :set hls!<BAR>set hls?<CR>
" Toggle on/off paste mode
map <F9> :set paste!<BAr>set paste?<CR>
set pastetoggle=<F9>
map <F10> <ESC>:read !date<CR> " 插入日期
map <F11> :%!xxd<CR> " 呼叫 xxd 做 16 進位顯示
map <F12> :%!xxd -r<CR> " 回復正常顯示
" 原本就有的設定.
set diffexpr=MyDiff()
function MyDiff()
let opt = ‘-a –binary ‘
if &diffopt =~ ‘icase’ | let opt = opt . ‘-i ‘ | endif
if &diffopt =~ ‘iwhite’ | let opt = opt . ‘-b ‘ | endif
let arg1 = v:fname_in
if arg1 =~ ‘ ‘ | let arg1 = ‘"’ . arg1 . ‘"’ | endif
let arg2 = v:fname_new
if arg2 =~ ‘ ‘ | let arg2 = ‘"’ . arg2 . ‘"’ | endif
let arg3 = v:fname_out
if arg3 =~ ‘ ‘ | let arg3 = ‘"’ . arg3 . ‘"’ | endif
if &sh =~ ‘\<cmd’
silent execute ‘!""C:\Program Files\Vim\vim64\diff" ‘ . opt . arg1 . ‘ ‘ . arg2 . ‘ > ‘ . arg3 . ‘"’
else
silent execute ‘!C:\Program" Files\Vim\vim64\diff" ‘ . opt . arg1 . ‘ ‘ . arg2 . ‘ > ‘ . arg3
endif
endfunction

resize ntfs fail.

話說,在試過Ubuntu Linux之後,突然非常的想把 Linux 裝到 Notebook 上(不想用 virtual machine).
但是首先會遇到的就是硬碟問題,該怎麼多挖一塊空間出來安裝呢??
這方面,最老牌的當然是 Partition Magic, 不過我沒有這套軟體, 再者, 他也需要錢錢.
只好努力爬文找免費軟體來用,後來赫然發現,Ubuntu Live CD 本身就提供GParted這個強大的軟體了!!這裡有些有用的連結:

於是就照著步驟來作:

  1. 先磁碟重組
  2. 執行GParted

理論上至此,應該是收工了.
仔細研究以後,發現GParted底層用的是 ntfsresize 這個指令,而實際直接使用過 ntfsresize 之後,發現 resize 的確是成功的.但是需要你重新執行 fdisk 將 partition 刪除掉,再以新的 size 新建一個 ntfs partition.
而我,就錯在這裡,我砍掉了,我也重建了,但我在寫入前卻忘了指定 partition type 為原來的 ntfs,於是就這麼毀了……然後赫然忘了備份老婆的資料…
真是慘!!

How to Geotagg with Yuan.CC Maps

這是第二彈,剛剛發現薄荷大大再度推出新的 web application: Yuan.CC Maps.
這可說是要作 geotag 的終極武器啊…
他可以用 Google Maps / Yahoo Maps / UrMaps 來幫你找到座標定位,也可以順便登入 flickr 進行 geotag.
操作的方式,相當簡單,滑鼠按住,移動….你會看到右上角有座標會隨著你的移動而變化.
Yuan.CC Maps(3)
得知座標以後,就可以在 flickr 上傳照片的時候,加上 geotagged lat=nn.nnn lon=nnn.nnn 以註明此照片被 geotagg 過了.
此外,你也可以直接登入 flickr (註1),先把 filter tag 選成 None,選到你要作 geotagged 的照片,然後移動地圖到你拍照的地點,接著按下右下角照片下方的按鈕: “save location”,這樣就大功告成了.
然後就可以瀏覽照片在地圖的位置:
Yuan.CC Maps(1)Yuan.CC Maps(2)
如何,很不錯吧~
🙂
備註:
1. 第一次登入 flickr, flickr會要求你允許 Yuan.CC Maps 可以操作 tag, 這時候要按下允許(Allow).
參考資料:
1. Blog of Flickr Hacks: Yuan.CC Maps

How to Geotagged with Google earth

太過肉麻的開場白就不介紹了.
薄荷的 blog介紹的很多,也很清楚,不妨直接參考這篇:歡迎加入 Geotagged: Taiwan 群組.
步驟:

  1. 下載Google earth,這裡有三種版本,後兩種是要付費的,選擇第一個免費的版本下載即可.然後進行安裝.
  2. 打開Google earth,進入 [tools][options] 依照下圖調整座標顯示方式.
    GoogleEarthOption
  3. 尋找照片所在座標位置,找到以後,把左下角的位置抄起來.如下圖
    GoogleEarthLocation
  4. 接著上傳照片到flickr,上傳以後,加上 tag.
    Geo Tags 的格式:
    1. geotagged , 這個 tag 一定要加, 用來辨識這張相片有經緯度.
    2. geo:lat=25.011824, 這是北緯 25.011824
    3. geo:lon=121.527103, 這是東經 121.527103
  5. 大功告成

參考資料:

cygwin 與 nxclient

今天碰到有趣的情況,cygwin 起不來,錯誤訊息是這樣的:

You have multiple copies of cygwin1.dll on your system.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version. The most recent version *should*
reside in x:\cygwin\bin, where ‘x’ is the drive on which you have
installed the cygwin distribution.

也就是說,有多份 cygwin1.dll, 要記得留這份喔(c:\cygwin\bin\cygwin1.dll)…
可是…我找遍整台電腦,也就兩個 cygwin1.dll
一份是 nxclient 用的,一份是 cygwin 用的,可是目錄完全不同,怎麼樣也不會搭到一起.
沒辦法,只能召請Google大神上身幫忙.
果然應驗如神,大神告訴我,有人遇到這種情況了…
原來是因為記憶體裡面有 cygwin1.dll 殘留而導致.
我打開”工作管理員”來查看,果然有這麼一個 Process: cygserver.exe
將他結束掉之後,就沒問題了.
可是,是誰把這個 Process launch 起來的呢?
是 nxclient, 他結束掉以後,並沒有將此 Process 也一併結束掉,所以才會有這問題發生.

聊人資系統(1)

我現在的工作跟人資一點關係都沒有,寫這一系列文章主要是想紀錄以前作人資系統時對人資系統的認識以及當時遇到的一些情況.
人資系統,即人事薪資系統.大致可以分成這幾個子系統:

  • 人事
  • 薪資
  • 出勤
  • 考核

整個系統最終的目的,都是為了要能核發薪資(應該說提供薪資資料給會計財務,由會計財務去作帳及匯款).
人事,提供人員的基本資料,職位調動資料,工地異動資料,勞健保的加退保,退休金提撥,人員統計.
出勤,提供人員的請假紀錄,出勤狀況.
考核,讓主管或人員相互評核,以作為核發獎金的參考依據.

聊 Editor

昨天好友問到我用啥編輯器在寫 .Net 程式,有沒有用 UltraEdit??
我答道:”沒有,現在都用免費的編輯器在寫.”
so, 這就是這篇文章的由來…
PSPad Unicode
話才說完,還真巧,沒多久我就在 Nelson’s Blog 上看到這篇文章.
裝起來大致看了一下,還不錯,該有的功能都有了.
notepad++
這個是無意之中找到的,速度很快,也很好用.
用他的頻率,不知道為甚麼就是比下面的 Programmer’s Notepad 少.
Programmer’s Notepad
這是我目前最常用的編輯器之一,功能也很多.
常常用的原因很簡單,因為在檔案上面按下滑鼠右鍵,就會出現 Edit with PN2 ….
=_=”
Crimson
這個則是在某 blog 上看到的,不過沒記下網址.
也很好用,某同事大力推薦.
VIM
這個就不用說了,在 linux 環境下我都是用這個.
他也有 Windows 版本,也可以很方面的在檔案上面按下滑鼠右鍵,選”使用Vim編輯此檔案”…
可以說是上上之選,一直都沒有花很多時間去認真學他,都是停留在堪用的程度.
依照我逛網路的經驗告訴我,網路上很多 Linux 玩家都很厲害.
Linux 還有一個很有名的 Emacs, 但我沒用過,也懶得學,這套聽說也是神的不得了.
jEdit
是在 SourceForge 找到的,還是在 JavaLobby 電子報上逛到的??
已經不可考,不過這也是一套不錯用的編輯器,可以裝很多官方提供的亂七八糟 plugin. (我還蠻喜歡亂裝 plugin 來玩的)
Eclipse
這套最有名啦~目前紅的要命~~
也有提供很多 plugin, EclipsePlugins : hi! Find your plugin for Eclipse here.
還記得第一次裝的時候,如墜五里霧中.
後來找到不少 tutorial, 才知道怎麼裝.
其實用法不如想像中困難,就只是解開壓縮檔而已.
plugin 的話,eclipse 有內建 plugin manager,很方便.
eclipse 的 plugin 一狗票,但要注意的是,蠻多都是要收錢錢的.
AEdiX Suite
這一套是我同事介紹的.
他是這麼說的:”這套也是不用錢的..還不少人用.還支援 foxpro ..!”
不過,我沒辦法下載,所以也無從驗證起.
最後,”需要評比嗎??”
我這樣問我自己.我想應該是不用吧,每套編輯器都有自己的長處.
Developer 自己用熟就好啦~~

weblogs.com 剖析

Overview
weblogs.com是一個彙整的服務,在這個網站上,你會看到目前最新的 blog 文章.
原理
weblogs.com是採取一種被動的方式來得知目前有哪些 blog 文章,換言之,也就是 blog hosting system 在發出文章的時候,就會通知(ping)weblogs.com,讓weblogs.com知道說有新文章啦…
運作
weblogs.com 主要利用兩個方式來接收 ping
*XMLRPC
*REST, 也就是以 http get, post 的方式
參數大同小異:
*name: name of site (limited to 1024 character)
*url: url of site or rss feed (limited to 255 character)
回傳值:
*flerror (bool): true 表示有錯誤發生
*message: successful: Thanks for the ping.”, failure: error message.
背地裡,weblogs 收到這些訊息之後到底做了什麼事情呢??
推測:
1. 組合 ping 過來的資訊
2. 排程,定時去 fetch
3. 把已經取得的資訊組合放到 xml, 裡面提供有 name, url, rssurl, when
name: name of the weblog
url: url
rssUrl: 該網站的 rss/atom feed url
when: a number of second, 拿 weblogUpdated.updated 減去此數字,就是 weblogs.com 收到 ping 的時間.