January 11, 2006

少しばかりAjaxな辞書ツール作った。

英辞郎に飛ばすBookmarkletとかあるけども、あまりページを遷移したくないなぁ、という風に前から思っていた。

だって、何かの文章を読んでいるときに、一つわからない単語があって、Bookmarkletで訳を見るまではいいけども、その前の文章に戻ってきた際(戻るのもウザイ)、どこを読んでいたかわからなくなることがよくある。なので、ページの中に訳が出てきたらいいなぁ、なんて思ってみる。

Google Toolbarのマウスオーバー辞書ってのもあるんだけど、なんかひっかからないのが多くてちょっと嫌。イメージでは、こんな感じなんだけどなぁ。で、何かないかなぁ、と考えていたが、調べてもないので、ブログをやり始めた頃に考えていたものを自分で作ってみることにした。

仕組みは簡単なので、誰でも簡単に作ることができると思うけど、なんで無いのかなぁ。ドイツ語と英語のやつはあったのに。ということでおうちでプログラミング。まぁ、作るのめんどくせーな、と思ってたけども、少しだけやる気になってみた。まぁ、perlのお勉強ですわ。

で、作ったものが、Ajaxな英和/和英辞書。
って、別にAjaxでなくても、ボタンでポチットな、でよかったのだが。prototype.jsでも使ってみるか、と思っていてせっかくだったので、Ajaxな動きを取り入れてみた。

辞書ファイルは、EDICTを使用した。xyzzyでは、私も使っているけどもいい辞書ですね。そして、その辞書の検索には、私の学部時代の師匠が作った検索システムDiqtを使用させていただいた。で、それを学校の研究室のサーバにインストールをした。Diqtサーバは、そのまんま。XML RPCサーバにしてもいいかな、と思ったけどもとりあえず、自分のためだけのツールということでいじることは辞めた。気が向いたらするかも。

で、処理としては、JavaScriptで網掛け部分を取得し、マウスアップしたら網掛け部分をパラメータとしてリクエストを飛ばす。そのリクエストを受け取るサーバ(Diqtサーバのクライアント)は、受け取ったパラメータを加工して、DiqtサーバにHTTPリクエストを投げる。Diqtサーバからのレスポンスを、また少し加工して、JavaScriptのリクエストに対するレスポンスとして返す。そして、そのレスポンスを表示したい場所に入れる、と。

これで、網掛けに選択した言葉を瞬時に同じページに出力することができた。Ajaxの使用用途でこれは、間違ってないかな。あまり鬱陶しいインタフェースは使ってないし。ただ、リクエスト飛ばしすぎになってしまうのではないか、とちょっと思ってみる。

で、早速、このツールを自分のブログに当てはめてみる。どこでもいいが、選択すると、もし選択した単語に対応する訳があれば、それを右のメニューのDYNAMIC DIQTの下に出力する。半角英数を選択すれば、訳は日本語で。日本語を選択すれば、訳は英語が出るようにした。まぁ、悪くないね。もう少し整理したら、簡単なやり方とサンプルを MY WORKに置こうかな。

つか、なんで、Diqtサーバが別の環境を使っているかというと、今のレンタルサーバでは、容量50Mだし、Cで書かれたCGIスクリプトとか動かないだろうから。別にサーバに余裕があって、いろいろインストールできるのだったら、同じサーバでもいいか。

うーん。でも、こんなもの作りなんてすぐ終わっちゃうよね。もう少し規模の大きめなものを作りたいなぁ。
まぁ、CPANのLWP, TokeParserの使い方を勉強したから、これはこれでいいか。

つか、絵を描かないと、文章だけじゃ何を言っているかわからんかな。
(more…)

January 7, 2006

Jcodeのメモと久しぶりのPerlデビュー

実は、初めてのPerlのエントリー。つか、普段からPerl使わないし。でも、使っているレンタルサーバでは、CGIの使用は許されているので、Perlを使ってみることにする。PHPはダメ動かなさそう。

つか、そもそもCGIが動くと聞いているだけで、厳密にはperlだけとは限らないような気もするが、rubyでもCでもpythonでも、PHPでも、shでも、他の言語でもCGIスクリプトを書けばいいだけだが。

ええと、話がそれた。
ちょっと今簡単なスクリプトを書いているのよ。で、PHPでやれば速攻なのだが、ちょっとブログに組み込もうかな、と思って、あと、ちょっと気分転換をするためにPerlをいじっちゃったりしているわけ。で、私も日本人なので、日本語を使用せなあかんのよ。むかーし、Perlを使っていたころは、jcode.plを使用していたけど、最近は、Perlな世界にもOOPが流行りつつあるようで、CPANモジュールのJcodeを使用してみた。
まだ、深く読んでいないけど、ドキュメントは以下の通り。
Jcodel

でね。
コンストラクタで、

    $j = Jcode->new($str [, $icode]);

とか書いてあるんだけど、これって$icodeを書かなくてもいいってことだから、書かなかったのよ。そしたら、なんか特定の文字で、文字化けしているんだね。
ソースでは、

    my $phrase = Jcode->new($params{'phrase'})->euc;

って感じでやってたら、「よう」とか、難しい漢字とか化けちゃって変換されないの。まぁ、PHPのmb_detect_encodingのも文字コードの判別にバグがあるから、こっちもあるのかな、って思って少しばかりあきらめつつ、ドキュメント読んでみたら、どの文字コードからということで、$icodeを指定できたので、次のように変更したらできた。

    my $phrase = Jcode->new($params{'phrase'},'utf8')->euc;

うーん。なるほどね。自動判別だとばかり思っていたけど、ちゃんと書かないといけないのね。

しかし、久しぶりにPerlを触るとなんだかめんどくさいね。PHPに慣れちゃって。昔なんて汚いコード書いていてCPANなんて使ったことなかったけど、せっかくライブラリあるし、自分で書くより洗練されているから使った方がいいよね。でも、なんだかPHPのPEARとPECLの両方の側面を持っていて、ちょっと嫌。Pure Perlで書かれたものでないとインストールで躓いちゃうから。

自分のサーバならインストール楽だけど、レンタルサーバだからインストールできなくて、FTPしか使えないかし。。。いくつかは、Pure Perlで書かれていて、パスが通るところに置けば動くみたいだけど、結構使いたいなぁ、と思うのは、ダメだったりするのだ。つーか、PHPのPEARだったら、インクルードパスに全部置いちゃえば、そこで使えただけに、ちょっとCPAN使いにくいなぁ、と思ってみる。ほとんど使ってないから、知らないだけかも。
(more…)

Bloglines feedburner