感想とか後でまとめたいなー。
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 件のコメント:
コメントを投稿