2008-03-24 Mon

Catalystアプリを作る際のポリシー

[Perl]

Catalyst は Perl の Web アプリケーションフレームワーク。
そのため、

- ひな形からアプリを作る際の自由度
- Perl である故の自由度

のような自由度が絡み合って、
クールで、より多くの部分が再利用可能な、
開発、運用時にトラブルの少ない開発ポリシーは、
未だに「コレ!」というものが、あんまりないですよね。

先日というか、結構前におもしろかったのは、typesterさんの記事。

- Catalystアプリオレオレポリシー
-- http://unknownplace.org/memo/2008/02/29#e002

camr作った時点での僕のポリシーは

1. アプリ名にかかわらず設定ファイルはconfig.yamlとconfig_local.yaml
2. でも変更することがないほとんどの設定はyamlには書かない。yamlがごちゃっとするときもい
3. ForceUTF8系モジュールは使用しない。内部がきちんとutf8で統一されていれば必要ない。
4. MyApp::UtilsとかいうのでいろいろBKなことをまとめてする。uri_forを気に入るように直したり、FillInFormの挙動変えたり


この記事のブクマコメントにikebeさんが

俺は MyApp::Context って名前で BK まとめてるな。


とコメントしていたのを見ました。

Contextという単語は、僕の頭では「文脈、脈絡」みたいな感じ。
ちょっと考えると、かなりガッチリはまったモジュール名ですね。

投稿者:としのり  日時:23:59:59 | パーマリンク | コメント | トラックバック() |

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

投稿者:としのり  日時:23:59:59 | パーマリンク | コメント | トラックバック() |

2008-03-21 Fri

Emacs で yasippet.el および Perl モジュール名の動的補完を使う

[Perl][emacs]

Twitterを眺めたら、yasnippetという単語が見えたのでググりました。

- yasnippetがすごい!!!!1112345! - antipop
-- http://d.hatena.ne.jp/antipop/20080314/1205517419

yasnippetがすご過ぎる!!!!1112345!


あ、kentaroさんか。「へぇ、面白いんだ」と思い早速導入しました。

- Yet Another Snippet Package | M-x all-things-emacs
-- http://www.emacsblog.org/2008/03/13/yet-another-snippet-package/
The creator of smart-snippet, an extension to snippet.el, has now created the aptly titled yasnippet – Yet Another Snippet extension for emacs.


まず、emacs lispを入れてるディレクトリにsvn coしました。

- yasnippet - Google Code
-- http://code.google.com/p/yasnippet/
If you want to always follow the latest code. You can check out it from the svn repository:

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 and initialize yasnippet in your ~/.emacs file:

(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
cperl-mode初回起動時にコマンドを流していて、すごく重くていらいらしてたので、あらかじめモジュールの一覧だけのファイルを作るようにした。


とのことなので、以前書いた.emacsの一部を削除し、追記。
さらに、make_pmlist.shをコピペで作って、cronに登録しました。
dabbrevのショートカットには\M-1を割当ています。

一応最初だけ、M-x perl-make-pmlist-bufferしました。

ここまでやると、EmacsでPerlのファイルを書くときの起動が早くなります。

さらに、Tabによる補完と、動的な補完のおかげで、ちょっと楽になります。
「subと書いて \tを入力 サブルーチン名書いて カーソル移動して サブルーチン名の最初書いて \M-1入力 1で候補選んで、、、」とかできるようになりました。

投稿者:としのり  日時:23:59:59 | パーマリンク | コメント | トラックバック() |

2008-03-06 Thu

Catalyst の Model 問題

[Perl]

Catalyst でアプリに依存しない Model は再利用できるようにしたいです。
けれど、標準のヘルパースクリプトだと、
「MyApp::Model::*」以下に作ることになってしまいます。

そうすると、無駄に Model のパッケージ名も長くなるし、
なにより Model が Catalyst に依存することになり、
テストしにくくて死ぬってことで、良いことが無いです。

既存のモジュールを取り込むために、
Catalyst::Model::Adaptor使っても、なんかいまいちな感じ。

ということで、今日このごろの議論を眺めていると、
以下のような方向でまとまりそうです。なるほど。

- はてなブックマーク - タグ catalyst
-- http://b.hatena.ne.jp/t/catalyst?sort=eid

- Model は lib/MyApp/Model より上に単体で動作するモジュールをつくる
-- Catalyst::Model::Adaptor を使うべき?
-- いや、lib/MyApp/C/とかにモジュールを作ろう
- DB がらみは、一つのDB内で簡潔するなら、DBIC::Schemaクラスのインスタンスに書く
- 複数のDBにまたがるときはCに書いとく
- Controllerには、ロジックを書かず、ロジックを扱いたいなら、適時C以下のモジュールかDBIC::Schemaのインスタンスに投げる
- なんなら Catalyst はDispatcher用途にしか使わない
- config.ymlに頻繁に変更しない設定は書かない。基本モジュールに直書く。

投稿者:としのり  日時:23:59:59 | パーマリンク | コメント | トラックバック() |

2008-03-04 Tue

ファイルが更新されてたら何かするPerlスクリプト

[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 対象ファイルのパス 対象ファイルのロックファイルのパス 処理を書いたファイルのパス	


たぶん、こういうの他にあると思うんですが。。。

投稿者:としのり  日時:23:59:59 | パーマリンク | コメント | トラックバック() |

2008-01-24 Thu

Imager で JPEG ファイルを扱うときの画質レベル

少し前に、写真をブログ用に縮小する Perl スクリプトを書いたのですが、
どうも生成される画像の質がよろしくありません。

かなりストレスを感じたので、Imager のマニュアルに目を通すと、
以下のような趣旨の一文が見つかりました。

画像を write するときに、jpegquality を設定できるよ。標準値は75だよ。


あわてて試したところ、「jpegquality = 95」くらいだと、
食べ物がおいしそうなまま画像が小さくなることが分かりました。
今後 Imager を使うときは、jpegquality くらいは設定します。

投稿者:としのり  日時:23:59:59 | パーマリンク | コメント | トラックバック() |