2007年12月6日木曜日

2007年9月21日金曜日

sun security provider on IBM JDK


import com.sun.net.ssl.SSLContext;
import com.sun.net.ssl.TrustManager;
import com.sun.net.ssl.X509TrustManager;

X509TrustManager mgr = new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}

public boolean isClientTrusted(X509Certificate[] arg0) {
return true;
}

public boolean isServerTrusted(X509Certificate[] arg0) {
return true;
}
};

TrustManager tm[] = { (TrustManager) mgr };

SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, tm, new SecureRandom());
SSLSocketFactory sf = sslContext.getSocketFactory();


こんなソースをIBM JDKで稼動させる場合に
$JAVA_HOME/jre/lib/security/java.security
を編集することで対応できるが、

編集がいろいろな事情で不可能な場合、
Security.insertProviderAt(new com.sun.net.ssl.internal.ssl.Provider(), 1);
で動的にProviderを追加してあげるとOK.

念のため該当処理が終わったら念のため
Security.removeProvider("SunJSSE");
でお掃除もすれば、他に影響与えずにいけるでしょう。

2007年7月26日木曜日

telnet smtp

※perlでBase64エンコードするやり方
perl -MMIME::Base64 -e 'print encode_base64("name\0name\0pass")'

入力部分のみを羅列

telnet mailserver.hoge 25

EHLO localhost

AUTH PLAIN hogehogehogehogehogehogehoge=

MAIL FROM:

RCPT TO:

DATA

Subject: title

this is mail from telnet
.

quit

2007年7月2日月曜日

eclipse pleiades

eclipse と pleiades(aop 日本語化プラグイン)時のeclipse.ini
※ -XX:MaxPermSizeは単一スレッドでのメモリMAXサイズ指定(これがないとOut Of Memory が起きるので)



-vmargs
-Xms128m
-Xmx256m
-XX:MaxPermSize=128m
-javaagent:/usr/local/apps/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

2007年6月28日木曜日

db2 force application

負荷の高い処理を実施している特定のDBのコネクションを終了させる。
  1. topにて負荷の高い処理のPIDを確認
  2. db2 "list application show detail" で該当するPIDを確認
  3. db2 "force application ( appl handle id )" で強制終了させる。 ※ appl handle id はカンマ区切りで複数指定可

2007年6月25日月曜日

shell trap

shellでsignalをtrap

trap true 2
  • 2: SIGINT 端末割り込み ctrl-c
  • 3:SIGQUIT
  • 4:SIGILL
  • 6:SIGABRT
  • 9:SIGKILL

2007年6月15日金曜日

Calendar実装の違い

JDK1.4のjavadocでは

> set(f, value) では、フィールド f が value に変更されます。
> さらに、フィールド f が変更されたことを示すように内部メンバ
> 変数が設定されます。f はただちに変更されますが、カレンダの
> ミリ秒は、get()、getTime()、または getTimeInMillis() が次に
> 呼び出されるまで再計算されません。

と記載されていますが、beforeメソッドでも例外がスローされます。

Tiger(JDK1.5)ではjavadocの記載どおりに例外がスローされるようになったようです。








public static void main(String[] args) {
for (int i = 0; i < args.length; i++)
System.out.println("args[" + (i+1) + "]: " + args[i]);

Calendar today = Calendar.getInstance();

Calendar target = Calendar.getInstance();
target.set(Integer.parseInt(args[0]),
Integer.parseInt(args[1]),
Integer.parseInt(args[2]));

target.setLenient(new Boolean(args[3]).booleanValue());

String msg = "入力された日付は";
if (target.before(today)) {
msg += "過去です。";
} else {
msg += "未来です。";
}

System.out.println(msg);
System.out.println("入力日付: " + target.getTime());
System.out.println("今日 : " + today.getTime());
}


java version "1.4.2_04"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)

args[1]: 2007
args[2]: 1
args[3]: 33
args[4]: false
Exception in thread "main" java.lang.IllegalArgumentException
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:1523)
at java.util.Calendar.updateTime(Calendar.java:1569)
at java.util.Calendar.getTimeInMillis(Calendar.java:912)
at java.util.Calendar.before(Calendar.java:1163)
at SunIbmCalendarProblem.main(SunIbmCalendarProblem.java:22)

java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)

args[1]: 2007
args[2]: 1
args[3]: 33
args[4]: false
入力された日付は過去です。
Exception in thread "main" java.lang.IllegalArgumentException: DAY_OF_MONTH
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2290)
at java.util.Calendar.updateTime(Calendar.java:2260)
at java.util.Calendar.getTimeInMillis(Calendar.java:1044)
at java.util.Calendar.getTime(Calendar.java:1017)
at SunIbmCalendarProblem.main(SunIbmCalendarProblem.java:29)

2007年5月30日水曜日

magnolia

wysiwygなCMSシステムmagnoliaが気になります。

私の関連プロジェクトでもデザインチーム、ユーザー、開発メンバーが
それぞれいるわけですが、
  1. ユーザーがデザインをレビューしてくれない
  2. デザインが出来上がるのが遅れる
  3. 開発が遅れる
  4. 時間がないのでやっとできたデザインをスクリプトレットで開発・・・
  5. ユーザーが最後になってデザイン変更を騒ぎ出す
  6. デザインチームはスクリプトレット化されたものを編集できない
という良くある騒ぎが「寅さん」の映画の如く毎回のように発生します。

「いい加減だれか気付よ!」となるところですが、ここは「言ったもん負け」の
ような社内の微妙な雰囲気が漂っているようです。

なんとかこの状況を打破するためにもお金をかけずになんとか知恵と工夫で
乗り切らなければいけない訳ですが、調べてみるといっぱいありすぎ!

掻い摘んで調べてみるも、独自DB(zope?)、PHP実装、ライセンス(GPL)などで
以後のメンテナンスが大変そうでほんとに「言ったもん負け」の世界。

やっぱ、現状の開発メンバー(javaベース)、社内認識(ライセンス問題)
メンテナンス性(DBは使い勝手の知ってるもの)で調べ直してやっとmagnolia
到達しました。

実はちょっと触ってみたのですが、良くできているものの、私のプロジェクトでの
3者関係にしっくりくる使い方とは難しいようです。というかしっかりビジネス分析
からしないとダメみたい。

結局magnolia内部でも利用されているJSR-170のjackrabbitmavenSCMとか利用
して自作したほうがいいような気がしてきました。

とりあえず、プレゼンですかね。

2007年5月16日水曜日

Commons Configuration DTD validate

Commons Configuration DTD バリデーション

  1. DocumentBuilderを生成する
  2. EntityResolverを作成してDTDファイルを指定(下記は無名クラスによる実装)
  3. setValidating(true)でvalidate実施を宣言
  4. load(aFileName)で読み込み処理実施


try {
Configuration xml = new XMLConfiguration();
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.setEntityResolver(new EntityResolver() {

public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
if (systemId.endsWith("DTDファイル名")) {
Class clazz = getClass();
InputStream in = clazz.getResourceAsStream("/DTD ファイル名(FQDN) ");
if (in == null) {
logger.error(SystemLog.LEVEL_ERROR, clazz,
"Could not find [dtd]. ClassLoader is [" + clazz.getClassLoader() + "]");
return null;
} else {
return new InputSource(in);
}
}
return null;
}

});
xml.setDocumentBuilder(builder);
// Reload設定
xml.setReloadingStrategy(new FileChangedReloadingStrategy());
xml.setValidating(true);
xml.load(aFileName);
} catch (ConfigurationException e) {
logger.error("例外発生");
}
結果バリデートが可能になるのですが、DTDなので必要十分なチェックとはいかないようです。

2007年5月15日火曜日

BTS2.0

BTS2.0
もうそろそろこんな感じのバグトラッキングシステムができてもよい頃ではないかと。
  1. 足跡機能
  2. タギング
  3. 用語集との連携
  4. javadocとバグ報告のトラックバック?
  javadoc -> BTSのリンクはURIをコピペするだけでOKだけど、
  BTS->javadocはdoclet自作してしないとダメかな?
  javaソース上のバグのリンクから一度BTSにトラックバックURIを問い合わせてから実施?

  リファクタで該当のメソッドとかがなくなったらpermlinkじゃなくなっちゃうからSCM
  ともうまいこと連携できてないとダメだしなー。
  結構大変そうかも。
 

2007年5月14日月曜日

XMLコンソーシアム

小川浩氏の「Feed2.0 on Web2.0」が面白かった。
大抵のプレゼンはアカデミックな感想だったり、
実施した経験やノウハウの提供を目的としたものが多いような気がします。

それはそれで有意義なのですが、
現実のビジネスに基づいている進行形の内容だったので示唆に富んだ話でした。

野村直之氏の
「エンタープライズのプラットフォームとして台頭するSaaSとWeb2.0のビジネスモデル」
は今後のソフトウェアのあり方を考えさせられました。

私は単なるSIerの一人ですが「アウトソースした原価の積み上げのプライシング」原価=人件費というのはおかしいと思いますし。よい意味で現状が淘汰されることを期待したいです。

よいプログラマーに真っ当な報酬を。

2007年5月8日火曜日

db2 express-c


db2 "create db データベース名 using codeset ibm-943 territory jp"
db2 "create tablespace テーブルスペース名"
db2 "grant use of tablespace テーブルスペース名 to user ユーザー名"

※ アプリケーション強制切断
db2 "force application all"

<オペレーター作業>
テーブル構成作成
db2 -tvf dllファイル名

2007年4月29日日曜日

apahe2.4 webdav with encoding

レシピ
  1. httpd-2.2.4.tar.bz2
  2. mod_encoding-20021209.tar.gz
  3. mod_encoding.c.apache2.20040616
コンパイル
apache2.2.4
prompt$ cd httpd-2.2.4
prompt$ CFLAGS="-O2" ./configure --prefix=/usr/local/apps/apache2 --enable-modules=all --with-ssl=/usr/lib/openssl --enable-dav=yes
prompt$ make
prompt$ make install

mod_encoding
apache2用のmod_encodingソースを置き換え
prompt$ cd mod_encoding-20021209
prompt$ mv mod_encoding.c mod_encoding.c.org
prompt$ mv ../mod_encoding.c.apache2.20040616 mod_encoding.c

libをコンパイル
prompt$ cd lib/
prompt$ ./configure
prompt$ make && make install
prompt$ ls /usr/local/lib
libiconv_hook.a libiconv_hook.so libiconv_hook.so.1.0.0
libiconv_hook.la libiconv_hook.so.1

mod_encodingをコンパイル
prompt$ configure --with-apxs=/usr/local/apps/apache2/bin/apxs
prompt$ make

 mod_encoding.c:236: error: 'regex_t' undeclared (first use in this function)

のエラーがでるので
 #include  
 を追加して再度コンパイル。

prompt$ make install

cp mod_encoding.so /usr/local/apps/apache2/modules/mod_encoding.so
cp: cannot stat `mod_encoding.so': No such file or directory

と言われるので、

prompt$ ls .libs
.libs/mod_encoding.a .libs/mod_encoding.lai .libs/mod_encoding.so
.libs/mod_encoding.la .libs/mod_encoding.o
.libsディレクトリに作成された mod_encoding.soを /usr/local/apps/apache2/modules
にコピーする。

参照ページ @IT

mod_encoding.confファイルを作成し、
LoadModule encoding_module modules/mod_encoding.so
<IfModule mod_encoding.c>
EncodingEngine on
SetServerEncoding UTF-8
DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
NormalizeUsername on
<IfModule>
を記述して稼働確認。

2007年3月19日月曜日

沈黙

「沈黙」 遠藤周作を読了。

結局、キリスト教が宗教の「泥沼」である日本で腐ってしまった(しまう)のは、
本地垂迹説による神道と仏教の融合のように、日本特有の消化作用による
ものなのではないかと思う。
「パードレ」にとって消化後の「デウス」は似ても似つかないものになってしまって
いたのだろう。

2007年3月6日火曜日

apache commons langのスニペット

DateUtils.parseDate("2007/01/01", new String[]{"yyyy/MM/dd"})

DateFormatUtils.format(aCalendar.getTime(), "ddMMM", Locale.US).toUpperCase();

2007年2月7日水曜日

信頼性

故障率(Failure rate)
10億時間に発生した障害回数

MTBF(平均故障間隔:Mean time between failure)
MTBF = 稼働時間の総和 / 故障回数

MTTR(平均復旧時間:Mean time to repair)
MTTR = 復旧にかかる時間の総和 / 故障回数

稼働率(Availability)
稼働率 = MTBF / (MTBF + MTTR)

2007年1月5日金曜日

db2 event monitor

コマンド覚書

$monitor_nameは任意の値
また、$monitor_nameを dropする前にdb2evmonでテキスト出力しないと、ダメ。

db2 create event monitor $monitor_name for 以下必要なパラメータ write to '$dir' replace

database, tables, deadlocks, tablespaces, bufferpools, connections, statements, transactions

db2 set event monitor $monitor_name state 1
でモニタースタート。

db2 flush event monitor $monitor_name
db2 set event monitor $monitor_name state 0
でモニター停止

db2evmon -db $dbname -evm $monitor_name > ファイル
db2 drop event monitor $monitor_name