レイアウトポートレットのプロパティ

久々に J2 用の作業をする。まずは、レイアウトポートレットのプロパティファイル問題を確認する。確認した感じでは、レイアウトタイトルをportlet.xmlのdisplay-name要素から取ってきているので、各ポートレット用に分けなくてもよいかな、という気になってきた。display-nameのxml:lang=”ja”を追加すれば、うまくいくことを確認したので、あとで、コミットしておこう。あとは、一部、レイアウトのテンプレートがおかしかったり、国際化されていなかったりするので、その辺も修正しておくことにしよう。試した感じでは、結構、ページのカスタマイズは結構、うまく動いていると思われる。

commons-mathによる乱数生成

commons-mathのドキュメントを読むと、secureの方を使うと *much slower* と言っている。muchって・・・。というわけで、簡単なプログラムを作って、比較することにした。というわけで、以下のものを作る。

package com.marevol.test.random;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.math.random.RandomData;
import org.apache.commons.math.random.RandomDataImpl;
public class App
{
public static int MAX_ROOP_COUNT = 1000;
public static void main(String[] args)
{
Date startTime;
Date endTime;
System.out.println("Start randomData()");
startTime = Calendar.getInstance().getTime();
App.randomData();
endTime = Calendar.getInstance().getTime();
System.out.println("End randomData() ---> Time: "
+ (endTime.getTime() - startTime.getTime()));
System.out.println("Start secureRandomData()");
startTime = Calendar.getInstance().getTime();
App.secureRandomData();
endTime = Calendar.getInstance().getTime();
System.out.println("End secureRandomData() ---> Time: "
+ (endTime.getTime() - startTime.getTime()));
}
public static void randomData()
{
long value = 0;
RandomData randomData = new RandomDataImpl();
for (int i = 0; i < MAX_ROOP_COUNT; i++)
{
value = randomData.nextLong(1, 1000000);
}
System.out.println("value=" + value);
}
public static void secureRandomData()
{
long value = 0;
RandomData randomData = new RandomDataImpl();
for (int i = 0; i < MAX_ROOP_COUNT; i++)
{
value = randomData.nextSecureLong(1, 1000000);
}
System.out.println("value=" + value);
}
}

結果は、だいたい以下のような感じ。

Start randomData()
value=212505
End randomData() ---> Time: 12
Start secureRandomData()
value=61893
End secureRandomData() ---> Time: 882

つまり、だいたい80倍くらい違うのかね。なるほどね、Secure の方は、1000回ほど呼ばれると、1秒くらいかかってしまうのか。

っで、やりたいことは、文字列の乱数取得なので、nextHexStringでも実験。すると、100文字の乱数文字を得たとしても、3倍程度の差しかないな。たとえば、randomHexString() が 103 ms くらいで、secureRandomHexString() が 291 ms くらいだな。longのときと違って、Secure出はない方に時間がかかっている。この程度の差なら、Secureの方でもいいような気が。