Verethragna(ウルスラグナ)開発雑記
久々にエンジニアらしく開発雑記など。
ブログの記事などいつぶりでしょうか。TwitterがXになってちょっと先行きが分からなくなってきたことで、この記事も数年後に見た時はその頃はそんなこともありましたなー、的な感じになるんでしょうけど、TwitterをメインのSNSにしようかと思ってたところにコレなんでタイミング的にアレで。なので引き続きXも使いますけどブログも併用もしてこかなと。
さて、久々に記事を書き始めてまずはエンジニアと肩書を書いてみたんですが、暫くエンジニアって肩書から離れており、どっちかっつーと経営者的な立場が多い感じになってたんですけど、私に近しい方はご存じの通り、昨年末くらいからガッツリとコードを書くような仕事になりましたのでしっかりとエンジニアやってます。もう今年で50なんですけど。まー、作業内容的にはプログラマーかもしれんとかも思いつつソフトウェア・エンジニアとかのエンジニアとゆー響きが好きなんでこっちを使っており。トニー・スタークも言ってましたし。但し、プログラマーという響きも嫌いではないのでケースバイケースとゆー感じで。
さて、本題で。本題までが長い。先日、ウルスラグナ(Verethragna)をバージョンアップしました。新しいバージョンは「0.8.0」で。ウルスラグナはご存じの通りのRATH製ですので他の案件とも影響があり様々な考慮が必要なんですが、そのいくつかの要素により0.6.0以降はかなりパフォーマンスが下がっておったんです。何とか回避しようと模索してたんですが良い策がなかなか見つからず。まあぶっちゃけその要素の1つがHTTP通信化だったんですけどね。
HTTP通信にすることで何がプラスになるかと言いますと明確には2つ。1つは将来的にクライアントをブラウザ対応できる近道であること。もう1つはHTTP通信することでプロキシの通過が可能となりえること。ブラウザ対応は色々と模索してみたんですけど技術的にちょっと先になりそうでしたのと、プロキシの方も色々と調べてたんですけど、WebSocketが一般化となっている今の状況において、プロキシもWebSocketは443ポートでSSLのところを通してくださいよ、中身は見えないですけど、それか例外的に、的な感じですしそもそもWebSocketもHTTPに準拠でもないですし。まあ、てことでHTTP通信は一部を残してウルスラグナ自体に大きく影響がない範囲で元に戻しても良いかなとゆーことにしまして。良く分からない書きぶりになってますけど察してください。
で、あともう1つ気になってたのが、6年ぶりくらいに懐かしのグングニル(Gungnir)のソースコードを見てたら、思ってた設計と違ってて、ワシこんな風にしたっけな?的な感じで、ますますなぜこれでこのパフォーマンスが出るか謎だったんです。具体的にはマルチスレッドになってると思ってたところがシングルスレッドで。このシンプルでまあまあの負荷で高パフォーマンスのこの仕組みをウルスラグナに実装しよかなと思うようになりまして。もちろんウルスラグナの従来の仕組みも良かったんですけどね、ちょっと負荷の問題と設計の複雑感が。まあ元々はウルスラグナもグングニルの一部をベースにしたとこもありましたもので良いとこどりにしたろかなと。
実は前にも何回か移植を試みたことがあったんですがその時は思ったほどの効果が得られず。で、今回はソースコードを数行ずつ移植するような感じで慎重に確認と調査を進めた結果、いくつかポイント(DLLの部分とかVFWの部分とかエンコードの部分とか暗号化の部分とか)を見つけることができてそれらを対応してウルスラグナの「0.8.0」が出来上がったというワケです。ちなみにグングニルはWinSock1なんですけどウルスラグナはWinSock2を使っているのでその辺の通信周りも全部見直しで。結局ウルスラグナはWinScok2のままです念のため。
そんなこんなで今回のウルスラグナの「0.8.0」はなかなかの自信作となりましたとゆーお知らせなんです。