RubyKaigi 1日目メモ
改行いれるのめんどかったからmdをWYSIWYGモードで。ほぼただのメモです
---
# RubyKaigi 1日目
## introduction
### まつださん
こんくらいなら聞き取れるけど英語スピーカーのトークは大丈夫だろうか
Brazilから来てる人もいる
### マネーフォワード
「3人のRubyコミッターがいる暮らし」
## day1 10:30~
http://rubykaigi.org/2017/presentations/n0kada.html
patch monster
ゆるふわ
fulltime ruby committer at Salesforce (Heroku)
Matzチーム
- Matz
- Nobu
- ~Ko1~
Ruby is older than Git
Window is not supported officially(Git)
taking inventory of bug tickets 棚卸し
how to build ruby
configure + make
Out-of-Place build #とは
baseruby miniruby
baseruby
parse.y -> parse.c
defs/id.def -> id.h
insns.def -> vm.inc
miniruby
no dynamic loading = runnable alone
convenient for debuggng
2.4までのparallel build
building miniruby -? parallel
building extension -> parallel
extconf.rb -> seequential
2.5 はそこをディレクトリ親子関係の依存関係以外は別プロセスで parallel でやるぞって話
https://gist.github.com/hkdnet/1c42ff3b807048cf548763326a7ec2e0
EXPR_END: 式がおわってもおかしくないところ
EXPR_LABEL: キーワード引数の名前がかけるところ
No eye-catcher in 2.5
2.3 safe navigation
Kernel#yield_self
rejected:
neko operator
user-defined operator
under discuttion:
method extraction operator
rightward assignment
## day1 13:00〜
http://rubykaigi.org/2017/presentations/ko1.html
Fiberは明示的な感じ
状態をもつものを、どこで実行状態をとめてるかに依存させたり
capturing continuation: callcc
thread より軽いから fiber
coroutine → どれを実行するのが指定するタイプの concurrency の話?
どこにでもとべるからパワフルなんだけど難しい
動いてるものを親としてresumeしたら子供として動く
先祖をresumeしたらエラー
Fiberの実装
コンテキストのスイッチ: スレッドの状態(pc, sp), VM stack, machine stack(C言語レベルのスタック)
最初はコピってstore, restoreする
中盤でOSの機能とかをつかうようにした
最近スレッドの状態をコピるのをやめた
(すこしは改善したりなんだり)
Guildとかで使うよてい
Auto Fiber proposal → インタプリタでスケジューラが動くようにしておく?
勝手に切り替わるようになってブロッキング時間を有効に使えるかも
でも逆に勝手に変わっちゃうから次にどのFiberが使われるかわかんないし、synchronizationが不要
こういうのは非決定的なバグをうみかちだからあんまり好きじゃない(_ko1)
??「Fiberっぽくないから名前かえたい」
## day1 13:50~
休憩しておりました
## day1 14:40~
http://rubykaigi.org/2017/presentations/kddeisz.html
read, tokenize, build ast, build iseq, exec iseq
Ruby 1.8まではASTを直接
ASTからinstruction sequencesへ
Ruby1.9かあら(だっけ)Iseq使う
2.3からiseqの読み書きができるように
ex:
yomikomu https://github.com/ko1/yomikomu
bootsnap https://github.com/Shopify/bootsnap
ソースを文字列で持ってるからいじれる!!!
gsubしてどうにかする → ここgsubなのか
日→秒変換: 24 * 60 * 60
掛け算はメソッド呼び出しなのでうんぬん
memo: コンパイル時に計算したいのかな
gem: vernacular
https://rubygems.org/gems/vernacular
https://github.com/kddeisz/vernacular/
自分で生成したIseqを食わせる
tuby使う
https://github.com/kddeisz/tuby
memo: JVMみたいにフロントの言語増えたらいいよねみたいなこと言ってた気がする
memo: iseqの仕様って安定的なんだっけね
→Q&A で補足。かわるかもね
## day1 15:50〜
http://rubykaigi.org/2017/presentations/watson1978.html
Ubiregi
パフォーマンス・チューニング
→まずは計測だ!
ツールとしてはiprofilerを使っている
```
$ iprofiler -tiemprofiler ./minruby ~/benchmark.rb
```
```
loop do
hash1.merge(hash2)
end
```
iprofilerでボトルネックを探して最適化する
メソッドを実行する処理 = dispatch メソッド探索 + execution メソッドの実実行
dispatchは広範囲に及ぶ処理なので影響範囲がデカかったりすでに最適化済みだったりする、みたいなことを言ってた
あるメソッドの execution 時間を短くしよう!
- メソッドディスパッチを減らす(実行中に別メソッドを呼んでいるので)
- 冗長なアロケーションを減らす
memo: ディスパッチを減らすというのは具体的にはインライン化とか
## day1 16:40~
http://rubykaigi.org/2017/presentations/narittan.html
streaming data importing
gatewayserver with h2o
mruby
benchmark
## day1 17:30
http://rubykaigi.org/2017/presentations/rubylangorg.html
sponsored: cookpad
よしおりさん
Ruby Commiters Sponsor
What will you do if a better language than Ruby comes along?
Make Ruby even stronger!!!
RHCとかね
Static type checking
mameさんクッ社へ fulltime committer
Ruby program を ロバストに
使い捨てじゃないプログラムを書くようになってきているので無理がきている
そこをなんとかしたい
型注釈絶対いれたくないのか問題
1. コードに書いてもいいよ
2. 書かせたくない
3. コメントになら書かせてやってもいいぞ
type inference がすすんだときにコード側に書いてあるとつらい
structual type はドキュメントに使いにくい
青春のアフター4を読んだ
以下ネタバレ前回でいきますのでご注意ください。
続きを読む転職して1ヶ月が経っていたようです
タイトルのとおりです。
いつものも置いておくのでよろしくお願い致します。誰からかわかるとうれしいです
(毎度のことなんだけどkindle版をほしいものリストから贈れるようにしてほしいし、並び替えはかんたんにできるようにして欲しいし、並び順は覚えておいて欲しいんだけどなあ……)
さて、2017年6月末日づけで某社を退職し、7月1日づけで、某お金を前にするような会社に勤めています。
職種としてはいわゆるWEB系プログラマー(サーバー寄り)という感じです。変わんないですね。
インフラまわりに手を出さなくなったのが前職との違いだと思います。
これは転職とはあんまり関係ないのですが、ついでにせっかくの機会なので一人暮らしを始めてみました。
さらには脱vimしてRubymineを使ってみたりスプラトゥーン2で3D酔いしてみたりしています。
引っ越しのドタバタで6月末の振り返りをすっとばし、なんやかんやで7月の振り返りもすっとばし現在に至ります。
環境が変われば現在の自分に感じる課題というのも変わっていて最近は日々頭を抱えているのですが、うまく言葉にできなくてなんだかにゃーとずっと言っています。
ぜんぶうまくいけ
さて、繰り返しにはなりますが、そんな悩めるカエルへの温かいご支援をお待ちしておりますのでなにとぞ
Linux + Thinkpad X1 Carbon 5th Genでトラックポイント、タッチパッドが安定しなかったけど直した話
解決したから書く
環境
Thinkpad X1 Carbon 5th Gen
Ubuntu 16.04(Arch使ってたときも現象は同じ。治るかは未確認)
現象
タッチパッドやトラックポイントがうまく動かない。
具体的には0.5秒くらい動いたあとに動かなくなる。
また何回か動かしていると10秒に1回くらい動く。
やったこと
参考に書いてあるブログ記事の内容を2つ試したら動くようになった。
ためしてないけど2つ目だけで動くかもしれない。
- カーネルパッチ当てる
- 以下のコマンドを叩く
sudo modprobe -r psmouse sudo modprobe psmouse proto=imps
なんか2つ目だけでなおりそうな気がするけど。
参考
Dockerのイメージとかタグとかの云々
俺のところでビルドできるDockerfileが他のところだとできないと言われて見たら、ubuntu:16.04の中身が変わってるのが原因だった。これ動くタグなのか……。
— はくどー (@HKDnet) 2017年6月14日
ubuntu:xenial-20170517.1だと動かないっぽいのでこっちで指定するのが無難っぽい
だいたいこれで終わりだが一応書いておく。
前提その1
Docker は image をもとにして動く。image は Dockerfile に定義を記載しビルドすることで得ることができる。自分の image を作成するときには他人が作った image をもとにすることができる( FROM
で記載する)。それらを共有する仕組みとして Docker Hub という Docker image を多数ホスティングしているところがある。
前提その2
Docker imageは名前とタグで管理される。名前はURLみたいなもので、 (host/)?(namespace/)*image_name
という形式で表される (気がする)1。
host が省略されていればDocker Hubという意味。namespace はそのホスト毎に管理が違う。Docker Hubだとユーザー個人のものはユーザー名のネームスペースに置かれ、公式と認められたものはネームスペースがない。
例: nginx → Docker Hub にある nginx という公式イメージ
例: hkdnet/app → Docker Hub にある hkdnet さんの app というイメージ
例: hkdnet.net/nginx → hkdnet.net という Docker registry の nginx
タグは同名イメージの中で区別するためのもの。イメージ名のあとに :
を続けて記載する。だいたい公開されているものはメインのソフトウェアのバージョンを示していることが多い。自分のアプリケーションを Docker image にするときはブランチ名とタイムスタンプかCIのビルド番号をつけている。
例: nginx:1.12
例: ruby:2.4.1
例: hkdnet/app:master-build001
タグは好きなようにつけてよいし、一度 Docker registry に push されたイメージのタグも簡単に書き換えることができる。タグはイメージにおいて一意でなくてはならないので同名タグを push した場合は古いイメージについているタグは新しいイメージに移動する。
例: 4月に app:latest を push
5月に app:latest を push
このとき app:latest は5月のほうに移動する。4月のイメージのlatestタグは剥がされる。
余談だが Docker image には複数のタグをつけることができる。Docker image の一意性を担保しているのは Image ID であり、名前とタグはImage ID への参照だと言える。
先程の例をもうちょっと複雑にするとこんな感じ。
例: 4月にビルドしたイメージのIDを APRILXXXXX とする。これに app:latest という名前をつけ push する。また app:201704 という名前をつけて push する。
5月にビルドしたイメージのIDを MAYXXXXXXX とする。 これにも app:latest という名前をつけ push する。また app:201705 という名前をつけて push する。
このとき app:latest は5月のほうに移動する。4月のイメージのlatestタグは剥がされ、参照するには Image ID を直接指定するか app:201704 として参照すればよい。2
Docker image は基本的には FROM 指定したり run したり compose に書いたりするといい感じに pull される。しかし、ローカルにキャッシュがある。また、キャッシュヒットがタグ名で行われる。この2つによってタグまで一致するものがローカルにあると自動で pull されなくなる。
具体的にどういうときに困るかというと4月時点の app:latest
が手元にあると5月で更新されたとしても app:latest
は古いものを指したままになってしまう。対応策としては明示的に pull すればよい。あるいはローカルの app:latest のタグを消すか。
さて、 Docker を語る際のよい点に環境が変わらないことが挙げられることが多い。確かに同じ Dockerfile からは同じようなイメージが作られると期待できるが期待は裏切られることがある。
その1つが FROM 元の変更である(ようやく本題)。
Ubuntuは上述の公式イメージがある。だがそんなものを見なくても俺はUbuntuの最新LTSが16.04なのを知っている。
FROM ubuntu:16.04
ということをやると冒頭のように死にます。
https://hub.docker.com/_/ubuntu/
xenialも日時バージョン付けているのでちゃんと日時バージョンまで指定しておきましょう3
Credenatial Management APIの発表聞いたメモ
僕はchrome使いなのですが、まあモダンなブラウザを使っている皆様ならばだいたいログインフォームに入力したあとに「このログイン情報を保存しますか?」系のダイアログが出るのをご存知かと思います。
インターネットの普及に伴い様々なサービスをwebで享受することが可能になりました。webを見るのはだいたいブラウザでしょうし、各ブラウザベンダーとしてはwebサービスが増えていること、webサービスを使う人が増えていること、webサービスが扱う情報がより重要なものになっていることなどからブラウザでのログイン、セキュリティまわりもよくしていかないといけないよね、という問題意識があるような気がします[要出典]。
またスマートフォンの普及にともなって1人の人間が使うデバイスが複数あることが一般的になりました。そうするとPCでのchromeとandroidのchromeでログイン情報を同期したいというのはユーザーの要望として当然のことですし、webサービスとしてはユーザー体験を損なわないように努力する価値があるところでしょう。
というわけで Credential Management API はwebサービス開発者として結構気になる内容なのでトークをざっと聞いてみました。
以下そのまとめとメモです。
メモは話していたことを雑にメモってあって、 memo:
で始まるのが僕が思ったことです。
まとめ
- Sign-UpにCredential Management APIを使うのはめちゃくちゃよさそう
- 一方でweb標準なのか?という疑問が残る
- ブラウザに寄せたい人にはいいけどそうでない人はどうするのがいいんだろうなーという懸念がある
メモ
主な関心事は3つ。Sign-In, Sign-Up, AuthN1
Sign-Inがサインイン・ログイン時の話で、ある登録済みユーザーがあるサービスを利用開始するときの話。
Sign-Upは初回登録時の話。
AuthNは認証の話。特に2FAにフォーカスしてた気がする。
memo: AuthNが一番よくわからんかった
Sign-In
chromeのパスワードマネージャがうまく動かない理由トップ3
chromeがランダム生成した文字列をパスワードにしてくれる機能がつく2。ランダム生成したものをchromeに覚えさせるので推測されにくくなる。自分で覚えてないからフィッシング詐欺にも遭いにくくなる。
memo: これいつデフォルトでオンになるんだか言ってたっけかなあ
Sign-Up
Credential Management APIでやるといろいろいいいことがある
- アカウント選択画面が画面が出てワンタップしたらログインみたいになる
- 規格に対応している認証情報提供元ならどれでも使える
- 入力のめんどうがない
- ECサイトとかの事例で登録率とかコンバージョン率がめっちゃ改善した例が載ってた
- memo: こういうの、UIの改善も同時に行ってそうな気はするのでほんとに独立な結果なのかわからんというかそうでない気がするが、フォーム入力の完了率を気にすることがなくなるのでマジで重要っぽい
こんな感じで使う
let settings = { password: true, federated: { providers: [ "https://accounts.google.com" ], }, }; navigators.credentials .get(settings) .then(credentials => { // ユーザーに「これ使っていい?」あるいは「どれ使う?」ってダイアログが出る // ユーザー操作で選ばれたらresolveされるっぽい });
memo: これweb standardになるのかなあ。そのへんがよくわからん
AuthN
memo: けっこーはやくちなのでツラかった
いま2FAといえばOTPだけどsecurity keyというのを使うようにしたい。
security keyはデバイスに挿して使うやつでワンタップすることで二段階認証OKということにできるっぽい。
memo: 仕様としてはFIDO Universal 2nd Factorというやつっぽい。
-
AutheNtication(認証)の略。AuthZ(AuthoriZation, 認可)との区別のために使う略語だと思う。認証とは「ユーザーが確かにこのアカウトであるか」という本人確認のこと。認可は「このユーザーならこの情報は見てもいいよ」などの許可だと思ってればよさそう。↩
-
Chrome 59だとまだデフォルトではオンでないっぽい。
chrome://flags
でいじれる。参考 -> How to Automatically Generate Random Secure Passwords in Google Chrome?↩
podcast #しがないラジオ sp03 にゲストでいってきました
友人がpodcastを始めたというのは以前に書きましたがそれにゲスト出演してきました。
好き放題喋ってたら3話構成(3a, 3b, 3c)になるくらい喋っていたようです。3aでは仕事の話、3bでは勉強会とかの話、3cではキモオタトークをしています。ちなみに僕はオタクではないです。
初めてのpodcast出演だったのでちょっと思ったことをまとめておきます。
喋り方について
どうも自分の喋り方として声のボリュームの調節を多く使っているようです。強く主張したいときには声を大きく、自信がなさげなときには声を小さくというような表現。たぶん誰もがやってるとは思うのですが僕のは他の人より顕著だと思いました。この手法、普通に話してる分にはいいけどpodcastだと結構厳しい印象です。小さく話しているときにボソボソ声になりすぎている箇所があったと思います。3aから3bの間に休憩いれたので3b以降は収録しているのを忘れているフシがあって、結構聞き取りにくいところが目立ったなあというお気持ち。
喋るタイミングも難しい。相槌はうたないように気をつけていたのですが、何かのトピックについて話しているときに、話したがってそうな人がいるのにそのまま話しちゃったりしてました。3a冒頭でずっきーさんが「3つほど質問がー」っていってあとから質問してるのとかがいい例ですね。ガミさんと喋るのには慣れているし、席が隣だったのもあってガミさんとばっか喋ってたのも反省点。
これは挙手制とか採用したらいいんだろうか。2人のpodcastのほうが調整しやすそうだなと思います。まあゲストなので好き放題しゃべっててもいいのかもですが、ゲストとの対話でメインパーソナリティの普段見えない一面とかを引き出せるのがいいゲストなのではなのでは?という気持ちもあって、うまくやれてないなーという感じ。
僕は普段の会話からかなり早口なのですが、今回のpodcastでもそれが遺憾なく発揮されていた気がします。エクセルスクショと言ったときとかがかなりギリギリだった、というか聞き取れない人もいたのではないかと思った。すみません。
これは改善策は、どうしたらいいのかなーとずっと悩んでます。podcast出演時に限らず自分が興味があることに関しては早口で熱っぽく語ってしまう悪癖があるのですが、これが全然直らない。日常生活でも支障があるので対策が欲しいのですが……。
全体的には、まあ自分の声ってこんな感じなんだなーっていうのが認識できて良かったです。冒頭10分くらいは「誰コイツ?」って感じの気持ちが強かったのですが聞いてると慣れるもんですね。他人に向けて話す機会というのは人生そこそこあるのでこういう機会で練習しておくのはいいことかもしれません。
内容について
反省点として、まず最初に挙がるのは、僕の略歴とか興味ある人いるんかいなっていうところですかね。結構長めに話してしまったのだけど、もっとざくっと終わらせてもよかったのでは。前職紹介みたいな感じになってるし。
.NET Framework と C# について話すときに、 JVM と Java の関係はみんなわかっているものとして話していたけどそのへんの説明もいるんじゃないかなあと聞き直して思いました。このへんはリスナーのレベルをどう見積もるかという話でもありますが。しがないラジオのリスナーはプログラマーではないことも結構あると思うので難しい。とはいえ普段聞いてるともっと技術寄りの話してほしいって思うときもあるしなあ。
勉強会の話は、やっぱお世話になってるところのは宣伝しよーと思っていて、 ninirb と どう書く の宣伝をしました。ちなみにどう書くもninirbもsp3が公開されたあとに既に開催されたんですが、誰もしがないラジオから来ましたって言ってくれませんでした。かなしい*1。
友人から一番好評だった3cですが、ちょっと各マンガの紹介がさっぱりしすぎていたかなと。それぞれ思い入れがあるので話せばもっと話せるのですが、ネタバレを避けつつヨサを伝えるとなると難しいですね。僕はシチュ萌え派なので「あのときあの場面でアイツがこういう行動とったのほんとよかった」みたいな話がしたいんですよね*2。でもだいたいネタバレそのものなので話せない……。これは、こんどまたどっかで呼んでもらう予定なのでそのときにネタバレ上等として話せればいいかなーと思います。
他に、つらつら紹介しまくったのでちゃんと紹介したいのを網羅できなかったのが残念ですね。絶対『青春のアフター』の話をするぞというのは決めていたので、最低限それはクリアできたのですけど。このへんも紹介すればよかったーってのがこのへん。
フィードバックでオススメされたLandreaallも全部読んで面白かったのでこれも次回話すかもです。
ところでLandreaallって漫画がぼくてきにおすすめです。#しがないラジオ sp 3c
— るっか@Laravelいちねんせい🔰 (@lucca0show) 2017年6月3日