読者です 読者をやめる 読者になる 読者になる

NodeConf Adventure 2015 に行ってきました。(三日目、四日目に起きたこと)

さて、三日目と四日目に起きたことを書いていくよ!

三日目も同様にアンカンファレンス形式でスタート

f:id:yosuke_furukawa:20150613094556j:plain

ホワイトボード見てもらって分かるかもしれないけど、 Diversity, Documentation, JS Modules, Streams, FrontEnd Packaging, Error Handling などが三日目の議題だった。

JS Modules の話

bower 使ったり jspm 使ったり、 はたまた npm + browserify 使ったりと戦国時代状態のフロントのパッケージモジュールに何使うべきかっていうディスカッション。まだみんないろいろ試してる感じだったけど、 npm + browserify と monolithic な JS library の相性が悪くて、どうするべきかっていう話が一番面白かった。

というわけで、全体のエコシステムは npm + browserify とか npm + jspm に向きつつも、 jQuery ライクな monolithic な ライブラリーはやめて unix philosophy な小さいライブラリを作っていくのが常套手段という感じだった。

ただ誰も WebComponents の話をしてなくて、 ES6 modules とか browserify の話は出てくるけど、 WebComponents で ページのコンポーネントを作るという考え方も本来はあるはず。CSSもそのパッケージモジュールに載せたいっていう話が多かったけど、NodeConfでは誰もWebComponents の話はしてなかったのが気になった。

Error ハンドリング

Node.js のエラーハンドリングという普遍的なテーマについての議論、 domains についての話と zone っていう strongloop 製のライブラリの紹介がメインだった。domains があまり使えないっていう話は mozaic.fm でもしたけど、ここでも同じ議論。

Zoneの話、面白くて色々見てたら Dart にも Angular にも同様の機能があったりして、ちゃんとやってみてもいいかもって思った。

中身の構造を見てみると domain とすごくコンセプトは似ているんだけど、全く違った実装で作られていて、 zone によって限定された範囲をトラップするためにsetImmediate/setTimeout を拡張したり割りと global を拡張してるので、すごい力技で実装されていた(この力技のところが逆に受け入れがたい印象も受けた)。

あと、『そもそも例外が上がった時点で終わりだろ、本当にやばい時以外、例外上げるべきじゃない』っていう議論もあった。

Interview with @bad_at_math

DeNA SF に転籍した bad_at_math さんこと、篠崎さんとエラー/例外の話をした(日本語)。

俺: 「例外が上がった時点で終わりっていうのってどうなんですかね、ちょっとそうも行かない気が」
BAM:「まぁでもある程度わかるかなぁ、本当にやばい時じゃないとそういう時に陥らないように設計してる」
俺:「例えばmysql へのアクセスでたまたま接続不良で例外上がったりしますよね、そういう時どうするんですか」
BAM:「例外の中にも種類があって、絶対復旧不可能な奴とリトライで対処可能な奴でいくつか種類がある。この中でも絶対復旧不可能な奴は本当の例外として扱うべきで、こういう時はアプリケーションのプロセスが生きててもしょうがないからそういう例外が上がった時点で終わりっていうのは分かる。」
BAM:「一方で一時的な接続不良みたいな奴はリトライしたら大丈夫っていうパターンが多いからそういうのはプロセス終わりにしない、ちゃんとMySQL で言うと戻り値のエラーの種類を見分けてどうするのか決めてる。」
※ エラーの種類一覧 http://dev.mysql.com/doc/refman/5.6/en/error-types.html
俺:「なるほど、ミドルウェアのドライバーから上がった例外をちゃんと適切にハンドリングできているの初めて知ったかもしれないです。domainとかは使ってます?」
BAM:「domainかなり助けられるケースが少ないんだよね。ほぼほぼ使ってない」

最後に (Ex含む)DeNA チームでパシャリ
f:id:yosuke_furukawa:20150703021856p:plain

Diversity の話

この話が NodeConf 行ってきた中で一番面白かった Diversity の話。
Diversity っていうのは "多様性" っていう意味で、どうやって多様性を認める文化にするかっていうコミュニティ運営の話だった。

技術的な話というよりは本当に運営の話で、OSSというかインターネットのコミュニケーションは相手の顔が見えないとちょっと語気を強めに言う傾向にあって、そういう事がこのコミュニティの中であってはいけないし、どんな人でも発言できるコントリビュートを表明できる必要があるという話だった。

初心者も何年も関わっている人もフラットで平等に扱われるべきだし、間違っても個人の尊厳を深く傷つけるような行動はあってはならない。一人の意見を尊重しようという話。

詳しくはここにまとめてくれている人がいるので詳細を知りたい人は読んでみて欲しい。

Challenging Diversity at NodeConf | The True Entrepreneur Corps


簡単に説明すると、

1. 全員が共通して持っている弱みを把握しよう

他人を犠牲にしてまで自己を過剰に防衛する事をやめよう、という話。
実行可能な批判は受け入れるべきだし、その批判に対して過剰に反応して防衛したり攻撃するのは避けるべき。
常にインプットをコントリビューションの一部として好意的に捉えて維持するのは難しいんだけども、個人の考えを尊重するべきだし、間違っても人のプライドを傷つけるような事があってはいけない。

2. Collaboration > Competition

競争よりも協力
必ずしも競争が悪ではない、健全な競争は受け入れた方がいい。でも競争が問題をストップさせる事もある、そういう時は議論の視点を元に戻して考えなおすべきだ、という話だった。

3. 模範によって導く

npm には guys jar っていう制度がある。 "Guys" っていう言葉を男女混合のグループを指す意味で使ったら $1 払って jar に入れるっていう制度だ。
(これは opt-in policy なので強制じゃなくて任意参加らしい)

コミュニティのリーダーは率先してそういう模範を示して欲しいという事だ。 guys jar は単なる罰ゲームじゃなくて、率先してそういう事を表明する事で gender の差をちゃんと自覚してみんなを導くという行為。

こういうのは Node にもあってもいいんじゃないかという話が出ていた。
結果として、ドキュメントのための WG ができて、そこでドキュメントに記述していい言葉が決められることになった。

以下がちょっとした例。
ユーザーを指すときの言葉として使っていいものと使っちゃいけないものの例。

OK: "they", "their", "them", "folks", "people", "developers", "cats"
NOT OK: "his", "hers", "him", "her", "guys", "dudes".

github.com

4. 「Ouch」っていう発言を信頼しよう

コミュニティのメンバーが自分の世界とは違った問題を報告したとする、そういう時に無視するべきではない。

例えば npm ユーザーはたまに Windows マシンで npm を使うことの難しさに不平不満を言う事がある。
Windows の問題はしばしば文化的なジョークとして捉えられる事がある。だからこういう Windows の問題は無視されやすい。でもそういうのは起きるべきじゃない。そういうのがずっと積み重なるといつかコミュニティは廃れていく。

npm ではこういう Windows の問題は出来る限り対応しているし、一般的なルールとして、聞く => 聴く => 反応する の順で発言は対応するべきだという話だった。

こういう話が行われているメタなカンファレンスを僕は知らなかったし、この議論はすごくおもしろかった。
僕はローカルコミュニティのリーダーをやって一年になるわけだけど、こういう目線の話をちゃんと自覚して考えたことがなかった。 Diversity の話はちゃんと記憶にとどめて活動していこうと思った。

Performance Monitor Session

パフォーマンスモニタリングのワークショップで、メモリリークの特定とか、 CPU 100% になったときにどこが悪いのかを見つける方法の話だった。

dkhan の話は具体例も多くて面白かったけど、途中から StrongLoop の人が俺たちのやり方紹介するよって言い出して解説が始まったのがすごく面白かった。


Tessel Hack

tessel のワークショップがあったのでそこに参加して色々やってきた。

Tessel 本当に素晴らしくて、レゴブロックみたいにスロットに何か差しこむだけで色んなものを動かすことができて本当に面白かった。
カメラで撮影するだけだったらサクッとできたし、 @maxogden と話した時に Max は自転車に取り付けてずっと風景を撮影させてるとか言ってて、むちゃくちゃ面白そうだった。

この辺は勉強会でも取り扱ってもいいかもなぁと思った。

f:id:yosuke_furukawa:20150705030921p:plain

Tessel, Performance Monitoring の人達とパシャリ

最後のキャンプ

最後のキャンプで NodeFest の話をしてきた。
『NodeFest は 11/7(土) に実施する予定で、場所は渋谷、もしも NodeConf の人達が来てくれたら寿司をおごるよ』って言ったら
みんなが「ワー!!」って拍手してくれた。


本当に色々キャンプとしても面白かったし、色んな話ができてめっちゃ楽しかった。
来年も行けるといいなぁ。