September 5,2008

列出 log4net 設定裡所有的 repository 跟 appender

Debug 用的,主要是看自己的 log4net 設定對不對。
StringBuilder sb = new StringBuilder();
ILoggerRepository[] repos = LogManager.GetAllRepositories();
foreach( ILoggerRepository repo in repos )
{
	sb.AppendLine( "=====" );
	sb.AppendLine( string.Format( "{0} - configured={1}", repo.Name, repo.Configured.ToString() );
	sb.AppendLine( "Appenders:" );
	foreach( IAppender appender in repo.GetAppenders() )
	{
		sb.AppendLine( string.Format( "\t{0}", appender.Name ) );
	}
}
sb.AppendLine( "=====" );
Console.WriteLine( sb.ToString() );

Posted by elleryq at 樂多Roodo!16:27回應(0)引用(0)

August 25,2008

debuan/ubuntu nant-0.85 的 SMP bug

最近在 Ubuntu 下用 NAnt 時,有 50% 的機率會遇到類似這樣的錯誤:
The current runtime framework 'mono-2.0' is not correctly configured in the NAnt configuration file.
    Function call failed.
Expression: ${path::combine(prefix, 'lib/mono/1.0')}
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        Illegal characters in path
Parameter name: path1
找了好久,都不知道原因所在,因為有時候是正常執行的。去Google試了好幾個關鍵字,都找不到解。今天用 nant "Illegal characters in path" 去找,終於找到了:#483073 - nant: race condition on SMP systems - Debian Bug report logs
裡面提供的暫時解法是利用環境變數 MONO_NO_SMP,把 SMP 關掉,再執行即可。所以只要編輯 /usr/bin/nant,在 exec 之前加上 export MONO_NO_SMP=1 即可。

Posted by elleryq at 樂多Roodo!14:53回應(0)引用(0)

August 22,2008

最近用 MySql Connector/Net 的幾個心得

  1. 連線字串加上 charset=utf8,如此一來,完全不用更改 MySQL 伺服器設定,只要確定建 database/table 時有指定 utf-8 編碼即可。
  2. SQL 參數在使用 @ 時,若碰到問題,不妨改用 ? 試試。我的確碰到這問題,它卡了我兩、三天,而且改用 ? 也解決了。忘了在哪兒看到,剛好有提到這點,真的是幸好我有看到...
  3. MySQL 有提供 MySqlHelper 類別,省掉寫 Helper 的麻煩...
  4. MySQLConnector/Net下載網站上沒有給 Linux 的版本,事實上,是通用的,你可以直接拿給Mono用,不需要作任何改動。


Posted by elleryq at 樂多Roodo!9:51回應(0)引用(0)

August 8,2008

.NET framework essential Chapter 7/8-ASP.Net/Windows form

各自只有一個章節,不過作者很簡明扼要地把該介紹的東西都介紹了。

ASP.Net 除了講 HtmlControl、WebControl 以外,還介紹了 Directive、Session 設定等等。
Windows form 則是簡單的介紹如何開始、Layout 的配置,以及比較容易讓人混淆的 MDI Form。

這本書真的很不錯,講的都很基本,看完對 .NET 會有一定程度的了解,不至於在茫茫大海似的類別庫裡淹死。

Posted by elleryq at 樂多Roodo!9:51回應(0)引用(0)

August 7,2008

App_Offline.htm

今天 Trace Mono System.Web.HttpRuntime 時看到的,如果在你 ASP.Net 2.0 網站目錄下放置一個 app_offline.htm 時,不管你瀏覽什麼網頁,都只會看到 app_offline.htm 的內容。

詳情可以參考 ScottGu 大 的文章:App_Offline.htm

很鳥的是,.NET Documentation 裡完全沒提到這個。

Posted by elleryq at 樂多Roodo!14:57回應(2)引用(0)

August 5,2008

Mono 與音訊、視訊

mplayer 的 -input 可以指定 file,man 裡面說明了你可以給一個 FIFO 的檔案。
藉著這個,於是就可以寫程式來控制 mplayer 來播放影片或是音樂。
你可以參考致遠管理學院資工系專題研究計畫研究成果報告計畫: Linux C# 設計 ...

你還可以使用 GStreamer#Mono team 的人已經幫你將 gstreamer 函式庫包裝為 GStreamer#,因此使用 GStreamer# 也可以進行播放影片和音樂,最好的例子是 Banshee
不過這只適用於 Linux。

Posted by elleryq at 樂多Roodo!17:49回應(0)引用(0)

August 1,2008

.NET framework essential Chapter 6-Web Services

最前面是一堆有點誇張的介紹,不過在當時大家真的都以為 Web Services 很棒...
這一章介紹 Web Services 的觀念與實作,由於微軟是規格制定者,所以 .NET 對 Web Services 的支援不能少,下了很多功夫。
主角是 WebService 類別與 WebMethodAttribute,方法是繼承 WebService 類別,然後在要被呼叫的方法上,標上 WebMethod attribute。

以前以為 Web Services 的底層是 SOAP,所以只能用 SOAP,沒想到也可以用 GET/POST 的方式來呼叫,所以 javascript 也能輕易地呼叫 Web Services,然後解析回傳的 XML 即可。
Security 方面,以前也以為沒有 session,現在也知道可以用了。另外還介紹了兩種層級的保護,系統層級是利用 IIS 管理介面設定權限與 SSL 來達成,Application Level,則是利用 .NET 的 web.config 來達成。
SSL 對於 Web Service 來說,是個稍嫌沈重的負擔,所以他也建議使用 authentication token 的方式,也就是提供一個架構在 SSL 上,可以取得 authentication token 的方法,取得 token 之後,後續的呼叫都要帶入這個 token,以作為識別。
這樣的方式,在目前有提供 Open API 的網站上很常見。

Posted by elleryq at 樂多Roodo!13:33回應(0)引用(0)

July 31,2008

MonoDevelop on Windows

Cygwin 要裝些什麼可以參考這篇:CodeProject 上的文章:Building Mono on Windows: the final battle.
不過 Mono 可以直接用官方提供的,不需要自己 build。

首先進 Cygwin shell,設定 PATH 與 PKG_CONFIG_PATH,讓 Cygwin 能找到 Mono
export PATH=/cygdrive/c/Progra~1/Mono-1.9.1/bin:$PATH
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/:/usr/local/lib/pkgconfig/:/cygdrive/c/Progra~1/Mono-1.9.1/lib/pkgconfig

再把 Mono 目錄下的 pkg-config 更名,因為這個版本的 pkg-config 太舊。

接著要 build Mono-Addin-0.3.1,這簡單,很快就 build 過了。(./configure && make && make install )

再來就麻煩了,1.0 無法 build,它會要求裝 monodoc, gtksourceview-sharp-2.0.0;monodoc 其實已經有了,但卻沒有給 pkg-config 用的 .pc 檔,所以補上一個自製的 monodoc.pc。接著,gtksourceview-sharp 則需要裝 gnome-sharp、gtk-sharp 與實體的 gtk+、gnome 函式庫,所以我放棄 1.0,改用 1.9。1.9 是比較順利了,順利的原因是,MonoDevelop team 本來就有打算要出 Windows 版本,只是能不能用還在未知之數。

在 build 的過程中,發現 gmcs 無法載入 Mono.Addin.Setup assembly 的問題,這是由於 gacutil 跟 Cygwin 相處的不太好,gacutil 收的 path separator 是反斜線 '\',但 Cygwin 只能給 '/',所以安裝 Mono.Addin 時,並沒有依照 Makefile 的指定,將 .dll 註冊到 gac 所以在編譯(make)、安裝(make install)後,你必須要手動將 .dll 註冊到 gac 裡:
cd bin;find . -name '*.dll' -exec gacutil -i {} \;

接著,MonoDevelop 就 build 成功了。不過,MonoDevelop 還是不能執行 :-( MonoDevelop.Core.Gui.Services 這邊會丟出例外。

Posted by elleryq at 樂多Roodo!20:06回應(0)引用(0)

July 3,2008

.NET framework essential Chapter 4

Chapter 3 主要是講各種語言的介紹與互相操作,大致都已經知道,沒什麼要紀錄的。
接著記 Chapter 4 的一些東西。

  • 只要在 .config 裡面使用 bindingRedirect,就可以重新導向相依的assembly到新版本的assembly。.config 裡的 attribute:runtime / assemblyBinding / dependentAssembly
  • Remoting object 的程式真的出乎意料地簡單,以前從沒研究過,有機會來試試效能,看看傳一堆物件或是 Dataset 的效能如何。
  • 有一個 Attribute 的簡單範例...
  • 支援 Transaction 的要件:
    1. 繼承 ServicedComponent
    2. 使用正確的 Transaction attribute
    接著就可用 System.EnterpriseServices.ContextUtil。此外最好也指定 ApplicationName、ApplicationActivation 等組件attribute。.NET 會在編譯時自動把組件加入 COM+ Service 裡,無須自己動手註冊。這邊還有 Object pooling、Role base、Message Queuing 的例子,很淺顯易懂。這部份在 Mono 裡都沒有被實作出來,主要是因為 COM+ 在 Linux 下沒有替代品的關係。


Posted by elleryq at 樂多Roodo!16:55回應(0)引用(0)

June 23,2008

.NET essential 第二章 CLR 筆記

主要是紀錄以前不知道或是看過沒深入了解的一些東西:
  1. Managed C++ 編譯出來的執行檔無法用mono執行,可能是因為 Native code 跟 IL code 放到一起的關係。
  2. 從 stack-based 的 value type 轉成 heap-based 的 reference type 的過程稱作 boxing,反之稱作 unboxing。
    int i=1;
    object obj = i; // boxing
    int j = (int)obj; // unboxing
    
  3. 為了要讓各種語言能在 CLR 上執行,有 Common Language Specification 的 ECMA 標準 - Standard ECMA-335
  4. NGen 可以預先將 IL code 轉為 Native executable code,省掉 JIT compiler 的工作(pre-JITting),因此可以加速。mono裡似乎是用
    mono -O=all --aot your-assembly
    來替代的樣子。

Posted by elleryq at 樂多Roodo!11:24回應(0)引用(0)
 [1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]  [10]  [下10頁]  [最終頁]