2008-04-09

看起來滿好用的 PDF 瀏覽工具

昨天在看 PDF 文件的時候, 想在中間加個書籤, 突然發現 Adobe Reader 既然沒有這個功能, 印象中以前好像可以自行加註解和書籤的啊? 難到是記錯了?

突然在 Adobe 官網發現一個 Flash Application, 叫做 Adobe Digital Edition, 看起來質感還不錯, 適合有很多 PDF 文件的人拿來管理自己的 PDF, 重點是它可以自己加書籤!!

image

有趣的書架

看出其中有趣的地方了嗎? 會寫點程式的人應該都能體會吧!!

出處: Equation Bookshelf

Json.NET on codeplex

在 Codeplex 上看到的一個簡單明瞭的 Json 類別庫!

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

string json = JavaScriptConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "Expiry": new Date(1230422400000),
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}

Product deserializedProduct = JavaScriptConvert.DeserializeObject<Product>(json);

自訂類似 flashget:// 的 URL Protocol

想要有類似 flashget:// 或是 ed2k:// 這樣能夠叫起特別程式來服務的功能該怎麼作呢?

想辦法加上類似以下的機碼, 只要換掉紅字的部分即可!

--------------------------------------
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\note]
@="URL:Notepad Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\note\DefaultIcon]
@="notepad.exe"

[HKEY_CLASSES_ROOT\note\shell]

[HKEY_CLASSES_ROOT\note\shell\open]

[HKEY_CLASSES_ROOT\note\shell\open\command]
@="D:\\note.cmd \"%1\""
--------------------------------------

HttpWebRequest 與 https

HttpWebRequest 透過 SSL 取得網頁資訊時, 如果對方網站的憑證不被自己的電腦所信任的話, 就會出現 "基礎連接已關閉: 無法為 SSL/TLS 安全通道建立信任關係。" 的錯誤, 英文版的錯誤訊息是 "The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.", 在 .NET 1.1 時代曾經用 ServicePointManager.CertificatePolicy 解決過這個問題, 但到了 .NET 2.0 之後, 該方法被列為 obsolete 了, 所以就研究了一下新的方法, 順便做個記錄

// .NET 1.1
ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();

如果是 .NET 1.1, 我們必須自行建立一個像上面範例碼的 AcceptAllCertificatePolicy 類別, 並讓該類實作 ICertificatePolicy 介面, 該介面只有一個方法叫 CheckValidationResult, 回傳 bool 來決定是否接受對方的憑證, 直接 return true 就行了.

public class AcceptAllCertificatePolicy : ICertificatePolicy
{
    public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem)
    {
        return true;
    }
}
.NET 2.0 簡單多了, 只要一行, 透過匿名函式就行了!
// .NET 2.0
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

使用 WebBrowser.DocumentText 載入內容時忽略 JavaScript 錯誤

在 Windows Forms 內放置 WebBrowser 控件時, 如果透過 DocumentText 的方式填入有使用 JavaScript 的網頁的話, 若該網頁的 Script 有錯誤的話, 就會跳出煩人的視窗, 實在很討厭, 試了很多屬性都搞不定, 最後只好使用特殊手段來解決 -- 自行嵌入一段錯誤處理的 JavaScript, 這樣就不會有煩人的錯誤視窗了, 要嵌入的 JavsScript 如下:

"<script type='text/javascript'>window.onerror = function(){};</script>"

升級 SqlServer Management Studio

如果電腦裡有先安裝過 SQL Server Management Studio Express 版本, 然後再安裝 SQL Server 2005 的話, 安裝完成後會發現少了一些工具, 而且管理工具還是停留在 Express 的版本, 該怎麼做才能升級呢?

方法一:

  1. 先從新增移除程式將 Microsoft SQL Server Management Studio Express 移除
  2. 再點選 Microsoft SQL Server 2005, 選擇變更, 然後移除掉 Workstation components 底下的 Client Components
  3. 這時候再安裝一次 SQL Server 2005 就可以順利升級了

方法二:

  1. 直接開啟一個命令提字元, 切換到安裝程式所在的目錄, 直接輸入 setup.exe SKUUPGRADE=1