カレンダーガジェットでポーリングに関する大事なお知らせ

1分に1回のポーリングでも、しばらく置いておくとカレンダーが重たくなるので、やめた方がいいぞ!ポーリングの頻度というより、長時間コンスタントにコンテナからイベント取ろうとするのが悪いみたい。

必殺「最新の状態にする」ボタンしかないのか。

ガジェットがキャッシュに残って激重

カレンダーにガジェットを追加して、そこでポーリングする実験。

それ程の負荷でもないだろうと思って、1秒に1回にしてガジェット追加。その直後からカレンダーが激重に。

さっさとガジェット削除したが状況が一向によくならない。仕事にならないよー。

他の人の予定が全く取れない・・・非道い時にはカレンダー自体表示されない。ブラウザ変えてもだめ。PC再起動もだめ。他の人が使ってる別PC、その人のアカウントだとカレンダーはサクサクなのだが、俺のアカウントでログインすると激重。

これはガジェットがガジェットコンテナ側にキャッシュされてるのであろうというんで、カレンダーのURLの最後にクエリパラメータ付けて

https://www.google.com/calendar/hosted/example.com/render?nogadgetcache=1

ってやるといいという社内情報を元にやってみたが、だめだー。

ネットで調べたら、こんな記事が。

http://www.adambergman.com/2008/06/09/google-gadget-cache/

?nocache だけでいいのか。

なおった。

軽い、軽いぞー!総統!歩けます!

これはガジェットに対するオプションみたいなもんじゃなくて、ガジェットコンテナに対するコマンドみたいな感じで働くらしい。

て事はだ、今まで最新版デプロイした後なかなか表示が更新されないので、ガジェット削除・追加を繰り返してたのも、CSS置き換わらないので、いちいちリンクに日付をクエリパラメータで付けてたのも、このおまじない使えば不要という事になるのではないのか?

試してませんが。

結局ポーリングは10秒に1回で正常動作。恐いのでまあ30秒に1回にしとくかなあ。どうせカレンダー本体が更新されなきゃ内容変わらないし。

Googleに優しいお言葉

google gadget cache ガジェット キャッシュ クリア

複数iPhone/iPod Touchと1台のMacでなんとかする

我が家にiMacが来ることになった。iTunesの運用検討中。

要望

  • Macは1台でアカウントを二人で切り替えて運用したい
  • 俺とヨメでそれぞれiPod TouchiPhoneを使いたい
  • 音楽ライブラリは共通で使いたい
  • アプリはそれぞれのiTunesアカウントで管理したい
  • AirPlayで遊びたい

試してみた

共有機能・ホームシェアリング
  • Macが1台なので意味がない。
NASに保存してiTunesサーバを立てる
ライブラリ自体を共有
  • option押しながらiTunes起動するとライブラリを選択出来るので、NASなり共有ディレクトリなりに構えたライブラリを二人で共有する。
  • 一度選択してしまえば次回起動時はoption不要なので通常運用でOK。
  • お互いにCD吸出ししてライブラリを更新しても、お互いにちゃんと反映される。
  • 複数PCでこれをやると、ゴミファイルが出来たりWindowsが絡むと拡張子だなんだで問題があるらしいが、アカウント切り替えで使うので、実質シングルユーザーゆえ問題なし。

なのだが。

  • iTunesアカウントまで共有してしまうので、アプリの同期に問題あり。実際にやってみてはいないんだが、難儀な事になりそう。
ライブラリは別で、iTunes Mediaフォルダをそれぞれで同じ所を設定
  • ライブラリ自体は別なので、iTunesアカウントも別管理に出来る。

なのだが。

  • 相手が新しくiTunes Mediaに追加したものが自動で自分のライブラリに反映されない。
  • 毎度ライブラリ追加しなきゃいけないのだが、これが差分だけササっとやるもんだと思ったら全件フェッチしとる様子で、現在CD300枚分以上で、追加処理中に息子と一緒にお風呂に入れた。
  • アプリが入ってるMobile Applicationフォルダも iTunes Media 直下なので、そこに二人分のアプリがごっちゃに入ってくるものと思われる。ライブラリの追加をしなければいいのだろうが、気持ち悪い。
iTunes Media/Music だけエイリアスで共有
  • 要するにアプリは個別で、音楽だけ共有したいだけの話なので、エイリアス切ってみる
  • ライブラリ追加しなきゃいけないのは変わらないがそこは目をつぶる

やってみたが

  • CDの取込み時に、必要なフォルダが見つかりませんエラーが出る。
  • 調べると海外でもこの件、バージョン9の頃にissueとして上がっているようだけど、対応されていないって事は多分直らない。

斯様にどれもいまひとつなんである。

検討してみる

要するに、音楽ライブラリの共有は、ライブラリ自体の共有で問題ないわけだ。

で、アプリの管理は別ライブラリがいい訳だ。

じゃあそれぞれで音楽用に共通のライブラリ、アプリ同期用の個別ライブラリを構えればいいんじゃないかなあ…。難儀だ。難儀でドン臭いけど、これで諸々解決じゃないかなー。

ふたりとも、音楽の同期はしても、アプリの同期ってあまりしないよね、という運用なのでまあこれでいいか。

ヨメにoption起動を覚えてもらおう。

例外キャッチャー

どっかで例外が出てもなんだかんだで結構そのまんま動いてしまうGWT。ブラウザの開発ツールなどのコンソールには一応例外は表示されるんだけど、UmbrellaExceptionってのにくるまれちゃって何も判らない。

GWTは例外が投げられても処理を止めずにどんどん先に進むらしく、その例外をこのUmbrellaExceptionに突っ込んでいるようなのだ。

最終的にUmbrellaExceptionとして投げられるのだが、それをどうやってキャッチすりゃいいのか。困った。

と思ったら簡単だった。

GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
        @Override
        public void onUncaughtException(Throwable e) {
            if(e.getClass() == UmbrellaException.class){
                for(Throwable t : ((UmbrellaException) e).getCauses()){
                    Window.alert(t.toString());
                }
            }else{
                Window.alert(e.toString());
            }
        }
    });

toString()で取るとスタックトレースで見れた。が、プリチーなコンパイルしとらんので、cというオブジェクトがnullなのでfcというメソッドが叩けないとか、わからん!プリチーにせんとさっぱりです。

CellFormatterとかRowFormatterとか

で色々といじる場合、実際にデータをセルに突っ込む前でも、setWidth やら setHeight やらは使えるので、そのノリでgetElement(index).setAttribute("style","display:none") とかやったら怒られた。

getElementした途端にDOMの世界へハローワールドな訳なのでそりゃそうだ。