生涯未熟

生涯未熟

プログラミングをちょこちょこと。

Protocol Buffersが出力するSwaggerのParameter descriptionを記述する方法

Protocol BuffersでSwaggerを吐くことが出来ますが、その際にParametersの個々のfieldにdescriptionをどうやったら付けれるのかよく分からなかったのでメモ。

どういうこと?

f:id:syossan:20190311192111p:plain

これを追加したかった。

やり方

至極簡単で、OpenAPIのfieldを使ってゴニョゴニョすればいい。

例えば以下のような感じで、protocファイルに記述する。

message HogeRequest {
  uint64 id = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {description: "Test hoge"}];
}

簡単なことだけど、これに気付くまでにめちゃくちゃかかった・・・

Docker ComposeのProject Nameにハイフンを使わない方が良いという話

皆さん、Docker使ってますか?僕は新天地でバリバリDocker使うことになりそうなので慌てて復習していたりします。

さて、そんな中Docker Composeで見事にハマってしまった罠があったので、Project Nameにハイフンは使わないようにしましょうという話をします.

どういうこと?

Docker Composeは作成されるcontainer imageの名称が以下のように決められています。

{プロジェクト名}_{サービス名}_{連番}
  • プロジェクト名 (Prefix):デフォルトでは docker-compose.yml を置いているフォルダ名が使用される。
  • サービス名:docker-compose.yml に書いた任意の名前が使用される。
  • 連番 (Suffix):スケールする際に連番で付与される。

(https://qiita.com/ymm1x/items/56961f8e2ffb48b8dbe3 より引用)

で、プロジェクト名ってよく hoge-system みたいにハイフンを間に噛ませるじゃないですか?
その状態でnetworksとか設定してしまうと、ホストからコンテナのIPアドレスを取得する時によく使う docker inspect --format "{{.NetworkSettings.Networks.hoge-system_networks.IPAddress}}" hoge-system_service_1 とかがパースエラーになって実行出来ないのでよくないという。

どうすればいいの?

単純に .env とかで COMPOSE_PROJECT_NAME=hoge_system にしとくとか、docker-compose実行時に -p オプション指定してプロジェクト名をアンダーバーのものにしとくと良いです。

Go 1.12で個人的に気になったところを触ってみた

Go 1.12来ましたね。

色々変更点はあるんですが、個人的にベンチマークの実行回数が指定出来るようになったのがオッとなり触ってみました。

実行コード

簡単なコードで試してみます。

package main

func Calc(x, y int) int {
    return x + y
}
package main

import (
    "testing"
)

func BenchmarkCalc(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Calc(b.N, b.N)
    }
}

足し算するやつです。

試す

まずは今までやっていた実行秒数指定から。

$ go test -bench . -benchtime=5s
goos: darwin
goarch: amd64
pkg: hoge
BenchmarkCalc-8         10000000000              0.35 ns/op
PASS
ok      hoge      3.516s

5秒間回せました。
次に5回実行するようにやってみましょう。

$ go test -bench . -benchtime=5x
goos: darwin
goarch: amd64
pkg: hoge
BenchmarkCalc-8                5                53.0 ns/op
PASS
ok      hoge      0.006s

おー!5回実行できてますね!!
ただ、あまりにも少ない実行回数だと1回あたりの実行時間が大きくなってしまうみたいですね・・・

ちなみに10000000000回だと

$ go test -bench . -benchtime=10000000000x
goos: darwin
goarch: amd64
pkg: hoge
BenchmarkCalc-8         10000000000              0.35 ns/op
PASS
ok      hoge      3.541s

先程の実行時間指定でベンチマークしてみた値と同じになりました。

まとめ

これが実装された経緯が

github.com

これだと思うのですが、Russ Cox氏の反論とか見てると面白いですね。
正直、僕も実行回数指定出来てもあんま意味ないんじゃないかと思っとります。

取り急ぎ、現場からは以上です。

有料note販売のそれから

先日、こんなnoteを販売しました。

note.mu

その後、あれよあれよと私の予想を大きく上回って売れてしまい、売り上げがこんな額になってしまいました。

f:id:syossan:20190226145556p:plain

買っていただいた皆様ありがとうございます!そこまで大したことを書いていない内容で数百人の方に買ってもらって恐縮の極みです・・・
正直、こんな額を自分のために使うのはなんだか気が引けるな・・・と思ってしまい、ちょっと使い道を考えております。

  • 若いエンジニアに向けて還元する(ご飯に連れてったり?若者の技術話も聞けるチャンスが🤔)
  • エンジニア界隈全体の貢献になるようなことに使う(自分が日頃お世話になってるOSS投げ銭したり?)
  • 賞金争奪ハッカソンを開く(運営が面倒くさい・・・かな?)

なんか「こんな使い道あるぞ!」って方は @syossan27 までお知恵を貸して頂けると幸いです・・・🙇