Image::Magickで半透明な画像を乗せたくて、探してみるものの日本語Docsが中々見つからず。
結局公式Docsを参照して以下のやり方をみつけた。
use Image::Magick;
my $image = Image::Magick->new;
$image->Read('upopo.jpg');
my $image_base = Image::Magick->new;
$image_base->Read('image_base.jpg');
$image->Composite(image=>$image, compose=>'Dissolve', x=>0, y=>0,opacity=>'60%');
$image_base->Write('output_sample.jpg');
Compositeのオプションを追っていくと他にもいろいろありそうだ。
compose=>'Dissolve'とopacity=>'**%'の組み合わせにたどり着くのが長かった。
↓の画像のように透明な感じに乗せることができます。

Catalystみたいに stash に変数を突っ込める、Sledge::Plugin::Stashですが、自分とこのサーバではうまい事動かなかったので同ソースをちょっと修正。
/usr/local/lib/perl5/site_perl/5.8.8/Sledge/Plugin/Stash.pm
BEFORE_OUTPUT —> AFTER_DISPATCH に変更。
$pkg->add_trigger(
AFTER_DISPATCH => sub {
#BEFORE_OUTPUT => sub {
my $self = shift;
$self->tmpl->param( %{ $self->stash } );
}
);
ちなみにSledge::Plugin::BeforeOutputはこちらからcoできるみたいです
↓Class::TriggerとSledge::Plugin::BegforeOutputの組み合わせに注意
Sledge-Plugin-BeforeOutput で嵌る
search_literal
http://d.hatena.ne.jp/nekokak/20070118/1169108107
search_literal いいね。
$rs->search({id => { '>' => 5}},)
が
$rs->search_literal('id >= ?', 5)
非常にシンプル
Sledge::Plugin::Validatorです。
テンプレ側で function(NOT_NULL)とかを指定しなくても
現在Validチェックで引っかかっている何かしらのエラーの文言を返すメソッドがほしかった。
[% valid.error_message(valid_param) %]
とテンプレで書いておけば、適当なValidメッセージがかえってくるような。
で、Sledge::Plugin::Validator に以下のメソッドを追加。
sub error_message {
my $self = shift;
my $param = shift || return;
my @valid_key = %{ $self->{ERROR}->{$param} };
$self->get_error_message($param,uc($valid_key[0]));
}
あと Sledge::Plugin::Validator::range とかも作ってみたので
あとから書く予定。
DBIx::Classをいじっているわけですが、
Class::DBIみたいに、パッケージに自分を生成するクラスメソッドを作りたかったんですよ。
こんな感じにしたい
$schema->resultset('Sample')->recent_entries;
DBIx::Class::ResultSetManagerでResultSetにメソッドを追加 の素晴らしい事例を見て納得、なるほど。
こんなのがテーブルにマッピングしたモジュールにあって、呼び出したらイテレータなどが返ってくるという感じ。↓
package Schema::Sample;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/
ResultSetManager
Core
/);
__PACKAGE__->table(’sample');
__PACKAGE__->add_columns(qw/id title body timestamp/);
__PACKAGE__->set_primary_key('id');
sub recent_entries : ResultSet {
my $class = shift;
return $class->search( undef, { order_by => [ qw/timestamp/ ] } );
}
で、resultsetから直接 recent_entries を実行できました。
大変役に立つ Sledge::Plugin::Validator ですが、
例えば数値などの入力で良くあるケースが
・都道府県(1~47とか)をプルダウンで入力させたい
・ラジオボタンなどで value が 0、1、2 のいずれかを選択させたい
などだと思います。
S::P::Validatorでマッチするようなのが見つけられなかったので
追加してみました、こんな感じですかね。
Sledge::Plugin::Validator::range
package Sledge::Plugin::Validator::range;
use strict;
use vars qw($VERSION);
$VERSION = '0.01';
sub load {
my $self = shift;
$self->set_function(
RANGE => &is_RANGE,
);
}
sub is_RANGE {
my $value = shift;
my $min = shift;
my $max = shift || $min;
if($value >= $min && $value <= $max) { return 1; }
return 0;
}
1;
で、Validator でこれを利用できるようにしておいて(Sledge/Plugin/Validator.pm の40行目辺り)
# チェック定義
#
$self->{valid} = Sledge::Plugin::Validator->new(
#LOAD_FUNCTION => [qw(default japanese)],
LOAD_FUNCTION => [qw(default japanese range)],
MESSAGE_FILE => eval {$self->create_config->validator_message_file},
);
で、Pagesクラスで以下のような書き方で。
sub valid_index {
my $self = shift;
$self->valid->check(
'pref_id' => [qw(NOT_NULL UINT), ['RANGE',1,47], ],
);
DBIx::Classでちょっと困った。
当然といえば当然なのだが、あるレコード結果をmemcachedなどのキャッシュに保存した場合、
belongs_toで定義したカラムが含まれ、それを参照するとエラーになる。
TTで
[% article.category.name %]
とかしたくても、articleとcategoryがbelongs_toの関係の場合
Memcache化(キャッシュを参照するとエラーる)できないので、もう少し調査してみる。
※belongs_toを使わないで、別schemaのresultsetを参照できればそれでもいいんだが。
TTのFilterで
Template::Plugin::Filter::VisualTruncateというのがリリースされた。
長い文章などを途中で切ってくれるモジュール。
早速つかってみる。
[%- USE Filter.VisualTruncate 'euc-jp' -%]
としておいて、
[% body = '1234567890123456' %]
[% body | visual_truncate(10,'') | html %]
で、実行結果は当然
1234567890
全角文字だと
[% body = '0123456789' %]
[% body | visual_truncate(10,'') | html %]
で、実行結果は
01234
ん?バイト数で計算してる?
もうちょっと調べてみる。
とりあえずSELECT時のSQLっぷりをみたいだけなので、
use base qw(Class::DBI);
.
.
.
__PACKAGE__->add_trigger(
select => sub {
my $self = shift;
$self->db_Main->trace(1);
},
);
これで DBI->traceな感じで。