アーカイブ

2011年05月

カテゴリ:
リクエストハンドラを書いたら validate したくなるのが人間。

そこで Dancer::Plugin::ValidationClass .

Validation::Class のラッパーということです。 Validation::Class 使った事無いですが。。。

とりあえず、dancer の設定ファイル、config.yml(?) に

plugins:
  ValidationClass:
    class: Kirigamine::Validator
とか書いとく。で、

use Dancer::Plugin::ValidationClass;
    unless (validate 'param') {
        my $errors = validation->errors;
        debug Dumper $errors;
        set_flash($errors);
        return redirect '/';
    }
validate 構文(?)が使えるようになるので、それにパラメタわたして、Validator クラスでは
package Kirigamine::Validator;
use strict;
use warnings;
use Validation::Class;

field 'param' => {
                   required   => 1,
                   min_length => 1,
                   max_length => 10,
                   regex      => '^\d+$',
                   label      => 'params of any dispatch',
                   error      => 'error: params of any dispatch',
                 };

1;
こんなで。

set_flash ってのは、ただ、メッセージを保持するだけのやっつけ機構。dancer のPODにあったやつ。

Makefile.PL に

    PREREQ_PM => {
                   ...
                   'Dancer::Plugin::ValidationClass' => 0,
     },
書いて push。

こんなで

カテゴリ:
Dancer がらくちんだったので、しばらく勉強する予定。

いわゆるシナトラということで。

epoch を 日付に変換する:

get '/epoch/:param' => sub {
    my $localtime  = DateTime->from_epoch('epoch' => params->{param}, 'time_zone' => 'Asia/Tokyo');
    template 'epoch', { local_time => $localtime,
                        now => DateTime->now('time_zone' => 'Asia/Tokyo'),
                        config => config,
                      };
};

views/epoch.tt を用意して TTっぽく <% local_time %> とかすると表示。

dotcloud に push するときに、Makefile.PL にちゃんと DateTime を必要だと明示する必要があるよう。当然と言えば当然か。
    PREREQ_PM => {
        'Test::More' => 0,
        'YAML'       => 0,
        'Dancer'     => 1.3040,
        'DateTime'   => 0,
        'Plack::Request' => 0,
    },
こんなで

view に渡す方法まだまだありそうだな。トリガーがあるし、共通なのはそこなんでしょうね。
とかとか。

カテゴリ:
まず python を。ところが、うちの centos の python は 2.4 なので、pythonbrew をいれる。--force つきで。

pythonbrew

そして、

dotCloud でPSGI Hello World


おわり。まぁせっかくなので dancer 使ってみっか。

git が入ってないので src から make.

dancer が入ってないのでインスコール

# perlbrew perl-5.12.3
# perl /usr/bin/cpanm dancer

(cpanm は1ついれればいい技があるらしいので、ぐぐってください)

で、 dotcloud の docs . あれ? git いれなくてよかった。ちきしょう。

まるで障壁なし。楽です。

dotcloudで遊んでみた

をみて domain も設定。ふんふん。GAE より楽だ。

カテゴリ:
ヒストグラムインターセクションって極端に色数が少ない1枚と何かを比較したりする際にどうも役に立たない気がするというか。

その関数とはこれ
sub calc_hist_intersection {
    my ($hist1, $hist2) = @_;
    my $total;
    my $ea = each_array( @$hist1, @$hist2 );
    while(my ($his1, $his2) = $ea->()) {
        $total += min($his1, $his2);
    }
    return $total / sum(@$hist1);
}
ですが、いずれにせよ、最終行は、
return $total / min(sum(@$hist1), sum(@$hist2));
じゃないでしょうか?

で、これだとどうもあれだったので
sub calc_hist_intersection {
    my ($hist1, $hist2) = @_;
    my $total;
    my $ea = each_array( @$hist1, @$hist2 );
    while(my ($his1, $his2) = $ea->()) {
        $total += abs($his1 - $his2);
    }
    return 1 - $total / max(sum(@$hist1), sum(@$hist2));
}

こうしてみた。数式とかは書けないので書きません。

このページのトップヘ

見出し画像
×