builderscon 2017

builderscon.io

行ってきた。

前夜祭

大人の事情でおおやけにできない面白(といっていいのか分からない)話をきく会。
撤退はしたものの、そこで培った技術は次に受け継がれているの、とてもいい話で好きでした。私もきちんと受け継げる技術を選択していきたい…。

DeepLearningによるアイドル顔識別を支える技術

builderscon.io

yak shaving して、コツコツ継続して、趣味(プロダクト)のレベル高すぎる。

機械学習に関連して、データにラベル付けするための管理画面を作るのに今までさわったことない Rails を採用していたり、学んでく姿勢がそもそも尊いと感じました。

1年くらい黒髪で学習していた子が、とつぜん金髪になって識別できなくなった話は笑ってしまったけど、なるほどそういう罠もあるのか。

マンガ全文検索システムの構築

builderscon.io

コマの切り出しテクニックで、斜めに走査線を動かしていくのは目からウロコで(そもそもコマを切り出そうと思ったことなかったのだけどw)、他にもコマ内を塗りつぶして2値化して切り抜くとか、文字は相対距離で塊判定するとか、パズルっぽいテクニック好きなので楽しかったです。

自動翻訳に未来をみた。

小さく始めて育てるコンパイラ

builderscon.io

つくりたい言語に近い既存言語のサブセットからはじめるのが大事なのと、やっぱり動くものあると継続しやすいのかなぁ。
つまずいたら mincaml やそれを参考にしてつくってる gocaml をみると良いかも。

おわり

話してみたかった方とお話できたし、みんなさん技術大好きな空間だし、とても楽しかった。しゃもじ大人気コンテンツ。

macOS Sierra 10.12 で golang/go のテストを実行するメモ

このあたりに従い、ソースコードをもってくる。

$ git clone https://go.googlesource.com/go
$ cd go

このあたりに従い、テストを実行する。

$ cd src
$ ./all.bash

失敗した。

$ ./all.bash
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find /Users/utahta/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.

GOROOT_BOOTSTRAP に go 1.4 以上のパスをセットして、実行してみる。

$ GOROOT_BOOTSTRAP=/usr/local/Cellar/go/1.8.3/libexec ./all.bash

成功した。

$ GOROOT_BOOTSTRAP=/usr/local/Cellar/go/1.8.3/libexec ./all.bash
##### Building Go bootstrap tool.
cmd/dist

##### Building Go toolchain using /usr/local/Cellar/go/1.8.3/libexec.
bootstrap/cmd/internal/dwarf
... 略 ...

##### API check

ALL TESTS PASSED

... 略 ...

basic_scaling の idle_timeout について #GAE

試したメモ。

app.yaml のドキュメントをみると、以下のように書いてある。

app.yaml#basic_scaling

idle_timeout
  Optional. The instance will be shut down this amount of time after receiving its last request. The default is 5 minutes.

  任意。 インスタンスは、最後の要求を受信した後、この時間をシャットダウンします。 デフォルトは5分です。(Google 翻訳)

受信とは…🤔

  1. 最後のリクエストを受け付けてからN分後にシャットダウンするのか
  2. 最後のリクエストを完了してからN分後にシャットダウンするのか

おそらく b だと思うけど、分からないので簡単に試した。

結論

b の最後のリクエストを完了してからN分後にシャットダウンする が正しい。

検証ログ

以下のように basic_scaling の設定をした app.yaml を用意して、

# app.yaml
... 略 ...

instance_class: B1
basic_scaling:
  idle_timeout: 1m # 5分だと長いので1分に設定
  max_instances: 1

handlers:
- url: /_ah/start # basic_scaling 用
  script: _go_app
  login: admin

- url: /path/to
  script: _go_app
  login: admin

... 略 ...

/path/to にアクセスする。

func PathTo(w http.ResponseWriter, req *http.Request) {
    ctx := appengine.NewContext(req)
    for i := 0; i < 20; i++ {
        log.Infof(ctx, "sleep... i:%v", i)
        time.Sleep(10 * time.Second)
    }
}

a であれば、最中にシャットダウンされるので、ログが途切れるハズ。

結果

f:id:utahta:20170709125158p:plain

途切れてない:)