Maven - A developer's Notebook
Struts2はMavenだし、ずっと逃げてきたけど、そろそろ観念する。Ebook Online Storeで$10で売ってたので、購入。
って、これCHMファイルじゃん。こんなのありなの? リファレンスがわりとして使うには良さそうだけど、通読には不向きだ。しおりも作れないし。
Struts2 でOGNL式のtypoがエラーにならない。
OGNLはスタティックフィールドにアクセスできるので、
public enum AgeRange {
AGE_10, AGE10_19, AGE20_29;
}
public class EntryAction implements Action {
//...
AgeRange ageRange;
public AgeRange getAgeRange() {
return ageRange;
}
//...
}
みたいなことをして、JSPの中で、タイプセーフenumを参照できる。
<s:if test="ageRange == @user.AgeRange@AGE_10">
10歳未満
</s:if>
ただ、これをAGE_100みたいにミスタイプした時に、何もエラーが出力されないので、間違いに気付きにくい。これは、XWorkの中で、例外をさらりと無視しているのが原因のようだ、
--- OgnlValueStack.java [findValue()] ---
} catch (OgnlException e) {
return findInContext(expr);
} catch (Exception e) {
とりあえずパッチを提案してみた。
OGNL
Struts2で使われる式言語OGNL、なかなか便利なんで他でも使おうかと思って、単独で入手を試みる。
OPENSYMPHONY社に行ってみるも、ダウンロードリンクが死んでいるし、フォーラムやMLも閑散としている。で、どうも今はこっちみたいだ。なんかORGドメインだけど、Inc.って書いてあるし、開発者が独立して会社を立ち上げたんだろうか?
改めて見てみると、WebWork 2.1.7の時代から、ognl.jarの中のクラスは、パッケージ名がognl.*になっている。どうも完全にOPENSYMPHONY社の持ちものってわけでは無かったようだ。
関係ないけど、OPENSYMPHONY社の方には「OGNLは"orthogonal"と、読んでくれ。ただし最後の音節は、酔っぱらいのようにな」と書いてある。なんじゃそりゃ。
歴史は繰り返す。
なんか最近、内製が増えてきた。まぁ、ちゃんと自分達でつくらなきゃ、力つかないよねってことらしいんだが、上の方の人間は、保守のこととか考えてるんかなぁ。不安だ。実稼働入ったら、開発プロジェクト解散して、誰もメンテできないなんてことにならなきゃいいが。
Struts2 resultに名前が無い時
Struts2のblankアプリケーションのstruts.xmlを見るとresultにnameが無いのが存在する。散々Struts2のsrcを探し回って見つからず。XWorkのソースの中にあった。
// if you don't specify a name on <result/>, it defaults to "success"
if (!TextUtils.stringSet(resultName)) {
resultName = Action.SUCCESS;
}
これって便利なのかね。resultが一個しか無い場合とかに使うのか。どうも、こういうデフォルトって個人的には、好きじゃないんだけど。
Meadow3のエンコーディング自動判別
なんか開いたファイルに"text/html; charset=UTF-8"とか入ってると自動的にUTF-8エンコーディングになるようだ。便利なことも多そうだけど、解説資料とか書いている時は困るなぁ。
華麗なる大ポロネーズ
久しぶりにショパンの作品22を弾いてみる。やっぱり死ぬほど難しい。ま、これは一生かかっても弾くのは無理だな。しかしちょっとピアノを練習するだけで、PCのキーボードを打つ速さと正確さが向上して、入力速度が1.5倍くらいになっている。やっぱり定期的に練習した方がいいのかも。
ファ氏
そういえばCelsiusが摂氏はいいとして、何でFahrenheightが華氏なのかと思ったら、華は中国語では"Hua"なのだそうだ。ってことは中国経由で入ってきたのか。これも意外だ。てっきりイギリスかドイツあたりから直接入ってきたものだと思っていた。
tone key
社内電話会議で音声応答メッセージに「... followed by tone key」と聞こえるところがあって「tone keyっていうのか」と思っていたんだけど、良く考えてみたら、この前のポンドか! #キーだからpound keyなんだな。
Vistaインストールは2回まで
そろそろ退路をちゃんと確保しておかないと、まずいなぁ。でも、何をもってPCの交換と言えるんだ? HDDが壊れたのでHDDを交換してOS入れなおしましたってのもだめなのかな?
分からない事は、分からないと言おう。
assert文のないJUnitテストケースクラスなんて、初めて見たよ。分からないなら、分からないと言おうよ。
テストデータをXMLファイルで用意して、プログラムを起動する部分をJUnitで書きます。結果は目視で確認してExcelのテスト結果表に書きましょう。なんて開発標準出されたら、大規模プロジェクトでは何百人が泣くことか。悪い冗談かと思った。
単体テストしようとしているだけましなのか? いや、そんなわけないな、こんなの従来の手作業単体テストより余計に手がかかるだけで「XML使ってます〜、JUnit使ってます〜」ってだけの単体テストごっこだよな。
R52
仕事用PCがThinkPad R52になった。個人情報保護法絡みで色々と面倒になったので、自分のPCを仕事用にするのをやめて、会社支給品に変えたのだ。ちょっと重くなったけど、かばんは車付きだし、なんとかなる。
ちょうつがいが重いので、液晶の傾きを調整すると、本体側まで持ち上がってHDDの入った筐体を、しょっちゅう机に叩きつけるのには閉口なんだけど、それ以外は筐体ががっしりしていてキーボードも打ちやすいので、結構気にいっている。液晶もXGAだと明るいし。
ただ1つ気になるのが、どういうタイミングなのかビープが鳴るんだよね。なんとなく使わなくなって3分くらいたったあたりで鳴っているようなんだけど、特に液晶のバックライトが消えるタイミングとかに同期しているようにも見えないし、だいたいスピーカは常にミュートで、デバイスマネージャでBeepデバイスも無効にしてある。しかも省電力設定は画面offだけだってのに、いったいどこが鳴ってるんだろう。謎だ。
WebWork in Action
やっと読了。いいねWebWork。もっと早く知っておくべきだった。特にテストの容易さが徹底的に考えられているのが良い。アクションをWeb層から切り放すのは当たり前。「DIやバリデーションの定義で、XML設定ファイルにバグがあったらどうする?」確かにそうだよな。で、それもちゃんと単体(っていうのか?)テストできるようになっている。
JSFって、最近追っかけてないから、今はどうか知らないけど、Strutsと比べると機能的に劣る部分が多かった。トランザクショントークンとか例外処理とかタイルとか。なんというかアーキテクチャ的にはキレイだと思うんだけど、今ひとつ現場に揉まれていないというか。今ひとつ「楽になった」って実感を感じにくいんだよね。WebWorkには、Strutsに劣るところが無いし、ビッグジョブのサポートなど、Strutsには存在しない機能も多数ある。当然完成度は比べものにならないくらい高いし(とにかくUIタグの少なさが、いかに洗練されているかを物語っていると思う)。コマンドパターンになってるから、もう初心者がActionのThread safetyではまることも無いだろう。あ、クライアントサイドバリデーションは無いか。
で、なんか知らないうちにStruts2出てるんですが、Tutorial見ていると、opensymphonyとか残ってて、あれ? と思ったら、そうか寄贈されたのってWebWorkだけなのか。ってことはXWorkとかOGNLとはOpenSymphonyのままなんだ。これってなかなかウマイやり方だな。もしもStruts2が、それなりにメジャーになれば、開発者はいやでもパッケージ名にOpenSymphonyとか目にするわけで、なかなか良い宣伝だ。
リンク紹介文
相互リンクのお願いが来る場合、ほとんどのケースで紹介文が添付されている。これはありがたいのだけど、表現が微妙なことが多い。例えば「xxxについて紹介させていただいています」みたいなのは、リンク集にそのまま掲載すると、なんだか妙な感じになる。リンク集ページは、紹介元サイトの人間が紹介先サイトについてのコメントを書くというスタイルが普通だと思うからだ。かといってあまり紹介文をいじるのもなんだかね。ま、内容が伝わればいいわけだけど。
次のプロジェクト開始
というか、今回も火消しなわけで。なんか毎度サイズが大きくなっていくのは気のせいだろうか。500人を越えるプロジェクトなんてあるんだ... ここでPM努まるような人は、普通に会社経営とかできるんだろうな。
#の読み方
おもしろい。#はUS圏外では「ハッシュ」、USでは「ポンド」と読むらしい。ずっと「シャープ」と読んでましたよ。
そういえば日本語キーボードには、妙な位置に£キーがあった記憶があるんだけど、今探したら見つからない。記憶違いかな。いや父親に「このポンドはどうやって入力するんだ?」と言われて説明に困った記憶があるんで、昔はあったはず。最近のキーボードでは削除されたんかな。
WebWorkのDI
WebWork組み込みのDIはAwareインターフェースを使う。
public class Search extends ActionSupport
implements SessionAware
{
Map session;
public void setSession(Map session) {
this.session = session;
}
// ...
}
DIコンテナ側には、インジェクトするオブジェクトと対応するAwareインターフェースを登録しておけば、あとは使いたい側でAwareインターフェースを実装しさえすれば、そこにコンテナがインジェクトしてくれる。これって筋がいいなと思うんだけど、WebWorkのデフォルトがSpringが標準になってしまったことから、どうやら受け入れられなかったようだ。
最初の設定さえしておけば、Java側のソースさえ見ていれば、動きが分かるわけで、いちいちXMLの設定ファイルを見なきゃいけないようなのより、ずっといいと思うんだけど、なぜだめだったのかな。WebWork in Actionでは「いちいちインターフェースを実装するのが面倒だった」と分析されてるんだけど、そうかなぁ。XML書くのと、implements XXXAwareと書くので、そんなに違うかね。
もっとも、今だったらアノテーションの方が良さそうではある。
日比谷公園
天気がいいので日比谷公園に散歩に。


園内は、コスモスが咲いているくらいで、ちょっと寂しい感じ。バラの蕾がいっぱいついていたので、下旬には咲くかも。

たまたまやっていた山野草展を見学に。











この岩沙参がきれいだった。





最後は品川で牡蠣を食べて帰って来た。おなじみミニチュア写真。品川は2階からなので、今ひとつ高さが足りない。



新しいLogitechのドライバ。
Logitechのドライバは、自動更新機能がついていて、自動更新される。で、更新されたら、こんなダイアログが出るようになった。
親切でやっているというのは分かるんだけど、このボタンはいつも間違えて押してしまうんで「割り当て無し」にしてるんだよなぁ。World Of Warcrafを全画面モードでやってて、これが出ると、いちいちウィンドウモードに切り替わるので、かなりウザいんですけど。
デフォルトでは、全てのボタンに機能がアサインされていて、それをわざわざ「割り当て無し」にしているんだから、こんなダイアログ出さなくてもいいと思うんだが、間違えてやってしまう人が多いんだろうか。
開発の現場
開発の現場に寄稿させていただきました。いつも通りartonさんとの共著。今回はCVS/Subversionの話です。最初は、ページ埋まるかなとか心配していたのに、書いてみれば1回分じゃ収まらず、結局2回分の分量に。CVS/Subversionを布教する人と、日々あまり勉強する時間がとれないけど、使わないといけない人を意識したつもりです。
秋晴れ
今日はいい天気だった。

なんかつばめにも見える。
東京工業大学の学章(?)は、窓の外につばめが飛んでいるマークで、これは(工大)をもじったものなのだけど、これは昔の学生が校内に落書きしたのが採用されたんだそうだ(授業で、どっかの先生が言っていた)。こんなデザイン考えた奴もセンスあると思うけど、落書きを単なる落書きとして打ち捨てずに、学章に取り上げた奴もなかなかだよね。自分はこっちの方に感心した。まぁ、この話自体が都市(学内?)伝説の可能性もあるけど。
ちょっと時間があったの本屋に。なんかSoftware Designの毛色がすっかり変わっていて、ちょっとびっくり。で、なぜかインターフェースがビニールに包まれていたんですが、いつから青少年に悪影響を与える本になったですか? 「この本のせいで息子が3K職場に!」とか? ^^;
コスモス
今年も、くりはま花の国へ。あいにく曇天だったけど、なんとか園内にいる間だけは雨には降られずに済んだ。



やっぱり曇天だと色がいまひとつ。




コスモスはソフトフィルタも良く合う。







花壇にあった別の花。本当に雨あがりなので水滴は、やらせではありません。^^
SKKIME
Ubuntuは、インストールの最初で"Loading the kernel"(だったかな)でハング。初期パラメータでmem=512m与えればいいとか情報もあったけど、全く効果無し。で、サクっと諦めてOpen Soralisとか入れてみようとしたのだけど、こちらもインストール途中でUSBがマウントできないというエラーが出続けてダメ。最後はOpen SUSEを。こちらは全く問題なくインストールできたんだけど、nVidiaドライバ入れようとして、Yastいじっていたら、どうもソフトウェアパッケージを保持しているデータベースが壊れたようで、ソフトウェアの構成を変えようとすると毎回ハングするようになってしまった。
そろそろXPに戻ろうかということで、ブートメニューがたくさん重なってうざくなってきたので、fdisk /mbr。これがいけなかったらしい。全く起動できなくなり、XPの回復コンソールで見るとNTFSなのにFATだとか言われるし。で、結局入れ直し。
なぜかSKKIMEのインストールにはまる。手動でskimic.dllをregsvr32しようとしても「モジュールが見つかりません」と言われる。何かライブラリが足りない感じ。結局Meadow3を入れてから、もう一度試したら、何の問題もなく入った。
Vista入れてみた。
プロジェクトの区切りで、今日から1週間の夏休み。今日はVista RC1を入れてみた。視覚効果をoffにすれば、XP使っているかと錯覚するくらい普通に使えるのだけど、altimeやxkeymacsのキーリマップ系が全滅なので、このあたりのソフトが対応しない限りは、XPのままだろうな。あとやっぱりメモリ喰い過ぎだよ。OSインストール直後で800MBくらい使ってるし。XPなら色々入った今の環境でも300MB切っている(これでも、多過ぎと感じるけど)。重さはそんなに感じなかったので、メモリが4GBで2万くらいまで下がれば、問題ないか。あ、あとnVidiaのx64ドライバ入れてみたけど、ディスプレイの回転表示ができなかった。
ってところで、次はUbuntuでも入れてみようか。
続:Justsystem PDF Suite
結構UIが使い易いかも。
あたりまえだけど手のひらツールで本文をクリックしても、無駄にズームされたりしないし。
テキスト選択モードでテキストコピーすると、自動的に手のひらモードに戻る。これ結構便利。
あとテキスト選択でクリップボードにコピーした時にスペースも保存される。本家Adobe Readerだとなぜかスペースが消えるので、ソースコードとかコピペするとインデントが崩れて面倒なんだよね。
あと、キーボードショートカットも指定変更できる。
Justsystem PDF Suite
安かったので買ってみた。PDFへの注釈の追加とかが一通りできるので、それなりに便利。しおりも作成できるのでPDFの本を読む時には、どこまで読んだかを記録しておける。これで、この値段ならお買い得だと思う。
ただ、レンダリングは、かなり遅い。本家Adobe Readerより数倍遅い感じ。あと、どうも読み込めるPDFバージョンに制限があるようで「サポート外です」と言われるケースがある(もっとも、そのまま続行すると、特に問題なく読めるけど)。設定でスムージングをoffにしても、反映されない感じ(もちろんOS側のClear typeもoff)。あれ、嫌いなんだよね。目が疲れている感じで。あと、残念ながらPDF文書の比較はできない。もっとも本家でもProfessional版でないと出来無いようなので、この価格の製品に望むのは酷か。で、Adobe 5.0を入れようと思ったら、CDが見つからない。どこやったかなぁ。新規購入なんてできないよ。








