Perlを中心とした技術系の話などをつらつら

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 );

Posted by horiuchi at 12:59 | Permalink | Comments (2) | TrackBack (0)

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するようにしたところ、エラーがでなくなりました。でも原因がよくわからないのがちょっと気持ち悪いです。だれかおしえてー。

Posted by horiuchi at 00:48 | Permalink | Comments (2) | TrackBack (0)

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)

Posted by horiuchi at 03:05 | Permalink | Comments (0) | TrackBack (0)

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を取得しようと試みます。どうやらこのファイルがないので・・・のあたりで、「ページが移動しました」のようなメッセージを表示するようです。/があるとないとで大違いなんですね。

Posted by horiuchi at 00:26 | Permalink | Comments (2) | TrackBack (0)

2004年11月21日

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には非常に注目しています。

Posted by horiuchi at 22:13 | Permalink | Comments (0) | TrackBack (0)

2004年11月20日

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

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

よくよく考えてみると僕もファミコンのパスワードって結構頭に残ってます。すぐに浮かんできたのが「とうきょうとたいとうくこまがたばんだいのがんぐだいさんぶのほし」。確か「聖闘士星矢 黄金伝説」のパスワードでこれを入力すると最強の状態でゲームをスタートできたような。

あとは「ぺぺぺぺぺぺぺ・・・べべべべべべ・・・」。「キャプテン翼」のパスワードでこれもかなり強い状態で始めることができたはず。かなりうろ覚えですがこのパスワードだと立花兄弟のレベルが低くて使い物にならなかったような。。

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

Posted by horiuchi at 23:16 | Permalink | Comments (2) | TrackBack (0)

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でもテストに通りました。

Posted by horiuchi at 14:47 | Permalink | Comments (0) | TrackBack (0)

2004年11月11日

Foo-conf.plの使い方

SledgeでConfigファイルを読み込む際、環境変数SLEDGE_CONFIG_NAMEが設定されていないと、/etc/Foo-conf.pl(Fooはプロジェクト名)というファイルが実行されるんですが、このファイルには接直SLEDGE_CONFIG_NAMEを設定するような記述を書いておくんだそうです。具体的には以下のような記述を書いておきます。

$ENV{SLEDGE_CONFIG_NAME} = 'staging';
 1;

またhttpd.confに以下のような記述を書くことで同様のことを実現できます。

PerlSetEnv SLEDGE_CONFIG_NAME production

こちらを使う方がなにかと便利なので、実際にはFoo-conf.plを作成することはほとんどないかもしれませんね。

実はFoo-conf.plが何に使われるのかわかっていなくて、miyagawaさんに直接聞いてしまったんですが、Sledge::Doc::Installにこのファイルに関することが書いてあったのに後で気づきました。。Docに書いてあるのに親切に答えて頂いたmiyagawaさん、ありがとうございました。感謝です。

Posted by horiuchi at 09:28 | Permalink | Comments (0) | TrackBack (0)

2004年11月10日

Template::Plugin::Dumper

search.cpan.org: Template::Plugin::Dumper - Plugin interface to Data::Dumper

テンプレート内のパラメータをダンプするためのTTプラグイン。TT標準のプラグインなのに今まで使ったことありませんでした。普段はwarn Dumperで事足りるんですが、テンプレート内で演算なんかしたときのデータを確認したいときなんかに使えますね。というか今までこのプラグインに気づかなくてうかつ。

Posted by horiuchi at 21:58 | Permalink | Comments (0) | TrackBack (0)

2004年11月05日

最もセキュアなOSはBSDとMac OS X

ITmedia エンタープライズ:最もセキュアなOSはBSDとMac OS X――mi2g調査

最もセキュアなOSはBSDとMac OS X。これって単純に普及してないからねらわれにくいってのもあるんじゃないですかねー。それにもっと重要なのはサーバの管理をどれだけちゃんとやるかってことだと思います。

Posted by horiuchi at 10:04 | Permalink | Comments (0) | TrackBack (0)

2004年11月03日

コメントスパム対策をしました。

数日前にコメントスパム対策としてmt-comment.cgiの名前を変更したんですが、全く効果がなかったので、別の対策を行うことにしました。

他のブログはどんな対策をしているかみてみると、

  • TypeKeyを使う
  • 連続投稿できる間隔を設定
  • 日本語が含まれていないコメントをブロック
  • BanリストによるIP制限

というような方法が一般的みたいです。それぞれの方法をみてみると、TypeKeyは普通にコメント書きたい人にも一手間かけてしまうのがちょっとと思うし、連続投稿できる間隔の設定というのも一回は書き込まれてしまうし、Banリストは作成するのがめんどいしということでいまいち。

そこで今回は日本語が含まれていないコメントをブロックするという方法を少し発展させて全角ひらがなが連続するm文字が、n箇所以上無いコメントはスパムとみなすという対策をとることにしました。

今回修正したファイルはMT::App::CommentsとMT::L10N::jaの2つです。モジュールを直接いじるとMTをバージョンアップするときなんかに困ることになりそうなんで、プラグインとして書こう思ったんですが、プラグインの作り方を調べるのがめんどくさくなって、直接修正に妥協しちゃいました。。

この修正で、ひらがなが3文字連続している部分が2箇所以上ないコメントをPostした場合、エラーメッセージを表示するようになりました。軽くテストしましたがきちんと動いているみたい。

以下のコードをMT::App::Commentsのpostメソッドの上の方に追加し、MT::L10N::jaの%Lexiconに日本語エラーメッセージを追加しました。

my ( $m, $n ) = ( 3, 2 ); # ひらがなの文字数, 出現する回数
my $enc = $app->{cfg}->PublishCharset || '';
my $text = MT::I18N::encode_text($q->param('text'), $enc, 'euc');
my @count = $text =~ /(?:\xA4[\xA1-\xF3]){$m,}/g;
return $app->handle_error($app->translate(
    "Your comment looks like a spam.[_1][_2]", $m, $n ))
if $text ne "" && scalar (@count) < $n;

Posted by horiuchi at 21:42 | Permalink | Comments (2) | TrackBack (1)

2004年11月02日

DBD::mysql2.9005_3

DBD::mysqlがバージョンアップしたみたいです。変更点はこんな感じです。

  • DBI1.43が必要になった。
  • $dbh->last_insert_id()が使えるようになった。
  • mysql_unsafe_bind_type_guessingオプションをセットすると数字っぽいスカラー値を数字として扱い、クオートしない。(自己責任で使ってね。)
  • 最近のmysqlでカラムが壊れるのを修正した。
  • Makefile.PL実行時、5.008ではLANGがCに設定されてない場合、文句を言ってCに変えまて実行します。

うーむ、カラムが壊れるって何でしょうか。。

以下実際のChangelogです。

2004-10-27 Rudolf Lippan (2.9005_3)

  • Removed requirement that mysql.mtest be included in the distribution.
  • DBI 1.43 is required -- It is needed for support of $dbh->last_insert_id().
  • Added $dbh->{mysql_unsafe_bind_type_guessing} = 2 which will look at each bind_param and make guess based on whether it looks like a number, and if the parameter looks like a number, it will not be quoted. [thanks to dragonchild for cleaning up the initial rough draft impementation making it ready for prime time]
  • Applied patch to fix column which broke with later version of mysql [Tim Bunce]
  • Merged $dbh->last_inert_id() from the 3.0 dev tree
  • If you are using perl 5.008 without a $ENV{LANG} of "C". Makefile.PL will now 1. Complain loudly, and 2. set LANG to "C" and then exec itself with the new lang setting.
  • Added '$dbh->{mysql_unsafe_bind_type_guessing}'. When this flag is enabled any scalar that is passed to execute() and was used innumeric context will be treated as a number when being sent to the database backend. This can be a secuity problem in that if you use a string in numeric context, it will NOT be quoted before being passed to the database -- use at your own risk. The default is off.
  • fixed typo in pod changing failed_auto_reconnects_failed to auto_reconnects_failed [Paul DuBois ]

Posted by horiuchi at 09:49 | Permalink | Comments (0) | TrackBack (0)

2004年11月01日

[求人] WEBプログラマ(Perl)を募集しています。

僕の働いている会社でperlプログラマを募集しています。平均年齢が若く、おもしろい意見なら誰の意見でも取り入れられるような働きやすい職場だと思います。一緒にWebアプリケーション開発してみませんか?興味を持たれた方はお気軽にご連絡下さい。

  • 職種
    • WEBプログラマ(Perl)
  • 雇用形態
    • 正社員
  • 応募資格
    • 18歳~30歳くらいまで
  • 必須のスキル
    • プログラミングが好きだ
    • Perlを使ってWEBアプリ(掲示板など)を開発したことがある
    • UNIXのコマンドをある程度理解している
    • 基本的なHTMLを理解している
  • 歓迎するスキル
    • DB(MySQL、PostgreSQL)を扱える
    • mod_perlを利用した開発経験がある
    • Sledgeを利用した開発経験がある
    • 自宅でサーバを運用している
  • 仕事内容
    • 自社のASPサービス開発、運用やシステムの受託開発など。1プロジェクト当たり、1人もしくは2人程度でPerl,DBを駆使した開発を行います。主な開発環境はLinux+Apche+mod_perl+MySQLです。スキルアップに貪欲で、責任をもって業務に取組んでくださる方からのご応募をお待ちしております。
  • 勤務時間
    • フレックス制 コアタイム 11:00~17:00
  • 待遇
    • 月20万円~(年齢・能力・経験を考慮の上、面談により決定)
    • 交通費全額支給
    • 完全週休2日制(土・日)
  • 勤務地
  • 連絡先

Posted by horiuchi at 11:27 | Permalink | Comments (0) | TrackBack (0)