電影流水帳(2009/9/11~2009/9/21)

進度緩慢!突然有今年完成不了看百片的目標的預感!

  • Trainwreck – My Life as an Idiot (IMDB),中譯:天生“蠢”材必有用。這部片看起來很糟糕,不過這是一部描寫妥瑞症的片子,所以主角的表現跟妥瑞症的症狀相當接近。主角因為妥瑞症的關係,有點自暴自棄,讓自己生活在混亂之中,後來在輔導課程(坦白說,我不知道美國哪來那麼多輔導課程)的時候,認識了女主角,發生了許多事情之後,讓他痛下決心來改變自己的生活,不能再讓自己因為妥瑞症的關係,而生活在混亂之中。所以這是勵志片,片尾還放映了現實本人的 talk show,不過,我不是很喜歡這部片就是了。
  • Where the Truth Lies(IMDB, Wikipedia),中譯:赤裸真相。久仰大名的片,一直沒看。電影是以過去、現實交錯的方式來呈現,敘述Karen幫Vince寫傳記的經過,Karen小時候小兒痲痺,並因此參加了Lanny和Vince主持的募款晚會,她深受感動,長大以後,向出版社爭取寫Vince傳記,想多了解他的偶像一點。在跟他們兩人互動的時候,她慢慢地拼湊出當年他們兩人拆夥以及謀殺案的原因。相當不錯的電影,抽絲剝繭地娓娓道出事情經過與真相。
  • Monsters vs. Aliens(IMDB, Wikipedia),中譯:怪獸大戰外星人。很歡樂的片子,劇情不盡然全部合理,也銜接不是很好,可是B.O.B. 的台詞總是讓我笑,他的笑點跟 Patrick Star 有得拼。但是,我看到了這部片子的陰暗面,其實片子想說的是對人性的失望,你覺得不是?那麼為甚麼,Susan 最後相信怪獸的善良,繼續當人類眼中所謂的怪獸呢?

Upgrade Mono to 2.4.2.3 in Ubuntu Jaunty

網路上能看到的,多半都是自己編譯 tarball…

  1. 下載 mono in karmic 頁面 File 指示的三個檔案,先解開 mono_2.4.2.3+dfsg.orig.tar.gz,然後切到解開後的目錄下,打上 patch: cat mono_2.4.2.3+dfsg-1.diff.gz | gunzip | patch -p1,再用 chmod +x 幫 debian/rules 加上可執行的屬性。
  2. 安裝必要的套件: sudo apt-get install debhelper dpkg-dev libglib2.0-dev bison libtool dpatch libxml-dom-perl libxslt1-dev dc, lsb-release, libx11-dev libxt-dev zlib1g-dev autoconf automake
  3. 打開 debian/shlibs.local,把 libsqlite3 後面的 3.6.13 改為 3.6.10,因為 9.04 的 sqlite 是 3.6.10 版。
  4. 切到 mono 下,開始 build: cd mono;dpkg-buildpackage
  5. 把打包好的 deb 作成 local repository: 假設你把這些 deb 都放到 /opt/mono_debs 下,然後建立 Packages.gz: cd /opt/mono_debs && dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz。
  6. 新增 apt repository:在 /etc/apt/sources.list.d/ 下新增一個 mono.list,裡面放:
    deb file:///opt/mono_debs ./

    接下來就可以用 apt-get update、apt-get upgrade 來更新了。

理論上,這樣就可以更新了,但是事實上,因為 dependency 的關係,apt 會試圖安裝舊的 2.0.1 的 deb 來滿足相依性而導致應用程式有問題。
最好,也循上述的方法,把相關的基底 gtk-sharp2、xsp、gecko-sharp、mono-addins…等套件也重新 build 一次,這樣出現問題的情況應該會減少許多。
我個人建議,要用最新的 mono 還是衝 Karmic (9.10) 吧,這樣會省事很多。

Python 練習 – Google translate

因為看了A Bit? No!!!的這篇:写了个小小的翻译工具而做的小小練習。
基本上是作中翻英,但只要稍稍更動 langpair,就可以調整翻譯語言。

#!/usr/bin/env python
# -*= coding: utf-8 -*-
# http://www.oreillynet.com/pub/h/476 Encode Text for URLs
# http://evanjones.ca/python-utf8.html How to Use UTF-8 with Python
# http://abitno.linpie.com/a-small-translate-tool.html 寫了一個小小的翻譯工具
import sys
import os
from urllib import urlencode
import urllib2
import json
def get_json( uri ):
response = urllib2.urlopen( uri )
return response
def translate( text ):
uri="http://www.ajax.googleapis.com/ajax/services/language/translate"
query=urlencode( { 'v': '1.0', 'langpair': 'zh|en', 'q':
text.encode('utf-8') } )
uri = uri+"?"+query
return json.load( get_json( uri ) )
text = unicode( sys.argv[1], "utf-8" )
print unicode( text ) + u" => " + translate( text )['responseData']['translatedText']

電影流水帳(2009/9/1~2009/9/10)

同事借我的鋼之煉金術士有幾片有問題,所以就…放棄了。看動畫畢竟還是很費時間,所以要選~

  • Ghosts of Girlfriends Past(IMDB, Wikipedia),中譯:舊愛找麻煩。Matthew McConaughey演的 jerk 真的是很機車,但是坦白說,這整部片真是場災難,我不喜歡這部片子。
  • 向左走、向右走。我始終搞不清楚我有沒有看過這片,在看的過程中,始終覺得似曾相識。故事其實就繞著這句詩打轉:

    緣份將他們推進、驅離,阻擋他們的去路,忍住笑聲,然後閃到一旁…

    說穿了,跟村上的百分百女孩有異曲同工之妙。裡面的兩個配角非常有趣,然後赫然發現女配角是關穎,以前可能就不會注意到她。還不錯看的片子~

  • Extreme Ops(Wikipedia),中譯:巔峰殺戮。多加一個 O 就是 Oops。專拍特技的一群人去山上拍廣告,結果碰到假死的軍事強人,展開一場亂鬥,最後軍事強人真的掛了。很…普通的劇情,但是裡面滑雪場景倒是相當壯觀,因為是在阿爾卑斯山拍的,有機會是應該去走走。

quilt

今天終於試用了 quilt,這是一個可以管理 patch 的工具,最早由 Andrew Morton 的一些 script 而來。
專案本來就有寫一些 script 來作 apply 的工作,只是,在想要倒回去或向前的時候,會變得非常麻煩!用 quilt 的話,可以方便的向前或向後。
因為已經有 patch 了,所以施作的方法很簡單,先 import,再 push。

quilt import patch01
quilt push
quilt import patch02
quilt push

之後就可以用 pop 往回推,或用 push 繼續往前了。
小記:坦白說,本來想放棄直接用 git 來作的…因為剛好在看 ProGit,覺得 git 或許會更適用也不一定,不過只是想簡單地往前或往後測試 patch,用 quilt 應該就夠了。
參考資料:

Python 練習 – 抓書

早上用了大概兩個小時搞這個,這是用來抓的,除了抓以外,還直接把 script 、廣告…等都清掉,只留下書的內容。用法很簡單,執行這個 script,參數帶上那本書的網址就行了。
程式碼怎麼排都不行,所以丟到這裡了。

電影流水帳(2009/8/25~2009/8/31)

為甚麼會喜歡看電影呢??今天早上我隨意瀏覽電影類 blog 文章時,突然想到這件事情。好像也沒什麼來由,就喜歡上了。我想,人應該都是喜歡看、聽故事的,不管故事是以電影、小說、路邊潑婦罵街…等或是其他的方式呈現出來。但是,主要的原因是什麼呢?

  • 雲のむこう、約束の場所,很好看的動畫電影,流暢的配樂、恰當的口白,完整地、動人地述說故事,你一點也不會發覺到這是科幻電影,只會覺得…很好看…
  • Blood, The Last Vampire (2000)(Wikipedia)。這是動畫版的Blood: The Last Vampire,片子不長。我個人覺得比 09 年的真人版來的好看,真人版故事大架構跟動畫差不多,原本的護士被替換為駐守基地的將軍的女兒,反派角色被換為小雪,然後加上了串場的故事情節。但是看過動畫版,我覺得真人版加上的一些東西其實一點都不需要,把故事當作是像怪談之類的鬼故事來看,會比較恰當,這也可以說明為甚麼最後會有那一段口述。
  • 17 again(IMDB, Wikipedia),中譯:回到17歲。失意的中年人因緣際會下回到17歲,藉此了解了他的兒女和找回愛老婆的原點,很老梗的故事。但裡面配角 Ned Gold 把妹的經過卻深深吸引了我,簡單的說,Ned 是個深愛 Star Wars、The rings 的阿宅,他遇到了吸引他的女校長,用盡各種怪招,卻始終不得其門而入。女校長也很困擾,一直擺脫不了 Ned,後來為了 Ned 的捐贈,而接受了他的晚餐邀約。晚餐裡,女校長嚴詞拒絕了 Ned,Ned 脫口而出的甘道夫,居然成為叩關的關鍵,接著不可置信的,女校長說了精靈語,於是兩人就用精靈語交談起來。這實在是太妙了!

會自殺的類別

坦白說,我從沒想過物件可以自殺這件事情。當我看到這樣寫的時候,實在是很令我驚訝…實驗的結果,還真的是可以。

#include 
class SuicideSample {
public:
SuicideSample() { std::cout << "ctor." << std::endl; }
~SuicideSample() { std::cout << "dtor." << std::endl; }
void DoIt( void ) {
delete this;
}
};
int main( int argc, char* argv[] )
{
SuicideSample* obj=new SuicideSample();
obj->DoIt();
// of course, object can kill itself, but if you try to kill it again
// program will crash.
//delete obj;
return 0;
}

電影流水帳(2009/8/14~2009/8/24)

為什麼家裡裝了 CentOS 的 Server 的 CD-ROM 會莫名其妙地 eject 出來?是因為太熱導致 CD-ROM 短路而自動 eject 嗎?完全找不到原因,看來過幾天要來拔電源線,一方面是避免莫名其妙地 eject,一方面是避免二位公子去亂搞。

  • Blood: The Last Vampire(IMDB, Wikipedia),中譯:血戰:最後的吸血鬼。聽了J同事的說明,才知道這部片子是由漫畫改編的,2000年的時候還有出動畫的版本。劇情的主軸是個復仇的故事,女主角是翼手(類似吸血鬼的生物)跟人類的混血兒,由於翼手將他的父親殺害了,所以她決心報仇,故事的最後,她發現自己要殺的人居然是他的母親。真人演出的這部,坦白說,讓女主角以人類身份將自己母親殺害的理由有點薄弱,而且,她的母親也被殺的太快了,最後,Alice 看起來也應該是會被關到精神病院的,卻在莫名其妙的審問狀態下結束。雖然沒看過動畫或是漫畫,不過我想動畫版或漫畫應該會比較好看吧~
  • Terminator Salvation(IMDB, Wikipedia),中譯:魔鬼終結者-未來救贖。開始一個新的故事架構是正確的,不過誠如朱學恆大大所說,設定實在有些不太合理啊~The matrix 裡,人類都在地底活動,這我可以理解,那是電腦故意放水,但是 Terminator 前三集不是說,人類都被打趴嗎?怎麼會有空軍還能跟機器周旋?這實在是有點奇妙啊~算了,總之看起來應該是會有第五集,希望是可以說明的更清楚一些,這一集普普通通。
  • Ice Age: Dawn of the dinosaurs(IMDB, Wikipedia),中譯:冰原歷險記3恐龍現身。故事借用了地心理論,讓恐龍繼續存活在地底,相當的不錯。個人覺得這個續集的笑點不錯,我很喜歡Buck、Crash跟Eddie這三個瘋狂的傢伙,特別是他們要經過充滿笑氣的峽谷那段,讓我不自覺地笑了好幾次~這部片子是不難看的續集電影。

Python 練習 – 將 Bing 的每日桌面圖像變成 GNOME 桌面

上星期看到這篇:如何将Bing的每日桌面图像变成我的Windows 7桌面,就順手試試看改用 Python 來作,執行這個 script 以後,會自動拿 bing 的圖片來作為你 GNOME 的桌面背景圖片。
目前只有一個小問題,就是 xml.dom.minidom 有時候會因為 & 的關係導致解析失敗。

#!/usr/bin/env python
import random
import os.path
import subprocess
import urllib2
import xml.dom.minidom
from xml.dom.minidom import Node
def get_xml():
response = urllib2.urlopen('http://feeds.feedburner.com/bingimages')
xml = response.read()
return xml
def parse_and_get_first_image_uri( xml_str ):
if xml_str=="":
return ""
doc=xml.dom.minidom.parseString( xml_str )
urls=[]
for node in doc.getElementsByTagName("enclosure"):
urls.append( node.getAttribute("url") )
index=random.randint( 0, len(urls)-1 )
if len(urls)>0:
return urls[ index ]
else:
return ""
def get_uri( uri, output ):
response = urllib2.urlopen( uri )
image_file=open( output, 'w' )
image_file.write( response.read() )
image_file.close()
return
def set_wallpaper( filename ):
args=[]
args.append( 'gconftool-2' )
args.append( '/desktop/gnome/background/picture_filename' )
args.append( '--set' )
args.append( filename )
args.append( '--type=string' )
subprocess.call( args )
uri=parse_and_get_first_image_uri( get_xml() )
tmp_dir = os.path.join( *(os.path.expanduser("~"), "tmp") )
if uri!="":
if not os.path.exists( tmp_dir ):
os.mkdir( tmp_dir )
filename, extname = os.path.splitext( os.path.basename( uri ) )
image_filename=os.path.join( *( tmp_dir, "bing" + extname ) )
get_uri( uri, image_filename )
set_wallpaper( image_filename )
else:
print "get nothing."