電影流水帳(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]);}’ 。

Android sdk_addon 補充

上次雖然是可以順利 build 出 addon zip 檔案,可是要包進去的 java library 大小卻為 0,真是讓人錯愕。

有人有問跟我一樣的問題,可是沒人回。我接著回,然後問他解了沒。但我的回文一直沒真的上去,真怪。

這篇是說自己加了 <used-library ndroid:name=”com.example.android.platform_library”/> 就可以用,build 的方法就是一樣。

接著找到幾篇有用的文章,解析 Android build system 的文章:

之後是埋頭自己在看,看到了奇妙的用法,長見識了。Makefile 裡 target 的 dependencies 可以寫這樣:aa: bb | cc ,make 執行時,會先試著執行 bb target,如果 bb target 有確實產生檔案出來,就不執行 cc target;若 bb target 沒產生檔案出來,就執行 cc target 。

Android.mk 裡則是可以用 $(info message) 來顯示你想看到的訊息,如果是在 target 之下的指令,則可以善用 echo、$^、$@。

最後是讀了這篇,前面看起來是跟我一樣的錯誤,然後認為是 mkstubs 的問題,所以他們進行實驗,加 PRODUCT_SDK_ADDON_STUB_DEFS 之後就可以了!!

所以,在 sample_addon.mk 加上 PRODUCT_SDK_ADDON_STUB_DEFS := device/sample/products/xyz.defs,而 xyz.defs 裡面則是: +com.example.android.platform_library.* ,打完收工!!

Android sdk_addon

接到任務,說要做 sdk_addon.zip 給客戶使用,客戶有提供一些資訊,基本上就是要參考 device/sample 下的檔案來做,我把 frameworks 跟 products 都依樣建立了,這兩個資料夾下的必要檔案(frameworks/Android.mk跟products/*.ini)也都做了修改,可是怎麼試都失敗。

上網 Google 了一下,找到這篇:Android SDK Add-on Configure, Compile and Release ,一樣也是提到 device/sample ,基本上算是相當清楚,但是在我的環境下仍然失敗。

後來靜下心來看,相對照 sample 以後,發現其實 device/myproduct/Android.mk 裏面已經有去 include 其下所有 Android.mk,這點跟 device/sample/Android.mk 裏面一樣。device/sample 下沒有 AndroidProduct.mk,而是在 device/sample/products 下,裏面則是去 include device/sample/products/sample_addon.mk 。那我的 device/myproduct 下已經有 AndroidProduct.mk 而且寫了好多東西,因此,我就參考 device/sample/products/sample_addon.mk 增加了 PRODUCT_SDK_ADDON_* 相關的變數,然後把 PRODUCT_PACKAGES 從 := 改為 += 。又因為公司合作的開發SDK比較機車,有些 library 都是用複製,而非 build 的,所以再參考之前的 build script ,稍稍修改了一下,這樣就可以 build 出 SDK addon 了,產出的檔案是放在 out/host/linux-x86/sdk_addon 下。

補充:後來編譯 mydroid 時出問題了,發現要在 PRODUCT_SDK_ADDON_* 的前後加上 ifneq ($(filter sdk_addon,$(MAKECMDGOALS)),) 跟 endif 才可以避免無法編譯 mydroid 的窘境。

 

電影流水帳(2012/5/17~2012/6/1)

Sucker Punch - Cosplay Epitanime 2011

  • Sucker Punch(IMDB, Wikipedia),中譯:殺客同萌。我個人認為這部電影的藝術性大於他的故事性,在 Babydoll 跳舞進入幻境時,裡面的場景跟配樂都非常的棒,令人讚嘆不已,但是坦白說,故事真的就看的不是很懂了。片尾有演女醫師與舞廳主人合唱的歌舞,相當讚,很值得一看。Babydoll 跟她的妹妹在母親死掉以後,父親(不知道是繼父還是親生的父親)企圖侵犯 Babydoll 的妹妹,Babydoll 為了保護妹妹,開槍打父親,卻因此害死妹妹。父親利用金錢的力量把 Babydoll 送進精神病院,想就此得到遺產。Babydoll 進去精神病院以後,場景跟風格一轉,監獄變成舞廳,裡面的病人變成 Dancer,於是就展開 Babydoll 的大冒險。為了要逃出去,他們必須取得鑰匙、刀子、地圖、打火機…等物品,每次取得物品,都是一次跳舞跟炫麗的冒險場景,他們就這樣取得了物品,並且順利讓 Sweet Pea 逃出。對,最後不是讓 Babydoll 逃出,而是 Sweet Pea,很妙的安排,而 Babydoll 在協助 Sweet Pea 逃出之後,變成了沒有感覺的病人。
  • Mission: Impossible – Ghost Protocol (IMDB, Wikipedia),中譯:不可能的任務4-鬼影行動。前面一大半是跟班上同學在專案管理課的時候看的,老師要我們看看人家怎麼做專案管理 (這當然是鬼扯蛋,哈)。Hunter 被關在監獄裡,然後被救出來,接著就執行任務,去克里姆林宮拿發射裝置,結果失敗,克里姆林宮發生大爆炸。這個結果導致美國白宮將他的組織解散,可是他們仍然要在沒有資源的情況下阻止敵人毀滅世界。接著他們就去杜拜,安排了一次巧妙的會面把發射裝置跟密碼都拿到手,但敵人同樣也都拿到手,在杜拜的行動,算是失敗。最後就只能去印度阻止敵人發射核彈,當然是有個皆大歡喜的結局。最精彩的段落,當是在杜拜第1高樓的那段,班上一起在看的時候,看到 Hunter 差點掉下去,大家是異口同聲叫出來。

 

gedit plugin

因為想把一些文字處理動作集中一次用 python 來處理,然後處理完還要可以手動編輯,就想到 gedit 可以自訂 plugin,之前也沒試過,就試試看。

一開始我是找到 gedit 3 的 plugin howto ,看到一半發現 plugin 路徑怪怪的,跟我現在環境裡的路徑不一樣,才發現是 3.0 的。回頭翻到文章開頭,才看到 gedit 2 的 plugin howto ,就依法施為,大致上沒什麼問題。這邊分享幾個心得:

  1. 除錯可以用 print,但執行 gedit 時,要在 terminal 下,這樣才會看的到這些印出的訊息。
  2. 基本上 plugin howto 裡寫的相當清楚,但你需要搭配 pygtk2 references 來看,例如 howto 裡提到 gedit.Window.get_active_document 會傳回 gedit.Document,再去看 gedit.Document 一節裏面,裏面說 gedit.Document 就是根植於 gtksourcebuffer,再去找到 gtksourcebuffer (在 gtksourceview 網站),裏面又提到是繼承自 gtktextbuffer,再去翻 gtktextbuffer ,就知道有哪些函式可用。
  3. 對 gtk 的處理要有一定的了解。

 

PDF 操作個人經驗談

整理一下使用 PDF 的經驗談,作為日後參考。

閱讀 PDF:Windows 上主要是用 Foxit Reader ,偶爾會用 Nitro PDF reader 。用 Foxit Reader 是求快,用 Nitro PDF reader 的好處是可以匯出 PDF 裡的圖片。Linux 上我也是用 Foxit Reader ,然後以預設的 GNOME evince 為輔。在 PDF 檔上下標記? 我沒這個需求,所以沒用過,不知道這幾套對這功能的支援如何。

產出 PDF:我有用過的幾套免費軟體,都是以虛擬印表機的形式存在,所以只要選定指定的印表機進行列印,就可以產出 PDF。在 Windows 下,我使用過的軟體有 PDF CreatordoPDF Nitro PDF Creator (好像是裝 Nitro PDF reader時裝上的),都不錯用,會用三套,是因為有時候會有字出不來的情況。在 Linux 上就最方便了,不必另外安裝,一樣也是列印時,指定列印到檔案即可。另外值得一提的是 Open/Libre Office ,裡面有提供獨立的選項,可以直接匯出 PDF。

合併與分割:如果只是簡單的合併跟分割,我是用 PDFSam ,這個可愛的工具是用 Java 寫的,Linux / Windows 上都通用。如果需要一次裁出好幾頁或是編排順序的話,Linux 上我是用 PDFMod ,Windows 上則是用從疑似從 PDFMod 分支出來的 Junko 。

編輯:我沒用到過,也就是說我到目前為止還沒有這個需求,等以後有遇到再說吧。我第一個會試試看的可能是 Open/Libre Office ,去年有聽說有加入這功能。

 

 

電影流水帳(2012/4/11~2012/5/16)

隔了一個多月沒看電影,主要是為了期中考,利用中午時間唸書,所以就停了好一陣子。
DSC_8986

  • 燃燒吧!歐吉桑(IMDB, Wikipedia)。本來預期會很好看的片,看了之後,覺得故事本身並不是很強,所以整個感覺上就很片段,缺少了連續性。故事是圍繞在一個即將被拆除的眷村-光榮新村,有一個生存遊戲的團隊利用這個眷村練習生存遊戲,結果造成原本還留在村子裡的老榮民困擾。老榮民們很生氣,就決定起來對抗他們。故事裡的第一個衝突點,是李伯跟他的孫子,因為孫子小伍遲遲找不到工作,讓求好心切的李伯用話刺激,刺激的結果就是關係惡化。第二個衝突點,是在村子裡賣麵老闆娘的醫生兒子,與生存遊戲團隊的新隊長周莉雅是情侶,因為以為瞭解彼此,卻發現彼此都有事情瞞著對方。第3個衝突點是生存遊戲團隊原來的隊長駭客被換掉,成為副隊長,而新的隊長周莉雅是空降的ABC。第4個衝突點是村子裡孔伯反對對抗生存團隊,而大部分老伯伯決定起來對抗。在接近結尾的時候,因為生存遊戲中,姜伯差點心肌梗塞而過逝,導致了新的變化。小伍與李伯復合,孔伯跟李伯也復合,隨著周莉雅的解職,莉雅與醫生也解開了誤會,這一方團結起來,決定再跟駭客帶領的生存遊戲團隊比賽一次。這邊蠻突兀的,也很莫名其妙,總之,就比賽了。比賽到了最後,剩下李伯跟駭客比拼,想不到駭客卡彈,就輸了這場比賽。後來,光榮新村拆了,生存遊戲團隊出國比賽,得到很好的名次,然後有人來挑戰這些榮民。
  • Tower Heist(IMDB, Wikipedia),中譯:神偷軍團。原本以為可能不好看的片,看完以後,覺得還不錯,導演對於氣氛跟情結的掌握都很不錯,沒有冷場。Josh 是管理大樓的經理,而Shaw則是大樓的所有者。Shaw因為被控告詐欺,所以財產被查辦、扣押,大樓員工的錢之前有委請Shaw代為管理,結果這下也沒了。看門員因此跑去自殺,Josh很生氣,跑去找Shaw理論,結果被炒了。透過FBI特工的消息,知道Shaw還藏有錢在樓上,於是Josh決定找人一起去偷。人找齊了,也找了家隔壁的Slide來教跟計畫,終於他們選定在感恩節下手,除了Slide背叛跟Charlie回任為大樓經理之外,事情還算順利,他們順利到了樓上,找到也打開了保險櫃,但是裡面是空的。Slide跟Josh吵了起來,不小心的流彈打到了Shaw珍藏的車子,於是他們發現車子是用純金打造的,難怪Shaw貴而重之。計畫改變了,變成偷車子,偷車子的過程裡,因為車子很大,所以很驚險。不過他們還是順利的藏起了車子,幾個成員都分散逃走,但最後還是被趕回來的FBI特務逮到。經過利益的交換,FBI取得Shaw想藏起來的帳冊,成員都被釋放,Josh被判兩年刑期,Shaw罪證確鑿入獄,而車子呢?就在樓頂的游泳池裡,他們把車子解體,分寄給大樓的員工,算是皆大歡喜。

mono xsp and phalanger

修正策略以後,就決定先在 Windows 上安裝 mono。很快地,我安裝好 2.11 ,想不到這卻是卡關的開始,這一版的 xsp 很奇怪,老是會丟出 System.IO.FileNotFoundException ,甚至連正常的 aspx 都無法處理,所以最後就乾脆放棄了。在這段過程裡,稍微參考了以前加 boo 支援的 web.config 。

今天早上就立馬移除了 mono 2.11,改安裝 2.10.8 ,這是比較穩定的一版,為了怕跟昨天一樣卡關,就先試了 aspx,這次就可以了。然後拿之前加 boo 支援的 web.config ,參考 phalanger configuration 來修改。昨天是走馬看花,今天比較仔細看過之後,發現這網頁上提供的設定其實有些問題。我個人是這樣改的:

  1. 首先複製最下面的 local app.config/web.config 一節的設定,先存為 web.config。
  2. 修改 paths ,把裡面都註解掉,只留下 DynamicWrappers 與 Libraries,接著把 “{PATH}\” 移掉,所以 DynamicWrappers 的內容就是 dynamic,Libraries 內容就是 bin 。
  3. 修改 classLibrary ,這邊可以大刀闊斧砍光光,然後參考上面 global machine.config 裡的第3段設定,就加 PhpNetClassLibrary 跟 PhpNetXmlDom 這兩個 assembly 就可以。
  4. 把 global machine.config 裡的第1段設定跟第2段設定加到 web.config 裡,這兩段,都是在 configuration 裡。
  5. 把 global web.config 裡的設定,就是把 httpHandlers 加到 system.web 裡。
  6. 尋找 globalization ,把 value 改為 utf-8。
  7. 大功告成。

接下來,把 phalanger binaries 裡的 .dll 都放到 bin 目錄下,然後建立 dynamic 目錄,就可以開始寫你的 .php 了。

寫好以後,就打開 mono command prompt ,切換到開發目錄下,執行 xsp4 –port 8080 –root . ,以啟動 web server。再打開你的瀏覽器,在網址列輸入 http://localhost:8080/index.php 就可以了。

phalanger 會進行即時編譯,編譯好的 .dll 會放在 dynamic 目錄下。

最後放上我的 web.config:

svn篩選更動的部份並提交

人懶得打字,就要寫個script來輔助篩選…

一般來說都是先用 svn status 看改了些什麼,然後才下 svn commit 提交。可是如果檔案很多,大概就看不完也打不完,下面這個 script 就是先利用 awk 篩掉 ? 的部份,這些是未納入版本控制的檔案,就不顯示,有需要,要記得要先用 svn add 加入。然後篩選完,就順便組出 dialog 指令需要的格式,最後再用 dialog 來顯示出可勾選的對話視窗。

[bash]
#!/bin/bash

FILES=$(svn status | awk ‘$1 !~ /^?/{printf(“%s %s off “, $2, $1);}’)
CMD=”dialog –separate-output –stdout –checklist Modified/Add/Delete 24 80 20 \
$FILES”
SELECTED=$($CMD)

if [ “$SELECTED” == “” ]; then
echo “Select nothing.”
else
echo “svn commit $SELECTED”
fi
[/bash]