2006-04-04
@ [emacs] 関数を一覧表示するnavi.el
Meadow/Emacs memoより。C-x C-lでファイルに定義されている関数の一覧を出すことが出来て、一覧から関数の定義位置にジャンプすることが可能。便利。
2007-04-04
@ [yapc] YAPC::Asia 2007 Tokyoに行ってきました
今日と明日開催されるYAPC::Asia 2007 Tokyoに今年も参加してきました。仕事の都合とかで全部のセッションには参加できなかったのですが、参加できたやつはどれも内容が濃くて非常に参考になりました。というわけでノートを少し取ったのでメモ代わりに書いておきます。
@ perl I18N in 20 minutes - Dan Kogaiさん
Perl内部ではデータは全てUnicodeで保持されているのは有名ですが、PerlのUnicodeのサポートっぷりは他のLL言語に比べてすごく進んでるよ、という話。
- Encode.pm
- これは文字コードを変換するためのインターフェースのひとつ。他のインターフェースとしてはPerlIO(open)とか、binmodeとか。
- PerlのUnicodeサポート具合
- 他のLL言語もエンコード/デコードは当り前にできるけど、文字列リテラルにUnicodeを書いたり\N{greek:Sigma}みたいなCharNames、正規表現、シンボル(日本語の関数名とか)、ユニコードプロパティまでサポートしているのはPerlぐらい。
という感じでした。ちなみにJavaって一番最初にまっとうにUnicodeをサポートした言語だったと思うのですが、Javaと比較するとどうなんでしょう?というのが気になりました。
@ Perlネットワークプログラミング再考 - Naoya Itoさん
今回ははてなのサービスに関連することではなくって、Perlでのネットワークプログラミングについて。
最近はCometとかAS3のSocket APIが熱い!というわけで自前でエコーサーバを作りつつ色んなネットワークプログラミングの方法を試してみました、というような感じで以下を紹介。
- BSD Socket API(すごい原始的)
- IO::Socket - 1.よりはマシだけどブロッキングが発生(1つのクライアントしか処理できない)
- ブロッキングの問題を解決するためにI/O多重化
- select(2)
- IO::Select - selectよりわかりやすい(でもC10K問題が...)
- epoll(Linux)、/dev/kqueue(BSD)、devpoll(Solaris)
そして最近のPerlではより高度に抽象化された(epollやらselectとかを隠蔽)モジュールがありますよんということで、POEやEvent::Lib(libeventのラッパ)やらDanga::Socketを紹介。
でPOEはもうライブラリというかネットワークプログラミングのフレームワークの領域なので残りの時間を割いて詳しく説明していました。
そういえば、「Danga::Socketを使ってみようと思ってCPANのPOD見たけどよくわからなかった」と言っていたのですが、僕も同様に使い方がわかりませんでした。PerlbalとかMogileFSのコード嫁って感じなのですかねぇ。とにかくselectやepollのレベルの話は、普段アプリケーションのコードだけ書いているとあんまり意識しないところなので、詳しく聞けてとても参考になりました。
@ Everything Vox - Ben Trottさん
Six ApartのCTOであるトロットさんのセッション。基本英語なのですが、宮川さんが随時日本語に訳してくれてとてもわかりやすかったです。内容はタイトルのとおりVoxのアーキテクチャについて。
VoxはYouTube、Amazon、flickrなどのWebサービスにアクセスできて、そこにあるものをまとめ上げることができる。んで、当然WebサービスなのでAPI叩いてごにょごにょやっているらしいのですが、Net::AmazonやNet::FlickrなどのCPANモジュールは使わず、独自のライブラリでやっているそう。理由は、こういうCPANモジュールを入れると色んなXMLパーサのモジュールが依存関係にあるので、mod_perlのメモリ上にそんなたくさんのXMLパーサのせるとメモリの無駄、っていうことだそうです。なのでその独自ライブラリはLib::XMLをベースにしてゼロから作られているとのこと。
さらにGDataやOpenSearch、MediaRSSをOpen Media Profileとしてまとめ上げて、Atomに独自のフォーマットを足しているらしいです(ちょっとここよくわからず)。
- Ajaxについて
- Catalyst::Plugin::JSONRPCを使っていて(っていうかこれ宮川さん作ですよね)、独自JSライブラリを構築しているらしい。2年前ぐらいから取り組んでいたので、prototype.jsとかまだ有名じゃなかったそうな。
- スケーリング
- Big-IP, Perlbal, mod_perl, memcached, Global DB, Clustered DB, MogileFSという感じでシステムを組んでスケーリングしているらしいです。ちなみにDBにアクセスするところはData::ObjectDriverというORMをVox用にこさえて、キャッシングとパーティショニングをORM側でデフォルトサポートしているそうな。ちなみにパーティショニングするとAUTO_INCREMENTなカラムでID管理できなくなるので、そこはyuiddという独自のID管理サーバを作って対応していると言ってました。
- TheSchwartz - 分散型ジョブ管理サーバ
- いわゆる非同期のジョブ(タスク)を実行するサーバだそうです。シュワルツって最初人名かと思いました。Voxの中では
- Video transcoding(FLV変換のこと)
- キャッシュ削除
- Six Update Stream(謎)
- Catalyst
- フレームワークにはCatalystを使っていて、なんでCatalystかというと、それなりに動作速度が優れていて拡張性があるから、ということでした。まぁ「触媒」の名は飾りじゃないってことですね。ただし、Viewとして使っているTTが速度的にはイマイチで、Voxの自分のホームページを表示する際の、実行にかかっている時間の60%はTTが処理している時間になっているそうです(データをとってくるところとかは全てmemcachedから引いてくるので速い)。
- memacached
- get_multiいいですよ。
- Perlbal
- Apacheのmod_proxyよりいいよ。Stand aloneの静的ファイルを返すWebサーバとしても使えるよ。
- 質疑応答とか
- DBをパーティショニングしていると横断検索とか大変だと思いますがどうしてますか?→全部アプリケーションで検索しているよ。
なんとなくdanga製品の総本山だけあって、いろいろうまく組み合わせて使っているなぁ、というのが感想でした。Data::ObjectDriverのコードは、ビルトインでパーティショニングを組み込んでいるという点が気になったので、今度真面目に読んでみようと思いました。
@ で...
この3つ以外にも色々とセッション聴いたのですが、もう書く気力がないので今日はここまで。あ、もちろん明日もいきますよー。
@ livedoor Readerは
ホントにクローリングが速くなった!10分前に書いたエントリがもう未読として上がってきましたよ!
# アベベ [PC3200/512MBが3988円であったらしいよ、クレバリーとか。今週末あたり底値とか予想されてるらしいけど…]
# おいぬめ [今日買って来ました。1GBは大人気なのか、色んな店で売り切れ続出でした。在庫が少なくなると値段上がっちゃうかもね。]