goo blog サービス終了のお知らせ 

N2 ToolBox(跡地)

跡地です。引っ越しました。http://d.hatena.ne.jp/nosen

なぜ今さらDIコンテナを自作したのか

2007-01-03 19:58:57 | オープンソース
そもそも、既存のDIコンテナで満足ならば、自分でわざわざ
新たにDIコンテナを書き起こす必要は、もちろんありません。

私は、しばらくマネジメントを主な仕事にしていて、昨年の
後半に初めてまともに世のメジャーなDIコンテナに触る機会を無理矢理
作りました。(それまではPlexusくらいしか触ったことなかったのです)
そのとき何が嫌だったのかというと、細かいところはいろいろあるとして
耐えられなかったのは、

XMLにJavaのFQCNを書く

ことです。とにかくこれが嫌で嫌でしかたなかった。
そのとき使っていたのはS2 Containerですが、
他のDIコンテナはもちろん、多くのフレームワークについても
同じ問題があります。

なぜ、XMLにクラス名を書くのがそんなにつらいのか?
まず、単純にタイピング量が多いというのもありますが、
何より私にとって痛かったのは、XMLはJavaのクラス名を文字列としてしか
扱うことができないことです。だから、タイプミスは実行してみるまで
判明しないし、XMLエディタはクラスパスを探してクラス名を
補完することも、リファクタリングに追従させることも、
何か特別なことをしない限り実現できません。

しかも、私はクラス名を一発で決めることができない人間で、
つい何回もEclipseのリファクタリングで名前を変えてしまいます。
そしてそのたんびに、.diconを書き換えるのを
忘れます。何回やっても忘れます。

これは私の仮説ですが、
人間が一生のうちにXMLに手書きできるJavaクラス名の総量は決まっていると
思います。私は、特に才能の無い人間だったようで、あっとゆうまに
その限りある資源を使い尽くしてしまいました。
あとは、自分でかわりの何かを書くしかなくなるのです。

地球上で、Javaクラス名のことをもっとも良く理解しているツールは
Javaのコンパイラです。Javaのコンパイラが理解できるのは、Javaの
ソースコードだけです。だから、DIコンテナの設定はJavaで書くの
が自然だと思います。ただ、Javaで設定を書くと、どうしても記述が手続的に
なってしまい、冗長に見えるという問題があります。そこのところを
一工夫して、簡潔かつ宣言的に、Javaコードで設定が書ける
DIコンテナがほしい。多機能でなくてもよいから、すみずみまで理解できて、
ストレスなく使えるDIコンテナがほしい。

そんな思いから今さらながら自分でDIコンテナを作ってみよう、
と思い立ったわけです。


LiQ Container 1.0-alpha1 リリース

2006-12-31 20:38:55 | オープンソース
リリースしました。

ドキュメントとか途中で挫折した匂いがすごいしますが、
年内にリリースするというのが目標だったので、そっちを優先しました。

目指したのは、コンパクトで、簡単に使えて、柔軟に拡張できる
DIコンテナ。
軽量コンテナといいつつ、多機能で複雑な方向に走りがち
な既存のコンテナたちに対する自分なりのアンチテーゼです。
極限まで機能を削り、実装をコンパクトに保ち(jarのファイルサイズは
現状45Kたらずです)、ユーザのニーズに応じていかようにでも
カスタマイズできるように設計を工夫したつもりです。

自分としてはもはや他のDIコンテナを使う気が起こらない
くらいの出来栄えのものには仕上ったと思います。
自分で作ってんだから当り前ですね。
自分が良いと思うものが、他の方にも良いと思っていただける
ことを願っております。

alphaのうちは、APIの変更を受け付けますので、ここもっと
こうしたほうがいいんじゃないかとか、クラス名とか
メソッド名がおかしいんじゃないかとか、つかえねーからもうやめろ、
とかの御指摘を歓迎します。
日本語用のフォーラムを作りましたので、そちらにお願いします。

誰も投稿してくれないとさびしいので、冷やかしでもなんでも、
お気軽にどうぞ。

betaではAPIをFixして、バグの修正とドキュメントの整備に努めます。
それがおわったら1.0リリースです。

なんでいまさらDIコンテナを作ろうと思ったか、とか、
LiQ Containerを使うと他のコンテナに比べてどんなところが嬉しいか、
とかは、いろいろ語りたいことがありますので、今後このBlogで
おいおい書いていきたいと思います。

Click Framework

2006-12-02 23:53:55 | オープンソース
たけぞうさんお薦めのClick Frameworkについてちょっと調べてみました。
まだざっとドキュメントを読んでみただけですが。

一言で言うと、たぶん、
初代ASP.NET
のようなものですな。これは

個人的にはJSFはとにかく複雑すぎて、真面目に勉強する気が起こらなかった
ので、このようなシンプルで、理解し易いフレームワークも
選択肢としてある、ということはとても喜ばしいことです。
たぶんJSFにもASP.NETに対抗するというミッションがあったはずなのに、
どうして、あんなにややこしいことになってしまったのでしょうねぇ。

JSPを使わなくて良いのも好感が持てますが、
ビジュアルデザイナが作りづらそうなのは弱点になりそうです。
Webデザイナとの分業は難しそうですね。

初代ASP.NETと同様、ややこしい画面遷移を必要とする
Webアプリケーションには向いてないと思われるので、
Click Frameworkを使うときはなるべく機能が1ページの中に閉じるように
気を付ける必要がありそうです。

EasyMock 2.2 ドキュメント日本語訳

2006-11-30 00:59:00 | オープンソース
何か、ふと思い立ってEasyMock 2.2の文書をざっくり日本語訳してみました。
こちらに置いてあります。

まだ訳したてなので、おかしいところが多少あるかもしれません。
見付けたら、指摘していただけると大変嬉しいです。

それほど親切なドキュメントではないようなので、これだけ見てもよくわからない
かもしれません。後で訳注を沢山いれようかな。

Maven2翻訳はじめました

2006-05-16 00:31:39 | オープンソース
えー、ずっとずっとやるやるといっていながら 全然放置したままにしていたのですが、 やっとMaven2のドキュメントの翻訳に着手することにしました。詳しくは→こちら

着手が遅れた責任の全ては私にあります。因果応報といいますから、
この罪にはきっと報いがくることでしょう。。。
既に来世で人間に生まれかわることはあきらめました。

まだほぼ全てのドキュメントが未着手となっております。
ので、翻訳に協力して下さるかたを募集しています。
ちょっとでも興味があるかたは、ぜひご参加ください!

参加の仕方がようわからん、などの質問はこのエントリに
コメントしていただければ、回答いたします。。

Maven2: MXParser改造中

2006-01-05 01:54:35 | オープンソース
あけましておめでとうございます
私はお正月は自宅に完全に引き籠ってMaven2のi18nの問題の調査に
明けくれていました。他にやらなきゃいけないことが沢山あるのに、、

手始めにMaven2でXMLのパースの処理を引き受けているMXParserという
クラスに文字エンコーディングの自動検出機能をつける、という作業に
チャレンジしてみました。

Maven2が抱えているi18nの問題の、多分68%くらいはこのMXParserが
xml宣言のencoding指定を見事に無視してくれるところが原因といって
良いでしょう。

まだテストが足りないですが、一応なんとなく動くようになったので、
こちらに置いておきます。興味があるという奇特な方、
もしおられましたらぜひ中身をチェックしてコメント下さい。
まだ外部から明示的にエンコーディング指定した時の動作とかがいまいちです。

実装にあたっては、xercesのソースコードを参考にしました。
EncodingMap.javaとかはまんまxercesのパクリです。
RewindableInputStream.javaというクラスもxercesのなかに似たようなのが
あるのですが、うまく再利用できなさそうだったので、思いきって書き直して
ます。xercesのソースコードを初めて真剣に読んでみてわかったことは、
「意外とソースが汚い」ということです。使われてないとみられる変数やら
メソッドが結構あって苦戦しました。

UCS-4とUCS-2はSunのJDKではサポートされていないっぽかったので、
UnsuppoeredEncodingExceptionを投げるようにしてしまっています。
xercesでもUCSReaderというクラスを独自に作ってなんとかしてます。
MXParserはもともとXML仕様完全準拠を狙ったものでは無いでしょうから、
そこまでは必要ないと判断しました。

手元の環境では、UTF-16 ビッグエンディアン Byte Order Markあり、
Shift_JIS, EUC-JP, UTF-8の4つのエンコーディングで、簡単なXMLが正常に
読みこまれることを確認しています。

ところで、MXParserの"MX"って何でしょうね?

Selenium Recorder

2005-12-19 01:23:19 | オープンソース
Selenium Recorder
ためしに自分ちのFireFoxにインストールしてみました。

そもそもSeleniumというのは、ブラウザベースのWebアプリケーションの
機能テストを自動化するためのツールです。

Seleniumは、JavaScriptを使って、HTMLのテーブルの形で記述された
テストケースを実行するTestRunnerという部分と、
JUnitなりNUnitなど、外部のプロセスからブラウザをコントロール
する形でテストを実行する"Driven"という部分にわかれています。

"Driven"についてはまだ調べてないのでよくわからないですが、
"TestRunner"はめちゃくちゃ簡単です。
ごちゃごちゃ説明するよりデモをみれば一目瞭然。
仕掛けは簡単ですが、効果はかなりでかいと思われます。

Selenium Recorderはユーザが行ったブラウザの操作を記録して、
このTestRunner用のテストスクリプトを吐いてくれる
FireFoxのエクステンションです。
使い方はこれも超簡単。すばらしい。

是非今度実際の開発で使ってみたいものです。


Maven2:siteプラグインにおけるi18nの問題

2005-12-14 01:33:09 | オープンソース
既にお気付きの方も多数おられると思うのですが、
Maven2のsiteプラグインは、文字エンコーディングの扱い方に
一貫性がなく、文字化け無しに完全な日本語のサイトを生成することは
いまのところ難しい状況となっております。
最近またMaven2やらplexusやらのソースコードを読んで、何が問題なのか
把握しようと努めてるのですが、問題は複数のコンポーネントに跨っており、
なかなか一筋縄ではいきません。

特に厄介なのは、site descriptorの生成処理です。
他の部分はまぁなんとかなりそうなんですけどね。
あまりにも無邪気にバイト配列<->Stringの間で変換を行っているために、
かなりわけのわからない事態に陥っています。

事の発端はふと気がむいてMaven2のsiteプラグインのプロパティリソース
ファイルを翻訳して本家にコントリビュートしたことでした。

まさかプロパティファイルが文字化けするとは思って無かったのですが、
翻訳したファイルを送りつけた後に試しに動かして見ると
見事に文字化ける化ける。

Maven2の開発者の方もすぐにコミットされたマルチバイト文字のリソースファイルが
うまく表示されないことに気づいたらしく、
「これちゃんと日本語見える?おかしくない?」みたいな
やりとりを数回やったあと、

JIRAに以下のIssueが作られることとなりました。

http://jira.codehaus.org/browse/MNG-1409

どれだけ効果があるかわかりませんが、みなさん、とりあえず
このバグにVoteしてみませんか?
日本語環境でMaven2を使う上では、結構クリティカルな問題のような
気がします。

開発者の方も動作確認する環境がないから大変なんだろうなぁ...
2.1くらいでは直っていてほしいものです。
いちおうデザインドキュメントには、More consistent i18nという項目が
あがっていますが...
http://docs.codehaus.org/display/MAVEN/Maven+2.1+Design+Documents


Freemind to MS-Office XSLT Library

2005-11-29 21:06:04 | オープンソース
開発方法論の話を続ける前に、ちょっと一休みです。

ちょっと仕事の片手間にFreemindの*.mmファイルをWordやらExcelに変換する
XSLを作りました。よろしければご利用ください。
うまく動かないとか、もっとこうして欲しいなどのご意見は
適宜コメントください。ベストエフォートで対応します。

◆使い方
Freemindのメニューから

ファイル->書き出し

でXSLTを選択、ダイアログが開くので以下の3つのXSLから目的に合ったものを
選択して、出力先を指定してExport。これだけです。
なお、出力形式はすべてXMLなので、拡張子もxmlでお願いします。

mm2wordml.xsl
FreemindのMindMapをWordの見出しに変換します。
ルートノードは表題になります。
見出しレベルは4まで対応しており、それ以上深いノードは切り捨てます。

mm2msp.xsl
FreemindのMindMapをMS-Projectのタスクに変換します。

mm2xls.xsl
FreemindのMindMapをExcelワークシートに変換します。
変換の仕様は我ながらかなり微妙です。

次はPowerPointかな...

カーネル2.6 & ALSA

2005-05-24 01:55:02 | オープンソース
またまた御無沙汰してしまいました。
一旦糸がとぎれると復活するのにひどく時間がかかりますね。。

GW中の話なのですが、どこに出かけるのでもなく、ひたすら自宅のPC周りの環境を整える作業を
していました。りっぱなオタクですね。
モニタを買い替え、CPUをPentium4に乗せ換えたらめちゃくちゃ快適な環境になりました。
その勢いで、ついでにカーネルを2.6系に入れ換えてみました。
元はサウンドカードのドライバをALSAにしよう、というところから始まったのですが、
どうせだったら、最初からALSAが統合されているカーネル2.6に入れ換えてしまえ、という
のがそもそもの動機です。

カーネル2.6の導入自体はDebian標準の手順にしたがってやったら順調すぎる位
何もトラブルなく完了してしまいました。

alsaの方は2点ほど引っかかったポイントがありました。

1点目は、"alsaconf"というコマンドを実行しなければいけない、ということがわからなかった
ことです。

2点目は、2.6から導入されたらしいudevという、デバイスファイルを必要に応じて動的に生成
する仕掛けについて全くなにも知らなかった、ということです。
動的に生成されるので、一般ユーザがサウンド関連のデバイスファイルの
読み書きできるようにコマンドラインからデバイスファイルの
パーミッションを変更しても、再起動するとまたもとのもくあみになって、しまう
というところに時間がかかりました。わかってしまえば答えは簡単で、
/etc/udev/permissions.rulesというそのまんまの名前のファイルにデバイスファイルの
パーミッションを設定するようになっていて、ここを適当に書き換えれば良い、という
ことでした。

理解してしまうとudevというのはなかなか便利だし、わかりやすい仕掛けです。