Fork gedit-git-plugin

gedit-git-plugin 這個 plugin 不錯,就類似 vim-gitgutter 的功能,但是它用的是 libgit2-glib,這個還真麻煩,所以就 fork 出來改,看可不可以擺脫 libgit2-glib。

為此,我先讀了 vim-gitgutter 的程式,vim-gitgutter 主要是在 GitGutter 函式裡,這邊會先去 git diff,然後解析結果,再去作畫面的處理,gedit-git-plugin 也很類似。

程式主要是在 viewactivatable.py ,在啟用 plugin 的時候,會觸發 do_activate(),這時會去繫結相關的事件到程式裡。主要的處理在 update_location(),這裡就調用 libgit2-glib 函式庫去取得 git repository,然後再取得當前檔案的 blob ,最後再去呼叫 update();update() 是在做檔案比對,根據比對結果去顯示,這裡的比對用的是 python 內建的 difflib,而不是用 git diff 的結果。

分析完,大致知道要處理的部份就在 update_location(),只要這裡將使用 libgit2-glib 改為用 subprocess 呼叫 git 取得結果就可以了。第一個要做的事情是取得當前檔案的位置,這個只要套原來的程式,呼叫 self.location.get_path() 就可以。接著要去找 .git 資料夾,這邊我參考了 repo 裡找 .repo 的函式去找 .git 。基於以上兩者,可以取得相對於 .git 所在路徑的檔案路徑,也就是假設 .git 是在 /home/user/project1/.git ,編輯的是 /home/user/project1/dir1/readme,就可以得出 dir1/readme,接著只要用 git show HEAD:dir1/readme 就可以取得原始 blob 內容。依照原來程式的邏輯,把原始 blob 內容替換為 git show 程式的輸出之後,就可以擺脫 libgit2-glib 了!

最後,將 git.plugin 裡的 Loader=python3 改為 python ,再更新 README 並補上 setup.py 就收工了。現在就不用 libgit2-glib 啦~

我 fork 出來的專案放在 github 上。

gedit-git-plugin 二三事

同事都用 gedit ,只有我是用 vim。vim 有個 vim-gitgutter 的 plugin,可以直接顯示你目前的 code 跟 git repository 裡的 code 之間的差異點,用 ]h 或 [h 就可以快速搜尋,我想 gedit 應該也有。找了一下,就找到這個 gedit-git-plugin

安裝這個 plugin 相當簡單,依照說明去做,很快就可以裝好,但是安裝他背後所依賴的 library 就稍嫌麻煩了。他所需要的 library 有 libgit2, libgit2-glib。libgit2 有人已經包好在 ppa,只要 sudo add-apt-repository ppa:pressureman/ppa 再 sudo apt-get update && sudo apt-get install libgit2 即可。libgit2-glib 沒有人包,只能自己包,於是就又重練了一次打包 debian packages,真的太久沒包會忘記。大致列一下步驟,下次可以快速的回憶起來。

  1. 用 git 把 libgit2-glib clone 下來,輸入指令壓縮為 tarball:git archive –prefix=libgit2-glib-0.0.6/ –format=tar master | gzip > ../libgit2-glib-0.0.6.tar.gz
  2. 到上一層目錄之後,解壓縮,照理會解開到 libgit2-glib-0.0.6 ,接著切到該目錄下。
  3. 用 dh_make -f ../libgit2-glib-0.0.6.tar.gz 產生 debian 目錄。
  4. 修改 debian/control:這裡要修改的重點有 Depends、Homepage、Description、Package name
  5. 修改 debian/changelog:這邊就是加上變更的說明,調整名稱等等的,如果要上傳到 ppa,那個 unstable 要改為 ubuntu 欽定的名稱,像是 precise、raring 等等的。記得有 dch 指令可以做編修,用編輯器是比較快。
  6. 修改 debian/rules:內容出乎意料的簡單,在修改時,則是用 override_ prefix 去修你想調整的 target。例如:想改安裝地點,就用
    override_dh_install:
        $(MAKE) DESTDIR=$(PWD)/debian/tmp install

    想調整 configure,就用

    override_dh_auto_configure:
        dh_auto_configure -- --enable-python=yes

    想忽略自動測試,就用

    override_dh_auto_test-indep:

    這樣子,這也是手冊上建議的作法。

  7. 安裝相關的套件:python-gi-dev、python3.2-dev、libgirepository1.0-dev、libgio2.0-cil-dev、libgit2-dev、gobject-introspection。
  8. 好了就可以用 dpkg-buildpackages -b 來建立 debian package 了。

建立完之後,把該裝的都裝好,發現 gedit plugin 還是不能用,說找不到 python3。

結論是,這是一篇用來回憶打包 debian package 的文。

 

參考資料:

activemq 的 persistent

因為希望 ActiveMQ Queue 裡的東西在重新啟動後還能存在,就特別做了實驗,結果真的 Queue 裡的東西會消失。

查了很多的文件,也試了不少設定,像是在 broker 裡設 persistent=”true” (預設本來就是 persistent) 或是加了 jdbcPersistentAdapter 等,都不行,後來才發現是 stompest.async 這邊在送的時候,得特別在 headers 裡加上 {‘persistent’: ‘true’} 才可以讓訊息保存在 Queue 裡。

程式一樣是用官方的範例,主要修改的地方在 producer.py:[python] yield client.send(self.QUEUE, json.dumps(
{‘count’: j}), headers={‘persistent’: ‘true’},
receipt=’message-%d’ % j)
[/python]

這次找資料也找到不少解說 ActiveMQ 的文件:

activemq 與 python stompest.async 的安裝

簡單的進行幾個 MQ 的比較之後,決定用 ActiveMQ,原因是因為它使用 Java 編寫,在佈署上顯的比較簡單,只要下載下來,有 JDK 就沒問題了。

要搭配 STOMP 的話,得修改 conf/activemq.xml ,找到 transportConnectors 節段,加入:
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613"/>

以前景模式啟動的話,是輸入 bin/activemq console,當作 daemon 啟動的話,是輸入 bin/activemq start 。
用 STOMP 的話,依照 Apache ActiveMQ 網站上的說法,會比較缺少安全性,所以會建議搭配 SSL 或 NIO [2]。

Python 的部份,我是直接使用 stompest.async,它是建構在 twisted 之上,這個用 pip 安裝就可以。範例我是參考 stompest.async examples

範例沒什麼問題,接下來就是要熟悉跟了解如何使用了。

參考資料:

  1. STOMP protocol
  2. activemq Unknown data type: 69

電影流水帳(2013/9/7~2013/9/13)

Lily Collins這是 Mirror mirror 的女主角 Lily Collins,是那個很會唱歌的 Phillip Collins 的女兒,真的很漂亮! 有演過「攻其不備」,不過戲份不多,並不是那麼的亮眼。

  • Hotel Transylvania (IMDB, Wikipedia),中譯:尖叫旅社。這不是恐怖片,是動畫片。劇情蠻流暢的,也挺有意思。大意是一個保護女兒的吸血鬼在深山裡搭建了專屬於怪物居住的飯店,每年會定期找全世界的鬼怪朋友們來一次。他基於保護女兒,處心積慮地讓女兒不要出去外面,這一次是女兒 118 歲生日,怎麼樣也擋不住了,就找了飯店裡的員工假扮成人類,來嚇女兒。這次的行動很成功,讓女兒打消了出去闖蕩的心,但行動裡使用了火,卻引來了一個年輕的背包客前來。伯爵嚇壞了,一開始想把這背包客藏起來,再偷運出去,被發現之後,反倒讓他假扮為科學怪人的表弟,劇情就在陰錯陽差的情況下出現許多笑點,同時也打開人類與鬼怪的結。最後就是伯爵追回背包客,讓他可以帶女兒出去多認識外面的世界。
  • Mirror mirror (IMDB, Wikipedia),中譯:魔鏡魔鏡。基本上就是白雪公主的故事,稍稍有改動的部份,第一個是國王被王后變成怪物;第二個是小矮人職業不是挖礦,而是強盜;第三個是王子,王子的個性相當有趣,跟原本故事裡的白馬王子不一樣;第四個是吃蘋果的部份,讓王后認輸而自己吃了下去。總之,翻拍的還蠻不錯的,女主角 Lily Collins 真的是拍的太漂亮,我特愛她後來跟小矮人成為強盜以後的那套裝扮,很帥氣。

將 python package 快速打包為 debian package – stdeb

這兩天看到 clonedigger,這是一個可以找尋程式裡是否有相似重複片段的工具,在找到重複的片段以後,就可以加以重整。老樣子去 ubuntu ppa 找了一下,發現沒有人打包,那麼就只能透過 east_install/pip 來安裝或是自己打包了。

這次就試著自己打包看看。

一般 python package 都會提供 setup.py ,這是使用 python 內建的 module:distutils 來建立的,在官方 distutils 的文件有提到使用方法。裏面就已經提供了打包為 RPM package 的選項,但是就沒有 debian packages。上網找了一下,這篇 Python distutils – does anyone know how to use it? 提供了不少可以參考的文件,循線找到這篇 Standard way to create debian packages for distributing python programs? ,裏面提到了 stdebstdeb 可以透過 easy_install/pip 來安裝,很幸運的是我的 Ubuntu 12.04 剛好有打包這個進去,所以只要用 apt-get 安裝 python-stdeb 就可以了。

接著,就可以參考 stdeb 文件,用 python setup.py –command-packages=stdeb.command bdist_deb 建立 debian package 了,打包好的 debian package 可以在當前目錄的 deb_dist 下找到。

電影流水帳(2013/8/30~2013/9/6)

IMG_5367圖片裡的女人是高圓圓,在盲探裡飾演莊士敦暗戀的對象,不過我覺得跟盲探裡樣子不太像,或許是我圖片找錯了也不一定。

  • 盲探 (IMDB, Wikipedia)。稍微看過一些影評,說應該歸類為愛情喜劇片,看完以後,真的有認同到。何家彤對於辦案不在行,卻為了心中一個結而進了警隊。一開始就遇到盲探莊士敦,在解決潑硫酸案件後,就找了莊士敦解開心中的結,幫忙找小敏。接下來就是莊士敦的小自私、貪吃跟兩人的查案過程。中間有穿插不少事情,讓劇情不至於落到都是查案。我認為鄭秀文飾演的何家彤有點傻、有點癡,都乖乖的聽莊士敦的話,但很可愛,很讓人憐愛。最後的結局蠻讓人驚訝的,維基百科上寫的超詳盡,這裡就不多說,總之,小敏這樣的小女生未免也太厲害。
  • Halo 4: Forward Unto Dawn(IMDB, Wikipedia),中譯:最後一戰4-航向黎明。科幻片,IMDB 上說是電視影集,拍成像電影這樣。我沒玩過 Halo 的遊戲,所以不知道電影劇情是否跟遊戲相仿,整個拍起來感覺是還可以。故事是講有個小組在學校裡訓練,一開始拉斯基跟其他成員有些小爭執,後來在正式測驗的時候,拉斯基自告奮勇擔任隊長,依照他的策略,結果成功的擊敗對手,但是在最後的關鍵時,拉斯基卻倒下去。經過緊急送醫之後,才知道拉斯基有嚴重的過敏。緊接著學校就被外星人襲擊了,然後有人來救他們,經過一番逃難之後,僅僅剩下三人順利逃出。

電影流水帳(2013/8/24~2013/8/29)

Mary-Louise Parker aka Nancy BotwinMary-Louise Parker ,我第一次看到她,是在 RED 這部電影裡,由於是擔綱女主角,外型又亮眼,所以有特別 Google 一下。她的主力戰場比較偏向在電視劇,Weeds (中文譯名是單身毒媽,講一個販大麻又擔心自己小孩的故事) 應該是她的代表作吧,最近這兩年積極朝電影發展。

  • 北漂魚 (百度百科)。有些介紹這部電影的文章說是瘋狂喜劇,我倒覺得還好,不算喜劇,應該說算類寫實片。北漂指的是到北京飄泊的人,魚指的是魚躍龍門,北漂人都有個魚躍龍門的夢,在片尾有訪談許多到北京飄泊打拼的人,給人很真實的感覺。不知道這算不算是大陸片的流行,片尾都有訪談,像失戀33天也有。電影的故事是余小寶的故事,他到北京當臨時演員,但跟在家鄉的女兒說他是導演。女兒有一天就興沖沖的打了電話跟爸爸說要來北京,已經在火車上了。霉運當頭的小寶只得找眾好友幫忙,在一連串的事故跟閉門羹之後,終於是有一個好的結局,導演願意出借劇組跟器材,也找到了飯店讓女兒住,眾多的北漂弟兄來湊人數。女兒後來知道了真相,也沒說破,我覺得還挺感人。
  • R.I.P.D. (IMDB, Wikipedia),中譯:降魔戰警。我是衝著到 R.I.P.D. 服務以後會有雙重身分的點看的,結果並沒有預期的好笑,應該說導演沒有特別去發揮這個笑點,故事普普通通。Nick 是警察,為了以後跟太太過好日子,污了一塊金子,結果為此,他的同事 Hayes 幹掉他。Nick 的潛在能力讓他被 R.I.P.D. 賞識,被徵召進去,跟著 Roy 當差。跟著查第一個案子,Nick 發現了死鬼拼命保住的金子跟他 A 走的金子一樣,於是起了疑心,之後的查案,發現了這並不是金子,而是一個可以反轉死人被帶到天上的法器,而主謀者就是他的同事 Hayes。在查清楚以後,Nick 跟 Roy 被停職,Hayes 也帶人去 R.I.P.D. 大鬧取得部分的金子,在湊齊之後,Hayes 就開始組合法器,要把死人帶回地面。Nick 跟 Roy 就力挽狂瀾要阻止 Hayes,最後當然是成功了,救回被當祭品的 Julia (Nick的妻子),順利解決事件。

 

電影流水帳(2013/8/14~2013/8/23)

這是余貴美子,之前有演過「送行者:禮儀師的樂章」,是超強的綠葉演員。

  • Oblivion (IMDB, Wikipedia),中譯:遺落戰境。我覺得這故事很有意思,一開始的設定是外星人來攻打地球,但是打贏之後,卻是地球人必須移民到泰坦行星去,然後 Jack 跟 Victoria 留在地球擔任看守設備的任務。Jack 一直想要 Victoria 到地上去看看,可是 Victoria 非常的不願意,甚至毫不遮掩地表達出厭惡的情緒。在某天,Jack 發現了奇妙的訊號發射地點,緊接著,又有太空船降落,他發現了太空船裡有地球人,可是自家的守備機器人卻跑過來大舉屠殺,幸好,有救出一個他覺得面熟、常出現在夢裡的女性太空人 Julia。後來,Jack 帶著 Julia 到地上去拿黑盒子時,發現了之前被守備機器人屠殺的外星人其實是地球人,而這些地球人告訴 Jack ,你可以自己去別的區域看看。Jack 去看了別的區域,卻發現驚人事實,自己是複製人,而且來自泰坦的訊號是外星人。Jack 再次回到自己的區域跟殘存的地球人接觸之後,大致明白了自己的處境以及之前所發生的事情,他決定接受任務,去炸掉泰坦外星人。正準備要出發時,外星人派了3個守備機器人來突襲,整個計畫被打亂。在混亂結束之後,他們決定將計就計,於是 Jack 留下 Julia ,帶著地球反抗軍的頭頭 Beech (冒充 Julia)帶著核彈到泰坦外星人那邊去了,在途中聽了黑盒子的內容,明白了全部的真相,最後是解決掉外星人。一開始我以為是地球兩大強權互打,然後洗腦說是外星人來攻打,想不到之後故事會是外星人複製了太空人,來攻打地球,真的很有意思。
  • Railways 愛を伝えられない大人たちへ (IMDB, Wikipedia),中譯:Railways 致不會表達愛的人們。在維基百科找到這部片的網址以後,發現了兩件有趣的事情,第一個是男主角三浦友和,他的太太是有名的山口百惠;第二個是女主角余貴美子,她的父親是台灣人,而她本身的國籍是中華民國,也就是說她算是台灣人!故事圍繞在滝島家,滝島徹是嚴謹的電車駕駛員,即將退休,但卻在退休的時候面臨到妻子想開始自己志業的難題,他選擇拒絕,於是妻子離家出走,並要求離婚。妻子從事的是安寧醫療的工作,就是配合醫院,去照顧想在家安寧療養的病人。滝島在即將退休的一個月勉為其難地帶了新人、遇到年輕時的戀人、被懷孕的女兒責難,也得知了原來妻子有良性的腫瘤,在即將退休的前幾天,碰巧載到妻子的病人,妻子的病人是個老太太。老太太是去山上採草藥,要用草藥治療孫女的過敏,豈料卻遇到電車停電事故,無法趕回去吃藥,就開始不舒服。滝島在老太太身上找到名牌,才知道是妻子的病人,就打電話給妻子,並且找了救護車。在看到妻子如此專心致意的在照顧老太太時,他改變了念頭。之後他同意了離婚,但卻在退休的當天,請妻子來看他最後一天的駕駛,然後說明自己想法已經改變,再次求婚,這一段還蠻感人的。之後妻子答應了,所以後續就是繼續過日子。

電影流水帳(2013/8/6~2013/8/13)

Gemma Arterton在 flickr 網站上找 Gemma Arterton 照片時,發現她臉形跟身材跟在電影(女巫獵人)裡不太一樣,我想應該是有修飾的關係。

  • Hansel & Gretel (IMDB, Wikipedia),中譯:女巫獵人。改寫自糖果屋的童話故事,電影裡為遺棄男女主角的父母找了一個很好的藉口,就是他們的母親是白女巫,因為村民來亂,白女巫又不能出手,所以父親才把他們帶去森林裡,避免遭到波及。男女主角被遺棄後,走到糖果屋,遇到壞女巫,反抗之下竟然消滅了女巫,之後就成了專門消滅女巫的女巫獵人。消滅無數巫婆之後,他倆名氣很大,這次也是受雇來協尋失蹤的小孩,協尋的過程裡,認清了女巫有善惡,也知道了當初父母遺棄的原因,然後跟壞女巫展開大戰,最終繼續當女巫獵人。
  • Olympus has fallen (IMDB, Wikipedia),中譯:全面攻佔-倒數救援。這是講白宮被攻佔的故事,前面帶的捨棄總統夫人的梗跟後面不太有關係,但看的出來應該是有想要用的。黑暗的恐怖份子混入南韓總理的訪問團裡,然後發動攻擊,再趁著白宮保鑣帶所有人到地下碉堡避難時,挾持了美國總統跟所有官員。男主角在總統夫人意外之後被調到財政部,白宮被攻擊時,他正在附近,就跑過去幫忙,一幫之下就趁亂到白宮裡面去了。之後就靠著他對白宮的熟悉救出總統的兒子,然後消滅恐怖份子。整部電影緊湊好看,不錯。只是裡面有個地方還蠻讓我耿耿於懷,就是關於系統安全的部分,電影裡說,地下碉堡有個系統,可以控制全美國的導彈,要啟動這個系統需要三組密碼。劇情讓總統當好人,在兩個幕僚決定抵死不說出密碼的情況下,總統不忍看到他們死掉,就下令讓他們說出密碼,並且說,我一定不會說密碼的。在這個同時,恐怖份子也試著破解系統密碼,到恐怖份子得到兩組密碼,總統又不說時,噹噹,恐怖份子用暴力破解法猜出密碼,啟動了系統。有問題的地方就在這裡,這個系統應該要設計為輸入錯誤密碼三次就暫時不接受輸入密碼,或是重設三組密碼才對,這樣才合理吧。