Perl で、画像のサムネイルを作成してブラウザから表示させる方法
#!/usr/bin/perl
use GD;
#!/usr/bin/perl
use GD;
バックアップのためにリモートのサーバにファイルをコピー(アップロード)したい。
そんな欲求が私の中に生まれた。Linux ではファイルを ssh でコピーするのに scp というコマンドがあるので、早速試してみたのは Net::SCP という Perl のモジュールなのだが、なぜかこのモジュールのメソッドにはパスワードを指定するものがない。ホスト名とユーザー名しか指定しないのだ。ではパスワードはどこにいった?
#!/usr/bin/perl
my $num = 123456789;
print comman($num);
sub comma {
local($_) = @_;
1 while s/(.*\d)(\d\d\d)/$1,$2/;
$_;
}
1;
オープンソースで迷惑メールの処理するソフトといえば SpamAssassin (直訳するとスパム暗殺者)が有名だ。何しろ spamassassin.apache.org というサイト名からも分かるとおり、Apache Foundation 謹製なのだ。
その SpamAssassin、Perl で書かれている。なので当然 Perl のライブラリが用意されており、Perl 使いの人は簡単に自身のプログラム中から呼び出すことができる。SpamAssassin 自体はメールサーバのフロントエンドで、Procmail なんかと一緒に使うことが多いだろうから、あまり自身のプログラム中から呼び出すようなことはないとは思うのだが、何かのときに役に立つかもしれないから、とりあえず以下にサンプルを載せておこう(というかこのサイトのすべての内容自体、自分のためのメモなのでご了承を)。
LWP::UserAgent を使うのだが、以下のコードで太字の行がポイント。
使用するモジュール
use LWP::UserAgent;
コード
#!/usr/bin/perl
use LWP::UserAgent;
our $HOME_URL = 'ユーザー名とパスワード付きの URL';
our $USERNAME = '上記 URL にアクセスするためのユーザー名';
our $PASSWORD = '上記 URL にアクセスするためのパスワード';
$ua = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => $HOME_URL);
$req->authorization_basic($USERNAME, $PASSWORD);
print $ua->request($req)->as_string;
1;
IPA(独立行政法人情報処理推進機構)の「安全なウェブサイトの作り方」というドキュメントは、なかなかまとまっていて、良い。すべてのウェブアプリ開発者は目を通しておくべきだ。ここではこのドキュメントから注意点をピックアップしてまとめてみた。
<iframe src="https://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&ItemId=4873112028&AWSAccessKeyId=152ZP71KPB47XM09CS02&AssociateTag=twinklexxx-22&Operation=ItemLookup&IdType=ASIN&ContentType=text%2Fhtml&Version=2006-03-08&Page=1&ResponseGroup=ItemAttributes,Images,Offers&Style=https://perltips.twinkle.cc/amazon.xsl" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" height="180"></iframe> <iframe src="https://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&ItemId=4873112036&AWSAccessKeyId=152ZP71KPB47XM09CS02&AssociateTag=twinklexxx-22&Operation=ItemLookup&IdType=ASIN&ContentType=text%2Fhtml&Version=2006-03-08&Page=1&ResponseGroup=ItemAttributes,Images,Offers&Style=https://perltips.twinkle.cc/amazon.xsl" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" height="180"></iframe>
<iframe src="https://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&ItemId=4900900621&AWSAccessKeyId=152ZP71KPB47XM09CS02&AssociateTag=twinklexxx-22&Operation=ItemLookup&IdType=ASIN&ContentType=text%2Fhtml&Version=2006-03-08&Page=1&ResponseGroup=ItemAttributes,Images,Offers&Style=https://perltips.twinkle.cc/amazon.xsl" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" height="180"></iframe>
<iframe src="https://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&ItemId=4774130729&AWSAccessKeyId=152ZP71KPB47XM09CS02&AssociateTag=twinklexxx-22&Operation=ItemLookup&IdType=ASIN&ContentType=text%2Fhtml&Version=2006-03-08&Page=1&ResponseGroup=ItemAttributes,Images,Offers&Style=https://perltips.twinkle.cc/amazon.xsl" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" height="180"></iframe>
Updated:
2007/05/22
2006/09/22
2006/05/29
2005/02/01 00:30
ウェブページへのアクセスログを記録する方法は、いろいろな方法があると思う。もっとも簡単なのは Apache などのウェブサーバが自動的に記録するログをチェックすることで、これには何の手間もいらない。しかし、レンタルサーバなどでログが自由に扱えない場合はどうしたらいいのだろう?
そのひとつが、画像としてリンクされている Perl などの CGI を呼び出す方法だ。利用者に知られずこっそりとアクセスログを取るには 1x1 ピクセルの画像をそのウェブページの背景と共に表示してしまえば、そのウェブページのソースをチェックされない限り、ほとんどの場合は気づかれずにすむだろう。
そんなわけで、以下のように JavaScript と対応する Perl スクリプトで、アクセスログを記録する仕組みを作ってみた。ログの形式は Apache に準拠する(たぶん)。
たとえばテキストファイルに「a」などと書かれており、これが4ビットのビット列「1010」を表す場合、4ビットの2進数で表される値は、以下のようになるだろう。
0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
8: 1000
9: 1001
a: 1010
b: 1011
c: 1100
d: 1101
e: 1110
f: 1111
これら 0~f までの文字列を Perl で処理するには以下のようにする(以下のロジックでは、4ビットの場合、ビットの番号は、左から 4、3、2、1 としているので、各人の仕様で調整してください)。
#!/usr/bin/perl
our $data = 'a';
our $BIT_LENGTH = 4; # ビットの長さ
$data = hex($data);
$data = pack("C", $data);
my @data = unpack("C", $data);
my $mask = 0x00000001; # マスク
for(my $i = 1; $i <= $BIT_LENGTH; $i++) {
# if(~$data[0] & $mask) { # (注: on: 0 / off: 1 のとき、~$data[0] とする)
<pre>if( $data[0] & $mask) {
# ここに(マスクにヒット)ビットが立っているときの処理を書く
print "bit $i: 1\n";
} else {
# ここにビットが立っていないときの処理を書く
print "bit $i: 0\n";
}
$mask = $mask << 1;
}