Hatena::ブログ(Diary)

tsucchiの日記 このページをアンテナに追加 RSSフィード Twitter

2037-12-31

オイラの(ネット上の)おもな活動場所

11:22 | オイラの(ネット上の)おもな活動場所を含むブックマーク オイラの(ネット上の)おもな活動場所のブックマークコメント

mixi はまったく知らない人からのリクエストだと応じないかも。twitterフォロー返しとかは適当なので、もしフォローされなくてもそんなに気にしないでください。見てないことも多いし、普通に忘れてることも多々あるし。Facebook は本名で探してみてください。

トラックバック - http://d.hatena.ne.jp/tsucchi1022/20371231

2011-12-31

2011年まとめ的な何か

| 02:56 | 2011年まとめ的な何かを含むブックマーク 2011年まとめ的な何かのブックマークコメント

気がついたら年明けてたのですが、まあ気にしないでください。*1

ってか久しぶりの更新ですね。はてなブログのほうには割とどうでもいい話を少し書いたりしていましたが。。。


今年は震災があって、停電とかあって、序盤からなにやら大変な感じでした。

被災した方たちに比べたら僕たちの苦労なんてたいしたこと無いのでしょうけど、停電とかまじ勘弁ですね。。。


4月末にスマートフォン(IS05)に買い換えて、楽しく使わせてもらってます。


今年も YAPC::Asia に参加させていただきました。参加3回目で、今年は自分も発表させてもらえました。

懇親会も楽しかったし、良い経験でした。またいつかどこかで発表してみたいなー。


で、YAPC の日あたりから、 MySQL の PP のドライバをメンテすることになったりしました。

これについては、ちゃんと時間をとって、もっといいものにしたいなー、とは思っているのですが、なかなかうまくいってないです。期待してる人いたらごめんなさい。


年末は、Perl Advent Calendarに2つほど寄稿させていただきました。

ブクマとかぜんぜんつかなくて、「うーん」という感じではありますが、Test Track の完走に貢献できた気がするので、とりあえず自分で自分をほめてあげたいです。


そう、今年は「洋書がちゃんと読めるようになる」を目標にかかげて、xUTP の一人読書会を開催していたのでした。

で、結果は、というと、2章の序盤までしか読めませんでした。。。だめだめですね。。。来年(日付的には今年か。。。)も継続です。


2011年はある程度アウトプットもできた反面、「いい年のおっさん」*2なのに、ハッカーとして一流というわけではなく、かといってマネージメントできるわけでもない、という微妙な自分を感じてしまって、どうしたものか。。。と思うわけです。

2012年は、自分がどうありたいか、どうなりたいか、をちゃんと考えないとなー。。。

*1:2年ぶり2回目の「会社で年越し」をやってしまった私の心中お察しください。。。

*2:0xでももう20代なのです。。。

トラックバック - http://d.hatena.ne.jp/tsucchi1022/20111231

2011-11-10

話題のはてなブログに招待いただきました

| 07:32 | 話題のはてなブログに招待いただきましたを含むブックマーク 話題のはてなブログに招待いただきましたのブックマークコメント

http://tsucchi.hatenablog.com/

まだほとんど何もしていないし、どう使うかも未定です*1。招待されたい方いましたら、@tsucchi まで。

*1JSできたら色々できて楽しいんだろうなー。JS力とかCSS力低すぎて遊び方が思いつかないのです

トラックバック - http://d.hatena.ne.jp/tsucchi1022/20111110

2011-11-06

ハッシュリファレンスのデリファレンス

| 10:41 | ハッシュリファレンスのデリファレンスを含むブックマーク ハッシュリファレンスのデリファレンスのブックマークコメント

ハッシュリファレンスデリファレンスで初心者っぽいハマり方をしたので、メモ。

#!/usr/bin/perl
use strict;
use warnings;
use feature qw(say);

my $aa = {
    aaa => { bbb => 'ccc' },
    xxx => 'yyy',
};

say "aaa";
say $aa->{aaa}->{bbb};#ok

say "xxx";
say $aa->{xxx}->{bbb};#died

say "finished";

こんな感じのプログラムを作って実行すると、

tsucchi@seasons[121]% perl a.pl
aaa
ccc
xxx
Can't use string ("yyy") as a HASH ref while "strict refs" in use at a.pl line 15.

こんな感じで、$aa->{xxx}->{bbb}のデリファレンスでお亡くなりになります*1。まあこんなデータ構造を作る奴が悪いのですが、にしても、実際のプログラムで発生したときは、何が起きてるか分からなくてかなり焦りました。警告でもいいと思うんだけどなー。

対策が、no strict 'refs'か、ref $aa->{$key} eq 'HASH' みたいな判定を入れる、というのも「なんだかなー」という感じです。

まあやっぱりこういう変なデータ構造をつくっちゃダメですね。

*1:finished が表示されていないので、die しているのが分かる

トラックバック - http://d.hatena.ne.jp/tsucchi1022/20111106

2011-10-22

DBD::mysqlPP の話

| 14:53 | DBD::mysqlPP の話を含むブックマーク DBD::mysqlPP の話のブックマークコメント

YAPC::Asia 2011 の1日目の LT のちょい前くらいに、軽く twitter の TL みてたら、こんなのがありました。

JVN#51216285 DBD::mysqlPP における SQL インジェクションの脆弱性

で、そこにこんな風に書いてありました。

対策方法

DBD::mysqlPP を使用しない

開発者によると、「DBD::mysqlPP は、ジョークプログラムとして作成されたものであり、プライベートな利用や MySQL 通信プロトコルの読解を助ける用途にのみ利用し、それ以外の用途においては同一の API を持つライブラリである DBD::mysql 最新版の使用を推奨する」とのことです。

で、「それはないわー」、と思ったので、

http://b.hatena.ne.jp/tsucchi1022/20111014#bookmark-63059158

これほんとに作者の弁?だったらひどいね。CPAN から消すか Acme に置くべきじゃね?「開発者によると、「DBD::mysqlPP は、ジョークプログラムとして作成されたものであり...」

こんな感じで軽く dis ったら、紆余曲折あって(?)、僕がメンテすることになってしまったでござる、という感じです。

僕が思ったのはこんな感じのことです、

  • これはジョークソフトでは無いと思う
    • もしそうなら CPAN に置くのはよくないし、置くとしても Acme::だよね*1
  • libmysql 入れられない/入れたくない事情があるかもしれなくて、そういう場面で使いたい人はいるであろう*2
  • 元の作者の方は、残念ながらメンテナンスするモチベーションを失ってしまっている
    • 残念だけど、そういうこともある。それは仕方ないと思う
    • セキュリティーホールが放置されるのは良くない
    • とはいえ、消してしまうのももったいないなー

なので、自分の力で何とかなるなら、何とかしたいなー、と思った次第です。とはいえ、MySQL の通信なんて分からんし、どうしたものかー、と思っていたら、セキュリティーホールはパッとソースを見たら何となくめどはついたし、@nihen さんも手をあげてくれたので、何とかなるだろう、と思って少しずつ手を入れてます。

取り急ぎ、セキュリティ fix だけ行ったバージョンを 0.05 として今朝 CPAN にアップしました。

DBD::mysqlPP

プロダクション環境なら、DBD::mysql を使っているだろうから問題ないとは思うけど、もし使っている人がいたら、バージョンアップしてみてください。(プレースホルダまわりのバグがあって、それもつぶれているはず)。通信ドライバモジュールも別途あって、そっち一つだけバグを潰してあるので、一緒にあげた方が良いかもしれません。(http://search.cpan.org/~tsucchi/Net-MySQL-0.10/MySQL.pm)

今後ですが、

  • ドキュメントの整備
    • 「本番環境では使わないでね」って注意入れといた方がいい気がするし、supported OS とか古いし消したいなー、とか、そのへん
  • RT で報告されてるバグを潰す
  • utf8 まわりのあれこれ(を @nihen さんがやってくれるらしい)
  • テストの整備
    • Test::mysqld が良く分からないけど使えないので、何とかしないと
    • できたら DBD::mysql のテストが通せるようにしたいなー

とかそんな感じのことを考えてます。

リポジトリは僕の github アカウントで管理することにしたので、いじってみたい人は fork + pull-req してみてください。

repository

https://github.com/tsucchi/p5-DBD-mysqlPP

https://github.com/tsucchi/p5-Net-MySQL

*1:結構古いモジュールなので、当時は Acme 名前空間がなかったかもしれない

*2:とはいえ、基本的には DBD::mysql を使うべきである

トラックバック - http://d.hatena.ne.jp/tsucchi1022/20111022

2011-10-15

YAPC::Asia 2011 を終えて

| 02:18 | YAPC::Asia 2011 を終えてを含むブックマーク YAPC::Asia 2011 を終えてのブックマークコメント

YAPC::Asia 2011 が終わりました。今年は前夜祭から参加することができ、さらに発表の機会もいただきました。去年も一昨年も楽しかったけど、今年は3倍くらい楽しかったです!

発表中や前後は結構いっぱいいっぱいだったので、あんまり覚えてないのですが、

http://twitter.com/#!/typester/status/125106726969163776

え゛、こんな状況だったの!?びっくりでした。。。モニタの外部出力の設定がよく分かんなくてハマったり、結構時間が余るつもりで作ったのに目いっぱいだったり、そういえば外で発表するのは初めてだったのでいろいろでした。

今回の発表で、ここ2年くらいいろいろやって blog に書いたりしてきたネタを大体使い切った感じなので、次はいつ発表できるかなー、という感じですが、またいつか発表したいです。

自分の発表以外のセッションも楽しめたし、懇親会や「勝手に後夜祭」もとても楽しかったです。そういえば、普段の飲み会でひたすら Perl とか技術の話ばっかりってことはあんまりないですからね。ウチの会社は勉強会もないですし。

自分は Perl 界では、マイナーな存在なハズなのですが、発表を聞いてくださった方が沢山いたり、あるいは僕のことを知ってて、声をかけてくださった方がいたり、僕のことを知らないけど、声をかけてくださった方がいたり、と普段は味わうことのできない幸せな体験ができたんじゃないかなー、と思います。

で、帰りの電車で、急に寂しい気持ちになって、「あー、お祭りが、ハレの舞台が終わったんだなー」ということと、「明日からは、また穢れた日常にもどるのね」ということをふと思いました。でも、僕の発表もそうだし、たいていの発表は、「日常のちょっとした困難を Perl をつかって乗り越えてみたよ!」とか、「こうするといいよ」という話なのだから、「穢れた日常」としっかり向き合っていかないと、次のハレの舞台は無いよね、と思います。

と、まだ後夜祭のお酒とセンチメンタルな気分が残っているし、「割と実践的な発表したから、スピリチュアル(?)な感想でもいいよね」、ということで、僕の YAPC::Asia 2011 を終わりにしたいと思います。

2011-10-14

YAPC::Asia Tokyo 2011 が始まってます

| 07:50 | YAPC::Asia Tokyo 2011 が始まってますを含むブックマーク YAPC::Asia Tokyo 2011 が始まってますのブックマークコメント

表題のとおりです。昨日10/13 は前夜祭でした。まあ僕はトークを聞いてただけで、まったく交流せず、終わったらすぐ帰っちゃいましたが。。。だってスライド完成してなかったし。。。*1

昨日のレポートはもうあがっていて、技評さん相変わらず仕事速いなー、という感じです。

YAPC::Asia Tokyo 2011 スペシャルレポート:YAPC::Asia Tokyo 2011 前夜祭レポート[随時更新]|gihyo.jp … 技術評論社

僕は2日目(10/15)の 16:00から発表します(当初とスケジュールが変わっているので気をつけて下さい)。受付横のスイーツエリアという場所になります。

あんなテスト、こんなテスト

昨日の感想とか書こうと思ったのですが、そろそろ飯食って出発しないとやばいので、このへんで。

*1:その後無事完成しました

トラックバック - http://d.hatena.ne.jp/tsucchi1022/20111014

2011-09-17

今更 Linux をインストールしてみた話

| 17:56 | 今更 Linux をインストールしてみた話を含むブックマーク 今更 Linux をインストールしてみた話のブックマークコメント

自宅のメインマシン(ネット見たり、開発にも使ってるマシン)に Linuxインストールしてみました。

背景

最近まで、Windows から VMWareFreeBSDアクセスして、そこで開発してたりしていたのですが、せっかくメモリ 3G くらい積んでるのに、それを生かせてなくてもったいないなー、とか思い始めました。あと 2 つの OS を行ったり来たりするのは、VMWare だとさほど苦ではないけど、それでもやっぱりめんどいなー、とか。本当は Macbook が欲しいのですが、お金ないし、仕方ないので Linuxインストールしてみることにしました。

FreeBSD にしなかったのは、デスクトップで使うとなると、やっぱり Flash とかで面倒を背負いたくないなー、というのがあって。あとそろそろちゃんと Linux 使ってみたほうがいいかなー、と言うのもあって。

マシン

ThinkPad X60 というノート PC です。そろそろ買い換えたいなー。。。

この機体は、熱対策があまりよくないらしく、CPU の温度が上がりすぎて熱暴走したり、右のパームレスト近辺(無線LANモジュールが入っているらしい)が熱くなるといった問題があります。(対策については後で書きます)

ディストリビューションの選択

そもそもあんまり真面目に Linux を使ったことない(とくにデスクトップとしては)ので、適当に決めました。CentOS はどうせ仕事で使うから、系統の違う奴がいいな、とおもって Ubuntu にしました。(現時点での最新 11.04 を入れました)

インストール先、インストール方法

いろいろ考えたのですが、空いてる USB HDD をつないで、そこに入れることにしました。気に入ったら SSD のドライブ買って換装するかもですが。

インストールUSB メモリから行いました。USB メモリだと、ネットワークインストール並に早くていいですね。

インストール時の注意

  • BIOS 設定で、USB HDD からもブートするようにする。ブート順を内蔵 HDD より上位になるように
  • MBR を内蔵HDD に間違って入れないようにすること
  • 初期ユーザは適当に作る(本当の使いたいユーザを作らない)

あとで NFS マウントしたいので、ユーザID, グループID を合わせないとめんどいことになります。(つーかこれでインストールし直しを一回くらった)。なので、aaaa でも bbbb でもいいから、とりあえず適当なユーザを作っちゃって、インストール後にちゃんとしたユーザを作るのがおすすめです。

設定とか調整とか

端末どこ?

メニュー -> アクセサリ -> すべて -> 端末

で、ランチャにも登録しとく

無線

デフォルトでは自動接続しないので、設定しておく

あと、いわゆるパームレストの熱対策で、

[Ubuntu]ThinkPad X61 無線LANの省電力モード

$ sudo iwconfig wlan0 power on

を叩く。(リンク先にあるような、パッケージの作り直しとかはしなくても普通に iwconfig 叩けました)


cpu

熱暴走対策のため、プロファイルは powersave とする。クロックが 1GHz まで下がるが、安定性の方が大事。

vi /etc/init.d/cpufrequtils
#GOVERNOR="ondemand"
GOVERNOR="powersave"
(1行書き換え)

=> うーん、これがうまくいかない。とりあえず手打ち

sudo pufreq-set -g powersave
sudo cpufreq-set -c 1 -g powersave
trackpoint

Ubuntu Linux 10.10 - ThinkPad X60s

$ sudo apt-get install gpointing-device-settings

インストールをしたあと。

$ gpointing-device-settings

と開き、

ホールエミュレーションを使用する:有効

ボタン:2

他の項目:好みにあわせる

ここに書いてあるとおりにやった。ついでに 3ボタンエミュレートも追加。

emacs

Emacs 23 のパッケージがあったので、ふつうに Ubuntu ソフトウェアセンターから入れた。

あと追加で、mew-beta, anthy-el を apt-get で入れた

Xdefaults の読ませ方(ここに fontset を設定している)が分からねーなー、とか思ってぐぐったら、

.Xresources ってファイル名にすれば勝手に読むらしい。そういえばそういうネーミングの流派もあったね。

twitter

tweetdeck を入れた。

まず、Adobe AIRインストールする。

何でもいいと思うけど、bin ってやつにしてみた

あとは普通にtweetdeckを入れればよい。


最初は日本語がうまく出ないので、下記の対策をやる。

TweetDeck をUbuntu10.04にインストールより

settingsボタン>Colors/Fontタブ>Internation Font/TwitterKeyのチェックで日本語が表示できるらしい

これはこれでいいけど、気に入らないところもあるので、余裕ができたら他のも試してみたいなー。

git

sudo apt-get install git-core で入れた。バージョンはべつに何でもいいや、と思ってたら新しいのが入ったね(1.7.4.1)


nfs

デフォルトでは NFS mount ができない

$ sudo apt-get install nfs-common

dotfiles

github とか nfs からとってくる

ショートカット

gnome-terminal : メニューのキーボードショートカットで、「左のタブに移動」を Alt + <- 、「右のタブへ移動」を Alt + -> にセット

ワークスペース : アプリケーション -> すべてのアプリケーション -> テーマ・設定 -> キーボードショートカット

で、「ワークスペース1に移動」を「Alt + 1」みたな感じで、1〜4までセット


xmodmap

.Xmodemaprc としたら、デスクトップの立ち上げ時に読み込むかどうか聞かれるので、読み込むようにする。

ちなみに僕はこんなファイルをつかっている

tsucchi@seasons[105]% cat .Xmodmaprc 
keycode 101 = Control_R
keycode 100 = Control_R
add Control = Control_R
Ubuntu Linux 10.10 - ThinkPad X60s
keysym Alt_L = Meta_L Alt_L

remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

よくある「Ctrl <-> CapsLock 入れ替え」と、「変換キー」と「かなキー」を Ctrl に設定している。

(変換キーを Ctrl に設定するのは、左小指の負担が軽くなってマジおすすめです > emacs ユーザ)

evernote

互換クライアントの NeverNote 入れた

http://nevernote.sourceforge.net/index.htm

http://sourceforge.net/projects/nevernote/files

より

nevernote-0.98_amd64.deb

を DL

sudo dpkg -i nevernote-0.98_amd64.deb

インストール

なんかびみょーな感じの UI だけど、あんまり真面目につかってないのでこれでもいいや。

...と思ったら、日本語入らねーじゃねーか。何だこのゴミは。つーわけで、emacsevernote-mode と公式の WebUI を併用して使ってます。

DropBox

普通に公式クライアントあるんだねー。これはいい。

http://www.dropbox.com/


perl

perlbrew 入れて、5.14.1 入れた。

curl -L http://xrl.us/perlbrewinstall | bash
perlbrew init
perlbrew install 5.14.1
wget http://xrl.us/cpanm
chmod +x cpanm
cpanm Module::Install

あとは適当に必要な奴を揃えていこうと思う。

あとは、とりあえず自分のモジュールコンパイルくらいはできるように環境整えとかないと。

トラックバック - http://d.hatena.ne.jp/tsucchi1022/20110917

2011-09-03

スクリプトのテスト

| 07:40 | スクリプトのテストを含むブックマーク スクリプトのテストのブックマークコメント

ふつうは、Test::Scriptをつかうのだけど、このモジュールCPAN レイアウトじゃないとうまく動いてくれない。(blib とかみてるので、CPAN レイアウトにして、make test じゃないと動かないみたいです)

ただ、どうしても「コンパイルエラーくらいはしらべたいなー」と思って*1、こんな感じのものをでっち上げた。

#!/usr/bin/perl
use strict;
use warnings;

use Test::More;
use Capture::Tiny qw(capture);

my $script_dir = "./bin";
my @scripts = grep { $_ =~ qr/\.pl$/ } glob "$script_dir/*";

for my $script ( @scripts ) {
    my $status = 0;
    my ($out, $err) = capture {
        $status = system("perl -I ./lib -cw $script");
    };

    ok( $status == 0, $script) or diag $err;
}

done_testing();

問題は解決できたけど、ちょっと遅いなー、というのが難点です。。。

*1:正確には、コンパイルエラーだけでなく、local::lib の参照がちゃんとできてないスクリプトをみつけたかったので、perl コマンドの前に、「env PERL5LIB=none」とかつけてる

トラックバック - http://d.hatena.ne.jp/tsucchi1022/20110903

2011-08-26

YAPC::Asia でお話します & チケット絶賛発売中です!

| 08:52 | YAPC::Asia でお話します & チケット絶賛発売中です!を含むブックマーク YAPC::Asia でお話します & チケット絶賛発売中です!のブックマークコメント

YAPC::Asia でお話することになりました!

本編ではありませんが、スイーツ♡エリアというところで、埼玉銘菓をつまみながら(?)、Perl のテスト周り、特に「テストしにくい部分をどうやって何とかするか」みたいなお話をしたいと思います。

そして、チケット絶賛発売中です!うわさでは、そろそろ第一次締め切りらしいので、「どうしようかなー」と迷っている方はお早めに!迷ってるなら、絶対行ったほうがいいですよ!

テストだけじゃなく、インフラに近いところの話とか Perl そのものの話とか、非同期プログラミングの話とか、Web アプリケーションの話とか、とにかくいろんな話があるから、エンジニアだったらきっと仕事の役に立つ話があると思うし、もし役に立たなかったとしてもとにかく楽しいから、絶対に参加したほうがお得ですよ!

チケット絶賛発売中です!(大事なことなので2回言いました)

以下雑談。

2年前に、初めて YAPC::Asia に参加したときは、「なんだこの凄い人達は!」とか思ってたのに、気がついたらスピーカー応募して、スピーカーになってしまいました。

ここ数日は、「採択されるかなー、どうかなー。応募数多いもんなー、これも面白そうだなー」とかドキドキしながら YAPC のサイトを定期的に F5 してみたりそんな感じでした。

今はほっとした気持ちと、大丈夫かなー、という気持ちが両方ありますが、2年前に自分が感じた空気を少しでも見に来てくれる方に感じていただけるよう頑張ろうと思っています。*1

previous: YAPC::Asia かその周辺で話すかもしれません

prove の並列実行の話

| 07:56 |  prove の並列実行の話を含むブックマーク  prove の並列実行の話のブックマークコメント

perl でテストスクリプトを実行する prove コマンドには -j という並列実行するオプションがあります。たとえば prove -j2 とすると、2プロセス作って並列実行されます。

ただ、ウチのところのテストコードは基本的にストアドプロシージャのテストなので、DB をあれこれしている間は、他のテストを並列で流すことができません。

その辺の事情はだいぶ前にも書いてますが、まあこんな感じです。

データベースのテストってみんなどうやってるんだろ?

DB を使う Web アプリって、同時にテスト流すとおかしくなるよね?

で、DB が1個しかないから、テストデータを流すときに主キーがかぶってエラーになったり、ゴミデータが残って、それが外部キー制約とかあったりして消せなくて、次のテストデータのロードでエラーになってこけたり。とにかく同時にテストを流すとめちゃくちゃになるんですよ。

で、いろいろ考えたんだけど、幸いにして、ウチのプロジェクトではテスト用の専用モジュールを作っているから、テスト用モジュールの中で排他制御しちゃうのが一番いいのかな、とか思ったり。

とはいえ、テストコードの実行に 10 分以上かかっている現状を、手をこまねいてみてるのもなんだかなー、と top の出力とかテストコードの実行を眺めてたら、ふと思いつきました。

「ん?スクリプトコンパイルも意外と馬鹿にならないオーバーヘッドあるよな?並列化したらこの分だけでも少しは早くなるんじゃね?」

で、ためしに -j2 つけて実行してみました。

通常(並列なし)

$ time prove *.t
...
All tests successful.
Files=696, Tests=36885, 774 wallclock secs (10.36 usr  2.17 sys + 573.82 cusr 42.36 csys = 628.71 CPU)
Result: PASS

real    12m54.111s
user    9m44.332s
sys     0m44.549s

並列(-j2)

$ time prove -j2 *.t
...
Files=696, Tests=36885, 565 wallclock secs (13.94 usr  2.70 sys + 585.98 cusr 43.60 csys = 646.22 CPU)
Result: PASS

real    9m24.724s
user    10m0.077s
sys     0m46.327s

まあ相変わらず時間はかかっていますが、ずいぶん早くなりました。(30%くらい早くなった)。っていうか -j2 つける以外なにもチューニングしてないわけで、もっと早くからやっておけばよかった orz*2

DB 使うからウチのテストは並列で流せないよ」とあきらめないで、試してみるといいんじゃないかなー、と思います。*3テストコードのファイル数が少なかったりテストが短いと、ロックを取ったりする分のオーバーヘッドのほうが大きいかもしれませんが、ある程度の規模なら効果が出るんじゃないかな。

参考

Jenkins はじめました + ほか3つ(mixi Engineers' Blog)

データベースのテストってみんなどうやってるんだろ?

*1:とはいえ、今からこんなに緊張してて大丈夫なのか?、俺

*2:後でロックのタイミングを見直したり、少しチューニングしてます。この数字からさらに 10 秒くらい早くなったはず。(ちゃんと測ってない...)

*3:ウチは前から自作のロックモジュールを使っていますが、何らかのロックが必要です。めんどくさければ Test::Synchronized とか使ってみればいいんじゃないかなー

トラックバック - http://d.hatena.ne.jp/tsucchi1022/20110826