memoメモ

最近はGo言語関連で。φ(..)メモメモ

GoCon 2015 summerを見てきました #gocon

2015-06-21のgocon 2015 summerを見てきました。

遠方からいらっしゃっていた @kwmt27 さんや @qt_luigi さんに会えたり、 @vvakame さんにTypeScriptについていろいろ聞いたり、その他皆様ありがとうございました!

次回も楽しみにしています!


以下、簡単なものですが、メモを公開します。

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

Oracle:

  • source code analysis tool
  • pointer analysis
    • analysis: satatic function call or dynamic function call
    • call stack
  • godoc -analysis

Mobile:

総括: 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

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 の人

"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で書き換え中。

デバッグ:

感想:

GoでGDBは何度か試みたことがある、が、うまく動くことが少なかったので諦めていた。 go1.4+で解消されているのであればまたチャレンジしてみようかな。

"Scaling Sourcegraph with Go" by Gabriel Aszalos(@gabrielaszalos) at Sourcegraph

https://sourcegraph.com/ https://srclib.org/

感想:

ソースコードの解析サービスがWebブラウザで手軽に閲覧できるのはうれしい。 gRPCをもう取り込んでい活用していてすごい。 いろんなノウハウが溜まっていそう。

ikawaha at パシフィックポーター

形態素解析 kagomme

https://github.com/ikawaha/kagome

go gettableを目指す

感想:

形態素解析の話からはじまってどこへ向かうのかとおもったら、go getで簡単に取れるようにするための工夫がいろいろあった。 go-bindataつかったことないので困ったら活用しよう。

cubicdaiya at Mercari

https://speakerdeck.com/cubicdaiya/a-general-push-notification-server-in-go

nginxの人

"Golang, make and robotics" by @HideyukiTakei at beatrobo

https://speakerdeck.com/hideyuki/golang-make-and-robotics-number-gocon

Go in Robot

感想:

ロボット動いてた。 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

感想:

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の勉強会を開催するらしいので遊びに行ってみたい。

その他

Tex Yoda(トラックポイントキーボード)

これいいです。

f:id:atotto:20150501231713j:plain

メカニカルキーボードにトラックポイントがついているキーボード(Tex Yoda)です。

以前よりトラックポイントが付いているキーボードを愛用していて、こんなの

Lenovo ThinkPlus USBトラベルキーボード ウルトラナビ付 [31P9514]

Lenovo ThinkPlus USBトラベルキーボード ウルトラナビ付 [31P9514]

レノボ・ジャパン ThinkPad USB トラックポイントキーボード(日本語) 55Y9024

レノボ・ジャパン ThinkPad USB トラックポイントキーボード(日本語) 55Y9024

を使ってきました。ちなみに上の2つはもう売っていません。

メカニカルキーボードも使ってみたいと思いつつ、トラックポイントがないので踏みきれていませんでした。 #そういえば大学の先輩がHHKに穴を開けてトラックポイントを取り付ける改造を試みていましたが、あれはどうなったんだろう・・

そんなところにTex Yodaが Massdrop https://www.massdrop.com/buy/tex-yoda で購入できるということを知って乗っかってみました。 なお、Massdropは、サイトで欲しい人を募り、目標人数を達成(drop)すれば割引価格で購入できるというショッピングサイトです。

メカニカルキーボードははじめてなので、軸について調査。

なんとなくこれみて茶色かなということで茶軸を選択。

2015/02/01にdropが完了して、発送されたのが4/8。待ち長いですが、まとまった数での購入なのでこのあたりはしかたないですね。

Tex Yodaは基本的に自分で組み立てる(ハンダ付け)必要があります。 注文時に組み立て済みのものを選択できますが+$50くらいかかります。

組み立ては全工程で2hほどかかりました。

操作感は良好。トラックポイントの感度がこれまで使っていたものより入力が大きいので調整が必要でした。

自分で組み立てるのは楽しいし愛着わきますね。

Book: How Google Works

読んで考えたことメモ

5年で起こり得ること

How Google Worksより:

常識を捨て、想像力をたくましくし、これからの五年であなたの業界で「起こり得ること」は何かと自問してみよう。一番速く変わるものは何か、まったく変わらないものは何か。

変わるもの:

  • グラス型デバイスで、ディスプレイが不要になる
  • グラス型デバイスで、ホロデッキっぽいものができる
    • 仮想空間
    • モノのデザイン、建築の仕事の仕方が変わる
  • コンピュータに話しかけるようになる
    • 言葉でコンピュータにお仕事を依頼できる
  • 筋斗雲みたいな車ができる
    • 呼んだら車が来る。これが本物の自動車
  • 定型化される仕事はロボットがこなす
    • 作業の定型化が進み、カスタマイズされるものはとても高価になる
  • 手仕事ブランドの確立
    • コンピュータ、ロボットではない、人の手によるプロダクトがブランドとして確立できる
  • 個人の様々データが自動的に収集される
    • いまどこ?
    • 心拍数は?
    • 血流は?
    • 集中してる?それとも眠たい?
    • イライラしてる?元気?
  • レプリケータ
    • モノ・食べ物が家庭でもビルドできるようになる
  • プログラミングできる人材の不足
    • タブレット型端末に慣れた人によるコンピュータ離れ
    • Qwertyキーボードが使えない
  • コミュニケーション力の低下
    • 人と人が偶然会うこと、知りあうきっかけの機会損失の増加
    • 付き合うより一人
  • 物流の自動化
    • ロボット化、自動車による宛先への自動配送
  • 野菜工場
    • 完全自動化された野菜工場による収益拡大
    • 安全性のアピールによるブランドの確立

変わらないもの:

  • 人間
    • 生物学的に。。
  • 宇宙
    • すくなくとも5年ではそう変わらない、と思う
  • 天変地異に対する対応
    • 起こってから対応する性
  • 天気予報
    • むしろ当たらなくなっていくかも?
  • スポーツ
    • 種目、ルールはそんなに変わらない
  • 趣味
    • 世代毎に違うけど、個人の趣味は大きく変わらない
  • ゲーム
    • ゲームに対する面白さは繰り返しやってくる
  • 電気ありきのシステム
    • 電気の次は簡単に出てこない、切り替わらない

GitHub APIメモ

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

Raspberry Pi 2 Model B (1)

Raspberry Pi 2 Model B (1)

自分でビルドしても構いませんが、ここはさっと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)

Raspberry Piクックブック (Make:PROJECTS)

WEB+DB PRESS Vol.82

WEB+DB PRESS Vol.82

  • 作者: 山口徹,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)
}

gist: go1.4 TestMain example

TestATestBはなにかのテストコードだと思ってください。 TestMainで、setupteardownを呼び出すようにしています。この例ではテストが成功した時だけ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

となり、パッケージテストの最初と最後でそれぞれsetupteardownが呼ばれるのがわかると思います。

これまでinitメソッドでsetupしてz_test.goなどでteardownさせるなどの黒魔術的なことが必要でしたがこれで解決ですね。

基礎からわかる Go言語

基礎からわかる Go言語

WEB+DB PRESS Vol.82

WEB+DB PRESS Vol.82

  • 作者: 山口徹,Jxck,佐々木大輔,横路隆,加来純一,山本伶,大平武志,米川健一,坂本登史文,若原祥正,和久田龍,平栗遵宜,伊藤直也,佐藤太一,高橋俊幸,海野弘成,五嶋壮晃,佐藤歩,吉村総一郎,橋本翔,舘野祐一,中島聡,渡邊恵太,はまちや2,竹原,河合宜文,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/08/23
  • メディア: 大型本
  • この商品を含むブログを見る