perl

FormValidator::Lite で Xslate のテンプレートの文法チェックをする方法

そこそこ大きい Web アプリを作ってると非エンジニアに管理画面でテンプレート編集させたりするケースもあると思いますが、文法チェックをしないと、テンプレートがレンダリングできないがためにシステムがコケるとかいう悲しい事態が起こったりするので、チ…

FormValidator::Lite::Upload を Mojolicious に対応させる

多分こんな感じで行けるんじゃないでしょうか。FormValidator::Lite::Upload を Mojo::Message::Request に対応して、 --- perl5/lib/perl5/FormValidator/Lite/Upload.pm 2012-06-06 00:40:55.000000000 +0900 +++ lib/FormValidator/Lite/Upload.pm 2012-0…

Mojolicious 始めました

最近ようやく Mojolicious に手を出し始めました。プロダクション環境に導入するかは、まだ未定ですが、ソースコードを読みながら試用しています。Catalyst の原作者が DRY でなく DIY で作っているとのこと。Moose 依存などはなく、コアモジュールにしか依…

環境に左右されない PERL5LIB を設定する .profile の書き方

プロジェクト用のモジュールを extlib とか専用のディレクトリを掘っていると、それを @INC に突っ込まなくてはいけないので、ブートストラップスクリプトで調整したり、開発用に .bashrc や .profile に書くと思いますが、モジュールがインストールされるデ…

Plack ベースで作った Web サービスとそのシステムアーキテクチャ

本日、TVTalk という Web サービスをリリースしました。Twitter 上で、テレビ局のハッシュタグが付いているツイートを拾って、放送中の番組情報と紐付けるという、アグリゲーターサービスです。リアルタイムにタイムラインを追うにも、放送済み番組の内容を…

my と state のパフォーマンス比較

最近の Linux ディストリビューションの perl は 5.10 以上になってきた感じなので、最近は state など新しい機能を使うようになってきました。そこでちょっと気になったので state のパフォーマンスを計測してみました。ベンチマークコードは以下。動作が全…

warning メッセージ予防策

普段、wanrning を見つけるたびにせっせと defined 挟んだりして対応しているのですが、View の中で呼ばれてる箇所など、うっかり気付かないで数日過ぎてしまうと、あとで該当箇所を追うのが若干手間になってしまったりします。そこで、 use warnings FATAL …

Test::mysql で起動したインスタンスに mysql クライアントで接続するとテストがさらに快適に

昨日書いたエントリ、Test::mysqld を別ウィンドウで立ち上げたら開発時の prove が快適過ぎる件ですが、prove とか make test がコケたりしたときに、実際に DB の中身がどうなってるか見れた方がデバッグが捗りますよね。加えて、どうせなら使い慣れた mys…

ハッシュのキーとバリューを入れ替える方法

[追記] reverse() を使う方法の方が速くて簡潔でお勧めです! id:tomi-ru++あまり必要になるケースは無いと思いますが Tips です。 use strict; use warnings; use Test::More; my %a = ( foo => 1, bar => 2, baz => 3, ); my %b; @b{ values %a } = keys %…

Test::mysqld を別ウィンドウで立ち上げたら開発時の prove が快適過ぎる件

id:xaicron 氏が紹介なされていました make test で Test::mysqld を永続化させる方法 を早速導入していたのですが、make test は速くなって便利なのですが、prove で 1 つずつテストをするときは、相変わらず mysqld を毎回、起動・終了するので時間がかか…

WWW::Curl で使えるオプション一覧

WWW::Curl は速いですがドキュメントが少ないのが玉に瑕です。perldoc に setopt() や getinfo() で指定できるオプション一覧が載っていないです。実は PHP のマニュアルに良い感じで載っています。setopt() に指定できるオプション一覧 getinfo() に指定で…

YAPC::Asia Tokyo 2010 に行ってきました

今年も Perl の国際的カンファレンス YAPC::Asia に行ってきました。 YAPC に行くと 毎年感じることですが、YAPC に行って色々なトークセッションを回ると、他(社|者)の実際の運用や開発の現場レベルでのノウハウを聴くことができるので、この二日間で自分ひ…

YAPC::Asia Tokyo 2010 のタイムテーブルを手軽に PC/iPhone で見る方法

今年の YAPC::Asia もタイムテーブルはパンフレットをあてにしていたのですが、載っていなかったので慌てて用意しました。公式サイトに iCal が用意されているので、これを Google Calendar にインポートします。左下の「他のカレンダー」の「追加▼」のプル…

Plack::Test で HTTP クライアントのテストを書く方法

先日、WWW::Curl をラッピングした HTTP クライアントなモジュールを書いたのですが、テスト用に HTTP サーバーを用意しないといけないと思いつつ、他の HTTP クライアントがどのようにテストをしているか調べてみたところ、WWW::Curl は、 my $url = $ENV{C…

Server::Starter + Starman で HUP 再起動が上手くいかないことがある

現在、Server::Starter + Starman で運用している環境があるのですが、週に1回ほど古いワーカーが終了しないで残り続けるという現象が起こっています。FCGI 起動の名残りで、毎時間 HUP を投げていたのですが、普段は問題なく starman プロセスが再起動して…

Perl で時刻の文字列を生成する速い方法

DateTime が重くて遅いのは周知ですが、一応どれくらい差が出るかベンチマーク。「2010-07-01 15:10:53」みたいなフォーマットのタイムスタンプ文字列を生成したい場合です。DateTime はオブジェクトをキャッシュして使い回しても相当遅いです。POSIX はコア…

HTML タグをエスケープする方法 3 通りと速度比較

HTML::Entities を使う方法と、正規表現を段階的に使う方法と、変換テーブルを用意して正規表現で置換する方法と、どれが一番速いか気になったので計測してみました。& から順番に変換していく方法が一番速かったです。ベンチマークスクリプトは以下です。 R…

Tokyo Tyrant 用テストモジュール Test::ttserver リリース

Key Value Store の Tokyo Cabinet のデータベースサーバーである、Tokyo Tyrant のインスタンス起動管理サーバーの ttserver をテスト用に一時的に起動できる Test::ttserver をリリースしました。http://search.cpan.org/~craftwork/Test-ttserver-0.001/l…

Test::Dependencies と Module::Install でテストが通らない

依存モジュールの指定漏れを防ぐ方法 - 名称未設定 - subtechMakefile.PL に書き忘れている依存モジュールを自動検出してくれるテストモジュール Test::Dependencies ですが、Module::Install と併用していると、テストがコケます。これは、Module::Install …

例外捕捉モジュール Try::Tiny のベンチマーク

Yuval Kogman 氏が Try::Tiny という新しい例外捕捉モジュールをリリースしたようなので、ベンチマークを取ってみました。ベンチマークコードは、Error.pm のオーバーヘッドで書いたものを流用しました。

馬鹿にできないアクセサのオーバーヘッド

Moose は has でアクセサ定義できるので便利なのですが、アクセサは要はサブルーチンコールなので、パフォーマンス気にして作っているサービスではオーバーヘッドが気になるなぁと思い、ちょっとベンチ取ってみました。ベンチマーク対象は、Moose で作成した…

空文字列比較は eq/ne と length のどっちが速いか

最近、空文字列のチェックの際に、面倒臭くて $_ eq '' の代わりに、空文字列だと length が偽を返すことを利用して、自分しか見ないようなソースでは以下のように書くことが多いのですが、 return unless defined and length; パフォーマンス的には、$_ ne …

Catalyst で setup にかかった時間を表示する

Catalyst はデフォルトでリクエスト毎の処理時間をログ出力してくれますが、setup() 時の処理時間は表示してくれません。チューニングの目安として見たいので実装してみました。Upgrading to Catalyst 5.80 で紹介されている、setup の hook point を使いま…

一番近い CPAN ミラーを検出するスクリプトを書いた

READ IN ENGLISHCPAN モジュールをインストールするときに、ダウンロード速度が気になったので、ミラーサイトから一番近いサイトをピックアップするスクリプトを書いてみました。CPAN から、MIRRORED.BY を取ってきて、dst_http に指定されているホスト全て…

プロ・アマ・プログラミング言語を問わずに今までの4倍のスピードで学習する方法

私が実践して、とても効果が上がった学習方法を紹介します。 どんなプログラミング言語でも関係なく通用するやり方だと思います。 この学習方法に切り替えてからの 1 年の学習量は、それ以前の 4 年分に匹敵すると感じています。以下にその方法を紹介します。

CPAN Module How To - Text::SimpleTable

READ IN ENGLISHシリーズ化できるか分かりませんが、Google で検索しても、あまり情報が無かった CPAN モジュールの使い方を紹介していきたいと思います。先ほど、アップデートされていた Text::SimpleTable を紹介したいと思います。0.05 から 1.0 になって…

if と exists と my と delete を 1 行で表現する

段階的にこう書くところを if ( exists $hashref->{'key'} ) { my $value = $hashref->{'key'}; delete $hashref->{'key'}; do something... } key の削除を先に行っても問題なければ、まとめてこう書くことも出来ます。 if ( my $value = delete $hashref->…

Perl スクリプト - 自動バックアップ

最近 Nas を導入したので、Linux から重要なファイルを自動でバックアップするスクリプトをサクっと Perl で書いてみました。単にシェルスクリプトでエラー処理書くのが面倒臭かっただけですが。 コアモジュールしか使ってません、Perl 5.005 とか古いバージ…

Template-Toolkit のテンプレートファイルを vim で色付きにする

昨今のディストリビューションに入ってる vim はほとんどデフォルトでカラー表示に対応しています。せっかくなので、TT のテンプレートファイルもカラー表示対応にしましょう。TT2 syntax : Syntax Highlight for Template-Toolkit 2.x 上記ページからシンタ…

Catalyst を daemontools で監視しつつ lighttpd の外部 FastCGI で走らせる方法とそのメリット

JPA セミナーの時に jshery 氏も勧めていましたし、近頃 Geek の話題で目立つようになってきた、Catalyst を mod_perl でなく、外部 FCGI として走らせる設定方法を紹介します。Catalyst プロセスの起動管理は DJB 氏の daemontools による管理がお勧めです…