早上用了大概兩個小時搞這個,這是用來抓書的,除了抓以外,還直接把 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."
電影流水帳(2009/7/29~2009/8/3)
趁著家庭休憩日,把蘋果核戰記以及續集看完了,很讚的電影。看完以後把昨天去 IKEA 買的書櫃組合起來,這次組的很成功,超有成就感的,當然也很佩服 IKEA 的貼心設計,讓組裝變得簡單許多。
- Watchmen(IMDB, Wikipedia),中譯:守護者。這片超級對我胃口的,我很喜歡這部電影。跟超人特攻隊一樣,這片其實想說的是超級英雄的內心世界。片子的最後,是英雄選擇了當大壞人,讓世界各國能因此攜手合作,完成世界和平的目標,不看到最後,絕對不知道為什麼 Ozymandias 要這麼作。裡面的演員除了演一代絲靈的Carla Gugino大姊姊我認識以外,其他人都不認識。
- Appleseed(IMDB),中譯:蘋果核戰記。很讚的 3D 電影,跟漫畫的話風差很多,雖然有些地方交待不清,不過還是很讚。
- Appleseed Ex Machina(IMDB, Wikipedia)。很讚的 3D 動畫,這集是吳宇森擔綱製作人,裡面很多的動作、場景都借鏡了駭客任務以及吳宇森的風格,所以動作場面就顯得很讚。
jquery 與 iframe
假設 iframe 的 id 是 f,裡面有個按鈕 id 是 btn,那麼要存取 iframe 裡的元素,可以這樣寫:
[javascript]
// http://simple.procoding.net/2008/03/21/how-to-access-iframe-in-jquery/
alert( $(‘#f’).contents().find(‘#btn’).html() );
[/javascript]
再假設父頁面裡有個 id 是 ta 的 text,iframe 裡要存取父頁面裡的元素,有兩種寫法:
[javascript]
// 方法一 (http://webdevel.blogspot.com/2007/03/iframes-and-jquery-working-with-iframes.html)
alert( parent.$(“#ta”).val() );
// 方法二 (http://groups.google.com/group/jquery-en/browse_thread/thread/5997ef4a60a123af?pli=1)
alert( $(“#ta”, parent.document.body).val() );
[/javascript]
不過,在碰到 cross domain 的情況時,就會行不通了。拜 Google 大神 的時候,大神有提到一些解,但我嫌麻煩就沒再去試了…
參考資料:
電影流水帳(2009/7/20~2009/7/28)
看片速度變慢了,這幾天要在晚上抽空看 Apple Seed,這片 3D 超細膩的,跟漫畫比起來真的差很多,希望可以如願完成看片計畫。
- Night at the Museum: Battle of the Smithsonian(IMDB, Wikipedia),中譯:博物館驚魂夜2。這一次,主角已經是公司老闆了,不過他不是很快樂,所以主題就是要作自己快樂的事情。飾演Amelia Earhart的Amy Adams比較吸引我目光,而且很面熟,原來她之前演過Enchanted (2007),這就難怪面熟了。
- 河童のクゥと夏休み(Wikipedia),中譯:河童之夏。河童因為地震被封起來而穿越時空來到現代,遇到了人類所發生的事,很溫馨。原本以為後面會來個超級催淚彈的,後來幸好只是小催淚彈,最後當然是快樂的 happy ending,超適合小朋友看。
在 Ubuntu 9.04 使用 svk 出現 Can’t locate Time/Progress.pm
在公司正想用 svk 把 monodevelop source code 拉回來時,發現有 Can’t locate Time/Progress.pm 訊息,然後就停止運行了。
上 Launchpad 找了一下,發現已經有人回報了:Bug #317487 in svk (Ubuntu): “2.2.1 needs Time::Progress”,後續的回覆裡,也提供了好幾個 workaround,我選擇直接修改 Notify.pm,因為以後 apt-get upgrade 時,新檔案會把舊檔案覆蓋掉。
python twisted sendmail
buildbot 是用 twisted library 裡的 sendmail 寄信的,方法如下:
from email.Message import Message
from twisted.mail.smtp import sendmail
from twisted.internet import defer
from twisted.internet import reactor
m = Message()
m.set_payload("Hello world!!")
m['To']="someone@somewhere.com"
m['Subject'] = "Test"
m['From'] = "my@somewhere.com"
s = m.as_string()
done = sendmail( "mailserver", "my@somewhere.com", [ "someone@somewhere.com" ], s)
done.addCallback(lambda ignored: reactor.stop())
reactor.run()
但現在大多的 mail server 都需要先認證,這時候就得改用 ESMTPSenderFactory 來改寫了(可參考Twisted mail smtp API),mailing list 裡正好有人貼出程式:
from twisted.mail import smtp from twisted.internet import reactor from twisted.internet import defer try: from cStringIO import StringIO except ImportError: from StringIO import StringIO def sendmail_auth(smtphost, user, password, from_addr, to_addrs, msg, senderDomainName=None, port=25): if not hasattr(msg,'read'): msg = StringIO(str(msg)) d = defer.Deferred() factory = smtp.ESMTPSenderFactory(user, password, from_addr, to_addrs, msg, d, requireTransportSecurity=False) if senderDomainName is not None: factory.domain = senderDomainName reactor.connectTCP(smtphost, port, factory) return d
再套前面的例子,只要改動 sendmail 為 sendmail_auth 就行了:程式:
done = sendmail_auth( "mailserver", "your_username", "your_password", "my@somewhere.com", [ "someone@somewhere.com" ], s)