昨日、なにか現実逃避をしていてマルチディスプレイに関しての記事を読んだのがきっかけで、Buffalo社製のディスプレイ増設アダプタを衝動買いしてしまった。
Macbookでもっとディスプレイを増やすというのは前前からしたかったんだけどご存じの通りデスクトップならカード刺せばいいだけだけど、ラップトップだと使える製品が結構限られてたわけで。ところがこいつUSBなんだよね。簡単じゃん!ってことで購入した次第(ちなみに上位機種もあったんだが、別にたいした用では使わないや、ってことで下位機種を選んだ)。
さて、それが早速届いたのが本日朝。箱を見るとMac用のドライバが入ってないのだが、Buffalo社のサイトを見てみるとどうやら内蔵デバイスを作ってるところのサイトから適当に持ってこいということらしいので、この辺りからさっそく持ってきた。ベータとか書いてあるのが若干怖いけど、ドキドキしながらいれてみたら普通に動作した。
遊んでるWindowsマシンが一台あったのでそこのモニターをかっぱらってきて、つなげてみたところ、やはり描画速度に若干難はあるものの、例えばWebページを見るだけとか、IRC画面を表示しておくだけとか、それだったら全く問題無し!これはいい。
会社の机の制限のせいでまだどうやるのかわからないけど、できることならアームを使ってもう少し高さを調整したいなぁ・・・
夢はMacbookのメインディスプレイ+20~24インチモニターが三つです!

ちょっとブラウザから永続的なソケット接続を確立したいと考えてFlashをサーバーとJavascriptの間のプロキシとして使うことにした。
で、自分はプログラマなわけだけどFlashとか全然わかんなかったので一から試行錯誤しながら覚え始めたのだがもうひとつひとつ罠にはまりまくっている。忘れないようにメモ(もし間違ってる事とかあったら教えて下さい!)
- swfファイルが起動した時のエントリーポイントがわからない(int main()みたいなものはいったいどこにあるのかわからなかった)→ .flaファイルを作って、そこにドキュメントクラスに設定したクラス名が起動時にインスタンスが作成されるので、そいつのコンストラクタがエントリーポイント
- crossdomain.xml的なものは、URLStreamとかを使ってるなら同サーバー内の/crossdomain.xmlにあればいいけど、XMLSocketやSocketを使ってる場合は同名サーバーのポート843にそれ用のちょこっとしたサービスをあける必要がある。なんでHTTPとか、汎用的なプロトコルじゃないのか意味不明。
- ちなみに"<policy-file-request/>\0"っていうリクエストが来るのでXMLを返す。なんでHTTPじゃないのか(ry
- この手のセキュリティエラーは明確な形ではエラーとして報告されることはない。願わくばデバッグモードとかオンにしたら「ポリシーファイルがとれなかったよ!」とか教えてくれればいいのに・・・
- 唯一の手がかりは IOErrorEvent.IO_ERROR, SecurityErrorEvent.SECURITY_ERRORとかに対してイベントリスナーを仕込んでおいて、イベント内容を出力すること。さらにそこでエラーの詳細が出ればいいのに、Error #xxxxとかコードしか出てこない。面倒くさいがぐぐれ。
- 正規表現を使うのは気をつける。ちょっと検証はしてないのでこれはあくまで自分の勘なんだけどこう、バックトラックが多く発生する正規表現を使うとありえないくらいパフォーマンスに影響がでるような・・・?正規表現をとっぱらってindexOf() と substr() で代用したら普通に動いた。
とりあえず以上。
とくダネ!で国会議員によるtwitterの利用が話題になっていたが、すごくすごく腑に落ちないことがひとつ。山本一太議員がその中でtwitterのヘビーな利用者として紹介されていたのだが、すごく違和感を感じた。
画面では山本議員が「内閣・外交・国防合同部会」に出席しているところが映し出され、その間にtwitterで発言しているのをリポーターが携帯でそれを見る、というところが映し出されている。その部会中に20回あまりの発言がされたとテレビでは言っていたが・・・
それってつまり仕事をさぼってるよね?
俺もよく会議中とか自分のパソコンにノートを取ってるふりしてちょっと違う事しちゃうとか、他の仕事を片付けちゃうとかやるからよくわかるんだけど、PCいじくりながら本気の議論とか*絶対*にできないよね。
政治がネットで発言することがなんとかとか言ってたけど、これはそういうのじゃないよ。国の将来を考えるべき立場の人が本業そっちのけでtwitter使ってるってだけじゃん!
とくダネ!もとりあげかたおかしいだろ。なんかすげぇがっかりした。
某和製ホスティング業者の更新期限が近づいてきたので、色々検討した結果linodeにサーバーを一台移設しました。このブログもそのVPSに移動しています。

Linodeに限らず海外のVPSに関しては以前EC2を使っていた関係でlatencyを非常に心配していて、ずっと二の足を踏んでいたのですが知り合いの人に一通りping時間とかを聞いてみて悪くないと感じられたのでえいやっと1年分契約してみました。スペックはこちらのLinode 1440です。正直こんなに転送帯域必要ないんだけど、まぁRAMとストレージの兼ね合いでこの辺りがいいかと思って決めました。

Linodeがよい!とまずまっさきに感じられたのはバーチャルコンソールへのアクセスと、OSのインストールですかね。OSの種類は比較的限られているけど、実際そこまで気にするほどじゃないし。今回は最近33rpm氏が好きだから、という理由でUbuntuにしております(そういえば今回契約の切れるサーバーは、僕が管理してきた歴代の最後のFreeBSDマシンだ・・・)。とにかくその辺りの設定は楽だった。
あとはログインしてみて、特に重さを感じる事はなかった。データセンターはカリフォルニアはうまってたのでダラスのヤツにしたけど、時間帯によって多少の差はあるものの、気になるほどじゃない。業務で使っててもたいしたlatencyじゃないし、そもそもマシン性能が高い感じ。perlのコンパイルとかもかなり速かった。
そしてやっぱり値段かな。円高なのも手伝って、約8万円で1年分の料金。色々検討したんだけど国内のVPSのスペックは残念ながら正直微妙で、小さいサーバーのファームとして使うならいいけど普段から業務で使うサーバーとしてはどうかという感じだし、かといって専用サーバーのホスティングは結構高い(ちなみに某有名どころで借りてたのだけど、そこは1年で20万前後した - スペックはストレージ以外は遜色ないと思う)。それが10万円を切るお値段でこの性能ならこっちいっちゃうよな。
本来なら日本で借りたいサーバーなんだけど、やっぱりコストパフォーマンスがなぁ。まぁどこの会社でも難しいとは思うんだけど、もう少し良い物が欲しい。ごてごてした追加機能とかいらないから、(1)簡単に立ち上げられ (2) 質実剛健スペックで (3) お得感がある って事だけに特化してもらえないもんだろうか。日本のホスティング業界の人、お願いします!
それまでは linodeは結構おすすめですよ!ってことで〆
なお、MTの移設に関してはPostgreSQLで最初運用していたものの、そのうちPostgreSQL自体を使わなくなってしまったのでこの際と思いMySQLに載せ替えました。移設作業は基本的に(1) MTの最初のウィザードを一通り実行する (2) pg_dumpで元のダンプを取る (3) ダンプファイルからPostgreSQL専用のSQLを全て除去する(最初のINSERTまでの全て)(4)それをmysqlに流し込む・・・という荒技で移設し、全く問題ありませんでした。
検索エンジンの皆様こんにちは。2010年以降のPerlウェブサーバーといえばPlack/PSGIですね。そんなSEOな記事です。
私がPerlでWebアプリ的な物を初めて書いたのは1999~2000年にかけての事なのでそれ以来ほぼ10年たっているわけです。その間に色々さわりました。ウェブサーバーとアプリをつなぐアダプターのレイヤーとしてはCGI.pm, mod_perl, FastCGIなどを使ってきました。フレームワークもMason, Sledge, Catalyst, AxKitなんかをさわってきました。
どれもこれもいいところもあり悪いところもあり、それぞれコメントしたい部分はあるのですが、とにかくデプロイ方式が全然違うのでどうにもできん、という問題がずっとありました。
しかし PSGIというPerlウェブアプリケーション用の規格ができたことにより、これは全く変わってきました。PSGI規格に準じていれば、フレームワークがなんだろうとサーバーがなんだろうと同じ方式でがっちゃんこできるのです。これはいままで「Perlをレンタルサーバーでデプロイできねぇよ」とか言ってた層には素晴らしい事で、ホスティングプロバイダのほうがそのPSGI形式さえサポートしてくれれば、がんがんデプロイできちゃったりするんですね。
これは是非みなさん、まわりのPerlの事をちょっと遠くから見ていた人たちにも是非教えてあげて下さいね!
日本語での記事が足りない気がしたので書いてみました。

Data::Visitor::Encodeの開発を停止します。もうしばらくの間は問題等あればサポートしますが、基本的にはData::Recursive::Encodeを使って下さい。
企画が出ただけの段階なので、まだなんとも言えないのですが、2010年5月〜7月くらいに東京以外の某場所でYet another Perl UNconference (YPUN)を開催しようかという話が出ました。
アンカンファレンスに関してはこちらを参照。
まだこれから諸々調整があるのでぼかした言い方ばかりで申し訳ないのですが、一応考えているのはこんな感じ:
- 某地方都市で泊まりがけ
- キーノートだけこちらで設定
- 地元企業もからめてBOF
- あとはアンカンファレンスで話したい内容を思い思いに
- Perlとはあるけど、ゆる〜〜〜〜〜い縛りで
- なるたけうまく方々と調整して参加者は基本的に交通費だけで済ませることができるようにしたい!
- 今候補に挙がっている場所は某中部地方エリア
- うまくいくようなら定期的に地方都市で巡回開催したい!
update: そういわれればこの例だけだったらgoto \&SUBでよかった!
例えば、AnyEvent::DBIで Q4Mを使って、*常に*なんらかのイベントをqueue_wait()する状態にしたいとする。するとexec()が終わったらまた同じexec()を呼ぶ事になるので、例えばこんなコードを書くかもしれない。
use strict;
use AnyEvent::DBI;
my $sql = "SELECT .... FROM queue_table WHERE queue_wait('queue_table', 10)";
my $dispatch;
$dispatch = sub {
$dbh->exec( $sql, sub {
# 返ってきた値でなんかする
$dispatch->();
});
};
$dispatch->();
# まぁ他の事してるプログラムで使うだろうから、本来はいらないけど・・・
AE::cv->recv;
でもこれだと再帰的に exec()を呼んで、さらにまた$dispatchからexecを呼んで・・・って事になってしまうよね。これを無くしたい。検証のためにもっとも単純なクロージャを使った再帰呼び出しをまず書いてみる。ここではスタックの深さをついでに表示しておく:
use strict;
my $dispatch; $dispatch = sub {
my $i = 0;
while(1) {
my @caller = caller($i++);
# noop
last if ! scalar @caller;
}
print "$i\n";
$dispatch->();
};
$dispatch->();
このコードを実行すると、エラーを起こすまで、少しずつ表示される数が大きくなっていく。これは再帰的に関数を呼び出し続けている数なわけで、どこかの時点でdeep recursion云々言われる。当たり前だよね。
さて、ではこれをAnyEventを使ってる場合はどうするか。まずひとつ簡単な方法としては idleウォッチャーを設定する事ができる:
use strict;
use AnyEvent;
my $idle;
my $dispatch; $dispatch = sub {
my $i = 0;
while(1) {
my @caller = caller($i++);
# noop
last if ! scalar @caller;
}
print "$i\n";
$idle = AE::idle $dispatch;
};
$idle = AE::idle $dispatch;
AE::cv->recv;
このコードを実行した場合、自分の環境では"6"が繰り返し表示されるだけ。idle()はイベントループが「次にビジーでない状態」に与えられた関数を実行するウォッチャーなので、続々と実行してくれるわけです。
「次にビジーでない状態」という曖昧な状態ではなく、確実にすぐ実行したい場合はタイマーを使ってもよいかも。この場合最初の引数に0を渡しておいてやれば、とにかく次の機会にすぐクロージャを実行してくれる。この場合も自分の環境では"6"が繰り返し表示される:
use strict;
use AnyEvent;
my $count = 1;
my $w;
my $dispatch; $dispatch = sub {
my $i = 0;
while(1) {
my @caller = caller($i++);
# noop
last if ! scalar @caller;
}
print "$i\n";
$w = AE::timer 0, 0, $dispatch;
};
$w = AE::timer 0, 0, $dispatch;
AE::cv->recv;
というわけで、直接Perlの関数を呼び出すのではなく、イベントループに一旦預ける事によって再帰的呼び出しを続けるのを減らすことができるのです。
正月。うちは去年爺さまが亡くなったので、喪中でありました。そこまでする必要もないんだろうけれども、親の意向で親戚への挨拶等ふくめなにもせず。大晦日と元日実家に帰って蕎麦を食べたり雑煮を食べたり。お節は基本的にはなし。
正月らしくないと言えば、元日の夕飯がフェイジョアーダでした。フェイジョアーダといえばブラジルの豆と肉の煮込み料理で、黒豆を煮込むので黒豆と言えば正月とかに食べる甘い黒豆を想像する日本人の方にはちょっと微妙げな感じの料理です。これの肉無しバージョンをフェジョアン(フェイジャンか?日本語表記難しいね)と言って、こいつはブラジルの高校時代の昼食に毎日のように食っておりました。それ以外にも週末に外食で食ってたりしたんだから、俺相当いままで豆を食ってきたんだな・・・ちなみに日本に帰ってきても相変わらず豆好きです。
ともあれ、そんな正月らしくない正月でありました。
あとはウィイレを40時間ほどし、HEROESの第1シーズンを観て(まだ途中)、家族に麻雀を教えるなどしておりました。まぁそんなこんなで平和です。
さて、2010年になっちゃいましたね。
endeworksのスタッフは自分とは違ってブログを書くとか目立つ行動をあまりしない人たちなので(まぁ正直零細企業社長としては「もっと目立てよ!」と思うところでもあるんだけど)僕を知っていても彼らの事はご存じじゃない方がほとんどだと思うけど、手前味噌ながら彼らはそれぞれの分野で素晴らしい職人であると思ってる。
このブログを読んでいる人は僕がエンジニアリング系の人なのでそっち系の仕事はできると分かっていると思うし、実際一昨年Fさんが加入してくれてからすごい色々出来ることが増えたのだけれども、デザイン関係でも実は小物、印刷物、店舗等の大型のデザインまだ結構色々な事ができる人たちを揃えているし、お堅い系のサイトなんかも制作できたりするのですね。
そういう様々な仕事でendeworksの屋台骨を支えてくれている間に自分はJPAをやったりなんだりしながら新しい事に色々挑戦できるという、なかなかいい循環が出来つつあった年が2009年という年だった・・・という感じ。
2010年はこの流れを切らずにendeworksの財務体質を強化していくのと、さらに新しい事をやれる年にしていきたいです。

