macvim の menu のショートカットを消す

macvim を使っている最中に、たまにタイポなのか、make らしきものが実行されていて謎だった。今日それが解決して macvim には cmd+b (メニュー -> ツール -> メイクに定義されている)に :make が割り当てられていた。英字キーボードで cmd に変換を割り当てているので、しょっちゅう cmd を押すのでそれと b ( back ) が一緒に押されたと認識されて make が走っていたのだった。不運すぎる。

macmenu Tools.Make key=<nop>

macvim のオプションを調べたら、上のように設定するとキーバインドを解除できるとしったので、ようやく解放された….。

PLAYERUNKNOWN'S BATTLEGROUNDS

store.steampowered.com

f:id:soh335:20170508173816p:plain

ちょっとした時間にできそうだし、気になってた pubg を買って遊んでみた。一度だけソロドン勝を食べることができた。

これはすごい運が良くて、毎回外れの方に降りているけど、狭まるエリアが毎回ちょっとだけ進んだところだったので、後ろをほぼ気にせず進めたというのが大きい。 あと、途中で 8x スコープを強奪した、最後の 5 人ぐらいの時に他人の場所は把握してたけど、多分こちらは把握されていなかったというのも運がよかった。

残り3人になった時に連続で落としてノーダメージドン勝。

coop でも遊びたいけど、周りで遊んでいる人がいないので寂しい。。。

タイムアウト(キャンセル)を context.Context に寄せてみる

気が向いたので前書いた go のライブラリの一つのタイムアウトの指定(キャンセルも含む)を context.Context に寄せてみた。 (https://github.com/soh335/test-mysqld-docker/pull/6) このライブラリは docker で test 用の mysqld のプロセスを管理するもの。

NewMysqld() を呼ぶとタイムアウトするまで docker で mysql を立てて、ピングが通ったら dsn を知ることができるという流れになっている。

今までは config struct に timeout の指定を入れて渡していた。こんな感じ。( nil だった時はこの config の値をデフォルトで指定してたけど)

config := &MysqldConfig{ Tag: "mysql:latest", Timeout: 30 }
mysqld, err := mysqltest.NewMysqld(config)
if err != nil {
    log.Fatal(err.Error())
}
defer mysqld.Stop()
db, err := sql.Open("mysql", mysqld.DSN())
...

それを context に寄せて見たものがこれ。

ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
defer cancel()
mysqld, err := mysqltest.NewMysqld(ctx, "mysql:latest")
if err != nil {
    log.Fatal(err.Error())
}
defer mysqld.Stop()
db, err := sql.Open("mysql", mysqld.DSN())
...

config の内容が tag しかなくなってしまったので、string として渡すようにした。

個人的には defer を二つ書かないといけないのがちょっと見栄えが良くないな…と感じた。ドキュメントとか関数名次第であると思うけど、直感的に cancel がここでいう NewMysqld だけに効くのか Stop にも効くのか分かりづらいなぁという感じ。大抵 context を渡すのって何かの操作一つだからかな。 そういう意味では、NewMysqld より Start とかの方が context が効く範囲がわかりやすいかも?

まぁ内部だけで使うにしても、標準ライブラリも context に色々対応してきたし使った方が楽なことが多いので、使っていきたいとこ。