GoCon 2015 summerを見てきました #gocon
2015-06-21のgocon 2015 summerを見てきました。
遠方からいらっしゃっていた @kwmt27 さんや @qt_luigi さんに会えたり、 @vvakame さんにTypeScriptについていろいろ聞いたり、その他皆様ありがとうございました!
次回も楽しみにしています!
以下、簡単なものですが、メモを公開します。
- 募集: http://gocon.connpass.com/event/14063/
- 詳細: https://github.com/GoCon/GoCon/blob/master/2015summer.rst
- togetter: http://togetter.com/li/837367
Keynote by @francesc at Google
It's an exciting time to be a gopher
Go 1.5 won't have a single line of C
Go in Go:
- don't like C
- love writing Go
- a more maintenable code base
- more mind space left for innovation (no context switch)
Program analysis:
- dynamic analysis
- debbuging
- code cover
- static analysis
- gofmt, golint, go vet
SSA (Single Static Assignment):
- Data flow analysis easier
- SSA Backend plan for go1.6
- source code analysis tool
- pointer analysis
- analysis: satatic function call or dynamic function call
- call stack
- godoc -analysis
Mobile:
- gomobile
- demo https://github.com/crawshaw/balloon
- debug on PC, run on Android!
総括: Goで開発ベースは全部整うし、モバイルもこれから書けるし、Goでいいやん。
"What I Talk About When I Talk About CLI Tool By Golang" by @deeeet at rakuten
https://speakerdeck.com/tcnksm/what-i-talk-about-when-i-talk-about-cli-tool-by-golang-number-gocon
Cloud foundry : Goで書き直し中
Command line toolつくるときに使えるライブラリ:
感想:
flagパッケージでほとんど事足りる、が、必要に応じてライブラリ使うほうがいいかも。
"Generative Programming in Go" by @monochromegane at GMO Pepabo
https://speakerdeck.com/monochromegane/generative-programming-in-go
generate programming
- Go + AST + Template + goimports = Code
- argen: https://github.com/monochromegane/argen
- reflectを使うと性能が落ちる -> 使わないようにする
templateは可読性重視。goimportsで自動整形する:
func writeWithFormat(file, template string, structs structs) ([]byte, error) { var b bytes.Buffer w := bufio.NewWriter(&b) write(w, template, structs) w.Flush() formatted, err := imports.Process(file, b.Bytes(), nil) if err != nil { return nil, err } return formatted, nil } func write(w io.Writer, tplText string, structs structs) error { t := template.New("t") t.Funcs(template.FuncMap{}) tpl := template.Must(t.Parse(tplText)) if err := tpl.Execute(w, structs); err != nil { return err } return nil }
感想:
ASTでGoのコードを解析してコードを生成するというのは、それなりにメンテナンスコストもかかるので、細かい所を除いた8割くらいにおさえていた方がいい、というのがこれまでの経験で思う所。 goimportsの処理をコードから呼ぶことで整形するのは良いかもしれないので今度実装したい。
"GoCon 2015 Summer GoのASTをいじくって新しいツールを作る" by @vvakame at TopGate
http://www.slideshare.net/vvakame/gocon-2015-summer
TypeScript and Go の人
- https://github.com/favclip/jwg
- Goのstructのjsonタグを自動生成
- GoのAST便利
"Gore: A Tale of Go REPL" by @motemen at hatena
https://speakerdeck.com/motemen/gore-a-tale-of-go-repl
Gore: https://github.com/motemen/gore
- REPL
- Goを試したいときにirbみたいにやりたい
- しくみ: 中でgo runしてる
- コードをastで解析して各行をラップしてmainで実行する
"Debugging Go Code with GDB" by @kaneshin at eureka
https://speakerdeck.com/kaneshin/debugging-go-code-with-gdb
サービスをGoで書き換え中。
デバッグ:
- printデバッグやめろ
- gdbでデバッグしよう
- requre go1.4+
- OSX: brew install homebrew/dupes/gdb
go build -gcflags "-N -l"
- GoのGDB対応は発展途上
- コンパイル速いし → printデバッグでもいいか。
感想:
GoでGDBは何度か試みたことがある、が、うまく動くことが少なかったので諦めていた。 go1.4+で解消されているのであればまたチャレンジしてみようかな。
"Scaling Sourcegraph with Go" by Gabriel Aszalos(@gabrielaszalos) at Sourcegraph
https://sourcegraph.com/ https://srclib.org/
- ソースコード解析
- go-sourcegraph API
- https://sourcegraph.com/github.com/golang/go@ac452349e4f40c30d50f9922bf2c4592e748ce5e/.tree/src/encoding/json/decode.go
- gRPCでサービスを分割 https://github.com/grpc/grpc
感想:
ソースコードの解析サービスがWebブラウザで手軽に閲覧できるのはうれしい。 gRPCをもう取り込んでい活用していてすごい。 いろんなノウハウが溜まっていそう。
ikawaha at パシフィックポーター
形態素解析 kagomme
https://github.com/ikawaha/kagome
go gettableを目指す
- go-bindata でバイナリのassetを。 https://github.com/jteeuwen/go-bindata
- nomemcopy : use reflect/unsafe
感想:
形態素解析の話からはじまってどこへ向かうのかとおもったら、go getで簡単に取れるようにするための工夫がいろいろあった。 go-bindataつかったことないので困ったら活用しよう。
cubicdaiya at Mercari
https://speakerdeck.com/cubicdaiya/a-general-push-notification-server-in-go
nginxの人
- goroutineのリークには気をつける
- https://github.com/fukata/golang-stats-api-handler
"Golang, make and robotics" by @HideyukiTakei at beatrobo
https://speakerdeck.com/hideyuki/golang-make-and-robotics-number-gocon
Go in Robot
- http://gobot.io/
- Arudino Firmata : http://firmata.org/wiki/Main_Page
- gRPCクライアント -> gRPCを通じてシリアル通信 -> AVR
- プロトコルバッファprotocを使う。IDLで定義したものをコンパイル
感想:
ロボット動いてた。 IDLなんだかんだで使ったことない。試さないと。
"広告サーバーでのGoの開発・運用" by @catatsuy at ビクシブ
https://speakerdeck.com/catatsuy/p-ads-server-gocon2015
インフラまわり 広告サーバをGoで作っている
- nginx → Circus → Application(golang)
- nginxでユーザーのリクエストをバッファリングする
- アクセス制御も簡単
- nginx <-unix domain socket-> Circus <-file descriptor-> go
- Circus http://circus.readthedocs.org/en/latest/
- Goのアプリをデプロイ後、circusctl reloadするだけ
感想:
nginx <--> Circus <--> Go の組合せでの運用は良さ気。 GoでCircusのような実装ってないのかな?
nishio ryota サイバーエージェント
サーバーサイド
- 基盤はJavaの開発が長い
- Goのメリット: 並行性、わかりやすさ、速度
- コード: 読みやすい、フォーマット・コード規約が明確
- 学習コスト: A Tour of Go、Effective Goで基本的(6割)に書けるようになる。Goらしく書くにはその先
- 開発環境: 充実 gfmt, golint, go vet etc..
- デプロイ: クロスコンパイル簡単。
- テスト: 標準で。 go test
- ベンチマーク: 簡単。 go bench, go tool benchcmp
- プロファイル: 標準。 runtime/pprof, net/http/pprof
- パッケージ管理: まだこれから
- Goっぽさ: 標準パッケージで学ぶ。
感想:
人出が足りてないという割にはちゃんと使いこなせていてすごい。 Goの勉強会を開催するらしいので遊びに行ってみたい。
その他
じゃんけん大会でgopherげっとしましたー!ありがとうございます #gocon pic.twitter.com/IzAnua2vvR
— atotto (@atotto) 2015, 6月 21
2歳になった息子にgopher見せたら「いらない!」って言われた。ので、無事に明日、共に会社に出社します。
— atotto (@atotto) June 21, 2015
去年、Denverのgopherconでもらったピンクのgopherと並んで記念写真。 pic.twitter.com/IQ6jmeXQG4
— atotto (@atotto) June 21, 2015
Tex Yoda(トラックポイントキーボード)
これいいです。
メカニカルキーボードにトラックポイントがついているキーボード(Tex Yoda)です。
以前よりトラックポイントが付いているキーボードを愛用していて、こんなの
Lenovo ThinkPlus USBトラベルキーボード ウルトラナビ付 [31P9514]
- 出版社/メーカー: Lenovo
- 発売日: 2004/06/11
- メディア: Personal Computers
- 購入: 1人 クリック: 148回
- この商品を含むブログ (34件) を見る
レノボ・ジャパン ThinkPad USB トラックポイントキーボード(日本語) 55Y9024
- 出版社/メーカー: Lenovo
- 発売日: 2009/08/25
- メディア: Personal Computers
- 購入: 23人 クリック: 680回
- この商品を含むブログ (40件) を見る
レノボ・ジャパン ThinkPad Bluetooth ワイヤレス・トラックポイント・キーボード - 英語 0B47189
- 出版社/メーカー: レノボ・ジャパン
- 発売日: 2013/06/25
- メディア: Personal Computers
- この商品を含むブログ (2件) を見る
を使ってきました。ちなみに上の2つはもう売っていません。
メカニカルキーボードも使ってみたいと思いつつ、トラックポイントがないので踏みきれていませんでした。 #そういえば大学の先輩がHHKに穴を開けてトラックポイントを取り付ける改造を試みていましたが、あれはどうなったんだろう・・
そんなところにTex Yodaが Massdrop https://www.massdrop.com/buy/tex-yoda で購入できるということを知って乗っかってみました。 なお、Massdropは、サイトで欲しい人を募り、目標人数を達成(drop)すれば割引価格で購入できるというショッピングサイトです。
メカニカルキーボードははじめてなので、軸について調査。
なんとなくこれみて茶色かなということで茶軸を選択。
2015/02/01にdropが完了して、発送されたのが4/8。待ち長いですが、まとまった数での購入なのでこのあたりはしかたないですね。
Tex Yodaは基本的に自分で組み立てる(ハンダ付け)必要があります。 注文時に組み立て済みのものを選択できますが+$50くらいかかります。
組み立ては全工程で2hほどかかりました。
- 組み立て方: TEX Yoda Assembly Instructions - Massdrop
- 詳しいレポート: TEX Yoda Trackpoint Keyboardを買った | うなすけとあれこれ
操作感は良好。トラックポイントの感度がこれまで使っていたものより入力が大きいので調整が必要でした。
自分で組み立てるのは楽しいし愛着わきますね。
Book: How Google Works
読んで考えたことメモ
5年で起こり得ること
How Google Worksより:
常識を捨て、想像力をたくましくし、これからの五年であなたの業界で「起こり得ること」は何かと自問してみよう。一番速く変わるものは何か、まったく変わらないものは何か。
変わるもの:
- グラス型デバイスで、ディスプレイが不要になる
- グラス型デバイスで、ホロデッキっぽいものができる
- 仮想空間
- モノのデザイン、建築の仕事の仕方が変わる
- コンピュータに話しかけるようになる
- 言葉でコンピュータにお仕事を依頼できる
- 筋斗雲みたいな車ができる
- 呼んだら車が来る。これが本物の自動車
- 定型化される仕事はロボットがこなす
- 作業の定型化が進み、カスタマイズされるものはとても高価になる
- 手仕事ブランドの確立
- コンピュータ、ロボットではない、人の手によるプロダクトがブランドとして確立できる
- 個人の様々データが自動的に収集される
- いまどこ?
- 心拍数は?
- 血流は?
- 集中してる?それとも眠たい?
- イライラしてる?元気?
- レプリケータ
- モノ・食べ物が家庭でもビルドできるようになる
- プログラミングできる人材の不足
- コミュニケーション力の低下
- 人と人が偶然会うこと、知りあうきっかけの機会損失の増加
- 付き合うより一人
- 物流の自動化
- ロボット化、自動車による宛先への自動配送
- 野菜工場
- 完全自動化された野菜工場による収益拡大
- 安全性のアピールによるブランドの確立
変わらないもの:
- 人間
- 生物学的に。。
- 宇宙
- すくなくとも5年ではそう変わらない、と思う
- 天変地異に対する対応
- 起こってから対応する性
- 天気予報
- むしろ当たらなくなっていくかも?
- スポーツ
- 種目、ルールはそんなに変わらない
- 趣味
- 世代毎に違うけど、個人の趣味は大きく変わらない
- ゲーム
- ゲームに対する面白さは繰り返しやってくる
- 電気ありきのシステム
- 電気の次は簡単に出てこない、切り替わらない
GitHub APIメモ
やりたいこと | API |
---|---|
リポジトリのコミット履歴を取る | https://api.github.com/repos/golang/go/commits |
特定パスのコミット履歴を取る | https://api.github.com/repos/golang/go/commits?path=doc/cmd.html |
コンテンツを取る | https://api.github.com/repos/golang/go/contents/doc/cmd.html |
参考資料:
Raspberry Pi 2で Go言語 を使う #golang
- 出版社/メーカー: 梅本合同会社, RS Components
- メディア: エレクトロニクス
- この商品を含むブログ (2件) を見る
自分でビルドしても構いませんが、ここはさっとDaveさんのUnofficial ARM tarballsを使います。
なお、Raspberry Pi のOSには Raspbian を使っています。
インストール
Raspberry Pi 2のARMv7用をダウンロードし、展開します:
$ wget http://dave.cheney.net/paste/go1.4.2.linux-arm~armv7-1.tar.gz $ tar zxf go1.4.2.linux-arm~armv7-1.tar.gz
あとは http://golang.org/doc/install 通りですが、書いておきます。
~/.bashrc
に以下を追加します:
export GOROOT=$HOME/go export GOPATH=$HOME export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
bashに設定を読みこませれば準備完了です:
$ source ~/.bashrc
go go!
$ go version go version go1.4.2 linux/arm
Raspberry Piクックブック (Make:PROJECTS)
- 作者: Simon Monk,水原文
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/08/23
- メディア: 大型本
- この商品を含むブログ (2件) を見る
Raspberry Piで学ぶ電子工作 超小型コンピュータで電子回路を制御する (ブルーバックス)
- 作者: 金丸隆志
- 出版社/メーカー: 講談社
- 発売日: 2014/11/21
- メディア: 新書
- この商品を含むブログ (1件) を見る
- 作者: 山口徹,Jxck,佐々木大輔,横路隆,加来純一,山本伶,大平武志,米川健一,坂本登史文,若原祥正,和久田龍,平栗遵宜,伊藤直也,佐藤太一,高橋俊幸,海野弘成,五嶋壮晃,佐藤歩,吉村総一郎,橋本翔,舘野祐一,中島聡,渡邊恵太,はまちや2,竹原,河合宜文,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/23
- メディア: 大型本
- この商品を含むブログ (1件) を見る
Goのテストでsetup/teardownする #golang
go1.4でtestingパッケージにTestMainが追加されました。
func TestMain(m *testing.M)
を定義してあると、go test
はこのメソッドを呼び出します。試しに書いてみます:
package example_test import ( "os" "testing" ) func TestA(t *testing.T) { } func TestB(t *testing.T) { } func setup() { println("setup") } func teardown() { println("teardown") } func TestMain(m *testing.M) { setup() ret := m.Run() if ret == 0 { teardown() } os.Exit(ret) }
TestA
とTestB
はなにかのテストコードだと思ってください。
TestMain
で、setup
とteardown
を呼び出すようにしています。この例ではテストが成功した時だけteardornするようにしています。
go test -v
してみると:
$ go test -v setup === RUN TestA --- PASS: TestA (0.00s) === RUN TestB --- PASS: TestB (0.00s) PASS teardown ok testmain 0.004s
となり、パッケージテストの最初と最後でそれぞれsetup
とteardown
が呼ばれるのがわかると思います。
これまでinitメソッドでsetupしてz_test.goなどでteardownさせるなどの黒魔術的なことが必要でしたがこれで解決ですね。
- 作者: 古川昇
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- クリック: 7回
- この商品を含むブログ (7件) を見る
- 作者: 山口徹,Jxck,佐々木大輔,横路隆,加来純一,山本伶,大平武志,米川健一,坂本登史文,若原祥正,和久田龍,平栗遵宜,伊藤直也,佐藤太一,高橋俊幸,海野弘成,五嶋壮晃,佐藤歩,吉村総一郎,橋本翔,舘野祐一,中島聡,渡邊恵太,はまちや2,竹原,河合宜文,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/23
- メディア: 大型本
- この商品を含むブログを見る