git 不能加空目錄的變通方法

git 沒辦法加空目錄,沒有任何選項可以用。Stackoverflow (How do I add an empty directory to a Git repository? – Stack Overflow) 上提到的變通方法就是為這些空目錄添加一個空白的檔案,檔名看是要用 .gitignore 或是 README 之類的就可以。

那要找所有空目錄的話,該怎麼找?find 就可以做到這點 (參考 bash – finding empty directories unix – Stack Overflow) :

find . -type d -empty -print

那麼,要為每個空目錄加上空白檔案的話,再利用 -exec 參數就可以了:

find . -type d -empty -exec touch {}/README \;

電影流水帳(2014/9/1~2014/9/15)

Premiere Inception - Ellen Page Ellen Page,最早看到她是在鴻孕當頭這部電影裡,後來又在 Inception 裡看到她,演技真的沒話說,很厲害。

  • X-Men: Days of Future Past (IMDB, Wikipedia),中譯:X戰警-未來昔日。跟金剛狼二的片尾彩蛋接不太起來,時間點不太對。
    在未來世界,變種人被 Sentinels 計劃裡的機器人追殺,接近全滅,Professor X 跟 Magneto 找了 Wolverine 來,讓 Kitty Pryde 送他回到過去,去說服年輕時的 Professor X 跟 Magneto 合作,讓他們阻止 Mystique 不要去殺 Trask,因為這個事件會導致 Mystique 的細胞被拿去應用在 Sentinels 計劃的機器人上,而引發未來的變種人滅亡。然後,Wolverine 就說服了 Professor X 跟 Beast,找了 Quicksilver 救了 Magneto ,一起去阻止 Mystique 這樣。最後是在千鈞一髮之際,改變了未來,大概就這樣。
    坦白說,第二集的劇情比較沒那麼吸引我。然後,沒看到片尾彩蛋。
  • 八日目の蟬 (IMDB, Wikipedia),中譯:第八日的蟬。感人的故事,看到最後野野宮希和子跟薰告別並束手就擒的那段時,我眼淚流下來。故事本身有爭議性,孩子是無辜的,從整個故事看起來,也難以判定誰對誰錯,只能說每個人的作為都會巧妙的影響日後的事件。
    故事從惠津子的控訴與希和子的自我認罪開始,惠津子的丈夫-秋山丈博有了外遇,對象是希和子。希和子一直被丈博欺騙,以為他會離婚跟她在一起,甚至在懷孕以後,為了他而打掉孩子。打掉孩子的結果是造成子宮沾粘,以後沒有機會懷孕了,懷孕的惠津子知道有希和子這第三者,也知道她無法懷孕,三番兩次去羞辱她。之後,希和子很難過,打算就此離去,離去之前,他想見丈博最後一面。去丈博家的那天下著大雨,希和子看著惠津子開車送丈博去車站,她走進房子裡,看到了四個月大的嬰兒,原本哭泣的嬰兒看到希和子不但沒被嚇到,反而笑了,她被嬰兒的笑容融化了,下定決心帶著嬰兒走掉。就這樣,希和子跟孩子一起生活了快樂的四年,直到某次被拍到照片,被選為攝影比賽的佳作,才被警方循線找到。法庭最後,法官詢問希和子有沒有什麼話想說的,希和子明白的說,自己不會後悔,同時也謝謝秋山一家人。
    惠理菜(薰)在莫名其妙的狀況下,跟以為是自己親生媽媽的媽媽分開,然後到以為是陌生人的親生父母家裡住,整個家庭都錯亂了。錯亂了十幾年,惠理菜慢慢遺忘四歲前的事情,直到大學,惠理菜搬出來自己住。很巧妙的,惠理菜重蹈希和子的覆轍,愛上補習班老師,並且有了身孕。確定有了身孕,在跟補習班老師吃飯的時候,試探性的問了他關於孩子的問題,她聽完補習班老師的話以後,非常確定他跟自己的父親是同類人,於是決定跟他分手,自己把孩子生下來。接著跟認識了沒多久的安藤一起旅行,追尋著以前跟希和子的足跡,慢慢想起了以前的事情,並且也鼓起勇氣要撫養小孩。最後在電影裡,算是一個和解的結局,惠理菜說,從來就沒想過要恨任何人。

在 Ubuntu 上使用最新的 mono/monodevelop

Ubuntu 上的 mono/monodevelop 都不是很新,一般來說,用 openSuSE 或 archlinux 是比較恰當的,因為 mono 早期是依托在 Novell ,而 openSuSE 又是由 Novell 維護的關係。而 archlinux 則是有強大的 repository 可以選用。

當然,要自己編譯也不是不行,真的試了之後,你會發現 mono 倒是還好,但要編譯 monodevelop 的話就是挺痛苦的事情了,因為相依性太多、太麻煩。

早期 mono 是不太管其他 distro 上的,但後來 openSuSE 推了 build service 之後,mono 就利用這個服務來提供套件給幾個知名 distro (CentOS, Debian, Fedora, openSuSE) 使用。在 Ubuntu 安裝的說明可以參考這個網頁,套件名稱是 mono-opt 跟 mono-xsp-opt ,版本是目前最新的版本。安裝以後的目錄是在 /opt/mono ,主要是要跟原來預設的 mono 區隔開來。在 terminal 下使用,可以用 source /opt/mono/env.sh 來變更必要的環境變數,以確定使用到對的 mono runtime。

monodevelop 的話,可以利用 Eberhard Beilharz 的 ppa,套件名稱是 monodevelop-5、monodevelop-database-5、monodevelop-debugger-gdb-5,這個 ppa 也同時提供了 mono 3.4 ,但沒有 xsp 套件。在 monodevelop 裡有設定可以指定要使用哪個版本的 runtime,這可以在 [編輯(Edit)][Preferences] 裡的 專案(Project) > .NET 運行時期(.NET runtime) 裡找到。

基本上 openSuSE 的 build service 應該是不太會無緣無故消失,mono 會持續維護這裡,但 Eberhard Beilharz 的 ppa 就不一定了,這點在安裝、使用的時候,請多留意。

編譯 gcin (Ubuntu 14.04)

在 Ubuntu 14.04 編譯 gcin,需要安裝這些套件:

  • libgtk-3-dev
  • libgtk2.0-dev
  • libanthy-dev
  • libqt4-dev
  • libqt4-dev-bin
  • qtbase5-private-dev
  • libxtst-dev
  • libappindicator3-dev
  • libchewing3-dev (Optional)
  • qt5-default (Optional)
  • qtchooser (Optional)

gcin 的原始碼可以在這裡取得,在 2.8.2 裡,新酷音的支援被關掉,可以自己修改 configure 來打開設定。qt5-default 跟 qtchooser 是可以不用安裝的,這是 QT5 使用的標頭檔與工具。

docker 小記

最近試著寫 Dockerfile,遇到了一些問題,也順利解決了,所以紀錄在這裡:

  1. 使用 apt-get install 時,會因為某些套件的安裝設定而跳出對話方塊,這會導致安裝被阻塞住。這可以藉著 debconf 來避免:
    ENV DEBIAN_FRONTEND noninteractive
    ENV TERM linux
    RUN echo ‘debconf debconf/frontend select Noninteractive’ | debconf-set-selections
    其中那兩行設置環境變數似乎不起作用的樣子,主要還是第三行。
  2. 找不到 add-apt-repository 指令。這是因為基礎的 image 裡沒有的關係,得使用 apt-get install python-software-properties 來安裝,在 Trusty ,也就是 14.04 裡,得再多安裝 software-properties-common
  3. 用 14.04 時,無法安裝 ia32-libs 。到 13.10 以後,ia32-libs 被移除了,改以 multiarch-support 替代,同時,得用 dpkg 聲明要使用 i386 architecture 才能使用 :i386,例如:
    RUN dpkg –add-architecture i386
    RUN apt-get install multiarch-support gcc-multilib g++-multilib libncurses5-dev:i386
  4. webupd8 的 Java installer 實際上是個安裝的腳本,會詢問是否同意 Oracle 的 license,才開始下載並安裝。同樣,詢問時也會阻塞住,得用下列指令事先回答同意:
    RUN echo oracle-java6-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections
    RUN apt-get install -y oracle-java6-installer
  5. apt-get install 時,都加上 -y 選項以避免詢問。
  6. 不要更動 sources.list,原因是我有試著更換為台灣的替換來源,但卻會出現無法下載某些套件的情況。
  7. 如果是要搭 Android 開發環境,下面是我在 14.04 裡試出來該要裝的套件:
    RUN apt-get install -y build-essential openjdk-7-jdk multiarch-support
    RUN apt-get install -y vim ctags cscope id-utils curl gnupg flex bison gperf zip curl libc6-dev libswitch-perl libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev gcc-multilib g++-multilib mingw32 tofrodos dialog python-markdown libxml2-utils xsltproc zlib1g-dev:i386 zlib1g-dev
  8. 清理 container 與 image 的步驟是先刪除 container,再刪除 image。用 docker ps -a -q 可以看 container id,然後用 docker rm 刪除 container,最後再用 docker rmi 去刪除 image,要砍光光,可以這樣用:
    docker ps -a -q | xargs docker rm
    docker images -q | xargs docker rmi
  9. Dockerfile 最後最好是來個 apt-get clean,可以減少 image 空間。
  10. 由於 docker 特性,image 是一層一層疊上去的,只要有指令更動,就會多一層,這有點像 git/svn repository 的概念。在用 docker build 做好 image 以後,你會想只要一個 image 就好,這時候你需要的關鍵字是 flatten 。使用的指令是 export 跟 improt:
    docker export red_panda | docker import – exampleimagelocal:new

關於 Docker push/pull

  1. 首先需要有 server,在安裝上非常簡單,你可以參考這篇 How to use your own Registry,但我發現不用那麼麻煩,有 python virtualenv 在手,可以很快裝好。
    virtualenv docker-registry-env
    cd docker-registry-env
    source bin/activate
    pip install docker-registry
    cp ./lib/python2.7/site-packages/config/config_sample.yml ./lib/python2.7/site-packages/config/config.yml
    打完上面指令就裝完了。啟動的話,接著打 docker-registry 就可以。上傳以後的 image/repository 會放在 /tmp/test ,使用的資料庫是 sqlite3 ,則是放在 /tmp/docker-registry.db。如果要調整位置,可以改 ./lib/python2.7/site-packages/config/config.yml 裡的 sqlalchemy_index_database 與 dev/test/prod 區段的 storage_path 。
  2. push 的方法,就我感覺是有點隱晦。要 push ,得先為 image 加上 tag,例如:
    docker tag 06a3d360b8e2 localhost:5000/myrepo
    docker push localhost:5000/myrepo
  3. pull 的話,就這樣用:
    docker pull localhost:5000/myrepo

資料來源:

電影流水帳(2014/8/22~2014/8/31)

Génesis Rodriguez, en El Hormiguero Genesis Rodriguez ,在 Hours 裡飾演男主角 Nolan 的妻子。

  • Hours (IMDB, Wikipedia),中譯:搏命關頭。據說是 Paul Walker 的最後一部電影,這是部跟風災有關的故事。Nolan 有身孕的妻子在颶風來臨前進了醫院的急救室,可是運氣不好,只救回了孩子,妻子走了。早產的孩子需要依靠體外呼吸器輔助呼吸,可是颶風來了,整個醫院的人幾乎都走光光,醫生允諾他會回來救人。這次的風災很慘,外面淹大水,交通中斷,也有許多人被困住。所以 Nolan 就一個人在醫院裡照顧他的孩子,停電就找了手搖發電機,沒食物只能靠販賣機的零嘴跟飲料,就這樣苦撐。電影裡的時間感有點奇妙,醫生說大約兩天後,孩子應該就可以自行呼吸不必依賴體外呼吸器,照理來說,Nolan 就可以設法帶著孩子逃出去,不必守在病房裡,但事情就是沒這麼簡單,經過的時間感讓人覺得很長。在這段期間,Nolan 經歷孤獨,回憶妻子,有看到趁火打劫的人,有看到知恩回報的狗,最後,運氣很好的得救了,孩子也開始自主呼吸,一個充滿希望的結局。
  • Lost in translation (IMDB, Wikipedia),中譯:愛情不用翻譯。又是一個寂寞感破錶的電影。Bob 是個電影明星,隻身去東京拍廣告,可他並不是很想去。到了那兒,語言雖然有翻譯幫忙,但就是有格格不入的感覺。在這時候,他在飯店電梯裡看到跟自己一樣有同樣寂寞神情的 Charlotte。之後,他們相遇認識,還一起出去玩,兩者發生了小小的情愫與小爭吵,但並沒有發生什麼。
    最後,Bob 搭車離開飯店,在路上看到 Charlotte,雖然在離開時,已經說過再見,可是 Bob 還是讓車停了下來,跑去追 Charlotte。追到以後,他抱住 Charlotte,並在她耳邊不知說了什麼,Charlotte 從本來寂寥的神情轉變為笑容,接著再次說了再見離去。到底 Bob 跟 Charlotte 說了什麼?故事沒有交代,這點讓我很好奇。
  • 麒麟の翼 (IMDB, Wikipedia),中譯:麒麟之翼。小說改編的電影,我沒看過小說,但整部電影的節奏跟營造出來的氣氛相當的好。
    故事是從東京的起點-麒麟之翼開始的,巡警在這裡發現了一個受重傷的人 – 青柳武明,趕緊叫了救護車,但青柳已經傷重不治。值此同時,附近也發現了一個可疑的人 – 八島,在追捕的時候,八島卻被卡車撞到,陷入昏迷。警方開始調查,一開始是懷疑八島就是兇手,但加賀仔細調查與推敲,認為八島並不是兇手。於是就開始調查青柳為什麼會去日本橋附近走動,八島為什麼會在那兒,還有青柳的兒子 – 攸人退出游泳社團的事情。到最後,終於把整個事情串聯起來,找到真正的兇手。

電影流水帳(2014/8/13~2014/8/21)

JEssica Alba (Sin City_

  • Escape Plan (IMDB, Wikipedia),中譯:鋼鐵監獄。蠻有意思的故事。
    Ray 的公司是檢驗監獄安全的公司,而他的工作就是假裝犯人進去,並試著逃脫。這次他接受了一個挑戰,一個號稱沒有人能逃出去的監獄,一開始進去就非常的詭異,追蹤器被移除,Ray 的同事沒辦法追蹤到監獄的位置。進去以後,監獄的氣氛也跟以往迥然不同。原來典獄長就是依照 Ray 書裡的建議去打造這座監獄,所以監獄可以說是滴水不漏。Ray 入獄以後認識了 Rottmayer,Rottmayer 釋出滿滿的善意與 Ray 結交,一段時間相處下來,兩人的目的相同,都是逃出去。於是攜手合作,最後終於逃出監獄。在逃出以後,Ray 才知道自己算是被利用了,Rottmayer 就是典獄長要找的人,委託他入獄測試的人就是 Rottmayer 的女兒。至於典獄長在獄中為什麼老是找 Ray 麻煩,這是他合夥人搞的鬼,出來以後當然也沒放過他。
  • Sin City (IMDB, Wikipedia),中譯:萬惡城市。以四個赤裸、真實的故事來描寫 Sin City,頭尾的兩個故事是有相關連的,中間的兩個故事比較不相干,但人物都有環環相扣。四個故事的最後都是帶有哀傷的,讓人能理解為什麼是 Sin City。
    讓人驚訝的是電影的視覺風格,主要是以黑白來呈現,但在某些特別的地方,才會以強烈的顏色來顯示,讓你注意到導演要你注意的地方。也因為是黑白,某些場景就不必是真實的,可以從畫面看到有加上類似動畫的效果。整部電影讓人印象深刻,最近 Sin City 2 要上映了,蠻多在這部電影裡出現的演員都被找回去,再加上新進的 Eva Green、Joseph Gordon-Levit、Josh Brolin 等等,相信精彩可期。

fbterm

ArchLinux 裡安裝 fbterm 的方法很簡單,就 pacman -S fbterm 完以後,照說明做就行了。執行 fbterm 以後,中文卻沒正常顯示,猜想應該是沒指定字型的關係。所以我輸入 exit ,退出 fbterm,接著加裝了 wqy-microhei-lite :pacman -S wqy-microhei-lite ,接著看 man fbterm,參考裏面的說明,去修改 $HOME/.fbtermrc 裡的 font-names (.fbtermrc 在第一次執行 fbterm 時,會自動產生),將其改為 WenQuanYi Micro Hei Mono Light,並調整字體大小,然後重新執行一次 fbterm 就可以了。

在 pacman -Ss fbterm 時,有看到 fcitx-fbterm,所以 fbterm 也可以使用中文輸入法,目前只有這個。

電影流水帳(2014/7/24~2014/8/12)

132835_1089c照片裡的女人是 Emily VanCamp,飾演美國隊長 2 裡的 Agent 13 – Kate,奉 Fury 的命令住在美國隊長房間對面以利於監視與保護。漫畫裡的故事設定,她會是殺死美國隊長的人,電影裡就未可知了。

  • Captain America: The Winter Soldier (IMDB, Wikipedia),中譯:美國隊長2-酷寒戰士。相當精彩的故事,美國隊長這個角色,說實話,沒有什麼很有特色的威能,以故事來取勝是很好的。
    二次大戰後,Hydra 看似因為德納粹的失敗而消失,但實際上卻化整為零,改在暗處發展活動,神盾局也被滲透了。Fury 發覺了不對勁的地方,正想要更深入調查時,Hydra 搶先一步,進行刺殺。Fury 假死,在暗處活動,並在假死前,交給美國隊長一個隨身碟。Pierce 是神盾局高層,就問美國隊長,但美國隊長因為 Fury 的話而不配合,於是也被刺殺。美國隊長逃出殺局之後,跟黑寡婦一起調查,找到 Hydra 潛伏的證據與其陰謀。接著就跟未死的 Fury、Hill 以及獵鷹展開反擊,最後順利打擊了 Hydra ,拯救了世界。
  • Blue Jasmine (IMDB, Wikipedia),中譯:藍色茉莉。這部電影根本就 Cate Blanchett 的獨角戲來著,Cate Blanchett 飾演 Jasmine,所以片名應該是憂鬱的 Jasmine 才對。
    Jasmine 的先生 Hal 靠著口才、人際關係與不切實際的目標吸引人投資取得了一定的財富與地位,跟 Jasmine 過著優渥的生活。過著優渥生活的同時,也看不起自己的姊姊。後來,Hal 出軌,Jasmine 向 FBI 告密,讓 Hal 進了大牢,後來更因此出了車禍而死去。Hal 被宣告破產,身無分文的 Jasmine 只好去投靠姊姊。姊姊原本生活是不錯的,前夫中了樂透,得到不少獎金,可是獎金卻被 Hal 給騙去投資,兩人因此離婚。離婚以後交了一個男友,Jasmine 不喜歡他,而姊姊的男友也不喜歡 Jasmine。一個屋簷下的生活,從頭到尾沒有合拍過。Jasmine 的工作不順利,本來已經找到適合對象了,卻因為隱瞞自己的過去而錯失良機。至於兒子,也不理她。最後 Jasmine 一個人坐在公園的椅子上自言自語,顯然是精神崩潰了。
  • Iron Man & Hulk : Heroes United (IMDB, Wikipedia),中譯:鋼鐵人與浩克-聯合戰記。九頭蛇組織 (Hydra) 找了另外一個也是因為伽碼射線而變身的壞蛋,想要捉住浩克。經過一番激戰,總算是抓到,並且汲取兩人的伽碼能量加入方舟反應爐裡,想要做實驗。實驗到一半時,浩克打破牢籠逃出來,結果陰錯陽差地製造出一個具有生命的能量體:Zzzax 。鋼鐵人偵測到異常的能量反應,就過來查,於是遇到浩克。兩人一言不合打起來,然後發現了 Zzzax ,接著就跟 Zzzax 展開激戰。一開始是打成平手,但 Zzzax 慢慢落於下風,後來 Zzzax 轉進,趁鋼鐵人跟浩克不注意的空檔,吸收鋼鐵人空艦的能量,然後取得了優勢。鋼鐵人跟浩克就不得不聯合起來,藉著鋼鐵人跟 Javis 的分析以及浩克的優勢力量與靈機一動,最後打敗了 Zzzax 。
    劇情蠻單純的,嗯,就這樣。
  • The Truman Show (IMDB, Wikipedia),中譯:楚門的世界。之前就有在第四台片段的看,但都沒有完整看完過,這次總算是看完。故事不用特別交代了,可以在很多網站看到介紹。我在想,如果主角是我自己,我真的能發現周遭的微妙之處嗎?到了最後,真的有勇氣走出這個圈子嗎?特別是在製作人很感性的說了那些半帶恐嚇的話之後?以我現在的心境,我想,或許我會選擇繼續留在那兒也不一定。
  • Iron Man: Rise of Technovore (IMDB, Wikipedia),中譯:鋼鐵人-納米魔崛起。這也是很平鋪直敘的故事,納米魔(Technovore) 其實是 Obadiah Stane (鋼鐵人1裡的反派)的兒子,純粹想用自己的力量改變世界,而非為父親復仇。
    故事一開始,是 Stark 企業要發射一個可以監控全世界的衛星上去,結果半路殺出 Technovore 搞破壞,Rhodey 因此而受了重傷。Tony 就矢志要找出 Technovore,豈料 S.H.I.E.L.D. 一直阻撓,但透過 The punisher 跟 Pepper 的幫忙,終於找到。然後就展開激戰。之前重傷的 Rhodey 也出人意料地復原來幫忙 Tony 打 Technovore。最後 Tony 以捨身的方式,引爆自己身上的反應爐,終於擊敗 Technovore。
    劇情普普,比較特別的應該是有濃濃的日本風,因為這是 Marvel 跟日本公司合作的動畫。

截至目前為止,今年看完 49 部電影 (含這篇的 5 部),一個影集。

Rogue-Like 與 DCSS

一開始是看到 Pixel-Dungeon 開放原始碼在 github watabou/pixel-dungeon 上,網頁的簡介提到 Rogue-Like,不明白是什麼,就去 Google ,然後就找到這篇神文:[備忘][轉貼]一個經典但被遺忘的遊戲類型–roguelike及dungeon crawl stone soup介紹 。透過這篇文章,也才知道之前在 Jedi 網站上看過的 NetHack 就是同類型的遊戲。

整篇看完,就試著去找 DCSS,DCSS 在 ubuntu 裡,可以用 sudo apt-get install crawl crawl-tiles 來安裝;而在 archlinux 裡,則是在 AUR 裡,名字叫做 stone-soup-git,得用 yaourt/pacaur 來安裝。除此之外,DCSS 網站 上也有 Windows 版本。