09/30: Google Maps その7
表示部分だけですが、ソースをある程度整理できました。
地図を表示するために、新しく別ウィンドウを開きます。このウィンドウは、地図を見るだけでなく、ナビゲーションとして利用できます。これで、位置情報とコンテンツとの関連が双方向的になったかな、と思います。
あとは、PHPのコードを綺麗にして、管理画面をそれなりにすれば、Nucleusのプラグインとして公開できるかな、と考えています。いやしかし、PHPとJavaScriptを行き来していると、変数に付ける$の有無や、文字列を連結する演算子やらが頭の中でゴニャゴニャになってしまいます X-(
2005/Oct/06補筆: プラグイン更新により、正常に動作しないリンクがあります。
09/28: Google Maps その6
移動(ドラッグ)やズームに合わせて、表示される範囲内にあるポインタを非同期で取得するサンプルを作ってみました;
地図の右(東)側が表示されるようドラッグすると、予め表示されていたポインタが現れるのではなく、地図の描画と並行してポインタがポンッと現れることがお分かりになると思います。ひとまず動くことを確認する程度のコードなので、移動やズームを繰り返すとポインタが上書きされ、ポインタの影がどんどん濃くなるという微妙な不具合が残っていますが、概ね問題なしですね。
この辺で技術調査は完了として、そろそろソースコードの整理に着手したいと思います。来週月曜には公開したいと考えていますので、もうしばらくお待ち下さいませ。
補筆: クイックハックで影が濃くなることを解消しました。が、画面外になったポインタを削除してません。
補筆その2: 気分転換的クイックハックで、画面外になったポインタを画面から削除するようにしました。情報ウィンドウが開いたまま画面外になった場合の処理は未実装ですが、ここでは実装しないことにします。
2005/Oct/06補筆: プラグイン更新により、正常に動作しないリンクがあります。
09/27: Google Maps その5
マーカをクリックした時の情報ウィンドウの表示を非同期にして、動作に問題ないことを確認できました。次は、すべてのマーカの位置情報を一度に取得するのではなく、画面上に表示されている範囲内のものだけを取得するようにしようと考えています(最大件数を設定するかどうかは後回しです)。
そこで、先人の成果を参考にしようとはてなマップを触っていたところ、不具合(微妙な仕様?)を発見しました。あるマーカをクリックして情報ウィンドウを開いた後、地図をドラッグして別の位置を表示させても、表示されるべきマーカが表示されない、という現象です。
情報ウィンドウが開いたままだと、マーカの情報を取得する非同期処理が実行されない(?)のが原因っぽいのですが、これって、はてなマップの仕様なのか、Google MapsあるいはJavaScriptの仕様なのか分かりません(推測ベースでははてなマップの仕様(?)かな、と考えてます)。
それはさておき、現在作成中のNucleusプラグインでは、情報ウィンドウが表示されたままでも非同期処理が実行されるようにする予定です。グローバル変数が増えてソースが汚なくなってしまいそうですが、まずは動くものを作ることを優先させる方向で作業中です。
09/26: Google Maps その4
その3で作成したプラグインでは、位置情報その他を最初のアクセス時にすべて取得していました。今は1件しか登録していないので通信量も少なくて済みますが、登録されている件数が増えると、当然、通信量は増え、画面表示が遅れ、メモリを食い、動作も遅くなることは目に見えています。
折角のAjax、非同期処理なんですから、初回アクセス時には位置情報のみ取得するようにし、ポインタをクリックした時に表示される情報は、その都度取得するようにしてみました;
クリックしてから表示されるまで、ちょっとばかりタイムラグがありますが、ほぼリアルタイムで処理できています。ブロードバンド万歳!
2005/Oct/06補筆: プラグイン更新により、正常に動作しないリンクがあります。
» 続きを読む
09/21: Google Maps その3
ちょっと間が空いてしまいましたが、この連休を利用して、基本的な機能についてNucleusのプラグインとして実装しました;
- 位置データの管理
- データをXMLで取得
- 地図の表示
管理画面はログインが必要なので、リンクを貼っていません。次に必要な機能はこんな感じでしょうか;
- 記事から地図へのリンク
- 地図から記事へのリンク
位置データをシステム(blog.yoshidakamagasako.com)で一つ管理するのではなく、ブログ(吉田ブログ、鎌ヶ迫ブログ)単位で管理すべきかどうか、検討中です。
2005/Sep/22補筆: 上記地図へのリンクは、Mozilla系でしか表示できないようです。
2005/Sep/22補筆その2: IEおよびOperaで動作確認しました。
2005/Oct/06補筆: プラグイン更新により、正常に動作しないリンクがあります。
09/15: Google Maps その2
さっそく、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 MapsやGoogle 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の方が将来性がありますし、何より面白そうです。何かいいアイディアが浮かんだら、ちょこちょこと試してみようかな、と考えている今日この頃です。
09/10: Nucleusプライグイン自作
初の自宅からの更新です :-)
昨日のエントリで、書籍のイメージとリンクを利用しました。が、サイズが大きめだったり、いちいちイメージのURLを探したりするのは面倒だったりします。そこで、ISBN(またはASIN)を利用してAmazon.co.jpにおける書籍のURL(とリンク)を生成するプラグインを作成してみました。
nakahara21さんのNP_ISBNを参考にさせて頂きました。どうもありがとうございます。今回自作したNP_AmazonLinkは、このNP_ISBNの機能をかなり削除した簡易版です。
自宅からプラグインのアップロードはできませんので、当ブログでの利用は来週月曜からになります。以下にコードを示します。ご参考までに。
» 続きを読む
09/09: 『開発者ノートシリーズ Mono』
O'Reillyから出ている『開発者ノートシリーズ』の一冊です。Microsoftが提唱する.NET Framework[W]のオープンソース実装であるMonoについての、(おそらく)日本初の解説書になります。
内容は画像からリンクされている先の目次を参照して頂くとして、ターゲットはLinuxまたはMac OSでの開発経験者という感じです。Monoについての概要が一通り記載されていますので、全体像を把握するのには便利かと思います。また、Gtk#について解説があるのは嬉しいです。ただ、これ一冊で何らかのアプリを作成するのはちょっと難しいかも。.NET(C#)の知識がある程度あれば、より楽しめる一冊になっていると思います。
09/08: プログラマ考 その10
という具合に、『プログラマ考』というタイトルで色々と書いてみました。他にもまだ書きたいことはありますが、まだテキストに落とせるほど整理できておりません。ひとまずこれで一区切りとしたいと思います。
コメント等ございましたら、どうぞ遠慮なくお寄せ下さいませ。
» 続きを読む
09/07: プログラマ考 その9
さて、これまでの8回の連載で、世のプログラマが置かれている状況がお分かり頂けたと思います。では、この状況を改善するためにはどうすればよいか、考察してみます。
個人的に諸悪の根源と考えているのは、組織におけるプログラマのキャリアパスが適切に設定されていないことです。プログラマは、開発の最前線でゴリゴリとプログラムを実装してこそ存在価値があります。しかしながらどういう訳か、キャリアを積んで昇進することと、管理側になる(現場から離れる)ことがイコールになっていることが非常に多いです。なぜ、昇進すると現場から離れなければならないのでしょう?
» 続きを読む
09/06: プログラマ考 その8
ようやく「時間、金、人」の最後、「人」です。その5では「人=能力」としましたが、ちょっと路線を変更したいと思います。
CGIでお馴染のプログラミング言語Perl[W]の産みの親であるLarry Wall氏は、著書『Programming Perl』の中でこのように書いています;
We will encourage you to develop the three great virtues of a programmer: Laziness, Impatience, and Hubris.
プログラマの三大美徳は「無精、短気、傲慢」だと言うのです。これまた字面だけで理解しようとすると誤解を招きそうですが、その中身を見てみれば納得できることと思います。
» 続きを読む
09/05: プログラマ考 その7
次に「時間、金、人」の「金」についてです。ここでは、「金≒報酬≒評価」として、プログラマの評価について扱おうと思います。
技術が売りの弊社においては有り得ない話ですが、一般に、IT系組織におけるプログラマの評価は低いです。これにはいくつかの要因があります。
» 続きを読む
09/02: プログラマ考 その6
まずは「時間、金、人」の最初の「時間」についてです。
システム開発に着手する場合、どの程度の機能をいつまでに実現する、というスケジュールが設定されます。あらゆるリソースは有限なのですから、当然のことです。
» 続きを読む
09/01: プログラマ考 その5
ここまで駆け足でしたが、プログラマの仕事について書いてきました。内容はおそらく想定の範囲内だったことと思いますが、ここからがこの『プログラマ考』の本題になります。
本シリーズの初回、『プログラマ考 その1』にて以下のように書きました;
しかしながら、現実のプログラマという職業は、外から想像しているほど華やかではありません。その実体は、結構悲惨なものです。
しかし、その2からその4まで読まれても、そのような印象は受けなかったと思います。なぜなら、そこに「時間と金と人」という非常に重要な要素を含めなかったからです。かなり乱暴ですが、「時間→スケジュール、金→評価、人→能力」としておきます。次回から、これらの要素を交えつつ考察してみたいと思います。

