新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2010-10-16

[Perl]YAPC::Asia 2010 2日目ライブレポート

聞いた事そのままです。
感想とか後でまとめたいなー。

How Xslate works - gfx

電車遅延のため10分送らせてスタート。
The next generation template engine

gfx loves perl internal;)

Template engine for perl5
xsで書かれてる。
MakamakaさんがPurePerl版をかいてる
なぜ今更テンプレートエンジンか?すでに様々なテンプレートエンジンがあるのに。
→それぞれ一長一短。完璧なものがない。

Template::Text
なんでもできる。
プラグインもある。
だが遅い。
複雑。
XSSを産みやすい。

HTML::Template
早い。
機能が絞り込まれていて、良い。
Perlのインターフェースが使いにくい。
機能が貧弱。
XSSをとてもうみやすい。

Text::MicroTemplate
早い。簡単にインストールできる。PurePerlなので。
XSSに強い。
Perlのシンタックスなので、非Perlな人には辛い。

今のところ最高のものがない。XslateはCPANでは最速。

コロンで行を始めると、コードになる。
CUIではxslateコマンドを提供。
-TTerseオプションを指定すると、TTライクなテンプレート構文になる。

Cacheがあれば、最速。by Sam Graham

XSS対策

従来のテンプレートエンジンは全てエスケープ。
Text::micfoTemplate譲り。
アンエスケープ機能もあるけど、使うなw

テンプレート構文
Kolon デフォルト。
TTerse tokuhiromからの強い要請。パフォーマンス低下はない。
Clevery Smarty的なやつ。

拡張可能。

テンプレート継承
Kolonでのみ使える。
TTのラッパーのすごいやつ。

実行プロセス
まずテンプレート構文をプリプロセス。
中間コードをパースし 、ヴァーチャルマシンに食わせる。

Top Down Operator Precedence

Data::MessagePackをバイトコード保存に使用。

テンプレートエンジンは、HTML escapingがボトルネックになる。

WAFにも組み込んで見て!
お金ないから投票よろしく!w

質疑
こばやしさん
q なぜVMを実装することにしたのか?
A Perlそのものでは余計な処理が入るので。

dankogai
perl6でvmじっそうすれば?

他の言語向けのバインディングは?
>考えてません。

Ajax Application Testing - Yappo

Ficiaという写真共有サービスで使った、JSTAPdというツールの話
JavaScriptのテストツールはいろいろある。

各種ブラウザのjavascriptエンジンを使ってテストしたい。
Ajax のテストをしたい。
Cliのツールがいい。

ユーザが使うかもしれないブラウザでの自動テストが重要。

インストール
cpanm jstapd

テストコードはjavascriptでかく。
が、Test::More的なシンタックス。というか、まんまTest::MoreをJavaScriptに持ってきた感じ。
01test.tにjquery_jstapd.plという文字列リファレンスを食わせると、テストコード内でjQueryが使える。
tファイルには、JSTAPd::Suiteをuse.

conf.pl内にブラウザ起動のシステム構文>cliで自動テスト!

*.tファイルにはサーバサイドのテストコード。
*.jsにajaxのテストコード。
jstapDeferred使わないと、非同期な処理ではテストにならないので注意。

PSGI+Plack+Twiggyで構築。

質疑応答
刺身さん非Ajaxなテストはどう書けばいいの?
>普通に書いてください。

Perlで任意精度計算 - Daisuke Maki

普通は、整数部3桁、小数部7桁までしか表現出来ない。
本当に正確な値を求めたい場合に問題。
誤差から生じるエラー幅がどんどん桁が膨れ上がる。

任意精度計算とは任意のデータ量で任意のデータ幅を計算する。

旧暦について
地球から観測した月と太陽の緯度で決まる。
昔の人はこれをちゃんと計算してた。
月の満ち欠け 29.5日周期。
太陽周期 365.2日周期
これらを計算しないと旧暦を求められない。
高精度を要求される。これをPerlでやりたい。

print 1/86400;
これでは小数点以下18桁しか求められない。
正解は小数点以下59桁

Math::BigIntの問題点
文字列としてデータを渡さないといけない。
1value = 1objectなので、非常に遅い。
plainなperlと比較しても、600~700倍の時間がかかる

じゃあどうする? > goodbye perl!
Cでやらせます。→MPFRというライブラリを使う。

DateTime::Astroとしてあげ直した。
結果、Math::BigBit比54倍の処理速度。

perlからは文字列でデータを渡す。鉄則。
Perlでやらない方がいいものもある。
旧暦計算は楽しい。

XSからPPへ - Makamaka

xsをpureperlにする話。

XSをPPにすると
ポータビリティ向上。
xsの知識が得られる。
暇つぶしになる。

でも
遅い。
最高に車輪の再発明。
遅い。

テストは重要。動作を合わせるうえで。
エラーテストがあるとなお嬉しい。

ノウハウは、モダンPerl入門の8章に載ってます><

dankogai
Perl5をPP化してくださいw

Unix programming with perl - Kazuho Oku

テストが通るのと、コードが正しいかとは別。

Errno
use Errno;
$! is dualvar.

どうやってerrnoの一覧とその意味を?
man 2 mkdir

可搬性を重視なら、opengroupの資料を参照。

Fork
Dbiの場合、子プロセスにてInacfiveDesfroy変数を立ててからDisconnect。
親プロセスで開けたファイルハンドルは親プロセスで閉じておく。

Unix signals
ネットアプリケーションが止まる場合、SIGPIPEの処理がないからだったりする。
$SIG{PIPE} = IGNORE
タイムアウト時の処理をSIGALRMで。
$SIG{ALRM} = sub{ ... };
Gearman::Worker等で使われているノウハウ。

この辺の話は、Web+DB Pressでも。

Inside mbga platform - Toru Yamaguchi

途中からききました。

OpenSocial container 俗に言うYahooモバゲーの内部設計
Apache shindig を使用したOpenSocialコンテナ。

Inside Social API 
軽くてシンプルなのが要求される。
余分な機能は不要。
既存のWAFを使わず、Plackでおk。
Webserver ligttpd 
Routing Route::Simple
Config pl

Model
APIのロジックを記述。
原則的にやりとりするデータはscalar, array ref, hash ref.
軽量化の為、無駄なインスタンスを作らない。(オブジェクトにしない)
Object::Containerにモデルを突っ込んでおく。

接続情報はmemcachedにあるというモバゲーの流儀。
Object::Container++

DBI::DBHResolver
複数のデータソースへの接続を一元管理。

DBIx::Connector
DBIの薄いラッパー。

SQL::Abstract::*
SQL書くのはたいていこれで。
JOINする場合は、直接ヒアドキュメントで。

MySQL
日時によるパーティショニング
Triggerの積極利用。
Trigger+Q4Mでテーブルを動的に変更。 検証中。

Db接続のラウンドロビンは、負荷の不均衡を招くかも。
 

0 件のコメント: