GAE/Jの本番環境ではJDOのstartsWith()で日本語が通らない

少し前になりますが、9/9にSlim3 User Japanへ投稿させていただいた障害の内容と顛末についてまとめておきます。

初回投稿(自分が書いた文章でも有りますので全文引用します。)

two-strokeです。
いつも大変お世話になっております。
AttributeMeta.startsWith()の挙動について確認させていただけますようお願い致します。


■現象
GAE上で、AttributeMeta.startsWith()を適用した検索を行った場合、
ひらがな、カタカナ、漢字(おそらく2バイトコード全般)では該当するものが有るにも関わらず
取得対象にならない。
(開発サーバ上では期待動作します。)


■詳細
仮に下記のデータが格納されているとした場合、
・ABC
・あいう
・アイウ
・亜意卯
下記条件で取得した結果件数は↓の通りです。
m.columnName.startsWith("A")...1件
m.columnName.startsWith("あ")...0件
m.columnName.startsWith("ア")...0件
m.columnName.startsWith("亜")...0件

何かお気づきの点がございましたらアドバイスをいただけますようお願い致します。


以上、宜しくお願い致します。

ここから先はSlim3開発者のひがさんによりGoogle App Engine for Javaに、
その後、Google App Engine Issue Trackerへご登録いただいたことで、現在はGoogleサイドの対応待ちというステータスになっています。


この一連の流れから多くのことを考えさせられました。


Slim3の提供するDaoに完全に依存していたため、LowLevelAPIとの境界が分かっていない事に対する反省。
 (ただし学習効率を考えてのことなので、現時点では仕方が無いとも思っています。)
Slim3に対して多少のフィードバックが出来たことで喜んでいたが、(他力本願ながら)結局Googleにまで辿り着いてしまい驚愕。
・EarlyLook版という位置づけとは言え、簡単に気付きそうな障害だけに現時点でのGAE/Jへの信頼度が微妙に減少。
・英語も苦も無く使いこなすひがさんを見て、英語の必要性を改めて痛感。


#ちなみにGoogle側の対応はまだですが、ひがさんより回避方法を示していただいております。

workaroundとしては、
m.content.ge("あ"), m.content.lt("あ" + "\ufffd")
のように、startsWithをrange scanに変更すれば大丈夫です。
これは確認済みです。

Origoダウン?

Subversionリポジトリを利用させていただいているOrigoのサイトが落ちているようです。
ここのところ何度か接続に失敗することが有りましたが、現在は何回試みて成功しないようです。
ブラウザでhttp://origo.ethz.ch/を叩いてみても応答なしなのでダウンしているのかもしれません。


さて困った・・・。

※試しにhttp://www.ethz.ch/を叩いたところ問題なく表示されます。

Windows 7 テクニカルセミナー 参加

9/14(月)にWindows 7 テクニカルセミナーに参加して来ました。
ソフトウェアのダウンロード提供サイトVectorと、Microsoftによるコラボレーション企画です。

ここのところWebアプリケーションばかりに従事しておりますが、そこに特化するつもりも無いため、
Windows7全般についての情報を仕入れるのが参加目的でした。

結果的に目的は果たせたもののVector色なのか、既存アプリのWindows7への移行についての情報が主な内容でした。

■移行時のチェックポイント10
1.パス参照がハードコードされていないかの確認
2.High DPI設定でのUIの確認
3.Unicode対応の確認
4.アンインストールのアイコンが表示されているかの確認
5.Sort結果が期待されたものか確認
6.潜在的な問題をApplicationVerifierでチェック
7.OSバージョンチェックの確認(3rdパーティー製品も含めて)
8.Windowsメール削除に伴う動作の確認
9.USBの動作確認
10.フォントダイアログの確認


その他、幾つか書き留めた内容を残しておきます。

Windows7 のバージョン番号は6.1。(7.0ではない)
Windows7はOSとしてメーラーを提供しない。→WindowsLiveと合わせてサービスを提供する形。
UNICODE対応調査では「森鴎外叱る」の文字列が有効。
・psr.exeを使うと証跡を残すような評価で便利かもしれない。


メーラーをOSにバンドルせず、WindowsLiveと合わせて・・・。というところについては、
Webサービスと協調してユーザに機能提供していくという説明は納得できるものの、
ヨーロッパの独禁法だかの影響も大きかったのでは?と勘繰ってしまいました。

Seasar Conference 2009 Autumn 参加

9/12(土)に予定通り参加してきました。

今回は全てのひがさんのセッションを、ひがさんのすぐ前の席に陣取って聴講する機会に恵まれたことも有って、非常に刺激的でした。
それぞれのセッションについて、簡単にコメントおよびメモした内容を残しておきます。


1).Slim3入門
ひがさんからのアドバイスも有り、入門編はパスしようかとも思いましたが聴講。多くの気付きが有り非常に有益でした。

・APTはAnnotationProcessingToolの略。いずれ調査する。
Slim3が提供するDBのテストケースは、開始/終了時にレコードを空の状態にしてくれる。
・.jarファイルにクラスパスを通すのはパッケージエクスプローラから右クリックでもOK。
・画面遷移用ではなく処理用のControllerは、処理実行後redirectで画面遷移する場合が多い。


2).GWTではじめるFull Ajaxアプリケーション
食わず嫌いだったGWTの概要が分かった気がします。
UI部分はともかく、ロジック実行部分はFlexからAMFでサーバサイドのJavaを叩くイメージに近い印象で捉えました。

・Jettyについて、いずれ調査しておく。
・ブラウザ依存処理の切り分け部分はソースを追いかけておく。


3).SQL脳からBigtable脳へ
GAEではRDBMSからBigTableへ変更になった結果、SQLが通らなくなりますが、
インメモリーのフィルタで吸収する方法は非常に理解しやすかったです。

Slim3のDaoに頼りきりなので、JDOやローレベルAPIについても把握する必要が有る。


4).S2Robotで泳ぎませんか?
俗に言うスパイダー&スクレイパー
以前少し興味を持って調査したことも有り、設計(クラス分割)がなかなか興味深かったです。

Apache Tikaについて、いずれ調査しておく。


5).ライトニングトーク
 今回もわきあいあいという感じで和みました。


6).じゃんけん大会(出ないかも)
 こちらは時間の都合で参加しませんでした。

Seasar Conference 2009 Autumn セッション公開

Seasar Conference 2009 Autumnのセッション情報が公開されました。

現時点では下記の聴講を予定しています。

1).Slim3入門
2).GWTではじめるFull Ajaxアプリケーション
3).SQL脳からBigtable脳へ
4).S2Robotで泳ぎませんか?
5).ライトニングトーク
6).じゃんけん大会(出ないかも)


今回も全力で、ひがさんのセッションを選択しているため聴講できないのですが、下記も興味が有るため当日浮気するかもしれません。
yui-frameworks
S2Flexyui-frameworksを使ったRIAエンタープライズ開発のイロハ
mobyletのケータイサイト30分クッキング
Javaプログラマに捧げるscala入門


楽しみ!

ActionScriptのコンストラクタ

ActionScriptのオーバーロードに続き、小さなお話。

設計から実装に落とす際にハマったのがコンストラクタ。

ActionScriptではコンストラクタはpublicである必要が有るようです。

Singletonパターン等が素直に表現できないので少し設計にインパクトが発生してしまいました。

この開発が一段落したら、基本文法からおさらいしようと考えています。

GAE/J上のシステムをAmazon Product Advertising API 署名認証対応

2009年8月15日より、Amazonの書籍情報取得用WebAPIに署名認証が必要になりました。
GAE/J上に構築しているシステムにて対応を行いましたところ、幾つかハマリポイントが有りましたのでメモ。


サンプルコードが提供されていたため、対応自体は難しく有りません。
Product Advertising API Signed Requests Sample Code - Java REST/QUERY


■手順
1).Amazon Web Serviceより、Access Key ID と Secret Access Key を取得。
2).AmazonへのリクエストURL生成部を改修。


■ハマリポイント
1).アカウント申請の際の入力必須項目で有る「郵便番号」。日本からの申請の場合、郵便番号は3桁以外を受け付けてくれないようです。
エラーメッセージが分かりにくく、かなり長い時間を取られました。

2).commons-codec(Base64クラス)を使用しますが、commons-codec1.4ではダメで1.3を使う必要が有るようです。
具体的には1.4を使用して生成したURLを叩いた場合、下記の通りエラーとして処理されてしまいます。

<?xml version="1.0" ?> 
<ItemLookupErrorResponse xmlns="http://ecs.amazonaws.com/doc/2009-07-01/">
<Error>
<Code>SignatureDoesNotMatch</Code> 
<Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message> 
</Error>
<RequestID>12e4603b-69a1-47ba-82bc-84c8a7651aa6</RequestID> 
</ItemLookupErrorResponse>

appengine-api-stubs.jarに含まれるBase64クラスでも期待動作が確認できました。