July 4,2008
讓 Banshee 啟動時自動播放音樂
主要是利用上一篇介紹的 BooScript Extension,讓 Banshee 能在一開始就播放音樂...
BooScript Extension 在載入時,會檢查是否有 script 要執行,有的話,會進行編譯並執行,所以這個時候 Banshee 內部還有許多事情還沒初始完成,所以必須要將 AutoPlay 的動作排程到 Application.ClientStarted 裡,讓 Application 啟動之後去執行 AutoPlay 的動作。
BooScript Extension 在載入時,會檢查是否有 script 要執行,有的話,會進行編譯並執行,所以這個時候 Banshee 內部還有許多事情還沒初始完成,所以必須要將 AutoPlay 的動作排程到 Application.ClientStarted 裡,讓 Application 啟動之後去執行 AutoPlay 的動作。
import System import System.IO import Banshee.ServiceStack def OnClientStarted( client as Client ): Hyena.Log.Information( "engine is playing now..." ) ServiceManager.PlayerEngine.Play() Hyena.Log.Information( "autoplay script is loaded." ) Banshee.ServiceStack.Application.ClientStarted += OnClientStarted就這麼簡單,下次要加上自動記錄播放與自動播放記錄曲目的功能。
July 3,2008
.NET framework essential Chapter 4
Chapter 3 主要是講各種語言的介紹與互相操作,大致都已經知道,沒什麼要紀錄的。
接著記 Chapter 4 的一些東西。
接著記 Chapter 4 的一些東西。
- 只要在 .config 裡面使用 bindingRedirect,就可以重新導向相依的assembly到新版本的assembly。.config 裡的 attribute:runtime / assemblyBinding / dependentAssembly
- Remoting object 的程式真的出乎意料地簡單,以前從沒研究過,有機會來試試效能,看看傳一堆物件或是 Dataset 的效能如何。
- 有一個 Attribute 的簡單範例...
- 支援 Transaction 的要件:
- 繼承 ServicedComponent
- 使用正確的 Transaction attribute
在 Banshee 1.0 裡使用 BooScript
June 27,2008
Boo(20)-Generator 函式
Generator 函式其實就跟 C# 的 Iterator 一樣,利用 yield 關鍵字先把值傳回讓呼叫者使用。
使用 Generator/Iterator 最大的好處是可以讓函式只做必要的邏輯,而不需要把一些事情綁在迴圈裡面。
下面就是一個很標準的尋訪目錄樹的範例,尋訪的工作交給 walk,主程式則負責依據傳回的值作處理。
import System
import System.IO
def walk( path as string ):
di = DirectoryInfo( path )
for d in di.GetDirectories():
yield d as FileSystemInfo
for f in di.GetFiles():
yield f as FileSystemInfo
for node in walk( "." ):
if node isa DirectoryInfo:
print "[${node.Name}]"
elif node isa FileInfo:
print node.Name
參考自:Generators
p.s. 這系列文章一定會持續寫到 macro 出現為止。
June 26,2008
電影流水帳(2008/6/20~2008/6/26)
公司福委會發了兩張免費電影票,該去看什麼片呢?或是送給老婆的妹妹?
- Pirates of the Caribbean: At World's End(IMDB, Wikipedia),中譯:神鬼奇航-世界的盡頭。發哥其實戲份不多,有點被廣告誤導了。一行人從世界盡頭回來的過程還蠻有趣的,居然要設法翻船,才能回到原來的世界,這也難怪The Flying Dutchman要能潛到水底。最後的Calypso好像不夠 powerful 啊~跟想像中不太一樣,照理來說被七大海盜王封印的怪物應該更厲害才對~
- Atonement(IMDB),中譯:贖罪。前面一個小時,我覺得很不錯,小女孩演的很不錯。只是到了後面,我就覺得好像少了什麼似的,我想是因為沒說明到贖罪的原因吧。
June 23,2008
.NET essential 第二章 CLR 筆記
主要是紀錄以前不知道或是看過沒深入了解的一些東西:
- Managed C++ 編譯出來的執行檔無法用mono執行,可能是因為 Native code 跟 IL code 放到一起的關係。
- 從 stack-based 的 value type 轉成 heap-based 的 reference type 的過程稱作 boxing,反之稱作 unboxing。
int i=1; object obj = i; // boxing int j = (int)obj; // unboxing
- 為了要讓各種語言能在 CLR 上執行,有 Common Language Specification 的 ECMA 標準 - Standard ECMA-335。
- NGen 可以預先將 IL code 轉為 Native executable code,省掉 JIT compiler 的工作(pre-JITting),因此可以加速。mono裡似乎是用
mono -O=all --aot your-assembly
來替代的樣子。
June 20,2008
Boo 的 currying
拜讀了Jserv大的"以 C 語言實做 Functional Language 的 Currying"與Thinker大的"真 C 語言實做 Functional Language 的 Currying"以後,決定也來挖掘一下 Boo 的 currying 寫法,根據這篇文章:Boo Programming Language Languages Currying Def Return World,程式碼出乎意料的簡單:
//Currying:
plusX = { a as int | return { b as int | return a + b }}
print plusX(3)(4)
就這樣。老實說,大概懂了,可是又不是很懂,也沒想到用途。
所以,就跟沒懂是一樣的。
