Perl で書かれた有名なシステム・ソフト

Perl は実際どんなところで使われているのだろう? という疑問から調べてみたら、そう多くはなかった。sourceforge.net での言語ごとのプロジェクト登録数を調べてみても、Java が C++ を抜き 1位であり、Perl は極端に少ない印象を受ける。システムとして動作する Perl でのシステム構築の例は、もっと探せばあるのかも知れないので、知っている人がいたら教えて欲しい。 ネットで調べていて気づいたのは Perl が使われてる大規模システムと思われるものはそのサイトがベンチャーからスタートしていること。ベンチャーなので最初は社長や CEO 自らがコードを書いてる。このパターンがもちろんすべてではないと思うが、「そのサイトで最初に使われていた言語が Perl で、結果的に大規模になった」例が多いのではないだろうか。ウェブサイトを開発するときのプロトタイプには Java よりも Perl の方が作りやすい場合もあるだろう。だから最初は Perl でそのままずっと Perl というのは Web 2.0 的なシステムであろう。自分たちでプロジェクトをコントロールできる場合は、言語は何でもアリなので Perl でもよいということだ。
Perl は実際どんなところで使われているのだろう? という疑問から調べてみたら、そう多くはなかった。sourceforge.net での言語ごとのプロジェクト登録数を調べてみても、Java が C++ を抜き 1位であり、Perl は極端に少ない印象を受ける。システムとして動作する Perl でのシステム構築の例は、もっと探せばあるのかも知れないので、知っている人がいたら教えて欲しい。 ネットで調べていて気づいたのは Perl が使われてる大規模システムと思われるものはそのサイトがベンチャーからスタートしていること。ベンチャーなので最初は社長や CEO 自らがコードを書いてる。このパターンがもちろんすべてではないと思うが、「そのサイトで最初に使われていた言語が Perl で、結果的に大規模になった」例が多いのではないだろうか。ウェブサイトを開発するときのプロトタイプには Java よりも Perl の方が作りやすい場合もあるだろう。だから最初は Perl でそのままずっと Perl というのは Web 2.0 的なシステムであろう。自分たちでプロジェクトをコントロールできる場合は、言語は何でもアリなので Perl でもよいということだ。
Posted on 2006-01-28 by yas |

Perl で、添付ファイル付きのメールを送る方法

Perl で、
open(SEND, '/usr/sbin/sendmail') || die;
などとせずにモジュールを使ってメールを送信するには、以下のようにする。 使用するモジュール
use Net::SMTP;
use MIME::Entity;
#!/usr/bin/perl

use Net::SMTP;
use MIME::Entity;

# Settings
our $SENDER          = '送信元のメールアドレス';
our $RECIPIENT       = '送信先のメールアドレス';
our $SUBJECT         = 'タイトル';
our $ATTACHED_FILE_1 = '/home/youraccount/添付ファイル名その1.jpg';
our $ATTACHED_FILE_2 = '/home/youraccount/添付ファイル名その2.jpg';

# Create object
my $smtp=Net::SMTP->new('localhost',
                        HELLO=>'yourmailsever.yourdomain.com');

# Built headers
$smtp->mail($SENDER);                 # Sender
$smtp->to  ($RECIPIENT);              # Receiver

# Built Data (Create data by MIME::Entity)
$smtp->data();
my $mime = MIME::Entity->build(
            From    =>    $SENDER   , # Sender   (data)
            To      =>    $RECIPIENT, # Receiver (data)
            Subject =>    $SUBJECT  , # Subject
            Data    => ['']);         # body

# Attached file
$mime->attach(
        Path     => $ATTACHED_FILE_1,
        Type     => 'image/jpeg',
        Encoding => 'Base64'
);

# Attached file
$mime->attach(
        Path     => $ATTACHED_FILE_2,
        Type     => 'image/jpeg',
        Encoding => 'Base64'
);

# Attached file (Text)
# $mime->attach(
#    Path     => $ATTACHED_FILE,
#    Type     => 'text/plain',
#    Encoding => '-SUGGEST'
#);

$smtp->datasend($mime->stringify); # transfer strings

# Data termination and send mail
$smtp->dataend();

#Quit SMTP connection
$smtp->quit;

# for debug
print "Sender    : $SENDER\n";
print "Recipient : $RECIPIENT\n";
print "Attached  : $ATTACHED_FILE\n";

1;
Perl で、
open(SEND, '/usr/sbin/sendmail') || die;
などとせずにモジュールを使ってメールを送信するには、以下のようにする。 使用するモジュール
use Net::SMTP;
use MIME::Entity;
#!/usr/bin/perl

use Net::SMTP;
use MIME::Entity;

# Settings
our $SENDER          = '送信元のメールアドレス';
our $RECIPIENT       = '送信先のメールアドレス';
our $SUBJECT         = 'タイトル';
our $ATTACHED_FILE_1 = '/home/youraccount/添付ファイル名その1.jpg';
our $ATTACHED_FILE_2 = '/home/youraccount/添付ファイル名その2.jpg';

# Create object
my $smtp=Net::SMTP->new('localhost',
                        HELLO=>'yourmailsever.yourdomain.com');

# Built headers
$smtp->mail($SENDER);                 # Sender
$smtp->to  ($RECIPIENT);              # Receiver

# Built Data (Create data by MIME::Entity)
$smtp->data();
my $mime = MIME::Entity->build(
            From    =>    $SENDER   , # Sender   (data)
            To      =>    $RECIPIENT, # Receiver (data)
            Subject =>    $SUBJECT  , # Subject
            Data    => ['']);         # body

# Attached file
$mime->attach(
        Path     => $ATTACHED_FILE_1,
        Type     => 'image/jpeg',
        Encoding => 'Base64'
);

# Attached file
$mime->attach(
        Path     => $ATTACHED_FILE_2,
        Type     => 'image/jpeg',
        Encoding => 'Base64'
);

# Attached file (Text)
# $mime->attach(
#    Path     => $ATTACHED_FILE,
#    Type     => 'text/plain',
#    Encoding => '-SUGGEST'
#);

$smtp->datasend($mime->stringify); # transfer strings

# Data termination and send mail
$smtp->dataend();

#Quit SMTP connection
$smtp->quit;

# for debug
print "Sender    : $SENDER\n";
print "Recipient : $RECIPIENT\n";
print "Attached  : $ATTACHED_FILE\n";

1;

Movable Type で、Google Sitemap に対応する方法

(Google Sitemap とは?) Google にキーワードを入力して検索結果が出てくるということは、あらかじめ Google に自分のサイトが登録されているということだ。それは、Google が日夜あなたのサイトを巡回して、ページを Google のシステムの中に貯めているからだ。ではなぜ Google は何億ページもの中から、あれだけ高速に検索結果を出せるのだろう? それには高速に情報を引き出す仕組みが必要となる。それが情報をすばやく検索するための「インデックス化」という仕組みで、検索対象のサイトにインデックスがあると、Google のシステムはは全てのサイトのページにあるキーワードをひとつひとつ探すことなく、高速に検索できるのだ。ちなみにインデックス化の仕組みは MySQL などのデータベースにも備わっているが、Google 自体は自身のインデックス化の仕組みを公開していない (CNET Japan の記事「Flash開発者を不安にさせるGoogle検索の落とし穴」参照)。 Google Sitemap とは、Google に登録する URL を Google に自ら教える仕組みである。これがないと Google はあなたのウェブサイトを勝手に巡回して Google 自身の判断で必要だと思った URL を登録する。ゆえに、Google Sitemap の仕組みを使えば登録して欲しい URL を Google に正確に教えることができるのである。 それではまずは、Google Sitemap に登録しよう → Google Sitemap (Movable Type で、Google Sitemap に対応する方法) 以下は Niall Kennedy's Weblog に書かれているものの翻訳である。
あなたのブラログの XML サイトマップを Google や他の検索エンジンに解析してもらうのは
とっても簡単。新しいインデックステンプレートを作成して以下のコードをコピーすればよい。
出力ファイルは sitemap.xml のような覚えやすい名前をつけておこう。
そのコードを貼り付けて新しいテンプレートファイルを保存してサイトを再構築すればよい。
以下は、Niall Kennedy's Weblog で提示されている方法に加えて、私の方でカテゴリの URL をサイトマップに加えるように手を加えた sitemap.xml の例である。
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84">
<url>
<loc><$MTBlogURL encode_xml="1"$></loc>
<priority>1.0</priority>
</url>
<MTEntries lastn="9999">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
</url>
</MTEntries>
<font color="blue"><MTCategories><MTIfNonZero tag="MTCategoryCount">
<url><loc><$MTCategoryArchiveLink encode_xml="1"$></loc></url>
</MTIfNonZero></MTCategories></font>
</urlset>
最後に、Google Sitemap のサイトにこのファイルを置いた URL (例えば、https://yourdomain.com/sitemap.xml/) を登録すればよい。
(Google Sitemap とは?) Google にキーワードを入力して検索結果が出てくるということは、あらかじめ Google に自分のサイトが登録されているということだ。それは、Google が日夜あなたのサイトを巡回して、ページを Google のシステムの中に貯めているからだ。ではなぜ Google は何億ページもの中から、あれだけ高速に検索結果を出せるのだろう? それには高速に情報を引き出す仕組みが必要となる。それが情報をすばやく検索するための「インデックス化」という仕組みで、検索対象のサイトにインデックスがあると、Google のシステムはは全てのサイトのページにあるキーワードをひとつひとつ探すことなく、高速に検索できるのだ。ちなみにインデックス化の仕組みは MySQL などのデータベースにも備わっているが、Google 自体は自身のインデックス化の仕組みを公開していない (CNET Japan の記事「Flash開発者を不安にさせるGoogle検索の落とし穴」参照)。 Google Sitemap とは、Google に登録する URL を Google に自ら教える仕組みである。これがないと Google はあなたのウェブサイトを勝手に巡回して Google 自身の判断で必要だと思った URL を登録する。ゆえに、Google Sitemap の仕組みを使えば登録して欲しい URL を Google に正確に教えることができるのである。 それではまずは、Google Sitemap に登録しよう → Google Sitemap (Movable Type で、Google Sitemap に対応する方法) 以下は Niall Kennedy's Weblog に書かれているものの翻訳である。
あなたのブラログの XML サイトマップを Google や他の検索エンジンに解析してもらうのは
とっても簡単。新しいインデックステンプレートを作成して以下のコードをコピーすればよい。
出力ファイルは sitemap.xml のような覚えやすい名前をつけておこう。
そのコードを貼り付けて新しいテンプレートファイルを保存してサイトを再構築すればよい。
以下は、Niall Kennedy's Weblog で提示されている方法に加えて、私の方でカテゴリの URL をサイトマップに加えるように手を加えた sitemap.xml の例である。
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84">
<url>
<loc><$MTBlogURL encode_xml="1"$></loc>
<priority>1.0</priority>
</url>
<MTEntries lastn="9999">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
</url>
</MTEntries>
<font color="blue"><MTCategories><MTIfNonZero tag="MTCategoryCount">
<url><loc><$MTCategoryArchiveLink encode_xml="1"$></loc></url>
</MTIfNonZero></MTCategories></font>
</urlset>
最後に、Google Sitemap のサイトにこのファイルを置いた URL (例えば、https://yourdomain.com/sitemap.xml/) を登録すればよい。

Movable Type で、日付のフォーマットを変更するには?

Movable Type で、日付のフォーマットを yyyy/mm/dd のような形式、つまり 2006/01/20 のような形式するには、テンプレートの中で以下のように書くと良い。
<$MTEntryDate format="%Y/%m/%d"$>
MTDate は、MTxxxDate として以下のファミリーがある (MTxxxDate とするより、xxx の部分を属性として指定できた方がよりオブジェクト指向的だと思うよ<Six Apart 様)。
Movable Type で、日付のフォーマットを yyyy/mm/dd のような形式、つまり 2006/01/20 のような形式するには、テンプレートの中で以下のように書くと良い。
<$MTEntryDate format="%Y/%m/%d"$>
MTDate は、MTxxxDate として以下のファミリーがある (MTxxxDate とするより、xxx の部分を属性として指定できた方がよりオブジェクト指向的だと思うよ<Six Apart 様)。