用 bash source 時,出現 “file not found”

今天遇到很鳥的問題。
情境是這樣的:目前的目錄下有 .config,而 scripts 目錄下有個 shell script ,名稱是 Configure。Configure 的內容很簡單,就是 source .config。接著,在目前的目錄下輸入 sh scripts/Configure,你就會遇到 “.config: file not found” 的訊息。
試了好久,雖然知道可以用 bash 執行來解決,但是就是覺得奇怪,因為 9.04 的 bash 3.2 是沒問題的,但到了 9.10 的 bash 4.0 就不行了。
最後在這裡:Re: source command differs if in bash or sh mode 找到答案:

This is a property of bash posix mode when you don’t have `.’ in $PATH:
28. The `.’ and `source’ builtins do not search the current directory
for the filename argument if it is not found by searching `PATH’.
> This behavior is new in version 4, old version 3.2 works fine.
The bash-3.2 behavior was a bug. Its fix is listed in CHANGES:
ggg. Fixed a bug that caused a shell running in Posix mode to search $PWD for
a file specified as an argument to source/. when the file was not found
in $PATH.

對,這是 bug,bash 3.2 沒問題,是因為他是 bug,4.0 的時候修正了,所以就有問題了,你必須要在 PATH 裡加入 . 才行。
好鳥。

移除七天前檔案

無心幹正事,可是卻有心搞 script,這真是…

#!/usr/bin/env python
# Usage:
#   remove_files_older_than.py ./*.jpg
import sys
import glob
import stat
import os
import time
if len(sys.argv)expireDays :
print diff/(60.0*60*24)
print "Remove %s, mtime=%s..." % (filename, time.strftime(
"%Y/%m/%d %H:%M:%S", modifiedTime ) )
os.remove( filename )
deletedCount=deletedCount+1
if deletedCount > 0:
print "Remove %d files" % deletedCount
else:
print "No files expired."

以下則是摘錄自:Windows Shell 刪除七天前資料
PowerShell的用法

Get-ChildItem -Recurse -force C:\files | Where-Object {!($_.Mode -match "d") -and ((Get-Date).Subtract($_.LastWriteTime).TotalDays -gt 7) } | Remove-Item -Force

Bash 的用法

find -mtime +7 -exec rm -f {} \;

viewvc 出現 ImportError: DLL load failed

環境:

  • Apache 2.0.x
  • mod_python 3.3.1
  • python 2.5.4
  • Subversion 1.5.6
  • svn-python 1.5.6
  • viewvc 1.0.7

查了好久,原本以為是 PATH 問題,手動在 viewvc 的 mod_python.py 裡加上 sys.path.append( r”c:\program files\subversion\bin” ) 也沒有用。
後來才爬到這篇文:#6739 (trac svn-python mismatch with apache 2.2 under windows),說是要把 subversion 的 dll 複製到 Apache 的執行目錄下。
查了 Apache 的執行路徑,發現真的有重複的 dll:

  • libapr.dll
  • libapriconv.dll
  • libaprutil.dll
  • libeay32.dll
  • ssleay32.dll

,於是備份之後,再把 subversion 下的這些 dll 複製過來,重新啟動 Apache 就解決了。

monodevelop 2.0 + asp.net mvc

翻譯 monodevelop 2.0 的時候,有看到跟 MVC 相關的字串,可是跑 monodevelop 2.0 的時候,卻從沒看過。參考了這篇:ASP.NET MVC MonoDevelop Addin Preview,才知道要另外裝上,於是打開 Addin Manager 把 MVC Addin 裝上,試著寫一個簡單的 Hello world,真的是可以開發,看來可以不必被綁在 Visual Web Developer express 上了。
這篇ASP.NET MVC Preview: Using The MVC UI Helpers是額外挖到的,相當有用,對 Html helper 做了詳細介紹,作者就是 ASP.Net MVC 的開發者之一。

電影流水帳(2009/12/26~2009/12/31)

事實上寫這篇的時候,Gamer (2009)看了1/3,為了方便計算,還是先貼上好了,所以今年已經看完 101 片了,希望明年也可以!!

  • Cars(IMDB, Wikipedia),中譯:汽車總動員。中文譯名實在是很歡樂。我是在迪士尼頻道上分兩次看完的,而且是國語配音。描述一台賽車走 66 號公路經過某小鎮時,因違規被扣留在鎮上,這個小鎮因為66號公路被新開的高速公路所取代而日漸荒無。在被扣留的期間,賽車學到了許多事情,所以在後來回去賽車以後,他想起了這些事情,放棄冠軍,但卻因此取得代言,並且將人潮帶回那個小鎮。66號公路(U.S. Route 66)是一條很有名的道路,他橫跨了美國的東西部,Pixar 應該是為了要向這條公路致敬,才製作了這部卡通。卡通不難看,但比起Pixar其他的作品,感覺上就是少了那麼一點感覺。
  • My Sister’s Keeper(IMDB, Wikipedia),中譯:姊姊的守護者。片子以有點類似紀錄片的方式進行。一家人事實上因為姊姊的病,都放棄了許多的事情,只為了姊姊能早日康復。但是姊姊得的病是絕症,能活著,是因為媽媽的堅持,妹妹就是由於這份堅持而生下來,所以她捐了血、骨髓。可是現在,姊姊開始腎衰竭了,媽媽希望妹妹能捐出一顆腎臟。姊姊不希望再這樣下去,所以瞞著媽媽,請妹妹去找律師來打官司,爭回醫療監護權,避免捐腎,也不希望全家人再為了自己,而失去其他的幸福。最後,在官司結果尚未宣判前,因為哥哥在法庭上的發言,全家人都知道了妹妹的苦衷是由於姊姊的委託才請律師打這場官司,而姊姊沒能撐過去,走了。但根據Wikipedia上的說明,電影跟小說其實是大相逕庭,小說裡,是妹妹遇到了車禍,變成了腦死,律師同意捐出身體,反而是姊姊活著了。 這部電影很值得人省思,我記得這兩年台灣的新聞也有報導過類似的事情,就是救一個人該救到什麼程度呢??需不需要無限上綱??無限上綱的結果是對病人好,還是對病人的家屬好??這個力道的拿捏,真的是需要一份智慧。

電影流水帳(2009/12/23~2009/12/25)

眼看只剩下一星期了,連這次看完的三部,一共 98 部。剩下的一星期,能再看完兩部嗎??精彩精彩、刺激刺激。

  • The Dark Knight(IMDB, Wikipedia),中譯:黑暗騎士。描述Batman、Joker和Double face三者的愛恨情仇,原本Batman跟當時還是副隊長的Gordan想把檢察官 Harvey 拱成英雄,結果Joker來亂,讓Harvey的未婚妻掛了,也使得Harvey墮入罪惡深淵,最後Batman仍然要出來扛,變成 Dark Knight。這集很精彩,Joker有變態到,可以說是經典了,我看以後也很難有人能再突破。女主角Maggie Gyllenhaal讓我似曾相識,但看了一下她的profile,卻發現她只演過兩部電影,都是 Batman系列,這真是怪了。
  • Inglourious Basterds(IMDB, Wikipedia),中譯:惡棍特工。切成好幾個章節的電影,簡單的說,這是個復仇的電影。一開始女主角的家庭被出賣,只有女主角逃掉;鏡頭接著介紹Brad帶領的美國特工,這支部隊專門滲透、將德軍將領砍頭。再來介紹女主角後來的遭遇,她成了電影院老闆,邂逅了一個德國青年軍官,不過由於家仇,她並不賞這個軍官的臉。最後收斂到電影院,許多高官都到電影院看電影,美國的特工滲透進去放炸藥,女主角也在電影的最後一幕進行放火,然後…該死的幾乎都死光光了,只剩下Brad的美國特工。整部電影不知為甚麼有點悶,我在想會不會是字幕的關係,感覺上角色所說的話跟字幕好像不太對得上,可是卻又沒問題,有一種巧妙的違和感。不過整體上電影不難看,時有神來一筆,讓人會心一笑。女主角 Mélanie Laurent 很正,氣質很特別。
  • G-Force(IMDB, Wikipedia),中譯:鼠膽妙算。劇情一直線,很適合小朋友看,基本上劇情很像spy kid。我在不是很專心的狀態下看完這部電影。

C++ ctor 不能呼叫 virtual function

原本以為可以用上 template pattern 的,可是卻碰上釘子,怎麼編譯就是不能通過,實驗了好一會,才發現 constructor 裡是不能呼叫 virtual function 的,如果不是 constructor 的話,就可以。真的是學到教訓了,果然自己寫的程式太少。

電影流水帳(2009/12/18~2009/12/22)

聖誕節快到啦~祝福大家聖誕快樂~

  • 瘋狂的賽車(IMDB, Wikipedia)。挺有趣,看來不無聊的片子。拿銀牌但被終身禁賽的自行車選手、賣假藥但快破產的藥商、藥商的老婆、販毒的泰國選手、老是改行的姊夫妹夫、台灣來的黑社會和總想破大案的警察交織出有趣的故事。聽我同事說,戎祥跟九孔因為這部片子在對岸而打出知名度,恭喜他們了。對了,這部片的導演其實也尬了一角,他演的是計程車司機,回想一下計程車司機的樣貌,還真是想不到他是導演。不過很多導演其實都很深藏不露啊~
  • Law Abiding Citizen(IMDB, Wikipedia),中譯:重案對決。這是同事推薦我,所以才先看的片。男主角的妻女被壞人殺了,但壞人卻因為跟檢察官妥協的關係,並沒有遭到重刑。男主角懷恨在心,於是苦心耕耘十年,展開復仇。原本以為是復仇的,但看到後面卻發現不是,他只是想告訴檢察官,不要跟壞人妥協。這樣的邏輯真是很奇妙,畢竟最後還是死了很多人,那是為什麼殺這些人呢?就只是為了這樣?整體來說,還算是可看的片子。結局有點誇張,男主角用十年的時間買了許多地產,而這些地產則是用來挖地道,所以費城許多地方的地下都有地道,這也是男主角能神出鬼沒的原因,真是太誇張了。

python 的 site-packages 與 dist-packages

好鳥,如果你打算把你的 python script 包成 debian package,在 debian/rules 裡呼叫 setup.py 時,記得加上 –install-layout=deb。
如果不加,預設會把 package 裝到 site-packages 目錄下,但這個目錄是不在預設搜索packages路徑裡的。加上 –install-layout=deb 以後,才會裝到 dist-packages 下,這個路徑才會在預設搜索packages路徑裡。
想知道預設搜索packages路徑,可以先 import sys,再 print sys.path,就可以看到。
參考自:Python modules, distutils.core setup and install paths – Ubuntu Forums

svndiff 0.2

託 A 同事的福,找到了前一版 svndiff 潛在的問題-不加參數時,zenity 顯示出來的檔案比預定的要少。原因是餵給 zenity 的資料錯誤,應該要在實際的資料前多加一行空白,所以我在 awk 裡改用 printf 來輸出。
[bash]
#!/bin/sh
if [ -z $1 ]; then
FILES=`svn status | awk ‘/^[MCA]/{printf “\n%s\n”,$2;}’ | zenity –list –width=600 –height=400 –separator=\ –checklist –title “The files which modified/conflict” –text ‘Please select files’ –column ” –column ‘Files’`
else
FILES=$@
fi
for FILE in $FILES; do
svn diff –diff-cmd /usr/bin/meld $FILE
done
exit 0
[/bash]