電影流水帳(2010/3/26~2010/4/2)

一股腦地看完了四部電影,不過與其說是一股腦,不如說是拖了好一陣子才寫。

  • 大兵小將(IMDB, Wikipedia)。看新聞說這部片是成龍第99部片,成龍真的不簡單。劇情相當簡單,也誠如電影介紹一樣,就小兵運氣很好地俘虜了一個受傷的將軍,想帶回國去領賞。回國的路途中,發生了許多事情,導致兩人的想法都有了很大的改變。我覺得這部片相當程度的改變了成龍以往電影的風格,也就是,這部片除了以往成龍的打鬥、逗趣風格之外,還帶有一些可以讓人省思的地方,像是打仗還是不打仗、沒有了國家,個人存在是否仍有意義等等的議題。蠻值得看的電影。
  • The lovely bones(IMDB, Wikipedia),中譯:蘇西的世界。我是拿公司福委會送的電影票去看的,看完以後我真的覺得後悔。劇情有點像是大輪迴之類的寫實連續劇,蘇西被殺害,靈魂仍然逗留在人間,兇手一直沒找到,家人因此有了隔閡,最後,家人終於團聚,兇手也找到了,可是,兇手卻逃之夭夭。雖然最後還是受到懲罰,但是我覺得花了快兩個小時,最後卻看到兇手就這樣沒受到應該受的懲罰,感覺上就像是被潑了一桶冷水。我沒看過小說,不過單就電影來看,我很難想像這樣的小說為什麼會暢銷。
  • Shutter Island(IMDB, Wikipedia),中譯:隔離島。這個故事真的很有意思,說穿了就沒什麼了,所以這裡就不描述劇情了。看完以後,我想起我以前看的腦髓地獄,這本小說的故事走向基本上就跟電影相當接近,只是小說的最後並沒有說穿主角到底怎麼了,只是就像鬼打牆似的又回到故事的開頭,我那時候看完,真的是不懂到底發生了什麼事情。直到看完這部電影,我才明白發生了什麼事情。
  • Just married(IMDB, Wikipedia),中譯:新婚告急。要結婚的人可以參考的範本電影。電影一開始,男女主角就一路從機場吵回家,然後打算要離婚。接著男主角就開始回憶從相識到相愛到結婚到蜜月的過程。是的,你可以猜到問題在哪兒,就是他們認識的不夠深,所以在蜜月時,因為很多地方發生了摩擦,導致了離婚。之前有收過mail建議人家在婚前最好一起出去旅行一次,這樣可以比較深入地認識對方。原本我以為電影的最後是以離婚收場,但是這是好萊塢電影,所以,兩人還是和好啦~

Clipboard hooking in Gtk#

Windows 下要攔截 Clipboard 的事件處理的話,除了要 override WndProc 以外,還得利用 Windows 提供的函數 SetClipboardViewer()、ChangeClipboardChain()、SendMessage() 來告訴 Windows 說,你的程式會處理 Clipboard。

那在 Gtk# 下要怎麼作呢?

答案是處理 Clipboard 的 OwnerChange 即可,所以程式可以這樣寫:

	private Gtk.Clipboard m_clipboard;
public MainWindow (): base (Gtk.WindowType.Toplevel)
{
// Other stuff...
m_clipboard = Gtk.Clipboard.Get( Gdk.Selection.Clipboard );
m_clipboard.OwnerChange += new OwnerChangeHandler( delegate( object o, OwnerChangeArgs args ) {
m_clipboard.RequestText( delegate(Gtk.Clipboard clipboard, string text) {
Console.WriteLine( "text={0}", text );
} );
} );
}

首先要取得系統的 Clipboard,所以用 Clipboard 的 static function:Get 來取得,接著再指派我們的處理事件進去就行了。相對於 Windows 上的來說,簡單很多。

我有參考 glippper (gnome提供的剪貼簿工具,用 python 寫的),他拿了不只一個剪貼簿,它還用 GetForDisplay 去拿了另一個剪貼簿,我不知道有什麼差別,或許是處理多螢幕或是從遠端連進來時的情況吧~就目前來說,我應該暫時不必要照著glipper這樣作。

Gtk 裡的 trayicon:StatusIcon

Windows 的 Tray Icon 基本上就是對應到 Gtk 的 StatusIcon,用法蠻簡單的,在繼承自Gtk.Window的類別裡增加一個成員:Gtk.StatusIcon m_icon,然後在 constructor 裡加入:

		m_icon = new Gtk.StatusIcon();
m_icon.File = "./your_icon.png";
m_icon.PopupMenu += new PopupMenuHandler( delegate( object o, PopupMenuArgs args ) {
Console.WriteLine( "click" );
} );

這樣就可以動了。

當在 Icon 按下右鍵時,就會觸發 PopupMenu 事件。

電影流水帳(2010/3/13~2010/3/25)

到底是一個人好呢?還是有人陪好?這真的很難說。
我選擇了有人陪,所以我結婚了。結婚以後,兩人吵架生悶氣的時候,常常會想為什麼會搬石頭砸自己的腳,一個人好好的,幹嘛找另外一個人生氣。後來慢慢的,想法也有所改變,現在會看的比較開了。
Up in the Air 的最後幾幕對失業者的訪談,相當的感性,他們都表示了自己在失業時,最大的支持是來自己的家庭,如果沒有家庭的支持,他們可能會走不下去。這算是回應這部電影想表達的主旨吧~

  • Sherlock Holmes(IMDB, Wikipedia),中譯:福爾摩斯。這部片在某種程度上來說,的確顛覆了很多人對福爾摩斯的想像。小說帶給我們的,往往都是推理的那一面,但是能有那麼強的活動力去進行那麼多探案,這表示他除了推理行以外,身體跟運動神經應該也不錯,所以我覺得基本上還是相當符合的。另外外國人在教育上的作法其實跟孔子所提的六藝相當接近,也就是除了讀書以外,對於其他方面也相當的注重,自然很能打囉。這部片子除了這點跟一般人的期待不是很相同之外,倒是不脫一般偵探推理片的路,一開始先鋪梗,最後再來個大解謎,片尾留下伏筆,帶出會有第二集的訊息,看來是可以期待囉。我個人覺得還不錯。
  • 鬪茶(IMDB, Wikipedia)。片頭一開始的動畫,把故事帶的很好,讓我開始期待後面的鋪陳,不過很遺憾,可能是因為鬥茶本身就是屬於比較文靜的活動,後面劇情跟演員的演出一整個走調。Wikipedia裡把劇情交代了上半,下半劇情簡略來說,就是大家都碰到一起,母黑金茶被楊搶走,然後美希子說要來鬥茶,莫名其妙地,母黑金茶從楊手上回到如花手裡,美希子老爸用他在老婆掛掉前做的綠茶,楊用公黑金茶展開一場鬥茶。金士潔跟曾志偉出來鋪下台的路,說鬥茶其實是面對自己,就這樣,三人分別面對了自己之後,最後不了了之盡釋前嫌,楊跟如花重回舊好,美希子跟重新振作的老爸則回到日本。這部片真的莫名其妙。
  • Up in the Air(IMDB, Wikipedia),中譯:型男飛行日誌。我覺得很好看的片子,從看完到騎車回家,心情都還一直在戲裡,這部片堪稱是Georage兄的代表作了吧~劇情基本上跟你找到的簡介差不多,但結局會讓你覺得惆悵與一絲絲的失落,會讓你去思考Ryan這樣是好還是不好。除了Georage精彩的表現之外,飾演Alex的Vera Farmiga的幫襯也非常亮眼,這樣的熟女不管是哪個男人都會心動的吧,能讓人覺得安心,可以玩,又不依賴。如果不是她,結局不會是這麼的惆悵跟失落。另外,看起來是小妹妹的Anna Kendrick(才25歲!)表現也不錯。值得一看的電影。

mono 與 ssl

昨天在試 dotplurk 時,遇到了這個錯誤: unhandled Exception: System.Net.WebException: Error getting response stream (Trust failure): TrustFailure 。
循線追查,根據這篇:UsingTrustedRootsRespectfully,首先認為可能是 dotplurk 沒有做遇到未知憑證的處理。但是後來想想不對,因為 Browser 並沒有報遇到未知憑證的錯誤。
再繼續找,才又在這篇FAQ: Security,找到正解!因為 Mono 預設是不信任所有憑證的!!

That's probably because you do not trust the site you are connecting to. Note that a default installation of Mono doesn't trust anyone! 

那麼該怎麼解決呢?我後來是根據FAQ: Security所提供的第3種方法:以 mozroots.exe 去安裝 Mozilla 所有的根憑證就解決了。
微軟的 .Net famework 預設似乎是使用 IE 的,所以除非遇到未知的憑證,否則是不會遇到這種問題的。

在編譯時期判定是mono或microsoft.net

Mono 提供的 FAQ: Technical有提到如何動態判定版本與環境,但我找了好多文件都沒有提到在編譯時期是否有預設的 symbol 可用來判定。
看來只能在用 gmcs 編譯時加入 /d:MONO 了,這樣我就能在程式裡用 #if MONO 或 #if !MONO 來判定了。

夢境-台東

這是剛剛的夢,不趕緊寫下來,恐怕再過一會就忘了…
我和太座正好去台東找林兄,在他那兒做客。但是台東發生了大水。這邊有點遺忘了,我好像搭了一個奇怪的東西,很快地回到飯店。在飯店往外看,發現很多飛機被惡水衝成兩半在河裡翻滾,有人騎著機車也在河裡試著要上岸。這水實在太大,原本打算要去機場搭飛機回台北的,如果這麼多飛機被衝成兩半,那麼看來飛機是不能坐了。當下就跟太座說,你先跟林兄到高雄,再搭高鐵回去吧~等小孩醒了,我再趕過去。於是就開始準備。過一會,林兄的叔叔打電話來,說他到香港了,平安無事。然後林兄跟我交代了一下他叔叔的事情。小孩醒了,太座也正準備要走,所以我也趕緊打包好東西,帶著小孩要一起走。可是要怎麼到台東呢?這時候我說:搭捷運….
好吧,大致的記憶就到這裡…

Port Mini c# Lab to mono

在 Linux mono 平台上缺少了一個輕量級的開發工具,而 snippetcompiler 又沒有 open source,所以腦筋就動到 黑暗執行緒 開發的 Mini C# Lab 上。

下載原始碼以後,先試著用 MonoDevelop 開啟,但卻因為路徑與檔名問題失敗,Linux 使用的路徑分隔字元與 Windows 不同,對大小寫檔名也比較嚴格,調整以後,就能開啟了。

接著去編譯,稍微調整 References 以後,也可以順利編譯。

最後要執行了,卻出現下面的錯誤:

Unhandled Exception: System.EntryPointNotFoundException: HideCaret
at (wrapper managed-to-native) ICSharpCode.TextEditor.Caret:HideCaret (intptr)
at ICSharpCode.TextEditor.Caret.DisposeCaret () [0x00000]
at ICSharpCode.TextEditor.Caret.RecreateCaret () [0x00000]
at ICSharpCode.TextEditor.TextArea.OptionsChanged () [0x00000]
at ICSharpCode.TextEditor.TextArea..ctor (ICSharpCode.TextEditor.TextEditorControl motherTextEditorControl, ICSharpCode.TextEditor.TextAreaControl motherTextAreaControl) [0x00000]
at (wrapper remoting-invoke-with-check) ICSharpCode.TextEditor.TextArea:.ctor (ICSharpCode.TextEditor.TextEditorControl,ICSharpCode.TextEditor.TextAreaControl)
at ICSharpCode.TextEditor.TextAreaControl..ctor (ICSharpCode.TextEditor.TextEditorControl motherTextEditorControl) [0x00000]
at (wrapper remoting-invoke-with-check) ICSharpCode.TextEditor.TextAreaControl:.ctor (ICSharpCode.TextEditor.TextEditorControl)
at ICSharpCode.TextEditor.TextEditorControl..ctor () [0x00000]
at (wrapper remoting-invoke-with-check) ICSharpCode.TextEditor.TextEditorControl:.ctor ()
at MiniCSharpLab.Form1.InitializeComponent () [0x00000]
at MiniCSharpLab.Form1..ctor () [0x00000]
at (wrapper remoting-invoke-with-check) MiniCSharpLab.Form1:.ctor ()
at MiniCSharpLab.Program.Main (System.String[] args) [0x00000]

問題應該就出在 ICSharpCode.TextEditor.dll 裡,有空再用 MoMA 來分析或挖 ICSharpCode.TextEditor.dll 看看好了。

FileSystemWalker

用 foreach 以遞迴方式去找出所有檔案根目錄,順便練習 yield。

class FileSystemWalker
{
private string _path = "";
public FileSystemWalker(string path)
{
_path = path;
}
public IEnumerable<FileSystemInfo> Walk()
{
foreach( string d in Directory.GetDirectories( _path ) )
{
DirectoryInfo di = new DirectoryInfo( d );
yield return di;
FileSystemWalker walker = new FileSystemWalker(Path.Combine(_path, d));
foreach (FileSystemInfo fsi in walker.Walk())
yield return fsi;
}
foreach (string f in Directory.GetFiles( _path ) )
{
FileInfo fi = new FileInfo(f);
yield return fi;
}
}
}
class Program
{
static void Main(string[] args)
{
foreach(FileSystemInfo fsi in new FileSystemWalker(@"f:").Walk())
{
if( fsi.Attributes == FileAttributes.Directory )
Console.WriteLine( "[D]{0}", fsi.FullName );
else
Console.WriteLine("[F]{0}", fsi.FullName);
}
Console.ReadLine();
}
}

電影流水帳(2010/3/4~2010/3/12)

我很喜歡破碎的擁抱的這張海報,但是很可惜,官方網站沒有提供桌布。

  • Broken Embraces(IMDB, Wikipedia),中譯:破碎的擁抱。很好看的劇情片,這是作家 Harry 與 Lena 的愛情故事。Harry 在還沒瞎之前是個導演加編劇,他遇上了想成為女演員的富翁(Martel)女人 Lena,於是開始熱戀。但是 Martel 不放手,輾轉之後,兩人私奔。Martel 想逼兩人出來,把未完成的電影剪得亂七八糟,Harry跟Lena回去的路上發生了車禍,天人永隔,Harry因此失明。隔了十數年後,因為 Martel 的兒子來找他,才讓他把這件事情告訴他的兒子。
  • All about Steve(IMDB, Wikipedia),中譯:求愛女王。還可以看的喜劇片,躲在自己世界裡的填字遊戲作家遇到了很帥的攝影記者Steve,昏了頭,寫了關於Steve的填字遊戲,結果被Fire。然後開始展開追逐Steve的行動,追逐的過程裡,發生了許多的事情,讓她認知到其實Steve並不適合自己。