タイトル: 仕事にぴったりの道具、IJF向けのGo言語ツール開発
元の記事はこちらで公開されています:仕事にぴったりの道具、IJF向けのGo言語ツール開発
最近、新しいツールを作り始めました。それは、国際柔道連盟(IJF)のTVグラフィックソフトウェアが受信し画面に表示するUDPデータパケットを送るものです。通常、こうしたパケットはイベントで4つのスコアボードシステムから送信されます。
このツールが必要な理由は、グラフィックソフトウェアをテストするにはデータパケットが必要だからです。
つまり、スコアボードソフトウェアを実行する4台のコンピュータが必要です。これは不便で、スコアボードの手動操作も必要です。イベントで、特定のラップトップが広範なシステムと通信できることを確認するのには正しい方法ですが、バグ調査や変更を加えた後の回帰テストにはあまり便利ではありません。
元々私はPerlをよく使う言語としていました。
でも正直なところ…快適とは感じませんでした。もう一つの感覚は、このツールを人と共有したいということでしたが、Perlは非技術者にとって移植性が高くないことが難点です。NodeJS(ライブストリームのグラフィックスが書かれているもの)も考えたのですが、こちらも移植が困難なことがあります。
ですので、良いネットワークライブラリを持ち、移植性の高い言語を探していました…そして、動作するプロトタイプを作れそうな言語でもあります。
Goには標準ライブラリとしてネットワーキングが含まれているので、サードパーティのモジュールを探す必要はありません。Goは単一の実行可能ファイルにコンパイルされ、私のLinuxワークステーションからWindowsのexeファイルを簡単にビルドできました/できます。最後に、以前Goを書いたことがあり、良く知る友人もいるので、使える道具だと感じました。
そうして、ある土曜の朝、手にコーヒーを持ちながら作業を開始しました。
幸運にも、既にこの分野を歩んだ人がいました。Mihalis Tsoukalosのブログにより、私は足がかりを得ることができました。
彼のガイドのもと、サーバーとクライアントのペアを素早く構築し、go run server.go
を使ってスコアボードソフトウェアから送信されてくるパケットの内容をすぐにキャプチャできました。
これらのパケットをテンプレートとして、"クライアント"コードを変更してパケットを送り出し、最小の調整の後、視聴者がオンラインで視聴する動画にオーバーレイする私たちが使うグラフィックスシステム上でパケットデータが表示されるのを目にしました。
これが証明できたので、私はWindows(32ビット)実行可能ファイルをビルドしてテストし、USBスティックからウィンドウズマシンで問題なく動作させることができました。
使命達成!
その後、複数のマット情報を送信するようにしたり、データパケットを微調整するなど、いくつかの調整を加えました。IJF特有の部分をモジュールにリファクタリングしたので、メインコードはかなり小さくなりました:
package main
import (
"fmt"
"ijf/ijf"
"net"
)
func main() {
s, _ := net.ResolveUDPAddr("udp4", "255.255.255.255:5000")
c, _ := net.DialUDP("udp4", nil, s)
fmt.Printf("Broadcasting UDP to %s\n", c.RemoteAddr().String())
defer c.Close()
for {
for i := 1; i < 5; i++ {
packet := ijf.Mat(i)
data := []byte(packet)
_, _ = c.Write(data)
}
}
}
フルスクリーンモードを終了する
ご覧のとおり、シンプルな無限ループがあり、それがコンテストマットごとのパケットを作成し、送信を繰り返しています。
(そしてはい、この記事のためにさらに小さくするために、すべてのエラーチェックのerr
を省略しています)
ウィンドウズのEXEファイルは今、僕の同僚が持っていて、次の週末ジョージアのトビリシで本番環境でテストされます。
次は?
コンフィグファイルを読み込んで特定のスコアボードの状況を送信する変更を始めています;そしてトビリシ後には、イベント中のスコアボードのデータファイルをキャプチャしてそれを再生できる機能を追加する予定です。これは、特定のレンダリングがおかしいという報告があった場合にデバッグツールとして役立ちます。スコアボードの正確なデータを使用し、再生して、テレビのグラフィックソフトウェアが観察、変更、テストできるはずです。
週末のプロジェクトは本当に報われるもので、仕事には最適な道具を選ぶことがいかに重要か(Go言語)、私が最もよく知っている道具(Perl)だけでなく、以前に使われた道具(Javascript/Node)も含めて、を思い出させてくれました。
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/lancew/the-right-tool-for-the-job-building-a-tool-for-the-ijf-in-go-lang-cfh