Catalystのforward()の挙動でforward($class, $action)とforward($path)の違いがよくわかってなかった。今度からちゃんと使う。もっと細かい違いがあるのかもしれないけど、とりあえず普通使いたいのは$pathだ。Actionがちゃんと付随して動作する。forward($class, $action)だと、ただcontextを渡しただけで$class->$action()と変わらない。
2007年04月
たまにはこうい朝食も作ります
知り合いから日向夏をもらったので、それと近所の濱田屋のパンでスクランブルエッグ。付け合わせは茄子、椎茸、タマネギをトマトソースで炒めたもの。濱田屋の食パンは初めてなのだけど、予想以上にうまくて感激。
レイトン教授と不思議な町
完クリしますた。ごめん、本当は最後の問題は夜中にやってて集中力なかったからズルした。
Gungho Components
http://d.hatena.ne.jp/kdaiba/20070419
Gunghoのコンポーネントはオブジェクト作成時に設定されます。なので自分でinject_baseする必要はないのです。
---
components:
- Throttle::Simple
これか、これと同等の事をGungho設定時に渡すだけでOK。んで、書きながら思ったんだけどここの設計、ちょっと考え直さなくてはいけないことに気づいた。componentsはCatalystを参考に作ったのだけど、実装としてはGunghoのベースクラスを変更するって事なので、コンポーネントの変更はグローバルに適用されるのだ。でもGungho->newってしてるってことはこれってインスタンス毎の設定してるような印象を与えるし・・・
ってことで、Gungho->newはちょっとやめようかと。Gungho->setup; Gungho->runのほうが実装的には正しい。インスタンス毎に設定を変えられるようにしてもいいんだけど、どうせ1度に複数インスタンスを動かす事はありえないのでこれでよいような気がするな。で、newはsetup()へのエイリアスにする、と。
コメント求む。
use Gungho;
Gungho->setup('config.yml');
Gungho->run;
use Gungho::Inline;
Gungho::Inline->setup({
provider => sub { ... },
handler => sub { ... }
});
Gungho::Inline->run;
もしくは
use Gungho::Inline;
Gungho::Inline->run({
provider => sub { ... },
handler => sub { ... }
});
で済ませるか。
一番時間を費やしている事
この前最近の自分の生活で一番時間を費やしている事は何かと話していたら、どう考えても一位「仕事」、二位は「今日の献立を考えている」だ、という結論に達した。その話をしている時にもやはり「卵があるからスクランブルエッグ・・・それに水菜のサラダ・・・」とか考えてた。
そしこの前書いた「リトル・フォレスト」に書いてある野菜の献立を見て、今度何を作ろう、とか考えている自分がいる。
近況→足
ちょい前に足に◯KEAの本棚の板を落として爪をはがしたわけですが。その時にはちょっとさすがに動転しててあまり書けなかったのだけれども、あとからよくよく考えるにこの板の側面がちょうど爪の根元に当たって前方向に滑った結果爪を根元からはがす事になった模様。というわけで爪が割れたとかではなく、今は本当に根元から右足人差し指の爪がないわけです。
一応例の高い絆創膏が効いてるのか、昨日から絆創膏もはらないで出歩いてる。ただ、痒い。爪の根元がないから根元の皮の部分があまってふにゃふにゃ。爪はちゃんと生えてくるのかなぁ。
Virginia Tech
http://www.youtube.com/watch?v=OHz0RkKHmtg
怖いなぁ。俺の大学でこういう事起こってたら本当逃げるところなかったよなぁ。アジア人が犯人だということなんだけど・・・例えば俺は人種は関係ないのは知ってるし、人種が関係あったとしても日本人と韓国人ではまた違うってのも知ってるし、別にどうにもならないのだが、アメリカという国は東海岸や西海岸の都会以外では依然「思い込みの激しい」人達が多くて、大きなくくりで同じアジア人として見られて問題になったりと色々あったりするのが怖いなあ。
幸か不幸か、とりあえずバージニアには知り合いはいない。
HTML::FormFuとData::Visitorで動的な値を使う
HTML::FormFuではYAML形式とかでフォームを指定できるのがとってもイイ!のだが、これはこれでデータベースに入ってるリストをプルダウンメニューとして表示したい時とかに困る。特にCatalyst::Controller::HTML::FormFuを使って、FormConfigとかでキレイに組み込む事ができるのにコードを書かなくちゃいけないなんて・・・ということでCatalystではModelが使えるのに着目して、FormFu Modelを作って、Data::Visitorで値を動的に変更する仕組みにしてみた。
以下のコードを使っておけば、
- type: select
options:
- group: dynamic.foo.values
みたいな感じで、dynamicで指定された内容が置き換えられるので、好きな値を動的に吐き出せばいい。結構重宝してる。
# 前提:HTML::FormFuを使える。Catalyst::Plugin::Cacheとかでcacheが使える
# Data::Visitorが使える。
package MyApp::Controller::Foo;
use base qw(Catalyst::Controller::HTML::FormFu);
sub foo : FormMethod('form_config') { }
sub form_config {
my ($self, $c) = @_;
return $c->model('FormFu')->form_config('path/to/config.yml');
}
package MyApp::Model::FormFu;
use base qw(Catalyst::Model);
use Data::Visitor::Callback;
use YAML::Syck qw(LoadFile);
__PACKAGE__->mk_accessors($_) for qw(context);
sub ACCEPT_CONTEXT
{
my ($self, $c) = @_;
$self->context($c);
$self;
}
sub form_config
{
my $self = shift;
my $file = shift;
my $c = $self->context();
my $cache = $c->cache(backend => 'parts');
my $config = $cache->get("model.formfu.form_config.$file");
if ($config) {
return $config;
}
$config = $self->load_config_from_file($file);
$cache->set("model.formfu.form_config.$file", $config);
return $config;
}
sub load_config_from_file
{
my $self = shift;
my $file = shift;
my $c = $self->context;
my $path = $c->path_to(qw(root formfu config), $file);
my $config = LoadFile($path->stringify);
my $re = qr{
^
dynamic\.([\w_.-]+)
}x;
my $v = Data::Visitor::Callback->new(
plain_value => sub {
my ($visitor, $value) = @_;
if ($value !~ /$re/) {
return $value;
}
my $method = $1;
$method =~ s/\./_/g;
return $self->$method;
}
);
return $v->visit($config);
}
git
jrockがMLで問題提起してた。なんかまたややこしいスレッドになりそうな予感がする。
http://ja.wikipedia.org/wiki/Git
http://www-06.ibm.com/jp/developerworks/linux/060809/j_l-git.shtml
Gungho 0.04
rev 61でリリース!ログレベルの変更、Gungho::Inline, Gungho::Provider::YAML, あとはEngine::POEでコンテントを勝手にデコードしないようにするパッチとかを入れましたよ。
リトル・フォレスト
読んだ。こういう生活憧れるなぁ。食うために仕事する、それだけでもいいじゃんね。
Class::C3::XS - ktkr
http://search.cpan.org/~blblack/Class-C3-0.15_02/
キタコレ。個人的にタイムリー。p5pでC3をPerlコアに入れる話もあったから、その時のコードをベースにしたのかな?
Text::MeCab 0.16
$node->format()って入れた。これでnode-formatとかが使えるはず。相変わらずall-morphsの件は謎。0.15でアップする予定が、0.16にしちゃった。ごめんなさい・・・
最近ちょっと暇
最近お仕事がちょっと暇。そのおかげでCPANモジュールをばんばんアップできてるわけですが。お仕事あったら声かけてくださいまし・・・
Gungho::Inline - GJ!
おお、いいと思います。
http://labs.cybozu.co.jp/blog/kazuho/archives/2007/04/gungho.php
コードの細かいところをまだみてないですけど、そういう事やりましょう!
追記:とりあえずrev 56で取り込んだ!ありがとうございます!
Text::MeCab --all-morphs
formatNode()に対応するために内部構造を変更中。でもなんでだかall-morphsがウマく動かない。なんでやねん。0.15_01としてこのまま出してしまうかも。
Data::Visitor::Encode 0.05
スカラー型のオブジェクトに対応できてなかった。修正。
週末
鯛のアラでお茶漬け作った。ご飯に鯛の出汁とほうれん草、水菜、じゃこ、ネギ。でも海苔入れ忘れた。タマネギと豚ひき肉でケチャップご飯つくってオムレツ作った。相変わらずうまくまとめられない・・・。どうした、俺。ハナマサで赤身メインのサーロイン買ってきてステーキ。付け合わせはお茶漬けの具の残りの水菜の他には粉ふきいもと人参のグラッセ。
先週怪我を負わせられた例の棚もようやく作った。なんかようやく家らしくなった。
PoCo::Client::HTTP decodes content (w/o Permission)
こりゃきづかなんんだ。PoCo::Client::HTTP 0.80でこんなんでてる。
2006-10-25 06:55:14 (r294) by rcaputo
lib/POE/Component/Client/HTTP.pm M; t/14_gzipped_content.t A; MANIFEST
M; Makefile.PL M; lib/POE/Component/Client/HTTP/Request.pm M
Apply Rob Bloodgood's patch to transparently decode non-streaming
content before it's returned. This gives us support for gzip
compressed content. Resolves long-standing rt.cpan.org ticket 8454.
PoCo::Client::HTTPでGETしまくってたら、一部のサーバーのどの日本語ページも$res->content_typeの文字コードと実際の文字コードが合わなくておかしいと思ってたんだけど、こういうことだな?多分0.80以降のXangoベースのアプリも壊れる予感。
うぅ、こいつは小さな親切、大きなお世話の類いだな・・・GunghoではしょうがないのでPOEエンジン内で、またエンコードしなおすという荒技を使う事にしてみる。
# Work around POE doing too much for us.
if ($POE::Component::Client::HTTP::VERSION >= 0.80) {
if ($res->content_encoding) {
my @ct = $res->content_type;
if ((shift @ct) =~ /^text\//) {
foreach my $ct (@ct) {
next unless $ct =~ /charset=((?!utf-?8).+)$/;
my $enc = $1;
require Encode;
$res->content( Encode::encode($enc, $res->content) );
last;
}
}
}
}
これ、オプションにしてくれればいいのに。
Twitter::Shell
Twitter::Shell書いた。これであなたもコマンドラインからTwitterに参加できまっせ。
./script/twittershell
twitter> say Type your message here!
update ok
twitter> friends_timeline
[Daisuke Maki] Type your message here!
....
みたいな感じで。