電影流水帳(2012/7/13~2012/7/31)

brooklyn-decker-gallery-2

  • Battleship(IMDB, Wikipedia),中譯:超級戰艦。電影的故事很合理,外星人的確未必是友善的。地球人主動向外太空可能有生命的地方發射訊號,導致了外星人派出先遣部隊來犯。剛好,降落的地方就在夏威夷舉行軍事演習的地方,就展開了一場戰役。一開始,地球人是處於弱勢的,但是在後期掌握足夠的資訊以後,開始反擊。是說後面也有點誇張,一艘老戰艦竟然還能運作並且作戰。還不錯看啦,只是對於那個男主角,真的很想巴下去,到底是在孬種的什麼勁,該開口跟女友父親說的就快說啊,真是的。男主角正巧就是上次看過的 John Carter 的男主角,表現還不錯,但他的女友才是亮點(如上圖)。
  • Safe house(IMDB, Wikipedia),中譯:狡兔計畫。CIA 在各地都有租用公寓,作為秘密行動時可以使用,被稱為Safe house。這次則是逮到大咖的人 Tobin Frost,他拿了一份秘密的名單遭到追捕,到了男主角 Matt 在顧的公寓,要開始嚴刑拷打。想不到卻被追殺,所有人都被殺了,Matt 帶著 Tobin 要到下個 Safe house 去。Tobin 一直想逃掉,一度也逃掉過,但是在 Matt 鍥而不捨的追查下,還是抓到。在追查的過程中,Tobin 慢慢跟 Matt 分享為什麼他叛逃 CIA 並握有名單的原因。原來是因為 CIA 內部有嚴重的收賄問題,而他握有的名單就是這些人的名單,這也是被追殺的原因。這些追殺他的人其實也是 CIA 的人。最後 Matt 與 Tobin 聯手消滅了追兵,但 Tobin 受傷太重而死去。Matt 回到局裡以後,上了假報告,然後把這份名單偷偷發給媒體,於是高層展開調查…

 

 

calibre-haodoosearch 為 Calibre 增加搜索好讀網站並下載的功能

昨天在用 Calibre 時,突然想到如果可以直接在 Calibre 裡直接做搜索與下載的動作不是很好嗎?原本是先去好讀網站上搜索,然後下載到某個資料夾以後,再放到 Calibre 裡,這樣的動作很繁瑣。

有起了念,就趕緊去找,之前是看過幾次寫 Calibre plugin 的文,但這次是增加對書籍的搜索,不知道是不是可以寫這樣的 Plugin。在 Calibre 的源碼裡翻找了一下,大致知道這樣是要寫個 Store,所以就用 Calibre store plugin 去搜索,就找到 Store plugin 的討論串。這個討論串裡面正好有提供框架,就直接拿來改了。今天改了一上午,就改的差不多了,源碼放在 github 上 。有需要的人就自行取用,使用上有一天一百次的限制,這是 Google APIs 的限制,你可以試著申請 developer key,然後把 haodoo.py 裡的 key 改掉,就可以自己擁有一天 100 次 query 的限額。

順便記錄一下幾個心得:

  • 可以直接用 print() 印訊息,然後搭配 calibre-debug 就可以看到輸出。
  • 在設定 actual_plugin 時,搞了好久,然後才發現是自己忽略了框架plugin裡的 .txt 檔案。這個檔案名稱決定了 actual_plugin 屬性該怎麼寫。
  • 實驗結果,Calibre 從 UI 傳下來的字串是 utf-8,然後直接宣告字串變數的話,該字串變數則是 unicode 。
  • 最好不要使用 Calibre 裡面沒包的 library,要不然會很麻煩。我本來是打算用 Google API client library 來執行 custom search,但是後來發現有太多依存關係,就放棄了。
  • 有些字串在印完會丟出例外,我後來乾脆都用 try except 包起來,要不然會沒辦法繼續執行/除錯。
  • 可以自己寫批次檔來做快速佈署的工作,這在 Writing your own plugins to extend calibre‘s functionality 有介紹,會省掉很多工夫。主要就是 calibre-customize 這指令,當這樣用時 calibre-customize -b /your_plugin/ ,會自動幫你把 your_plugin 壓縮成 your_plugin.zip ,並且放到 Calibre 的 plugins 目錄 (Windows 上是在 $USERPROFILE\Application Data\calibre\plugins )。

 

電影流水帳(2012/6/30~2012/7/12)

A Princess of Mars

  • John Carter(IMDB, Wikipedia),中譯:強卡特戰記。這是改編小說的電影,小說的原名是A Princess of Mars(火星的公主),原文小說可以在古騰堡計畫裡下載。故事採取倒敘法,一開始主角就突然死去,留下家產給他的姪子,他的姪子趕緊趕來,然後開始閱讀他的日記。歷史背景是在美國建國初期,主角原本是個軍人,他把自己奉獻給國家,但是後來卻因為妻小被殺害,萬念俱灰,就不再從軍,改去淘金。淘金時,他被軍隊抓住,之後他挾持軍隊的長官逃出,逃到某個洞穴時,遇到 Thern,被傳送到火星去。在火星,由於重力的關係,主角變得很厲害,一開始是被Tharks(火星上的某個種族)抓住的,之後救了Dejah公主,之後在一連串冒險之後,他找到自己的目標,就在Dejah為了Helium的和平與Zodanga結婚之時,帶領著Tharks打倒Zodanga救了Dejah公主。然後新郎就變成了主角,主角與Dejah公主成親的當晚,他把Thern的項鍊丟掉,決定不再回地球,造化弄人,Thern的領袖突然出現,把他傳送回了地球。主角為了再回到火星,開始運用他找到的金子四處考古,想找到那個可以傳送他回火星的項鍊,但一直都沒找到。這一天,他突然想到一個方法,於是他就發電報找了他的姪子回來…結尾的這個梗我覺得很有趣,暗示了可能拍下一集,我就不破梗了。
  • The RAID: Redemption(IMDB, Wikipedia),中譯:全面突襲。超讚的動作片,從頭打到尾,氣氛跟武打都很到位!主角是個特警,局裡出任務,正好是要去他弟弟所在的地方進行勦滅任務。進去那個屋子以後,就開始打打打,打的很精彩,也很血腥。最後靠著他弟弟的幫忙,打倒了大魔王,然後也帶回那個串通敵方的人。

Calibre小補強

是這樣的,我在公司的電腦安裝了Calibre,想利用send to kindle把電子書寄到指定的e-mail位址,這樣Kindle就會自動更新。但是公司的郵件伺服器不提供SMTP,而Calibre本身的郵件設定又只有跟SMTP相關的部份,因此只能作罷。

這幾天想了又想,本來已經放棄,想要開始hack Calibre源碼,自己作一個 plugin 來補強了。但是正好看到有Open With這個 plugin ,靈機一動,就想到有這個,不就可以自己寫一個 script 來搭配使用了嗎?於是就開始實驗。

  1. 先開始一個 sendmail.vbs 檔案,然後利用 WScript.Arguments 來取參數。這裡首先遇到的問題是 Calibre 直接呼叫 sendmail.vbs 時,會出現 Error 193 的錯誤。這是因為 python subprocess 模組(Calibre是用Python寫得)不認為 sendmail.vbs 可以被執行,所以要繞路一下,多寫一個 sendmail.cmd,裡面則是用 wscript sendmail.vbs 來呼叫,這樣就可以了。
  2. 取得的參數是帶有完整路徑的檔名,因為我不想郵件的主旨又臭又長,所以就用 Scripting.FileSystemObject 的 GetFileName ,這樣就可以只取得檔案名稱。
  3. 寄信,需要附件,我是參考這篇,利用 Outlook 來寄信。使用 Outlook 寄信會跳出一個安全警告,這個沒辦法避掉,要避掉就只能改用 CDO 或其他方式,暫時就這樣用吧。

 

django-navbar

django-navbar 簡單說就是提供 navigation 的解決方案,類同於 ASP.Net 裡的 sitemap。

使用方法不難,但也讓我摸索了一陣子,這邊記錄一下:

  1. INSTALLED_APPS 加入 navbar
  2. TEMPLATE_CONTEXT_PROCESSORS 要加入 “navbar.context_processors.crumbs”, “navbar.context_processors.navbar”, “navbar.context_processors.navtree”, “navbar.context_processors.navbars”,預設原來的 settings 裡並沒有 TEMPLATE_CONTEXT_PROCESSORS,所以要自己加。但不是只加入這4個就好,而是還要加入原來的幾個
  3. 要 syncdb ,這會加入兩個 table。
  4. admin 裡會多出 NavBarEntry 的項目設置,注意:在 admin 設置完成以後,要重新 runserver,這是因為 navbar 是把資料預先塞到 Context Processor 裡,只有一開始才會去資料庫撈資料。
  5. 樣板有好幾個用法,但都要先 {%load navbar%},這可以參考 navbar/templates/navbar/ 下的檔案來進行使用。
  6. 有提供 breadcrumbs (就類似 “首頁 / 大功能 / 小功能” 這樣),但是沒有提供樣板,你可以自己刻,變數是在 crumbs 裡,用 {{ crumbs }} 就可以看到。

電影流水帳(2012/6/15~2012/6/29)

6.1.12 - "Piranha 3DD"

  • Colombiana(IMDB, Wikipedia),中譯:黑蘭嬌。九歲小女孩的父親想要洗手不幹,老大不想,就把他全家滅了口。小女孩很幸運,靠著父親留下的證據跟快腳,得到美國庇護,逃出了哥倫比亞,到美國投靠叔叔。小女孩跟叔叔表示不想唸書,想要當殺手幫父母復仇,叔叔很清楚的告訴他,不管怎麼樣都要唸書,學校所教的是我沒辦法教你的。於是時光飛逝,小女孩長大成人成了一個獨當一面的女殺手。在殺了某個人之後,FBI決定公開連續殺人事件,於是她殺人的手法也曝光,她的叔叔很生氣,說這樣會害了整個家族。果然過了不久,叔叔的整個家族都死光了,凶手一樣是當初害死她父母的人,她非常後悔,也很生氣,就對 FBI 負責偵辦的人下手,逼迫他去找出當初害死她全家的人的地址。原來當初害死她父母的人也透過美國 CIA 的證人保護計畫而躲了起來,經過施壓與威嚇 CIA 負責該案件的人之後,終於取得地址,然後展開復仇。不難看的女性復仇電影,場面相當精彩。
  • 名探偵コナン 沈黙の15分(IMDB, Wikipedia),中譯:名偵探柯南-沈默的15分鐘。越來越不好看了,推理就是在中間理所當然地被推斷出來,少了很多懸疑點。凶手就是為了取出沈在水庫裡的鑽石,才寫信去威嚇都知事,之後,柯南想說就去水壩所在的村子進行調查。然後遇到村子裡的一伙人,很順利地推斷出去坐過牢的山尾就是主凶,而且還想把水壩炸掉以取得裡面的鑽石。這邊可以發覺到柯南已經快成了超人了,居然可以比破堤的大水還快,還可以引發雪崩去阻止大水,太神了。
  • Piranha 3DD(IMDB, Wikipedia),中譯:3D食人魚2:全面獵殺。很可惡也很噁爛的片,明明就知道導演在那個段子有埋梗,會嚇到人,可是偏偏還是被嚇到,導演就是有辦法在你鬆懈的一瞬間嚇到你。這片比上次有更多的裸露、更多的血腥,不過就故事情節來說,比上次弱。片尾有李麥克(David Hasselhoff)出來插花,相當逗趣,片尾好像為了湊時間,故意弄了一個假片尾,然後丟了一些拍片花絮上去,湊滿快90分鐘。片子裡有從人肚子跑出食人魚的情節,感覺上是有被咬到,就有可能會在身體裡產卵,後面沒有對這點多做解釋。結尾,教授的食人魚從魚缸裡逃出來,然後游泳池有魚在地上爬的畫面,莫非還會有第3集,拜託,不要了吧?!

 

django-grid

django 裡面怎麼好像沒有內建的 grid 產生器? 沒有在 admin app 裡找,後來是找到這個 django-grid ,看起來用法很簡單,就用了。一開始是照著用,然後還去改了他原來的 template,後來才想到應該在自己要用到 grid 的 template 裡用 {% include ‘grid/object_list.html’ %} 才對,這樣就可以不用更動到原來的 template。

grid 裡已經有處理分頁的部分,官方的文件沒提到的幾點:

  1. 自訂 column 的標題:如果你的 model 裡已經有加上去的話,它會自動去抓,但是如果是自訂的欄位,就要這樣用:columns = ( (‘field1’, ‘欄位1’), (‘field2’, ‘欄位2’), )
  2. 刪除:grid 有定義這個,在定義 columns 的時候,要使用 __delete__,例如: columns = ( (‘field1’, ‘欄位1’), (‘field2’, ‘欄位2’), (‘__delete__’, ‘刪除’), )
  3. 自行定義欄位:要額外增加 custom_columns,其形態是 dict,grid 在遇到裡面指定的元素時,會改用你定義的 template 去顯示,來達到自定義的效果:custom_columns={ ‘field1’: ‘app/custom_field1.html’ }
  4. l10n:grid 沒有做這部分,這就要自己去改 template 了。

總結範例:[python]from grid import Grid
class MyGrid(grid):
model = your_model
columns = ( (‘field1’, ‘欄位1’), (‘field2’, ‘欄位2’), )
sortable = (‘field1’,)
custom_columns={ ‘field1’: ‘app/custom_field1.html’ }
[/python]

用imagemagick合併圖片

今年年初時買了 Canon 的事務機,裡面有掃描的功能,所以就開始了掃描大公子作品的計畫。大公子都是畫在那種大大張的日曆紙上面(約為A3大小),掃描時,就需要折半來掃描(折半就是A4)。可是折半掃描為圖檔以後,到了電腦就要合成,之前都是利用繪圖軟體,像 paint.net 或 gimp,先把畫布尺寸擴大為兩倍,再把第2張圖貼上,這樣很花時間,調整起來也很麻煩。

處理了幾次之後,終於受不了了,想說應該有好用的工具可以一次搞定。之前知道有 imagemagick,就用 imagemagick cat image 丟下去找,看到 cat 了嗎? 會用 cat 是因為想到 linux 下有個好用的 cat 指令,一般可以用這個把兩個檔案串到一起,然後用 pipe 輸出到新檔案。但是 cat 就是貓啊!!! 所以找到了一堆跟貓照片有關的文章。@_@

找著找著,終於發現自己的錯誤,應該要用 merge 啊!!! 於是就找到了 montage 這個指令,這個其實就包在 imagemagick 套件裡,用法是這樣子的:montage 1.jpg 2.jpg -tile 1×2 -geometry +0+0 output.jpg ,這樣就可以把兩張圖接起來,一張在上面,一張在下面。如果要左右接,就把 -tile 拿掉即可。

電影流水帳(2012/6/2~2012/6/14)

Sherlock Holmes: A Game of Shadows

  • Sherlock Holmes – A game of shadows (IMDB, Wikipedia),中譯:福爾摩斯-詭影遊戲。很好看的片子,這一集缺少推理的橋段,就只有追著女主角的弟弟跑,想藉著他找出 Moriarty 的犯罪證據。找的幾個演員都很有梗,兩個男主角就不用說了,Holmes 的哥哥(全裸跟 Mrs. Watson 閒聊的那段真的很酷)、Mrs. Watson(就上面照片裡的女人,相當有魅力)、Moriarty 等等,都很能演,到最後兩人對話那段,真的讓我噴飯笑出來,Holmes 在腦海中模擬跟 Moriarty 對打,模擬完以後,Moriarty 的對白就說:「你會難道我就不會嗎?」然後也模擬了一次,真是太爆笑了,最後就是 Holmes 的經典收尾,兩人一起掉到瀑布下面。不知道那個瀑布的景是不是真的,如果是的話,真的是很壯觀,值得列為一定要去的地方!!
  • Age of Heroes(IMDB, Wikipedia),臺灣沒上片,網路上是翻譯為英雄時代。一開始是 Bob 因為戰爭失利,他的上司命令他帶著他的人試著逃離戰場,在戰場的邊緣被盟軍阻攔,他們想回去,卻被命令要重返戰場,於是 Bob 打了盟軍的上司,被捕,關到監獄裡去。過了不久,英軍有個任務說因為德軍似乎有更先進的無線電破譯技術可以破解盟軍的通訊,為此,他們決定組隊去進行破壞,並且如果有新的技術,就帶回來。Jones 是主要的負責人,負責組隊,因為是個機密任務,當然都是找他認識的人,在找其中一人時,遇到了 Bob,Bob 以脅迫的手段,讓 Jones 選擇了他。這當然是不好的手段,訓練的時間很短,只有三週的時間,本來 Jones 想藉著訓練讓 Bob 知難而退,但後來在 Bob 的表現與 Jones 佩服他的膽識,還是讓他加入了。很快地,他們就去北歐出任務。出任務算是相當幸運,雖然接頭的 Jenson 從男的變成女的,幫忙補給的村莊被滅掉 (真的很血腥),但他們順利的破壞了德軍的無線電基地。破壞末了,要逃出的時候,盟軍無法派出飛機,就只能請他們逃往瑞典,有一半的人負責掩護另一半的人脫逃,最後負責掩護的人都掛了,剩下的人把追擊的德軍滅了,順利脫逃的人只剩下三人,然後就到了瑞典。蠻平淡的片,但赤裸裸地展現了所謂的戰爭。

 

awk的split

朋友問我,有沒有可以把 fg_list_partial.png 轉成 fg.list_partial 的指令,我是隔天才收到訊息,而他已經用 echo filename | cut -d “.” -f 1 | sed ‘s/_/./1’ 來解決問題了。

我看到訊息時,立馬想到的是 basename/awk ,而不是 sed/cut,所以我用 echo `basename fg_list_partial.png .png ‘{printf(“%s.%s_%s\n”, $1, $2, $3);}’ 來解,可是仔細想想,其實有缺點,第一個是多花一個指令去把檔名的副檔名去掉,第二個是不適合做大量的批次處理。因此我再仔細找了一下,看 awk 有沒有支援 multiple field separator,找著找著,反而看到了 split,這個也可以喔。最後我用 echo “bg_list_full.png” | awk -F . ‘{split($1,a,”_”);printf(“%s.%s_%s\n”,a[1],a[2],a[3]);}’ 來解決,這個方法除了少了 basename 指令之外,也很適合做批次處理,例如 ls ??_list_*.png | awk -F . ‘{split($1,a,”_”);printf(“%s.%s_%s\n”,a[1],a[2],a[3]);}’ 。