2008-03-01

自作の Google ガジェットが Google ディレクトリに登録されました

郵便番号から住所を検索する Google ガジェットを作ってみました
入力した郵便番号の住所、フリガナ、緯度経度を表示する Google ガジェットを作ってみました。Add to Google ボタンをクリックして、あなたの iGoogle に追加できます。
↑以前に自作した Google ガジェットが Google ディレクトリに登録されました。今後は、みなさんの iGoogle のコンテンツを追加リンクをたどって、この Google ガジェットを追加できます。

ここでは、自作の Google ガジェットを Google ディレクトリに登録する手順を紹介します。

Google ガジェットをただ動かすだけなら、ごく限られたメタ情報だけ指定すればよいのですが、Google ディレクトリに公開するには、より多くのメタ情報 を付与する必要があります。

自作した Google ガジェットのメタ情報(ModulePrefs 要素)は、次のとおりです。実際にこのメタ情報で Google ディレクトリに登録できましたので、これから登録しようとするときのテンプレートとして使えると思います。
<ModulePrefs 
title="郵便番号から住所を検索する"
description="指定した郵便番号の住所、フリガナ、緯度経度を表示するガジェットです。"
author="nakajiman"
author_email="nakajiman(at)lrlab.to"
screenshot="http://developmentor.lrlab.to/postal/gadgets/lookup_screenshot.gif"
thumbnail="http://developmentor.lrlab.to/postal/gadgets/lookup_thumbnail.gif"
author_location="Yokohama, Kanagawa, Japan"
author_affiliation="LEARNING RESOURCE LAB"
title_url="http://developmentor.lrlab.to/postal/"
>
</ModulePrefs>
Google ディレクトリに登録すると、一般に広く公開することになるからでしょうか、作者に関するメタ情報を要求します。といっても、その作者が実在するかどうかを確認するステップはありませんので、個人を特定できるような情報までは付与する必要はないようです。

特に作者のメールアドレスについては Google 自身が 任意の電子メール システムを使用できますが、スパム対策のため個人用の電子メール アドレスは使用しないでください。 といった説明をしているくらいです。ですので、何かあったときに連絡がとれるようなヒントになっていればよいわけで、私の場合は、メールアドレスの @ を (at) と表記しています。

あとは Google ガジェット自体の XML ファイル以外に、Google ガジェットを紹介するページに表示するスクリーンショット画像と、Google ディレクトリの一覧に表示するサムネイル画像を要求します。その画像が表示される様子は、後述のスクリーンキャプチャを参考にしてください。

準備ができたら、自作した Google ガジェットを Google ディレクトリに登録するための申請をします。といっても簡単で、Google ガジェットの XML ファイルの URL を Google に送信する だけです。これでおしまいです。

申請してから 5日ほどで、次のように Google ディレクトリに登録されて、閲覧できるようになしました。ただし、この時点ではまだ iGoogle のコンテンツを追加のリンクからたどることはできませんでした。



申請してから 7日ほど(Google ディレクトリに登録されてから 2日後)で、次のように iGoogle のコンテンツを追加のリンクからたどったり、検索できるようになりました。



Google のサービスは、基本的に機械処理するとよく聞いていますので、その中で 1週間という期間はかなり長いですね。もしかすると、Google ガジェットの申請手続きの一部は、人手が介入しているような気にもさせます。

といったように、自作した Google ガジェットは、簡単な手続きで Google ディレクトリに公開できます。一般に広く見てもらえ、使ってもらえるこれ以上のチャネルはないと思いますので、Google ガジェットを作ったなら、Google ディレクトリに公開してみてはどうでしょうか。

そうそう。忘れていました。ここでは Google ガジェットがどういうもので、どう作るのか紹介しませんでした。Google ガジェットの XML ファイル を見ると、その雰囲気がつかめると思います。

Vista、Google、Yahoo! 対応 ガジェットプログラミングのためのJavaScript入門Vista、Google、Yahoo! 対応 ガジェットプログラミングのためのJavaScript入門
アスキー書籍編集部

Googleガジェットプログラミング入門 Windows Vistaガジェットプログラミング JavaScriptで作るVistaガジェット GIZMO Programmer’s Bible―FLASHによるガジェット開発 まるごとJavaScript & Ajax ! Vol.1

by G-Tools

2008-02-20

JavaScriptを面白いと思った思い出

昔話になりますが社会人になる前にJavaScriptにはまった時期がありました。
そのきっかけとなったコードを思い出したので書いておきます。

alert(new new new Function("return function(){arguments.callee.prototype.toString = function(){return 'aiueo'}}"));

これを実行するとポップアップウインドウに「aiueo」と表示されます。newを三回連続でしているところに当時感動した記憶があります。98年か99年頃にネット上でこのコードに出会って「JavaScriptって面白そう」と思い、それから1年程の間JavaScriptを書いていました。
またJavaScriptは当時流行っていたJavaと違うヘンテコなオブジェクト指向(※)だったお陰で、オブジェクト指向に対して柔軟な思考を持つことができたことに今でも感謝しています。

っと、まぁどうでもいい昔話なんですが私の様にこのコードに触発される方がいれば嬉しいなぁと思う今日この頃です。

(※今だとプロトタイプベースオブジェクト指向と呼ぶようです)

2008-02-19

JiffieでIEを操作する

最近、Jiffieなるライブラリの存在を知りました。Java InterFace For Internet Explorerの略でJNIを介してIEをJavaから操作することができます。
ここから実行ファイルをDLして次のJavaプログラムを書いて実行すると、IEが起動して「aiueo」をキーワードにGoogle検索します。

//IEを起動してGoogleを表示する
InternetExplorer ie = new InternetExplorer();
ie.setVisible(true);
ie.navigate("http://www.google.co.jp/");
ie.waitWhileBusy();

//入力ボックスに「aiueo」と入力して送信する
IHTMLDocument2 doc = ie.getDocument(true);
IHTMLInputElement input = doc.getElementByName("q");
input.setValue("aiueo");
IHTMLFormElement form = input.getForm();
form.submit(true);

//検索結果を10秒表示後、終了する。
Thread.sleep(10000);
ie.quit();

Jiffieは基本的なIEの操作以外にも、ページの読み込みやDLなどをハンドリングすることもできます。またJiffieUtility#executeScript()を使って外からスクリプトを実行することも可能です。java.awt.Robotと合わせて使うことで、場面場面の画面キャプチャを撮りながらテストを実行するなんてこともできます。

こういったブラウザ操作の自動化はSeleniumなどの既存のツールで大半のことができてしまうので需要は少ないと思いますが既存のツールで要件を満たせないような場合に役に立つかもしれません。

2008-02-10

Perl split は文字列の末尾が分割記号だと省略してしまう

Perl split は、文字列の末尾が分割記号だと、省略してしまうので、不便だなぁと感じ続けてきたのですが、
my @path = split('/', '/users/nakajiman/places/');

('', 'users', 'nakajiman', 'places')
なんと、LIMIT にマイナス値を指定して、省略しないように指示ができたのですね。
my @path = split('/', '/users/nakajiman/places/', -1);

('', 'users', 'nakajiman', 'places', '')
何年もの間、ず~と知らずに過ごしてきました。ちょっと恥ずかしい。

Perl Hacks ―プロが教えるテクニック & ツール101選Perl Hacks ―プロが教えるテクニック & ツール101選
chromatic Damian Conway Curtis "Ovid" Poe

Perlベストプラクティス 実用Perlプログラミング まるごとJavaScript & Ajax ! Vol.1 まるごとPerl! Vol.1 プログラミングPerl〈VOLUME1〉

by G-Tools

2008-02-09

Perl CGI.pm で PUT を POST に見立てる方法?

Perl CGI.pm を使って application/atom+xml;type=entry なデータを POST と PUT で取得しようと思ったら、なんと PUT だと POSTDATA が取得できないじゃないですか。

次のブログを読んでみると、CGI.pm は HEAD、GET、POST にしか対応していないようですね。しかも、外部からコードの振る舞いを変えるような仕組みにはなっていないようです。ちょっと困りました。

CGI.pmでtext/xmlなPOSTデータを読みたい場合 : blog.nomadscafe.jp
CGI.pm の POSTDATA - naoyaのはてなダイアリー

しかたがないので、次のように PUT のときは POST として、CGI.pm を騙す方法で使ってみています。
my $m = $ENV{'REQUEST_METHOD'};
if ($m eq 'PUT') {
$ENV{'REQUEST_METHOD'} = 'POST';
}
my $cgi = CGI->new;
$ENV{'REQUEST_METHOD'} = $m;
なんかイマイチですけれど、CGI.pm のソースコードを見る限り、期待どおり動作してくれるように見えます。また、実際に試行していますが、今のところ不都合はないようです。

CGI.pm のバージョンは、次のとおりでした。ちょっと古めのものかもしれません。
$CGI::revision = '$Id: CGI.pm,v 1.208 2006/04/23 14:25:14 lstein Exp $';
$CGI::VERSION='3.20';
この対策は、バージョンや環境に依存するかもしれませんし、見つけていない不都合があるかもしれません。使おうとするときは、十分な検証をお願いしますね。

RESTful WebサービスRESTful Webサービス
Leonard Richardson Sam Ruby 山本 陽平

WEB+DB PRESS Vol.42 アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣 RailsによるアジャイルWebアプリケーション開発 第2版 Statistics Hacks ―統計の基本と世界を測るテクニック WEB+DB PRESS Vol.41

by G-Tools

Windows Update で IE7 が自動インストールされないようにしておく

2月の中頃からだったでしょうか。Windows Update の優先度の高い更新プログラムとして Internet Explorer 7 (IE7) が配布される予定になっています。

開発した WEB サイトの動作チェックのため、Internet Explorer 6 (IE6) を維持しておきたいので、Microsoft が配布している 自動配布の無効化ツールキット (Blocker Toolkit) を使って、IE7 が誤って自動インストールされないようにしてみました。

IE7BlockerToolkit_0816.exe をダウンロードして実行すると、いくつかのファイルが C:\Windows\Temp に解凍されます。そして、そのプログラムを、次のようにコマンドプロンプトから実行します。これだけです。
C:\WINDOWS\TEMP\IE7BLO~1>IE70Blocker.cmd /B
MICROSOFT TOOL KIT TO DISABLE DELIVERY OF
MICROSOFT INTERNET EXPLORER 7

Copyright (C) Microsoft Corporation. All rights reserved.

Blocking deployment of Internet Explorer 7.0 on the local machine

操作は正しく終了しました

C:\WINDOWS\TEMP\IE7BLO~1>
これで Windows Update によって IE7 の自動インストール(または高速インストール)が無効になるようです。有効に機能するかどうかは、実際に IE7 の配布が始まってみないとわかりませんね。

WindowsXP カスタマイズ読本 (IDGムックシリーズ)WindowsXP カスタマイズ読本 (IDGムックシリーズ)
月刊Windows Server World編集部

Windows Server World (ウィンドウズ・サーバー・ワールド) 2008年 03月号 [雑誌] Windows Server World (ウィンドウズ・サーバー・ワールド) 2007年 11月号 [雑誌] Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ) Windows Vista World Vol.1 (IDGムックシリーズ) 数学ガール

by G-Tools

2008-01-31

IEは特定条件下でoffsetTopの値がおかしくなる

JavaScriptのoffset計算について調査していたところIEのoffsetTop値がおかしいことに気づきました(Firefox、Opera、Safariは問題無し)。試しにjQueryプラグインのDimensionsでも試してみたところ、こちらも正確なoffsetTop値を算出できないようです。

内容を説明するとbody要素(青色の枠)の中に三つのdiv要素(緑、黄、赤色の枠)をネストさせたHTMLを用意します。



これらの要素には次のスタイルを適用しています。

body {
  background: #EEEEEE;
  overflow: hidden;
  border: 20px blue solid;
  margin: 10px;
  padding: 5px;
}
#d1 {
  border: 20px green solid;
  margin: 18px;
  padding: 5px;
}
#d2 {
  border: 20px yellow solid;
  margin: 10px;
  padding: 5px;
}
#d3 {
  border: 20px red solid;
  margin: 10px;
  padding: 5px;
}

この時、赤枠のdiv要素(d3)のoffsetTop値を求めたところ、88となるところが73となってしまいました。原因を調べたところ緑枠のmargin-top-width値がoffsetTopに加算されていない事がわかりました。さらに調べたところmargin-top-width値が1~15までは加算されず、16以上は加算されることが分かりました。

またこの事象はbody要素と緑枠のdiv要素の間にp要素を入れても発生するのですが、table要素(下記イメージ)を入れると今度は正しい値を返します。事象が発生する要素とそうでない要素のパターンはまだ整理できていない状態です。



IEの内部ではoffsetTop値の算出にどんなことをしているのか気になる今日この頃です。