2022-02-23 (水)
昼まで寝る.
数ヶ月ぶりに冷凍庫が空になったので,冷蔵庫の掃除をしたりした.
そろそろ確定申告の時期か…….
この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. なので実際のものとは何も関係がありません. それから,写真のように見える画像はCGもしくは念写によるものです.
Goでメッソッドを書く時,structがコピーされるのが嫌でレシーバをポインタ型にすることも多かったけど,コンパイル結果見てると小さい関数はほとんどインライン展開されて構造体のコピーはあまり起きないな…….
昔のGoは関数のインライン展開はほとんどされなかったけど,Go 1.9でmid stack inliningが入ったあたりから,大分マシになったっぽい.
Go 1.18 の RC1 が出てたのでそろそろ1.18にしておく.
goplsやdlvをアップデートすればvscode上でgenerics使ったコード書いてもエラーにならなくなった.type parameterのシンタックスハイライトの色がついてないけど,他は問題なさそう.
Chromeでスクリーンをキャプチャしたときの,ビデオトラックのラベル,screen:1:0
みたいな名前になってるけど,これからディスプレイを識別したい.
普通にWindowsのディスプレイ設定で表示されるモニタの番号の順序だと思って,EnumDisplayMonitorsで列挙してみたけど,Chrome上の順序と何か違う…….プライマリディスプレイが0番というわけでもなさげ.
仕方ないので,Chromiumのソース眺めてみたけどスクリーンキャプチャしそうな実装が見当たらない.Chromeにしかないのかと思ったけどWebRTCの実装の中にあった.
EnumDisplayDevicesで列挙された順序っぽい.
最近のWindoesでDPIが異なるディスプレイが混在しているときの,論理座標の挙動がとても難解な気がする.
Windows Vistaあたりから,プログラムから見えるウインドウやマウスの座標はDPIに依存したものになって,プロセスの状態によってWin32APIも違う値を返すようになる.大抵はWindowsが不思議な変換をして良い感じにしてくれるのだけど,複数のディスプレイを同時に扱おうとすると途端に面倒に.
面倒になって,SetProcessDPIAwareでDPI無視するようにしてみたけど,それでも座標が一致しない.EnumDisplaySettingsExで取得したディスプレイ情報と,ディスプレイのマウスの座標を見比べてると,ディスプレイ間の座標が連続してなくて謎の隙間があることになっている…….プロセスに紐付いてるディスプレイのDPIに依存してマウスの座標等も変わるので,辻褄を合わせるために座標をずらしてるっぽい.
Windows10で追加された,SetProcessDpiAwarenessContext()で DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 に設定したら全てのディスプレイの座標がEnumDisplaySettingsExで返ってくるものに一致するようになった気がするけど,本当に信じてよいのか分からないな.
朝起きてから肩が痛いな...寝違えた?
寝る.
最近,作ったまま放置しているWebXR関連のリポジトリについて質問されたりすることが増えた気がするけど,メタバースが流行ってるからだったりするんだろうか.
WebXRもう少し使われてほしいのだけど,だいぶ昔に微妙に流行ったVRMLと似た気配を感じるので10年後には忘れ去られてるんじゃないかと心配.VRMLで遊んでたのいつだっけと思って手元にあるwrlファイル探したら1998年頃か…….
眠い...
リモートデスクトップでちゃんとキー入力できるようにしようと思ってたけど,OSもキーレイアウトも異なる環境の間でキー入力するの色々面倒.
初期のOculus Questは文字入力中にKeyboardEventを発生させなかったのだけど,だいぶ昔に改善されてKeyboardEventが発生するようになった.……と思ってたのだけど,色々おかしい.
EnterとかBackspaceのKeyboardEvent.keyがUnidentifiedになっている.charCodeとかは入っているから判別はできるけれど.
あと,スクリーンキーボードはほとんどの文字入力ではKeyboardEventを発生させない.日本語入力とかに対応した時点でキーボードとして振る舞うのを諦めたのかもしれない.Bluetoothキーボードは上記のEnterとかBackspace以外は普通に動く.
WebXRセッションが動いている間はスクリーンキーボードが無効になる代わりに,普通の挙動になるのも昔から.
PointerEventも,一見Aボタンがクリック,Bボタンが右クリックみたいな挙動を見せるけど,Bボタンはauxclickもpointerdownも発生させずに,最初からcontextmenuイベントを発生させる.他にもmouseupの瞬間にclickが発生せずに数ミリ秒遅れることがある(?)気がする.
バグとかではなさそうだけど変な挙動が多いので,ちゃんと動かないWebサービスよくある.
眠い……
2月…….