fastladderメモ
動かすのに必要だったもの
sudo aptitude install ruby ruby1.8-dev rubygems
sudo aptitude install libfreeimage-dev
sudo gem install rails
sudo gem install sqlite3-ruby
sudo gem install feed-normalizer
DBセットアップ
rake db:migrate RAILS_ENV=development
起動
./script/server -e development
すばらしすぎるなぁ。
JSON::XS を実戦投入した
いままでずっと JSON::Syck
を使い続けていたのだけど、いまの JSON::Syck
には
/y|Y
|n|N
|yes|Yes|YES
|no|No|NO
|true|True|TRUE
|false|False|FALSE
|on|On|ON
|off|Off|OFF
|null|Null|NULL
|~
/x
の正規表現にマッチする値はシングルクオートでくくられてしまうという仕様があり、これはJSONの仕様に反するのでパーサーによっては正しく処理できないものがある。
これがFlashから使うJSON APIでもろにはまって、adobe の corelib に入っている JSON のパーサーはこれをパースできない。(rubyのyamlパーサーでもエラーになるようだ)
cho45さんがこれを直すパッチを書いてくれたのだけど、いい機会なので JSON::XS
を試してみた。JSON::Syck
のドキュメントからも言及されてるしね。
Catalyst::View::JSON
から使うには以下のような感じで MyApp::View::JSON
をかけばOK。
package MyApp::View::JSON;
use strict;
use base 'Catalyst::View::JSON';
use JSON::XS ();
sub new {
my $self = shift->NEXT::new(@_);
my $dumper = JSON::XS->new->latin1;
$self->json_dumper(sub { $dumper->encode($_[0]) });
$self;
}
1;
JSON::Any
つかってないのは Any だと環境変数で使用ライブラリを上書きできてしまっていやなので XS を直使用している。
一日くらい社内でテストしたけどだいじょうぶっぽかったのでさっき本番投入してみた。どうだろうな。
さっきのsvkpath.plの修正版
File::HomeDir
と Path::Class
を使わずに愚直にかいてみたがあまり体感変わらず、ためしに YAML
を YAML::Syck
にしてみたら激早くなった。
#!/usr/bin/env perl
use strict;
use warnings;
use YAML::Syck;
my $path = $ARGV[0] or die;
my $config = YAML::Syck::LoadFile( $ENV{HOME} . '/.svk/config' );
my $hash = $config->{checkout}{hash};
my @path = split '/', $path;
my $svkinfo;
do {
$svkinfo = $hash->{ join '/', @path }
} while !$svkinfo and pop @path;
exit unless $svkinfo;
if (my ($trunk, $branch) = $svkinfo->{depotpath} =~ m!(?:/(trunk)|/(branches/[^/]+))$!) {
print '(' . ($trunk || $branch) . ')';
}
こんな感じ。
このくらいの体感速度なら割と普通に使えそう。
zsh の PROMPT に svk の trunk|branches/... を表示してみるテスト
毎回svk infoしてどこにいるか確かめるのが面倒になったので、
PROMPT='%(?..exit %?)
%{[33m%}%~%{[m%} %{[91m%}`perl /home/typester/dev/scratch/svkpath.pl $(pwd)`%{[m%}
%{[38m%}%(!.#.$)%{[m%}%{m%} '
PROMPTをこんなにして
#!/usr/bin/env perl
use strict;
use warnings;
use YAML;
use File::HomeDir;
use Path::Class qw/file dir/;
my $path = $ARGV[0] or die;
my $config = YAML::LoadFile( file(File::HomeDir->my_home, '.svk', 'config') );
my $hash = $config->{checkout}{hash};
$path = dir($path);
my $svkinfo;
do {
$svkinfo = $hash->{"$path"}
} while !$svkinfo and $path ne ($path = $path->parent);
exit unless $svkinfo;
if (my ($trunk, $branch) = $svkinfo->{depotpath} =~ m!(?:/(trunk)|/(branches/[^/]+))$!) {
print '(' . ($trunk || $branch) . ')';
}
とかしてみた。
これで
こんな感じになるわけだけども、毎回perl呼んでるので重い。
軽くできないかなー。
perlでやるなら裏でデーモン化してそこ呼ぶようにするのがいいのか。でもそこまでがんばる必要があるのかどうか。
xなんとかさん
最近では xcezx さんのことをはなすときに、「せず」さんがさぁ、なんてことをいうと「せずさんてだれ?」ということになって結局、「ほら、あのx何とかって人だよ」って言うと通じるということが多く、二度手間なため、最初からxなんとかさんって呼ぶようにしてる。
コード再利用の話
基本自社サービス or 個人サービスしかつくってないので、本当にcatalystを使っているとコピペ地獄になる。
また同じことかいてるなーってのが多すぎるため、むかついてなるべくコピペを減らす工夫をしている。
codereposにあげたcatstarterってのもそうだし、あとはヘルパーを結構書いてる。
Catalystのヘルパーってまぁ要するにコードジェネレータなんだけど、ユーザー登録とかログイン・ログアウトとかほんとにいつもかいてるのでその辺はヘルパー一発で雛形生成するようにしてたりとか、jsのajax apiのサーバーサイドとかもjson形式を決めうちにしちゃってこれも雛形生成している。
いまの Catalyst::Helper
って新しいコード生成には使えるけど既存のクラスにメソッド追加とかそういうのできないのが不満。なんかつくりたい。
この辺の話はちゃんとまとめたいな。catalyst conやりたい!
Catalyst::Plugin::URI::MtimeQueryとCatalyst::Plugin::Assets - dann@catalyst - Catalystグループ
Catalyst::Plugin::AssetsにCatalyst::Plugin::URI::MtimeQueryのアイデアをインスパイアしたものを加えると、Assetsも結構使えるかも知れないなぁ。export_with_mtimequeryみたいなのがあればいいのかも。
これ今まさに仕事で使おうと思ってかいている。
そのうち公開します!
SoozyCon4の資料
お疲れさまでしたー。
過去のスライドも一緒にまとめてcodereposっておきました。
http://svn.coderepos.org/share/docs/typester/soozycon4/index.html