Made a presentation 'What is Rack Hijacking API' in Ruby Conf Taiwan 2016 #rubyconftw

はじめに

これは Goodpatch Advent Calendar 2016 - Qiita の 11 日目の記事です

最近転職しまして、11 月から Prott の Backend Engineer として Goodpatch で働いています。

カンファレンスの受付はプライベートなので本業ではありません 😁

はじめての海外カンファレンス

会長こと @yosuke_furukawa が Node interactive Europe 2016 に参加 している様子を Twitter で眺めながらふとつぶやいたところ、数人の海外カンファレンス経験者の方々から背中を押してもらった事がキッカケでした。

余談ですが今日は @yosuke_furukawa の誕生日です。おめでとうございます! 🎂

Rack Hijacking API を題材として選んだのはやはり Rails 5 の ActionCable で内部的に利用されているので興味があったからです。

実を言うと海外旅行も海外カンファレンスも 30 分枠のメインセッションスピーカーも初体験で、正直本気で逃げ出したかったです 😭 (発表は英語で行いました。Thanks for Google translate!)

Rack Hijacking API とは何か?

調べていく中で、ほとんど Rack の SPEC と実装時の pull request に書かれているので知っている方も多いのではないかと思いました。

驚いた事に実装はもう 2013 年に行われていたんですね。その当時から HTTP2 をも見据えていてすごいなと感じました (小並感)

単純に言うと以下のような感じです。

  • HTTP Request / Response の socket を横取りして、socket に対して直接書き込みを行う
  • Request 時点で横取りする Full Hijacking と Response 時に横取りする Partial Hijacking がある
  • socket を横取りするので socket を close する責任がある
  • Full Hijacking では必要な header も自分でつける必要がある

pull request をよく読むとこれは仮の実装であり、rack 2.0 で新しい spec が生まれる事を期待しているというような記述が見受けられます

this is a straw man that addresses this within the confines of the rack 1.x spec. It's not an attempt to build out what I hope a 2.0 spec should be

この API では接続数が増えた時に scale しないという意見も見かけました

The new Rack socket hijacking API | Hacker News

Rack 自体は開発が鈍化しているという噂も聞いていますが、今後どうなっていくのか注目していきたいと思っています。

登壇を終えて

この CM ももう10 年前になってしまったのか 💦

登壇までの間本当に緊張していて、organizer が用意してくれたホテルが会場直結だった事もあり、部屋にこもってプレゼンを見直し、声を出して練習しておりました。

それでもやっぱり本番は緊張してしまって、力が入りすぎているのを感じながら徐々に力を抜きつつ、気がついたら発表が終わっていたという感じです。

嬉しい事に発表後にまつもとさんから労いの言葉をいただいたり、tagomoris さんから発表についてのアドバイスをいただいたり、shyouhei さん、kakutani さんとカンファレンスについての話を出来てホッとするやら嬉しいやら、やってよかったなと思いました。

このカンファレンスに参加できたのは高橋会長に後押ししていただいたのが何よりも大きいです。あらためて感謝の意を表したいと思います。ありがとうございました!

(今日の東京 Ruby 忘年会も行きたかった…)

(スライドだけだと意味がわかりにくいと思います。トークスクリプトばっちり書きましたから 😅 )

反省点の一つとしては、瞬間的に英語を話すのが難しくて海外の方とあまりコミュニケーションを取れなかったのが残念でした。英語もっと頑張ろう

ちょっとだけ観光

帰りの便の関係で皆さんと合流後程なく離脱しましたが、楽しくて後ろ髪をひかれてしまいました。ただもうクタクタで体力的にもきつかったのが本音です 😇

hakobera さんと二人だけ早めに着いてしまって、散策しながら食べた老士林の大餅包小餅は美味しかったなー

4travel.jp

終わりに

また今度ゆっくりと観光したいです!

台湾は日本からも近くて行きやすいし、日本の文化を気に入ってくれている人達が多いようなのでとても居心地が良いと感じました。

(PPAP や 逃げ恥も受けてましたね)

なによりも今回の反省を活かしてまたどこかで発表できたら良いなと思っています。その日のために準備をしておこう!

BigQuery gem に contribute した

はじめに

今日は #bq_sushi tokyo #3 - connpass ですね

🍣は出ないそうですよ(笑)

bigquery を触り始めた

業務上必要があって良くわからないまま BigQuery gem 選択したが、想像以上に機能が足りなくて振り返ってみると結構 pull request していた

最初は慣れない英語でドキドキしていたけれどもなんとかなってしまった。やってみるものだなー

github.com

github.com

github.com

github.com

github.com

最終的には google-api-ruby-client の 0.9.3 対応というかなり大きな変更を送って「さすがにこれは取り込まれないだろう」とおもっていたらあっさり取り込まれて拍子抜けしてしまった

github.com

残念ながら少し bug が残っていて、他の人が fix した pull request を投げてくれているんだけど、別の変更も入っていてちょっと中途半端な印象。どうしたものかな… author もいまいち active ではないし。業務上でも google-api-ruby-client への replace が進んでしまってあまり必要では無くなってしまった感があるし

github.com

ちなみに 0.9.3 対応はまだ rubygems にリリースされていないです

おわりに

1月に部署異動してから新しい事にチャレンジさせてもらった

いろいろと周りに迷惑はかけていると思うけれど、辛抱強くサポートしてもらっていて本当にありがたい

頑張っていかなければ!

2015年の振り返り

はじめに

kysnm.hatenablog.com

今年は書きます!

イベントスタッフ

HTML5 Conference - html5j | Doorkeeper

nodeschool tokyo (東京Node学園 入学式) - connpass

NodeSchool International Day in Tokyo - connpass

次世代 Web カンファレンス - connpass

東京Node学園祭2015 - connpass

Go Conference 2015 Winter - dots. [ドッツ]

コアスタッフとして関わっていたのは 東京Node学園祭2015 と 次世代Webカンファレンス のみで後は当日スタッフでした

次世代Webカンファレンスはいろいろな人と関われて本当に楽しいイベントでした。声をかけてくれた @Jxck_ にはものすごく感謝しています

もうすっかりスタッフが板についてしまって「日本の勉強会を影で支える人」とかいじられたりしていますが、勉強会参加数は昔より減っていて、知り合いがいるような場所にしか顔を出さない傾向にあるかもです

東京Node学園祭2015 や RubyKaigi2015(参加のみ) などで海外の人達と触れる機会も増えてきてますます英語の重要性が高まっているので、来年はもっとコミュニケーション取れるように頑張りたい

今年は本当にコミュニティに関わってきた事がプラスになっていると感じる事が多かったので引き続き出来る限りの事はやっていきたいと思います

ちなみに勉強会参加数は 52(?) 程度でした。週一ペースぐらいですねー

転職

今年の1月に渋谷の某社に転職しました(残念ながら正規ではないです)
僕はあんまり長続きしない方なんですが、今の環境は結構満足していてまだしばらく続けられそうです

優秀な人が多くて有志の社内輪読会はすごく勉強になりました。また機会があれば参加したいです

kysnm.hatenablog.com

kysnm.hatenablog.com

来年からは自分の希望に近い条件下で今より少し業務的には難しくなりそうなんですが頑張って食いついていこうと思っています

LT

なんと今年は3回もやっていた!(え、少ない?はい、そうですね💦)

来年も少しづつやれたら良いなー kysnm.hatenablog.com

kysnm.hatenablog.com

kysnm.hatenablog.com

おわりに

今年関わったみなさまには感謝しております。一年間本当にどうもありがとうございました!

また来年もよろしくお願いいたします!!

Rails でも Server push に挑戦したい!

はじめに

qiita.com

このエントリは http2 Advent Calendar 2015 の 23 日目のエントリです

RubyKaigi の発表にて

@tenderlove による http2 関連の発表がありました。

Request and Response - RubyKaigi 2015

以前より彼が http2 を実装しているのは知っていたので、

kysnm.hatenablog.com

お願いしてサンプルアプリを教えてもらいました

途中経過

残念ながらまだサーバを起動することすら出来ません…

github.com

せっかくなので冬休みも利用して、気長に取り組んでいきたいと思います!

おわりに

アドベントカレンダーが空いていたので急遽書いてみました。
中途半端な状態ですが、こういう試みもあるんだなと知っていただければ幸いです

innodb_ruby のご紹介

はじめに

qiita.com

このエントリは Ruby Advent Calendar 2015 の 23 日目のエントリです

きっかけ

業務の関係でふと innodb の index の構造について詳しく知りたいと思って調べていたところ以下のエントリーを発見しました

blog.jcole.us

innodb_ruby はとても面白そうなのにマニアックすぎるのか、国内ではあまり紹介されていないのをもったいなく思い、ご紹介したいと思いました。

ちなみに RubyKaigi 2015 の LT の CFP にもこのネタで出して落選しましたw

注意事項

ざっくり試してみたところ以下の機能は今のところ壊れているようです

github.com

あとこの機能はドキュメントがないので使いこなすの難しそう

github.com

環境構築

以下のように faker 等を利用して dummy data を作る rake task 等を用意して

github.com

index は手動で貼りました (実験用なので適当です PERSON BOWING DEEPLY)

gist.github.com

主な機能

※ 理解が足らない部分があるかと思いますのでお気づきの点がございましたらご指摘いただけると幸いです

こちらに書かれているような機能があります

blog.jcole.us

ざっくりと記事と同じ事を自分で作った dummy data に適用してみました (mysql の data は手元にシンボリックリンクを貼りました。homebrew で入れた場合 /usr/local/var/mysql 以下にあるはずです)

gist.github.com

ファイルにリダイレクトしたものはこちらです (結構ファイルサイズが大きいので注意)

page-dump-without-describer.txt · GitHub

page-dump-with-primary-describer.txt · GitHub

page-dump-with-state-describer.txt · GitHub

index-recurse-with-primary-describer.txt · GitHub

page-dump の結果とか decode できると良いんだけどな…

おわりに

試してみた感想としてはやはり難しく、ドキュメントが足りていない気がしました

この辺のエントリーも面白そうなのでもう少し理解できるようになると良いなー

blog.jcole.us

この記事を見て innodb_ruby に興味を持ってくださった方がいろいろ試してくださってノウハウが増えると良いなと思います