Windows 版的 Python 在安裝以後,你會發現目錄下除了 python.exe 以外,還有一個 pythonw.exe,這是做什麼的呢?
簡單的說,python.exe 是一個 console 程式,執行 Python 程式的時候,在建立捷徑的時候,你會這樣寫:python your_app.py,但是執行時會出現一個黑色的 console 視窗。
pythonw.exe 作用則在於,不出現那個黑色的 console 視窗。
好,那 monow 的作用為何,你應該也能了解了吧~
特別指出這個的原因,是因為我這幾天在看 Mono 裝了什麼東西時發現的,其實我陸續還有看到一些東西,慢慢再介紹。
電影流水帳(2008/03/29~2008/04/05)
一部片子不錯,另一部片子則不怎麼樣,這就是所謂的“一則以喜,一則以憂”嗎?
- Aliens vs. Predator: Requiem(IMDB, Wikipedia),中譯:異形戰場2-適者生存。嗯嗯,老實說,我覺得這部片子特效是還可以,但是實在是不太值得進電影院去看,第一集還比較好看呢~
- Ratatouille(IMDB, Wikipedia),中譯:料理鼠王。我覺得跟超人特攻隊一樣,都是給大人看的卡通,劇情不用多說了,網路上應該都可以找到。最後美食家所寫的那篇評論,相當感人,值得一看的卡通。
亂碼 1/2
此亂碼非彼亂馬啊~
家裏 Server 的 Mono 升級到 1.9 以後,ASP.Net 網頁裡的中文突然都變成了亂碼,可是我什麼都沒改啊~
由於個人因素 (就是懶啦),一直都沒去管,今天看開了,決定找出真兇…
首先試著直接跑 xsp2 之後,用 Browser 去看結果,正常,沒有亂碼。很好,那麼應該是 mod_mono 跟 Apache 的問題囉~
再看看有亂碼的網頁,看看送出來的網頁與 Response header 是否正確,送出來網頁的中文都變成了 ?,可是從資料庫撈出來的字卻又都沒問題,可以正常顯示,網頁的 Response header 也沒問題。很好,那真的是 mod_mono 與 Apache 的問題了。
仔細看了 mod_mono 的設定,唯一我覺得有問題的,就是 MonoSetEnv,可是我確實地已經設定了 MonoSetEnv “LANG=en_US.UTF-8″,應該不會有問題才對。
好,那麼就寫個簡單的網頁把所有環境變數列出來看看,果不其然,LANG = C,這表示LANG並沒有被設定,那麼會出現亂碼也是很正常的了。LANG 對 Linux 來說,是很重要的環境變數,沒有這個,很多應用程式將無法判斷目前所在的語系與編碼。
那麼是 mod_mono 問題囉?可是看過 source code 之後,發現沒有特別針對 MonoSetEnv 做什麼修正,再回頭看看列出來的環境變數,我發現我在設定檔裡面設定的 TEMP 環境變數有生效,那麼?!
再仔細看一次 mod_mono 的說明,原來如果你要設定多個環境變數時,要加上 ‘;’,所以在我改寫為 MonoSetEnv “LANG=en_US.UTF-8;TEMP=/var/tmp”,重新啟動之後,問題就解決了。
p.s. 那…為啥以前沒錯?! 我想可能是 Apache 的 apr 行為有改變吧~
以 public key 進行 SSH 登入
首先,謝謝你!HowToForge。
環境:以下都是從電腦 A 要登入到 Server B (Linux)
步驟:
- 先為電腦A產生Private/Public key
- Linux: 用 ssh-keygen
- Windows: 用 puttygen.exe
- 把產生好的 Public key (用 ssh-keygen 的話,通常是 id_dsa.pub﹔用 puttygen.exe 的話,它就在上面的方塊裡。)附加到 Server B 登入帳號的 .ssh 目錄下的 authorized_keys2 裡面,如果沒有 authorized_keys 就自己建一個!舉例來說,如果你帳號是 xyz,那麼就是 $HOME/.ssh/authorized_keys 。
- 收工。
電影流水帳(2008/03/22~2008/03/28)
這次看的兩部片子,故事講的都是見不得人的故事…一個是特務,一個是殺手…
- The Bourne Ultimatum(IMDB, Wikipedia),中譯:神鬼認證:最後通牒。終於結局了啊~Jason 最終得知了他自己的名字:David,也解決了所有事情。亂找的時候,逛到了英文版 Wikipedia的說明,才發現原來這三部曲也是小說改編的,而且這小說還是在 1990 年前就寫好的了~看Wikipedia真的是能看到很多資訊呢~
- Hitman(IMDB, Wikipedia)),中譯:殺手47。這也是一部由電玩改編的電影,講的是一個殺手的故事,看起來很有可能拍續集的樣子。我覺得拍的還不錯,娛樂效果佳,可是有些畫面非常血腥暴力,兒童不宜。電影裡的女主角Olga Kurylenko(Wikipedia)很正!而且還有裸露畫面,不可不看!!(Google Image搜索結果, flickr 搜索結果)另外很巧的還看到在Prison break裡面飾演T-Bag的Robert Knepper,如果你看過 Prison break 的話,對這個壞人臉大概會很難忘懷…
電影流水帳(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。
我的第一個 Greasemonkey user script – ClickNextPage
為了看線上漫畫方便而寫的,本來是要滑鼠按上一頁、下一頁,現在只要按下’x’或’c’就可以到上一頁或下一頁,目前只能使用於九啦啦動漫~
原理不難,就只是請 Greasemonkey 在頁面載入時,幫忙掛上寫好的 userscript,而這個 userscript 也只是去處理 keyup 事件而已。
從看Dive Into Greasemonkey入門到完成,大概花了一個小時多一點的時間,應該算慢的吧~
我估計如果對 Javascript DOM 熟的人,應該可以比我更快寫好,我對 Javascript DOM 並不是那麼熟悉,而且,我已經被 jQuery 給馴化了…唉~沒辦法,jQuery 實在是好用又好查啊~
完成的作品在這裡,如果你有裝Greasemonkey的話,點選連結以後,就會有對話框問你是否要安裝了~
VisualSVN Server
想到可以來介紹一下這個:VisualSVN Server。
讓我想想~記得應該是去年年底的時候,不知在哪兒逛到的~
原本以為會不會跟VisualSVN一樣,是個商業化的產品,後來看過以後,才知道並不是。
言歸正傳,VisualSVN Server骨子裡其實就是Apache HTTP Server+Subversion,另外再加上VisualSVN製作的一個簡單管理介面。
如果你覺得自己手動安裝 Apache HTTP Server+Subversion很麻煩而你剛好又不想用 Linux 的話,不妨試試看這個,我自己試過了,如果你沒有要綁什麼特別的認證機制(如 SSPI)的話,這個軟體可說是相當地方便。
p.s. VisualSVN是一個給 Visual Studio 用的 plugin,讓 Visual Studio 也能直接以Subversion來作代碼管理。
gnome-settings-daemon 無法啟動
由於很勇敢地衝了Ubuntu Hardy 的緣故,常常會有很多驚喜~
這幾天是遇到 gnome-settings-daemon 無法啟動的問題,開啟終端機試著以手動方式啟動會出現如下訊息:
The program 'gnome-settings-daemon' received an X Window System error. This probably reflects a bug in the program. The error was 'BadRequest (invalid request code or no such operation)'. (Details: serial 107 error_code 1 request_code 151 minor_code 6) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.)
爬文以後,發現已經有人回報,從 2.21.9 以後就是如此,但是都還沒有解。
依照訊息的建議,改以如下指令再試試:
gnome-settings-daemon --debug --no-daemon --sync
這樣會丟出比較多的錯誤訊息,這邊只列出關鍵部份:
** (gnome-settings-daemon:20265): DEBUG: Registering GsdXrandrPlugin ** (gnome-settings-daemon:20265): DEBUG: Creating object of type GsdXrandrPlugin ** (gnome-settings-daemon:20265): DEBUG: GsdXrandrPlugin initializing ** (gnome-settings-daemon:20265): DEBUG: Activating xrandr plugin ** (gnome-settings-daemon:20265): DEBUG: Starting xrandr manager The program 'gnome-settings-daemon' received an X Window System error. This probably reflects a bug in the program. The error was 'BadRequest (invalid request code or no such operation)'. (Details: serial 107 error_code 1 request_code 151 minor_code 6) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.)
喔~這樣看來應該是是 xrandr 的關係~
xrandr 是用來動態切換螢幕用的,舉例來說,接投影機或是額外螢幕時,就會用到~
不過,我現在用不到,那麼,要怎麼停用這個 plugin 呢?
這就得用 gconf-editor 了,使用 gconf-editor 去把 /apps/gnome_settings_daemon/plugins/xrandr/active 機碼改為 0,然後重新啟動 XServer 即可。