Vim 7.1 / MRU / TagMenu

最近 Vim 釋出了 7.1 版,這兩天順手更新了。
在下載的同時,邊找一下有沒有好用的 Plugin:

  • mru – Plugin to manage Most Recently Used (MRU) files,顧名思義,就是在 Menu 安插一個 Most recent used (最近使用) 的選單,讓你可以從選單選到最近編輯的檔案。
  • TagsMenu – Creates a menu of all the tags in the current file.,這個其實跟 taglist 很像,只是 taglist 是分割一個視窗出來顯示 Tag,而 TagsMenu 則是在選單安插一個 Tags 項目,顯示出所有 Tags。他的 ctags 指令比較不一樣,記得要加上 -f – –fields=+K,例如:

    let TagsMenu_ctagsCommand=’c:\tools\ctags.exe -f – –fields=+K ‘

CVSNT 混合使用 protocol

我們 team 的 CVSNT 一直是用 SSPI 方式,直接與公司內部的 Active Directory 接軌作認證。
如果你想要一些不是在網域的人也能存取 CVS Repostiroy 的話,該怎麼辦呢?
其實 CVSNT 安裝的時候,預設就已經是同時開啟 SSPI 與傳統的使用者認證了~
所以,你需要更動 Server Repository 的 CVSROOT 目錄下的 users、passwd 檔案。
users 的檔案格式是 username:e-mail
passwd 的檔案格式是 username:password:alias
這邊的 password 應該要填入加密過的,不過你可以先不填,稍後再利用 CVS passwd 指令來更改。
舉例來說,你在 users 檔案加入了一行 paul:paul@xxx.com,在 passwd 檔案加入了一行 paul::paul
接著在 client 端使用 cvs -d :pserver:paul@your_server:/your_module login 登入,在詢問密碼時,按下 Enter。
再使用 cvs -d :pserver:paul@your_server:/your_module passwd 更動密碼即可。
如果你要把混合認證的功能關掉的話,得去修改 CVSNT 安裝目錄下的 protocol_map.ini,加入一行 pserver=none,重新啟動 CVSNT 服務以後就可以關閉了。
參考資料:

BSP 使用技術概觀

這篇純粹是一篇 Overview…
BSP 大致可以分為三個部份來討論:BSP主頁面、blogger的個人頁面、blogger文章管理平台。

  • BSP 主頁面,主要就是聚合所有blogger的文章,依照發表先後順序來顯示。這部份就是直接從資料庫去Query資料出來顯示,基本上不困難。額外要補充的部份,在外面你可能還會看到本身不提供 BSP 服務,但提供聯播服務的站台,那他們又是怎麼做的呢?大致上有兩種,一種是由站台本身定期去 pull RSS/ATOM feed 回來作整合(所以想要參加聯播的人,得提出申請;或者有些blog線上閱覽器(Aggregator)會順便提供聯播Widget,如:NewsGatorGoogle Reader,因為這只是舉手之勞。);另外一種,則是站台提供有 Weblog ping service的位址,使用者需要在 BSP 的設定去填入此位址,那麼在發表文章的同時,BSP就會去通知該站台說有新文章發表了,該站台再根據這資訊來作顯示或是其他動作(所以新增文章的時候,你會用到這個,當然也可以不提供,這主要是增加 blogger 在其他網站曝光的機會)。
  • blogger個人頁面,只聚合blogger本身的文章,可以依照使用者在管理平台上指定的順序來顯示。
    1. 文章的產出,一般有常見的兩種作法:一種是從資料庫Query資料出來顯示,這方法相對來說,是比較簡單的,但是資料庫的負載會比較重;另外一種,則是在文章有更動的時候,除了更新到資料庫之外,還同時產生一份 html 檔在對應的位置上,當訪客瀏覽的時候,實際上是直接瀏覽這份 html 檔,把負載集中在 Web server 上,速度會比較快些,缺點則是要修改相關 html 檔案的連結,著名代表是:Movable Type 2.x。關於要不要產生靜態 html 檔案的討論,我記得國外或對岸有人寫專文來討論。
    2. TrackBack與留言:留言就不用說了,就留言,有些 BSP 可以讓你在管理介面上直接回覆留言,而不是作者自己要在文章上再留言一次;TrackBack則是類似 Weblog ping services,如果你在文章裡面有引用到其他人的文章,那麼你可以在發表文章的時候,指定 TrackBack 網址,那麼在發表的時候,就會通知該文章,該文章就會知道你有引用,然後在文章後面列出相關資訊。
    3. 個人化網址,目前國內 BSP 都讓你可以自訂後綴的目錄名稱,但國外的Blogger則可以讓你自訂域名,例如 http://someone.blogspot.com。實作上,多半是利用 Url rewrite 或是直接在 web server 建立相對應的目錄;Blogger的作法我並不清楚,我猜測應該是直接在 DNS 處理掉。
  • blogger文章管理平台,管理部落格基本設定,新增/修改/刪除文章,或是邀請別人一起來編輯。一般還有提供的功能:變更版面配置(有些則乾脆整份頁面讓你自己去改,如早期的 Blogger)、自訂 CSS、自訂邊欄、簡單的照片管理…等等。

此外還有:

  • RSS/ATOM,這兩種格式,說穿了,就是 XML,只要依照規範去撰寫,大致上就沒什麼問題。
  • Server 的管理、負載平衡、流量管理…

轉移到Thunderbird

Mozilla Thunderbird前一陣子已經推出 RC1,所以按照預定計畫,開始進行轉換的工作。
轉換的工作其實很簡單~
不過也就是安裝好 RC1,打開Mozilla Thunderbird,執行”工具”>”匯入”,把郵件以及設定都匯入進來~
接著再檢查看看郵件有沒有問題、帳號密碼,最後把原來配合 Outlook express 的 popfile 移除掉。
就這樣,簡單到不行。

cvs2svn 實戰

我主要是參考這篇:HOWTO: smooth CVS to SVN migration (and back again)
基本上步驟還真的是…很簡單。
目前我先在Ubuntu上試驗,想說先搞定之後,再到 Windows server 上試試看。
首先得安裝cvs2svn

#sudo apt-get install cvs2svn

又,因為 Windows 上用的是CVSNT,我再安裝了CVSNT(是的,Ubuntu有包進去):

#sudo apt-get install cvsnt

接著把 Windows 上的 CVS Repository (除專案目錄之外,CVSROOT目錄也要!這是我踩到的第一個雷,如果你是整個搬,就不會有這困擾。)複製到 Linux 機上的 /work/cvs 放著,然後切換到該目錄下之後,輸入:

#cvs2svn -v -s /svn/my_new_project my_project

  • -v 表示 verbose
  • -s 指定 svn repository 位置,這邊不需要特別先執行 svnadmin create 去建立,cvs2svn會自動建,如果你已經有一份建好的,那麼你得加上 –existing-svnrepos
  • 最後是 cvs repository 位置

cvs2svn就開始跑啦~
過沒多久,cvs2svn告訴我:

ERROR: The command ‘[‘co’, ‘-q’, ‘-x,v’, ‘-p1.1’, ‘-kk’, ‘my_project/aaa/bbb/si_template,v’]’ failed with exit status: 1
and the following output:
co: my_project/aaa/bbb/si_template,v:28: unknown character `_’
co aborted

這個問題卡了我很久,我找不到原因。後來找到這篇討論串:error encountered with co: unknown character ‘_’,最後解法是使用 –use-cvs,也就是不要用 rcs 指令去處理 CVS repository,改用 cvs 指令去處理。
用了這參數以後,原本以為這下就都搞定了,但天不從人願,cvs2svn告訴我另外一個噩耗:

ERROR: The command ‘[‘cvs’, ‘-q’, ‘-R’, ‘co’, ‘-r1.1’, ‘-p’, ‘-kk’, ‘my_project/my_project.mak’]’ failed with exit status: 1
and the following output:
cvs [checkout aborted]: Cannot check out files into the repository itself

這問題又再次卡了我很久,我甚至去 trace cvs2svn 的 code…後來發現這完全是因為我的愚蠢所造成…反覆閱讀CVS–Concurrent Versions System – Troubleshooting之後,我終於知道原因,原來我不可以在 /work/cvs 下執行cvs2svn
於是我切到 /work,然後再執行一次就行了。最後指令如下:

cvs2svn –use-cvs -v -s /svn/my_new_project /work/cvs/my_project

參考資料:

後來整個弄完以後又發現的另外一份參考資料~冏:

subversion 與 file:// protocol

在 Windows 上,想偷懶不架設 svn server 或 http server 的話,可以這麼作。
首先你得安裝TortoiseSVN
然後建立 repository,TortoiseSVN的方法是這樣子的:

  1. 先建立一個空目錄
  2. 再該目錄上按下滑鼠右鍵,選 TortoiseSVN > create repository here

建立成功之後,緊接著,再按下滑鼠右鍵,將這個目錄分享出來。
之後,到你的工作目錄,用TortoiseSVN去 check out
URL of repository 就打 file:////your_computer/your_share 即可。

Make Link 與 Digg This!

不知道裝了什麼 Addon 之後,Make Link得到的結果就錯了,每次要取頁面標題或是選取文字時,都會得到 “[object Object]”。
經過一番奮戰之後,終於發現 Make LinkDigg This! 都個別定義了 getSelectedText() 這個函數,Make Link因為呼叫到Digg This!的getSelectedText(),所以判斷的時候,就出錯,而得到 “[object Object]”。
所以只要移除掉Digg This!這個 Addon 之後就好了。
或者,你也可以自行為某 Addon 中的 getSelectedText() 作更名,再重新打包即可。

mod_rewrite

使用上很簡單,看mod_rewrite官方說明,應該就可以明白,要不也可以利用Google找到很多教學(關鍵字:mod_rewrite tutorial)。
要特別注意的一點,得記得把該目錄的 AllowOverride 設置為 All (Apache設定檔裡面)。
如果是 None 的話,mod_rewrite 不會生效。
像我的CentOS預設就是把 /var/www/html 的 AllowOverride 設置為 None,所以得去編輯 /etc/httpd/conf/httpd.conf ,找到 <Directory “/var/www/html”> … </Directory> 裡面的 AllowOverride,改為 All,再重新啟動 httpd 即可。

IE7的”Open in new Tab” 消失了

安裝 IE7 正式版以後,發現一個問題,滑鼠右鍵點選連結時,應該要出現 “Open in new Tab” 的,可是卻消失了。
我納悶了很久,不知道該怎麼解決。
某天因緣際會之下,看到了這篇文章:IE7 Tabbed Browsing Q & A ,作者說如果有任何關於 Tab browsing 疑問的話,請儘管留言,他會努力解決,於是我留下問題。
過了許久,等我想起這件事情的時候,再次回來看這篇文章,發現作者已經很詳細的回答了我的問題。

@elleryq, most likely you have an add-on that decided to override IDocHostUIHandler in order to provide a custom context menu. The fix is to look at your add-ons and upgrade or un-install them. Some, such as the Google toolbar, have fixed this in the newest versions.
To provide more detail, the problem is that they’re loading the IE6 version of the context menu out of shdoclc.dll, which is no longer part of IE, but is still part of Windows Explorer. There was some bad documentation on our part (well, legacy) which suggested loading otherwise undocumented IE resources out of shdoclc.dll, which a handful of add-ons followed.
IDocHostUIHandler was primarily intended to be used by 3rd party browsers such as Maxthon, and not IE extensions. The recommended advice for 3rd party developers is to use standard context menu extensions whenever possible (see the “Context Menus and Extensions” section in http://msdn2.microsoft.com/en-us/library/aa770042.aspx) and if you really *have* to override IDocHostUIHandler, load your own resources for the context menus.
tonyschr

所以我照著他的建議,更新 Google toolbar 到最新版,問題就解決啦~