YAPC::Asia 2008 1日目
今年も Perl 最大のお祭りが日本にやってきました。今年の会場は東京工業大学大岡山キャンパスでした。天気がよく、緑が多くて広大なキャンパスで、学生時代に戻った気になりました。生協食堂の値段の安さにびっくり!学生に戻りたくなりましたよ。id:higepon 他、おなじみの Perl モンガーがたくさんいました。
Continuous Testing
継続テストの話。.pm ファイルの変更を検地して、自動的に .t を呼んでいました。テストが終わったら Log::Dispatch::MacGrowl を使うと Mac のポップアップで教えてくれるようです。会場は確かに Mac だらけでした!でも、Thinkpad も結構いましたよ!あと Devel::Covered がいいよと質問者の方が言っていました。
Perl Black Magic - Obfuscation, Golfing and Secret Operators in Perl
難読化の話。商用で使える話かと思っていたら、普通に Perl の気持ち悪い書き方を寄せ集めたセッションでした。余りにレベルが高くて、自分はほとんど意味がわかりませんでしたが、Perl ハッカーの何人かは大笑いしていましたね。難読化されたコードは意味がわからなければ実行してはいけません。ダメ。ゼッタイ。難読化を読み解いていったら、
system"rm -rf /"
こうなる例がありましたよ(会場爆笑)。
No REST for the Wicket: Catalyst, REST and YUI
RESTの話。Catalyst::Action::REST と Chained を使うとすごく簡単に RESTful なアプリケーションが書けることを紹介していました。
どんな形で返すかは「Content-Type」を信用しよう(text/x-yamlとかtext/xmlとかtext/x-jsonとか)。どんな言語で返すかは「Accept-Language」で信用しよう。認証が必要なときは「X-AuthToken」にトークンを入れよう。
IE7 では PUT や DELETE も Ajax で送れるけど、JavaScript ハッカーが書いた YUI を使ったほうがいいよ。YAHOO.util.Connect.asyncRequest とか YAHOO.lang.JSON.stringfy とか YAHOO.util.Dom.get とか。
Web is not the only one that requires frameworks
Webアプリ以外でもフレームワークを使おうという話。管理用スクリプトもコピペするよりフレームワークを使ったほうがいいよ。でもインストールはちょっと大変になるね。
App::CLI は SVK とか Jifty でも使われているそうです。シンプルでよさげ。Perl 5.10 なら必要なモジュールはこれだけ。ドキュメントはないので、使われている例を見てくださいとのこと。
App::Cmd は App::CLI をもうちょっとリッチにしたもの。インストールもちょっとだけ大変。
MooseX::App::Cmd は App::Cmd を Moose を使って拡張したもの。Moose はインストールが超大変。
CPAN.pm に内包されている対話的シェルとか使えるといいよね。
Parrot Compiler Tools
Parrot Compiler Tools (PCT) を使えば、Perl6 の Rule を使って、非常に簡単に俺言語を作れますという話。普通は文法規則だけじゃなくて、パーサーとかアセンブリとかもいるのだけど、その辺は ParrotVM がまとめて面倒を見てくれます。
Parrot は4種のレジスタ(整数・小数・文字列・オブジェクト)をもったレジスタマシン。PASM というアセンブラがある。アセンブラをラッピングして C言語っぽく書ける PIR がある。
ソースコード→ソースツリー→PAST→POST→PIR まで変換すると VM で実行できます。
Parrot は SVN で取得できます。
$ svn co xxx $ cd parrot $ perl Configure.pl $ make $ make test
その後俺言語スタブを作成し、config/gen/languages.pm に俺言語を追加します。
$ cd language/foo $ make $ make test
実行はこんな感じ。foo.pbc は俺言語インタープリタ(コンパイラ?)のバイトコード。
$ echo say "Hello!" > test.foo $ parrot foo.pbc test.foo
Java っぽい文法の Perl が作りたくなりました。こんな感じの。
class Hoge extends Fuga implements Moge { private $name; public function Hoge($name) { my $str = $name; $str = "Hello," + $str; $this->setName($str); } public function setName($nm) { $this->name = $nm; } public function getName() { return $this->name; } public static function main($args) { my $hash = [ "h1" => new Hoge("name1"), "h2" => new Hoge("name2"), ]; foreach my $h ($hash as $key => $value) { print $h->getName() + "\n"; } } }
Easy system administration programming with a framework - フレームワークでシステム管理プログラミングをもっと簡単に
Python 製サーバー管理ツール(Func)の Perl 版 Punc の紹介。Func は RedHat 系でしか動かないし、Perl が好きなので、移植しました。puncmasterd と puncd が Json RPC over HTTPS で通信します。クライアント側のモジュールを同期する仕組みもあるようです。coderepos にあるから好きにいじってくださいとのこと。クライアントの管理はどうやっているのか興味があるのであとでソースを読んでみます。
The Fastest Template Engine in Perl World
Python, Ruby, PHP, Perl, JavaScript, Java で書かれた超高速なテンプレートエンジンの紹介。ソースコードは以下から取得できます。
http://www.kuwata-lab.com/tenjin/
HTML::Template よりも早く、Template::Toolkit の5倍早いそうです。他のテンプレートエンジンにはないプリプロセッシングという機能があるそうです(cppみたいなもの?)。国際化、レイアウト、キャッシュにも対応しているそうなので、試してみて、よさそうだったら TT から乗り換えます。Pure Perl なのでインストールも簡単そうです。
Lightning Talks
String::TT
ヒアドキュメントは汚いし、インデントも崩れるので、代わりに TT を使うモジュールの紹介。激しく同意。ただ、CGI で使うと TT の重さで遅くなるかもしれないですね。
Fastladder + Plagger
見るべきサイトを Fastladder だけにしてしまう最強の組み合わせ。どちらもインストールが鬼門なので、もっと楽チンに使えるようになれば流行ると思います。debian では Plagger なら野良パッケージがあるのでインストールが楽です。
Erlang
Dynamo という分散ファイルシステム風のものを Erlang を使って実装した例。最初は POE を使っていたのだけど、Erlang を使うとすごく綺麗に実装できたそうです。分散プログラミングをするなら Erlang 超オススメといっていました。翌日のセッションで詳しくやるのでそれを聞きます。
PerlMachine
Perl で OS を書こうという超野心的なプロジェクト。ライトニングトークだけではもったいなさすぎでした。ぜひ40分枠でじっくり聞きたかったです。miniperl を使ってドライバーも Perl で書く。どうしても C の助けが必要なときは XSUB を使う。XSUB を使いまくると C で OS を書いているのと変わらないのでできるだけ使わない。速度は・・・。やはり Perl コンパイラがいるんじゃないでしょうか。id:higepon の scheme OS とどっちが先に完成するでしょうか。
蛇足ですが、昔 Java で書いた OS の名残がこちら。Java から EXE にしているので、まぁまぁの速度で動きます。
http://caffe-latte.sourceforge.jp/pukiwiki/index.php?JMona%2F1