Go Conference Tokyo 2019 Spring スピーカー参加・聴講感想 #gocon
Go Conference Tokyo 2019 Spring にてスピーカー参加してきました。今回はいつものカンファレンスより準備を早めにやったこともあり、がっつり他の方のトークを聴講できました。純粋なメモ・感想を書いていきます。
発表したSession
"Design considerations for container-based Go applications"という発表をしました。
発表自体の概要や背景については所属企業のブログエントリで公開するので詳しく書きませんが、Gopher君もらえて嬉しかったです。
聴講Sessions
次のセッションを聴講しました。
- Keynote "Go Module Proxy Life of a Query"
- Hacking Go Compiler Internals 2
- Goによる外部プロセス起動ベストプラクティス及びtimeoutパッケージ徹底解決
- Dive into Buildkit LLB with Go
- CPU, Memory and Go
Keynote "Go Module Proxy Life of a Query"
- Katie Hockman さんのKeynote、GOPROXYの開発に関わっている方の発表
- Katie Hockman さん
- `https://groups.google.com/forum/m/#!topic/golang-dev/go6_lZqew6g
Memo
- https://github.com/katiehockman/puppies
- 生産性のないビルド => Modules
- ソースコードの消滅 => Mirroring
- 危険なダウンロード => checksum
- Modules
- Semantic versioning
- v1.5.2 Major/Minor/Patch
- example:
- Semantic versioning
- Mirroring
- checksum
- ex. https://github.com/katiehockman/puppies/blob/master/go.sum
- checksum database
- 関連してそうなキーワード
- cache friendly / less storage
- GOSUMDBについて
- Trust on anyone's first use
- 使い方
- 環境変数の設定
- GO111MODULE=on
- GOPROXY=https://proxy.golang.org
- 1.13ならdefaultでGOSUMDBを使う
- GOSUBDB(only1.13)
- 環境変数の設定
- QA
- If the library author wants to delete it for some reasons, what should they do for proxies?
- checksumがcacheするし?永続的かな?
- Is there any plan to provide vulnerability information like npm?
- For what kind of challenges did you adopt Goproxy?
- caching somethong forever ストレージとか
- go.sumで使われるチェックサムの計算方法が一度変わったことがあったけど、今後は基本的に変わらない前提で設計されているのでしょうか?
- 答えなんでした?
- If the library author wants to delete it for some reasons, what should they do for proxies?
Impression
- Katie Hockmanさんかっこよかった、憧れた、Go自体の開発やっていきたい...
- リアルタイムで翻訳されてるやつどうやってるんだろう
- GOSUMDBについて1回では理解できなかったので一次情報掘っていって調べよう...
- 7月のアメリカ開催のGopher Conferenceの聴講に不安を残す英語リスニング力に気がついたことが最大の収穫
Hacking Go Compiler Internals 2
Outline
- Hacking Go Compiler Internals 2
- moriyoshi さんの発表
- Goのコンパイラがどうやって機械語に変換されるか
Memo
- Lexer
- Parser
- Annotated AST construction
- アノテートされた抽象構文木
- Typechecking
- 型チェック
- 変数・値のみではなく
- Varitable binding
- Inlining
- Escape Analysis
- new()関数、heapにおかれる
- 変数定義で確保、stackにおかれる
- stackにおいたものをheapにおかなきゃという判断
- Closure Rewriting
- Walk
- SSA Generation
- Go1.7で導入
- Go1.7以前ではできなかった最適化できる
Impression
- Goのコードの中でどういうコンパイルがされているのか興味深かった
- 僕のコンピュータサイエンスの基礎力が足りない
Goによる外部プロセス起動ベストプラクティス及びtimeoutパッケージ徹底解決
Outline
- Goによる外部プロセス起動ベストプラクティス及びtimeoutパッケージ徹底解決
- songmuさんの発表
Memo
- コマンドラッパー
- ghq・mackerel-agentなどコマンドを実行する例
- コマンド実行
- os/exec packageを使えば簡単に
- io,MultiWriter
- シグナルハンドリング
- SIGKILL・SIGSTOPはできない
- SIGTERMで正常終了を促すのがお作法、できなかったらSIGKILL
- exec.CommandContextの問題は、SIGKILLで強制停止・孫プロセスを停止できない点
- Songmu/timeout
- timeout.c
- SIGCONTを送ることで強制的に再開させる
Impression
- 本筋ではないですが作ってるライブラリの量がすごい、見習ってがんがん公開していきたいと思いました
- 今回発表いただいた資料を見ながら公開されているライブラリを読むと更に勉強になりそう。ありがたく勉強させていただきます...!
Dive into Buildkit LLB with Go
Memo
- Docker18.0.9で正式機能として利用できるBuildKit
- BuildKitが提供するもの
- buildctl・buildkidt
- BuidKitはGoで書かれている
- BuildKitもurlfave/cli 使ってるんだへぇ
- LLB
- BuidKitのコア
- BuildKit では LLB(low-level builder) に一度変換する。 LLB は DAG 構造
- grpcで通信・protocol bufferを使っている
- Opertaionの依存はinputsに定義
- 。DOT 言語に変換することで GraphViz で可視化できるツールとして llb2dot を作った
- BuildKitはマルチステージビルドの並列化だけではなく、RUNレベルの1ステップ単位でも共通化できる。
- Dockerfile2LLB
- https://godoc.org/github.com/moby/buildkit/frontend/dockerfile/dockerfile2llb#Dockerfile2LLB
- Dockerfile から LLB に変換する関数
- Dockerfileのlinterを作ったりできる
- https://github.com/zabio3/godolint
- Dockerfile内で環境変数を与えていないか みたいなlinterを作ることも可能
Impression
- Dockerfileのlinterを作ったりできる、たとえば、「Dockerfile内で環境変数を与えていないか」みたいなlinterを作ることも可能。 僕のトーク内容触れていただいたからには帰って試さなければ…!
- @po3rin さんのトーク、BuildKit・LLB概要レベルくらいしか知らない僕でも、実際に手を動かせる手ほどきになっていて、めちゃめちゃありがたかった...!
- コードハイライトどうやってるんだろう?
- 直接話してお伺いできた Carbon というやつを使っているらしい、よさそう!
- LTするならCarbon使ってコードをオシャレに見せようぜ! - Qiita
CPU, Memory and Go
- sonatard さんの発表
Impression
- CPU, Memory and Go”のトーク、Goが何をしているかに関してわかりやすく解説いただいていてすごくよかった、後で資料公開頂いたら読み直したい...!
- 公開いただいた読み返しまくる
- 大盛況で立ち見勢だったのでメモは取れず
さいごに
Goの様々知見が聞けてめちゃめちゃ良かったです!運営の方々このような素晴らしい場をありがとうございました!