1 of 33

GothamGoと

GopherCon EUに

いってきた!

2019年6月14日(金)

mercari.go#8

The Go gopher was designed by Renée French.

The gopher stickers was made by Takuya Ueda.

Licensed under the Creative Commons 3.0 Attributions license.

2 of 33

自己紹介

上田拓也

@tenntenn

所属

コミュニティ活動

Go ビギナーズ

Go Conference

上田拓也

@tenntenn

3 of 33

メルペイ エキスパートチーム

技術をアウトプットするところに技術は集まる

■ エキスパートチームとは?

  • 50%以上の時間を技術コミュニティへの貢献に充てる

■ エキスパートチームの役割

  • 社内に新しい技術を取り取り込む
  • 社外のコミュニティなどを通じて社会へ還元する

■ エキスパートチームの活動

  • カンファレンス・勉強会の開催/運営
  • 対外的な講演活動
  • 執筆、雑誌への寄稿、インタビュー
  • 社内外での担当技術の普及推進

@tenntenn

担当:Go・GCP

@mhidaka

担当:Android

メンバー

4 of 33

海外カンファレンスへ参加する理由

  • 最新の技術を知る
    • カンファレンス発表になる新しい機能
    • 他の企業の知見をセッションで知る
    • ハンズオンなどでエキスパートから直接学ぶ
  • 世界各地のエンジニアとの交流
    • セッションで質問する
    • アフターパーティーで話す
    • 著名なエンジニアも参加する可能性がある
    • GoogleのイベントではPMとMTGする場合も
  • メルカリでは学生向けにスカラーシップも行っている

5 of 33

Gotham Go???

6 of 33

Nextの3日目にNYに移動

5時間かけて移動

7 of 33

GothamGoとは?

  • ニューヨークで毎年開かれているカンファレンス
    • プログラミング言語Goについて扱う
    • 参加者は200名くらい(?)
    • 1トラック
    • NYにはGoチームがあるので面白い
    • 2014年からやっている

8 of 33

会場の様子

9 of 33

セッション一覧(午前)

タイトル

登壇者

Go at Work: Education Equity

Johnny Boursiquot

Finding Dependable Go Packages

Julie Qiu

Shattered Mirror: An Introduction to Reflect and Unsafe in Go

James Bowes

Off the Chain! Scaling Blockchains in Go

Vicki Niu

Pac Man from Scratch

Daniela Petruzalek

10 of 33

セッション一覧(午後)

タイトル

登壇者

Interacting with custom-made hardware in Go

John Crepezzi

The Athens Project - A Proxy Server for Go Modules

Aaron Schlesinger

Slice Recycling Performance and Pitfalls

David Golden

WASM: Bringing Go to the Browser (and Beyond!)

Gabbi Fisher

CSI: Gopher

Matt Silverlock

Francesc Campoy

11 of 33

Pac Man from Scratch

  • パックマンをStep by Stepで作る
    • https://github.com/danicat/pacgo
    • コンソール上でパックマンを作る
    • ワークショップを元にした発表
    • 絵文字で表示
    • Step by Stepで丁寧に作れるので初心者向けに良さそうだった

12 of 33

Interacting with custom-made hardware in Go

  • 自作楽器をGoから操作する
    • Raspberry Pi
    • GPIOから操作
    • GoBotを使っている
    • 塩ビパイプを叩く
    • ゴールーチンで演奏する
      • いくつかのメロディーを再生できる

13 of 33

The Athens Project - A Proxy Server for Go Modules

  • Go Modulesのプロキシの話
    • https://github.com/gomods/athens
    • GOPROXYに設定する
    • Go Modulesでダウンロードする元が変えられる
    • Go Modules download APIをベースにしている
    • Dockerイメージがあるのでローカルで動かすことができる

14 of 33

Slice Recycling Performance and Pitfalls

  • スライスをプールする方法
    • スライド
    • 単にsync.Poolを使うパターン
      • 必要な長さが違う
    • BytePool: Resizeのアルゴリズムで実装が分かれる
      • null: GCに頼る方法(通常のスライスの再確保と同じ)
      • sync: sync.Poolを使う
      • power2: サイズによって使うsync.Poolを分ける
      • reserved: 予め大きめの配列を確保しておく
      • leaksync: sync.Poolを使うけど使わないスライスをPutしない

15 of 33

CSI: Gopher

  • UASTでGitHub上のコードを検索する
    • https://speakerdeck.com/campoy/csi-gopher
    • source{d}という会社が提供しているEngineを使う
    • SQLでGitHub上検索し、UASTで表現された抽象構文木を検索
    • GitHub中から面白い挙動を見つける
      • initのファイルあたりの個数は?
        • 300個以上あったりする!?

16 of 33

GothamGoの感想

  • セッションのレベル
    • Go Conferenceと同じくらい
    • Goチームがいるので登壇者は豪華
  • コミュニティとして
    • 突然ビンゴ大会が始まる
    • 突然じゃんけん大会が始まる
    • 突然クイズ大会が始まる
    • → 時差ボケでも全然眠くならなかった!!

17 of 33

ビンゴ大会

  • 5x5のビンゴ
    • 近くの人に話しかける
    • 話しかけた人の属性がビンゴカードにあればマスが開く
    • 難易度が高い
      • コンピューターサイエンス以外の博士号持ってるか?
      • 50州言ったことあるか?
      • 双子(またはそれ以上)か?

18 of 33

じゃんけん大会

  • 1対1で対決する
    • 近くの人と対決
    • 負けたら相手の応援チームになる
    • 最終的にAチーム v.s. Bチームみたいな感じになる
      • うぉぉぉぉぉぉってなる
    • じゃんけんのタイミングが難しい

19 of 33

GopherCon EU???

20 of 33

めっちゃ遠い

テネリフェ

マドリード

21 of 33

GopherCon EUとは?

  • ヨーロッパで毎年開かれているカンファレンス
    • プログラミング言語Goについて扱う
    • 参加者は200名くらい(?)
    • ヨーロッパのGopherが集まる
    • 2トラック
    • 3DAY
    • ダイバーシティスカラーシップがある
      • 私の場合はチケット代+Workshop代
        • ホテル代も出る場合がある

22 of 33

会場の様子

23 of 33

スケジュール

  • DAY0:Workshop + GoBridge Party
    • Production ready cloud-native services with Go and Kubernetes
  • DAY1 : セッション
    • 2トラック
    • Goチームによるパネルディスカッション
  • DAY2:Community Day
    • Goコミュニティについて考える
      • メンターは必要か?_
      • Goを採用するとよいこととは?
    • LT大会

24 of 33

参加したワークショップ

  • Production ready cloud-native services with Go and Kubernetes
    • Cloud Native?
      • 12 factor
      • Fault tolerance
      • Reliability
      • Maintainability
      • Operability
      • Observability
      • Security
      • Automation
    • Step by StepでGKE上にデプロイするところまでやる

25 of 33

LinuxBoot: Firmware Tools & a busybox in Go

  • BusyboxをGoで作る方法など
    • https://github.com/u-root/u-root
    • 複数のmain関数を持つプログラムを1つのバイナリに埋め込む
    • 静的解析をmainパッケージをライブラリにする
      • パッケージ変数をtypes.Info.InitOrderを使って初期化順を判定する
      • init関数とmain関数を普通の関数にする
      • os.Args[0]の値によって呼び出すmain関数を変更する

26 of 33

Psychology of Code Readability

  • リーダビリティに関するセッション(スライド
    • メンタルモデルをいかにうまくコードに落とすのか
    • 人間のワーキングメモリを考える(3-4つくらいしか覚えられない)
    • グルーピングすることにより覚えることを減らす
      • depth v.s. width
        • widthが大きいスパゲッティコード
        • depthが大きい行き過ぎた抽象化

(引用:スライドp.54)

27 of 33

Rethinking Visual Programming with Go

  • ビジュアルプログラミングとGoについて
    • https://divan.dev/posts/visual_programming_go/
    • gotraceの作者がビジュアルプログラミングについて考えた
    • テキストベースとビジュアルプログラミングの違いとは?
    • 作ったツールについての説明

28 of 33

LT大会

  • Community Dayの後半に行われた
    • 事前登録した人が発表
    • 謎のコードで発表順が決まる
  • 発表した内容

29 of 33

syncパッケージの可視化

  • うまくアニメーションで説明

30 of 33

GopherCon EUの感想

  • セッションのレベル
    • Go Conferenceと同じくらい
    • 他のGoのカンファレンスと登壇者が同じところがあった
    • 可視化にただならぬ気合を感じた
  • コミュニティとして
    • いろんな国から参加していた(ダイバーシティスカラーシップ)
    • 英語があんまり喋れなくてもやさしい
    • どうやってGoを盛り上げるべきかという議論を真剣にしている
      • 教育について
      • 企業でのGoの採用について

31 of 33

Gopher道場 #5 LT大会&卒業式

  • Gopher道場 #5の卒業生によるLT大会です!
    • 6/24(月) 19:00 〜
    • https://connpass.com/event/135598

32 of 33

Go同新卒研修 by Gopher道場

  • エンジニア新卒1〜3年目向けの研修

33 of 33

サマーインターン募集中

  • GoのOSSにコントリビューしたい学生募集中
    • https://mercan.mercari.com/articles/13497/
    • 私一緒にGo自体やOSSにコントリビューしてもらいます!