( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

BPStudy #12に参加してきました。

Be-Proudさんで定期的に実施されている勉強会HOME | 株式会社ビープラウドに参加してきました!


会の趣旨として、MCがネタを提供するので好きに発言してねって感じなので、
遠慮なく質問しまくってました。


今回のねたは、Seasar2上の薄いWebフレームワークCubbyとGEARSでした。


Cubbyは、薄いフレームワークであり、実装の自由度が高いことが特徴。

規模の大きなプロジェクトでは、アーキテクチャをガチガチに縛るようなスタイルで使うものではなく、

小規模のプロジェクトをすばやく柔軟に立ち上げるような使い方が向いてるのかな、と感じました。


GEARS(Google Gears)については、HTML5を絡めた今後の方向性とかの話が面白かったです。
GEARSは、オフラインアプリに対応するだけのプラグインではなく、
ブラウザにキャッシュとストレージを提供するインフラなのだと感じました。

よって、サーバ側がなくて、GearsとJavascriptだけで作られたアプリケーションなんかも、面白いんじゃないかと思いました。

懇親会では、関数型言語の実用性とかものすごく脂っこい話で盛り上がって面白かったです。

次回も、ぜひ参加したいと思います。


以下はいつものとおりメモ。()内は俺の所感です。

Cubby

Cubbyの紹介

  • strutsはURLがダメ
  • struts.configがでけえ
  • validatorも設定ファイルかよ。
  • 規模がでけえともう無理ぽ

Cubbyの感想

  • Actionの設定ファイルがない
    • すっきり
  • URLはアノテーションでやる
    • SEO対策もバチーリ
  • validatorも設定いらず楽ちん
CubbyのAction
  • Action名 = クラス名となる
    • (SAStrutsっぽい)
    • URL = actionName/methodName
  • アノテーション @path("パス")でURLを設定できる
    • ActionおよびMethodに設定できる。
    • 正規表現もパス指定に使える
    • (Param名,正規表現)でURLの中からパラメータを切り出せる
    • (Railsみたいなrouting hellになりそう)
  • カスタムタグに名前を付けられる。

あえてアノテーションで指定する意味は?

  • SEO対策を考えるとクエリパラメータに指定するのはヤ。
  • RESTFULでいきたい

GET?POSTは区別できる?

パスがかぶったら?

  • 起動時にチェックする
  • ログに一覧がでる。

public fieldを使ってるのはなぜ?

  • S2のインジェクションとかのため。
Validation
  • @validtion(rule="ルール名",errorpage="エラーで飛ぶjsp")
  • ValidationRulesクラスでチェックルール作る
  • ValidationRules#initialize()を@OverrdeしてHogehogeValidatorをnewしてadd
add("lastname",new RequiredValidator(),new MaxLengthValidator(120) );


自前で作れる?

  • 割と簡単
  • 複数項目関連チェックは?
    • 自分で書く。自由度は高い。

エラーページに飛ぶときにリクエストパラメータとかを引き継げる?

  • 基本的にはforwardする。
  • Inputタグはカスタムタグなので、そこで見れる。

tokenとかで2重登録チェックもできる。

エラーのとび先(index.jsp)とかでなんかロジックを記述したい

  • ValidationRule#failを@overrideすると、エラーのときに
  • ほげほげすることができる。
  • ってか何でもできる。

エラーの回数を覚えておいて処理できる?

  • Sessionに覚えておいて自分でやる

エラーメッセージはプロパティファイルに項目名.ルール名で定義する。

  • maxlengthValidatorとかだったら第2引数にメッセージキーを指定できる。

エラーメッセージの出力場所は?

  • まとめて出しても項目の横に出してもよい。
  • mapから取り出しているだけ。
カスタムタグ

org.seasar.cubbt.tags

  • フォームの定義
  • sturtsタグよりHTMLタグに近いところを目指す。
  • カスタムタグのDYnamicAttributeで好きな属性をかける。

ループはJSTLとか?

  • あまりタグを増やしたくない

Actionの戻り値で、Forward,Redirect,Jsonとかのクラスでレスポンスの挙動を変えることができる。
DirectResponseを使うと直接HtpRespnseをいじれる。

もうすぐ新しいリリースがある

  • 携帯サイト構築から、URL埋め込みのcokkieに対応
  • Requestparameterにアノテーションを指定しないとバインドしないようにする
    • セキュリティ的に問題がある。適当なパラメータがくると困る。DI用のプロパティを上書きされたり。
  • HttpStatuscodeを返す機能も追加。
  • 互換背は亡くなる

JSONを返すのも簡単に返せる。

  • youtubeみたいなコメント投稿とか

設計上の注意点

  • Actionになんでもつめれる
  • URLの設計ははちゃんとやる!
    • URLがActionの単位となる。

s2jdbc
トランザクションの設定は?

  • s2のAOPで。

例外発生時は?
(ExceptionHandler的なものはないの?)

  • AOPでexception intercepterとかでやるべ

Cubbyも将来的にはSeasar依存じゃないようにしたい。

サポートはメーリングリストで!

SASturtsとの違いは?

  • 目指しているところは同じだと思う。

新しい機能

  • submitボタンに名前付けてディスパッチできるようになる
  • @Pathの適用順を指定できるようになる
  • sampleでtwitter cloneがあるのでそのうち公開されるかも

Mayaaとも使える

  • forwardしているだけ

(-velocityとかでもいけそう)

  • デザイナと協業するときにはMayaaを使ってる
    • デバッグがしにくかった
    • 分業するためのもの

@アノテーションベースの利点

  • XMLベースで書くと固くなる
  • アノテーションだと分散してるので把握しにくい
  • 次のバージョンからWeb上で一覧がみれるようにしようと思ってる

HotDeployは対応してる?

  • 組み合わせによって
  • Hibernateとかは無理

(-Jrubinusに期待)
(-Jettyだったらいける)

実運用だとどんなコンテナが多い?

まとめ
  • URLがきれいにできる
  • 業務アプリケーションよりこみゅにとかサービスを作るのに向いてる。

Google Gears

InfoQの記事がベース

GEARSって?

  • Webアプリのオフライン化をするブラウザプラグイン
  • IEとFrefox safafiはまだよ
  • FlashPlayerみたいな
  • オフラインアプリ用のJavascriptAPIが利用可能
  1. GearsのAPIを含んだjavascriptコードをwebページに埋め込む
  2. クライアントがWebページをブラウズ

Geasの3大機能

  1. ローカルサーバ
  2. ローカルデータベース
  3. ワーカプール
ローカルサーバ

web上のリソースをローカルにキャッシュ

  • オフラインでもページが見れる
  • 実態はURLをキーとしたファイルキャッシュ
  • ローカルキャッシュとサーバキャッシュを同期する
  • 自動更新機能 ManagedResourcesStore)となしの(ResourceStore)の2種類
  • JavaScriptからXHRとかで通信すると?
    • エラーとなる。
    • URLをキーとしてファイルをキャッシュしているので、ブラウザの動作を横取りしてキャッシュを返すのでいけそう
  • Gmaiとかは?
  • (キャッシュの生存期間は?)
ローカルデータベース

Gears組み込みのRDBMS(SQLite)

  • JavaScriptSQL!
  • オフラインでも更新するアプリはこれがないと実装できない。
    • オフライン時に行った更新動作をローカルDBにストア
ワーカプール
  • Javascriptで大規模な処理を行うとブラウザがフリーズしかねない
  • バックグラウンドタスクを実現できる機能
  • ワーカはスレッドではなくプロセスに近い
    • ブラウザのプロセスとは別?
    • 別では?
  • バックグラウンドのワーカはDOMにアクセスできない
  • ワーカ同紙はメッセージんぐで対話できる

ワーカの生存サイクルは?

  • ページ遷移するとJavascriptのコンテキストが変わるのでワーカも死ぬ
オフラインアプリのアーキテクチャ

モーダル

  • Google readerなど。
  • オンオフのモードを切り替えることができる(ユーザが切り替える)
    • メリット
      • 作るのは楽。オンライン時の動作は変わらない)
    • デメリット
      • ユーザが切り替える必要がある

Google readerのデモ

  • 一番最初にGEARA対応した(英語版)
  • 同期をとる操作はワーカプールで実装されている。
  • e-mobile抜いても見れるよ
  • 画面遷移がないAjaxアプリケーション向け
  • スターとかオフラインでつけることができる

モードレス

  • Googe Docs(英語)
  • ユーザはネットワークの状態を気にしない
  • いつでもローカルDBに書き込み、任意のタイミングでサーバと同期
  • googledocsなんかはポーリングしてる
  • オフライン時に保存しようとするとgoogledocsがオフラインに切り替える
    • メリット
      • ユーザにとって使い勝手がよい。ネットワークの状態に依存しない。
      • パフォーマンスもよくなることが多い
    • デメリット
      • 実装がめさ大変

質問とか

  • Webアプリでのオプティミスティックロックがこれで変わるかも
  • DojoがGears用のAPIを提供してる
  • Javascriptでのdiffライブラリってあるの?あったら便利そう。
  • 更新しようとするリソースが他の人の更新と競合した場合は?
    • アーキテクチャとしてがんばる。
    • フォームデータのマージについては見せ方を考える必要がある。

ブラウザを閉じたとしてもSQLiteに保存しているので使える
Remember the Milkでデスクトップにショートカットを作れる。

ローカルDBがクラッシュすることは?

  • そんなにはない

Webページをロードした時にTableをCreateしなければならない。
スキーマがVersionUpした場合、バックグラウンドでMigrationしなければならない。

Googleがとれた

オフライン機能のみではない

  • HTML5が登場
    • HTMLはオフライン機能を搭載していて競合する

GEARSはHTML5の実相+独自機能のプラグイン

  • Blob API
    • Gearsでバイナリを扱うAPI
  • Audio API
    • HTMLAUdioElementを元にしたAPI
  • Database2 API
    • HTML5ベースに実装
  • FIleSYstemAPI
    • 拡張されたファイルアップロード。複数選択やフィルタ
  • HtpRequestの機能拡張
    • Comet
    • Gzip
    • クロスドメイン
    • 同時接続数2
    • バイナリ送信
    • イベントハンドら
  • ImagingPAI
    • 画像捜査用のAPI。画面表示画像をいじれる。サム練り
  • Location
    • 位置情報
  • Notification API
    • ユーザに対して通知するバルーンとか

(ローカルでのSVNってかWebアプリ版SVKとかできそう)

ORMあるの?

  • ある。GEARS ORM。
  • ARパターンで

開発環境は?

  • エディタで
  • データベースブラウザは付属している。
  • Firebugで。

SQLiteはフル機能使える?

  • ちょっとだけ。プラグまの設定とかAtacchDBってコマンドが使えないくらい

同期をとるときにサーバに送るデータはなんかフォーマットあるの?Json XML?

  • 特に決まってない。

GEARSのDBのAPIは非同期。callback関数を渡す。