java
軽量なJSONシリアライザ Jsonizer 0.9.2 をリリースしました。Java6上で動作します。あらかじめテンプレートを定義しておき、オブジェクトに対してテンプレートを再帰的に適用してシリアライズするのが特徴です。以前は Object.getClass() に厳密に合致する…
Google App Engine上で動く 形態素解析ライブラリ Gomoku が公開されています。jarに日本語辞書が含まれているため、jarを追加するだけで動作します。早速ですが、Twitterのタイムラインを分かち書きにするページを作ってみました。サーバサイドの形態素解析…
前のエントリで id:kissrobber さんにコメントを頂きました。 Datastoreのスプリット処理ですが、"__scatter__"プロパティを使ってバラす方法もありますよ。 http://goo.gl/gNeh4 が参考になるかと思います。 App Engineで動く並列処理フレームワーク ElShar…
App Engineで大量のデータを並列処理するフレームワーク ElShard を作っています。batch addとdeleteのサンプルができたので、とりあえずまとめてみます。ElShardは、入力リストを分割して処理して集約する考え方に基づいています。並列処理はApp EngineのTa…
App Engineでは実行時間に制限があるため、長時間にわたる処理を行う場合は複数のタスクに分割する必要があります。この手法は一般にタスクチェーンと呼ばれています(たぶん)。タスクチェーンを抽象化してフレームワークにできるか考えてみました。タスク…
App Engine上で大量のエンティティを処理するパターンをまとめてみました。 Concurrent Pattern 対象のエンティティをシャードに分割し、それぞれを並列に処理するパターンです。シャーディングを行うSplitterとエンティティを処理するMapperが並行して動き…
以前に 大量のエンティティを処理するデザインパターン - GeekFactory を紹介しましたが、シングルスレッドのバッチ処理なのでスループットが頭打ちになる問題がありました。コンカレントに処理する方法を思いついたので実装してみました。シングルスレッド…
appengine-mapreduce-javaで並列度が上がらないから変だと思っていたら、ユーザガイドに以下の記述がありました。 Sharding is currently done by splitting the space of keys lexicographically. For instance, suppose you have the keys 'a', 'ab', 'ac'…
web.xml で security-constraint を記述すると、指定したURLパターンについてOpenID Providerによる認証が有効になります。認可の設定は role-name で指定します。 role-name=* すべてのユーザに対してアクセスを許可します。アプリケーションでは User#getF…
データストアで時系列データをカレンダー表示したい場合、どのような設計が最適でしょうか。下記のモデル(Event)を考えます。 プロパティ 型 説明 key com.google.appengine.api.datastore.Key キー(userId/time) userId java.lang.String ユーザID time…
App Engine上のアプリでは利用者の体感待ち時間を短くするため、JSPを使わずにAjaxで実装することがあります。この方法はOpenID認証(Federated Login)でも有効です。web.xmlのsecurity-constraintで認証をチェックする方法を以前紹介しましたが、この方法…
Google App Engineに最適化したJSONライブラリ Jsonizer のバージョン0.9をリリースしました。以前のエントリで開発中と書きましたが、仕様が安定してきたので公開します。Slim3と組み合わせて使う場合は以下のようになります。タイプセーフなプロパティマッ…
Google App Engineに最適化したJSONライブラリを作っています。依存クラスが少なく、リフレクションを使わないので、高いパフォーマンスが期待できます。使い方はこんな感じ。 public class EventlogController extends Controller { @Override public Navig…
いわゆる流れるインタフェースでJSONレスポンスを返す仕組みを実装してみました。Slim3じゃなくても使えそうです。 public class EventlogController extends Controller { private final EventService eventService = new EventService(); @Override public…
調べてみました。App Engineで利用可能なタイムゾーン よく調べてみるとApp EngineとSun JDKでタイムゾーンが微妙に異なるようです。 アルゼンチン時間 App Engine = GMT-03:00 Sun JDK = GMT-03:00, GMT-04:00 アルゼンチン時間は GMT-03:00 が正しいはず。…
データストアにある大量のエンティティを処理したい場合、クエリ結果を複数のタスクに分散して処理する必要があります。クエリ結果のカーソルを次のタスクに引き継ぐパターンをテンプレート化してみました。基本的な流れはこんな感じ。 タスクが実行される。…
長時間にわたる処理は、App Engineの最大実行時間である30秒ごとに分割する必要があります。大量のエンティティを変換する処理もその一つです。いろいろ試してみた結果、Respawnパターン*1が使いやすいと思います。Respawnパターンは、Task QueueがDeadlineE…
App EngineでOpenIDシングルサインオンを利用した場合のシーケンス図を書いてみました。OpenID Providerが「はてな」の例です。開発者が用意するページは黄色の部分に示したログインページだけです。設定内容は OpenID認証によるシングルサインオン - GeekFa…
2010-06-05 お詫び:ソースコードに間違いがありましたので修正しました。OpenIDのIdentifierを取得するには getUserId() ではなく getFederatedIdentity() を使用してください。データ変換タスクをTaskQueueに投入するページなど、開発者のみアクセスを許可…
App Engine 1.3.4でOpenID認証に対応しました。調べてみると意外と普通にシングルサインオンできたので、使い方と仕組みを説明します。まず、OpenID認証を要求するURLパターンをweb.xmlに書きます。 <security-constraint> <web-resource-collection> <web-resource-name>Authentication required url</web-resource-name> <url-pattern>/user/*</url-pattern> </web-resource-collection> </security-constraint>
OpenSocialアプリの開発に役立つライブラリです。バージョン0.7ではパラメータチェックを一部省略できるようになり、柔軟性が向上しました。詳しくはこちらから。http://code.google.com/p/opensocial-oauth-filter/気付いたら1ヶ月もブログを書いていません…
OpenSocialアプリの開発に役立つライブラリです。バージョン0.6ではGoogle App Engine向けの最適化を行いました。このライブラリと並行してmixiアプリも開発中です。詳しくはこちらから。http://code.google.com/p/opensocial-oauth-filter/
JSONベースのRESTサーバにJerseyを使っているのですが、App Engineの実環境ではspin-up timeが長いので困っていました。mixiアプリの表示に10秒もかかると見る気が失せてしまいます。そこで、JSONICのWeb Service Servletを使ってみました。POJOをJSONで返す…
NullPointerExceptionが発生するバグを修正しました。OpenSocialコンテナからのリクエストを検証するサーブレットフィルタを作っています。Javaでmixiアプリを作るのが少し楽になるライブラリです。opensocial-oauth-filter - Signature validation filter f…
OpenSocialコンテナからのリクエストを検証するサーブレットフィルタを作っています。Javaでmixiアプリを作るのが少し楽になるライブラリです。バージョン0.4からの変更点は以下です。 XMLファイルに設定を書くようにしました。 jarファイルが1つになりまし…
ライブラリをパッケージして配布する時、なるべく依存するjarを減らしたいことがあります。Mavenを使えば何ともないのですが、敷居を下げる意味では「1つのjarだけ入れれば動きます」が望ましいと思います。*1Commons DigesterやJAXBを使うと、XML設定ファイ…
mixiアプリからのリクエストに対して署名検証を行うサーブレットフィルタを作りました。Apache Tomcatなどのサーブレットコンテナで使用できます。ではサーブレット内で署名検証を行っていますが、このフィルタを使うとサーブレット内の実装が不要になります…
OAuthの署名検証を行う際、以下の2つが合致していないと検証エラーになるようです。 (OpenSocialコンテナ)gadgets.io.makeRequest()に渡すURL (サーバサイド)OAuthMessageのコンストラクタに渡すURL net.oauth.OAuthProblemException: signature_invalid…
OpenSocialコンテナは外部サーバにリクエストを発行する機能があります。gadgets.io.makeRequest()を使ってリソースを取得したり、データを送信したりできます。 var xapp = {}; xapp.configuration = { endpoint: 'http://example.com/api'; }; xapp.query …
Webサービスといえば巷はRESTで盛り上がっていますが、企業内システムではSOAPも多く使われています。SOAPの代表的な実装としてApache Axisがあります。2005年ぐらいにAxis1が爆発的に使われ始めた記憶がありますが、パフォーマンスが悪いとかWSDL 2.0に準拠…