VRChatでOSCがサポートされ、アバター動かせるようになるみたいなので、通信実験してみる2

昨日の、

momoandbanana22.hatenablog.com

これの続き。

docs.vrchat.com

↑を読んでみると、送信するプログラムとして「TouchOSC(TouchOSC | hexler.net)」が、受信するプログラムとして「protokol(Protokol | hexler.net)」が紹介されているので、これを使ってみましょう。

TouchOSCで開けるファイルがOSC Avatar Parametersで紹介されているので、これもダウンロードしてください。(https://github.com/vrchat-community/osc/raw/main/files/touch-osc/vrc-emote.tosc)

TouchOSCを起動して、ダウンロードしたvrc-emote.toscを開いてください。▶を押して実行します。

f:id:momoandbanana22:20220219132836p:plain
TouchOSCでvrc-emote.toscを読み込んで実行

protokolを起動して、上部のOSCを選んで、PORTのところに9000を入力して、Enableの左の空白をクリックして✅にします。すると、下の一覧のところにCONNECTと表示されます。

f:id:momoandbanana22:20220219133113p:plain
protokolで受信

この状態で、TouchOSCの赤いボタン?をクリックすると、UDPの電文が送信され、protokolにその電文が表示されます!やったー!できたー!

f:id:momoandbanana22:20220219133431p:plain
一番右の赤いボタン?をおしたところ

たぶん、一番左のボタンが0で、一番右のボタンが15なんでしょうね。ボタン0がOFFになったときにINT32(0)が送信されて、ボタン15を押し込んだときにINT32(15)が送信されて、ボタン15を離したときにINT32(15)が送信されているようです。

ADDRESSのところが/avatar/parameters/VRCEmoteになっていて、OSC Avatar Parametersで書かれているアドレスになっていることがわかります。

これで、「送信する」ことと「送信されているかどうか確認する」ことができるようになりました。

~今日はここまで~

VRChatでOSCがサポートされ、アバター動かせるようになるみたいなので、通信実験してみる

hello.vrchat.com

OSCっていう通信方式があって、その通信ができるようになるみたいです。たとえばMIDIキーボードの鍵盤を押したら、(それをOSC通信を使ってアバターに送って)(アバターはそれを受けられるように作っておけば)アバターの表情を変える、みたいなことができるようになるようです。

docs.vrchat.com

↑をみるとUDPプロトコルでポート9000を受信するのがデフォルトのようです。(起動パラメータで変更できるみたいですね)

まずは、localhostのポート9000にUDPで送信する方法を探してみましょう。

linuxならnc(netcat)っていうコマンドがあると思うので、これを使って、UDP/9000に送信できます。

$ echo "abcdefg" | nc -u localhost 9000

こんな感じ。これをwindowsで実行するには、nc.exeを使う必要がありますが、下記の通りgithubで公開されているのですが、ネットワーク通信を行うプログラムなのでセキュリティ的にブロックされてしまってダウンロードできなかったり、実行できなかったりするかもしれません。

github.com

ですので、わたしは、wsl上で実行しました。

送信出来てているかどうか確認するために、Wiresharkをインストールしましょう。

www.wireshark.org

初めてインストールするならWinPcapも必要ですね。

www.winpcap.org

f:id:momoandbanana22:20220217215755p:plain
キャプチャ

はい、できました。wsl上からwindowsに送信するために、

$ echo "abcdefg" | nc -u 192.168.1.2 9000

としてIPアドレスを指定しました。そして、windows側では受信していないので、unreachableになっていますが、パケットが送信されていることが確認できました。

次回はwindows側が受信させてみましょう。

~今日はここまで~

レガシーコード改善ガイド

本を読み始めたので、読みながら自分用のメモを書いていきます。

前書き

この本に「(古いコードが)質の向上するソフトに変える方法が書かれている」ことを前書きが教えてくれます。

(序)

  • 人生を変えるほどのソフトウェアへの情熱
  • プログラミングは楽しい、素晴らしい
  • プログラマの心のなかで穢れのない水晶のように輝いていた設計

(破)

  • ソフトウェアは、汚く滅茶苦茶になってしまう
  • 顧客が要求を変えたから
  • 要求の変更に耐えられない設計は、悪い設計
  • 変更に耐えられる設計は、難しい
  • 変更に耐えられず腐敗したコードを「レガシーコード」と言う
  • レガシーコードって嫌だよね
    • レガシーコードに取り組む苦痛のせいで、プログラミングの情熱の炎が消されてしまうかも

(急)

  • コードがレガシーになることを「防ぐ」方法をさがしたけど、防ぐだけじゃ不十分
  • コードがレガシーになることを「逆戻りさせる」必要がある。これが本書のテーマ
  • 簡素できちんと構造化された優れた設計のシステムに変えていく
  • 簡単ではない。時間がかかる。手間と忍耐力と慎重さが必要。魔法の弾丸ではない
  • 本書には「規律」「概念」「姿勢」がかかれている。これらによって質の向上するソフトウェアに変えていくことができる

はじめに

  • コンピューターで何かを動かすという純粋な喜びが、あなたをこの仕事に就かせた理由かな?
  • でも、その喜びの中で仕事ができていますか?日常の中で埋もれていませんか?
  • 頑張ってはいるものの、レガシーコードを書いてしまっています。
    • スケジュールのプレッシャー
    • 過去のしがらみ
    • 見本となるすぐれたコードがない

レガシーコードとは

レガシーコードとはテストのないコードである

  • テストがないコードは悪いコード
    • 以下は無関係
      • どれだけうまく書かれているか
      • どれだけ美しく設計されているか
      • オブジェクト指向かどうか
      • カプセルかされているかどうか
  • テストがあれば検証しながらコードの動いを素早く変更することができる
    • テストが無ければ、(コードを変更しても)良くなってるのか悪くなってるのか分からない
  • 綺麗なコードのほうがいいけど。
※コメントは、他の読者さまにも有益と思われるもののみ承認・表示とさせていただきますので、ご了承くださいませ。