VisualSVN Server

想到可以來介紹一下這個:VisualSVN Server
讓我想想~記得應該是去年年底的時候,不知在哪兒逛到的~
原本以為會不會跟VisualSVN一樣,是個商業化的產品,後來看過以後,才知道並不是。
言歸正傳,VisualSVN Server骨子裡其實就是Apache HTTP Server+Subversion,另外再加上VisualSVN製作的一個簡單管理介面。
如果你覺得自己手動安裝 Apache HTTP Server+Subversion很麻煩而你剛好又不想用 Linux 的話,不妨試試看這個,我自己試過了,如果你沒有要綁什麼特別的認證機制(如 SSPI)的話,這個軟體可說是相當地方便。
p.s. VisualSVN是一個給 Visual Studio 用的 plugin,讓 Visual Studio 也能直接以Subversion來作代碼管理。

如何在指令列改變 Registry key 的權限

首先要謝謝你,Wikipedia 上的 Windows Registry 條目
裡面提到了微軟其實有釋出一個工具:SubInACL.exe
用這個,就可以改變某個 Key 的權限。
這一行就是讓自己可以得到 HKEY_LOCAL_MACHINE\software 這個 key的完全控制權:

subinacl /keyreg HKEY_LOCAL_MACHINE\software /grant=%USERNAME%=F

但是這邊要注意, /key 只針對該 key,在之下的 subkey,你仍然沒有完全控制權,如果你要得到 subkey 的完整控制權,你應該改用:

subinacl /subkeyreg HKEY_LOCAL_MACHINE\software /grant=%USERNAME%=F

p.s. 如果你需要刪除某個指定 key,可以參考這篇文章:Delete OE Identity from HKCU\Identities using WSH Script

jquery.ingrid

最近使用了jquery.ingrid這個jQuery的插件,這裡分享幾點心得:

  • 官方文件提供的資訊極有限,所以原始碼沒事最好要看一下。
  • Client 端的 html 只要在 <table> 裡面放 <thead>, <thead>, <th> 即可,不需要放別的。另外最好用一個 <div> 包起來,這樣可以比較方便於作 requery,因為在呼叫 ingrid() 之後,DOM 會作必要的改變,因此原來你使用 selector 指定到的 element,可能就再也找不到了。使用 <div> 包起來的好處是,可以藉由 html() 重新指定 <div> 的內容。這樣就能再次使用 selector 找到要改變的 table。
  • Server 端需要處理 page, sort, dir 三個參數,這是由 Client 端的 ingrid() javascript 送出的,此外,如果 dataType 是 HTML (預設也是) 的話,只要輸出 <table>、<tbody>與<td>即可。如果你還需要指定其他的參數,可以藉由複寫 extraParams 來達到你的目的:
    var options={
    url: 'remote.html',
    extraParams: {param1: 'param1', param2: 'param2' }
    };
    $("#grid").ingrid( options );
    
  • 記得要指定 colWidths,有幾個 column,就要指定幾個,這是官方文件沒提及的部份。如果不指定,會很殘忍的給你錯誤。
    $("#grid").ingrid( {
    // other stuff...
    colWidths: [ 225,225,225,225 ],
    // other stuff...
    });
    

此外它還有排序、調整欄寬…等等的功能,整體來說,是個相當不錯的插件。

指定 Google maps API script 的編碼

是的,Google maps API 的 javascript 預設編碼是 utf-8,如果你的網頁編碼是 big5 或其他的,你應該要同時調整 javascript 的輸出編碼,否則你可能會遇到奇怪的錯誤。
方法就是加上隱藏的參數 oe,以 big5 為例:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=your_key&amp;oe=big5" type="text/javascript"></script>

或許你也跟我注意到了,這兒並不是使用 &,而是使用 &amp;,並不是我故意寫錯,而是官方提供的範例就是如此,而且 IE6、IE7、Firefox 都可以接受…

plugin_syntaxhighlighter

blogger 使用 dp.syntaxhighlighter 的話,你會發現根本無法生效,主要是因為 blogger 把換行符號都替換成 <br/> 了,而且還沒有設定可以決定是否要替換。
很幸運地,有人已經提出解決方法:yehyeh: Blogger dp.SyntaxHighlighter斷行問題解決方法

只是,我已經套用blogger-ext2了,於是想說,是不是可以寫一個blogger-ext2的 plugin 來解決這個問題。
非常感謝jQuery的強大功能,不到半天就完成了,最重要的是,不用像上面解決方法一樣,寫了一堆 code。

// Register dp.SyntaxHighLighter
// Dependency:
//   jQuery-1.2.1
//   blogger-ext2-core (最新版,0.7.x 的樣子)
//   dp.syntaxhighlighter-1.5.1
BloggerExt.SH = function() {
// Plugin 會由此開始
if( dp!='undefined' ) {
// 找到 pre, textarea 下所有 br,然後替換成換行符號,收工。
jQuery("pre > br").each( function() { jQuery(this).replaceWith( "\n" ); } );
jQuery("textarea > br").each( function() { jQuery(this).replaceWith( "\n" ); } );
dp.SyntaxHighlighter.ClipboardSwf = 'http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');
}
};
BloggerExt.SH.user_pref = function() {
var prefs = [];
return prefs;
};
BloggerExt.SH.update_pref = function(prefs) {
};
BloggerExt.register('SH', { SH: true} );

使用範例:

<script type="text/javascript" src="jquery-1.2.1.pack.js"></script>
<script src="blogger_ext2.js" type="text/javascript"></script>
<script type="text/javascript" src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shCore.js'></script>
<script type="text/javascript" src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushCSharp.js'></script>
<script type="text/javascript" src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushVb.js'></script>
<script type="text/javascript" src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushPhp.js'></script>
<script type="text/javascript" src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushJScript.js'></script>
<script type="text/javascript" src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushSql.js'></script>
<script type="text/javascript" src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushXml.js'></script>
<script type="text/javascript" src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushPython.js'></script>
<script type="text/javascript" src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushCss.js'></script>
<script type="text/javascript" src='http://syntaxhighlighter.googlecode.com/svn/tags/1.5.1/Scripts/shBrushCpp.js'></script>
<!--假設你已經把上面代碼存為 plugin_syntaxhighlighter.js 了 -->
<script type="text/javascript" src='plugin_syntaxhighlighter.js'></script>

SyncToy

AllwaySync是可以用,但卻有限制,如果一次同步超過 20000 個檔案,抱歉,請買原版,現在有特價,約美金 20 元。該買嗎?
我不死心地再找了一次,突然想起前一陣子丟在桌面的 SyncToy,既然是Microsoft的好意,不如裝起來試試吧。
喔!
不錯用呢~ (對不起,不附圖片了…因為,豆漿濃…)
使用的體驗與 AllwaySync 接近,而且比 AllwaySync 聰明,會自動判定檔案是否被更名,而不會傻傻的刪除,再重新複製。
好東西,下載網址:SyncToy: a free powertoy download for file synchronization
p.s. 官方說法 XP/Vista 適用,經過我的實驗,Windows 2000 也可以用,只要有裝 .Net framework 2.0 即可。

Prism 的網路設定

如果你已經安裝了Prism 0.8(下載),而環境正好有該死的 Proxy 的話(是的,目前Prism 0.8不提供網路設定的選項),那麼你可以試著修改 C:\Documents and Settings\your_username\Application Data\Prism\Profiles\xxxxxxx.default\prefs.js,在後面加上這幾行:

  1. 如果是自動偵測的話,
    user_pref("network.proxy.type","4");
  2. 如果已經知道 proxy 位址與 port的話,
    user_pref("network.proxy.http","localhost");
    user_pref("network.proxy.http_port","3128");
    user_pref("network.proxy.type","1");
  3. 如果知道Proxy自動設定網址的話,
    user_pref("network.proxy.autoconfig_url", "http://isawp1.msi.com.tw:80/wpad.dat");
    user_pref("network.proxy.socks_version", 0);
    user_pref("network.proxy.type", 2);