2010/11/20

JSON変換機能、slim3にマージ中

以前のエントリで書いたslim3モデルのJSON変換機能ですが、slim3のコミッターになってマージ中です!

ロードマップはこんな感じ。

1st step (完了).
・modelToJsonメソッドの追加。基礎的な仕組みの実装。
・short, int, long, float, double及びそれらのラッパークラスのJSON出力実装。
・StringのJSON出力実装(cipher=trueを考慮)。
・ラッパークラスとStringのList, Set, SortedSetのJSON出力実装。

2nd step (完了).
・AppEngine固有の型(Blob, Category, Email, GeoPt, IMHandle, Link,
PhoneNumber, PostalAddress, Rating, ShortBlob, Text, UserのJSON出力実装。
・Date, EnumのJSON出力実装。
・上記の型のList, Set, SortedSetのJSON出力実装。

3rd step以降.
・リファクタリング
・ModelRef対応。
・シリアライズ対応(おそらくシリアライズしてBase64)
・アノテーションによる制御の検討(フィールド名のエイリアスとか、JSON変換時は無視するとか)
・jsonToModelメソッド追加(と上記の型の対応)。

実装の途中経過は、適宜slim3のDiscussion Groupでお知らせしてます。

2010/11/09

slim3を改造して、モデルのJSON変換機能を追加する

Google App Engine for Java用のフレームワークと言えばslim3です。シンプルで非常に使いやすいフレームワークですが、その特徴はアノテーションプロセッサとして実装されている、Metaクラスジェネレータ(slim3-gen)にも当てはまります。拡張性が考慮されていて、簡単に機能を拡張することが出来るようになっていて、実際にアノテーションの情報を元にソースを生成するサンプルも公開されています(リポジトリの、slim3-gen-extention-sample)。

そのサンプルを参考に、slim3-genが生成するメタクラスにjson変換を行うメソッドを追加する拡張、slim3-gen-jsonicを作ってみたので、紹介します。

使い方

  1. slim3-gen-jsonicのバイナリを、ここからダウンロードして下さい(現在最新版はslim3-gen-jsonic-1.0.5.jar)。
  2. 次に、jsonicのバイナリをjsonicのサイトからダウンロードして下さい(現在最新版はjsonic-1.2.4.jar)。
slim3と使う場合と同様にプロジェクトを作成、セットアップし(slim3のスタートガイド参照)、jsonicのjarをビルドパスに追加、slim3-genのjar(現在最新はslim3-gen-1.0.5.jar)の代わりにslim3-gen-jsonicのjarを使用すると、モデルごとに生成されるメタクラスに以下のメソッドが追加されます。
  • public String modelToJson(Object model)
  • public ModelClass jsonToModel(String json)
ModelClassは、各モデルのクラスに置き換わります。

modelToJsonでモデルをJSON文字列に変換し、jsonToModelでその逆、JSON文字列をモデルに変換します。jsonToModelは、内部でJSONICを使っています。使い方は簡単、Metaクラスからこれらのメソッドを呼び出すだけです。

public void test(){
  TestModelMeta m = TestModelMeta.get();
  TestModel model = new TestModel();
  String json = m.modelToJson(model); // model -> JSON
  TestModel model2 = m.jsonToModel(json); // JSON -> model
}

対応している型

現在、以下の型に対応しています。
  • String(cipher=trueの場合、JSON出力時に暗号化されます), List<String>, Set<String>, SortedSet<String>
  • short, Short, List<Short>, Set<Short>, SortedSet<Short>
  • int, Integer, List<Integer>, Set<Integer>, SortedSet<Integer>
  • long, Long, List<Long>, Set<Long>, SortedSet<Long>
  • float, Float, List<Float>, Set<Float>, SortedSet<Float>
  • double, Double, List<Double>, Set<Double>, SortedSet<Double>

ソースからのビルド

EclipseとGoogle Plugin for Eclipse、Subversionクライアント(Subclipse or subversive)が必要です。

まず、slim3のリポジトリから、slim3とslim3-genをチェックアウトします。

次に、slim3-gen-jsonicのリポジトリから、slim3-gen-jsonic、slim3-gen-jsonic-testをチェックアウトします。

slim3-gen-jsonicに含まれているbuild.xmlを使ってビルドすると、slim3-gen-jsonicプロジェクトのtargetディレクトリに、jarファイルが生成されます(slim3-genの全クラスもこのjarに含まれています)。

slim3-gen-jsonic-testプロジェクトは、slim3プロジェクトを参照し、slim3-gen-jsonicプロジェクトが生成するjarをannotation processorとして参照しるので、このプロジェクト内にモデルクラスを作成すると、JSON変換機能を簡単に試せます。また、メタクラスはsrc_generatedディレクトリ内に生成されるようになっているので、実際にどんなメソッドが生成されているか確認できます。

jsonic単体と比べた利点

今のところ持っている機能だと、文字列の暗号化対応以外、jsonicそのものを使っても同じ効果が得られます。slim3-genに統合する形で機能を追加していく利点としては、
  • リフレクションを使わないので速い(但しある程度大きなモデルでも、数十ミリ秒の差でしょう)
  • App Engine固有の型に対応しやすい(固有の型には今後対応していく予定です)
というところが挙げられます。まぁ、あまり大きな利点は無いですし、DatastoreのモデルとJSONとしてクライアントに返すデータのモデルが同じものとも限らない(むしろ別々に設計したほうがよさそう)ですが、Metaを使ってモデルを手軽に変換できるだけでも便利なのではないかと思います。

2010/11/08

pos2wit - メールでTwitterを利用できる無料サービス



趣味でpos2witの開発を始めて、気づけばもう1年が経ちました。当初予定していたよりも多くの機能が実装できて、かなり便利に使えるツールになってきました。このスマートフォン全盛の時代、あえてガラケーのみで勝負する人のためのサービスです :-)

pos2witはメールでTwitterを利用出来るサービスです。特に携帯電話のメール機能に最適化してあり、携帯電話のメール機能を使って、Twitterの機能を一通り使うことが出来ます。写真の添付や他のユーザが投稿した写真のサムネイル取得にも対応しています。

ガラケーしか持っていない人、特にメール無料プランを契約している人に最適です(私もガラケーでメール無料プランです!)。通勤途中や休憩時間の暇つぶしなど、ちょっとした時間に是非ご活用ください!

注意事項: pos2witはGoogle App Engine上で動作しており、Twitterにアクセスします。そのため、App EngineのメンテナンスやTwitterのAPI制限に影響され、機能が正常に使えないことがあります。多くの機能は失敗することは殆どありませんが、検索については、TwitterのAPI制限のため、一定時間使えない状態になっていることがあります。そのため、検索結果の受信には、数分から数時間かかることがあります。

ユーザ登録


ユーザ登録は、PCからの登録(oAuth)と、メール経由の登録(xAuth)の2種類に対応しています。

PCから登録する場合、www.pos2wit.comにある、"Signin with Twitter"と書かれたボタンをクリックしてください。Twitterアカウントへのアクセスを許可する画面が表示されます。"許可する"を選ぶと、ユーザ登録が完了しますので、利用するメールアドレスを登録してください。登録後送られる確認メールに返信すると、メールが登録され、pos2witが利用出来るようになります。

メール経由で登録する場合、1行目にTwitterのIDを、2行目にパスワードを書いたメールを、reg@pos2wit.com に送信してください。ユーザ登録とメール登録が一度に行われ、pos2witが利用出来るようになります。(このとき送られたID, パスワードは、Twitterへのアクセス情報の取得にのみ使われ、取得後破棄されます。pos2wit登録後にパスワードを変更しても、動作に問題はありません。)

※迷惑メールフィルタを利用されている場合、pos2wit.comから送信されるメールを受信できるように設定しておいてください。


投稿機能


内容にTwitterに投稿したいツイートを記入して p@pos2wit.com にメールを送ると、Twitterに書き込むことが出来ます(件名は無視されます)。この際、写真が添付されていると、TwitPicに写真が投稿され、URLがツイートの末尾に付加されます。投稿先の画像サービスは、PCから pos2wit にログインした際に表示される、ダッシュボード画面で変更できます。

また、画像を投稿する際に、回転や反転などのフィルターを適用できます。件名にrlで左回転、rrで右回転を行ないます(このエントリ末尾に詳細)。


タイムライン取得


h@pos2wit.com に空メールを送ると、ホームタイムラインが取得できます。メールの受信可能サイズ制限のため、通常取得できるツイートは10〜20件程度です。sh@pos2wit.com に空メールを送ると、装飾のほとんどない、簡易フォーマットでホームタイムラインが取得できます。この場合、40〜50件程度のツイートが取得できます。

ユーザのタイムラインやステータス、お気に入り、リツイート、返信、ハッシュタグの検索、画像のサムネイル取得、イベント概要(ATND, TweetVite)取得、グルーポン概要取得など、ホームタイムラインの結果には様々な操作を行うためのメールアドレスへのリンクが貼られます。これはツイートの内容を解析することで実現されていて、短縮URLも展開して解析しています。


発表(App Engine Java Night Kansai #3)


先月京都リサーチパークで行われたAJNK3で発表しました! ustと資料はこちらからどうぞ(途中までだけど)
また、AJNK3では、slim3のひがやすをさん、teamsteamのpirosukeさんも発表されています。

各種機能の詳細

画像投稿先として対応しているサービス
  • twitpic
  • twitgoo
  • plixi
  • yfrog
  • img.ly
  • picasa
画像投稿時のフィルタ(件名に記入)
  • rl - 左回転(90℃)
  • rr - 右回転(90℃)
  • rp - 半回転(180℃)
  • fh - 上下反転
  • fv - 左右反転
  • ifh - 自動輝度調整
  • sNN - 縮小(例: s30 - 30%に縮小)
サムネイル取得に対応しているサービス
  • twitpic
  • twitgoo
  • plixi
  • yfrog
  • flickr
  • brizzly
  • owly
  • 携帯百景
  • mobypic