マイクとAjax の終焉

Ajax 系のプログラムは以前から作っていたが、今回のものほど規模は大きくなく、エンジン部も全て自分で書いていた。特にXML でデータをやり取りとかはなく、直テキストでデータだけ送ったり、HTML を送ってinnerHTML でほりこんでみたり、あるいはJSON をeval してみたりという感じだった。

今回、「ボタンを押すと(ブラウザ内で)ポップアップウィンドゥが開き、その中で画面遷移する」、みたいなアプリをウィンドゥの中と外を極力切り離した形で開
発することとなり、方式をいろいろ検討した。ふと、横の人をみるとなにかしらjQuery とかThickBox とかいうのを使っている。JQuery でjavascript をJava や.Net みたいなイベントドリヴンに書けるみたいだし、ThickBox でポップアップする部分の中身をURL で指定すると
Ajax で取って来たり、まあ便利そうなので使ってみることにした。

次に中身をどうセットするかである。静的な表示と動的(表示するデータが変わる)な場合とを考慮して手法を検討しなければならないか?

1.Javascript の中に直接HTML を書いて、ポップアップウィンドゥのinnerHTML に。

var content = “<div>”;
content += “<h1>D’oh</h1>”;
content += “</div>”;

で、content をポップアップウィンドゥのinnerHTML に。
2.AJAX で中身を取得し、ポップアップウィンドゥのinnerHTML に。

今回は画面遷移が多く、システムを通してひとつのJavascript ファイルで根幹の部分を記述したい。1では、全部の画面データをそのファイルに含めると使いもしないデータが読み込まれまくっているのが微妙だ。

2の方式のようなAjax のリスポンス待ちはないが、今回は画面遷移の度にサーバーとデータのやり取りが生じることがほとんどであまり意味はない。
また、デザイン修正が大変そうなのに加え、ポップアップウィンドゥ内でのイベントをjQuery の強力なイベント処理機能を用いて記述しづらく、タグ内にonclick とか書くと処理を追えないようなコードになりそうだ。

さて、ThickBox では、a タグのhref にURL を指定すると表示するコンテンツをAJAX 的に取得して表示できる。AJAX 的にというのは指定されたURL の出力をそのままポップアップウィンドゥのinnerHTML にほりこむ感じである。ここで、デザインとビジネスロジック的なプログラムコードの分離を考慮した設計を前提にどのように動的データを埋め込むか考えると、

1.URL にPHP を指定し、PHP でSmarty などのテンプレートエンジンを用いて雛形となるHTML ファイルを読み込み、サーバーサイドでデータを埋め込んで出力。

2.URL に雛形となるHTML を指定し、JSON でデータを取得し、クライアントサイドで埋め込み。

素直に考えると1である。2では、HTML を読み込むのと、JSON でのデータ取得と、Ajax処理が2回発生し、クライアントサイドでデータを埋め込みというのが処理を遅く感じさせる。しかし、本件では2を選択してしまった。

まず、その時点ではJSONP を若干考慮していた。AJAX ではドメインが異なるURL からのデータ取得はできないが、script タグのソースはドメインの制限がないため、ドメインの異なるURL をscript タグのソースとして指定し、結果を変数にほりこむあれである。JQuery のJSON 関数はこれらを意識することなくデータが取得可能に設計されている。しかしながら、開発の時点でCertificate が取れていないHTTPS のURL からはデータが取得できないことが判明し、断念した。

次に、ポップアップウィンドゥの中のHTML にもjQuery によるイベント処理や画面遷移のためのThickBox の記述があるが、そういった処理がAjax やPHP を介して取得される部分にあるのが、感覚的になんとなく遠い気がした。

ということで、こういう形式にしてしまったわけだが、開発を通して様々な問題に気づいた。

- ブラウザごとに挙動が異なるJavascript。IE6,IE7, FireFox, Opera, Safari といった主要ブラウザで(時にはWin, Mac 版それぞれで)全動作確認をおこなうのは退屈で骨の折れる作業である。少しの修正でも、全体に影響をあたえることも考えられるし。

- 要求仕様が開発開始前に固まってればいいが、開発開始後にデータ項目が変わったりすると、DB, PHP, HTML, Javascript とそのデータを扱う箇所を全て修正する必要が生じ、精神的苦痛が大きい。

- Plug in などを用いての開発は、要求仕様がPlug in の機能内のうちはいいが、それを超えるような要求仕様変更が生じると、Plug inの中身を解析して修正を施すか、最悪Plug in 全体を自分で書き直すこととなり、想定外に時間を消費する。

- jQuery とPlug in とでVersion の互換性に問題がある場合がある。例えば、Interface Pluginの最新版は現時点でjQuery1.2 では全く動かない。

- jQuery ではHTML タグのID やクラス名で要素を取得して処理を、という形が多いが、デザイナーのCSS とぶつかると痛い。

- jQuery やPrototye.js といったフレームワークを用いると、それぞれでの開発経験がないとコードを追いづらいかもしれない。また、初心者がいきなりprototype.js を用いる前提でjavascript を書き出すと危険である。どこまでがjavascript の言語仕様で、なにがprototype.js の機能かわからなくなると微妙。

- 今年半ばに発表されるIE8 ではたして動くか?

まあとりあえず今回はjQuery でイベント処理部をHTML から分離し、画面毎のファイルも分割されているため、そんなにごちゃごちゃでもないと自分では思うが、PHP にも勝るとも劣らないJavascript の言語仕様のゆるさは、常人には理解しがたい混沌さを生み出すには十分である。特にグローバル変数のスコープは異なるドメインさえ駆け抜ける。

ということで、Ajax はもう無理です。そろそろSliverLight とかでいいです。

マイクよ、永遠に

いやー、LAも寒くなってきましたね。事故りました。前回お伝えしたとおり、Premiumが前年比$1500アップのため、Coverageを最低に設定して、年$300くらい安くなるようにした矢先、クラッシュしました。

この町は人口過剰すぎてきびしい上に、公共交通機関があまり良くない為、車であふれています。無作法な運転の車もかなり多いです。

だいたい、私は眠気がさめるのが遅く、能力も通常時から大きく劣るため、朝に車を運転とか避けたいのですが、代替の通勤手段はバスと電車になります。時間が倍かかるのに加え、ほとんどの乗客がかなり無作法です。Hollywoodに住んでいて車を持っていなかった1ヶ月間くらいの時期で乗客の喧嘩に2回遭遇しました。

もう、無理です。身体的・精神的・社会的に、無理です。LAはもう無理です。

さらば、マイク

いやー、自動車保険の更新の季節ですね。来年分のPremiumが着ました。1年で$4000でした。前年比$1500アップです。一回、30mphくらいでレイン変えただけで、後ろに車もいないのに、無実の罪で“Dangerous Driving”とか言われて捕らえられまして、violationが付きました。そのときは、書面で戦ってだめで、裁判所出頭とかも面倒なので、この非情な町に住む税金として$150払いましたが、実はそれだけで済みませんでした。

これだけ払っても、Bodily Injury and Property Damageは$500,000までしかカバーされないのもどうかと思います。日本では年10万円以下で、対人無制限とかのような。

いろいろ他の保険会社も調べましたが、これが最安のようです。もう無理です。アメリカは無理です。

GoogleMapで一番近い日本食を探せ

今回は、「ある情報を入手する時に地理的情報が絡んだ場合、人々がどのような方法・行動を取るのか」、についての実験が日本で行われたので、こちらを紹介します。

お題は「ある事務所に一番近い花屋を探す」。
6人の方が実験され、そのうち2人の検索行動や視線の動きを確認することが出来ます。他の人がどういう風に検索エンジンを利用しているのかが見れて、ちょっと目が疲れるけど面白いですよ。


一番近い花屋を探せ--あいまいな場所をネットで探すときの手段は?

詳細は上記のサイトを見ていただくとして、結果6人のうち3人がGoogleマップを利用されたそうです。

著者は「場所を調べるというシチュエーションで、予想以上にGoogleマップが浸透していないことに驚きました。・・」とありますが、私はむしろ意外にマップ機能を使う人が多い・・、

と思ったのと、その便利さを再認識。。

例えば、Google mapで、地域名とジャンルを入力すると表示されます。
画像は、「littletokyo japanese restaurant」を入力した場合です。

ここでは、このエリアにある日本食(関連)の店名が表示されます。
また住所や電話番号のほか、5段階評価やレビュー、画像まで簡単に見ることができます。


Google Map

これってかなり便利だと思いません?。

一度でもこの検索方法を試した人なら、次回も同じ様に探すと思うんですが、どうでしょう。。

iPhone

iPhone

前に使っていたMotrolaのCell Phoneが真っ二つに折れてしまった。原因は酒?

というわけでなんとかメモリだけでも救済してもらおうとAT&Tストアに行ってみてが、
残念ながら救済方法がないらしい。SIMカードにメモリしてなかったからなぁ。。

で意気消沈していたところ、仕方ないので新しい電話機を買うかぁ。。
と見回したらiPhoneが目に入った。(一緒に行ったスタッフがそそのかしたという目撃証言あり)

噂に違わずこいつはすごい。

iPodとemailなどは想像していた通りの感じ。でも動きがかなりスムーズ。
感動したのはズーム。Google Mapが指でグイングインとズームアップする感じはかなり快感。
そしてWebブラウザのSafari・・・まったくMac版Safariと同じように動く。
これまたズームはスムーズでサイトの隅々まで細かく見れる。

さっそく役立ったのは、食事するところを探していたときにiPhoneでサーチしてサイトに
移動して電話番号が書いてあるページを拡大して指で触ったら電話がダイヤルされた!
そのまま予約してGoogle Mapで辿りつつ到着。。。便利。

久々に知的好奇心を満たしてくれる道具に出会ってしまった。
人々にそう思ってもらえるサービスを作らないとなぁ。