quic のはじめ方

ご指摘をいただいたので追記 2016-12-23 20:55

手元で試してみましたが、たしかにつながりました 🙌

ただ以下にも書きましたが Chromium は fetch してくるのに時間がかかる上、compile もそれなりに時間がかかります

goquic の verifier はこの辺かな?

goquic/proof_verifier.go at master · devsisters/goquic · GitHub

prot-quic は Linux じゃないと動かないようです

少なくとも手元の Macbook Pro では compile に至りませんでした

Installing build deps and syncing with Chromium repository...
ERROR: lsb_release not found in $PATH
done.

github.com

追記 2016-12-25 22:50

prot-quic が Linux のみサポートである事は README に書いてありました

iOS がサポートされたら Mac でも compile できるようになるかな?

Currently, the only supported platform is Linux (and the only tested version is Google's Ubuntu clone) but Windows and iOS should be coming soon

proto-quic/README.md at master · google/proto-quic · GitHub

はじめに

この記事は http2 Advent Calendar 2016 - Qiita の 22 日目です。

quic のはじめ方

現時点では以下の 2 つがあるようです

  • chromium の standalone test server and client
  • goquic の example

お手軽なのは goquic の方なのでそちらを紹介します

chromium だとソースコードを取ってくる時点でだいぶ時間がかってしまいます

chromium にチャレンジしてみたい方はこの辺を見ると良いと思います

www.chromium.org

www.chromium.org

goquic

github.com

README.md の通りなんですが、以下の手順で build します

go get ではなく、git clone した場合は git submodule init && git submodule update が必要なのでご注意を

この辺 で教えてくれるので実は忘れていても大丈夫

$ go get -u -d github.com/devsisters/goquic
$ cd $GOPATH/src/github.com/devsisters/goquic

$ ./build_libs.sh # (for debug build)
$ ## GOQUIC_BUILD=Release ./build_libs.sh # (for release build)

$ go build $GOPATH/src/github.com/devsisters/goquic/example/server.go
$ go build $GOPATH/src/github.com/devsisters/goquic/example/client.go

go build を実行したディレクトリ直下に serverclient という実行ファイルができています

server

server をそのまま実行すると以下のようなエラーになります

./server
2016/12/22 02:03:37 QUIC doesn't support non-encrypted mode anymore. Please provide -cert and -key option!

help があるので確認してみましょう

./server --help
Usage of ./server:
  -addr string
        TCP/UDP listen address (default "0.0.0.0")
  -cert string
        Certificate file (PEM), will use encrypted QUIC and SSL when provided
  -key string
        Private key file (PEM), will use encrypted QUIC and SSL when provided
  -loglevel int
        Log level (default -1)
  -n int
        Number of concurrent quic dispatchers (default 1)
  -port int
        TCP/UDP port number to listen (default 8080)
  -quic_only
        Use QUIC Only
  -root string
        Root of path to serve under https://127.0.0.1/files/ (default "/tmp")
  -scfg string
        Server config JSON file. If not provided, new one will be generated
  -use_sslv3
        Use SSLv3 on HTTP 1.1. HTTP2 and QUIC are not affected.

cert と key はきちんと認証局から証明を得たものでないと client 側がエラーになってしまうようです (client default の http ではなく https にして確認)

[1222/020754:VERBOSE1:quic_crypto_client_stream.cc(407)] Reasons for rejection: 2048
2016/12/22 02:07:55 Verify failedx509: certificate signed by unknown authority

いろいろとやり方はあるようなんですが確認していません

必要がある方はこの辺を見るとよいと思います

github.com

www.chromium.org

client

client も help を見てみましょう

./client --help
Usage of ./client:
  -loglevel int
        Log level (default -1)
  -url string
        host to connect (default "http://127.0.0.1:8080/")

という訳で -url をつけると任意のサーバーに接続してくれるようです

Google はすでに QUIC を利用しているので以下のようにすれば QUIC での接続を確認できます

./client -url https://www.google.co.jp/

おわりに

頑張って Ruby の Binding 書いてみようと思っていたんですが、進捗ダメでした…

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

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

おわりに

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