Argo CD が Kubernetes の廃止予定APIを呼ぶ原因を探る

Kubernetes v1.22 では結構多くのAPIが廃止1され、慎重なアップグレードが求められる。 その補助として、最近出たGKEの新機能 Deprecation Insights を使うと便利だ。 v1.21 等のGKE clusterで廃止予定のAPIが使われていないかチェックしてくれる。 あるGKE…

プログラムがGCP上で実行されているかを判定する

gcp

サーバーアプリケーションを開発していると、現在動いている環境がクラウドか、ローカルかで処理を分けたい場合がある。 自分はよくGCP (Google Cloud Platform) を利用しているが、今動いているのがGCP上なのか判定したい場面が何度かあった。 クラウドの場…

overlayfs を用いたクラウドゲームのデータ管理

クラウド上でゲームを動かす場合、データ(ゲーム本体のデータ・セーブデータ)をどう管理するかは重要な課題のひとつだ。 そこで、自分が開発に携わっているOOParts のデータ管理を支える技術について紹介する。 ノベルゲームのセーブ事情 OOPartsで提供さ…

Agones はなぜ、どのようにPodへの直接接続を実現しているか

Kubernetes上でゲームサーバーを扱うframeworkのAgones は ゲームサーバーに直接(TCP or UDPで)接続する 機能を持つ。 ゲームサーバーの実体はPodだが、なぜPodへの直接接続が必要なのか、そしてAgonesがどのように直接接続の機能を提供しているかを読み解…

fly.io に Pleroma を設置する

さいきん fly.io というサービスが面白くて触っている。 これはHerokuやCloud Runに近いPaas (CaaS?) で、Dockerfileとちょっとしたconfig fileを用意するとアプリをインターネット上にデプロイできるサービスだ。 個人的にすごい(面白い)と思った特徴とし…

minikube上にログイン不要のGrafana (with Prometheus)を速攻で立てる

Prometheus exporterの動作を検証したい場合など、ローカル環境のKubernetes(minikube)上にPrometheus + Grafanaを立てたい場合がある。Grafanaはデフォルトでユーザー認証が入っているが、ローカル環境では自分しか触らないので認証が邪魔なときがある。 …

Rust: tokioを使って独自プロトコルのメッセージを受け取るTCPサーバーを作る

オンラインゲーム開発などで独自プロトコルのデータを読み書きするTCPサーバーを作ることが時々あるが、 Rustのtokio を使うとそのようなTCPサーバーがとても簡潔に記述できる。 独自プロトコルといっても様々だが、TCPのようなストリーム指向の経路の場合あ…

CSS: 大きさの異なる画像をいい感じに敷き詰めて並べる

css

大きさの異なる画像がギャラリーのように並んでいて、それぞれの画像がぴったり敷き詰められているレイアウトが実現したくてやり方を調べた。 FlickrのExploreページのようなイメージ。 https://www.flickr.com/explore 昔はこういったレイアウトの実現は複…

ノベルゲームのテキストをリアルタイムに抽出するツール Textractor がすごい

Textractorというノベルゲームのテキストをリアルタイムに抽出するツールがある。 https://github.com/Artikash/Textractor このツールは起動中のノベルゲーム内のテキストをリアルタイムに抽出し、翻訳の結果も一緒に出してくれる。 海外のノベルゲームファ…

Windows: memory-mapped fileの中身を直接見る

Windows APIの CreateFileMapping ではファイルハンドルに INVALID_HANDLE_VALUE を渡すと実在しないファイルをmemory-mapped fileとして扱うことができる。たとえば次のコードを実行すると MappedFileTest という名前でmemory-mapped fileが作られる。 Crea…

2021年の技術的ふりかえり

年の瀬になったので、あらためて今年学んだ技術を振り返っていく。 クラウドゲーミングの開発 2021年はほぼ全てOOPartsのクラウドゲーミング (Black Game Streaming Engine v2 )の開発に費やした。 経緯は id:oliver0521 によるCEDECの発表の通りで、Windows…

Go Conferenceでクラウドゲーミングな発表をした

go

Go Conference 2021 Autumn で Cloud Gaming Platform with Goという発表をした。 speakerdeck.com OOParts のインフラコストが問題になり、2021年に新たにクラウドゲーミングのエンジンを作り直した。 くわしい経緯は以下の資料にまとまっている。 迫り来る…

GitHub CLIにコントリビュートした思い出

もうけっこう前のことになるが、GitHub CLI に新機能を追加するパッチを送信した。 pr create コマンドにおいて --body-file フラグを追加しファイルの中身をPull Requestの本文として入力可能にする、というものだった。 Add `pr create --body-file` flag …

Open MatchのBackfill機能

マッチメイキング実装のOSSであるOpen Match に Backfill という機能が追加された。 Backfill 機能の概要については公式ドキュメントに解説がある が、文章だけ読んでも実装が想像つかず結構苦戦したので Backfill 機能が作られた背景と自分なりの実装の解釈…

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

go ci

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