2008-03-24 Mon
Catalystアプリを作る際のポリシー
Catalyst は Perl の Web アプリケーションフレームワーク。
そのため、
- ひな形からアプリを作る際の自由度
- Perl である故の自由度
のような自由度が絡み合って、
クールで、より多くの部分が再利用可能な、
開発、運用時にトラブルの少ない開発ポリシーは、
未だに「コレ!」というものが、あんまりないですよね。
先日というか、結構前におもしろかったのは、typesterさんの記事。
- Catalystアプリオレオレポリシー
-- http://unknownplace.org/memo/2008/02/29#e002
1. アプリ名にかかわらず設定ファイルはconfig.yamlとconfig_local.yaml
2. でも変更することがないほとんどの設定はyamlには書かない。yamlがごちゃっとするときもい
3. ForceUTF8系モジュールは使用しない。内部がきちんとutf8で統一されていれば必要ない。
4. MyApp::UtilsとかいうのでいろいろBKなことをまとめてする。uri_forを気に入るように直したり、FillInFormの挙動変えたり
この記事のブクマコメントにikebeさんが
とコメントしていたのを見ました。
Contextという単語は、僕の頭では「文脈、脈絡」みたいな感じ。
ちょっと考えると、かなりガッチリはまったモジュール名ですね。
2008-03-21 Fri
YAPC::Asia 2008 の公式サイトでスポンサーとスピーカーが公開に
YAPC::Asia 2008 の公式サイトがリニューアルしたのと同時に、
スポンサーとスピーカーが公開になりました。今年もかっこ良いデザインです!
- YAPC::Asia 2008 - May 15-16th in Tokyo, JAPAN
-- http://conferences.yapcasia.org/ya2008/

今年も多くのスポンサーに支えられ、さらに多くのスピーカーが参戦してくれます。
志の高いみなさんが、すごい勢いでイベントに足を運んでくれでしょうし、
きっと最高のイベントになるのでは。わくわくしてます。
チケットの販売開始はもうすぐみたいですから、うっかり忘れないようにしてくださいね。
チケットを購入してくださる方は、「チケットがうっかり不要になったら、頑張って他の人に譲るぜ!」という気持ちで購入して頂けると、「残念なことにチケットを買えなかった人」が、たくさん救われるような気がして嬉しいです。
ボランティアスタッフも、まだ若干名ですが募集していると思います。
僕はYAPCで多少人生が変わったので、変わろうとしている方にボランティアで貢献することをおすすめします。
YAPC::Asiaまで、あと2ヶ月を切りました。
5/15、 16付近はスケジュールをバッチリ開けておいてくださいね。 m(_ _)m
2008-03-21 Fri
Emacs で yasippet.el および Perl モジュール名の動的補完を使う
Twitterを眺めたら、yasnippetという単語が見えたのでググりました。
- yasnippetがすごい!!!!1112345! - antipop
-- http://d.hatena.ne.jp/antipop/20080314/1205517419
あ、kentaroさんか。「へぇ、面白いんだ」と思い早速導入しました。
- Yet Another Snippet Package | M-x all-things-emacs
-- http://www.emacsblog.org/2008/03/13/yet-another-snippet-package/
まず、emacs lispを入れてるディレクトリにsvn coしました。
- yasnippet - Google Code
-- http://code.google.com/p/yasnippet/
svn checkout http://yasnippet.googlecode.com/svn/trunk/ yasnippet
そして、coしたyasnippetをadd-to-list 'load-pathしました。
そのうえで、以下に従い.emacsに追記しました。
- yasnippet - Google Code
-- http://code.google.com/p/yasnippet/
(require 'yasnippet) ;; not yasnippet-bundle
(yas/initialize)
(yas/load-directory "/path/to/the/snippets/directory/")
その他に、前の記事でPerlモジュール名の動的補完について、
改良が行なわれた記事がありました。
- EmacsでPerlのモジュール名を動的に補完する - antipop
-- http://d.hatena.ne.jp/antipop/20080304/1204635027
とのことなので、以前書いた.emacsの一部を削除し、追記。
さらに、make_pmlist.shをコピペで作って、cronに登録しました。
dabbrevのショートカットには\M-1を割当ています。
一応最初だけ、M-x perl-make-pmlist-bufferしました。
ここまでやると、EmacsでPerlのファイルを書くときの起動が早くなります。
さらに、Tabによる補完と、動的な補完のおかげで、ちょっと楽になります。
「subと書いて \tを入力 サブルーチン名書いて カーソル移動して サブルーチン名の最初書いて \M-1入力 1で候補選んで、、、」とかできるようになりました。
2008-03-06 Thu
Catalyst の Model 問題
Catalyst でアプリに依存しない Model は再利用できるようにしたいです。
けれど、標準のヘルパースクリプトだと、
「MyApp::Model::*」以下に作ることになってしまいます。
そうすると、無駄に Model のパッケージ名も長くなるし、
なにより Model が Catalyst に依存することになり、
テストしにくくて死ぬってことで、良いことが無いです。
既存のモジュールを取り込むために、
Catalyst::Model::Adaptor使っても、なんかいまいちな感じ。
ということで、今日このごろの議論を眺めていると、
以下のような方向でまとまりそうです。なるほど。
- はてなブックマーク - タグ catalyst
-- http://b.hatena.ne.jp/t/catalyst?sort=eid
-- Catalyst::Model::Adaptor を使うべき?
-- いや、lib/MyApp/C/とかにモジュールを作ろう
- DB がらみは、一つのDB内で簡潔するなら、DBIC::Schemaクラスのインスタンスに書く
- 複数のDBにまたがるときはCに書いとく
- Controllerには、ロジックを書かず、ロジックを扱いたいなら、適時C以下のモジュールかDBIC::Schemaのインスタンスに投げる
- なんなら Catalyst はDispatcher用途にしか使わない
- config.ymlに頻繁に変更しない設定は書かない。基本モジュールに直書く。
2008-03-04 Tue
ファイルが更新されてたら何かするPerlスクリプト
ファイルが更新されたら何かするスクリプトを書きました。
(任意の)ロックファイルに、対象ファイルを前回処理したときの
対象ファイルのタイムスタンプを保存しておきます。
スクリプトをcronとかで回して、対象ファイルの更新時間が変わっていたら、
指定したスクリプトを走らせるという、単純なものです。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use IO::File;
my $target_file = $ARGV[0];
my $lock_file = $ARGV[1];
my $process_file = '';
unless ($ARGV[2]) {
$lock_file = $ARGV[0].'lock';
$process_file = $ARGV[1];
}
else{
$process_file = $ARGV[2];
}
unless (-e $target_file) {
die "[error : cl_auto_compile] There is not target file to auto process.";
}
my $pre_time = localtime( (stat($target_file))[9] );
# 処理する必要が無ければ止める
if (-e $lock_file) {
my $io = IO::File->new($lock_file, 'r') or die $!;
my $line = $io->getline;
$io->close;
if ($pre_time eq $line){
exit;
}
}
# 処理を書いたファイルを実行する
{
my $io = IO::File->new($lock_file, 'w');
$io->print($pre_time);
$io->close;
eval{`$process_file`};
}
exit;
# 実行方法
# ./auto_process.pl 対象ファイルのパス 処理を書いたファイルのパス
# ./auto_process.pl 対象ファイルのパス 対象ファイルのロックファイルのパス 処理を書いたファイルのパス
たぶん、こういうの他にあると思うんですが。。。
2008-01-24 Thu
Imager で JPEG ファイルを扱うときの画質レベル
少し前に、写真をブログ用に縮小する Perl スクリプトを書いたのですが、
どうも生成される画像の質がよろしくありません。
かなりストレスを感じたので、Imager のマニュアルに目を通すと、
以下のような趣旨の一文が見つかりました。
あわてて試したところ、「jpegquality = 95」くらいだと、
食べ物がおいしそうなまま画像が小さくなることが分かりました。
今後 Imager を使うときは、jpegquality くらいは設定します。

