2008年12月23日火曜日

吉行淳之介「飲む」

吉行淳之介の「飲む」というエッセーがあって、これがエッセーの白眉というか、何年かおきに読み返してしまうのです。

個人的には傑作と思ってます。一杯の酒がもたらす潤い。

琥珀色の美酒。ストイックでありつつも、酒を楽しむことのできる余裕。酒への憧れとストイックさとの共存。一杯の貴重な酒を飲むことで、生きている文脈に戻る。生きている実感と、酒を飲む幸せとが完全に合体する時。

いいですね。うん。

以上。
.

クリスマスの危機

まあ、今日はクリスマス・イブ・イブなわけですが。

だいたい子供というのは、こういうイベントがある日には朝からハイになり、日中は尋常じゃないテンションで騒ぎまくるわけです。

そして両親はせっかくだから、とケーキを作ってみたり、ご馳走を作ってみたりして神経を使いつつ、日中は労働しているわけで。

ということは、次第に子供はわけも分からず騒ぎ立て、父母は労働による疲れがかさみつつ、ハイテンションを引きずりつつ疲れも見えてきた子供たちに振り回されることで、次第に不機嫌になるわけで。

で、クライマックス。ケーキとかハレのデザートを準備し、ハレのご馳走を準備しつつあるそのとき、事故は起こるものなのです。

まあ、さすがになれましたけどね。皿やグラスが割れなければもう上出来というか。怪我しなけりゃあそれでいいか、みたいな。

今年は妻がクッキーで作るお菓子の家なるギミックを採用し、苦労して作ってました。及ばずながら私も皿洗いなど手伝いましたけど。それからローストチキン丸一羽分。これも妻が選択し、妻が頑張って作りました。美味かったです。一家四人おなか一杯食べた後、残った残骸から出来るだけ肉をこそげ取り、さらに残ったガラを鶏がらスープに。チェ・ゲバラ率いるゲリラのメンバーに食べさせてあげたいと思った。マジで。でも血はにごった感じ。昼食抜いたのにな。また断食しなければ・・・

という訳で、誰も怪我せず、皿が割れることもなく、楽しく過ごしました。うんうん。


.

2008年12月21日日曜日

Ajaxとか

Ajax入門。いいページですね。Ajaxがよく分かる。

これまでJavascriptでコーディングする人は神だと思っていましたが、この入門を一通りチェックして少し神が身近に感じられました。そうか。FireBugを使えばいいのか(それにしても大変だと思うけどなあ)。

それからSOAだとかweb serviceという(胡散臭い)ジャーゴンがここ数年生きながらえている理由も、少し理解できたような気がしました。上手く言えませんが、要するにショッピングサイトの構築には相性がいいんだなってとこでしょうか。まだまだEnterpriseの領域でSOAとかweb serviceが活用できるとは思えないんだけどな。だって必要性がありませんぜ。データベースを使えばいいんだからさ。

以上です。
.

今日の料理(タラコディップ・サンマのみりん干し)

カラスミを目指していたタラコの塩漬け。ハエにファーストキッスを奪われた悔しさのあまり、火あぶりにして食べてみたらちゃんと美味しいタラコでした。魚卵好きのうちの妻は喜んでました。当然アミノ酸やら蛋白加水分解物は入っていないので分かりやすい旨味はありません。でもタラコ好きならイケるんじゃないかな。無添加だし。ちゃんとしたタラコっぽい発酵臭としょっぱいツブツブ・プチプチのテクスチャ。それに遠くの方から漂ってくるほのかな旨味。うん。タラコだ。って感じです。戦前のタラコってこうじゃなかったのかな。食べたことないけど。

今日はそんなタラコを使ってマヨネーズディップを作り、蒸し野菜と食べました。美味かった。私が料理するとたんぱく質と脂が過剰になるので、野菜を意識的に摂取する必要があります。一部はマヨネーズと和えずに、妻がご飯と食べてました。

それから昨日作ったサンマのみりん干し。これが美味かった。鯵で作ったときはちょっと干し過ぎてしまい、焼いたら硬かったんですが、今回やや生干しっぽくしてみたらご飯に合う合う。今度鯵のみりん干しを作るときは干し加減に気をつけようと心に誓いました。

なんだか血が濁ってきた気がするのでしばらく野菜優先で行きたいと思ってます。(でも鳥ハム仕込んじゃってるんだよな・・・)

以上。
.

2008年12月20日土曜日

カラスミとか

生のタラコをカラスミにする計画ですが、本日のハエの挨拶ですっかりなえてしまいました。

一週間塩漬け → 丸一日水で塩抜き → 丸一日酒に漬ける → 冷凍庫で丸一日冷凍(一応アニサキス対応) → 冷蔵庫で乾燥 とかやってるうちに食い物に見えなくなったのよ。これ食うの?って。扱いが食品じゃなくなってて、何かの実験?みたいな。たとえるなら人体実験?

でも、途中でちょっとはみ出した卵を食べると美味しいんですけどね。マイルドで自然なタラコって感じで。でも、今日外に干してみたタラコに、いとおしそうにベタベタとキスしていたハエを観察してもう生食は断念。もう炙って食っちゃる。生食勘弁。パンとか乾き物なら多少ハエがとまっても気になりませんが、自作のカラスミにとまったハエは結構インパクトでした。大体個人でカラスミ作っていいのかと。ちゃんとお国の監査を経た、歴史ある企業がするべき仕事ではないのか、と。まあ、ようするにヘタレってことで。私は逃げますよ。明日か明後日に、しっかり炙っていただくことにします。



それからサンマのみりん干しと、鳥ハムを仕込んでます。



サンマはアジよりさばくのが楽ですね。頭を落としてしまえば背開きも結構簡単。ざくざくと出刃包丁で小骨を切る感触が楽しかったです。それからとうとう上州屋で干し網を買いました。ハエを寄せ付けないような干物を干す網です。物干し竿に引っ掛けます。700円台でした。元は取れると思うな。ふっふっふ。

以上。
.

再びチェ・ゲバラ

引き続きボリビア日誌を読んでいます。

人心掌握の難しさよ。チェほどの人間でも苦労するんだ。

希望を維持することができる。それだけで偉大だと思う。

ゲリラ戦すら楽しむ。ある人の生きる文脈が、他人を巻き込むことが出来る。

チェ・ゲバラの目標の気高さ。そして、それに恥じない彼の生き方。

結構心を打たれます。
.

寝不足とか

以前は朝の4時台に目が覚めてそのまま(よく)眠れない、ということがよくありました。

朝の4時、5時にふと目が覚めてしまうことを鬱病の兆候だとする意見もあったりするわけで、そんなこともあるかしら、とも思っていたのですが、節酒するとそういうことも少なくなって、たまに呑みすぎ・食べすぎるとやたらと早朝に目が覚めてしまって眠れない、そういうことが分かりました。

すなわち私の場合は鬱病というよりも呑みすぎ・食べすぎが原因で朝に目が覚めていたわけです。

まあ鬱病だろうが呑みすぎだろうが、やたら早くに目が覚めてそのまま悶々と朝を迎えると、体も疲れるし、眠気は残るし、ロクなことはないわけですけどね。

一応、そんなハメに陥ったときは、とにかく目をつぶって力を抜くことにしています。それから小さな音量で音楽を聴くのもいいですね。音楽は静かなクラシック(ショパンのノクターン、ドビュッシー、バロック音楽、ピアソラ)、民族音楽(インドのシタール(ラビ・シャンカール)とか、中世の聖歌とか)、瞑想にいざなう系の音楽です。

そうすっとですね、結構わけのわからない半覚醒の夢を見ることができて面白いんですね。安らかに眠ったとか疲れが取れた感じはないのですが、とにかく奇妙な夢が見られます。

最近見た半覚醒の夢。見て面白かったな、とその次の瞬間に忘れてしまうことが多いのですが今でも覚えているのはセーラー服を着たガンダム。夢に出てきたとたん面白い!と思った。ウケた。でも、その次の瞬間我にかえって、なぜに?と思った。別にガンダムにも女子高生にも執着しているつもりはないのだが。それから、怪しいセールスマンの夢。「せっかくですから有効な特許を取っておきませんか?例えば、こんな特許はいかがでしょう」と言うのでよく見るとカエルの飼育方法に関する特許。いや、せっかくですが私の仕事からしてもカエルの飼育方法に関する特許をとってもあまり使い道はありませんので・・・と一所懸命お断りしながら、ああ、これは夢だと。そのセールスマンには申し訳なく思いつつ、これは変な夢を俺は見ているな、とその感覚が奇妙でした。

そんな感じで朝を迎えるとなんとなく眠ったような眠らなかったような、そんな感じです。

以上。
.
(12/30後記)
ガンダム・女子高生・カエル、と来たらケロロ軍曹ですね。
でも夢ではケロロっぽくなかったんだよなー。
.

2008年12月17日水曜日

鷲田清一さんはいいことを言う

この人いいことを言うんですよ。哲学者とは思えない(失礼>ごく一部の人)。

「学力問題」って、なんだ?(1/2)

学力って何だ?「頭がいい」って何だ?「『テスト』なんて無礼だ」。ちゃんとまっとうに考えてる。ちゃんとまっとうに考える人の少なさよ。
.

うちにも来ましたよ

カンパニータンクの取材依頼が来ました。何か嬉しい。

ググると分かるカンパニータンク。カンパニータンクの営業の人は「Yahooで調べて下さい」って言ってました。GoogleとYahooの差別化ですね!

丁重にお断りしました。いや、詐欺とまでは思ってないですよ。

って何のことだか分からない人が多いでしょうから補足です。

「地元の元気な中小企業を取材したい」「現場の意見を反映したい」という誘い文句で雑誌の取材依頼が来ます。「kwsk(詳しくお願いします)」と聞くと次は「雑誌に載せるのでウン万円欲しい」と来るわけですな。ざっと見ましたが掲載料は10万~100万くらいの模様。

自分の名前が活字化されるなら10万くらい安い!っていうマーケットは十分あるでしょうから、わりと妥当なビジネスと言ってもいいんじゃないかしら。というわけで詐欺ってのは言いすぎかもね。

断りましたが別にあちらもしつこくなかったですし、ちゃんと話を聞いてました。押し売りっぽくきたら私も腹が立ったでしょうけど、普通の対応でした。

でも、最初のセールストークがちょっと怪しいかなあ。だって、こちらで広告料を払わなければならない、なんて一言も言わないんだもの。妻も「だまされた」って思ったみたいです。最初から「御社の広告を出しませんか?」という話にした方が後味が悪くないと思いましたね(まあ、それだと見込み客が減るか)。

まあ、貴重な体験でした。
.

2008年12月14日日曜日

今日の料理(肉と青魚)

昨日のアジ一夜干し。市販の干物よりしっとりしていて、ちょっと内臓あたりに醗酵臭がしました。腹の掃除が甘かった模様。自然というか野性的?で美味かったです。上の子には不人気だったけど・・・

子供は塩焼きが一番好きみたい。新鮮な魚は塩焼きが一番美味いよな。そりゃそうだよ。塩焼きには負けるよ。(悔しい)

今日も懲りずにサンマとアジを買って来ました。だって安いし。それから子供向けに特売(97円/g)豚肩ブロックを500gくらい購入。これは定番の煮豚にします。

今回は漬けダレにちょっと工夫してみました。生姜とにんにくとねぎを刻むのではなくすりおろすのです。焼く前に1時間程タレに漬けますが、タレから引き上げる時に、漬け汁で野菜のカスをゆすぎます。そうしないと次の工程(肉に焼き目をつける)で野菜部分が焦げてしまうので。焼くそばから焼肉屋さんのようないい香りがして、心の中で「成功」とボソッとつぶやく。

これが肉を漬けてる写真。


表面に焦げ目をつけた後、30分ほどタレを絡めながら煮て仕上げます。


豚の臭みが抜けて美味いです。この調理法、個人的にはヒレ肉で作るのが最高だと思います。案外硬くなりません。噛み応えはありつつもやわらかな感じになります。

サンマは昨日焦がしたリベンジで酢で煮るレシピに再チャレンジ。今度はビタクラフトのフライパンで作るつもり。塩加減に注意しないとな。それから骨もサクサクいけるように薄く切ってみようと思ってます(煮汁の酢に浸った方が骨が食べやすいんじゃないか、と予想。つまり薄く切って骨と煮汁がなるべく触れるようにしてみる)。

アジは塩焼きが美味いに違いないんだけど今回はみりん干しに挑戦する予定。許せ子供たちよ。

さ、これから魚をさばくか。(16:10)

(約4時間後)

はい。魚さばきましたよ。しっかり漬け汁にも漬けました。干物を作るのに4時間かかったわけではありません。夕食もとっくに食べ終わってます。(20:10)
メニューは以下のとおり。
・ご飯
鳥ハムのマカロニサラダ
・さんまの骨までやわらか煮(小骨はぜんぜん問題なし。美味い。でも背骨は硬かった・・・)
・ブロッコリー(妻が野菜がないことに気がついてあわててゆでた))


魚は寒空の下ベランダで干さってます。何か寒そう。つーかおせんべいのにおいですね。みりん干しって。うまそう。

サンマはまずまず成功です。
 携帯カメラの画像だと不味そうだな・・・(他はちょっと昔のNIKONデジタル一眼)
背骨は厳しいけど小骨は余裕で食べられる。ちょっとだけすっぱくて美味い。子供にはウケなかったけど・・・。そりゃ塩焼きには負けるよな。手をかけないほうが美味いなんてチョー悔しい。まあ美味いからいいや。これから頑張って消費しよう。

うん。まあマズマズの週末でしたよ。今週も。
.

2008年12月13日土曜日

今日の料理

一週間前からからすみの作成に挑戦しています。(*参考1)(*参考2)

ボラではなくタラの卵を(タラコとか辛子明太ではなく生のやつですね)を買ってきて、まずは冷蔵庫で塩漬け。つーか全体的に食い物なの?大丈夫なの?って感じでした。一部緑色してるし(まあ最初からだけど。)。漬けていた間、冷蔵庫はずっと醗酵した魚卵のかほりで充満。腐敗臭ではなく、なんとなくたんぱく質系のまったりとした香りに海の匂いがするというか。人によっては好きな匂いかも。でも結構濃厚で冷蔵庫を開けると毎度ふわあぁんと塩漬け魚卵の匂い。幸い、妻の鼻の調子が悪かったので咎められることはありませんでしたが、う~ん、という感じ。一週間経過した昨日、塩を払って水に漬けました。塩抜きのためです。丸一日ほど塩抜きして、今は日本酒に漬けてます。



週中あたりから外+冷蔵庫で干し始めます。どうなることやら。

もう一つはアジの干物。30cmくらいのむっちりしたアジが一匹97円だったので、もうこれは買わないわけには行かなかったですよ。背開きにしようとしたら思ったよりアジが大きかったので3枚におろしました(相変わらず骨に身が残ってぐやじい(下手だから))。水800ccに対して大匙4杯の塩水+しょうゆと酒を少々(塩加減は水1リットルに対して大匙4杯+-1杯の塩くらいでいいみたい)に1時間浸してから

ベランダで乾燥。よっしゃ。明日の朝はアジの一夜干しでご飯だ。・・・よだれが出る・・・

ベランダに魚がぶら下がってる。いや、シュールな感じがしたのは一瞬だけですよ。すぐに違和感なく認識。というかしみじみとした豊かな気分も。縄文時代のDNAが生きているのだろうか。

サンマも安かったので(一匹58円!)、二匹買って酢で煮たのですが何故か最終的に全面的に焦げ付いてノックアウト。味見で美味かったので悔しさもひとしおでしたよ。明日はリベンジだ。

料理ばっかやってるけど、これが何故かストレス解消になるんだな。

まあ幸せな話だ。
.

DIとかAOPについて考えてみた

フレームワークって何だろう。最近Spring frameworkとかSeasarを試して考えさせられました。

(現時点での感想です。今後評価は変わるかもしれません)

なぜエンジニアはフレームワークを求めるのか。

開発生産性の向上とか、スキルの蓄積とか、そういう一般論やセールストークは脇においておきましょう。

フレームワークとは何か。フレームワークを使うものはフレームワークから使われる。ハリウッドの法則とも呼ばれます。これがフレームワークの本質のひとつです。フレームワークがメインで稼動し、開発者はフレームワークが呼ぶ部品を作る。この部品はフレームワークが定めるお作法に則って作成されなければなりません。つまり開発者はフレームワークが規定する型にハマったコードを書く必要がある。すなわち、フレームワークとは「アプリケーションこうあるべし」と定めるものです。しかも実装レベルで定めます。フレームワークに従わなければ稼動することもできません。

Strutsの目指したものは何だったか。もちろん、Webアプリケーションをシンプルに手早く開発することです。今思えば0.9時代のStrutsの抽象度は低く、またフレームワークにしては強制力が弱く柔軟に過ぎていました。しかしHTMLのインプットフォームをFormビーンにマッピングする発想(抽象化)と、画面遷移とBeanをXMLで定義する設計(疎結合)は非常に先進的であったと思います。

それではSpringの目指すものは何なのか。
Spring is a layered Java/J2EE application platform, based on code published in Expert One-on-One J2EE Design and Development by Rod Johnson (Wrox, 2002).

すなわちロッド・ジョンソン氏が提唱した、アプリケーションのデザインパターンの実装です。細かいところは省きますが、要するにSpringはStrutsとは異なり直接的な何らかの成果物を目標としているのではなく、より理念的なもの(概念と言ってもいいですし、思想、デザインと言ってもいい)を目指しているのです。それがSpringや(恐らくはSeasarも)をとっつきにくくしている理由のひとつであると思われます。

私はこのことが、つまり「目的が抽象的であること」がSpringフレームワークの問題だと思います。なぜか。私はそこにわれわれの業界に付きものの「手段と目的の逆転」が起こっていると見るからです。

なぜSpringを使うのか。Springを使うモチベーションとは何か。Springの位置づけからすると、それは「よいデザインパターンを実装するためである」ということになります。しかしちょっと待ってください。よいデザインパターンを実装するために、われわれはコードを書いているのでしょうか?コードを書くのは、何かやりたいことがあると思います。よい設計のためにコードを書く?そんなことがありえるでしょうか。

確かにオブジェクトをXMLから挿入できるDIや、横断的に割り込み処理をするAOPはよい発想だと思います。しかし、われわれはDIをするためにコードを書いているのではありません。DIやAOPは、あれば便利かもしれないもの。気の利いたスキマ商品なのではないか、と私は思います。例えるなら高級システム手帳。あったらうれしい。使いこなす人はカッコいいと思う。でも・・・別にいらないや。

Spring frameworkを開発する方の熱意と才能はすばらしいと思います。あんなものとても私には作れない。「よいフレームワークを提供して使って欲しい」「いいデザインのアプリケーションを作って欲しい」という熱意はまさに尊敬に値します。

でも私にはSpringは違和感がある。Data Injectionやるためにアプリ作ってんじゃねーや。と思ってしまう。

DBとエレガントに連携し、読みやすいコードで書きたいなら、HibernateやJPA(EJB3.0)を使うでしょう。

Webアプリを効率的に作ろうと思ったら、今の私なら躊躇なくJSFを選びます。

しかし、DIとAOPを使いたいから、XMLでデータや横断的処理を挿入したいからSpringを使うか?使わないと思うな。というかSpringとEJB3.0を連携させる体力の余裕があったら他に回すよね。

ということで、以上が現段階での私のSpring観です。否定的ってことで。

以上
.
(2008/12/15追記)
DIって本当に必要? - ひがやすを blogを見ると、Seasarのコミッタの方も真剣に自問しているようですね。偉い!偉いぞ!!
同じページで、普通の業務アプリケーションにはインターフェースはいらないんじゃないか、と言ってますがこれも偉い!!!よくぞ言った。必要だから使う、ではなく、ただ「インターフェースを使って設計しなきゃいけない」という強迫観念に襲われがちじゃありませんか?こういう問題提起・洞察は非常に重要です。
.

Seasar2を使ってみます(4)

次はAOPです。
わりあいすんなり行きました。

まず自前のIntercepterを準備します。
package test;

import org.aopalliance.intercept.MethodInvocation;
import org.seasar.framework.aop.interceptors.AbstractInterceptor;

public class MyInterceptor extends AbstractInterceptor {

private static final long serialVersionUID = 1L;

@Override
public Object invoke(MethodInvocation method) throws Throwable {

System.out.println("Before");
Object ret = method.proceed();
System.out.println("After");
return ret;

}

}

次はexample2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component class="java.util.ArrayList" name="list">
<initMethod name="add"><arg>"Hoge"</arg></initMethod>
<initMethod name="add"><arg>"Piyo"</arg></initMethod>
</component>

<component class="java.lang.String" name="autoBinding"/>
<component class="java.lang.String" name="useAnnotation"/>

<component class="test.Hello" name="hello">
<arg>list</arg>
<property name="autoBinding">"自動バインディング"</property>
<!-- ダメだった
<property name="useAnnotation">"アノテーション利用"</property>
-->
<aspect pointcut="sayHello">
<component class="test.MyInterceptor"
name="intercepterTest"/>
</aspect>
</component>
</components>

MainとHelloは変更なしです(AOPだからね)。

以上です。(はて、しかしこれをどう使うのかな)
.

Seasar2を使ってみます(3)

次はフィールドインジェクションです。publicフィールドへの自動バインディングとアノテーションを使ったバインディングを試します。

【結論】
自動バインディングは上手くいきましたが、アノテーションはダメでした。なぜだろう??
以下がメモです。
■まず"Binding"アノテーションが存在しない
■Webを調べると"Binding"ではなく標準の"Resource"を使ったほうがよいとのことだったので"javax.annotation.Resource"を使ってみたがダメ。
■@Resource(name="useAnotation")  → ダメ
■@Resource → ダメ
■privateじゃなくprotectedにしてみた → ダメ
■付属のライブラリjarを全部ビルドパスに追加してみた → ダメ
■ダメな理由は結局分からず(なんかすごい恥ずかしいミスをしている予感も)

【作業】
eclipse上でUTF8を入力するために、example2.diconの拡張子をxmlとしています。
(dicon拡張子だとデフォルトエンコーディングのMS932が適用されるらしく、日本語を入力するとSAXExceptionが出るため)

Helloクラス
package test;

import java.util.List;

import javax.annotation.Resource;

public class Hello {

public String autoBinding;

// ↓結局ダメ
@Resource
protected String useAnnotation;

private List<String> listNames;

public List<String> getListNames() {
return listNames;
}

public Hello(List<String> listNames) {
this.listNames = listNames;
}

public void sayHello() {
for (String name: listNames) {
System.out.println("Hello "+name+"! ");
}
System.out.println("Auto binding -> "+autoBinding);
// ↓nullが出るだけです
System.out.println("Annotation binding -> "+useAnnotation);
}

}

Mainクラス
package test;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

public class Main {
public static void main(String args[]) {
SingletonS2ContainerFactory.setConfigPath("example2.xml");
SingletonS2ContainerFactory.init();
S2Container container = SingletonS2ContainerFactory.getContainer();
Hello hello = (Hello)container.getComponent("hello");
hello.sayHello();
}
}

example2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component class="java.util.ArrayList" name="list">
<initMethod name="add"><arg>"Hoge"</arg></initMethod>
<initMethod name="add"><arg>"Piyo"</arg></initMethod>
</component>

<component class="java.lang.String" name="autoBinding"/>
<component class="java.lang.String" name="useAnnotation"/>

<component class="test.Hello" name="hello">
<arg>list</arg>
<property name="autoBinding">"自動バインディング"</property>
<!-- ダメだった
<property name="useAnnotation">"アノテーション利用"</property>
-->
</component>
</components>

以上
.

Seasar2を使ってみます(2)

今度はHelloクラスのコンストラクタからデータを入れてみます(コンストラクタ・インジェクション)。

Helloからsetterを削除してコンストラクタでlistを受けるようにします。
package test;

import java.util.List;

public class Hello {

private List<String> listNames;

public List<String> getListNames() {
return listNames;
}

public Hello(List<String> listNames) {
this.listNames = listNames;
}

public void sayHello() {
for (String name: listNames) {
System.out.println("Hello "+name+"! ");
}
}

}

example2.diconを作成します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component class="java.util.ArrayList" name="list">
<initMethod name="add"><arg>"Hoge"</arg></initMethod>
<initMethod name="add"><arg>"Piyo"</arg></initMethod>
</component>
<component class="test.Hello" name="hello">
<arg>list</arg>
</component>
</components>

Main.javaを一応載せておきます。
package test;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

public class Main {
public static void main(String args[]) {
SingletonS2ContainerFactory.setConfigPath("example2.dicon");
SingletonS2ContainerFactory.init();
S2Container container = SingletonS2ContainerFactory.getContainer();
Hello hello = (Hello)container.getComponent("hello");
hello.sayHello();
}
}

以上
.

Seasar2を使ってみます(1)

適切なTutorialやサンプルが見当たらないため躊躇していましたが、Spring(DIとしての)をいじってみてなんとなくDIフレームワークとやらが分かってきたので、その流れでSeasar2を触ってみました。

元にしたのは以下のページ。これ以上ないほどシンプルなサンプルです。

Human System: The First Seasar2 Example

まあ取っ掛かりとしては十分なんだけど、何も知らない人がこれ見ても厳しいでしょうな。つーかやってみようとすら思うかな?

で、Eclipseにエイヤとサンプルをつっこんで動作確認完了。クラスパスとかパッケージのパスとか基本的なところに注意しましょう(example.diconも暮らすパス上に配置します)。それ以外の注意点は以下の通りです。

▽稼動に必要なライブラリ
s2-framework-2.4.33.jar
commons-logging-1.1.jar
ognl-2.6.9-patch-20070908.jar
javaassist-3.4.ga.jar

▽XMLについて
example.diconから以下の二行を削除しないとエラーコード"ESSR0054"のSAXExceptionが発生して動きません。
</components>
<components>
すなわち
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component class="java.util.ArrayList" name="list">
<initMethod name="add"><arg>"Naoki Takezoe"</arg></initMethod>
</component>
</components> <!-- この行と -->
<components> <!-- この行が不要。 -->
<component class="jp.sf.amateras.seasar.example.Hello" name="hello">
<property name="target">list</property>
</component>
</components>

当たり前だけどこれだけではふーん、という感じ。確かにDIだね。みたいな。でもちょっとSpringに比べてプリミティブ?

国産フレームワークということなので、それだけでも応援したいですね。

引き続き調べてみたいと思います。(何やろうかな)

.

2008年12月8日月曜日

偶然とチェ・ゲバラ

図書館で何気なく手に取ったチェ・ゲバラの「ボリビア日記」。チェ・ゲバラって結局誰なんだっけ?という程度の認識でナニゲに借りてしまったのが二週間ほど前でした。すなわち「ゲバラって誰」という認識だった。ゆえに借りてみた。実に薄っぺらいきっかけです。帰ってから妻に「チェ・ゲバラって誰だっけ」と聞くと「えーと、何かキューバとかカストロとかそんな感じ。それ以上のことは知らない」との答え。私の認識はそれ以前でした。

で、読んでみるとなかなか面白い。そうか。チェ・ゲバラってこんな人だったのか。理想に駆り立てられ、世界を変えようとゲリラ活動に身を投じた男。永遠の青春。偶像化されるのも理解できるなあ。日本の学園闘争とか60年代後半もこんな空気が流れてたんだろうな。

ま、それはさておいて「ボリビア日記」を読み始めてしばらくしていたら何やらチェ・ゲバラが映画化される模様。うん。シンクロした。たまにこういうことがありますね。

さて、この偶然をどう解釈するか。人間はなんにつけても意味を見出したい存在なのでいろいろパターンを考えてみる。

1.私が図書館でチェ・ゲバラの本を借りたがゆえに、まさにこの私をターゲットとして映画が作られた。
→ うん。オカシイ人の発想ですな。大体時系列でつじつまが合わない。映画作るのに数年はかかるはずだから。

2.チェ・ゲバラ再評価の雰囲気が以前からじわじわと高まっていた。映画の作成・公開もその流れに沿ったもの。私がたまたまチェ・ゲバラの本を手に取ったのはまったくの偶然。意味はない。
→ まあ、妥当な解釈でしょう。

3.小林多喜二の蟹工船のヒットやアメリカ流資本主義に対する批判的風潮に乗り、次はチェ・ゲバラ関連を売り込もうとして広告代理店がいろいろ布石を打っていた。私も無意識のうちにWebやテレビから触発されており、図書館で「ボリビア日記」を手に取ったのは私の自由意志ではなく、実は広告代理店のキャンペーンの結果でしかなかった。映画化もその流れ。
→ ありそうですが、ややオーバーな解釈。

というわけで、2がメインで3はそういうことも少しはあるかな、という感じですね。偶然っていうのも楽しいもんです。

私が一週間ほど前にカワハギについて書いた後、asahi.comでカワハギが出てきたのもまた別のシンクロ。カワハギの旬が冬だって理由はあるでしょうが、やっぱり楽しい。

以上
.

2008年12月6日土曜日

改めてSpringを試す(DIコンテナとしての)

これまでSpring MVCのついでにSpringの機能を使って気ましたが、改めてDIコンテナとしてのSpringコアを触ってみたいと思います。

大体"DIコンテナ"なんていう名称が胡散臭かったんだよね。またしてもJargonか。けっ。位にしか思っていなかった。でも理解しないままケチをつけるのもカッコ悪いので。

試したのは以下のチュートリアルです。こなれていて(特徴の示し方がシンプルで明確。分かりやすい)悪くないです。
http://www.atmarkit.co.jp/fjava/rensai3/springdi01/springdi01_2.html

【まとめ】

いや、Springって結構いいアイデアですね。要するにXMLを介してオブジェクトを連携させることで、疎結合やAOP(処理の注入。intercept。そんな感じ)を実現するフレームワークです。例によってSpringの本質をぜんぜん理解してなかったみたい(なんでわざわざHibernateやらStrutsと連携させる必要があるんだ。わずらわしい。くらいの認識でした。お恥ずかしい)。

以前「SpringはアーミーナイフでStrutsは鋭い刃物」と喩えました。このときはSpring MVCのみを念頭においていたのですが、Spring全体に対しても当たらずとも遠からずかもしれません。Springは便利で軽快な汎用ツール群だと思います。それにSpringで開発するのは結構楽しい(これって重要)。エンジニア魂をくすぐる。人気があるのも理解できます。

使い場所にもよるでしょうが、プロジェクトによっては有効ではないでしょうか。ただちょっとマニアックな気がするなあ。Springで作って良かった。と実感するケースはあまりなかったりして・・・(「再利用可能性」を志向して一生懸命デザインしても、実は誰も再利用しない、とかそんな感じ)

【おまけ】

チュートリアルの流れで少し拡張してみました。(ぜんぜん大したものではないですが一応)

■ SpringTest.java
package test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {

/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Target target = (Target) context.getBean("target");
System.out.println(target.getMessage());
Parent parent = (Parent) context.getBean("parent");
System.out.println("親:" + parent.getName());
List<Child> children = parent.getChildren();
for (Child child : children) {
System.out.println(child.getName());
}

}

}

■ applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="target" class="test.Target">
<property name="message">
<value>Hello World!</value>
</property>
</bean>
<bean id="oldest-son" class="test.Child">
<property name="name">
<value>長男</value>
</property>
<property name="no">
<value>1</value>
</property>
</bean>
<bean id="oldest-daughter" class="test.Child">
<property name="name">
<value>長女</value>
</property>
<property name="no">
<value>2</value>
</property>
</bean>

<bean id="parent" class="test.Parent">
<property name="children">
<list>
<ref bean="oldest-son" />
<ref bean="oldest-daughter" />
</list>
</property>
<property name="name">
<value>親</value>
</property>
</bean>
</beans>

■Parent.java

package test;

import java.util.List;

public class Parent {

private List<Child> children;
private String name;

public List<Child> getChildren() {
return children;
}
public void setChildren(List<Child> children) {
this.children = children;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}

■Child.java

package test;

public class Child {
private String name;
private Integer no;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getNo() {
return no;
}
public void setNo(Integer no) {
this.no = no;
}
}

以上
.

2008年12月5日金曜日

RAD7.5でWeb Serviceを作ってみる

ここ数年使われているjargonであるところのWeb service(英語圏では大文字でなく、かつ複数形のweb servicesみたいな記載をよく見ます)。せっかくなのでRAD7.5で作ってみました。個人的にはこのテクノロジーに対しては出た当初から半信半疑です。セールストークやらわけの分からない専門用語が飛び交い過ぎている。まあ私が見限ったのはずいぶん昔のことだし、食わず嫌いもよくないので、最近のweb sevicesがどうなってるのか見てみたいと思います。

TutorialはIBM dW "Create stand-alone Web services applications with Eclipse and Java SE 6, Part 1"。例によってIBM IDの登録が必要です。

注意点)
build.xmlを実行する箇所について。RAD上で右クリック、実行 > Antビルド としてもエラーとなります。コマンド・プロンプトからantを実行すると(別途Apache antの導入が必要)、問題なく実行できました。ちなみにCygwinでもダメです。"Program Files"以下に導入しているからかもしれません。

RunServer を実行する箇所について。実行するためには commons-logging.jar と commons-discovery.jar をビルドパスに追加する必要がありました。

WebサービスエクスプローラーからUDDIメインを開いた後の画面について。Tutorialとは違うようです。RAD7.5では、
レジストリー名:SayHelloService
照会 URL :http://localhost:8080/wsServerExample?wsdl
と入力します。

Webサービスエクスプローラーの使い勝手。ぜんぜん違いますね。いろいろいじってみましたが、とうとうgetGreetingsを呼び出すことができませんでした。

結論。大山鳴動ねずみ一匹、という感じです。まだまだだな。(<偉そう)

以上。
.

2008年11月30日日曜日

カワハギ、カワハギ

だって魚関係のWebサイトを見れば「カワハギといえば肝。肝は旨い」ばっかりですよ。@nifty:デイリーポータルでも取り上げられてるし。で、スーパーに行く途中のこと。しっかりカワハギ=肝=旨いと刷り込まれた私の脳は、目ざとく通りすがりの居酒屋のメニュー「カワハギの肝和え 800円」を発見。カワハギの肝和えか。高いな。旨いらしいな。

で、スーパーに行ってみたら魚コーナーに未処理のカワハギが。何かカワハギにインスパイアされまくりって感じで。魚コーナーのお兄ちゃんに「これ刺身いけますか」と聞くと「大丈夫ですよー」と威勢のよい答え。もう買うしかないでしょ。今日の晩御飯はカワハギの肝和えに決定、ということで、カワハギを一匹買って帰りました。子供には無理だから、メインというよりは大人向けのサブアイテム。

そして夕食。メインのコロッケを作るのに一生懸命になってしまい、カワハギのことはすっかり忘れてコロッケ食べてごちそうさまー。あー美味しかった。ってカワハギどうしよう。とよくあるパターン。

しょうがない、お父さんの夜のおやつはカワハギだ。と重い腰を上げて(それでも少し楽しみにしながら)カワハギの解体に向かいました。出刃でツノを切り落とし、口を切り落とす。皮をメリメリと剥いで、後頭部?こめかみ?あたりにざくっと包丁を入れて骨を断ち、そこから頭をもぎ取る。頭にくっついて肝が出てきました。他人のWebサイトで見ると肝だけきれいに取れているんですが、実際にはグダグダといろいろ張り付いている。写真はイメージで実物とは多少異なる場合がってやつですな。慎重に取り外したつもりでしたが少し崩れてしまった。肝は皿に乗せてしょうゆを掛けておきます。子供たちが「気持ち悪ーい」「これ何?」「苦玉ってどれ?」と騒ぎながら覗き込んでます。頼むから出刃包丁のそばに顔を近づけるな。それから身を三枚に下ろして(下手なので骨にしっかり肉がついてしまう・・・クヤシイ)から、中骨を避けてサク取りに。刺身包丁で小さく切って、肝と和えました。(子供はもう飽きてどっかで遊んでる。)

実家からもらった酒「越中五箇山 三笑楽」をコップにたっぷり一合分注ぎます。普段呑む酒と違って薄い琥珀色してて、香りとうまみが濃い。ちびりとすすって、デワデワ、とカワハギに箸をつける。

う~ん。見た目結構グロいっすよ。肝にはところどころ薄い血管がまとわりついてるし(多分解体が下手だった。もしくは取るか裏ごしするべきだったみたい)。身には薄皮がついてて(これも取り忘れた)、全体になんだかぴろぴろしてる感じ。

箸に肝をつけてちょっとなめてみると。うん。確かに旨い。結構旨い。生臭さは許容範囲。

肝にまみれた身を食べてみると、こりこりして旨い。これからは普通に好物って言うかも。カワハギの肝和え行っとく?みたいな。高いから自分で作るか。

高級そうな店で、小ざかしい器にちょこんと盛られてきたら、その旨さに感動してしまうかもしれません。形のそろわない刺身にところどころ赤い血管が張り付いている、その時点で負けだったかも。でも逆に言えばその見た目にもかかわらず旨いことは確か。

演出がまずかったな。あとは技術的な失敗もいくつかあったように思われました。以下が次回の課題。

・生臭さを取るため肝には酒を振りかけておくこと
・しょうがの絞り汁を入れたい
・血管は取り除いておくこと
・身から薄皮を取ること
・刺身は形をそろえて薄く切ること(いっそ軽く叩くか)

また食べようと思ってます。

以上。
.