今日は昨日に引き続きYAPC::Asia Tokyo 2012の1日目です。東大内の伊藤国際学術研究センターに入り開会を待っております。
今日もgihyo.jpさんの特集にレポーターとして参加します。昨日と同様に@amayanさん、@moznionさん、ya_k0さん、@takayuki_hさんが中心となって執筆しますので、ぜひご覧頂ければと思います!
941さん「オープニング」
- Take A Step Forward
- 色んな言語を巻き取って行こう
- 東大のこの会場で大きなカンファレンスが行われるのは初めて
- 最多のボランティアスタッフ、スポンサー、来場者数、過去最高のやる気(941さん史上)、個人スポンサー
- 800人以上!!嬉しい誤算。
- 初めて来た人挙手 → 半分以上!?
- 遠方からの参加者支援制度 → SKYARCさん
- 懇親会無料
- ランチ交流企画 → クジを引いて、当たった人が一緒にランチ
- LT-thon → Hachioji.pm
- 書籍の立ち読みコーナー (物販ができないため)
- YAPCの楽しみ方
- ハッシュタグ #yapcasia、アナウンスはTwitter @yapcasia
- 感想はブログに → 抽選で豪華景品
- 懇親会は19時から
Larry Wall さん「What Does Your Code Smell Like?」
- 「おはようございます」
- Perl5とPerl6の文法の違い
- Perl6では全てリファレンス
- ifやforの括弧は外せる
- 負を指定する代わりに *-1、*+$_
- ..^
- ->はドットに
- @xは全て@xで
- (^100).role
- 配列を展開させたければ@a[]と書く
- is copy、is rw にて引数の渡し方の指定
- cmpや!after、beforeで文字も数字も比較できる
- cmpの戻りはDecrease、Increase、Same
- gather と take
- infix:
を定義すれば M= みたいな書き方も → Perl5へバックポート?
- Q. Perl6への静的型は入らないの?
- A. Haskellはstrict過ぎるので、NO
- Q. パターンマッチが足りない場合もエラーにならないの?
- A. 現状はならないし考えてない。やるなら警告。ユーザフレンドリーに。博士向けのシンタックスは作らない。
- Larry「Perl6は完璧の次くらいのものにしたい。次の世代でさらによくなる。改善の余地はある。他の言語をuse で取り込んだりも?」
Ingy döt Netさん「Acmeism, Pegex and CoffeeScript on CPAN」
こちらはgihyo.jpさんの特集にも掲載しています。
- 言語は壁。克服できるが大変
- プログラミング言語も同様
- "Acmeism" 特定の言語に拘らない
- Ingy's Law of Programming → 何事も非難されるべきじゃない
- ラップトップは駄目 → 90年代からwearable コンピュータが欲しかった
- プログラミングは駄目 → コンピュータにやらせる。人間はアイデアを作る
- 1000のモジュールを20の言語で出す。世のすべてのモジュールをハックする
- PEG == Parsing Expression Grammars。例: Perl6
- Coffexcript は JavaScriptをよくしたもの
- Pegex + CoffeScript == NPM
- Coffee on CPAN
- JSでコンパイルするもの → C'Dent、JSにする、UniScriptなどの解決法
- UniScriptとは? JSONYとは?
- Perl5 Module、Panda Module、PyPImodule、NPM module、C'Dent module の比較
- make npm とするとnpmのコードができる → make cpan はまだ
Tokuhiro Matsunoさん「Nana/Tora - Perl5 から見える未来。Perl5 と共にあゆむ Perl6 ではないプログラミング言語、それは。」
こちらはgihyo.jpさんの特集へも掲載しています。
- Perlは人気がない。そのなかでできることを考えた
- Perl5のよくないとこ
- コンテキストによってはハッシュが壊れる
- 関数プロトタイプの仕様がひどい
- @_・・・?
- リファレンス・・・@{${%{x}}}
- XSが難し過ぎる。副作用のあるマクロが多い。ref countが大変
- bless、Moose、は別にいい
- プログラミング言語はそんなに重要ではない
- Perlを使う人はモジュールの知識を蓄えている
- モジュールの善し悪し
- 作者ごとの癖
- CPANモジュールガイド
- モジュールの知識を、何度も学習したくない → Perl + CPANを使っている
- Perl6はもう10年経ってる
- 新しい正規表現 → rx/^^\>(\N*\m)/; → 学習コスト
- Rakudo starのベンチを定期的にとってる
- 10_000 loops : 0.59s で終わるようになった!(perl5 なら 0.01s)
- Toraを作った
- Tora → クロージャのネスト以外は動く
- Nana → 型周りが難しい
- node.js → v8を一番楽にインストールできる
- npmがよくできている
- DSL for npm は・・・? → kuma
- JSは罠が多い
- 他、lispyscript、coffee
- kuma -- Toraのnode.js実装(E"CMA"スクリプトだから)
- JSは一番みんなが嫌々使う言語なので、ベースにするとよい
- kumaのデモ → 非常に高速
- node-perl
- npmだけだと不満。CPANモジュールも使いたい
- node.jsからLWPを使ってとってくるデモ
- node-mruby
- 色々な言語を使う人がnpmを使うと便利になるでしょう
- 質疑応答
- Q. Perl-node は?
- A. libnode がないので、きつい。node-perlもコンパイルは大変
- Q. kumaからPerlのクラスを呼ぶときに、簡単に呼ぶ方法は
- A. 今はないです。これから実装
- Q. node-perl や node-mruby の実装の苦労話をブログに載せる予定は?
- A. コンパイルオプションが大変。Linuxのsystem perlならいいけど、OS Xはそうはうまくいかない。mrubyはドキュメントがない。@masuidriveさんのツイートが頼り。
- Q. 実際どの辺りで使う?
- A. YAPCでの発表。node-perlは使いたかったが、コンパイルがプロ向き過ぎる。kumaは普段使い。node-mrubyは誰かより先に書きたかった
lapis25さん「Perl Ocean - XMPP based realtime communication framework suite」
- OceanとはXMPPを中心とするリアルタイムコミュニケーションフレームワークスイート
- XMPPとは?
- オープン標準 → 仕様が公開されている
- 永続コネクション → tcpでつなぎっぱ
- XML → 単一のXML。冗長。バイナリはきつい
- 中央サーバがない
- 拡張性 → XEPの部分はRFCに規定されていない。グループチャットやボイス・ビデオなど
- IM:RFC6121、拡張仕様(Pub-Sub、ボイスやビデオ)
- アプリ → iChat、Google Talk、Facebook Chat、MSN Live、PSN
- Ocean
- Webサビスとのインテグレーションを前提とした設計
- 共通仕様の策定、クラスタサポート、HTTP Bindingのサポート
- メッセンジャ、プレゼンス、グループチャット、プッシュ、オーディオ・ビデオ
- 同時接続数やブロック、サイクルのミスマッチ → クラスタサポートが必要
- メッセージブローカー
- mixiにてテスト運用中
motemenさん「Wight - Phantom's new friend」
- Perlの楽しみ → スクレイピング、WEB、その他
- PhantomJS
- Scraping、JavaScript monitoring に適している
- Perlバインディング → Wight (他のライブラリが全て幽霊の名前を使ってるので)
- 値のセットやクリックをすると、イベントが生成される
- 画面外をクリックするとエラー(!)
- evaluate('')
- cookie_jar HTTP::CookiesとPhantomJSで連携
- テストに使う
- Test::Wight
- Twiggyとの連携
- Perlにする理由は?
- コールバックを使いたくない、LWPやCoro、prove便利
- Tumblrのデモ → 'j'キーの押下をシミュレータ
- Poltergeist → a phantomJS driver for Capybara
- JSはこちらから拝借 Rubyist++
- テストの仕組み
- TODO: Mechanizeとの連携、クロスドメインframe連携、ルビーストになる
- おまけ → Weight::jQuery (jQueryコードのジェネレータ)
- 質疑応答
- Q. アニメーションが終わるのを待てる?
- A. 要素が見えてるかをJSで見れる。あるサブルーチンが真を返すのを待つ。クリックした後ポーリングしつつ、動作が見えるまで止める
Tim Bunceさん「Profiling memory usage of Perl applications」
こちらはgihyo.jpさんの特集へも掲載しています。
- 「ありがとう」(初来日に添えて)
- "Out of memory" 出たことあるでしょう
- メモリチェック
- system("cat /proc/$$/stat")
- system("cat /proc/$$/statm")
- system("ps -p $$ -ovsz,rsz,sz,size")
- system("top - -nl -p $$")
- system("cat /proc/$$/status")
- system("cat /proc/$$/smaps")
- Size -> libperl.so
- メモリはページに分けられている
- Prelの各種変数のメモリ構造を理解する
- Devel::Peek → 文字列で表示
- Devel::Size → 書く変数の実際の総サイズの表示
- メモリプロファイリング
- 実装方法
- Devel::Sizeを継承、Cレベルのフックを追加、コールバックのためにパス名の追加、Devel::Sizeから任意のサイズを取得し、ディスクに残して分析
- 日曜までには公開予定なんだけど・・・デモ
- IVとPVの両方を持つデータだとメモリ使用量が増える
- メモリの使用量を視覚的なグラフで表示できる
- Tree map でも見られる
- Moose の例 → 分析に時間はかかるが、freeされた領域はそれでも4MB程度
- 質疑応答
- Q. なんで20MB?
- A. 10MBの文字列領域と、名無しのアサイン領域。名無しの方はコンパイル時に作られてそのまま残る
- Q. 使ってるのはなんてアプリなの?
- A. thejit。NYTProfでも使っている。
- Q. どの範囲のメモリまで終えるの?
- A. OSに実際に使ってるヒープから、perlが使っている分を引きたい。全体をProcessにして。
- Q. 動作中のメモリは見れるの?
- A. スナップショットを定期的に吐けば表示できる
- Q. SVだけ見てるの?opツリーも見てるの?
- A. opツリーを全て追っている。アリーナにある領域をみてリークを探す。
- Q. 使っていた環境変数はなに?
- A. 開発中の仮名公開時に変える。
Shunichiro Fujiwaraさん「Perlアプリケーションのベンチマークとプロファイリング」
- チューニンガソン → アプリは弄ってはNG
- ISUCON → 何やってもOK
- ISCON2も開催されるそうです
- チューニンガソン#4、ISUCONでは改善率が100倍を超えてる
- Query Cache 100 -> 1200
- テーブル構造 → 20000
- 極限までcache → 90000
- テーブル構造の変更が一番効く
- 「推測するな、計測せよ」
- ボトルネックを先にはっきりさせること
- 基本的なメトリクスの収集
- CloudForecast, Ganglia, Cacti, Zabbix, munin
- 死活監視
- 監視対象以外はわからない
- 一ヶ月前より全体的に遅い
- 数分間だけ遅い
- nginxでレスポンスタイムを記録
- $request_time, $upstream_response_time, $upstream_addr
- Apacheで・・・
- %D
- $upstream_response_time 相当がないので、Plack::Middleware::Runtime
- ログに出すだけだと・・・→可視化
- fluentd → accessloをtail pluginで読み取る
- numeric_counter でグループ化する
- zabbixに送信する(GlothForecastとかにも投げれる)
- deploy直後に気がつける、数分間だけの性能劣化も把握できる
- 数分間の劣化とは? → バッチや、bot
- DB slow query logをまず探す → 70〜80%の原因はどこ
- 非効率なindexが使われるなど
- アプリが悪い場合 → Time::HiResのgettimeofdayとtv_intervalで計測
- Devel::KYTProf → 特定のメソッドをラップして計測できる
- 任意のメソッドを追加できる
- (I/Oに比べれば)軽いので本番適用しても→ thresholdでしきい値指定
- Devel::NYTProf++
- 直ったかを見る → Benchmark.pm
- timethese、cmpthese
- マイクロベンチマークに拘りすぎないこと
- 例えば50msで返す場合、0.1msは意味があるのか
- Parallel::Benchmark → 子プロセス内で並列ベンチマーク
- fork後にsetup。Parallel::Scoreboardへ書き込み
- benchmark while 1を指定時間ない実行させ、SIGUSR2で停止させる
- Benchmarkツールの作り方
- 限界を見極めておくのが大切
- まとめ「推測するな、計測せよ」
- ボトルネックの特定で8割解決。勘でやると9割空振り。
Lightning Talks Day 1
こちらはgihyo.jpさんの特集へも掲載しています。
tokuhiromさん「Furl」
Ktatさん「Perldoc.jp 10周年」
zeniivaさん「株式会社モバイルファクトリー Hello Perl World」
- モバイルファクトリとは? → Wassar
- エンジニアはドラえもんだと思ってた
- 昔有名な人がいた開発部
- 開発部部長と結婚(拍手)
- 変更には慎重あれ
- モバイルファクトリーに入社すると結婚できるかも
egoproさん「おどけでね Sendai.pm」
studio3104さん「Fluentdでコードを書けるOpsになれる話」
@cubicdaiyaさん「ngx_small_light〜Nginxで動的サムネイル生成〜」
- 画像サムネイルをNginxで生成する
- URLを変えるだけでリサイズ、サムネイル
- dw=500、dh=500 のようなパターンに名前を
- 合成素材を用意
- なぜ作ったか
- BOSS「動的生成か、うちもやろう」
- mod_small_lightへの巨大パッチを見て → Nginxでやらない?
- pixiv内のHTTPサーバはだいたいApacheからNiginxに
- nginx_small_light が産まれた
とうどうさん「株式会社ガイアックス」
- 福岡の研究開発拠点
- まさかのRuby
- 予算使い過ぎで東京は予算がない
- プログラミング部
- 朝練、ルートビア、ペアプロ、椅子なげ、Project Euler
- 問題: ノベルティに書いてあります
- CodeIQに投稿するとソースごと公表される
- 不正解でも答えだけでも公表されます
- 仕組み Code IQ→ git → ジェンキンス
- おまちしています!
kan.fushiharaさん「へんなもの」を作ってみた
keigo.tanaka.77さん「AWS Elastic Beanstalk Custom AMI で PSGI Hello World」
ノダイイチロウさん「Wano株式会社」
hiratara「Perlでおねえさんを救った話」
自分のセッションでした。今回は人数も人数なのでいつもと違って自分の好きなことだけを話すのではなく聞き手を意識した内容で話してみました。喜んで下さった方も居たようで、よかったです!
mayumineさん「Perl と人生」
- 去年初めてLTに出て好評だった
- Perlの経験値は上がらなかった
- perlの人生
- Hello Worldの登場 「たかし」
- 「宿題やりなさい」
- while result_of_the_exam
- me->want("Drink")
- while girlfriend->answer()、$wife = $girlfriend
- $anser eq 'Bath'
- wife->childbirth
- sub life { }
- 続きはgithubで
- いいコード書けるよって人はぜひ