2004年11月30日火曜日

Sledge::Plugin::SaveUploadImage

フォームからアップロードされた画像を指定の形式に保存するためのSledgeプラグインを書いてみました。

Sledge::Plugin::SaveUploadImage

自分のPagesクラスでuseすると、各画像フォーマット保存用に用意したsave_as_jpg, save_as_gif, save_as_pngがアップロードオブジェクトにインポートされます。save_as_xxxメソッドは引数に保存先のディレクトリのみ指定した場合は保存するファイル名を自動的に決定してくれるので、テンポラリーファイルを保存する際にいちいちテンポラリファイル名を考えるのが面倒くさいと思っていた人にとっては便利かなーと思います。
こんな感じに使います。

>

package Your::Pages;
use Sledge::Plugin::SaveUploadImage;

my $upload = $self->r->upload('upload_file');
my $filename = $upload->save_as_jpg( $save_dir );
<


2004年11月29日月曜日

Amazonウェブサービスで遊んでみました。

今週末はAmazonウェブサービスをいじってました。それでできたのがこれです。
hori-uchi.com: AWS Keyword Search
SledgeとNet::Amazonを使って作り、mod_perlで動かしています。単純な検索アプリです。ちなみに検索結果のリンクには僕のアフィリエイトIDが入ってますのでここから買ってもらえると僕がすこししあわせになりれます(笑)。

それにしてもNet::Amazon便利すぎです。RESTでどうこうとかXMLがなんたらとか全く意識しないでAmazonウェブサービスを利用できちゃいます。この部分の実装はほんとに一瞬でできてしまいました。

しかーし、Net::Amazonのおかげでこのまま順調にいくかと思いきや、別のところではまってしまいました。。
CGI環境で動かすと問題ないんですが、mod_perlにすると、以下のようなエラーがたまにでてしまうんです。

>

Use of uninitialized value in subroutine entry at /usr/local/lib/perl5/site_perl/5.8.5/Log/Log4perl.pm line 122.
[Sun Nov 28 20:37:21 2004] [error] Undefined subroutine &main:: called at /usr/local/lib/perl5/site_perl/5.8.5/Log/Log4perl.
pm line 122.\n
<

結構悩みましたが、Log::Log4perlをuseする時点でたまにエラーがでているようなので、apacheの起動時にuseするようにしたところ、エラーがでなくなりました。でも原因がよくわからないのがちょっと気持ち悪いです。だれかおしえてー。


2004年11月28日日曜日

perl 5.6 -> 5.8 on FreeBSD

今日はNet::Amazonをいじっていたんですが、XMLいじるならperlのバージョンは5.8系がいいよねとふと思い立ち、テスト用のFreeBSDサーバのperlのバージョンを5.6.1から5.8.5にアップしてみました。

とりあえず、/usr/ports/lang/perl5.8に移動してmakeしてみるとすんなりOK。問題あればエラーでこけるだろうとmake installも実行。。すんなりインストール完了。とっても簡単。(本当はportupgrade -o lang/perl5.8 -f perl-5.6.1_15 とやるのが正解みたいです。。)
>

# cd /usr/ports/lang/perl5.8
# make
# make install clean
<

次にシステムにperl5.8.5がインストールされたよということを知らせるためにuse.perlコマンドを実行しました。
>

# use.perl port
<

次にperlを使っている他のports達に5.8になりましたよと伝る作業を行いました。これにはワイルドカードが使えるportupgageを使うのが簡単です。これはインストールされているperlモジュールを5.8用にアップグレードするコマンドです。
>

# portupgrade -f p5-\*
<

さらにmod_perlもインストールし直しました。これでだいたいOKだと思います。後は何か問題が起こったらその場で対応ということにします。

今回の作業を行うに当たり、下記のサイトを参考にさせて頂きました。
SpamAssassinの導入設定メモ. [FreeBSD](fkimura.com)



2004年11月25日木曜日

iモード向けサイトでリダイレクト使う際は最後の/に注意

今日iモード向けのコンテンツで、QVGA端末かQQVGA端末かを判別して各端末用のページにリダイレクトするというスクリプトを書いたんですが、リダイレクトする際に必ず「ページが移動しました」のようなメッセージがでてしまうという現象に出くわしました。
今まで同じようなスクリプトを書いたときにはこんな現象が起きたことがなかったので、一瞬とまどいましたが、原因はなんてことなく、Locationで指定した飛び先のURLの最後に/(スラッシュ)がついていなかったからでした。
たとえば、http://hori-uchi.com/qvga/index.htmlにリダイレクトさせたくて、
>
print "Location: http://hori-uchi.com/qvga";
print "\n\n";
<
と記述すると、携帯のブラウザではまずhori-uchi.comの/qvgaというファイルを見に来るのですが、そのファイルがないので(ディレクトリなので)、次に/qvga/index.htmlを取得しようと試みます。どうやらこのファイルがないので・・・のあたりで、「ページが移動しました」のようなメッセージを表示するようです。/があるとないとで大違いなんですね。

2004年11月22日月曜日

Koders - ソースコード検索エンジン

Koders - Source Code Search Engine

>>
Koders is a search engine for source code. It enables developers to easily search and browse source code in thousands of projects hosted at hundreds of open source repositories.
<<

Kodersはソースコード検索エンジンで、オープンソースのプロジェクトのソースコードを対象に検索を行うことができるようです。Perlのコードも検索できますが、僕が試した限り、あまり役に立つようなコードがでてきませんでした。オープンソースのプロジェクトっていうとPerlは補助的に使われる程度でメインの言語ということがあまりないからでしょうか。
利用方法としては同じ単語、たとえば「mysql」などを検索キーとしてそれぞれの言語で検索を行い、各言語でDBの接続をどのように記述するのかをみて楽しんだりするなんてことはできそうです。

このソースコード検索エンジンですが、社内のサーバに設置して、社内のマシンに散乱しているソースコードを検索するのに使えるとすごーく便利だなーと思います。実はgonzuiというソフトでそういうことができそうなのでgonzuiには非常に注目しています。



2004年11月21日日曜日

とうきょうとたいとうく・・・

眞鍋かをりのここだけの話 powered by ココログ: いぬああいふきをよんでて思わずわらっちゃいました。『サラダの国のトマト姫』の二面のパスワードって。。

よくよく考えてみると僕もファミコンのパスワードって結構頭に残ってます。すぐに浮かんできたのが「とうきょうとたいとうくこまがたばんだいのがんぐだいさんぶのほし」。確か「聖闘士星矢 黄金伝説」のパスワードでこれを入力すると最強の状態でゲームをスタートできたような。
あとは「ぺぺぺぺぺぺぺ・・・べべべべべべ・・・」。「キャプテン翼」のパスワードでこれもかなり強い状態で始めることができたはず。かなりうろ覚えですがこのパスワードだと立花兄弟のレベルが低くて使い物にならなかったような。。

なんかとっても懐かしい気分になりました。



2004年11月15日月曜日

perl5.8.5でClass::Fieldがtestでこける

新しいサーバにSledgeをインストールしていたところ、Sledgeを動かすのに必要なモジュール、Class::Fieldがmake testでこけました。原因はperlのバージョンによるwarnningのメッセージの違いによるもののようなので、特に気にせずmake installしてしまってOKだと思います。

>
::ok( $warnings eq <<WARN,    'Improper use of fields & base warned about' );
Bar is inheriting from Foo but already has its own fields!
This will cause problems with pseudo-hashes.
Be sure you use base BEFORE declaring fields
WARN
<

ちなみにエラーがでていたコードは上の部分で「with pseudo-hashes」の部分を削除すれば5.8.5でもテストに通りました。