社内輪読会で二回目の発表

まあこの tweet のままなんですが、やっぱりちょっと失敗してしまった感がある。 ただ反省して一応対策して挑んだので学びがあったのが良かった。

正直自分にとってはかなり難しい内容なんだけど確実に前回より理解できるようになっているのが実感できた。 その上でもっと読み込んでソースコードももう少し読みこめば良かったとかフローチャートかアクティビティ図で表現する方法に気づきたかったなという事も感じた。

理解度が曖昧だったのでその場でフワフワとこれで良いのかという不安にかられてしまったりした。 優秀な若い人達と一緒に学べることがとても幸せなんだけど、同時に彼らは自分の発表に自身を持って挑んでいるんだろうか、それともごまかしてうまく切り抜けていることもあるんだろうかという事を思ったりもした。

この後知人からこうすると良いよというアドバイスももらってありがたかったなー。 感謝してます!!!

TokyuRuby会議09 #tqrk09 に初参加

抽選 LT はずれました

追記:アクセプト LT で発表しました

珍しく話せるネタがありそうだったので、抽選 LT が怖くて今まで躊躇していた TokyuRuby会議09 に参加してみました。

最近 @tenderlove が http2 に興味を持っているらしく、彼の gist が興味深かったのでそれを話そうと思っていました。

せっかくなので用意したスライドを公開したいと思います。

ちなみにまだ俺の YAPC が終わってないのですが、火曜日に社内輪読会の担当が回ってくるのでその資料を作ったら YAPC のエントリーを書く (決意

社内の輪読会に参加して発表した

輪読のお題はこちら

O'Reilly Japan - 詳解 Linuxカーネル 第3版

「5章 カーネルの同期処理」を担当しました

自分にとってはかなり難易度高めです

振り返り

Problem

  • 資料がまとめきれず時間内に説明し終えることが出来なかった

    • もう少し早めに準備すべきだった

    • 自分の言葉で表現できなかったので説明がふらふらしてしまった

    • もう一度読みなおして再構成する余裕があれば良かったかも

Keep

  • 輪読会の参加者のレベルが高く有意義な時間を過ごせている

    • 逆に自分の不甲斐なさが不安になるけど「一番の下手くそ」になれる環境は貴重だ

Try

  • とはいえ発表するとなると理解度が上がるので次回も自分なりにまとめておきたい

    • 読むのにだいぶ時間がかかるのが難点かなー

この輪読会を企画していただいた事、参加させていただいた事に感謝 (`・ω・´)ゞ

#http2study で libh2o の LT しました

実は初めての LT だったりします。

お聞き苦しい点があったかと思いますがご容赦ください。

http2study.connpass.com

スライドだけだとなんのこっちゃですが、h2o ドキュメント無いけど examples を見て xcodeデバッグしつつ頑張ればいろいろ出来そう ってなことを伝えたかった感じです。

だいたい include にある関数が使えると思われるのでいろいろやって みると楽しそうですよ!

追記:

初めての Ruby C 拡張だし、gem 書くのも初めてだったりします (汗

あと最後の方のスライドで(/ω・\)チラッと触れていますが、今日リリースされた h2o 1.2.0 から openssl から LibreSSL に変更されてバンドルされるようになったのでコンパイルがより手軽になっているようです。

自分が作った Ruby の C 拡張、別環境に落としてきたらうまく動かない…

picohttpparser の addon を書いてみた

はじめに

このエントリーは Node.js Advent Calendar 2014 - Qiitah2o Advent Calendar 2014 - Qiita の 21 日目の記事です。

現時点の node.js の安定版は v0.10.34、開発版は v0.11.14 で、v8 のバージョンはそれぞれ 3.14.5、3.26.33 です。 nan (Native Abstractions for Node.js) のバージョンは 1.4.1 です。

Motivation

以前も Node.js の http_parser の実装を追ってみたことがあって興味があったし、HTTP/2 を追うことでやはり parser に触れてきました。自分は普段は Rails のアプリケーションエンジニアをやっているので Ruby にも興味があります。そして以前は Perl も書いていました。なので @kazuho さんの作られた picohttpparser については耳にしていましたし、h2o で使われているのも知っていました。そんな中 Perl コミュニティで有名な @kazeburo さんが Ruby の C 拡張として pico_http_parser をリリースされました。前々から Node.js の addon は書いてみたかったので、この機会に Ruby の C 拡張の仕組みに触れつつ、picohttpparser の理解を深めるチャンスだと思いやってみました。

What's hard?

ほとんど @kazeburo さんの実装をそのまま使っていて、一部 Node.js の作法に合わせる形で実装しました。普段 C/C++ は書かないのでちょっとしたところでつまづきやすかったです。また nan が v8 のバージョン間の差異を埋めてくれるんですが、きちんと理解して使っていないのでトライアンドエラーで探り探りでした。結果としてまだ開発版での build が成功していないという体たらくです、すいません。

v8 のドキュメントは聞いた話だとソースコードから doxygen で生成するしかないとのことでした。doxygen をあまり使ったことがないのでドキュメントの生成の仕方がよくわからず、Eclipse でやってみたりしたんですがどうも狙ったバージョンのリファレンスが生成出来ず、現時点でバージョン間の差異をきちんと把握することが出来ていません。この辺詳しい方がいらっしゃったらぜひ教えていただきたいです。

またデバッグMac 上で行っていて、この Mac は半年くらい前に乗り換えたばかりで gdb の cert の設定 OS XでGDBを使う(ためにコード署名をする) - Qiita 等をするのが面倒だったで lldb を使っていました。gdb でどうかはわかりませんが、lldb の p、po では v8::String をうまく見ることが出来ずはかどりませんでした。この辺も詳しい方教えてください!

おわりに

というわけで一応 github に公開していますが、勉強がてら書いてみたものなので npm にリリースする予定はありません。また出来れば C++ で書きなおしたり、引数に callback を渡すスタイルを検討したりしてみたいと思ったので時間がある時にやれたら良いなーと思っています。まだ multi line のリクエストもうまく動かせていないのでそのへんのデバッグもしないとなー。

kysnm/node-pico-http-parser · GitHub

謝辞

picohttpparser の作者の @kazuho さん、実装を参考にさせていただいた @kazeburo さんに感謝いたします。ありがとうございました!