memo.xight.org

日々のメモ

カテゴリ : Perl

2ページ目 / 全7ページ

Term::TtyRec - Perlでttyrec

Summary

Perlからttyrecを扱うモジュール.

SYNOPSIS

use Term::TtyRec::Player;
use FileHandle;

# $handle is any IO::* object
my $handle = FileHandle->new('file.tty');
my $player = Term::TtyRec::Player->new($handle);

# options can be set as hashref
my $player = Term::TtyRec::Player->new($handle, {
    speed => 1, nowait => undef,
});


Reference

Term-TtyRec

GraphicWizardsLair - 2006-09-12 - コンソールをネット越しにライブで見せたいのであればscreen -xじゃなくてttyrecを使った方が簡単
http://www.otsune.com/diary/2006/09/12/1.html#200609121

ttyrec: ttyレコーダー
http://0xcc.net/ttyrec/

via

www.textfile.org - 2006-09-13
http://d.hatena.ne.jp/textfile/20060913/tty

ローカルのPerlモジュールを使用する

Summary

use lib 'path/to/lib';
use Foo;


Sample

path/to/lib 以下にモジュールを配置.
Text::Iconvを利用する場合は,スクリプトから見て
path/to/lib/Text/Iconv.pm
に配置.

use lib 'path/to/lib';
use Text::Iconv;


Reference

hail2u.net - Weblog - 2004-05-06 - push @INCとuse lib
http://hail2u.net/blog/coding/push_at_inc_and_use_lib.html

UTF-8で書かれたWebページから namazu で検索

Summary

あるページからnamazu.cgiに検索文字列を送信する際,
遷移元のページがUTF-8の場合,検索が行なえない.

namazu.cgiがEUC-JPでHTMLエンコードされた検索文字列のみ対応しているのに対し,
遷移元ページがUTF-8で記述されている場合,検索文字列もUTF-8でHTMLエンコードされるため.

1. namazu.cgi を namazu2.cgi にリネーム.
2. 文字コード変換フィルタを namazu.cgi として設置
3. namazu.cgi 中で namazu2.cgi へリダイレクト.

Source

#!/usr/bin/perl

use CGI;
use Text::Iconv;
use CGI::Lite;

my $converter = Text::Iconv->new("UTF8", "EUC-JP");
my $cgi = new CGI;
my $new_query = q();

# パラメータが空の場合を考慮
if ($cgi->param('key')){
	$new_query = $converter->convert($cgi->param('key'));
}

$uencode = url_encode($new_query);
print "Location: http://example.com/path/to/namazu2.cgi?key="."$uencode\n\n";


補足

<form> タグの accept-charsetでも回避可能.
(Firefox1.5で動作を確認.Internet Explorer 6では動作せず.)
<form accept-charset="euc-jp">
</form>


Reference

namazuでUTF8ファイルの検索
http://www.ksknet.net/linux/namazuutf8.html

CGI
CGI::Lite
Text::Iconv

Perl でデコメールの送信

Summary

デコメールの送信方法.

デコメールのパターン

1. HTMLのみ
2. HTML + 画像添付
3. HTML + インライン画像
4. デコメールテンプレート

1. HTMLのみのフォーマット

デコメール非対応の端末にはTEXTパートのみ送信される.
よって,TEXTパートを必ず付ける.

Content-Type:multipart/alternative
  Content-Type:text/plain
    メールの内容 (テキスト)
  Content-Type:text/html
    メールの内容 (HTML)


2. HTML + 画像添付

Content-Type: multipart/mixed
  Content-Type: multipart/alternative
    Content-Type:text/plain
      メールの内容 (テキスト)
    Content-Type:text/html
      メールの内容 (HTML)
  
  Content-Type:image/gif
  Content-Transfer-encoding:base64
    (base64で符号化されたgifファイル)


3. HTML + インライン画像

Content-Type:multipart/related
  Content-Type: multipart/alternative
    Content-Type:text/plain
      メールの内容 (テキスト)
    Content-Type:text/html
      メールの内容 (HTML)

  Content-Type:image/gif
  Content-Transfer-encoding:base64
  Content-ID:<sample>
    (base64で符号化されたgifファイル)


4. デコメールテンプレート

改行は CR + LF.
Content-Typeは application/x-decomail-template
Decomail-Template
MIME-Version:1.0
Content-Type:multipart/related
  Content-Type: text/html;charset=Shift_JIS
  Content-Transfer-Encoding:8bit
    (HTML本文)
    <img src="cid:sample">

  Content-Type:image/gif
  Content-Transfer-encoding:base64
  Content-ID:<sample>
    (base64で符号化されたgifファイル)


Reference

CodeZine - Perlで作るモバイルサイトのコツ : 第2回 (デコメール)
http://codezine.jp/a/article.aspx?aid=550

CodeZine - Perlで作るモバイルサイトのコツ : 第2回 (デコメール)
http://codezine.jp/a/article.aspx?aid=550&p=2

MIME::Lite
Jcode

Perlでモバイルサイト構築

Summary

1. User-Agentで端末判別
HTTP::MobileAgentを利用
use HTTP::MobileAgent;

my $agent = HTTP::MobileAgent->new;

if ($agent->is_docomo){
	    # iモード
} elsif ($agent->is_ezweb){
	    # EZweb
} elsif ($agent->is_vodafone){
	    # Vodafone
}


2. 端末に応じてHTML出力
Template-ToolkitHTTP::MobileAgentを利用
#!/usr/bin/perl

use CGI;
use Template;
use HTTP::MobileAgent;

my $q = CGI->new;
my $agent = HTTP::MobileAgent->new;
my $tt = Template->new({ABSOLUTE => 1});

my $output;

# sample.htmlのagentパラメータへ
# HTTP::MobileAgentのインスタンスをセットする
$tt->process('/path/to/sample.html', {agent => $agent}, \$output) or die $Template::ERROR;

print $q->header(-charset=>'Shift_JIS');
print $output;

exit;

<html>
<body>
[% IF agent.is_docomo %]
iモード
[% ELSIF agent.is_ezweb %]
EZweb
[% ELSIF agent.is_vodafone %]
Vodafone Live!
[% ELSE %]
Non Mobile...
[% END %]
</body>
</html>


3. メールアドレスのキャリア判別
Mail::Address::MobileJp
use Mail::Address::MobileJp;

if (is_imode($email)){
	# @docomo.ne.jp
}elsif (is_ezweb($email)){
	# @ezweb.ne.jp or @*.ezweb.ne.jp
}elsif (is_vodafone($email)){
	# @jp-*.ne.jp or @*.vodafone.ne.jp
	# (*にはd,h,t,c,k,r,n,s,qのみが適用となる)
}


4. 絵文字対応
HTML::Entities::ImodePictogram
3キャリア対応の絵文字削除
use CGI;
use HTML::Entities::ImodePictogram;

my $q = CGI->new;

my $text = $q->param('text');

# EZwebの絵文字も削除対象にする
$HTML::Entities::ImodePictogram::ExtPictorgram_re .= '|[\xF3\xF4\xF6\xF7][\x40-\x7E\x80-\xFC]';

# iモード、EZwebの絵文字を削除
$text = remove_pictogram($text);

# Vodafoneの絵文字を削除
$text =~ s/\x1B\$(.+?)\x0F//g;


Reference

CodeZine - Perlで作るモバイルサイトのコツ:第1回
http://codezine.jp/a/article.aspx?aid=496

HTTP::MobileAgent
Template-Toolkit
Mail::Address::MobileJp
HTML::Entities::ImodePictogram

mysqldump2email - MySQLのダンプファイルをzipアーカイブしてメール送信

Summary

以下のモジュールが必要
MIME::Lite
DateTime
YAML

Usage

% mysqldump2email --conf /path/to/config.yaml


config.yaml sample

mysqldump:
  command: /usr/bin/mysqldump
  username: your-mysql-username
  password: your-mysql-password
  #host: localhost

zip:
  command: /usr/bin/zip
  # if encryption needed
  #password: your-zip-password

mail:
  from: user@example.com
  to:   user@example.com
  route:
    via:  smtp
    host: localhost:25
  #route:
  #  via:  sendmail

gspace:
  enable: 0
  directory: /

tmpdir: /tmp
#time_zone: Asia/Tokyo


Reference

Ogawa::Memoranda - 2006-07-24 - mysqldump2email公開
http://as-is.net/blog/archives/001149.html

via

オレンジニュース - 2006-07-28
http://secure.ddo.jp/~kaku/tdiary/20060728.html#p04

Unicode::Normalize で機種依存文字の置換 (Unicodeの正規化)

Summary

UTF-8で変換できない機種依存文字を置換する [2006-06-19-13] の Perl版.
Unicode::Normalize を用いることで簡単に実現できる.

機種依存文字の変換ではなく,正しくは "Unicode の正規化" という作業のようだ.

Reference

daily dayflower - Unicode::Normalize で遊ぶ
http://d.hatena.ne.jp/dayflower/20060605/1149478073

perl5.8のUnicodeサポート
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html#normalization

Unicode正規化
http://homepage1.nifty.com/nomenclator/unicode/normalization.htm

Unicode::Normalize

Regexp::Optimizer, Regexp::Assemble を用いた正規表現の最適化

Reference

404 Blog Not Found:perl - 自動で /a|b|c/ を /[abc]/ にしてくれたら...
http://blog.livedoor.jp/dankogai/archives/50533165.html

qootas.org/blog - perl regex performance
http://qootas.org/blog/archives/2006/06/perl_regex_perf.html

Regexp::Optimizer
Regexp::Assemble

via

www.textfile.org - 2006-06-16 - 正規表現の最適化
http://d.hatena.ne.jp/textfile/20060616/regex

 GD::Barcode::QRcode で各ページにQRコードの画像を付加

Summary

[2006-03-05-1]を応用し,Refererを用いてQRコード生成.

インストール

# aptitude install libexpat-dev libgd2-dev
# cpan install GD
# cpan install GD::Barcode::QRcode

qr.cgi

#!/usr/bin/perl
use strict;
use GD::Barcode::QRcode;

my $str         = $ENV{'HTTP_REFERER'};
my $header      = qq(Content-Type: image/png\n\n);
my $qr          = GD::Barcode::QRcode->new($str,{ ECC => 'L', Version => 2, ModuleSize =>2,})->plot->png;
print $header,$qr;
exit;


各ページに以下の HTML で付加可能.

<img src="path/to/qr.cgi" width="97" height="97" alt="QRcode" />


Reference

GD::Barcode::QRcode

nitsujiの日記 - GD::Barcode::QRcodeのバグ?の件について
http://d.hatena.ne.jp/nitsuji/20070626/1182840997

GD::Barcode::QRcode を用いた QRコード生成

Summary

http://example.com/cgi-bin/qr.cgi?q=QRコードにしたい文字列
でQRコードの画像を生成したい.

準備

# cpan -i GD::Barcode::QRcode

注意

GD::Barcode::QRcode (0.01) 40行目を変更
#$oSelf->{Version} = $rhPrm->{Version} || 1;
$oSelf->{Version} = $rhPrm->{Version};


Source

#!/usr/bin/perl
use strict;
use CGI;
use GD::Barcode::QRcode;

my $q		= new CGI;
my $str		= $q->param('q');
my $header	= qq(Content-Type: image/png\n\n);
my $qr		= GD::Barcode::QRcode->new($str)->plot->png;
print $header,$qr;
exit;


Reference

GD::Barcode::QRcode
Debian パッケージディレクトリ検索 (バイナリ) - libgd-graph-perl

どんぞこ日誌(2004-07-25)
http://donzoko.net/cgi-bin/tdiary/20040725.html