なんか荒れてるやつ読んだ
論点とは違うけど、ひとつ思ったこと。
自分の書いたコードが module author に気に入られず採用されなかったときには、テストケースにして送ってみるといいと思いますよ。
自分のコーディングポリシーと違うコードだとか、そもそもいけてないとかいう理由で送られてきたパッチをスルーするのはよくある話だと思いますが、そういう場合にはテストケースとして送りつけるというのが作者側としてはありがたいです。
送られてきたパッチを読んでどのようなことがしたいのかを読み取って自分で実装してもいいけれど、やりたいことが明確にわからなかったり、実装したけどこれであってるのかどうかよくわからなかったりして、その結果よくわからないからスルーなどということになるわけですが、テストがあればそれを通るようにするだけなので。
あけましておめでとうございます
本年もよろしくお願いします。
今年はちゃんと(?)帰省しているのだけど、正月から大雪で大変だった。今日帰るので心配していたのだけど、幸い晴れてくれた。
今新幹線待ってるところで、新横浜のカオスっぷりを想像して憂鬱な気分。
品川まで新幹線にすればよかった。鎌倉にはそっちのほうが乗り継ぎ的にも便利だし。
GR Digital2
買った!
NEXT、C3
僕はわりと好きかも。
Safari3でExternalInterfaceる際のBK
as側で
ExternalInterface.addCallback("foo"...)
した場合Safariからは
document["swfid"].foo
でその関数が取れるわけですが、どうもこのオブジェクトをSafariがキャッシュしやがるらしく、二回目以降のロードで
typeof(document["swfid"].foo) == "function"
はswfがロードされる前でも真になります。
上記コードでswfのロードチェックを行っていたためはまりました。。
解決法として
ExternalInterface.addCallback("ready", function():Boolean { return true });
とかを作り、typeofチェックに加えて、この関数を実際によんでちゃんとtrueが返って来るまで待つようにしたらOKでした。やれやれ。
こうしたいflymake
これ読んですぐ導入したflymake。上記サイトのを少し改造したらperlでもできたのでいまはjsとperlでリアルタイムでシンタックスエラーチェックができている。
僕はすごくtypoがおおいと思うのだけどこれを導入してからtypoではまることがずいぶん減った。もうないとこまるelispのひとつになってる。
ちなみにperl版はこんな感じにしている。
(require 'flymake)
;; flymake for perl
(defvar flymake-perl-err-line-patterns '(("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1)))
(defconst flymake-allowed-perl-file-name-masks '(("\\.pl$" flymake-perl-init)
("\\.pm$" flymake-perl-init)
("\\.t$" flymake-perl-init)))
(defun flymake-perl-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "perl" (list "-wc" local-file))))
(defun flymake-perl-load ()
(interactive)
(defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted)
(setq flymake-check-was-interrupted t))
(ad-activate 'flymake-post-syntax-check)
(setq flymake-allowed-file-name-masks (append flymake-allowed-file-name-masks flymake-allowed-perl-file-name-masks))
(setq flymake-err-line-patterns flymake-perl-err-line-patterns)
(flymake-mode t))
(add-hook 'cperl-mode-hook '(lambda () (flymake-perl-load)))
でも、これだと単純に perl -wc
しているだけで編集中の lib パスなどを @INC につっこまないため、その lib 以下にあるモジュールを use したりするとそこでエラーになってしまう。
なので今はモジュールやCatalystアプリの開発するときはいちいち emacs 上で M-x setenv
してその lib パスを PERL5LIB にセットしている。。ちょうめんどくさい。。
そんでこれを自動化したいわけだがどうすればいいのかなぁ。
舌足らずすぎた。
Model::DBIC:
connect_info:
- dbi:mysql:table
- root
- on_connect_do:
- SET NAMES utf8
cursor_class: DBIx::Class::Cursor::Cached
cache_file: __path_to(tmp/query_cache)__
さっきはこんなconfigで使った場合のコードです。
DBIx::Class::Cursor::Cachedつかってみた
すばらしすぎる。もっと早く使えばよかったとおもった。
Catalyst::Model::DBIC::Schema
で使う場合はこんな感じでOK。
sub new {
my $self = shift->NEXT::new(@_);
my $cache = Cache::FastMmap->new( share_file => $self->{cache_file} );
$self->schema->default_resultset_attributes({
cache_object => $cache,
});
$self;
}
そんで、あとはsearchのattrとして { cache_for => 300 } とかかいてやればそのクエリは300秒キャッシュされる。
実際にはsearch時ではなくてallとかnextのときにそのクエリをキャッシュしてる。
ちなみにdefault_resultset_attributes
にcache_for
を含めるとすべてのクエリがキャッシュされる。
lighttpd+fastcgiで
fastcgiだけ再起動したい場合に、再起動中にアクセスあるとfastcgiプロセスが上がったあとも500になってしまうことがあるのだけど、みんなどうしてる?
3008WFP
気になる。