Markdown Night 2017 Summerの勉強会
メルカリの方がブログがまとめてくれました。。
tech.mercari.com
golang.tokyo #8 勉強会
概要
- プログラミング言語のGoの導入企業のメンバーが集まり、
Goの普及を推進するコミュニティです。
開催日
2017/8/28(月) 19:30〜
開催場所
ハッシュタグ
#golangtokyo
登壇者
星一 / hajimehoshi
登壇資料
Ebiten - 概要
- 極めてシンプルな2Dゲームライブラリ
- 描画・入力関数が計約50個
- マルチプラットフォーム
- Apcahe License 2.0
Ebiten - 機能
Ebiten -メインループ
- Runに毎フレーム実行する関数を指定する
- 引数として画面を表す*ebiten.Imageが渡ってくる
- 画像、画面、オフスクリーンなどが全てが*ebiten.Image
Ebiten - 描画
- アフィン変換行列
- 平行移動、拡大縮小、回転の組み合わせを1個の行列だけで表す
実例 - 償いの時計
- ファミ通に載った
- goで開発したの初めて…
15000 DL(2017年8月)
RPGエンジンをGopherJSでJavascriptに変換
- ブラウザ上でゲームのテスト
実装 - 描画
実装 - 音のデコーダ
実装(デスクトップ) - GLFW
- OpenGL / 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に使うこと
気をつけたいこと
- GAEとりあえずTaskQueuに積む
- Slackの3秒ルール
LT枠2
GDBについて
デバックツールを使っていますか?
- println(‘’)
- 大量のlogの中から探し出さないといけない
- 毎回 buildしなければいけない
- デバックコードをcommitしてしまうことがある
-
- 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
- Google製のRPC
RESTのエンドポイント辛い問題
- コード生成で開発の効率化
Streaming RPC
ほとんどのクライアントがRESTを要求
GOOD
- Streaming RPCが想定通りに使えた
- 生成されるコードが自分好み
- BAD
まとめ
- gRPCは良い。
NoSQL / RDSの利用用途を整理したお話
開催日
- 2017/8/23(水) 19:00
開催場所
- 株式会社ビズリーチ
https://d-cube.connpass.com/event/64824/
イベント説明
- NoSQL各種やRDBの選定について
Agenda
- NoSQL / RDSの利用用途を整理したお話
資料
https://www.slideshare.net/secret/JGjjBkUZtJaTJP
所感
- 「とりあえず使ってみる」精神で導入したら運用を辛くなる
- Redis,DynamoDB,MongoDB,Amazon(Aurora)等、メリット・デメリットについてよく整理されている
メモ
- NoSQL vs RDBについては以下を意識する
- 何を重要視するか
- どのようにパフォーマンスを出すか
- 問い合わせ
- 一貫性の維持
- データモデル
- キー・バリュー型
- Redis,Memcache etc…
- カラム指向型
- Hbase,Bigtable etc…
- ドキュメント型
- MongoDB,DynamoDB etc …
- スキーマレスなのでデータを柔軟に格納できる
- キー・バリューよりも検索性に優れる
- Redis
- ElastiCashe
- ElastiCashe + Redis
- 永続化についてのコマンドは無効になっている
- スナップショットファイルの作成などは設定画面から管理する
- トランザクションログファイルの作成については、Multi-AZ構成の場合は不可
DMMにおけるサーバーレス構築の今と未来の勉強会
開催日
- 2017/8/1(水) 19:00〜21:30
開催場所
イベント概要
- サーバーレス構築の今と未来について
https://dmmcj.connpass.com/event/60992/
Agenda
- Serverless Single Page Apps -DMM CM AWARDS-
- DMM picturesを流行りのサーバーレス構成で開発している話
- LambdaだけじゃないAWSのサーバーレス
資料
Serverless Single Page Apps https://speakerdeck.com/dmmlabo/serverless-single-page-apps-dmm-cm-awards
DMM picturesを流行りのサーバーレス構成で開発している話 https://speakerdeck.com/dmmlabo/dmm-pictureswoliu-xing-rifalsesabaresugou-cheng-dekai-fa-siteiruhua
所感
- 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 の勉強会
iosにおけるテスト周りに関する知識を共有することを目的としてイベント
イベントレポート dev.classmethod.jp
eureka Meetup #06 -Go! Go! Go!- の勉強会
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あたり
- 有名なパッケージ
- Go界隈の有名人をSNSでフォローする
- Go関連のカンファレンス・イベントのスライドをチェックする
- GopherCon https://github.com/gophercon/2017-talks
- 書籍
- プログラミング言語Go(日英両方あり)
- はじめてのGo言語
- スターティング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のナレッジ
ビジネスナレッジ
- Qiita,Confluence,Git book
- OWNERSファイル
Package Layout
- 難しい
- プロジェクトの規模・性質によってまちまち
- 細分化しすぎない
- テストが遅くなる
- https://github.com/olivere/elastic
- 統一しすぎない
- 分ける軸
- 機能ベース
- 依存ライブラリベース
pprof/trace
pprofは全員が使えるようになるべき
- memory,cpu etc…
- goroutineを追加した場合のリーク検知
- uber/go-torch,rakyll/gom,mkevac/debugcharts
Trace機構は早い段階でいれたほうが良い
- New Relic,Stackdriver,X-Ray,LightStep,AppDash…
- https://github.com/evalphobia/apptracer