想到可以來介紹一下這個: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來作代碼管理。
[軟體]Text to VBString
最近都在寫 ASP/HTML/Javascript,今天剛好在訂閱的 MSDN Feeds 裡面看到 Joe Stagner的這篇文章:Utility to Convert Text / HTML to a Visual Basic String
內容是介紹Text to VB String這工具,這下可以省掉不少把 html 轉成 vb string 的功夫了~
p.s. 這個光頭的照片我經常看到,由此可推斷,這傢伙在網路上相當活躍,應該是個牛人。
如何在指令列改變 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... });
此外它還有排序、調整欄寬…等等的功能,整體來說,是個相當不錯的插件。
適合程式設計師用的字型
陸陸續續在網路上看到很多文章介紹,不過並沒有列出所有不錯的字型,這兒列出來的是目前我有試過而且感覺不錯的,同時直接提供下載連結:
- Consolas,下載位址:Consolas Font Pack for Microsoft Visual Studio 2005
- Inconsolata,下載位址在此
- Andale Mono,下載位址:andale32.exe(from sourceforge.net)
其他參考:
指定 Google maps API script 的編碼
是的,Google maps API 的 javascript 預設編碼是 utf-8,如果你的網頁編碼是 big5 或其他的,你應該要同時調整 javascript 的輸出編碼,否則你可能會遇到奇怪的錯誤。
方法就是加上隱藏的參數 oe,以 big5 為例:
<script src="http://maps.google.com/maps?file=api&v=2&key=your_key&oe=big5" type="text/javascript"></script>
或許你也跟我注意到了,這兒並不是使用 &,而是使用 &,並不是我故意寫錯,而是官方提供的範例就是如此,而且 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>
Postfix log 出現 Database files are not up-to-date 的解法
Google it!! 請參照:[CentOS] Postfix /etc/aliases problem
postconf -e “alias_maps = hash:/etc/aliases”
postconf -e “alias_database = hash:/etc/aliases”
Then run ‘newaliases’ to rebuild the aliases.db file from the text file.
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,在後面加上這幾行:
- 如果是自動偵測的話,
user_pref("network.proxy.type","4");
- 如果已經知道 proxy 位址與 port的話,
user_pref("network.proxy.http","localhost"); user_pref("network.proxy.http_port","3128"); user_pref("network.proxy.type","1");
- 如果知道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);