星期四, 10月 30, 2014

SonarQube + PostgreSQL 初體驗

SonarQube 是一個軟體品質管理工具。依據官網的說法單獨安裝試跑只要兩分鐘,雖然我實際上達不到這麼神的境界,但也蠻無趣的,所以就試其他題目:把資料庫改指到 PostgreSQL。雖然這資料庫也是第一次碰,不過這些一大堆人用的東西安裝實在都太簡單,難怪 SonarQube 除了一個 MySQL 的資料安裝範例之外,根本就懶得說明其他資料庫產品。比照建了一個 Database、一個權限夠的使用者,語系注意一下也就差不多了。
SonarQube 架構上可分資料庫、網頁伺服器與分析器三大塊,資料庫支援幾種常見的,除了 Oracle 其他都是透過 JDBC,所以原則上大同小異;網頁伺服器就是個 Java 程式,所以也沒什麼難度;比較特別的是在分析器這塊,官網上列出五種:
  • SonarQube Runner
  • Maven
  • SonarQube Ant Task
  • Gradle
  • CI Engine
這些分析器的對象都是軟體專案,所以要餵原始碼進去;也要給一個資料庫放分析結果,用來與下一次分析做比較。稍微讓我卡住一下的是:預設分析器(SonarQube Runner)與網頁伺服器都有資料庫設定,我只先注意到後者,單獨改設到 PostgreSQL 沒效,反而會讓網頁伺服器開不起來。後來想想,應該是先改分析器的資料連線,拿一個範例專案餵,讓分析器丟資料到 PostgreSQL,然後網頁伺服器也連同一個位置才對。

星期五, 10月 17, 2014

TripleDes 的 InitialVector

以前不知初始向量的作用為何,甚至認為它應該算是金鑰的一部份。原來:
  • 金鑰一致、初始向量一致,加解密才會正確。
  • 有時候忽略初始向量,只有金鑰一致也會正確,是因為加密端與解密端的預設初始向量恰好一致,例如都是零。
  • 金鑰不一致,結果很難看。
  • 金鑰一致,初始向量不一致,只會讓前八個位元組的解密結果錯誤,這個長度恰好就是初始向量的長度。

不是強式名稱就夠了

.NET 的組件相依、參考等問題一直不是很好處理,其中最大的原因應該是出問題時的錯誤訊息很不直覺,過去的經驗總以為嚴守「不進 GAC」、「強式名稱」兩原則就可以清楚的找出用錯組件的問題,但這次又嚇到了!狀況是:使用端參考了一個 A 組件,內有界面與類別實作,簡化後的虛擬碼如下:
  • using com.abc;
  • public IA getA() {
  •     Assembly a = Assembly.LoadFrom("A.dll");
  •     Type t = a.GetType("com.abc.A");
  •     Object o = Activator.CreateInstance(t);
  •     return (IA)o;
  • }
上面這段程式,永遠會在第六行拋出 InvalidCastException,著實令人納悶?用 ildasm.exe 確認過 A.dll 的確有 IA 介面與 A 類別實作,強式名稱與上述程式所參考的也一模一樣,怎麼會有這麼奇怪的錯誤呢?後來看到這篇才令我恍然大悟了,原來第六行的 o 在 Load-From Context, IA 在 Default Context,所以就互相看不到對方,當然就轉不過去啦!
但至今仍不解的是,另外開了個小專案想要重現這個問題,但這錯誤又不會發生?到底還有什麼是我還不知道的?

星期四, 10月 09, 2014

搞定 OCSP

過去一直只仰賴 CRL,最近終於把 OCSP 也搞定。其實幾乎全靠著官網的一篇範例程式,加上對憑證鍊的一些粗淺認識,猜到實務上必須怎麼改才能符合自己的情境。
因為 Google App Engine 無法調整一些敏感的系統參數,所以整理的結果不能上雲端,有點可惜。為了怕以後又要花好多時間回想,這次就連測試程式也配套做好留存。

星期五, 10月 03, 2014

Eclipse Dark Theme

新版 Luna 向 Visual Studio 學習優點是件好事(希望 Xamarin 也趕快跟進吧!),但不應該只做一半:最重要的寫程式那一大片竟然還是白底,得另外加 Color Theme 外掛來解決。