第3回Seasar勉強会 in Sendaiに参加してきました

久々の勉強会でしたが非常に楽しかった^^


運営スタッフの皆様、本当にお疲れさまでした。
第4回が有ったら是非参加したいと思います。


MacBookでメモ取りながら話を聞いていたので簡単にまとめます。
(間違ってる所、有ったらごめんなさい><)

Slim3 for Google App Engine/Java id:higayasuo

Slim3 for GAE/J について、ブログアプリケーションをTDDで開発する所のデモを交えながら説明してもらいました。GAE/Jのアカウント作って後で試してみたいと思います。

  • ・TDDのについて

TDDで大事な事は『自分が何を作るのかを明確にして作る』、『それが正しい動きをするのか検証する』という事を小さい単位で繰り返すこと。

  • Slim3 for GAE/Jについて
    • ホットデプロイ→ホットリローディング
    • ・antのタスク(gen-contoroler)でコントローラを作成出来る(テストクラス、JSPも同時に生成される)
    • ・gen-contorolerを実行するとインプットボックスが表示されるのでコンテキストからのURLを入力する
    • ・テストで使える豊富なライブラリがある(JDOContoroler?とか...)
    • ・contoroler.run()→strutsのexecute()
    • ・modelパッケージに永続化するモデルクラスを配置すると良い(GAEのエンハンサーが永続化の対象にしてくれる)
    • BigTableはJDO、JPA両方使えるがJDOの方がおすすめ
    • ・JDOはデータストアを気にしない(xmlでもBigTabelでも)
    • ・モデルのキーはLogn、String、Keyオブジェクトで定義する。
    • ・makePersitentTx(entity)で永続化する
    • ・永続化されたオブジェクトをJSPで参照すると『ObjectManagerがクローズされてません』とExceptionがスローされる(JSPでモデルを参照したい場合はMapに詰め直して参照する)
    • Eclipse上で保存されたときにモデルのメタクラスが自動で作成される。(EclipseのAPTという機能らしい。メタクラスを作るのはSlim3の機能)
    • メタクラスはデータアクセスする際に使用する
    • クラウド上にデプロイするのは簡単

SAStrutsのハンズオン

Twitterもどきを作ろうということで、4人1グループで実践を行いました。
慣れないMacBookに悪戦苦闘でした。


資料からコピー&ペーストでアプリケーションが作れるようになってたので、資料が良くできていたなぁと思いました。

ライトニングトーク

DataSpaiderについて id:zoom1

DataSpaiderというデータ移行なんかのときに使用するツール。GUIの画面でデータ移行支援してくれる。画面がYahoo Pipesに似ているなと思った。

IntelliJ IDEAについて id:masanobuimai

IntelliJ IDEA Java統合開発環境。プロジェクトの起動がかなり遅い(ソースのインデックスを作成しているらしい)。viが使える。SQLの補完ができる(S2JDBCいらず 笑)。IntelliJ IDEAのTシャツ。

懇親会&まとめ

会社の垣根を越えていろいろな話ができました。


他の会社さんではどういう形でテストしてるのかなってのが気になってて、聞いてみたらSeleiumは良いという話が聞けたので試してみようと思います。


本当楽しかった^^

次はSeasar Conference 2009 Spring - トップページ

やっと届いた

コーネリアスかっこいい。

日付とタイムゾーン

以前書いた、TimeZoneを考慮した日付のフォーマット - suusuke@Hatenaで、タイムゾーンを"GMT"に指定しているのに Calendar#getTime() をコンソールに出力すると"JST"が表示されるっていうなぞ?が解決した。


そもそも、Dateにタイムゾーンは無いみたいだ。動作環境のタイムゾーンに依存するみたい。


2007-06-14をみて理解できた。

// タイムゾーンの違う2つのカレンダーを作成。
Calendar utc = Calendar.getInstance( TimeZone.getTimeZone( "UTC" ) );
Calendar jst = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );

System.out.println( "\n各カレンダーのタイムゾーン" );
System.out.println( "  utc: " + utc.getTimeZone() );
System.out.println( "  jst: " + jst.getTimeZone() );

// タイムゾーンに関係なく、現在の「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」は一定。
System.out.println( "\n現在時刻の「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」" );
System.out.println( "  utc: " + utc.getTime().getTime() );
System.out.println( "  jst: " + jst.getTime().getTime() );


// 日付を設定
utc.set( 2007, 5, 5, 0, 0, 0 );
jst.set( 2007, 5, 5, 0, 0, 0 );

// 2007-06-05 00:00:00 の「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」
// は「2007-06-05 00:00:00」を解析するカレンダーのタイムゾーンに左右される。
System.out.println( "\n設定した日時の「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」" );
System.out.println( "  utc: " + utc.getTime().getTime() );
System.out.println( "  jst: " + jst.getTime().getTime() );

java.util.Calendarは使いにくいなぁ。それに比べて、org.joda.time.DateTimeは使いやすい。