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