2006年08月28日

JDBC 4.0 [JavaWorld (2006年9月号)]

1. JDBC4.0は以前のバージョンと何が違うの?
JDBC4.0の主要な変更点として
EoD(Ease of Development)の実現のため、
以下のような新しい機能やインターフェースが
導入されたことが挙げられる。

(1) アノテーションとDataSetが新しく導入された。
(2) 例外処理が強化された。
(3) XMLデータを扱うインターフェースSQLXMLが導入された。
(4) Connectionの状態を監視しやすくなった。
(5) RowIdのサポートにより高パフォーマンスなロジックを記述できるようになった。
(6) 自動的にドライバがロードされるようになった。(Class.forNameの呼び出しは不要になる!)

((1)は特にへぇ~と思ったのでもう少しだけ詳細を。)
(他の変更点については本書を読むか、仕様書を参照していただきたく。)

2. アノテーションとDataSetを使うと何がうれしいの?
実装が簡素化される。
コネクションからデータのリストを取得するコードは以下の2行だけ。

## Main.java
UserQueries userQueries = con.createQueryObject(UserQueries.class)
DataSet user = userQueries.getAllUser();

では、SQLはどこに書くかというと、こんな感じ。

## UserQueries.java
interface UserQueries extends BaseQuery {
  @Select(sql="SELECT userId, password FROM user")
  DataSet getAllUser();
}

java.sql.BaseQueryインターフェースを継承した
インターフェースを作成し、
SELECT文やUPDATE文のアノテーションを記述していく。

メソッドの戻り値(上記の例ではUser)はPOJOであり、
SELECT文に対応したフィールドと
そのゲッター・セッターメソッドを用意すれば良いと思われる(?)。

DataSetはjava.util.Listを継承しているため、
検索結果が複数行になっても大丈夫。

-----------------------------------------------------------------------

ついこの間、Java SE 5.0がリリースされたと思ったら、
今秋にはJava SE 6.0(Mustang)がリリースされてしまいますよ。
## 上記のJDBC4.0はJava SE 6.0に含まれているものです。

いやはや、油断しているとあっという間に置いてかれますね。

ところで、全然関係ないですが、
昔Java 2 SE(J2SE)と呼ばれていたものが
"2"が取れて、Java SEになったのは知ってました。

でも、それだけじゃなかった・・。

なんと、6以降のバージョンは少数部分をつけないそうな。
なので、正確にはJava SE 6.0ではなくJava SE 6となり、
上記の記述は間違いということになる。

さらに、既にリリース済のJava SE 5.0 (Tiger)。
5.1はリリースされないんですって。(←知るの遅すぎ?)

つまり、5.0 (Tiger) → 6 (Mustang) → 7 (Dolphin) とバージョンアップしていく。
どうりでリリースが早いはずだ。

【参考リンク】
JDBC 4.0 Specification
http://www.jcp.org/en/jsr/detail?id=221

2006年08月26日

ザ・プロフェッショナル - 21世紀をいかに生き抜くか

「感情をコントロールし、理性で行動できる。
専門性の高い知識とスキル、高い倫理観はもとより、
例外なき顧客第一主義。
あくなき好奇心と向上心、そして厳格な規律。
これらをもれなく兼ね備えた人材がプロフェッショナルである。」

す、すごいですね。これらをすべて備えられれば
確かに立派な人になりそうデス。
じゃぁ、これらはどうすれば手にいれられるんでしょう?

「本書はハウツー本ではありません。
無考えにハウツーを求め、これにすぐさま飛びつくような態度は
プロフェッショナルたる者、戒めなければなりません。」

ウッ。(-"-;)。そうですか、そうですよね。
でも、でもですよ、これらをもれなく備えるのは
相当大変じゃないですか?私にはちょっとできそうにない気が・・・

「たいていの人が自分の限界を自分で決めています。
今までの経験と相談し、かなり手前に設定してしまうのが
ほとんどです。周囲から怒られることもなければ
バカにされることもないので、現実的で賢い判断と
言えなくもありません。
しかし、私に言わせればそれは小賢しい考えでしかなく、
そういう人はできるわけがないと思ったとたん、すぐ諦めてしまう。
これこそが知的怠慢なのです。」

・・・(lll_□_ ;lll)。
え、えーと、じゃぁ、明日から知的怠慢をなくすように頑張ります・・・。

「時代錯誤のガンバリズムでは、
とてもプロフェッショナルと呼べる代物でありません。
基本から体系的に学び、身を持って実践し、その経験を咀嚼・蓄積し、
その実学の知を自分以外の誰かのために提供するという訓練を積んだ
ビジネス・プロフェッショナルが求められているのです。

どこまでいっても耳が痛いデス・・・_| ̄|○

著者は名の知れたコンサルタント。
そのマインドの一片を本書によって知ることができます。

自分はプロフェッショナルに値する最高に価値ある仕事を
顧客に届けているだろうか。と自分自身に問いかけてみると、
今まで妥協を重ねに重ねてきた現実を思い出して
ちょっとイヤになったりします(泣

ビジネスマンとして勝者であり続けるためには
これくらいの覚悟がなければ駄目ということでしょうか。

本書を実行するのは至難の業ですが、
だからこそ、価値があるのかもしれません。

2006年08月24日

博士の愛した数式

今年初めには映画化されたほどの人気作。

数学を題材にした小説であるにもかかわらず、
読みやすい文章で書かれており、数時間であっという間に読めてしまう。
今となっては全然使うことのない公式たちもいくつか登場しており、学生の頃が懐かしくなった。

物語の途中には数学史上最も美しいとされる
オイラーの公式(eπi + 1 = 0)も登場する。

残念ながら、私には数の美しさを理解することは
できそうにないが、それまでは別々の分野で研究され、
関係性がないであろうと思われてきた
意外な3つの数の組み合わせ
(自然対数の底であるe, 円周率π, 虚数i)が
実はシンプルな法則によって結び付いていたというところに
数学者は驚きと美しさを感じるのであろうか。

物語の後半には、最初は全く相容れなかった「博士」、「私」、「未亡人」の3人が、
数学と「私」の息子である「ルート」によって
少しずつお互いを理解し、お互いを思いやり、そして調和していく。
それはオイラーの公式のように美しいのだ。と作者は言いたかったのだろうか。

私にはなんというか、ちょっと綺麗すぎて
素直に感動できなかったというのが正直な感想だったりする。
それでも、読み終わった後は、ちょっとだけ穏やかな気持ちになれる。

自分も、もう少しだけ謙虚で優しくありたいなと思えてくる、そんな一冊。

2006年08月22日

初めてのWicket (Java World 2006年9月号)

1. Wicket(ウィケット)って何?
Webアプリケーションフレームワークの1つ。
純正のHTMLとJavaでWebアプリケーションを開発することができる。

2. Wicketを使うと何がうれしいの?
・HTMLに特殊なタグや構文を埋め込む必要がないので、
WebデザイナーとJava開発者の分業がしやすい。
・独自の設定ファイルが1つもないためXML地獄に陥らなくて済む。

2.1. 特殊なタグを埋め込まずにどうやって動的な値を表示するの?
HTML標準タグに特殊な属性値を定義する。
例えばHTML標準であるspanタグにWicket特有の属性を定義することで動的な値を表示できる。

<span wicket:id="hello"></span>

2.2. "hello"の実際の値はどこに書けば良いの?
WicketではHTMLファイルとJavaクラスのペアで構成される。
(ペアになるHTMLファイルとJavaクラスのファイル名は同じにしなければならない。)
Javaクラスに以下のようなSwingっぽい実装をすることで
対応するHTMLに値を表示することができる。

add(new Label("hello", "Hello, Wicket");

2.3. 入力値はどうやって実装するの?

## xxx.html
<form wicket:id="form">
  <input type="text" wicket:id="userId">
</form>

## xxx.java
Form form = new Form("form");
form.add(new RequiredTextField("userId", String.class));
add(form)

2.4. ページ遷移はどうやって実装するの?

## xxx.java
Form form = new Form("form") {
  protected void onSubmit() {
    setResponsePage(new nextPageJavaClass(xxx));
  }
}

submitボタンを押すとonSubmitメソッドが呼び出される。
setResponsePageの引数には次画面のHTMLに対応する
Javaクラスのインスタンスをセットする。
次画面に値を引き継ぎたい場合はコンストラクタにセットしてやれば良い。

3. 今まで設定ファイルに書いていた情報はどこに記述するの?
2.2, 2.3, 2.4の通り、今まで設定ファイルにXML形式で記述していた処理は
HTMLとJavaクラスを1対1に対応させることと、
Wicketが提供しているSwingライクな部品を利用したプログラミングによって代替している。

-----------------------------------------------------------------------

へぇ~、ユニークなフレームワークですね。
JFC(Java Foundation Classes)/Swingフレームワークの
開発チームメンバーが立ち上げたオープンソースプロジェクトで
昨年の春ごろに1.0がリリースされていたらしいのですが、
全然知りませんでした。(-"-;)ウッ。

検索結果一覧のような繰り返しデータはどう記述するんだろう。とか、
入力値のバリデーションチェックはどうするんだろう。とか、
気になってきた方は下記サイトへどうぞ。

公式サイト
http://wicketframework.org/

Secret Staircase - Wiketとは
http://www.physalis.net/ss/space/Wicket

2006年08月20日

容疑者Xの献身

直木賞を受賞したミステリー小説。
面白くて一気に読めた。

各所に細やかな伏線が張られており、後半の謎解きに全て繋がっていく様は見事としか言いようがない。
何気ない文章の中にトリックのヒントが実に巧妙に隠されている。

欲を言えば、犯罪者と犯罪者の周囲の人間の心理を
もう少し突っ込んで描いてほしかった。
嫉妬から献身への心境の変化や、自殺未遂に至るまでの葛藤などがなく感情移入しにくい。

純愛ミステリーを謳っている本作品だが、
本当にそれが「純愛」なのだろうか。
ラストシーンはどうも釈然としない。

ただ、その点を差し引いてもミステリーとして十分に楽しめる作品。
この作者の他の作品も読んでみようと思う。

2006年08月18日

なぜ伊右衛門は売れたのか

1. なぜ伊右衛門は売れたのか?
脈々と受け継がれてきたチャレンジ精神が伊右衛門を大ヒットさせた。

-----------------------------------------------------------------------

う~~ん、う~~ん、(llll ̄~ ̄;lll)ウーン。

チャレンジ精神は大事ですよ。そこに異論はないのですよ?
でも、期待していた答えとは違っていたので、ちょっとガッカリかな。

「明日から、みんなでチャレンジ精神を持ちましょう!!」とか、
「チャレンジ精神を持てば、貴社の会社の売り上げは向上します。」とかでは
解決策にならないですしねぇ。

-----------------------------------------------------------------------

2. ところで、伊右衛門って誰?
サントリーと業務提携した京都のお茶屋さんである「福寿園」の創業者。
200年以上の歴史を持つ福寿園さんの創業者の名前を商品名にすることにより、
日本の伝統と本物へのこだわりを訴求できると考えた。

-----------------------------------------------------------------------

本を読んでいて、へぇ~と思ったんですが、
次の日、伊右衛門を買ったらペットボトルにも同じようなことが書いてあったとです。_| ̄|○

しかしながら、大きな失敗にも挫けることなく、
ヒット商品を創りあげた担当者の方々は言うまでもなく素晴らしいデス。
ドキュメンタリーとして気楽に読むのが、この本の楽しみ方ですね。きっと。

2006年08月16日

仮説思考

1. 仮説思考って何?
「まだ証明はしていないが、最も答えに近いと思われる答え」を
情報が十分に集まっていない段階から考えること。

2. 仮説思考ができると何がうれしいの?
作業量が激減する。

3. 作業量が激減するのはどうして?
課題を分析して答えを出すのではなく、
まず答えを出し、それを分析して証明するほう速いから。
あらゆるケースを調べまくってから答えを出すのでは時間切れになってしまう。

4. 最初に答えを出して間違ってたらどうするの?
もし間違っていた場合は、証拠集めの段階で仮説を
肯定するような証拠がなかなか集まらない。
そのため、すぐに間違いに気がつき、
余裕を持って軌道修正することができる。(ホント?(llll ̄~ ̄;lll)ウーン・・)

5. 仮説はどうやって立てれば良いの?
仮説の立て方に定石はない。(ガクッ・・_| ̄|○ )
ディスカッションやインタビューによって考えを進化させたり、
突然ひらめいたりする。

6. じゃぁ、どんな仮説でも良いの?
掘り下げられていて具体的なアクションに結びつくような仮説にしたほうが良い。

7. 最後に、仮説思考を高めるためにはどんなことをすれば良いの?
「だから何?」「なぜ?」を繰り返し考える。

----------------------------------------------------------------------------------------------------

やったこともないのに、そんなことわかるわかる訳ないじゃないか。(怒)
情報も揃ってないし、そんなことわかる訳ないじゃないか。(怒)

システム屋あがりで不確実性に対する耐性のない私には
ロジックを組み上げるピースが揃ってないとイライラするのです。

しかしながら、
「そんなこと、やってみないとわかんなくね?」と思ってしまうところを、
同じ条件(?)のはずなのに、ざくざく仕事を進めれる人もいるわけで。

この差はなんだろう、と。

えっ?経験の差?そんなこと言われてもどうしようもないので、
あんまり考えないことにして・・と(汗

その答えが見つかればと手にしたのがこの本でした。

残念ながら、仮説を構築する手っ取り早い方法は書いてませんでしたが、
(楽せず地道にやりなさいってことですかね。)
自分なりの答え(=仮説)を持って仕事をしたほうがうまくいくというのは納得できました。

でもさ、でもさ、やっぱりよくわかってないのに、
答えを先に決めちゃうのって、気持ち悪くない?ねぇ、絶対気持ち悪いよぉ。

「その気持ち悪さを乗り越えないと、いつまでたっても仮説思考が身につかないのである。」

(-"-;) ウッ。いや、そうなんだけどさ、でもさ、でもさ・・。

「たとえていえば、牡蠣や納豆といった見てくれの悪い食べ物に似ている。
食べてみるまでとてもこんなものは食えないと思っても、
食べてしまうとこんなにうまいものがあったのかという感覚に近い。」

いや、どちらかというと見てくれはいいんじゃないか?
でも、噛み締めると変な味がするの。

「どうしても私のいうことが信じられないというのなら・・」

い、い、いや、し、信じてますよ~(;´▽`lllA`
バカなこと考えてごめんなさい・・です。