Seasar Conference 2009 White 参加 (3/14)

Seasar Conference 2009 White - Session

Wicket > TDD > buri > 勉強法 のセッション受講。

Wicketシステム開発の現場 id:t_yano さん

もしかしたら、仕事でフレームワーク決めの所から関われるようになるかも、という境遇のため、採用するにあたっての注意点などを期待して参加。
コードでWicketを説明というわけではなく(そちらを期待したひとも多かったと思うけど、それは書籍を買えばよいということで。出版おめでとうございます!)、このセッションでは Wicket の魅了や導入にあたっての障壁、ドワンゴさんでの事例などが紹介された。
特に導入にあたっての「心理的な壁」については心に突き刺さるものがあって、

  • いままでのところに踏みとどまるのもリスク
  • むしろ「どこに進むか」を考えるべき
  • やったことないことはやらない = 今まで出来たことしか出来ない

は、ものすごく強いメッセージだった。

また、Wicketは、

  • 「やれること」のベースラインが底上げされて、発想自体が変わる。
  • 「うざったい」と思った時に、それを解決するチャンスを提供してくれる。

フレームワークということで、ものすごい可能性を感じる。ぜひお仕事で使ってみたい。
でも一方で、どこまでやれるのか、その実現方法にどんなものがあるのか、という点がわかりにくくも感じるので、これはもう勉強するしか。

オープンソース徹底活用WicketによるWebアプリケーション開発

オープンソース徹底活用WicketによるWebアプリケーション開発

テスト駆動開発のこころ (TDD はじめの一歩) id:t-wada さん

TDDセッションは、以前に受けた事があるけれど、新しい要素がわかりやすく追加されていてすごい。

  • 老人力
    • 忘れてもだいじょうぶ。テストが覚えているから。
  • ジャグリング
    • 宙に浮いている不安なものは、なるべく少なく。

など、新鮮な発見でした。

最近は、何かソースの質問をされた時にテストコードで答えるようにしていて、ちょっと成果が出てきています。未来の自分も、きっと今の自分にソースの質問をしたくなる(または不安が生じる)はずで、なるほど「テストは人の為ならず」だなぁ。

テストの単位についても言及があり、

  • 1クラス1テスト、1メソッド1テストにこだわらなくてもいいのでは
  • 状況を単位にすると良いかもしれない

とのことで、確かに既存コードを人に説明する場合は「状況」が頭にあります(こんなときどうなるの?など)。その切り口の方が、いわゆるレガシー対応としても合っていると思いました。

参考書籍の中で達人プログラマー(白)(asin:475614599X)は持ってないなぁと思ってメモしていたら、kawanishiさんが、「それ品薄なので、見かけたら即買いですよ!」と勧めてくれた。
実際すぐにamazon見てみたら「1点在庫あり。ご注文はお早めに。」となっていて、これは即買わねばと思ってポチっとしてつい先ほど届いたのだけど、試しに今みてみたら依然「1点在庫あり。ご注文はお早めに。」のまま。むむ?

45分で分かるBuri/escafeFlow入門 id:imai78 さん

Buriがどこにフォーカスしているのかが中心に説明され、とてもわかりやすいセッションだった。すごい。
Buriについての説明がわかりやすかっただけでなく、コミッタの思想を深く理解しているのもすごいと思った。

  • 「使われる業務」をシステムの都合で捻じ曲げてはならない。

は名言だと思う。

差のつく勉強法200 - 35歳定年説を乗り越えるために何をすればいいか きしださん

  • 35歳定年説
    • ついていけなくなる
    • 稼げなくなる
    • 飽きた(!?!?!?)
      • ひととおりやった感
      • 同じようなプログラムばっかり

これを乗り越えるには

  • 自分の価値をあげる(価値が上がってないから同じのばっかり)
  • プログラムのおもしろさを知る
  • いろいろ作れるようになる

つまり

ちゃんと勉強する

ちゃんと、というのは

  • 情報系の大学でやっているような基礎を
  • 使っている道具についてはちゃんと使えるようになりましょう
    • 道具:言語,DB,UI,ネットワークなど
  • 知る事が増えれば増えるほど、知らない事が増えていく


35歳までにやるべきことがいっぱい・・・!

おわりに

とてもすばらしく、為になるイベントでした。
全然Seasarに閉じていないのも、とても良いと思いました。

講師の皆様、スタッフの皆様、ありがとうございました。

JSF(MyFaces)で、JSPを複数のBeanで共有する

JSFは、JSPの中に

<h:inputText id="name" value="#{someBean.name}"/>

みたいに書きます。
普通に使っているぶんには問題ないのですが、例えばひとつの JSP を複数の managed-bean で共有したい場合、このままでは出来ません。
上記でいうところの「someBean」に対応するクラスが、ひとつしか設定できないからです。(Teedaとかですと、htmlの id と bean のプロパティ名が関連付くみたいなので問題ない。きっと。)



そういう場合、TomahawkのaliasBeanを使用するとうまくいきます。


ドキュメントからサンプルソースを抜粋

<t:aliasBean alias="#{holder}" value="#{aliasTest1}" >
    <f:subview id="simulatedIncludedSubform1">
        <h:outputLabel for="name" value="Name:"/>
        <h:inputText id="name" value="#{holder.name}"/>
    </f:subview>   
</t:aliasBean>

aliasBean を使うと、alias で一時変数名を定義して、そこにバインドする bean を外側から変えることができます。
※上記サンプルでは、aliasBean タグの中の holder が参照する managed-bean は、aliasTest1 。


各 managed-bean に対してひとつ JSP を作成して、その JSP から、共有したい JSP を aliasBean タグの中に include するようにすれば、JSPの共有が可能です。


こんな感じ

// JSP 1 で
<t:aliasBean alias="#{holder}" value="#{aliasTest1}" >
    <%@ include file="share.jsp" %>
</t:aliasBean>

// JSP 2 で
<t:aliasBean alias="#{holder}" value="#{aliasTest2}" >
    <%@ include file="share.jsp" %>
</t:aliasBean>


今、JSFを使っている人ってどれくらいいらっしゃるのだろう。。。

※初めてSKKを使って日本語を書いた!

The Art of Unit Testing の 表紙

すごい。

The Art of Unit Testing: With Examples in .net

The Art of Unit Testing: With Examples in .net


Chapter.9 に、
http://www.artofunittesting.com/Chapters/Working_with_legacy_code
というのがあって、とても気になる。。

デブサミ2009 2日目(2/13)

あふれんばかりにたくさんの収穫があった。

Hudson によるインクリメンタルな開発 李剰熙さん

Hudsonは、昨年のクロスコミュニティカンファレンスからずっと気になっているツール。
CI導入にあたって挙げられた注意点がとても心に突き刺さった。(特に2つ目)

  • 犯人探しをしない
  • 導入だけで満足しない
  • エラーを放置しない

Gitもプラグインで対応。Gitとあわせてチャレンジしたいところ。
Trac Lightning(http://sourceforge.jp/projects/traclight/wiki/FrontPage)を使うと、Hudson入りで簡単に環境構築できるらしい。

「レガシーコード」とはいったい!? 読書会コアメンバ

自分も参加している読書会から、コアなメンバが登壇。
会場を見回すと、読書会メンバがちらほら。自分はid:tenkomaさんの隣でドキドキしながら聴講。

レガシーコードとは何か?という基本のところから、デブセン(デベロッパーズ川柳)をまじえた目次紹介まで、予想以上に盛りだくさんだった。
お客さんもほぼ満席、かつ、幅広い年齢層という盛況ぶりで、壇上からの問いかけや主張に、良い反応を示していたと思う。


特に

これまで私たちは、レガシーコードについて語る言葉を持っていませんでした。
でもこれからは違います。語る言葉ができたのです!(この本によって!!!)

これはとても印象的だった。かっこよかった。
きっと、日本語訳の本がたくさん売れるに違いない。WEwLC日本語訳本のタイトルや発売日、書影があれば、もっとインパクト強かっただろうなぁ。この点だけは残念。皆さんが忘れないうちに発売されることを、切に願う。

テストを行うこと、テストを続けること

和装コスのid:t-wadaさんが、関さんから色々、ほんとに色々引き出す濃密で重厚な空間。
何はともあれ
デブサミ2009:アート・オブ・アジャイル デベロップメント〜テストが駆動するビジネス価値〜, 『アジャイルな見積りと計画づくり』訳者サイン会, デブサミ2009:パネルディスカッション:テストを行うこと、テストを続けること - 角谷HTML化計画(2009-02-13)
を。人生観変わると思う。


実際、隣にいらっしゃったid:goyokiさんは、境遇が似ているということもあり、関さんが発言する度に身を乗り出して聞いていた。あ、彼は今まさに人生の転機を迎えているんだな、と(まことに勝手ながら)感じてしまったほど。とにかくすばらしかった。


改めて、デブサミってすごいなと思った。
今まではひとりで参加していたけど、読書会を通じてイベント仲間ができた。これもすごい。
「つなぐ、つながる、そして未来へ」という今年のフレーズが本当にぐっとくるイベントだった。
来年も、是非参加したい。

打ち上げ

いつもよりお酒をたくさん飲んでしまって、ちょっと記憶が曖昧...。
デジタル一眼について、ものすごく話し込んだと思う。長らく使っている人、そして、つくっている人の発言はすごく参考になる。sony,pentax,panasonic,cannonで迷い中。迷ったからって、家庭内稟議がそう簡単に通るわけでもない。子ども用グッズなども持ち歩く都合、大きさや重さという、あまりに現実的な理由でpanasonicが一歩リード。(リード=稟議が通りやすいということ)

デブサミ2009初日

雅叙園への入り方がいつもと違って、警備員さんに怒られる。

ついて早速、家庭内稟議が通っている分の本をまとめ買い。
予想外なことにサイン会が開かれたので、もちろん並んでいただいてきました。


サインしてもらうと、俄然読む気になります(積読せず、すぐ読み始める)。
10%OFFで買えることをみこして、amazon断ちしたかいがありました。


Rubyはこれからやってみようと思っているところなので、大変良い出だしぶり。
角谷さんは、以前クロスコミュニティカンファレンスでもサインをいただいたことを覚えていて下さいました。あの時空を超えた電波の熱いセッション後だったこともあり、ひどく感動。「今回は自腹ですね!」と、温かい突っ込みもいただきました。恐縮です。(「現場開発者の習慣」本も買いました!)
やっとむさんには、自分が某社新人の頃からお世話になっていて、今日久しぶりにお会いしました。おぉ。この安井さんは、あの安井さんなのかと、サイン会場でちょっとびっくり。髭がカッコ良かったです。


以下、セッションで心に残ったことなど。

時を超えたプログラミングの道への道 角谷さん

セッション中は、その電波(?)と情報量にビリビリしてしまった。いま改めて資料


http://www.slideshare.net/kakutani/way-to-timeless-way-of-programming?type=powerpoint


を見てみると、スライド最後の一文「Social Change starts with you.」への道が示されている(のだと思う)。
情報がいっぱい詰まっていて、きちんと本を読まないと本当の理解はできない気がする。けど、いいのだ。今はそのフォースを感じて、できるところからやっていこう。と、思った。亡びないために。

ブラウザJavaScript高速化JITバトル最終決戦 森田さん

ベンチマーク的な数値で様々な角度からブラウザを検証する、血みどろの戦いを予想していたのだけど、そうではなかった。各実装(Chrome,Firefox,Safari)がどんなアプローチ(実装や買収やパク(ry))で高速化を図っているかを知り、ブラウザ決戦をより楽しもうという話。
こうすれば高速になるよーとか、そういう実務的な話でもなく、徹頭徹尾「観戦の仕方」。
こういう角度でブラウザを見た事が無かったため、とても新鮮。
ただ、このセッションで得た知識を仕事に役だてることは、きっと相当難しい。(お仕事で中心にせざるを得ないIEは論外と言われてしまったし)

オブジェクト指向エクササイズのススメ 菅野さん/大村さん

正直なところ、自分がオブジェクト脳なのかよくわからない。ので、とても楽しみにしていたセッション。
セッション中で紹介されたエクササイズによる制約は

  • 1メソッド1インデント
  • プリミティブ型と文字列はラップする
  • ファーストクラスコレクションを使用する
  • 名前を省略しない
  • else句は使わない
  • すべてのエンティティ(要素)を小さく
  • 1行につき1ドットまで
  • getter/setter,プロパティを使用しない
  • 1クラスにつきインスタンス変数は2つまで

正直、きつい。ただし、これらを守ろうと考えに考えてた結果、さまざまな発見や工夫が生まれる。
この、制約から生まれる様々な発見という点は、なるほどなぁ。
自分の脳がこの制約を満たせているかというと…これからも精進しますとしか言えない。
全部は無理としても、これから心に留めてコードを書こう。納得のいく制約は大事だ。

株式会社はてなの開発戦略 舘野さん

gitの熱いはなし。
移行するきっかけや、メリット/デメリットを、はてなさんの切実な観点から。


ローカルにリポジトリがあって、気軽にコミットできるというのは大変魅力的で、
「リリース作業が大変なので、今はコミットしないで下さい!」と言われてしまうような境遇においては、特に生死にかかわる問題。eclipseのローカルヒストリに助けられたこと数知れず。


また、gitはブランチが超高速に作れるという点が強調されていた。
ブランチは敷居が高いと思っていたけど、gitでは色々と便利な事ができそうだとわかったので、来週あたりから早速ギットギトになってみよう。うちにはWindows機しかないけれど、めげずにやってみよう。

IT系技術者のLT会with家族 いってきた

息子どの発熱のため、単独でいってきました。(つまりwithout家族)
http://cotocoto.jp/event/29161


他の参加者の方々は、夫婦+子での参加。
なかなかこんな場ってないと思うので、やっぱ子供つれていきたかったなぁ。


それにしても、4歳とかって、戦隊もの仮面ライダーなのか。
もう、その辺は全然ついていけなかった。戦隊ものカーレンジャー以来見てないし。
ただ、子たちのパワーはすさまじく、Kidsのキメる変身ポーズは本当にかっこよかったなぁ。


LTは・・・予想通り子供による愛の妨害を受けつつ、なんとかかんとかやった感じ。
話が途切れても盛り返せる内容(スピード感が必要ないもの)でないと厳しいかな。


とてもとてもアットホームな会になって、楽しかったです。


主催して下さったid:kano-eさん、ありがとうございました。


衝撃的な携帯電話と、可哀そうなかっこのウルトラマンを激写しましたので貼り付け。



HibernateのEntityクラスからテーブル情報を逆引きする

何の因果かタイトルのような必要にせまられましたので、調べた結果などを書いておきます。
ググってもなかなかこれというのに出会えず、Hibernateのソースを見たりして調べました。
Hibernateのバージョンは3。試しに作ってみたのは以下のようなソースです。

public class Test {

    public static void main(String[] args) {
        Test me = new Test();
        Table table = me.getTable(SomeEntity.class);
        System.out.println(table.getName());
    }
    
    public Table getTable(Class<?> clazz) {
        Configuration config =
                new Configuration().configure("hibernate.cfg.xml");
        PersistentClass classMapping = 
                config.getClassMapping(clazz.getName());
        return classMapping.getTable();
    }
}

Hibernateの設定ファイルを喰わせた Configuration から、クラス名(設定ファイルに記述してあるEntityクラス)指定で PersistentClass を取得します。
この PersistentClass から getTable() すると返ってくる Table に、テーブル名やカラム名が入っているので、あとはご随意に。