2005年09月の記事

2005年09月の記事一覧です。

表示部分だけですが、ソースをある程度整理できました。

地図を表示するために、新しく別ウィンドウを開きます。このウィンドウは、地図を見るだけでなく、ナビゲーションとして利用できます。これで、位置情報とコンテンツとの関連が双方向的になったかな、と思います。

あとは、PHPのコードを綺麗にして、管理画面をそれなりにすれば、Nucleusのプラグインとして公開できるかな、と考えています。いやしかし、PHPとJavaScriptを行き来していると、変数に付ける$の有無や、文字列を連結する演算子やらが頭の中でゴニャゴニャになってしまいます X-(

2005/Oct/06補筆: プラグイン更新により、正常に動作しないリンクがあります。

移動(ドラッグ)やズームに合わせて、表示される範囲内にあるポインタを非同期で取得するサンプルを作ってみました;

地図の右(東)側が表示されるようドラッグすると、予め表示されていたポインタが現れるのではなく、地図の描画と並行してポインタがポンッと現れることがお分かりになると思います。ひとまず動くことを確認する程度のコードなので、移動やズームを繰り返すとポインタが上書きされ、ポインタの影がどんどん濃くなるという微妙な不具合が残っていますが、概ね問題なしですね。

この辺で技術調査は完了として、そろそろソースコードの整理に着手したいと思います。来週月曜には公開したいと考えていますので、もうしばらくお待ち下さいませ。

補筆: クイックハックで影が濃くなることを解消しました。が、画面外になったポインタを削除してません。

補筆その2: 気分転換的クイックハックで、画面外になったポインタを画面から削除するようにしました。情報ウィンドウが開いたまま画面外になった場合の処理は未実装ですが、ここでは実装しないことにします。

2005/Oct/06補筆: プラグイン更新により、正常に動作しないリンクがあります。

マーカをクリックした時の情報ウィンドウの表示を非同期にして、動作に問題ないことを確認できました。次は、すべてのマーカの位置情報を一度に取得するのではなく、画面上に表示されている範囲内のものだけを取得するようにしようと考えています(最大件数を設定するかどうかは後回しです)。

そこで、先人の成果を参考にしようとはてなマップを触っていたところ、不具合(微妙な仕様?)を発見しました。あるマーカをクリックして情報ウィンドウを開いた後、地図をドラッグして別の位置を表示させても、表示されるべきマーカが表示されない、という現象です。

情報ウィンドウが開いたままだと、マーカの情報を取得する非同期処理が実行されない(?)のが原因っぽいのですが、これって、はてなマップの仕様なのか、Google MapsあるいはJavaScriptの仕様なのか分かりません(推測ベースでははてなマップの仕様(?)かな、と考えてます)。

それはさておき、現在作成中のNucleusプラグインでは、情報ウィンドウが表示されたままでも非同期処理が実行されるようにする予定です。グローバル変数が増えてソースが汚なくなってしまいそうですが、まずは動くものを作ることを優先させる方向で作業中です。

その3で作成したプラグインでは、位置情報その他を最初のアクセス時にすべて取得していました。今は1件しか登録していないので通信量も少なくて済みますが、登録されている件数が増えると、当然、通信量は増え、画面表示が遅れ、メモリを食い、動作も遅くなることは目に見えています。

折角のAjax、非同期処理なんですから、初回アクセス時には位置情報のみ取得するようにし、ポインタをクリックした時に表示される情報は、その都度取得するようにしてみました;

クリックしてから表示されるまで、ちょっとばかりタイムラグがありますが、ほぼリアルタイムで処理できています。ブロードバンド万歳!

2005/Oct/06補筆: プラグイン更新により、正常に動作しないリンクがあります。

» 続きを読む

ちょっと間が空いてしまいましたが、この連休を利用して、基本的な機能についてNucleusのプラグインとして実装しました;

管理画面はログインが必要なので、リンクを貼っていません。次に必要な機能はこんな感じでしょうか;

  • 記事から地図へのリンク
  • 地図から記事へのリンク

位置データをシステム(blog.yoshidakamagasako.com)で一つ管理するのではなく、ブログ(吉田ブログ、鎌ヶ迫ブログ)単位で管理すべきかどうか、検討中です。

2005/Sep/22補筆: 上記地図へのリンクは、Mozilla系でしか表示できないようです。

2005/Sep/22補筆その2: IEおよびOperaで動作確認しました。

2005/Oct/06補筆: プラグイン更新により、正常に動作しないリンクがあります。

さっそく、Google Maps APIを試してみました。下のサンプルでは、XMLファイルからポインタの情報を取得し、地図に反映させています;

今回のサンプルで用いたXMLは静的なファイルですが、これをリクエストに応じてサーバが動的に生成すれば、より柔軟な表示や操作が可能っぽいです。また、ポインタもすべて一度に取得するのではなく、画面に表示できる範囲内のものだけを取得するようにすれば、画面側の動作を軽くできそうです(サーバ側は大変かも)。構想は大きく膨らみますが、大きすぎると手に負えなくなるので、シンプルな機能から実装していくことにします。

まずは、ポインタのマスタデータを管理作成するところから、ですね。次に、記事からポインタを(一方方向に)参照できるようにします。それができたら、記事とポインタを相互参照できるようにしましょうか。

» 続きを読む

09/14: NP_GoogleMaps

さて、昨日の記事でGoogle Maps APIについて触れ、Ajaxの練習も兼ねてNucleusのプラグインを作ってみようかな、と書いていたのですが...やはりと言いますか、何と言いますか、先達がいらっしゃいました。

しかし、このNP_GoogleMapsと同じ機能を実現しても仕方がないので、RDBとの連携を強化させたものを実装しようかな、と考えています。具体的には、

  • 地図のポインタをDBに登録し、記事間で使い回せる(管理画面を用意)
  • ポインタから、そのポインタを差している記事に飛べる
  • 他の記事から参照されているポインタも表示できる

つまり、ブログの記事と地図とをマッピングすると言いましょうか、はてなマップはてなダイアリを連携させるイメージですね。文字に起こすと難しそうですが、RDBを利用すれば、意外と簡単に実現できそうです。

このアイディア、買いませんか? > はてな[W]さん :-)

09/13: Google Maps

Google MapsGoogle Earthなど、次から次へと興味深いサービスを提供してくれるGoogle[G]。サービスだけでなく、そのサービスの機能を外部からも利用できるAPIを提供してくれるところが、技術者としては嬉しいです。

今月のUNIX USERの記事に、Google MapsのAPIを利用する、というものがありました。Ajax[W](Asynchronous JavaScript + XML)という技術を使っているそうです。非同期的に処理を行うJavaScriptのウェブ関連APIとXML(とサーバ側のサービス)を組み合わせた技術ということで、特別なソフトウェアは必要なく、ブラウザさえあれば利用できるようです。

Google Mapsを利用するとお分かりになると思いますが、マウスで地図をドラッグしても画面の再描画は行われず、スムーズに地図がスクロールします。画面の処理とウェブ側の処理とを非同期的に実行することで、実現しているのだとか(表示している領域の周辺を先読みしているのかな)。

このAjax、地図以外の用途も色々と面白そうです。ちょっとしたFlashの代替にもなりそうな感じもしませんか? 時間があれば、Nucleusのプラグインとして何か作ってみようかな、と考え中です。

09/12: SNSとFOAF

巷で話題のSNS[W](Social Networking Service)を利用しています。主に利用しているのはmixiですが、greeにも登録済みです。ですが、両方のサービスで同じような面々と同じようなネットーワークを構築するのは、何だか手間のように思えます。また、一方のSNSでのみ繋がっている友人との交友関係は、当然のようにもう一方のSNSには表れない訳で、所詮は閉じたネットワークか、と感じています。

そこで、FOAF(Friend of a Friend[W])を利用して、SNS間の交友関係の情報を共有できるようにできないかな、と考え中です。ただし、SNSの外部モジュールとして実現するには、SNSの提供する交友関係のリストにメールアドレスが含まれていないために、そのままではFOAFで利用できなさそうだったり、一筋縄ではいきそうにありません。使う側としては、FOAFに関する共通APIを定義した上で、それぞれのSNSがその機能を実装してくれるのが一番楽なんですけどね。

閉じたSNSより、開かれたFOAFの方が将来性がありますし、何より面白そうです。何かいいアイディアが浮かんだら、ちょこちょこと試してみようかな、と考えている今日この頃です。