たぷつきません

おなかがでてきた。もうたぷついてるやん。

クロスドメインiframe間のメッセージング

 なんだ簡単だったー。Chrome,firefox,safari,IE8,Operaでメッセージのやりとりができる。
http://javascript.info/tutorial/cross-window-messaging-with-postmessage
 今までCoockieとJSONP組み合わせてたけど、とてもシンプルになった。
 postMessageの第二引数は、相手ドメインのRealm。受け側のev.originは送り側ドメインのRealmということだけ注意すれば全く簡単。

gwt-gadgetでビルドできない問題。整理してみる

 gwtquery-1.0.0 を使いたいんだけど、gwtquery-1.0.0-SNAPSHOTを今でも仕方なく使い続けている。理由は、gwt-gadget1.2.0がGWT2.2以上でビルドしたものを扱えないからっぽい。以下のようなエラーが出てビルドできない。

java.lang.IncompatibleClassChangeError: Found interface com.google.gwt.core.ext.typeinfo.JClassType, but class was expected

 これがgwt-query-1.0.0-SNAPSHOTだとビルドが通る。JClassTypeはGWT2.1.1ではabstract classで、GWT2.2.0ではinterface に変わってしまった。これにより扱う側がextendsするかimplementsするかでソースが変わってしまうため、ビルドができなくなったようだ。しかしオリジナルのgwtquery-1.0.0-SNAPSHOTのあるリポジトリは消されてしまった。
 それではと、gwt-gadget-1.2.1-r1を試してみた。途中deprecatedっぽいワーニングは出るものの、IncompatibleClassChangeErrorは発生せずにビルドが最後までいこうとするので、1.2.1-r1がGWT2.2.0以降に対応したと思われる。しかしビルドの最後の最後で、「gwt.xmlで、<script>定義するんじゃないよー!」と、ちゃぶ台返しされる。GWT2.1.1+gwt-gadget1.2.0ではライブラリでjsを使っていても大丈夫だったのに。

Linking into /Users/katochin/Documents/workspace/myapp/war/myapp
   Invoking Linker Google Gadget
      Building gadget manifest
         [ERROR] The Google Gadget linker does not support <script> tags in the gwt.xml files
      [ERROR] Failed to link
com.google.gwt.core.ext.UnableToCompleteException: (see previous log entries)
	at com.google.gwt.core.linker.CrossSiteIframeLinker.fillSelectionScriptTemplate(CrossSiteIframeLinker.java:79)

 このCrossSiteIframeLinkerクラスは、GWTに含まれるもので、GWT2.2.0だけでなくGWT2.1.1にも含まれていた。しかしどうも実装が変わってしまったようだ。もしかするとgwt-gadgetのコンパイラが面倒を見なければならなくなったのかもしれない(それをgwt-gadget側がScriptのありかを提供していないために起きているように見える)。

 それにしてもどうしたもんかなぁ。いつまでも古いGWTを使うわけにもいかないし。頑張ってgwt.xmlのscriptの記述をGWTコード内で書くのが良いのだろうか?

追記

 ちなみにgwt-gadget-1.2.1-r1もGWT2.3.0でビルドしたら、IncompatibleClassChangeErrorになる。要するにGWTのビルダーは同じバージョンのSDKでやらないとダメってことだよね。であればさ、各GWTバージョン別にgwt-gadget-1.2.0やgwt-gadget-1.2.1-r1を用意しないとダメってことじゃん!ちゃんと提供して欲しい。

場所の設定画面で突然韓国が出てくる

 言語:日本語、場所:日本、タイムゾーン:韓国ソウル...ってΣ(゚Д゚;エーッ!?
 同じ+9:00だからだと思うが初期値がおかしい。今度はSQLExceptionにならずに「日本東京」に直せた。

会社名の修正ができない

 モデレータ設定というので会社名を変更しようとすると、

java.sql.SQLException: ORA-20018: ORA-06512: at "SLEEPY.CUSER", line 4061 ORA-06512: at "SLEEPY.SORGANIZATION", line 260 ORA-06512: at "SLEEPY.CORGANIZATION", line 1874 ORA-06512: at line 1 : {call cOrganization.update_detail(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)})}
エラー: 情報が無効またはありません。
以下のエラーメッセージを参照して情報を修正してください。

 って、出ちゃってるし。特別なことをしていないのに、なんでエラー?ORACLE使ってることもバレバレだし。

アカウント管理がひどい

 chatter Free, 1ヶ月使用版のsalesforce+chatter, 他のユーザーが立てたchatterとで、全部別管理になっている。で、同じアカウントでそれぞれに行き来できると思いきや「すでに存在する!」と言われ、常に新規アカウントでジョインしなければならない。
 しかたがないので、+エイリアス をメールアカウントに付けて凌いでいるが、あっちこっち行き来するのが辛いんだけど。どういう要件があったらこんな仕様になるんだろうか。何も考えてないで起きているバグとしか思えない。

またMarketplaceのProvisioningのScopeが足りない。

 マルチドメインのスコープが無いのはともかく、基本的なやつ、https://apps-apis.google.com/a/feeds/domain/#readonly ぐらいは用意しておくれよ〜。
 organaization nameぐらい教えてくれー。

うお!billingに$0指定ができなくなった

 blobstoreを有効にしたいだけとかでやっていたのに、デフォルト $2/Day、最低でも$1/Dayは出さないと駄目になった。
 と思ったら、随分前からだったようで、2010年秋ごろにはすでにそうなっていたようだ。僕がセットしたアプリは2009年夏ごろだったが、そっちは$0のままのようだ。

安定してきた

 10から11になったとたん、フォーム入力が効かなくなったりページがフリーズして強制終了しかできなくなったりと悩まされていたが、拡張機能すべてを無効化したところ、なんとなく安定してきた気が。
 10では問題なかった拡張も11では問題が起きるということか...。でもどれが犯人なのか1つずつ探す気力もない。

サイトが動かない。

 挿入するもの全て、ダイアログボックスの「選択」「キャンセル」が効かなくなった。chromeでもfirefoxでも、「processRequestという関数が無い!」というようなエラーになる。×ボタンで閉じる以外なく、何もできない状態。なんだろう。
 日本のヘルプフォーラムもなさそうだし、どこにレポートすれば。。。
 適当くさい英文で書いてみたけどGoogleの中の誰かしら拾ってくれるんだろうか。

コンソールログ

 GWTでガジェット作るとHostedモードが使えずデバッグが辛いので、GWT loggingを使っているわけだけど、firefoxfirebugなしでコンソール出力する方法ないのかな*1。普段はconsoleでchromeに出るので十分なんだけど、結局両方で面倒見ないといけないからなー。
 こちらの解説がとっても親切。

*1:firebugにバグがあって正しくJSが動かなくなることがあるので

gdata-java-clientのmvnリポジトリへのデプロイ(続き)

 http://d.hatena.ne.jp/t-katochin/20110318/1300432259 で実行したシェルは、個々にインストールしているだけで、dependenciesが無いので、いまいち。。。。
 各gdata jar内のMANIFESTのclasspathにある他のgdata jarの記述からdependenciesを起こしてPOM吐いてdeployまでできるよう改良したいなぁ.... うーん重い。

4になってから色々動かない。

 Google AppsGmailのその他メニューがfirefox4にあげた途端展開されなくなった。しばらくしたらGoogleの方が対策したようだけど。
 
 それ以外に、text-overflow: ellipsis; が効かなくなった感じ。
 http://mattsnider.com/css/css-string-truncation-with-ellipsis/ ←これに従えば3.6までは動いていたんだけど、4.0では表示されているデモも動かない。

manifestのrealmの記述ミス

 ずいぶん昔にはまったけど、どこにも記録を残していなかったのか思い出せなかった。。。orz なので改めてちゃんと記憶に残すよう大きく書いておきます。
realmのUrlには、https://アプリケーションサーバーアドレス/ のように末尾にスラッシュを書いてはイケナイ

例)
https://myapp.appspot.com   ... OK
https://myapp.appspot.com/  ... NG

 これをつけると、

  1. マーケットプレイスアプリなのに「このアプリを許可しますか?」とユーザー単位に承認を要求される。
  2. インストール先のドメインの[高度なツール]-[OpenID を使用した連携ログイン]-[OpenID を使用したサードパーティのウェブサイトへのログインを許可]のチェックが必要になってしまう。

 ...という症状が出ます。
後者が特に致命的でGoogleが表示するエラー画面が文字化け(クライアントのエンコードの問題ではなく、レスポンスがすでに???? のようになっているので読めない)て表示されます*1
 Marketplaceのアプリは、ドメインが認めてドメインにインストールする対象です。openidによるサインオンの許可は、Marketplaceからアプリをインストールする際にadminが既に承認したものです。一方、[高度なツール]-[OpenID を使用した連携ログイン]は、ドメイン内メンバーが個々に認めてインストールしたものが対象となっています。
 もっと言えば、Google Apps Standardでは[高度なツール]-[OpenID を使用した連携ログイン]をコントロールする方法がない*2ので、そこに頼るのはやはりスマートじゃないということになります。


 ...よし復習したぞ。もう忘れまい。

*1:エラー画面のURLのパラメータを見てロケールを変えることで英語で読めるようになります。そこに「single sign-on の設定をドメインでせよ」と書かれていて、ようやく今回のハマリから脱するキッカケになりました。

*2:全てブロック,全て許容のどちらなのかは未確認