サンプルコードが動かないよ、ママン..... orz
どうも "Jifty Now!" で紹介されていた Jifty のコードは、CPANに上がっているバージョンでは動かなさそう(コードを grep しても "defer" とか定義している箇所がない……)
なので、きっと "Now!" ってのは subversion の trunk にあるコードだろうということで、リポジトリから、jifty と Jifty-DBI のコードをインストールした。ちなみに、jifty本体のtrunk のバージョンは、0.70117 のままなので、昔のファイル(Jifty.pm)を消さないとインストールできなかったりする。
む? かなりドキュメントが追加されている予感。warning がいくつか出たけど、サンプルコードも動いたし、しばらくこのバージョンで開発してみよう :-)
いや〜盛り沢山な一日でした。以下、備忘録。
■ web apiで遊び倒す
OpenID + asterisk で VoIP のデモ予定が失敗。あせる発表者 (^-^;
それはさておき、Firefoxの拡張に EC2 UI があることを知る。こういう情報ってどこから得てるんだろ?
世の中には、EC2 をバックエンドに使ったサービスもいくつか出ているそうです。
- muckOS
- RightScale
発表資料
http://s3.amazonaws.com/yapcasia2007tokyo/webapi.pdf
■ Patterns in Perl
Perl における(デザイン?)パターンについて。ちと関連知識を仕入れてから、再度ストリーミングで復習だな……
発表資料
http://www.houseabsolute.com/presentations/patterns-in-perl/start.html
■ Behind the Scenes at LiveJournal: Scaling Storytime
LiveJournal のバックエンドについて。かなり自前で開発したものを使っているみたい。もともと 1台(Web+DB)で動かしていたサービスがどんどん大きくなって……と話は進んで行き、今の構成が紹介されました。
- memcached
これは、一般的に使われているキャッシュデーモン :-)
- PerlBal
最近なにかと話題の、LoadBalancer。Pound みたいなやつですね。認証とか、重要なことは mod_perl で、巨大なファイル転送といったことは PerlBal で、という使い分けとのこと。
- MogileFS
分散型のファイルシステムっぽいやつ。RAIDを不要にし、トラッッカーデータベースとファイルを分散させて持つことで、それを実現。
- Gearman
Manager のアナグラムだそうです。仕事を割り振るけど、自分自身では仕事をしないルータのような役目をします。そのうち {e|i}BGP とか、OSPF とかが動き出すに違いない :-p
dispatcher の役目を担っているんですが、これでなにが嬉しいかというと、Image::Magick とかを mod_perl から追い出せたり……
- TheSchwartz
TheSchwartz はアナグラムではないらしい。
- djabberd
Jabber の実装の一つ。
結構盛り沢山だったので、プレゼンが公開されてから、もう一度見直したい話でした。DBの移行に、ユーザ毎に read only フラグを用意したり、schema_version を用意してそれに備えたりと、さらりと使えそうなノウハウが紹介されてました。
おっと、資料が公開されてますね。
資料
http://www.danga.com/words/2007_yapc_asia/
■ Jifty Now!
CPAN 小ネタ
cpan> notest install Jifty
でテスト無しで、インストールできるらしい。それはともかく、Jifty でアプリを書く上での疑問点がかなり解消! これだよ、これを待ってたんだよ!
しかもサンプルで作ろうと思ってたアプリそのまんまの簡易アンケートアプリが題材。これからじっくりコードを読んでみる予定
発表資料
http://pugs.blogs.com/talks/yapcasia2007-doxory.pdf
サンプルコード
http://fsck.com/~audreyt/DoxoryDemo.tgz
■ Building Catalyst Applications
あー、前のプレゼンの Jifty のサンプルコードに気を取られてあんまり聞いてなかった……ただ、作ったアプリの配布の方法が用意されているみたい?で、かなりこなれてきたみたい。Catalyst もじっくり触ってみたいフレームワークですね。FormBuilder とかも気になるし……
■ Pushmi - Subversion replication system
いくつか拠点を持っている開発会社にうれしい仕組み。マスターのリポジトリから、コピーを作ってくれる。コミット時には、単純にリレーするだけなので、普通の使い方のまんま。メリットは、
- 障害に(ちょっと)強い
マスターとの VPN 回線が切れたとして、checkout は可能
- 帯域の狭いところで活躍
10 人が svn update したとしても、マスターとコピーの間で 1回行なわれるだけなので、効率がよい。しかも update 後、他の人は、コピーのリポジトリから取れるので、すばやくコマンドが実行される。
こんな感じ?ちなみに VPN が切れた時のコミットは、svk 使っとけという話でした。
コード
http://code.bestpractical.com/
http://code.bestpractical.com/project/Pushmi
■ Assurer - a pluggable server testing/monitoring framework
Plagger そっくりな、テスト、監視用ツール。聞いていて、監視に使うには「エラーレベルの設定とそれに応じたアクション」「XX回失敗した場合はXX」といったことができないとつらいなぁと思ってたら、最後に今後の予定として挙げられてた。実装されたら運用部隊にお勧めできるかも?
■ Lightning Talks
いろいろ面白いのはありましたが
- Moxy
http://code.mfac.jp/
は実用度が高そう。PCから携帯アプリの動作確認をする際に、Proxy として間に噛ませることで、絵文字を変換したり、HTMLの幅を実機に合わせてみたりと、かなりよさげ。
さっそく帰社して試してみましたが、一部文字化け。ありゃー ad-hoc にはすぐ直せそうだけど、なにが悪いだろ?
■ Perl Program Repair Shop and Red Flags
Perl 添削道場。こういうのを社内の勉強会で、新人向けにじっくり紹介するのもいいかも?
- Seasar Conference 2006 Autumn な人と再会
どっかで見たことがある人だなぁと思って、思い切って聞いてみたらそちらにも参加されていたとのこと。ピザ食べながら話してた人だなきっと(^_^;
- 実物? の Dan氏とお話
ある特殊な実装上で Encode::Guess が segment fault するって話をしてみたり、素人丸出しで Code Page 932 の話を聞いてみたり、楽しかったです :-)
- なぜかJANOGの話をしてみたり
会場で話掛けた人がネットワーク屋さんだった。残念なことに JANOGを知らなかったようなので、是非MLに subscribe & ミーティングに参加してみてくださいって話しをしたり。
- 創業 3日な会社な人と名刺交換
そう、ちょこっとお仕事で関係してるんですよね〜私は直接関係してないんだけど(^_^;
他社の開発環境の話しって結構面白い。うちの開発環境も、もう少し整備して、どこかで発表してみるってのもいいかもね。
- Perl Worst Practices を発表された火星さんとお話
頑張って英語で話し掛けてみる。とりあえずプレゼンに感銘を受けたので、変数をすべて自分のコードから削除するつもりだとか言ってみたり。Debian 好きな方のようで、親近感が湧く。ちょっぴり日本語も話されるようで、3年間は日本にいるとのこと。六本木で働いてるっていってたけど、どこの会社だろ?
この時に、Debianのユーザ会の方ともお話をしたんですが、そっちの勉強会とかにも顔を出してみたいなぁ〜
- Virtualization and Package Deployment with EC2 を話された Millsさんとお話
日本語ペラペラというか、実は日本人なのでは……ってな感じ(^^;
興味があれば、EC2 の話しを別の機会にしてくれるとのこと。うちの会社で有志を募って、話しを聞きに行こうかな :-)
- Java な方とお話
結構 Perler に混じってちらほらと。「普段は Java なんだけど、個人的には Perl が好きなんだよねぇ」なんて話しを聞きながら、うちの会社での Java 部隊の話をしてみたり。
- mixi & MySQLユーザ会の方とお話
結局 MySQL のライセンス料はどうなの!?とかいう話しをする。サポートがいらないなら、GPL版でいいよなんて話をしてたんだけど、結局GPL版でうたわれる制限が、いわゆる GPL の解釈でいいのか、MySQL AB がうたっている制限じゃないとだめなのかって話を聞くのを忘れてた(これが一番聞きたい話だったのに(^^;))
まぁ酔ってたんですな
- Yahoo! な方とお話
Yahoo! で開発をしている方とお話。興味深い話をいくつか聞かせて頂く。非常におもしろかったです。サイトオペレータの某氏とお知り合いかと聞いてみたけど、部隊が違うとなかなかわからないみたい。そりゃそうか、大きい会社ですもんねぇ……
- 懇親会について
赤字かも!と心配されていたけど、最終的に人が集まったようでなにより :-)
思ったより、いろんな人と話せたかな? こういう懇親会もいいね!
会場のネットワークが安定しませんが、こういった規模のカンファレンスではよくあることです。なにげに(バッド?)ノウハウの塊ですからね〜
さて、YAPC::Asia 2007 Tokyo 初日です。YAPC = ヤプシー だそうです(それはさておき)
■ Virtualization and Package Deployment with EC2
使いたい CPAN モジュールを入れるよりも、そのモジュールが依存しているモジュールを入れる方が大変。最近は仮想化技術も進んでるんだから、いっそ環境事配っちゃえば? という話し。
いや〜かなり強引な解じゃないかなぁ? とは思うんだけど、わりと本気っぽかったかも。
RoR を使いたい人は、このインスタンス。Catalyst を使いたい人はこのインスタンス。Jifty を使いたい人はこのインスタンス……といった具合に、Amazon が提供する、EC2 と呼ばれる仮想サーバサービスを使う、というのをイメージしているみたいです。
会場からの質問にもありましたが、EC2、ベータが取れる日はいつだろう(^_^;
■ Higher-Order -Parsing techniques for Perl
関数プログラミング? な話し。構文解析ってこんな流れで行なっているんだよ、というプレゼンでした。ともすれば退屈な話しになりがちなのに、さすがにプレゼンがうまいな〜飽きさせない話しでした。最初に解析すべき文法を示し、
1. 字句解析
2. 再降下型解析
3. 結合
4. 選択
5. パーサ
と話を進め、最後に演算子のオーバロードで、「ほら、最初の文法と記述が一緒になったね。」と。
すくなくても、「続・初めての Perl」と「実用Perlプログラミング」程度の知識は必要だとは思うけど、面白かったです。あとでまた読み直さねば。
とりあえず、s/conc/cat/g だ!(謎)
関連
Higher-Order Perl
http://hop.perl.plover.com/
プレゼン資料
http://perl.plover.com/yak/parsing/
サンプルコード
http://hop.perl.plover.com/Examples/Chap8/
■ Perl I18N in 20 minutes
Python で、unicode なのに、2文字扱いになる文字があるって話が、ちょっとびっくりでした。あとは、λを \N{GREEK_SMALL_LETTER_LAMDA} とかで参照できるとか、属性を設定しているから正規表現で、すべての漢字にマッチとかすぐに書けるんだよってのも初耳でした。全然だめだなぁ>おれ
■ Perlネットワークプログラミング再考
IPv6 は? それが気になってしかたがなかったです(^^;
#質問はしませんでしたが。
あとで IPv6 がどうなっているか、調べてみよう……というか、いくつか書きたいコードもあるしね :-)
■ Everything Vox
Vox の裏側の話です。mod_perl を肥大化させないためでもあるんですが、XMLパーサを沢山いれたくないので、CPAN モジュールは使わずに、自分で実装したよ、という話とか出てました(いや、もっと話題は沢山ありましたが)
個人的にやってみたい、参考になる!と思ったのは
- TT の キャッシュディレクトリに、バージョン番号を含め、古いキャッシュが使われないようにする。
- Data::ObjectDriver + memcached を用い、caching, partitioning をプログラム側から意識せずに活用させる
です。DBIC の次は Jifty::DBI か Data::ObjectDriver かなぁ(^_^;
■ Inside livedoor 2006-2007
創業 3日の livedoor な話(なぜ創業 3日なのに 2006年の話があるかは謎(w))
- CVS から Subversion に移したよ
- Sledge 2.0 それはムーブメントです
という話。他にも Madeleine CMS が紹介されてました。Catalyst を使っているらしいので、あとで見てみようっと。
SVN リポジトリ
http://svn.shebang.jp/repos/Madeleine/trunk
あと、検索エンジンとして
1. Senna + MySQL(Sennaは 1.0 になってかなり安定したらしい)
2. HyperEstraier
3. Lucene
とか、いろいろ使ってるみたい。
■ Perl Worst Practices
バグの 95% は変数に絡んでいる。すべての変数をコードから取り除くんだ!という話<ちがう!
■ Perl 6 Today
もう Pugs の話題盛り沢山。日本語訳をされた方の趣味が忍ばれるプレゼンでした<着眼点が違う
こっそり、Perl6 になると、Perl とはお別れかなぁ? とか思ってたんですが、すこしやる気が出て来た(^-^;
あと、全然関係ないですがこのプレゼンで出て来る GPL とは General Purpose Language の略だそうです。あとで見直す時、混乱しそう……
■ BOF
あれ? BOF ……は?
http://tokyo2007.yapcasia.org/blog/ja/
去年はチケットが手に入らなかったので悔しい思いをしましたが、今回はばっちり :-)
特に、2日目の Jifty が気になりますね。DBIx::Class でやるようなリレーション(1対多や、多対多)をどうすればいいのか……そういった具体例が紹介されると嬉しいですね〜
Selenium だけでも便利なのに、Selenium IDE + Selenium RC の組合せはかなり便利。ただ、Debian で利用するときにはちょこっと注意が必要。
Debian だと、最近は、Firefox ではなく iceweasel とかいう名前なので、うまく Firefox が Selenium RC から起動されない。なので、PATHに /usr/lib/iceweasel を追加しておく。
$ export PATH=/usr/lib/iceweasel:$PATH
まぁこれだけ。PATHを設定後
$ java -jar selenium-server.ja
と起動しておく。あとは、Firefox の add-on である Selenium IDE でテストケースを作成し、 「File」=>「テストをエクスポート」=> 「Perl - Selenuim RC」を選択すれば、Perl用のテストケースが生成される。
実際の起動は
$ perl login.t
とかしてやれば、Selenium RC から Firefox が自動的に起動され、テストを忠実に実行してくれる。Selenium RC と Selenium IDE との組合せについては
Selenium RCとSelenium IDEでWEBアプリのUIテストを簡単自動化
http://usuilog.blogspot.com/2007/01/testingselenium-rcselenium-idewebui.html
Test::WWW::SeleniumでPerlからSelenium RCを操作する
http://usuilog.blogspot.com/2007/01/testingperltestwwwseleniumperlselenium.html
assertEvalの活用方法(ブレイクポイント、終了通知)
http://d.hatena.ne.jp/onozaty/20070103/p1
の一連の記事が非常に参考になります。私は、これらの記事を参考に、
1. Selenium IDE が吐き出したテストの先頭に
use utf8;
を付ける
2. Selenium IDE が吐き出したテストの末尾に
$sel->eval_is("alert('finished'); true", "true");
を付ける
として、利用しています。
http://blog.livedoor.jp/dankogai/archives/50780781.html
http://naoya.g.hatena.ne.jp/naoya/20070307/1173255756
ははっ(^-^;
去年、本屋に山積みになっていたXX日でできるなんちゃら Perl の本では、"use CGI" なんて使ってない例が載ってた気がする。だれかちゃんと推薦できる初心者向けのCGI本を書かなきゃいけないんじゃないのかなぁ(すでにあったりする?)
http://www.sixapart.jp/techtalk/2007/02/how_to_make_perl_module.html
最近では h2xs よりも Module::Starter を使う方が cool とのこと。
http://d.hatena.ne.jp/tokuhirom/20060929/1159495175
http://mizzy.org/program/archer00.html
む? 実は、はてなが使っているという Capistrano(カピストラーノと読むらしい)を Perl で使ってみたんだけど、その当時は
http://manuals.rubyonrails.org/read/book/17
が、ずっと閲覧できない状態だったので、手探り状態。結局、DBの自動展開ができなかったのと、リポジトリにデプロイツールを突っ込む形になっていたのが気に入らなかったのもあって(これは私の誤った運用の問題だな)、結局使うのやめちゃった。
Archer はそもそも Perl だし、こっちの方がいいかなぁ?あとで試してみよう。
http://iandeth.dyndns.org/mt/ian/archives/000619.html
お? 思ってたよりも応用範囲が広そう。あとでじっくり読もう。
スクリプト言語用のデバッガの使い方 - Ruby, Python, Perl
http://0xcc.net/blog/archives/000162.html
perl - B::Deparse
http://blog.livedoor.jp/dankogai/archives/50761629.html
http://mizzy.org/program/net-ldapx-simple00.html
Net::LDAP::Alterntive の名前が変わったらしい。
[% WHILE (blogger = blogger_ite.next) %]
[% FOR blog IN blogger.blogs({},{order_by => 'me.id ASC' }) %]
[% blogger.name %]:[% blog.id %]<br />
[% END %]
[% END %]
via http://d.hatena.ne.jp/nekokak/20061216/1166195503
おお〜 resultset_attributes に書くしかないと思ってた!
C言語でいうところの global といった、関数のクロスリファレンス化ツールはどこかにないかなぁ? と思ってたんですが、やっとよさげなツールを発見。
Natural Docs
http://www.naturaldocs.org/
こんな感じで、使います。
$ ./NaturalDocs -i ~/src/mylibs -o HTML ~/public_html/mylibs -p ./project
これで、~/src/mylibs 以下の Perl プログラムが、HTML形式でドキュメント化されます。POD形式で、プログラムに埋め込んだものを拾い出すこともできますが、コメントとして、ある程度の決まりに乗っ取って作成しておく方がよさげです。
Perl 以外にも対応していたりして、なかなか Good です :-)
Perl のフレームワークというと、CGI::Application, CGI::Framework といったものより、Catalystとかの方が、RoR と比較されやすいけど、要求される CPAN モジュールの多さがね……ということで、Jifty で遊んでみた。
i) 雛型の作成
$ jifty app --name sample
これで必要なファイルが生成される。
ii)データベースの初期設定
$ cd sample
$ bin/jifty schema --setup
これだけ。
$ bin/jifty server
とすれば、もう動きだすけど、先にモデルの雛型を作る
iii) モデルの雛型を作る
$ bin/jifty model --name Car
iv) モデルの作成
$ vi lib/sample/Model/Car.pm
この記述が独特。
v) データベースにモデルを反映
$ bin/jifty schema --drop-database
$ bin/jifty schema --setup
SQLを扱う必要なし〜
マニュアルとかは以下が参考になるかも?
$ perldoc Jifty::Manual::Toturial
Jifty チュートリアル
http://www.tcool.org/jifty/Tutorial.html
ただ、欲しい情報が、まだまだ得づらいかなぁ? たとえば、モデルで利用できる rendar_as は、生成されるフォームと密接な関係があるっぽいけど、実際に利用できるタイプについての情報をどこから得ればいいのか不明。結局ソースを読んで、Jifty::Web::Form::Field 下のモジュール名がアトリビュートとして使えることが判明。
Button, Checkbox, Combobox, Date, Hidden, InlineButton
Password, Radio, Select, Textarea, Upload, Unrendered
あとは、Jifty を利用したアプリのコードを実際に読んで学んでいく感じ?
ちょっと、社内用のシステムにでも使ってみようかと思ったんだけど、一つのエントリーに対して、がしがしタグが追加されるようなモデルを、どう表現していいのかよくわからなかったので、放置…… refers_to で処理するんだろうけど。