てきとうなメモ

本の感想とか技術メモとか

YAPC::Asia 2007 1日目

また参加したのでメモ.

Welcome - Tatsuhiko Miyagawa

今年はチケットの前売りだけで360人になって,当日券の人とスタッフと発表者を会わせると400人を超えちゃってこれまでのYAPCの中でも最大の人数らしい.

LarryやDamianはいないけどHigher-Order Perlの中の人が来ている.Lightening Talksをやろうといったのもこの人らしい.

あと,恒例のuse Dan::Kogai 'again';

Kwiki and the Symlink - Ingy döt Net

Ingy2.0

法的にIngy döt Netという名前になったようです.おめでとうございます.Ingyがfirst nameでDöt Netがlast nameでDötはmiddle nameじゃないよとか.パスポートだったと思うけど,ASCIIしか駄目らしいのでIngy Dot Netになってしまうとか.あと,ドットネットさんとか呼ばれたりするらしい.ほんとかな.

Kwiki2.0

クィッキーって発音するっぽい.初めて知った.Perlベースのwikiエンジン.2.0になって何が変わったのかというとインストールしやすくなった.svnでチェックアウトするだけ.モジュールの依存関係をどうするのかという点でどうするのかというとsymlinkを使っているらしいのだが,ここはよくわからなかった.メインのところなのに….symlinkなんでwindowsはサポートしていないとのこと.

Kwikiにはプラグインが多いのでどれを使ったらいいのかわからない.そこで,どれを使うかを決める設定のようなもの(フレーバー)を使う.最初は有名なフレーバーをつかって,その後,カスタマイズしたり,設定を継承したりできるらしい.この継承にもsymlinkを使っているらしい.

デモをやろうとしていたのだが,ネットワークのせいか失敗してた.

Virtualization and Package Deployment with EC2 - Emerson Mills

Emerson Millsさんはamazon.co.jpの人.amazon web serviceの日本版を担当しているらしい.日本語ペラペラでした.amazonには好きなだけPerlを書いてよしと言われたので就職したのだとか.

Ingyさんのセッションと同様にcpanモジュールのインストールめんどいよね,という話から始まり,そこで仮想化ですよという話.Amazon EC2というのは仮想化マシンのWeb API?で,ユーザが構築した環境をイメージとして公開することができる,そこで,cpanモジュールをインストールしたイメージを使えばいいんじゃないかと.

Higher-Order Parsing techniques for Perl - Mark Jason Dominus

Perl再帰降下型パーザといえば,DamianのParse::RecDescentなんだけども,これはclosedなんでカスタマイズしにくい.そこでHOP::Parserを使ってよりopenなコードを書こうとしている.

ただ,カスタマイズしやすいだけでなく,Higher-Orderとあるように関数合成を行ったり,関数を返す関数をつかったりして,分かりやすくパーザを構築していた.

ここでの話はHigher-Order Perlに載っているらしい.あと,Higher-Order Perlはオンラインにのせるらしいけどいつになるかわわからない.

perl I18N in 20 minutes - Dan Kogai

最初のEncode.pmの基礎の部分は去年と同じ感じだった.あとは,Ruby,Python,JavaScriptなどのLLと比較していた.リテラル,charname,識別子,正規表現について比べるとPerlは全部対応している.ほかの言語は大きなコードポイントを表現するのにサロゲートペアを使わなければならなかったり,charnameに対応していなかったり,マルチバイトの識別子を書けなかったり,正規表現のブロックを利用できなかったりする.

Perlネットワークプログラミング再考 - Naoya Ito

ネットワークプログラミングをやっているとI/Oブロッキングが起こって困る.I/Oブロッキングというのはファイルやソケットに読み書きする時にCPUは利用していないの止まってしまうこと.ネットワークプログラミングでは,サーバに複数のクライアントが接続するとき,一つのクライアントへの読み書きで止まってしまい,他のクライアントの処理が出来なくなる.そこで,プロセスのforkとかthreadを使うとかがあるけども,それらはリソースを食うので時間がかかる.

そこで,selectやpollを使う.これらはプロセスやスレッドを生成しないのでリソースを食わない.I/O処理が終わった時点でユーザプロセスに通知して残りの処理を行い,I/O処理をしている間に他の処理をすることができる.でも,selectやpollは古くて効率が悪かったりする.そこで,新しいOSの機能を用いる.それがepoll(linux)や/dev/kqueue(BSD)やdevpoll(Solaris)である.epollを使うモジュールとしてIO::EpollやSys::SysCallなどがある.

他にmodernなモジュールとして

  • POE
  • Event::Lib
  • Danga::Socket
  • Stem
  • Coro

などがある.これらは共通して,イベントドリブンであり,抽象化を行っている(pollを使っていようとepollを使っていようと同じインターフェース).

あとはPOEとEvent::LibとDanga::Socketの紹介.

Everything Vox - Ben Trott

sixapartの新しいブログサービスVoxの内側について.以下の3つの視点から.

Web2.0

いろいろなものに対してWeb APIを提供.出力形式はRSSAtom.たくさんのXMLパーザをインストールしたくないし,効率を考えてXML::LibXMLのみ入れてRSSAtomをを出力したり解析したりしている.また,オープンな規格であるOpenSearchやGDataやMediaRSSをまとめたOpen Media Profileというフォーマットを作って,対応させている.あと,JSONAPIもある.

Scalability

LiveJournalで使っていたData::ObjectDriverを利用している.その中でキャッシュとパーティショニングを用いることでScalabilityを高めている.キャッシュはmemcachedを使っており,primary keyで検索する物はキャッシュする.パーティショニングはユーザごとのデータはパーティションに分かれており,グローバルなユーザID-パーティションIDのマッピングテーブルからパーティションNoを取得し,そのパーティションNoを指定することでユーザの属するパーティションからユーザのデータを取得する.ここでユーザIDにオートインクリメントは使えないので, 独自のID発行サーバを利用している.これもスケーラビリティに入るらしいのだが,ジョブ管理サーバみたいなものを独自に作って,バッチ処理的なものを実行している.例えば,動画のフォーマットをflvに変換するとか.

Fast

Catalystは十分速いのだが,TTに時間がかかる.memcachedは高速化という点でも必要.あとは,Perlbalによるプロクシはmod_proxyより高速である.あとjavascriptのファイルをたくさんロードしているので,一つのファイルにくっつけるプラグインをつかっているとか.

Inside livedoor 2006-2007 - Tomohiro Ikebe

livedoorで最近起こったこと.

cvsからsubversionに変更.pserverを使っていたらしいけども,mod_auth_mysqlとmod_dav_svnを用いてmysqlを利用した認証に変更した.

Sledge2.0ということでSledgeも古くなったので2.0にしようと.Catalystみたいなことができるようになったのだが,いつ2.0になるのかは不明.というか,作ろうとしているという行為が2.0だと.

言語は基本的Perlを使っているのだが,apacheのモジュールを書くのにCを使ったり,luceneを使うためにjavaを使ったりしている.

Sledgeがあるけども,Catalystもちょっとした管理側のツールを作るために使っている.最近はmadeleineというCMSの開発に利用した.

Perl Worst Practices - Marty Pauley

変数使うなとか,OO使うなとか.あともう一つあったけれども忘れました.Regexpだったかな.

Perl 6 Today - Audrey Tang

Perl6の構成とか歴史とかコミュニティとか文法について.マクロとか型推論とか最後の方は意味はわかるのだが,スピード的についていけなかった.

あと,鳳たんと梅田さんネタがあった.