読者です 読者をやめる 読者になる 読者になる

weblog of key_amb

主にIT関連の技術メモ

DateTime::Format::Strptime にパッチを送った話 #Perl

CPAN モジュールの DateTime::Format::Strptime は DateTime と同じ Dave Rolsky さんが開発しているもので、日付時刻を含む文字列のパースによく使われているのではないかと思います。 このモジュールの挙動が v1.58 から変わっていました。 #!perl use fea…

Gotanda.pm #8 で memcached-cli について喋ってきた #gotandapm #memcached

既に2回このブログで紹介している memcached-cli について、昨日開催された第8回 Gotanda.pm で LT してきました。 資料はこちらです。今回は Speaker Deck に上げてみました。 Speaker Deck だとスライド中のリンクが無効になる(?)ようなので、いくつか貼…

memcached-cli の v0.9.4 までの追加機能の紹介

3/24 の記事で、最近作った memcached-cli というツールの紹介をしました。 keyamb.hatenablog.com 別に困ってはいないのですが、もっと便利にしたので、Changes から抜粋して追加機能を紹介しておきます。 昨日か一昨日に手元に入れて試してみた、という方…

Memcached に対話的にコマンドを実行できる "memcached-cli" を作った

Redis*1 には redis-cli というツールがあって、Redis サーバに接続して対話的にコマンドを発行して、結果を得ることができます。 Memcached*2 の場合、いい感じに使えるツールがなくて*3、必要なときはいつも TELNET でつないでコマンドを実行していました…

Gotanda.pm #6 で障害について話してきた #gotandapm

こんにちは、@key_amb です。ご無沙汰しています。 最近ブログの更新が遅れてまして、なんとなく申し訳ない気持ちになっている今日このごろです。 なんと、2ヶ月も更新してなかったんですね。*1 さて、前回の Gotanda.pm #5 では、テーマ(「高速化」でした)…

吉祥寺.pm で Perl と Perl 以外の運用について発表しました #kichijojipm

7/10(金) 吉祥寺.pm #4 で発表をしてきました。 お題が「PerlとPerl以外」ということだったので、PerlとPerl以外のWebアプリケーションのサーバサイド運用について話そうかなーと思い、発表枠で申し込みました。 …で、下のスライドで話をしました。 PerlとPe…

YAPC::Asia Tokyo 2015 にトーク応募しました #yapcasia #appkoyomi

今年の YAPC::Asia Tokyo は 8月20〜22日に予定されています。 YAPC::Asia Tokyo 2015 今年は最後の YAPC::Asia Tokyo ということで、トーク応募にも気合いの入ったエントリーが多いような気がします。 〆切は明日までとのことですが、これを書いている 6/14…

Shibuya Perl Mongers テクニカルトーク #17 に参加して #shibuyapm

6/2 に開催された Shibuya Perl Mongers テクニカルトーク #17 に参加してきました。 Shibuya Perl Mongersテクニカルトーク#17 (2015/06/02 18:30〜) 自分は初参加だったのですが、なんと前回開催から4年ぶりの開催とのこと。 「もうみんな Perl なんて書い…

(メモ) Pod::Simple::HTML による Perl ドキュメントのカスタム生成

Pod::Simple::HTML の POD に書いてある通りですが、Pod::Simple::HTML を継承したクラスを作って、生成する HTML をカスタマイズすることができます。 例えば、do_pod_link メソッドをオーバーライドすることで、L<...> で記述するリンクタグの挙動を変更で…

(メモ) Module::Build による Perl ドキュメント生成

Module::Build を使うとプロジェクトのドキュメント生成をビルドのタスクの一部として、かんたんなコマンドで実行できます。 ./Build docs # blib/ 以下にドキュメント生成 ./Build html # blib/ 以下にHTML生成 Module::Build でプロジェクトの対象ファイル…

ShipIt を使って Perl モジュールのリリース作業を自動化する

ShipIt は Perl プロダクトのビルド、テスト、リリースを自動化してくれるツールで、CPAN へのアップロードもできます。 今回は以下の作業を半自動化するために、ShipIt を利用しました。 モジュール群の VERSION インクリメント ChangeLog の更新 リリース…

(メモ) Perl の文字コード変換について

EUC-JP => UTF-8 な変換をしたくて、Encode.pm を使ったら化けたのだけど、Unicode::Japanese にしたら上手く行った。 use Unicode::Japanese; print Unicode::Japanese->new($content, 'euc-jp')->get; 参考 Unicode-Japanese-0.49 - Convert encoding of j…

(メモ) Perl でテストのときに依存する外部 daemon を上手く取り扱う

mysql とか memcached とか。 Harriet というのを使うといいらしい。 Harriet ー テストのときつかうにデーモンの取扱を簡単にするためのフレームワーク - blog.64p.org

Perl でテスト可能なスクリプトを書く

職場でとある Perl スクリプトを改修する機会があった。 元々ぺら一枚のスクリプトだったのだが、これを機に App::Hoge::CLI (仮称) のようなモジュールを作ろうとした。 すると、pull-request の時に「使い回しのできないものをモジュールにしないほうがい…

(メモ) Perl で動的にモジュールをロードする方法いろいろ

現在の結論 Module::Load::load でよさそう。 参考 Perl のモジュールローダー選定委員会 - blog.64p.org [技術継承の現場] useとrequireの違い - NDiS Tech http://perldoc.perl.org/Module/Load.html

Perl Module のバージョンを調べるいろいろな方法

半分メモです。 下の記事に色んな方法が載ってました。 モジュールのバージョンを確認するときどうやってますか? - JPerl Advent Calendar 2010 Casual Track 自分のシェル環境にもなにか入れておこうと思いました。 最初はかんたんに alias にしようかと思…

Perl で非ループなブロックで last を使う

if if ブロックを途中で抜けたいときにたまに使うことがありました。 if {{ # do something last if $error; # do something }} {{ にしているのがミソで、if {} の内側の {} がブロックということです。 eval eval は last で抜けられないのですが、同様の…

Perl 関数の Export/Import

Perl の標準モジュール Exporter を使った関数の Export/Import のやり方をまとめておく。 この機能を使って関数をインポートすると、"MyApp::afunc" のようにパッケージ名を指定せずとも関数を組み込み関数のように "afunc" だけで呼び出せる。 基本的な使…

Perl でプロジェクトのモジュール全部について use_ok のテストをしてくれるテストモジュール

See Test::UseAllModules - search.cpan.org use Test::UseAllModules; BEGIN { all_uses_ok(); }

File::Which を使って perl で which

See File::Which - search.cpan.org use File::Which qw(which); my @paths = which('perl');

メモ - Perl で Readonly の変数を変更してテストする

Julius Plenz - Blog - Modify a Readonly scalar in Perl for testing purposes の方法で上手く行った。

cpanfile で perl module を管理する

ちょっと前から plenv を使っていますが、作業環境が変わったときに毎回モジュールを入れ直すのが面倒なので、cpanfile を管理することにしました。 https://github.com/key-amb/my-perlenv cpanm --installdeps オプションで、cpanfile の記述を元にモジュ…

Perl CLI フレームワーク

Perlで使えるCLIフレームワークの個人的調査メモ。 インフラ運用などをやっていると、CLIをさくっと作りたいニーズが出てくる。 毎回一から書くより、既存のフレームワークに乗っかった方が楽なこともあるだろう。 というわけで、ちょっと調べてみた。 CPAN …

Minilla を使って CPAN にモジュールを上げてみた

https://github.com/key-amb/perl-Text-LTSV-Liner を CPAN に上げたときの作業メモ。 PAUSE ID 申請 CPAN にモジュールを上げるために必要。 社内でCPAN Authorになろうハッカソンを開催しました!! - 僕の車輪の再発明 を参考にした。 リクエストを送ると…

perl モジュールのファイルパスの調べ方

perldoc コマンド $ perldoc -l File::Path Class::Inspector を使う perl のコード上で調べたい場合はこちらを使うといい。 use Class::Inspector; my $module = 'File::Path'; print Class::Inspector->resolved_filename($module), "\n"; 参考 モジュール…

Perl Pod の文法

http://perldoc.perl.org/perlpod.html によくまとまっている。

Log::Log4perl のログレベル

FATAL, ERROR, WARN, INFO, DEBUG, TRACE の6つがある。 $logger オブジェクトを使うとそれぞれメソッドで書ける。 $logger->trace("..."); # Log a trace message $logger->debug("..."); # Log a debug message $logger->info("..."); # Log a info messag…

gdbperlの使い方

ちょっと固まったプロセスに strace してたら、「それgdbperl使った方がいいっすよ」って後輩に言われたので使ってみた。gdbperlは https://github.com/ahiguti/gdbperl ここにある。 使い方は http://www.slideshare.net/akirahiguchi/gdbperl にある。 $ w…

Term::ANSIColorでテキストに色を付ける

前掲のText::LTSV::Linerでも、そもそもText::LTSVの中で使われているYAML::Tiny::Colorでも使われている Term::ANSIColor というモジュールを使うと、ターミナルに出力するテキストに色を付けることができる。http://perldoc.perl.org/Term/ANSIColor.html …

Text::LTSV::Liner 書いてみた。

LTSVのPerlのパーサをCPANで探していたら、Text::LTSVとApp::YGが見つかったけど、どちらも次のような感じで複数行に分けて表示してくれるものっぽかった。 $ cat sample.ltsv | ltsview -k id,name --- id:001 name:taro --- id:002 name:jiro --- :ログと…

Module::Installでモジュールを作ってみる

おそらくはそれさえも平凡な日々: CPANモジュールのパッケージングの歴史 にCPANモジュールのパッケージングの歴史があり、トレンドを知ることができる。Module::Installには課題もありそうだが、現在は広く普及してて無難っぽい。 ので、手始めにこれを使っ…

Macにplenvを入れる

https://github.com/tokuhirom/plenvplenvはperlbrewのようにPerlの複数バージョンを切り替えて使えるツールである。 githubのREADMEにあるように、Mac OS Xであれば、以下でインストールできる。 ※事前にHomebrewのインストールが必要。 brew update brew i…

Perlで大文字/小文字の置換

uc/lc 全て大文字/小文字にする。 $ perl -e 'print uc "Goatex\n"' GOATEX $ perl -e 'print lc "I Love U\n"' i love u ucfirst/lcfirst 先頭一字だけ大文字/小文字にする。 $ perl -e 'print ucfirst "doraemon\n"' Doraemon $ perl -e 'print lcfirst "M…

markdownを使ってHTMLメールを送信

markdownはプレーンテキストをHTMLに変換するツールである。CPANだとText::Markdownというモジュールがあるので、これを使ってHTMLメールを送るには、以下のようにすればできるだろう。 use Email::MIME; use Email::Sender::Simple 'sendmail'; use Text::M…

yamlの文法チェック

YAML::Shellというyamlのテスト用のモジュールを使うといい。 インストールするとyshというコマンドが使えるようになる。 cat sample.yaml | yshyamlの文法が正しければ、文書構造のdumpが出力される。 文法が間違っていたらエラーが起こる。 参考 YAML::She…

Email::MIMEとEmail::Sender::Simpleを使ってメールをbccに送る

単純にBccヘッダにアドレスを追加しても、所望の機能は達成されない。 Email::Sender::Manualに、どうやってBcc送信をやったらいいか解説がある。私の場合は次のようにした。 my $email = Email::MIME->create( header => [ From => $from, To => join(',', …

FormValidator::Simple

Webでのリクエストパラメータのチェックなどに使う。 参考 FormValidator::Simple - search.cpan.org http://d.hatena.ne.jp/fjkktkys/20070427/1177664978

Perlのワンライナーとコマンドラインオプション

コマンドラインオプション オプション 意味 -e 文字列をスクリプトとして実行 -l 強制改行 -M{モジュール名} モジュールをuseする -MO=Deparse コマンドライン実行時にスクリプトに変換する -n 1行ずつ処理 -p 出力 -i 出力先を入力ファイル自身にする 以上…

AnyEvent::IRC::Client

perlでIRCボットを作るときに使うモジュール。 参考 livedoor Techブログ : 小ネタ AnyEvent::IRC::Client - search.cpan.org

IO::Prompt::Simple

perlでプロンプトをさくっと使いたいときに使う。 use IO::Prompt::Simple; if ( prompt 'ok?', +{ yn => 1 } ) { # 処理 } else { return; } 参考 IO::Prompt::Simple - search.cpan.org にひりずむ::しんぷる - IO::Prompt::Simple 書いた IO::Prompt::Sim…

Nagiosの.cfgファイルのパーサ

Nagios::ConfigというCPANモジュールを使えばできそう。Nagios::Config - search.cpan.org

Perl小ネタ

ミリ秒を求める Time::HiRes::gettimeofdayを使う。 use Time::HiRes; $now = Time::HiRes::time; ($seconds, $microseconds) = Time::HiRes::gettimeofday; UNIX_TIMESTAMPがミリ秒単位でわかる。 参考 ミリ秒を求める Script Source Sample for Perl wanta…

Data::Lock

Perlで定数を使う方法はいくつかある。 よく知られているのは constant, ReadOnlyだが、Data::Lockというものは変数を一時的に書き込み不可にするそうな。 use Data::Lock qw(dlock); dlock my $ROWS = 10 ; dlock my @DATA = (10, 20, 30); print "row is $…

Image::Magickを使ってみた

画像合成をやる必要があって、Image::Magickでgif合成してみた。Image::Magickの使い方はこんな感じ。 use Image::Magick; my $magick = new Image::Magick(); $magick->Read($file); # 画像ファイル読み込み # 指定した座標に重ね合わせる $magick->Composi…

Cache::FastMmap::newの排他制御

前掲のようにCache::FastMmapを使い出して、しばらく経った頃に急にエラーが出ることがあった。 ... failed: File exists at /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/Cache/FastMmap.pm line 629.%0ACompilation failed in require at /pat…

Cache::FastMmapと仮想メモリ

FastCGIの全プロセスでデータを共有したくて、Cache::FastMmapを使ってみた。共有のshare fileを使う。 package MyApp::API::Cache; use Cache::FastMmap; my $fastMmap = Cache::FastMmap->new( share_file => '/tmp/sharefile-myapp-fastmmap', ); みたい…

FormValidator::Simple

Webでのリクエストパラメータのチェックなどに使う。 参考 FormValidator::Simple - search.cpan.org はてなダイアリー

Perlで並列処理:Parallel::ForkManager

perlで並列処理を行うためのモジュール。 参考 Parallel::ForkManager - 簡単な並列処理によるforkマネージャー - prleodc.jp

日付の操作:DateTimeオブジェクト

Perlで日付の操作を簡単に行えるモジュール。 use DateTime; my $dt = DateTime->new( time_zone => 'local', year => 2008, month => 8, day => 4, hour => 15, minute => 0, second => 0 ); # 日の加算 my $dt_tommorow = $dt->clone()->add( days => 1 );…

CPANモジュールがインストールされているか調べる

perl -Mモジュール名 -e'print $モジュール名::VERSION,"\n"' 参考 [Perl][Linux] CPANモジュールがインストールされているか調べる。: @BIBOUROKU