NATSを触ってみた
NATSはCNCF(Cloud Native Computing Foundation)によってホスティングされているメッセージングシステムです。軽量で高パフォーマンスかつスケーラブルなのが特徴だそうです。オランダのSynadia社が中心となって開発を行っていますが、オープンソースソフトウェアなのでGitHub上で今トリビュートすることもできます。 Go、NodeJS、Ruby、Java、C、C#、Nginx用のクライアントライブラリはSynadiaによってサポートされており、そのほかにもPythonやElixir用のクライアントなどが存在します。 NATSのサーバ自体(gnatsd)はGoで書かれているため、バイナリ一つで起動できるほか、、公式DockerコンテナイメージやKubernetes用のOperatorも用意されているため、簡単に構築・運用することができます。 本記事でも、

初めての自作ケーブル
こんばんは。以前記事にしたように、現在、職場でErgodox EZというキーボードを使用しています。これは元々は自作キーボードの一種で、左右分割型のキーボードです。 Ergodox EZでは、右のキーボードと左のキーボードはTRRSケーブルという、4極のイヤホンケーブルみたいなケーブルで接続されています。今まではとりあえず購入時に付属していたケーブルを使用していたのですが、だんだん肩が開いてきて、長さが足りないなーというお気持ちになってきました。どうせならおしゃれなケーブルがいいなぁと思いながら通販サイトで探したのですが、このTRRSケーブル、あまり需要がないのか、種類が多くありません。 じゃぁ自作キーボード勢はどうしてるのだろうか、と思って調査したところ、諦めて売っているものから選ぶか、自作するか、という選択肢のようでした。自作すれば自分好みの色や長さで作れるし、ケーブルくらいなら作れそう!

zero memory allocation slice filtering
次のように、あるスライスをフィルタリングする関数を書くことがあると思います。 func FilterFoo(arr []string) []string { b := []string{} for _, e := range arr { if IsFoo(e) { b = append(b, e) } } return b } 簡単なベンチマークを書くとわかるように、この関数は返値となるスライスの長さ+1回のメモリアロケーションを行います。

Majextand
ラップトップスタンド、というものをご存知でしょうか。いわゆるノートPCを傾けたり、高さを変えるために使用するアイテムです。折りたたみができるものや、PCに貼り付ける小型のものなんかもあります。 貼り付け型のものとしては、Kickflipが人気です。 今回紹介するのも貼り付け型で、その名もMajextandといいます。 特徴としてはとにかく薄い。そしてその薄さにも関わらず、6段階の高さ調整ができる、という点です。 まずはパッケージ。すっきりとしたパッケージです。商品名をggって出てくるブログに掲載された写真では何やら筆文字で書かれているようなパッケージが見られますが、現行品ではなくなったようです。 裏面はこんな感じ。スタンドを使用して画面を高くすることで猫背を防ぎ、頚椎の姿勢を正します。また、18インチ以下のラップトップであれば基本的には使用できます。非常に薄いため、インナーケースなどに入れる場合にも引っかかりません。

年越し鴨南蛮
もう1月も半ばを過ぎ、まもなく2月が来る、というところで今更感を拭うことができない話題なのですが、2018年末(実は時間的には年が明けていたが)に年越しそばとして鴨南蛮を作りました。 さて、鴨南蛮なので鴨肉が必要です。今回はbuildersconの肉会などでお世話になっているミートガイさんから鴨の胸肉を購入しました。 こちらが回答した鴨肉をAnovaでやったやつです。温度は忘れたんですが、大体1~2時間くらいやったやつです。 軽く塩をした後、熱したフライパンで焼き目をつけていきます。皮を下にして、高めの温度でさっとやります。 焼き目をつけた鴨肉です。いい色ですね。 油がたくさん出ます。 鴨から出た油でネギを焼きましょう ネギを焼いている間に鴨を切ります。幸せのため少し厚切りにしましたが、鴨はすこし薄めでもいいかもしれないです。 最後にそばの上に盛り付けて完成。

jessevdk/go-assetsでファイルを埋め込む
Go言語の素敵なところの一つとして、最終的な成果物を1バイナリに収めることができる、という点にあると思う。結果として、非常に簡単にコマンドラインツールなどを配布することができる。 しかし、例えばコード生成を行うようなツールでテンプレートファイルを別途持っているような場合や、アプリケーション中で使う画像などを含む場合など、Goのソースコード以外のファイルを必要とする場合、全てを1ファイルで、とはいかない。 そのような場合に便利なのがjessevdk/go-assetsである。以前は多くの人がgo-bindataを使用していたと思われるが、作者がやめてしまったため、使えなくなってしまった。代替としてこれが便利。 jessevdk/go-assetsを使用するには、まずjessevdk/go-assets-builderを使用する。これは、指定したファイルをGoのソースコードに埋め込んで、それらを扱うためのAssetsというオブジェクトを作成してくれるツールである。 インストールは簡単で、

きちんとやるnet/http
皆さん、net/httpパッケージは使っていますか? Go言語の標準パッケージであるnet/httpはPythonなどの標準HTTPパッケージに比べ、人間にとっても取り扱いがしやすいため、そのまま使用している方が多いかと思います。 しかし、このnet/httpパッケージ、簡単に使えるように見えて結構落とし穴が多いのです。 1. Response Bodyはクローズする必要がある 次のコードを見てみましょう。 resp, err := http.Get("https://example.com/api"

gitにもaliasの指定ができる件
tl;dr .gitconfigにもaliasの登録ができる [alias]ブロックにaliasを登録する tagsで単数・複数の悩みを解消する discardで変更を取り消す unstageでaddを取り消す uncommitでcommitを取り消す ignoreで.gitignoreを生成する git aliases この記事は今すぐalias登録すべきワンライナー by ゆめみ① Advent Calendar 2018の6日目の穴埋め記事です。 こちらのアドベントカレンダーは今すぐalias登録べきワンライナーということで、みなさん.bashrcや.zshrcのaliasについて記事を書いてらっしゃいますが、実は.

git repositoryの初期化ルーチン
おそらくみなさんもgit repositoryを作る時、毎回だいたい同じような手順で初期化をするのではないでしょうか。 メモがてら、自分の初期化ルーチンをまとめておきます tools 使用しているツールは以下の通り: hub : .zshrcでgitコマンドにエイリアスを張ってます gitignore.io : 先日記事を書いたように、git ignoreコマンドとして使ってます git-license : 自作のサブコマンドです routine # 新しいリポジトリ用のディレクトリを作成 $ mkdir new-repository $ cd new-repository $ git init # GitHub上にnasa9084/

x/crypto/openpgpでデータを暗号化する
OpenPGPはPGP(Pretty Good Privacy)をベースとした暗号化フォーマットです。 Go言語でもgolang.org/x/crypto/openpgpという準標準パッケージで提供されています。 PGPは公開鍵暗号としてメールの暗号化等でよく使用されますが、パスフレーズを用いた対称暗号として使用することもできますので、今回はこちらを紹介します。 TL;DR 暗号化にはSymmetricallyEncrypt()を使用する 復号にはReadMessage()を使用する prompt次第で無限ループする恐れがあるので注意 暗号化 x/crypto/openpgpパッケージでパスフレーズを用いてファイルを暗号化するには、SymmetricallyEncrypt関数を使用します。

Generator Pattern
Generator PatternはGo言語における並列処理パターンの一つで、goroutine-safeな値列の生成などに使用することができます。 コードを見た方が早いと思いますので、コードを掲載しましょう。 次の例は複数のgoroutineから共通の連番を採番したいときに利用することができます。 func GenInt(ctx context.Context, max int) <-chan int { ch := make(chan int) go func() { defer close(ch)

LINE DEVELOPER DAY 2018に参加した
LINE DEVELOPER DAY 2018はLINEの技術に関して紹介するイベントで、2018年11月21日に開催されたので、参加してみました。 八芳園開催地は白金台の八芳園です。初めて来たのですが、厳かな日本庭園なんですね。ちょっと気後れしてしまいます。 DevDayのれん八芳園の入り口にはDEVELOPER DAYのロゴ入り暖簾が下がっていました。 道ばたにたたずむDevDay行灯?灯籠?道案内の方が持つ提灯もDevDay仕様でした会場の建物に向かうには庭園を抜ける必要があり、八芳園を少しですが楽しめるのはなかなか良かったように思います。 受付。茶会のような雰囲気を感じます受付の直後に休憩所的なものが。ここで休憩する人はいるのでしょうか?大きい提灯もありました。雨じゃ無くて良かったですね受付は外にあり、非常に良い雰囲気でした。雨だったとしても建物の中でやれる様なプランはあったのでしょうが、雰囲気が大きく変わっていたと思いますので、雨じゃ無くて良かったですね。

git ignoreコマンドで.gitignoreを取得する
割とみんな知ってるのかもしれないですが。 git-xxxという名称で実行可能ファイルをパスの通ったところに配置すると、git xxxというgitのサブコマンドの形で実行することができるようになります。これを利用したのが拙作git-licenseで、git license [option] license_name > LICENSEの形で実行するとLICENSEファイルを簡単に作成することができます。 その他、git configでエイリアスを指定して、サブコマンドとして登録することも可能です。 同様にして、git ignoreで`.gitignoreファイルを簡単に取得できるようにしてみましょう。 おそらく現代では多くの人が.gitignoreの生成やテンプレート化をして、あるいはテンプレート化されたものを利用しているのではないでしょうか。GitHubのWUI上でリポジトリを作成するときにも生成することができますし、そのさい使用される.

jessevdk/go-flagsでサブコマンドを実装する
Go言語を用いてコマンドラインツールを開発する際、皆さんはフラグのパースやサブコマンドの実装にどんなパッケージを使用していますか?標準のflagパッケージのほか、、spf13/cobra、alecthomas/kingpinなどもよく使われているようです。 私は専ら、jessevdk/go-flags(以下go-flags)を使用しています。 go-flagsはその名の通り、基本的にはオプション/フラグの解析用パッケージで、ドキュメントもフラグ解析に関するものがほとんどです。 しかし、go-flagsでは、サブコマンドの実装も可能です。今回はこれに焦点を当ててご紹介していきます。 go-flagsでは、親コマンドにサブコマンドを登録する、という形でサブコマンドを実装していきます。サブコマンドは構造体として実装し、それぞれがオプションを格納する構造体を兼ねる形となります。

Ergodox EZを購入した
割と今更感もなくはないのですが、Ergodox EZという分割キーボードを購入しました。 Ergodoxは基本的には自分でパーツを揃えて組み立てる、いわゆる自作キーボードの一つですが、オープンソースで設計などが公開されており、その設計を使って完成品を販売しているのがErgodox EZです。 今回は公式サイトから購入しました。 構成は次のようなものです。 Color: BLACK Tilt kit/Wing Rest: YES Keycap: Blank Switches: Cherry MX Blue 以上で$325、
