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は良い。

NoSQL / RDSの利用用途を整理したお話

開催日

  • 2017/8/23(水) 19:00

開催場所

イベント説明

  • NoSQL各種やRDBの選定について

Agenda

  • NoSQL / RDSの利用用途を整理したお話

資料

https://www.slideshare.net/secret/JGjjBkUZtJaTJP


所感

  • 「とりあえず使ってみる」精神で導入したら運用を辛くなる
  • Redis,DynamoDB,MongoDB,Amazon(Aurora)等、メリット・デメリットについてよく整理されている

メモ

  • NoSQL vs RDBについては以下を意識する
    • 何を重要視するか
    • どのようにパフォーマンスを出すか
    • 問い合わせ
    • 一貫性の維持
    • データモデル
  • キー・バリュー型
    • Redis,Memcache etc…
  • カラム指向型
  • ドキュメント型
    • MongoDB,DynamoDB etc …
    • スキーマレスなのでデータを柔軟に格納できる
    • キー・バリューよりも検索性に優れる
  • Redis
    • シンプルなKey-Valueストアで、非常に高速
    • 生存期間設定可能
    • インメモリベース
    • データ型
      • 文字列、リスト、セット、ソート済みセット、ハッシュ型
    • 2種類の永続化
    • AWS提供のElastiCacheサービスとして利用可能
  • ElastiCashe
    • AWSが提供する完全マネージド型サービス
    • データストアとして Redis/ Memcachedが利用可能
  • ElastiCashe + Redis
    • 永続化についてのコマンドは無効になっている
    • スナップショットファイルの作成などは設定画面から管理する
    • トランザクションログファイルの作成については、Multi-AZ構成の場合は不可

DMMにおけるサーバーレス構築の今と未来の勉強会

開催日

  • 2017/8/1(水) 19:00〜21:30

開催場所

イベント概要

Agenda

  • Serverless Single Page Apps -DMM CM AWARDS-
  • DMM picturesを流行りのサーバーレス構成で開発している話
  • LambdaだけじゃないAWSのサーバーレス

資料

所感

  • AWS Lambdaがも盛り上がってきている
  • インフラエンジニアなしで開発ができるのが良い
    • ただし、ネットワークについての知識は必要

D&S Data Night vol.06 (データ分析/データ収集)の勉強会

開催日時

2017/7/19(水)19:00〜21:30

開催場所

ヤフー株式会社17F

Agenda

  • 「ヤフーのロギングSDKの挑戦 〜データドリブン企業を目指して〜」
  • 「 データマネジメントに必要な、システム『以外』のもの」
  • 「データ分析技術が変えるビジネスの未来」

資料

https://www.slideshare.net/techblogyahoo/sdk-yjdsnight

ロギングSDKの挑戦

  • サービスごとにログの活用が難しい
  • 自動ロギング導入

ロギンク対象指定のI/F

  • ios
    • AssociatedObjectの利用

ロギンク対象の監視・判定処理

  • スクロール監視
  • ポーリング
    • 一定時間ごとに処理を実行
  • イベントのフック
    • イベント発生ごとに処理を実行

可視状態

  • window&screen
  • root view
  • scroll view
    Window座標系で判断する

まとめ


データマネジメントに必要な、システム「以外のもの」

  • サービスごとのデータ活用
    • サービス間をまたいでの活用はまだ未熟
    • 相互に活用したい
  • サービス数は100近くある
    • 戦略的なデータマネジメントが必要
  • 何をどういう順番でやれば良いか?
    • データマネジメント領域
    • DMBOKKv1 + v2などを参考に領域を整理
      • RDBMSの時代の本みたい
  • データマネジメントPOI
  • Data Stewardship
    • 組織的にデータマネジメントに貢献する(責任を負う)こと
  • ヤフーでのData Stewardship体制は
    • 体制の新設
    • カンパニー単位(サービスの集合)でデータの意思決定Data Directorを新設
    • 既存の他の体制にXXX
  • CDO:全社規模の計画リード
    • Board:全社規模の意志決定
    • Data Directors:全社施策の検討・提案・実行&カンパニー内のCOO
  • ビックすぎるデータ
    • 増え続けるデータの種類、量、課題の専門性
  • ヤフーとしてのビジネス判断
    • ビジネス的にリスクがあるケースについて、誰かがヤフーを代表として専門的な見地から判断できる必要がある
  • レギュレーションの一元管理

まとめ

  • Data Stewardship & Ownership
    • データ分析
    • DWH
    • BIツール
    • データモデル

データ分析技術が変えるビジネスの未来

自動化と社会

  • 仕事が奪われた人はどうするんだ!?
    そのため自動化の進め方は非常に重要

自動化とデータ分析技術

  • 少ないデータで学べること
  • 計算量が減ること

幾何学を基本とした数学的な説明が重要であると考える

  • 内部で何が起きているのかわからない

機械学習幾何学

  • 多様体=座標のようなものと考えください

データ分析の数学的理解への課題

  • 2次元での回帰分析や多項式なら人間から見て直感的に理解できた

まとめ

  • データ分析

iOS Test Night #5 の勉強会

testnight.connpass.com

  • iosにおけるテスト周りに関する知識を共有することを目的としてイベント

    • テストを初めてみた&ここで苦労した
    • このテスティングフレームワークはここがハマりどころ
    • テスティングフレームワークをこうやって使い分けている
    • こうやって工夫してテストしている
    • CI/CD環境はこんな感じにしている
    • WWDC2017での熱をこの場にぶつけたい
  • イベントレポート dev.classmethod.jp

eureka Meetup #06 -Go! Go! Go!- の勉強会

eure.connpass.com

Goのパッケージ構成について

Go Package Guidelines

  • godocを見る機会が多い

Package構成について

  • Goのインターフェースはi/oパッケージを参考にする
  • GoではMVCパターンを過剰に意識しないほうが良い
  • とにかく、野良でなく標準パッケージを参考にするとよい
  • cryptoパッケージも参考になる

登壇資料

https://speakerdeck.com/kaneshin/go-package-guidelines


標準ライブラリのコードリーディングで学ぶGo

Go言語のいいところ

  • コンパクトな言語仕様
  • 本質に集中するための標準ツール群
  • 充実した公式ドキュメント
  • 可読性の高い標準ライブラリ
  • 他にもいっぱい…

可読性の高い標準ライブラリ

  • 標準ライブラリも可読性とパフォーマンスのバランスに優れ、コードリーディングしやすい
  • Goには三項演算子すらない

コードリーティングするためのツール

  • 普段使用しているエディタの機能で。
  • (IntelliJ IDEA + Go plugin) or Gogland(どちらも機能は同じ)
    • interfaceの実装満たす構造体へのジャンプも可能

compressパッケージのリーディングから学べたこと

  • Goの考え方やイディオム
  • ビット演算
  • スライス演算
  • Goにおけるバイト列の操作方法の一部
  • gzip圧縮の概要とそのアプリケーションコードレベルの記述

Go学習リソース

  • 公式ドキュメント、Wiki
    • Go Blog,Go Wiki,Effective Goあたり
  • 有名なパッケージ
    • aws-sdk-goはAPI Clientのお手本実装の一つ
  • Go界隈の有名人をSNSでフォローする
  • Go関連のカンファレンス・イベントのスライドをチェックする
  • 書籍

登壇資料

https://speakerdeck.com/yu81/biao-zhun-raiburarifalsekodorideingudexue-bugo


Goぽいんとれっすん

Comments

  • ちゃんと書く
    • 特に公開している型や関数、パッケージ
  • 英語コメント
    • 日本語話者の多い会社ではやめたほうが良い
  • golint
    • エディタ、CI、Git huuk
    • しっかり対応するなら英・日

Test

  • 書く
    • 書く文化を作る
    • テストコードがない場合はPRで指摘する
    • CIの設定は最初にする。常に緑に保つ
  • 実行方法を統一しておく
    • make,guip,bazei
    • CIの変更も簡単になる
  • TIPS
    • テーブルドリブンテスト
    • TestMain
    • サブテスト
    • ゴールデンファイル

Continuous Integration

  • CircleCI? Travis? Jenkins?

    • 何でもいいからいれましょう
    • gofmt,go vet golint
      • golintはコメントを正しく書く必要がある
    • go test -p 1
      • -pはコア数 並列数のこと
  • GoのCIはSemaphoreはおすすめ

  • ただし、CicleCIとかよりは、機能は少ない

Vendor

  • していない場合は早めに入れる

    • 開発者、テスト、リリースごとに違うバージョン
  • XXXを使えばいいですか?

    • 新しくやるならdepがおすすめ
    • gb,glideでもいいみたい

Knowledge Sharing

  • Goのナレッジ

    • キャッチアップと共有は難しい
    • 更新が早い
    • 英語の情報が多い
      • wiki,gophercon,blog,git book
    • 本は古い
    • 日本語の情報インフルエンサー
  • ビジネスナレッジ

    • Qiita,Confluence,Git book
    • OWNERSファイル

Package Layout

  • 難しい
    • プロジェクトの規模・性質によってまちまち
  • 細分化しすぎない
  • 統一しすぎない
    • 分ける軸
    • 機能ベース
    • 依存ライブラリベース

pprof/trace

  • pprofは全員が使えるようになるべき

    • memory,cpu etc…
    • goroutineを追加した場合のリーク検知
    • uber/go-torch,rakyll/gom,mkevac/debugcharts
  • Trace機構は早い段階でいれたほうが良い