end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

perl

スペルミス修正プログラムには、Levenshtein or Jaro-Winkler らしい

google検索で、しばしば表示される「もしかして」を実装するには、Levenshtein距離、またはJaro-Winkler距離というアルゴリズムを使用するらしく、次のurlにあるスライドによれば、距離算出対象に絞り込みにn-gramを使用しているらしい。http://d.hatena.ne.…

perlの正規表現の高速化なら、Regexp::ListよりRegexp::Assemble?

http://search.cpan.org/perldoc?Regexp::List「大規模サービス技術入門」の中にRegexp::Listというperl moduleが紹介されていました。perlの正規表現におけるマッチングはNFAですが、Regexp::Listを使用すると、Trie木の正規表現が生成され、その動作速度が…

postgisである地点からの距離を算出

http://d.hatena.ne.jp/end0tknr/20100703/1278175849 http://d.hatena.ne.jp/end0tknr/20100703/1278182070 http://d.hatena.ne.jp/end0tknr/20100709/1278662395最近、mapserverやpostgisのinstall、google map apiによるgeocodingを記載してきていますが…

Net::Amazon::EC2やNet::Amazon::S3 + Parallel::ForkManagerによる分散処理

多数のサーバを使用して、計算量の多い処理を行う必要が出てきたので、Net::Amazon::EC2やNet::Amazon::S3による分散処理を試してみました。システム構成は次の通りで、map reduceのような分散処理は行わず、単純に複数のサーバを起動して、Parallel::ForkMa…

db schema(DDL)の資料作成なら、SQL::Translator で自動作成しては?

私の周りでは、多くが 1)excelでDB設計書 (テーブル定義) を書いて、 2)create table 等をschema_ddl.sql のようなもの(DDL)を書いて 3)DBを構築 していますが、どうせ schema_ddl.sql を書くのであれば、次のように SQL::Translator で 1)に該当する資料を…

perl cgiでダウンロードさせるファイル名を指定

ieの場合、拡張子以外をurlエンコードした上で、http responseヘッダを返せば、ダウンロードファイルの文字化けを防ぐことができそうです。 問題なく動作しているようですが、ブラウザを限定しないwebアプリなら、ダウンロードで返すファイル名はasciiにした…

Module::Usedで使用しているperl moduleを一覧表示

http://d.hatena.ne.jp/end0tknr/20090529/1243586614以前、↑このエントリでperl本体にinstallされているperl module一覧の表示方法を記載していますが、Module:Usedを使用すれば、perlプログラムが使用しているperlモジュールを一覧表示できるようです。htt…

mod_perlをinstallするperlは、-Dusethreads でスレッドサポートを有効に

perl5.10+apache2.2.13にmod_perl2.0.4をstatic installしようとしたところ、make時に次のようなerrorが表示されました。 $ make cd "src/modules/perl" && make make[1]: Entering directory `/home/endo/tmp/mod_perl-2.0.4/src/modules/perl' <略> In f…

Simple Tree Menuで表示するツリーデータ(ul,li)を作成

ツリー形式の表示には Simple Tree Menu(※1) を使用していますが、いただいたデータ(※2)をSimple Tree Menuで表示可能なul,liに変換する必要があったので、使用したperl scriptを書き留めておきます。※1 http://www.dynamicdrive.com/dynamicindex1/navigate…

Proc::Daemonでperlデーモンプログラムを書いてみる

perlでデーモンを作成することになりそうなので、 調べてみると、次のurlで Proc::Daemon が紹介されていたので、試しに書いてみました。http://perltips.twinkle.cc/perl/daemon.php http://perltips.twinkle.cc/server/linux_daemon_startup_init_d.phpと…

open関数のmode一覧

http://archive.mag2.com/0000109251/20090802202728000.html「Perlで書く」に分かりやすく記載されています。 ーーーーーーーーーーーーーーーーーー MODE 説明 ーーーーーーーーーーーーーーーーーー > 上書き >> 追加書き込み |- 出力をコマンドに渡す -|…

Encode.pmで機種依存文字を「?」に変換

cp932とsjisではエンコーディングは似ているけど、文字セットが異なるので、次のような方法でもありかな? #!/usr/local/bin/perl use strict; use warnings; use encoding qw/cp932/; #←ポイント use Encode; main(@ARGV); sub main { my ($str) = @_; retur…

jpegのexif情報からGPS座標を抽出し、逆ジオコーディング

http://blog.livedoor.jp/dankogai/archives/51262202.htmlEXIFは何となく知っていましたが、GPS座標も定義されていることには驚きました。http://en.wikipedia.org/wiki/Exchangeable_image_file_format http://www.sno.phy.queensu.ca/~phil/exiftool/TagN…

mysql 5.1のtimestamp型におけるDEFAULT値の不思議? 再び

http://d.hatena.ne.jp/end0tknr/20090403/1238753081以前のエントリで、timestamp型のDEFAULTに関して記載しましたが、今回は update時の不思議?を記載しておきます。 尚、今回のtestでは、次のようなtableを使用します。 mysql> desc time_test; +--------…

sanitize html & sql

久しぶりにsrcを書いたら、htmlやsqlのエスケープを、つい忘れていたので sub escape_html { my ($self,$str) = @_; return $str if not defined($str); $str =~ s/&/&/go; $str =~ s/\"/"/go; #" make emacs happy $str =~ s/>/>/go; $str =~ s/

ダウンロードファイルの文字化け対策は、ブラウザ毎に必要

webアプリでcsv等のダウンロード用ファイルを返す場合、ieで日本語ファイル名が文字化けするので、その対処法を調べてみました。次のスクリプトは、httpヘッダを返す部分のみを記述していますが、ieでのポイントは、拡張子以外をurlエンコードすることにある…

Mail::MboxParser でMbox file(例:thunderbird)から添付fileをエクスポート

http://search.cpan.org/perldoc?Mail::MboxParserthunderbirdのメールにある添付ファイルをエクスポートする必要が出てきて、cpanを調べてみたら、Mail::MboxParser というモジュールがありました。thunderbirdで受信したメールは、mbox形式で c:/Documents…

mysql_enable_utf8でperl-mysql間の文字列をflaged utf8に統一

以前のencodingは sjis(cp932)やらeuc-jp等、作るものによってバラバラでしたが、utf8に統一されるようになってきたので、備忘として書いておきます。http://search.cpan.org/perldoc?DBD::mysql以下のようにdb接続時に mysql_enable_utf8 を指定すれば、per…

固定書式なら、perlによるPDF生成はPDF::API2がいいかも

http://search.cpan.org/dist/PDF-API2/PDFファイルを生成する必要があったので、cpanを眺めていたら、PDF::API2というモジュールがありました。これまでPDFファイルの自動生成というと、pdfjやpdflibの名前を聞いたことがありますが、PDF::API2でも十分に使…

標準モジュールや標準外モジュールを一覧表示するには?

たまにcorelistは使用していましたが、こういうワンライナーでできるようです。 標準moduleの場合 $ perl -MModule::CoreList -e \ 'print "$_\n" for sort keys %{$Module::CoreList::version{5.008008}}' 標準外moduleの場合 $ perl -MExtUtils::Installed…

mod_perl環境でApache::Reload(Apache2::Reload)による変更分の再ロード

http://search.cpan.org/perldoc?Apache2::Reload通常、mod_perl環境で開発する場合、srcの変更毎にapacheを再起動する必要がありますが、Apache::Reload(Apache2::Reload)を使用すれば、変更モジュールを自動的に再ロードできます。 installはMP_APXSを指定…

DBD::mysqlのinstallは、mysql_configやtestuserを指定しましょう

DBD:a:mysqlをinstallする際、単純に実行すると、エラーで怒られてしまいます。例えば、perl Makefile.PLでは... $ cd DBD-mysql-4.010 $ /usr/local/bin/perl Makefile.PL Can't exec "mysql_config": No such file or directory at Makefile.PL line 76. …

perlのUnicode Block正規表現とEncode::CJKConstantsによる文字クラス判定

unicodeには、ひらがなやカタカナ等の文字グループがblockとして定義されており、perl ver.5.8以降では、このblock名称による正規表現が使用できるそうです。http://blog.livedoor.jp/sasata299/archives/51194035.html http://module.jp/blog/regex_unicode…

ebcdic->sjis変換で失われたシフト文字分の空白をEncode::CJKConstantsで復活

ibmのas400(現在の製品名はSystem i)で使用されるebcdicという文字コードでは全角文字がある場合、その前後にシフト文字(0E:シフトアウト,0F:シフトイン)が挿入されます。 例えば、「漢字」という全角2文字がある場合 1byte 2-5byte 4byte 0E 漢字 0F as400…

apache or CGI.pm でhttp requestのPOST容量を制限

apacheでは、httpd.confにLimitRequestBodyを指定 http://httpd.apache.org/docs/2.2/ja/mod/core.html例えば、apacheで10kbyteの容量制限を行う場合、httpd.confに次のように記載します。 ※grobal, , のコンテキストに指定できます LimitRequestBody 10240…

Lingua::JA::Hepburn::Passportで氏名(かな)をローマ字に変換

こんなモジュールもあるとは、cpanで探そうとも思いませんでしたよ。 http://blog.bulknews.net/mt/archives/002071.html

パスワード(暗号化)非対応なArchive::Zipは /usr/bin/zip, unzipで代用

Archive::Zipはパスワード(暗号化)に非対応 perlでzipファイルを扱う際、Archive::Zipを用いていましたが、パスワード(暗号化)に対応していないとは知りませんでした。http://search.cpan.org/perldoc?Archive::Zip isEncrypted() Return true if this membe…

perlfuncのcallerで呼出し元の情報を取得

perlではcaller関数で呼出し元の情報を取得できます。 引数なしで実行すると、package,file,line noを取得 #!/usr/local/bin/perl use strict; use warnings; use Data::Dumper; sub func_1 { func_2(); } sub func_2 { func_3(); } sub func_3{ my @call_in…

perlのtipsには「Perlで書く」がいいかも

perlのtipsを紹介する「Perlで書く」というページを見かけました。http://archive.mag2.com/0000109251/index.html例えば、 メモ化 PerlIS.dllで動作しているかの確認方法 クレジットカード番号のチェック 関数処理をラップする イベントログにメッセージを…

perlで基数変換(10進数16進数 他)するには?

10進数->16進数にsprintf("%04X",$x)、16進数->10進数にhex($x) perlで基数変換するには、いくつか方法がありますが、私の場合、10進数->16進数にはsprintf("%04X",$dec_val)、16進数->10進数にはhex($hex_val)を使用しています。 #!c:/Perl/bin/perl use st…