algonote

There's More Than One Way To Do It

Go Conference 2017 Autumn まとめ&感想 #gocon

Go Conference 2017 Autumnに参加しました。

特別企画:パネルディスカッション w/ mattn

普通のパネルディスカッション。Goはruntime updateでもいけて問題がおきづらい、Windowsでもしっかり動く、Go2に期待すること、中級以上のgopherを採用するなら等々。

バグが互換性のために修正できないのはつらそう。Goで書かれたCのコンパイラは初めて知った。本題と全く関係ないがBigQueryってJSONもインポートできるのか。

キーノート:Go at DigitalOcean / fatih

DigitalOceanでのGoの活用事例。インフラのコードの多くはGoに移行。Code Sharing等の課題があったので単一レポジトリに移行したが別の課題も出てきたため、毎年少しづつ構成を変更。

DigitalOcean、勝手に内部は全部Pythonだと思っていたが元はChefなのか。ここでもzero downtimeがでてきてインフラでのGoの強さを感じる。

スポンサーセッション:Go + microservices at Mercari / deeeet

https://talks.godoc.org/github.com/tcnksm/talks/2017/11/gocon2017/gocon2017.slide

GoでMicroserviceを作る話。API Gatewayを作って徐々に移行。gRPCはコネクションを使いまわしているためload balancingが難しい。8月にDNS resolverが入った。

実務でハマったことベースの話で役立つ内容が多く、gRPC使ってみようという気になった。HTTPのmiddleware相当のものがgRPCだとinterceptorなんですね。

大規模で運用するためのモニタリングエージェントを自作する話 / huydx

Monitoring Agentの話。fluentdはログをそのまま送るがMAは違う。スケールしやすさ、多種環境への適用性、マネージメントのしやすさから自作した。作るだけでなくデプロイも難しい

LINE社Rustも検討してたのか。不採用理由、てっきり独特の仕様ゆえかと思ったらformatの統一性の部分なんですね。

Prometheusから考察するGoのロギング / 大和屋貴仁

Golangの各種OSSでのロギング実装の比較。Logパッケージはシンプルで例えばレベル付きロギングがない。Prometheusはgo-kitを薄くラッピング。hashicorpのログはレベル付き等

調査量がすごい。他言語の自作ログ作る際にも参考にしよう。

Goのcompileの仕組みと高速化への取り組み / niconegoto

Go 1.9で入ったコンパイラの並列化の話。デフォルトで並列コンパイルされフラグで無効にできる。内部的な変更は主にmutexの追加、グローバル変数の非グローバル化。

割と十分はやいのに並列化もできるようになったのか。Deep Learningのライブラリ、Go化でビルドはやくならないかなぁ。c=4がスイートスポットは覚えておこう。

Async, Persistent, Fast, and Stable "Enough" Queue/Worker Using Go and PostgreSQL / _achiku

que-goはrubyで書かれたkeiが元になっている。同じキューの中でもpriorityが設定できる。PostgreSQLを使っており、割りとmatureなadvisory lockを使用

PostgreSQLのadvisory lock知らなかった。queueが本筋だがDBの仕組みの理解が深まった。

Diff algorithm in Go / cubicdaiya

diffのアルゴリズムの解説。dynamic programmingは計算量がよくない。GitはMyerのアルゴリズムがベース等

正直実力足らず途中でついていけなかった。スライドあがったら復習しよう。こういうガチなの嫌いじゃないです。小ネタも面白かった。

Ebiten - Go のシンプルな 2D ゲームライブラリ / hajimehoshi

https://docs.google.com/presentation/d/e/2PACX-1vSSbSxPObBZcJHjvUpAt-HEJVLaux2FQBpJbvbxInJgmEhxSn-lVxTVxUMmUNQwtJtC8w6_HkhuW2hk/pub?start=false&loop=false&delayms=3000&slide=id.p

2DゲームライブラリEbitenの話。基本は矩形から矩形の描画が全て。2Dだが高速化のためGPUを使っている。Cgoを使うとコンパイルが遅くなる。ブラウザではGopherJSを使用。モバイルは問題の切り分けが難しい

技術書典で買った本はライブラリの使い方の話がメインだったが、今回は内部の実装の話がメイン。この手のライブラリはオーディオ関係弱いことが多いが、ちゃんと各ビルド向けに適したバックエンドを使っているのはすごいと思った。

reviewdog and static analysis for Go / haya14busa

https://docs.google.com/presentation/d/1_BWQXamZvIhL3l9ziL9zb25yP9RjpgXoxkWX-48ECss/mobilepresent?slide=id.p

reviewdogの話。既存のソリューションは好きな解析ツールを入れられなかったりする。Vimのerrorformatの機能をGoに持ってきている。現状Githubのみ対応だがGitLab等にも対応したい。

無理に車輪の再発明をせず、既存のVimのerrorformatを上手く使うのは賢いと思った。GopherはVimmerが多いんだろうか。VimConfの影響かConf通してEmacsユーザーはちょっとだけアウェイ感があった。

LT大会 (Lightning Talks)資料

全体を通して

Go Conferenceいつも抽選落ちてて、ようやく参加できた。てっきりGoの新機能の話で埋まるのかと思いきやGoでxxしたという話が多かった印象。

ネットワークやモニタリングの話からDBやゲームライブラリの話まで色々あって、実装の設計考えるときに役立ちそうな内容が多く勉強になりました。