21 1月 2011

第五個季節

"你知道我最喜歡哪個季節嗎?",妳一如往常無厘頭地問起問題;
我手邊正翻著雜誌,有一搭沒一搭地回應反問:“哪一個?“
“第五個季節啊!“,妳瞪大眼睛,一副不可思議地表情看著我。

“第五個季節?哪是什麼樣的季節?“,我趕緊放下雜誌回應,我瞭解如果我再一副漫不經心的回應,妳雖然不會像對其他人一樣往我胸口捶,但蹭一下腳擰一下腿恐怕是免不了的。
“我還沒有想清楚耶,你也幫我想一想吧。“,妳低頭又想了一下,“對了,那你幫我的第五個季節寫首詩吧?“,“呿,那是什麼我都不知道,還寫什麼詩?有機會再聯絡。“,我又開始翻起我的雜誌,“等妳想清楚了,我再考慮。“,沒多久我腳上就多了兩個瘀青

“那妳知道我最喜歡哪個季節嗎?“,我只好反問妳轉移你的注意力,開始揉著我剛剛得到的兩個瘀青。
妳轉頭想了想,“誰在乎啊?“,踢了下我椅子又轉身去鬧別人了。

當時我們都不知道,這是我們一起渡過的最後一個季節。
我永遠都不知道妳的第五個季節是什麼樣的季節,但我想,妳知道我最喜歡的季節。
是啊,每個有妳陪的季節,就是我最喜歡的季節。

19 1月 2011

Web Application Security

Web Application Security要做的通常不過就是確認目前使用者是誰,能不能做目前要做的動作,就算提到到SSO、OpenID這些東西,也不過是在確認使用者上多些手續而已。

近來面談的人,跟兩三年前不同,多半對Spring都有些瞭解,但再深入問些應用卻又讓我有點失望,Sercurity就是很常讓我不滿意的地方。
有些人還停留在Submit button的enable or disable,這種情形就比較糟糕,有些完全沒有意識到這樣做會有問題的地方,所以開個Firebug,將disabled拿掉,這些人才覺得這是個問題...再有些人認為用method="GET" or "POST"就能阻止這些問題,但要送一個http post request又有何難?

有些人會很快回覆說利用Filter控制,我個人也認為基本上沒有問題,但我不認為全部都在Filter裡處理完是個好方法,所以我通常會再問如何在Spring的AOP裡得知現在的使用者為何,部份的人會說要修改API,將使用者當做參數之一,或是說傳入HttpSession,但沒有人跟我說過:因為是Web Application,所以可以利用ThreadLocal,如果是其他類型的Applicaton,利用InheritableThreadLocal也可以達成。

將使用者資料透過Filter,自Session中取得放入ThreadLocal中,這做法已經用了好幾年,我想這不是一個很具獨特性的做法,因為像是Spring Security已經到了3.X版,而它最重要的存放使用者的方式就是在放ThreadLocal中;能夠取到使用者的資料,那要在Filter、Service Layer或AOP中要進行控管或記錄都不會是問題,端看設計者的需要。

寫到這又有些擔心,擔心自己是不是自我意識過於良好,不過管他的! 我就是覺得目前看來,不把使用者資料放在ThreadLocal中就是一種設計上的缺陷!

jquerywtp : jQuery Editor Plugin for Eclipse

在Eclipse寫JavaScript比較麻煩的的是缺少API提示的工具,當然用其他IDE像是Spket也不算太差,但總是麻煩了些。

透過Goolge找到了jquerywtp這個Eclipse Plugin,雖然沒辦法配合最新的jQuery版本,但也總算提供了一個較佳的解決方式,必要時也可以修改libraries裡的js檔以符合個人需求。

jquerywtp是透過修改wtp裡的jar檔來達成,與其他一般的Eclipse Plugin不同,流程如下:

先至sourceforge download 最新的jar檔
我本身的Eclipse 是JEE 版3.6.1,可用最新的檔案連結在下:
jqueryWTP0.40foEn.jar

下載完成後 透過command line或直接連擊jqueryWTP0.40foEn.jar
會帶出下列conosle
FileChooserDemo.png

選取$Eclipse_Home/plugins的org.eclipse.wst.jsdt.core_XXX.jar (XXX會因使用WTP的版本而不同),然後選取輸出目錄按下"Generate",在輸出目錄下就會產生同名的jar檔,手動覆寫$Eclipse_Home/plugins下的檔案,重起Eclipse 即可,若發現沒有作用,可以以command line方式執行eclipse -clean清除plugin相關的cache即可。

在一般JSP或HTML裡就可以有jQuery相關API的提示囉

Eclipse.png

 

18 1月 2011

git ignore

  • (1)以#起始的該行資料會被當做註解
  • (2)使用Glog Pattern
    Glog patterns 相近於常見的Regular Expressions, 但是較為簡單,由於git在ignore裡使用的是glob patterns,所以還是需要稍為瞭解一下。
    • ?:代表任意的一個字元
    • *:代表任意數目的字元
    • {!ab}:必需不合於此pattern
    • {ab,bb,cx}:代表合於ab,bb,cx之一種pattern即可
    • [abc]:代表合於a,b,c中任一字元即可
    • [^abc]:代表必需不合於a,b,c中任一字元
  • (3)若要指出目錄請以"/"表示

 

下列是我常用的.gitignore內容

#Mac OSX Finder
.DS_Store
#Maven Build Folder : Target
target/
#Temp Folder
tmp/
#Log Folder or Files
log/
*.log

有些小地方比較有趣
例如想忽略repository目錄下的特定檔案,可以這樣表示
/eclipse.config
如果用了log/*.log,代表你是要忽略log目錄下,第一層檔名結尾為.log的檔案,但是/log/2010/11/12/ap.log就會被加入到repository中。
所以要忽略log目錄下包含子目錄的所有.log檔案,要這樣表示
log/**/*.log

不過如果要忽略特定目錄下的所有檔案,像是log目錄中的所有檔案,
雖然可以用這樣來表示
log/**/* (log本身這個目錄仍會被加入repository)
不過用
log/ (log本身這個目錄不會被加入repository)
會比較簡潔.... 
雖然意義上仍有不同

不過Git有些特性讓我比較困擾的,特別是空目錄不會被加到repository中,這點在最初設定時就會有些麻煩....

03 1月 2011

Subverion and Redmine Integration

Redmine與SCM結合有2個明顯的優點

1.列出目前SCM Repository資料,以subversion來說,subversion並未如github提供一個友善的介面,透過browser雖然可以看到檔案名稱及內容,但其他資訊如由誰commit或是附加的commet都必需使用其他軟體才能看到,Redmine與SCM Repository結合後就比較方便取得這些資訊。

2.將issue與commit結合,只要在commit message裡加上keyword+#+issueId,就可以在Redmine裡取透過issueId看到相關commit的程式,也可以反向透過commit message找到對應的issue;這個對於承接舊案的人員實在相當方便,因為常常在trace source code時比較容易瞭解前因後果。

Redmine add SCM Repository

(1)Adding Repository into project setting:

選取正確的SCM類型,輸入URL與可以檢視repository的帳號與密碼

Redmine Setting

設定正常的話就可以見到Repository顯示方才加入的SCM資料

svn repository

 

(2)commit message with issueId

在commet裡加上 refs, references, issueId, fixes, closes等keyword,並在issueId前加上#字符號,這樣redmine才知道如何去mapping現有issue

 

commit message

 

如此在issue裡就能看到相關的commit資訊

issue commit info

 

點下去後就就道commit了什麼東西

commit info