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

各自只有一個章節,不過作者很簡明扼要地把該介紹的東西都介紹了。
ASP.Net 除了講 HtmlControl、WebControl 以外,還介紹了 Directive、Session 設定等等。
Windows form 則是簡單的介紹如何開始、Layout 的配置,以及比較容易讓人混淆的 MDI Form。
這本書真的很不錯,講的都很基本,看完對 .NET 會有一定程度的了解,不至於在茫茫大海似的類別庫裡淹死。

App_Offline.htm

今天 Trace Mono System.Web.HttpRuntime 時看到的,如果在你 ASP.Net 2.0 網站目錄下放置一個 app_offline.htm 時,不管你瀏覽什麼網頁,都只會看到 app_offline.htm 的內容。
詳情可以參考 ScottGu 大 的文章:App_Offline.htm
很鳥的是,.NET Documentation 裡完全沒提到這個。

電影流水帳(2008/7/28~2008/8/5)

過幾年之後,我還會記得幾部電影的故事呢?或許一部也不剩了吧…

  • The Forbidden Kingdom(IMDB, Wikipedia),中譯:功夫之王。中文譯名很爛,跟故事一點不搭。這是個借了孫悟空與二郎神之名的新故事,整體來說,只能說普普通通…
  • Martian Child(IMDB, Wikipedia),中譯:我的火星小孩。這不是科幻片,反而是很適合給新手父母看的片子。小孩從出生開始,對於新手父母來說,的確是從另一個世界來的實體,無法與他溝通,他也還不能表達自己的需求,一切只能靠父母細心地觀察,關係才能有所進展。故事還可以,沒當過父母的可能會覺得有點俗套。

Mono 與音訊、視訊

mplayer 的 -input 可以指定 file,man 裡面說明了你可以給一個 FIFO 的檔案。
藉著這個,於是就可以寫程式來控制 mplayer 來播放影片或是音樂。
你可以參考致遠管理學院資工系專題研究計畫研究成果報告計畫: Linux C# 設計 …
你還可以使用 GStreamer#Mono team 的人已經幫你將 gstreamer 函式庫包裝為 GStreamer#,因此使用 GStreamer# 也可以進行播放影片和音樂,最好的例子是 Banshee
不過這只適用於 Linux。

.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 的網站上很常見。

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 這邊會丟出例外。

電影流水帳(2008/7/23~2008/7/27)

本來是想看地心冒險的,結果到了微風國賓,卻發現剛好當天為了剛上演的 Wall.E的緣故,電影時刻改到晚上去了…只好改看刺客聯盟

  • Wanted(IMDB, Wikipedia),中譯:刺客聯盟。這也是一部由漫畫改編的電影,裡面的情節與故事相當的誇張,鬼扯到極點,例如子彈能轉彎…等等。不過,這是一部娛樂性極佳的電影,看完以後除了覺得鬼扯以外,還覺得蠻不錯的,至少看起來有爽的感覺。
  • Iron Man(IMDB, Wikipedia),中譯:鋼鐵人。網路上對這部片子的評價都不錯,我個人也覺得不錯。不知道為什麼,我覺得Gwyneth Paltrow在這部片子裡面正到不行,莫非她天生就是演秘書的料??電影的最後,主角本來還想掩飾,結果卻是出人意表地承認說:”沒錯,老子就是鋼鐵人!”,這一幕真是屌斃了。沒看到片尾的字幕之後,聽說還有玄機…

Banshee 的 PlayQueue

1.0 版以後多了一個新功能-PlayQueue,我很喜歡這功能,因為你可以一直把想聽的歌丟進去,Banshee會播放這個Queue裡的歌直到Queue沒有歌為止。
本來以為這是內建的功能,後來看了之後,才發現這是一個 Extension。
它主要繼承 PlaylistSource、IBasicPlaybackController,把自己實作成一個 Playlist 來源,在Banshee播放時,實際上來源已經不是原來的 Music library 了。
所以如果要取得這個 Source,應該是利用 ServiceManager.SourceManager 來取得,要加入 PlayQueue 的話,則是使用 AddSelectedTracks()。
目前我還沒研究出如何在 Extension 裡面呼叫其他 Extension 的方法…

電影流水帳(2008/7/9~2008/7/22)

昨天看到介紹美國漫畫-Batman的文章,看到博客來可以訂購這些漫畫了,有點心動,想去敗…

讓 Banshee 啟動時自動播放音樂之二

每次都從第一首播放,實在太沒意思,所以在播放前切換為 Shuffle 模式,播放時,就會隨機挑選一首開始播放,然後再關閉 Shuffle 模式。

import System
import System.IO
import Banshee.ServiceStack
import Banshee.PlaybackController
def AutoPlay() as bool:
ServiceManager.PlaybackController.ShuffleMode = PlaybackShuffleMode.Song
ServiceManager.PlayerEngine.Play()
ServiceManager.PlaybackController.ShuffleMode = PlaybackShuffleMode.Linear
def OnClientStarted( client as Client ):
Hyena.Log.Information( "engine is playing now..." )
GLib.Timeout.Add(1500, AutoPlay)
Banshee.ServiceStack.Application.ClientStarted -= OnClientStarted
Hyena.Log.Information( "autoplay script is loaded." )
Banshee.ServiceStack.Application.ClientStarted += OnClientStarted

p.s. 上次有提到要作自動記錄播放與自動播放記錄曲目的功能,我的確是做了,只是在播放完指定曲目後,又跳回第一首,這表示我還得繼續研究原始碼才行,所以暫時不釋出。