web-technical-blog

web開発に関する技術メモ

golang.tokyo #8 勉強会

golangtokyo.connpass.com

概要

開催日

2017/8/28(月) 19:30〜

開催場所

DMM.com

ハッシュタグ

#golangtokyo


登壇者

星一 / hajimehoshi

登壇資料

https://docs.google.com/presentation/d/e/2PACX-1vSnqz_mJ04LkV56tLnPX9exLf-08axpSH69LQfuOupxWpOvlg1XXYXx4XZj6tAkUvrj6XnY-qqdnj3E/pub?start=false&loop=false&delayms=3000&slide=id.g2451cb4c0a_0_126

Ebiten - 概要

Ebiten - 機能

  • 描画
    • 矩形画像から矩形画像への描画
  • 入力
  • Wav,MPS,Ogg/Vorbis,PCM

Ebiten -メインループ

  • Runに毎フレーム実行する関数を指定する
  • 引数として画面を表す*ebiten.Imageが渡ってくる
  • 画像、画面、オフスクリーンなどが全てが*ebiten.Image

Ebiten - 描画

  • アフィン変換行列
  • 平行移動、拡大縮小、回転の組み合わせを1個の行列だけで表す

実例 - 償いの時計

  • ファミ通に載った
    • goで開発したの初めて…
  • 15000 DL(2017年8月)

  • RPGエンジンをGopherJSでJavascriptに変換

  • ブラウザ上でゲームのテスト

実装 - 描画

実装 - 音のデコーダ

  • MP3はどのブラウザでも動くため、ブラウザではネイティブのデコーダを利用
    • OggSafariでネイティブデコードできない

実装(デスクトップ) - GLFW

実装 GopherJS(ブラウザ)

  • GopherJS
    • GoをJavascriptに変換するソフトウェア
    • goroutineも動作する

実装 - パフォーマンス

  • プロファイルを取る
    • 他のプラットフォームに比べると一番やりやすい
  • コピーを避ける
  • ロック、チャネル、goroutineを避ける
    • 下手に呼ぶとsetTiemoutが呼ばれる
  • deferを避ける
    • deferなしより25倍遅い。実も元々遅い
  • リフレクションを避ける(encoding/jsonなど)を避ける
    • JSONからMessagePackに変更中

実装 - GopherJSの状況

  • GopherJSはまだまだ不安定

実装(モバイル)

  • gomobile bindを使用した
  • 実装に難航した
    • gomobileが悪い?
    • Goそのものが悪い?
    • GPUが悪い?
  • コンテキストロスト問題
  • パフォーマンスチューニング

登壇者

zchee

登壇資料

https://www.slideshare.net/KoichiShiraishi/go-by-zchee

個人で作っているGoパッケージ

  • Docker for Mac
    • とりあえずいいみたい

Neovim用のGoプラグインをpure Goで書いたもの

  • MessagePack RPC話せればどの言語でもプラグイン書ける。Goも例外ではない

まとめ

  • 個人プロジェクトはやったもの勝ち
  • まずは自分が不満を持ったものをやってみる
  • Goの速度を信じて、既存のものをもっと速くしたい

LT枠1

  • ChatOps
    • ナイスなリリースフロー

ChatOpsを導入すること

  • Pros
    • 手作業・属人性の排除
    • リリースの状況が追いやすい
    • サービスに愛着が枠
  • Cons
    • 権限管理が煩雑になりがち

ChatOpsの環境にGAEに使うこと

  • Pros
    • GAEのAPI実行が楽
  • Cons
    • RealtimeMesssaging APIが利用できない
    • uflfech: DEALINE_EXCEEDED
    • go-giuhubが動かない

気をつけたいこと

  • GAEとりあえずTaskQueuに積む
    • Slackの3秒ルール

LT枠2

  • GDBについて

  • デバックツールを使っていますか?

    • println(‘’)
    • 大量のlogの中から探し出さないといけない
    • 毎回 buildしなければいけない
    • デバックコードをcommitしてしまうことがある
  • GDB

    • GgggoがGDBをサポートしている
    • インストールめんどくさい
    • Qiitaとか見てインストールしてね
  • How to debug

    • デバックする際には最適化を外す
    • list command
    • break command
    • run command
    • continue command
    • delete command
    • backtrace
    • info command
      • global変数
      • info variables
      • info breakpoints
      • info goroutines
        • *がついているものが現在実行中のもの
    • print command
      • アドレスを表示したり
    • whatis
      • 変数の型のを表示
    • disas
      • 逆アセンンブル
    • watch
    • set variable

まとめ

  • tab補完が聞くのが気持ち良い
  • HTTP Serverのデバックどうするの?
    • deleveが良さそうかもです…

LT枠3

  • システム構築にgPRCを使った話

  • gRPC

  • RESTのエンドポイント辛い問題

  • コード生成で開発の効率化
  • Streaming RPC

  • ほとんどのクライアントがRESTを要求

  • GOOD

    • Streaming RPCが想定通りに使えた
    • 生成されるコードが自分好み
  • BAD
    • curlのように使えるクライアントが無い
    • サーバーのレスポンスにnilのフィールドがあるとpanicした
      • 今は改善されている
    • docker stackでシステムを立ち上げてしばらくたつと接続エラーが発生した

まとめ

  • gRPCは良い。