vim で、特定ファイル全部を、確認しながら置換する
vim -c "argdo %s/FooBar/BarBaz/gce | update" **/*.pm
ずっとこれを追いもとめていた気がします
mattn さんいわく、silent! じゃなくて e オプションでいいらしいです! 楽ちん
gerry++
Text::Xatena を CPAN に上げました
インラインシンタックスはもうすこし抽象化して拡張しやすくしたいですが、とりあえず使えているバージョンを CPAN に上げました。0.01 リリース直後に use 忘れを指摘して頂いたので 0.02 になってます。
テストで http://example.com/ へアクセスするコードにしているせいで場合によってテストが落ちるのをなんとかしたいのですが、Test::HTTP::Server::Simple を使うと Test::Base あたりの組み合せでどうしてもうまくいかないのでそのうちどうにかしたいです。
なんとなくテストを追加してたらバグを見つけたので、修正したのと、http://example.com/ へアクセスするテストもなおしました
Perl, utf8 フラグ, ハッシュ, リテラル, =>
miyagawa さんに教えて頂いたのですが、Perl のバグらしく、解決するためには => の左をクオートするか、Perl を 5.12 にすればいいらしいです。
{
use utf8;
my $a = [ foo => "bar" ];
warn utf8::is_utf8($a->[0]); #=> true
warn utf8::is_utf8($a->[1]); #=> false
};
{
no utf8;
my $a = [ foo => "bar" ];
warn utf8::is_utf8($a->[0]); #=> false
warn utf8::is_utf8($a->[1]); #=> false
};死ぬほどハマった。
use Encode;
use HTTP::Request::Common;
use Data::Dumper;
{
use utf8;
my $s = encode_utf8("ああああ");
my $req = POST "/", [ test => $s ];
warn Dumper $req ;
};
print "\n\n";
{
no utf8;
my $s = "ああああ";
my $req = POST "/", [ test => $s ];
warn Dumper $req ;
};みたいなとき、まず気付かない……
todo
- JSDeferred のリリース → done 0.3.1 (bug fixes)
gerry++
✖
gerry++
はてなダイアリーライクなブログ CGI プログラム
Perl のことを CGI って呼ぶような時代がいつ終わったのかは知りませんが、CGI で動き常用できるブログ・ダイアリーシステムが欲しいと思いはじめたのでサクっと Perl で書いてみました。
「常用できるブログシステム」の要件というのは、僕にとっては以下の通りで、必要最低限の実装になっています。
- その場編集機能が使える
- はてな記法が使える
- でも自動リンクは特にいらない
- タグが使える
- はてなダイアリのカテゴリは所謂タグです
今まで散々 blosxom のクローンを作ってきましたが、RDB をデータストアに使ったブログシステムは初めてつくる気がしました。blosxom クローンとの違いは編集機能ですね。
git clone して git submodule update --init して対象サーバに rsync すれば動くようになっていると思います (そのように開発をしているので)
その場編集
jQuery と JSDeferred つかったらすぐできました
はてな記法
Text-Hatena があるので簡単…… と思いきや、Text-Hatena はちょっと思い通りにフォーマットしてくれないので、はてな記法っぽい別のオレオレ記法をつくることにしました。
別に拡張してるわけじゃないので X は変なんですが、とりあえず CPAN に上げるつもりもないので保留してます。Extensible の略だ、とか言い張ったりできないかな
にした
内容的にはダイアリの記法とほぼ一緒ですが、自動改行のルールが異なるのと、見出し記法を構造化するような感じになっています。(互換モードにできるようにもなってます)。あと自動リンクの記法はモジュール側では最低限に自動リンク、使う側で定義するような設計になっています。
バックエンド実装のメモ
前々からちゃんと使ってみたかった DBIx-Skinny と、フレームワークを毎回書くような人間に死ぬほど便利な Plack を利用しています。
Skinny はとりあえず的なインクリメンタル開発がやりやすいし、基本的に SQL そのまんま書いてどうにかできるのがとても楽で良かったです。データベース接続部分に不明瞭な部分がないので、恐れずにテストも書けるのもよかったです。
僕はちょっとでも複雑なものは search_named しか使わないようにしたので
sub select {
my ($self, $sql, $hash, $array, $name) = @_;
unless ($name) {
($name) = ($sql =~ /FROM ([^\s]+)/i)
}
[ $self->search_named($sql, $hash || {}, $array || [], $name) ];
}というのをモデルクラスに定義してつかってます。風流な table 名抜き出しが入っていますが、結局 SQL 書くのがこの場合僕だけなので理にかなってます。
他にも Pager 実装とかをするにあたり、なかなか風流な SQL の文字列置換を実装しましたが、メタプログラミングだと思えば気持ちわるくありません (という言い訳しないといけない程度に気持ちわるいです)
あとは deploy したかったサーバの Perl のバージョンが 5.6 とか古すぎで動かなかったので新しいサーバを借りなおしたりしました。これが一番大変でした。
todo
jsdeferred の recipe をかく
