nodeconf.eu 3日目 (mad science, leveldb, strongloop)

「英語すごいできるんですね。」みたいなコメントが有ったんですが、できないです。
相手が伝えている情報のうち、分かる単語から情報を拾って、確認するっていう、3 way handshake みたいな確認を逐一しながら補完しているだけです。要は気合です気合。

向こうの人は優しくて、こっちがネイティブじゃないんだってわかるとゆっくり喋ってくれたり簡単な言葉に直してくれるので楽ですね。

さてさて最終日も濃かったnodeconf.euの話をしていきます。

mad science act track

このtrackでは、今までの「node.jsの運用」とか「microservicesで今後のnode.jsがどうこう」というよりもnode.jsのcutting edgeを走るsubstack, feross, dominic tarr, mikolaの話を聞いて彼らが普段何を考えてるのか、どんなものを作っているのか聞くトラック。彼らはNode.jsで普通のサーバーを作るような人たちじゃなくて、誤解を恐れずに言うと、変態的な事(普通はやらない事)をNode.jsで実現しちゃう人たち。マッドサイエンスってことでみんな白衣着ながら発表してた。

mad scientist act by @substack

substackが語る、streamによってレゴブロックみたいに組み合わせて全体のアプリケーションを作ることができるという話。実例ということでライブコーディングしてくれてて、calendarを出すコマンドラインツールを作ってそれをansi-color-streamを使って色付けしてくれたり、簡単なhello worldのwebアプリをecstaticlevelroutesを使ってRESTっぽいアプリに仕上げたりしていた。

最終的には、それらを組み合わせてjenkinsみたいなリモートバッチ処理サーバーをbatchdb-shellbatchdb-web-apibatchdb-web-uiを使って実現していた。オンラインデモでここまでやってくれてすごかった。

WebRTC Mad Science by @feross

これもかなりすごかった。WebRTCを使って変態的な事をする話。話は2つあって、

1. WebRTCでP2Ptorrentでファイル共有を実現しようとしている話 (WebTorrent)
2. WebRTCでP2Pの仕組みを利用してn対nでホワイトボード共有する話

BitTorrentのネットワークとWebTorrentのネットワークを変換するトランスレータがあればBitTorrentとWebTorrentを結びつけることができる。instant.ioを使ってそういうP2Pをウェブでも実現しようとしているという話だった。

動画でホワイトボード共有しているところは撮ったので見てみてください。


Realtime multiplayer games on the Web by @MikolaLysenko

リアルタイムゲームを作る時に気をつけなきゃいけないことの話。作っているリアルタイムゲームの質が違うんだと思うけど、かなり高度な事を語っていて、知らない話が多かった。

IoT track

node.jsの醍醐味の一つであるハードウェアトラック。
ロボットを作る話とかが多くて、やっぱりデモ映えしててよかった。

みんなlittleBitsに夢中で僕もlittleBits触らせてもらったけどすごく面白かった。

一番ウケたのはnodecopterをダンス・ダンス・レボリューションのマットでGangnum styleにあわせて操作するっていうやつ。ちょっとこれは感動するくらいすごかった。デモ動画を貼っておくので見てみてください。


loopback workshop

StrongLoopが作ってるサーバーサイド、クライアントサイドの統合フレームワークであるloopbackのworkshop。




leveldb workshop

一昔前はmongodbがnode.jsのデータストアとして使われやすかったんですけど、最近はleveldbでやることが多くなっているようで、workshop開催してた。

所謂nodeschool形式でワークショップ。levelmeupっていうツール使ってみんなチュートリアルを実施してた。

$ npm install levelmeup -g
$ levelmeup

(loopbackの方にばかり注力してて、こっち聞き忘れてはじめの方までしかできなかった。。)

懇親会にて

TJ Fontaine へのインタビュー ver.2 (node.js gate keeper)

Q. Node.js のロードマップを知りたい。 v1.0が出た後どうするの?
A. まずいくつか整理しないといけなくて、v1.0が出るまでは全てを安定させる必要があるなと思ってる。あと、v2.0に向けてはもっとbreaking changesもやろうと思う。特に標準化への対応をしたいと思ってて、EcmaScript6の標準とかを取り入れていきたいと思ってるよ。

Q. おお、たとえばCommonJSスタイルからES6のモジュールロードスタイルに変更しようと思ってるの?
A. それは当然の疑問だろうけど、難しい問題が多そうだと思ってる。既にあるライブラリがCommonJSで書かれてるから完全に移行は難しいだろうね。ちょっと整理が必要だと思ってるよ。

Q. あと、どこかでdomainsをdeprecatedにしたいって言ってたよね?
A. そう。domainとclusterはどこかでdeprecatedにしたいと思ってる。

Q. え!clusterも?
A. clusterの場合はAPIが良くないと思ってるから、APIをdeprecatedにして、書き換えるだけで、完全に消すことはしないけどね。

Q. domainsはどう思うの?
A. domainは消せると思ってる。解決してる問題が少ないし、本番で使っている人を知らないから消せるなら消したい。

Q. 重ねていうけど、日本に来れたら調整するから来てよ。11/15ね。
A. ああ、行きたいんだけどスケジュールがつかめないんだよね。ホントごめん。

Q. まぁでも会えて良かったよ。11月じゃなくても開くから来れる時があったら教えて!
A. sure, sure!


bajtosへのインタビュー(loopbackのコミッター)

Q. Loopbackめっちゃ良かった。これは日本でも沢山の人に教えたい。
A. Thanks!

Q. StrongLoopってこの前expressのメンテナーになったよね。
A. そうそう。

Q. expressを今後どうしていこうと思ってる?
A. 基本的にはあまり変える気はないけど、APIに整理が必要だと思ってるのと、もっとドキュメントを書きたいと思ってるから当面は内部のリファクタリングとドキュメントの整理かな。

Q. koaとかはどう思ってるの?
A. koaは良いプロダクトだと思ってるから、expressに学べる所があれば持ってこようと思ってるよ。

Q. ところでloopbackは今後どうするの?これってexpress, yeoman, angularをすごく効率的に使えるようにした良いプロダクトだと思ってるんだけど、これ以上に足す所ある?
A. もっとクライアントを増やしたくて、angularだけじゃなくて他のものも使えるようにしたいと思ってるし、あとIsomorphicなデザインにしたいと思ってるよ。

Q. それはおもしろい!僕はIsomorphicにすごく注目してて、airbnbが作ってるRendr以外の新しいやつが出てきたら多分使うよ。
A. COOL! 日本でもloopback使ってくれる人増えるの期待してるよ。


mikolaへのインタビュー

Q. リアルタイムゲーム作ってるんだね。実は僕も作ってるんだよ。僕たちは2つのアプローチで今はリアルタイムゲームを作ってて、一つはSocket.IOを使ってるんだ。Socket.IOでwsが繋がらなかったらlong pollingにするようにしてるんだけど、mikolaの奴はpure websocketで作ってたよね?Socket.IOとかを使わなかったのは何故?
A. 僕のゲームはシューティングゲームみたいなアクションが多くてリアルタイム性が強いやつだからlong pollingだと向かないんだよね。Socket.IOとかはchatみたいなやつなら向くと思うんだけど本格的なリアルタイムゲームを作ろうと思ったらlong pollingへのfallbackは不要だよね。

Q. なるほど。もう一個アプローチがあって、サーバーでロジックを全部計算して、クライアントは表示するだけでほとんどロジックを持たない方法を使ってて、Socket.IOがポケモンでやってたようなやり方でゲームを作ってるんだけどどう思うかな?
A. うーん、レイテンシーが問題かなぁ。もしもレイテンシーがそんなにないなら良さそうだね。

Q. ちなみにWebRTCとかはどう思う?
A. 新しいプロトコルとして注目してるよ。今はWebGL & WebRTCに注目しててHTML5でゲーム作るなら今後必要になるだろうなと思ってる。

Q. これはビジネス的な話なんだけど、HTML5ゲームってmikolaの国では流行ってる?日本ってあまり流行ってなくて、みんなネイティブのiOSアプリとかでゲームやってるんだけど。
A. 実はあんまり需要があるのかどうかはよく知らないんだよね。僕はまだ学生(Ph.D)で、アカデミックな研究として作っているだけだから。

Q. (mikola) ちなみに流行ってないのはどういう理由なの?
A. (yosuke_furukawa)うーん、これは僕もはっきりした理由はわかってないんだけど、やっぱりちょっと遅いからじゃないかなぁ。ブラウザではそこまでゲームやらないって人も多いし。
A. (mikola) そしたらWebGLがやっぱり重要なキーになりそうだね。WebGLではグラフィック操作は速くなるし。

ちなみになんでナプキン載せてるかって言うと、Dominic Tarrが何故かナプキンを頭に巻き始めてから急にみんなに流行ったのです。

Dominic Tarrへのインタビュー (stream master)

Q. dominic、この前リポジトリ見たら、変なバージョニング提案してたよね?確かSentimental Versioningだっけ?あれ面白いね。
A. it's just joke! hahaha!

Q. バージョニングの問題どう思う?
A. まぁSemantic Versioningは考えなおすフェーズに来てるし、実際Isaacsも考え直し始めてるんじゃないかな。

(あんまりしゃべれなかった。。。)

ちなみにdominic tarrはマジでイケメンだった。Guilleも相当イケメンだけど、方向性が違うイケメンってかんじだ。

Paul (V8, IRHydra committer)

Q. (DartのロゴがMacについてたから) おおDartだ!Dartやってるの?
A. ああやってるよ!IRHydraやってるよ。

Q. おお!IRHydraすごく熱いプロダクトだと思っているんだけど、実はよく知らないんだよね。そもそもIRHydraってどういう事ができるの?
A. IRHydraはv8がやってる最適化を可視化して、どこで問題が起きてるのか特定してくれるんだ。@mraleph (v8の内部構造に詳しすぎる神) が作ってるんだよ。

Q. IRHydraってなんでDartで書かれてるの?
A. Dartって元々V8を作ってたチームが作ってるから、内部構造詳しい人(@mralephなど)が多いんだよね。

Q. IRHydraすごそう!もっと知りたいんだけど、デモサイトだけだとどう見たらいいのか分からなかったんだよね。。
A. (paul) 僕がまとめた資料あるんだけど、あんまり詳しくないけどいる?
A. (yosuke_furukawa) もちろん!!いるいる!!日本のエンジニアのおみやげにする!
A. (paul) ちなみにmralephは日本のアニメ好きだから呼んだら来るんじゃないかな (@mralephはConstさんっぽい人らしい)

この後、ちょっとだけIRHydraのデモしてくれたんだけど、IRHydraの何が良いのか知るためにはv8の内部構造に多少詳しくないと無理ゲーっぽい感じだった。

詳しい資料をもらえたので貼っておきます。

Understanding V8 and JIT compilation basics - Google スライド


かいつまんで理解した内容を話すと

  • v8の最適化はものすごく高度な処理
  • 関数呼び出しを実行している間に型が決定されるとその型に合わせて最適なメモリ処理がなされる
  • 例えば整数型と文字列型だと最適なメモリ配置が違う
  • 関数が整数も文字列も受け付けるような関数だと最適化がうまく働かない
  • 一番悪いのはv8が整数で関数呼び出しを最適化してしまった後で文字列が来たりするとその時点で最適化やり直しになってしまい、コストがかかる
  • IRHydraはこういう最適化が働かない箇所を可視化して教えてくれる。すごい!

Cian (nodeconf.eu organizer)

Q. cian、最後の話すごく良かった。ほんとうに来てよかったよ。貴方を尊敬するし、自分のカンファレンスにも参考にしたいと思う。
A. ありがとう、本当来てくれて嬉しいよ。もしも何か困ったことあったら教えてくれ、いつでもアドバイスするよ。

Q. ちなみに今までやってて一番辛かったのってどんなこと?
A. 一番大変だったのは一番最初のnodeconf.euかなー。当時はnode dublinっていう名前だったんだけど、node.js自身がまだ無名だったし、そんなにヨーロッパですら有名じゃなくてスポンサーとかも集めるの大変だった。後はスピーカーも誰呼んでいいかわからなかったし。いまはだいぶ楽になったよ。

Q. 僕が日本語でまとめているから、日本のデベロッパーがすごくnodeconf.euに興味持ってるよ。来年はもっとたくさん来るかも。
A. (ハイタッチしながら)やったー!!日本人にはもっと来てほしい!!

Q. 来年もまた絶対来るよ!
A. ☆-(ノ゚Д゚)八(゚Д゚ )ノイエーイ (再びハイタッチ)


最終日なので総括

mikealがnodeconfを始めたのは2010年。そこから今まで4年間、node.jsはサーバーサイドもフロントサイドツールもすごく発展してきていて、この発展にはコミュニティを盛り上げてるmikealやcianの活躍が根本にあることを忘れちゃいけないと思った。

コミュニティが活性化することでそれを採用する企業が増えて、さらに開発者を生み、イノベーションが生まれて、発表者・参加者が増えるっていう好循環を生んでいると思う。実際にCianがnode dublinを始めたのは2011年頃ということだけど、その頃のアイルランドでは誰も知らなかったNode.jsが、そこからCianのおかげでアイルランドイングランド、イタリア、ドイツ、スウェーデンとかの周辺国でもnode.jsが盛んになってきている。

こういう好循環はmesoさんとかJxckとかその他スタッフがずっとやっていたおかげで、日本でも少しずつ起きている。一時期ほどは落ち着きをみせてるとは言っても、二ヶ月に一度Node.jsでトークしてくれる人たちは増えてきているし、Qiitaとかブログの記事でも色んな情報がNode.jsの話を通して増えてきていると思う。

ただこういう好循環がまだ足りていないことは自覚していて、もっと好循環は起こしていかなきゃいけないし、そのためには僕がこういう世界のNode.jsのコミュニティに積極的に顔を売っていって情報を仕入れて日本と世界の情報格差を減らしていけると良いと思う。

あと今回の出張で得たカンファレンスの運用方法は次の東京Node学園祭でも活かそうと思っているので、期待してください。

さいごに、今回のnodeconf.euの出張報告会はどこかでやりたいと思っていますが、弊社の会場、9月はもう勉強会するスケジュール的余裕が無いので、どこか貸しても良いという場所があったら教えてください!

たくさん友達が作れてよかった。みんなも世界のカンファレンスには参加すると良いと思います!