『みずいろ』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への要望 この思想が…

Goのhttp.ServerはどのようにGraceful Shutdownをしているか

go

サーバーのプログラムを書いてると、Graceful Shutdown という単語をときどき目にする。 直訳すると「優雅な終了処理」。美しい響き。 サーバーを停止する際は、一瞬で全部止めるのではなく、適切な手順を踏んできれいに停止しましょうということみたい。 し…

Goの import cycle に立ち向かう

Goでは、パッケージの循環参照が禁止されている。 循環参照というのは、パッケージAとBがお互いに参照しあってるという状態だ。 循環参照を持ったままビルドすると、次のエラーが出て失敗する。 import cycle not allowed なぜ循環参照が禁止されているのか …

Go + GStreamer でお手軽 WebRTC 体験

P2Pベースで低遅延で映像や音声を送れるWebRTCという技術がある。 映像というのは目に見えるものなので、コードを書いて映像が動くとテンション上がる。 しかし、その分映像や音声データの取り扱いはむずかしい。 WebRTCもそうで、「へぇ〜こんなことができ…

RFC4175 (RTP Payload Format for Uncompressed Video)のコードを書いた

春休みの自由研究(?)として、生の動画データをRTPに乗せて送るプログラムを書いていろいろと学んだので書き残す。 RAW Video (Uncompressed Video)とは 直訳すると「生の動画」。その名の通り何の圧縮もしてない動画データのこと。 RAW Videoにもいくつか…

gRPC for .NET Coreを試して統合サポートのありがたみを感じた

.NET Core 3.0にgRPCのサポートが追加された。 元々gRPCのC#対応はされていたはず、何が違うのか?答えはgRPC公式のブログに書いてあった。 https://grpc.io/blog/grpc-on-dotnetcore/ Unlike the existing C-Core based implementation (Grpc.Core), the ne…

GoのCLIツールとgo get

goでネストしたパッケージの下にCLIツールを作る場合、go get時の挙動がよくわからなかったので試した。 gocmdtest ├── go.mod ├── go.sum └── tools ├── gocmdtestx │ └── cmd │ └── gocmdtestx.go # package main └── gocmdtesty └── cmd └── gocmdtesty.g…

quic-goはどのようにUDPをコネクション指向で扱っているか

TCPは接続相手ごとに1本のコネクション(1つのsocket)を持ち、そこを通路として通信する。 しかし、UDPは異なる。1つのsocketであらゆる通信相手からのパケットを受け取る。 では、UDPで実装されたQUICはどのように接続相手ごとのコネクションを保持してい…

sync.Mutexを使って初歩的なミスで詰まった思い出

go

Goでコードを書いてて、排他制御のためsync.Mutexを使っていた。 テストしてると、ある時点でロック獲得待ちのままずっと止まってしまい「あれ・・・???」てなったので覚えてるうちにメモ。 原因:Lock()するメソッドの中でさらにLockするメソッドを呼ん…

PHPからhandy-spannerに接続する

Google Cloud Spanner、すごいサービスなんですが公式でローカルエミュレーターがないのでローカル環境でのテストが大変。 そこで、@kazegusuriさんがhandy-spannerというSQLite3をバックエンドにしたCloud Spannerのローカルエミュレーター的なものを作って…