東京node学園に初登園した話 #tng10

この前HTTP/2.0勉強会に参加した時iij-http2を実装して相互接続試験に持って行った大津さんが「今度のnode学園で実装の苦労話を話します」って言ってたので参加登録した。
僕node全く書かないけどね。

イベントURL→ http://connpass.com/event/3034/
togatter→ http://togetter.com/li/552333

今回はUstが公開されているので、詳しい内容はそれを見れば良いだろう。
自分のメモ程度に報告エントリを記す。

Node の HTTP/2.0 モジュール iij-http2 の実装苦労話(@jovi0608さん)

slidshare→ http://www.slideshare.net/shigeki_ohtsu/iij-http2-25435309

Ust→ http://www.ustream.tv/recorded/37601001

今回大津さんが実装したコードは、テストの充実などがまだのためまだ公開していないみたい。
処理が見たいので楽しみにしています。
バイナリプロトコルを見る処理をどのように実装できるかというテーマが重要で、nodeを採用したのもHTTP2.0独自のバイナリプロトコルを処理する方法があるから。
バイナリの扱いをどのように行えるかということは、実装言語の選定に影響を及ぼすようだ。
HTTP/2.0の前提知識はIIJの記事で得られる、と聞いて見たら大津さんが書いていた。
現在インターネットを流れる通信の半分くらいはSPDY化されているらしく、ここでSPDY/QUICやHTTP/2.0のビッグウェーブに乗らないと時代に取り残されるだろう。
deaft4の日本語訳も公開されたらしいので、仕様読み回とかやっても面白いかも。
実装にあたっては、visitorパターンの考え方を流用して全体を設計したらしい。デザパタを学んで久しく、僕は忘れてしまっていたのでぱっとは理解できなかった。

実装の目標はHelloworldをhttp2ですることであり、そのためにはサーバだけでなくクライアントでもHTTP/2.0に対応した実装を行う必要があるが、これも大変だったらしい。
最終的な確認は、このライブラリをhttp1.1と同じくhelloworldスクリプトで呼んでchromeブラウザで行うが、このchromeもhttp2.0対応のカスタムビルドらしいのでハードル高い...

新しいテスト用ライブラリのご提案(仮)(@t_wadaさん)

Ust→ http://www.ustream.tv/recorded/37601473

・assertモジュールだと簡単にかけるけど落ちた時にどこが問題かわかりにくい
・書きやすさと失敗時の情報量がどっちも大事
→インタフェースに制約を与える:末尾のメッセージを強制

・xunitは引数を間違いやすく、落ちるまで悪いかどうかがわからない

ではRSpecはどうか。
・xunitのような間違った書き用のないインタフェース
・xunitよりは情報量が少し多い
・しかし新しく覚えることが多い:失敗時の情報を多くするには、多くのめドッドを使いこなさなければならない

なら、asserの情報量を多くすればいい!
→power-assert
esprima、escodegen: JSのパーサ・アンパーサを使って生成対象のコードに介入!
・実行時のコンテキストを引っ張ってくる

原理よく分からなかったけどすごいなとはおもた。

感想

懇親会では大津さんと直接お話しができて感激した。
ほぼ発表通りの流れで実装を行っていったらしく、3週間フルコミットだったそうなので「実装はハードル超高いな」と思ったけど、仕様の読み込みに時間を多く使ったみたい。
何ヶ月かかかっても、HTTP/2.0の正式な仕様が決まるまでに一度じっくり仕様読みとかに取り組みたいな。