電影流水帳(2008/03/14~2008/03/21)

都是趁中午吃飯的時候看的~

  • Rambo(IMDB, Wikipedia),中譯:第一滴血4-出生入死。很簡單的故事,沒有做什麼特別的說明,導演盡可能地把真實呈現,讓觀眾自己去省思。戰爭永遠殘酷,對弱勢的人殘酷…
  • Sweeney Todd: The Demon Barber of Fleet Street(IMDB, Wikipedia),中譯:瘋狂理髮師。基本上這種音樂劇都很對我胃口啦~看過一些介紹,這部片子的確也是由音樂劇改編成電影的。整部片子都很陰暗、血腥,理髮師雖然最後報了仇,卻也因為Mrs. Lovett的私心,意外殺害了他以為已經不在人世的愛妻,之後被Toby殺害,以悲劇告終。裡面出現的角色都是不二人選,很難想到有哪些可以被替代。
  • The Truman Show(Wikipedia),中譯:楚門的世界。昨天在HBO看到的,其實之前也或多或少看了一些,昨天正好把前面給補上,整個算起來也有七七八八。對這個故事印象深刻的原因,是因為我在小學的時候,真的曾經就有這種想法,認為我活著的周遭是被捏造出來的,所以我曾有一段時間很認真地在想,如果道路是有限的,該怎麼去創造出無限延長的感覺,場景該要怎麼迅速地搭出來。後來長大了,走的地方多了,才發現並不是這樣子,不過換個方向來想,其實也是這樣子,只是這個世界是由造物主(或是叫上帝、神、佛祖,隨便)所創造出來的場景,之後的劇情是由自己決定,而不是由導演決定。

Banshee hack

從 src/Core/Banshee/Services/Banshee.Database/BansheeDbFormatMigrator.cs 的InitializeFreshDatabase()裡面可以看到 Banshee 建立了這些 table:

  • CoreConfiguration
  • CoreTracks
  • CoreArtists
  • CoreAlbums
  • CorePlaylists
  • CorePlaylistEntries
  • CoreSmartPlaylists
  • CoreSmartPlaylistEntries
  • CoreRemovedTracks
  • CoreTracksCache
  • CoreCache

並且針對各個 Table 建立了必要的 Index (好吧,我的疑慮解除了,其實 Banshee 有幫建檔的音樂作索引,那還要繼續看下去嗎?)
BansheeDbFormatMigrator.cs 裡面還可以看到以 Migrate_ 開頭的函式前面有 [DatabaseVersion] 這個 Attribute,這些函式是用來作 Migrate(升級)的函式,Banshee 會先檢查 CoreConfiguration table 的 DatabaseVersion 欄位,看目前 Database 是什麼版本,然後再決定要怎麼去作升級(這部份可以參考 Migrate(), InnerMigrate())。
存取資料庫的部份被包在 src/Core/Banshee.Services/Banshee.Collection.Database下的各個以 AlbumInfo 結尾的檔案裡面,裡面都大同小異,provider 成員為主要的提供者,這裡會傳入 ServiceManager.DbConnection 讓 BansheeModelProvider 的 instance 能根據此 connection 去存取資料庫。
所有的 connection 都是由 ServiceManager.DbConnection (src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs) 而來,而 DbConnection 其實只是一個服務 (src/Core/Banshee.Services/Banshee.Database/BansheeDbConnection.cs),在 ServiceManager 被初始化(static ServiceManager())的時候被註冊進去。
BansheeDbConnection 繼承自 HyenaSqliteConnection (src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs),從 HyenaSqliteConnection.cs 看起來似乎是為了要把存取資料庫這整個部份獨立為 Thread 以提昇 UI 效率,所以才另外作 Hyena.Data.Sqlite。
不過最終底層還是 Sqlite 3
Banshee 的 Main() 在 Client 類別 (src/Client/Nereid/Nereid/Client.cs),Client 繼承自 GtkBaseClient (src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs),扣掉註解不到 30 行…
補充1:HACKING Guide
補充2:我看的 code 是目前最新的版本,後來看過 0.13 的資料庫,發現的確沒有建 Index。