Pull Requestを出すとGoのベンチマーク結果の比較をしてくれるCI Job

go ci

Goには標準でベンチマークを取る機能 がある。 次のように go test のオプションとして実行できる。 go test -bench . また、標準には入ってないが複数のベンチ結果を比較してくれる benchstat というツールもある。 go installですぐに導入でき、2つのベン…

Go: selectでctx.Done()を受信するときの注意点

go

Goで非同期的な処理の中断を検知したい場合、次のように select と ctx.Done() を使って書くことが多い。 とても便利なパターンなのだが、いくつか使うときの注意点がある。 select { case <-ctx.Done(): // done case <-ch: // ... } selectによる受信のラ…

Ayame互換の WebRTC Signaling Server "ayu" を作った

AyameというWebRTC Signaling Serverの実装がある。 Web側のSDKとサーバー側の実装が両方公開されており、プロトコルの仕様も文章化されている。 GitHub - OpenAyame/ayame-web-sdk: Ayame Web SDK GitHub - OpenAyame/ayame: WebRTC Signaling Server Ayame…

AgonesとKustomizeを同時に使うときのTips

Kustomizeには ConfigMapGenerator, SecretGenerator という機能がある。 これを使うと、yamlの定義からconfigMap(またはsecrets)を自動生成してくれる1。 たとえば、kustomization.yaml にconfigMapGeneratorの定義で the-map という名前のconfigMapを作…

Puppeteerで何かおかしいときはとりあえずスクショを出す

PuppeteerはJavascript内でGoogle Chrome(のようなもの)を起動できるすごいツールで ブラウザを使って手動でやっていた面倒な作業が自動化できたりする。 しかし、実装ミスやサイトの仕様で特定の要素が現れるのを待機したまま止まってしまい、タイムアウ…

Open Matchを使ったローカル開発を考える

この記事はGoogle Cloud + Gaming Advent Calendar 2020 13日目の記事です。 Googleからゲームのマッチング用フレームワークであるOpen Matchがリリースされた。 このOpen MatchはKubernetes環境で動作することで現代のCloud Nativeな環境に適した構成となっ…

channelを使うテストで無限待ちしないようにする

go

Goで並列に動くものをテストしたいとき、順序を一定に保つためにchannelをよく使う。 しかし、実装を間違えるといつまでもchannelの送受信が終わらずに無限に待ち続けてテストが止まることがある。 あちこちでchannelの送受信をしていると、どこで止まったの…

クリップボードの画像を楽にリサイズするツールを作った

クリップボードの画像を楽にリサイズして、リサイズ後の画像をコピーし直すツールを作った。 GitHub - castaneai/relights: Simple clipboard image resizer きっかけ Macでスクリーンショットを撮ってブログに貼り付けたい場合、Cmd + Shift + 4を使って指…

PulseAudio (32bit版)がDocker上で動作しない問題の解決法

PulseAudioの32bit版(i386 build)をDockerで動かそうとするも、うまく動かなくて苦労したので書き残しておく。 TL;DR dokcer run のオプションに --security-opt seccomp=unconfined をつけたら解決する ただし、セキュリティ理由の制限を外すことになるの…

『みずいろ』HDDフォーマット事件は本当だったのか検証する

あるとき、ネット上でこんな事件の噂を発見した。 『みずいろ』 HDDフォーマット 事件 エロゲー業界を彩る悲惨な事件は数多あれど、威力と内容を考えて4番を張れるものといえば、やはりこれだろう。2001年、ねこねこそふとから発売された『みずいろ』初回ロ…

fridaでお手軽Windows APIトレース

プロセスが呼び出している特定のWindows APIのログを取りたい場合、fridaというツールが便利。 fridaは次のような特徴がある。 Windowsだけでなく、Linux/Macにも対応している トレース対象の関数の引数や返り値をJavascriptで制御できる 引数や返り値を書き…

Agonesの挙動をGoでテストする

Agones を使って開発をしている最中、Agonesの細かな挙動についてテストしたくなる時があった。 Agonesはクイックスタート的な小さなサーバーでも動かすのに結構な手間が必要で、パラメータを少しずつ変えながら意図した挙動になっているかチェックする…とい…

sync.Pool が返す値はポインタにするべき?

go

Goの標準パッケージには sync.Pool というものが用意されている。 これは、一度生成したものを使い回すような最適化を可能にするもので、 Pool.Newに生成処理を書くとGet() でプールから取得、Put() でプールへ返却ができる。 sync.Poolを使うことで700%(!)…

Agones は何であって、何でないか

Googleが Agones というプロジェクトを進めている。 また、Google Cloud Game ServersというGoogle Cloud上でAgonesを管理できるサービスを発表したことで話題になった。 このAgonesというプロジェクトが何をするもので、何をしないものなのか? 公式サイト…

scrapbox の擬似的な書き込みAPIを作る

Scrapbox、いろいろな用途につかえて便利だが、Scrapboxには書き込みAPIがない。 実はこれは今後実装予定とかでもなくて、Scrapboxの思想に合わないので、実装されていない ということらしい。 APIでページを作成・更新したい - Scrapboxへの要望 この思想が…