投稿

JDK8と11の非互換

 仕事などでは古いJava環境を使っている場合もあり、そんななか、JDK11で8互換でビルドしてJDK8で動かないものがあったのでメモ  NoSuchMethodError が java.lang.NoSuchMethodError: java.nio.ByteBuffer.xxxx と発生。 BufferとByteBufferは実装が変わっているようで、実装されている部分が何かで互換性がなくなっているっぽい。  コードは互換になるがライブラリまでは見てくれないというJDKの罠はよくある。今回もそんなもののひとつか。  詳細はこっちかな  https://stackoverflow.com/questions/61267495/exception-in-thread-main-java-lang-nosuchmethoderror-java-nio-bytebuffer-flip

Oculus Quest 2をつついてみた

 Oculus Quest 2、日本で店頭販売されるということでヨドバシのポイントを活用して予約。昨日の昼頃届いたので軽く設定をして夜使ってみた。 まずfacebookのアカウントが必要なので、ない場合は若干苦労することになるのかもしれず、いろいろニュースにもなっているが略。 アカウントがあればQuest 2購入前でもゲーム、アプリは購入できるので、無料のものをいくつか購入?しておいてもいい。 アカウントがbanされると困るので有料アプリはあとがいいのか。 Rift用のGoogle Earth、Quest用のBeatSaber Demo、YouTube VR、Firefox Realityなど。 でQuest 2の開封。ゴーグル、右左コントローラ、メガネ用スペーサ、あとはUSB電源とケーブルが入っているかもしれない。説明書などは見なかった。  サイズ感などはOculus Goからあまり変わらない印象。トラッキング用カメラがついているのと電源ボタンなどの位置が違うのと。 コントローラはボタンが多い。フィードバック(振動)的なのもついている。 瞳孔間距離の調整は3段階かな、Oculus Goで問題なければ2の状態で使って問題なさそうだ。1や3でも大きく違いが出るわけでもない。  頭から外すときにメガネが引っ張られて外れてしまう。Oculus Goより横幅が狭いのかもしれない。密着間は上がるかもしれないが要注意。 電源を入れてWi-Fiに繋ぐ、Wi-Fi接続は失敗することが多いので難関。繋がればアップデートがされて再起動後、スマートフォンアプリと連携になる。 AndroidのOculusアプリは以前から使っていた場合に接続できるVRゴーグルの一覧が更新されないという不具合らしいものに遭遇。キャッシュをクリアすれば改善されるようだが再インストールでもログインするだけで設定が回復するのでおすすめは再インストールか。 Oculus Link的なUSB-C to CケーブルでPCと繋いでみたところ、PC側の設定は完了したがOculus Quest 2側はスマートフォンでないと設定できないので要注意。 その後何度かケーブルをつけたり外したりしてみたが認識されなくなったりはしなかった。Oculus Linkも改善されているということかな。 Androidア...

Oculus Quest 2のススメ

 Oculus Quest 2が発表され、予約もされているのでおすすめ点を。 Oculus QuestはVRヘッドセットです。360度の立体映像の中に入ることができ、3D映像も見ることができます。 比較対象 テレビと比べると、視野が全体に広がり。 3Dテレビと比べると、枠がないぶん没入度は上です。 3Dヘッドセットと比べると、頭を動かしても映像は顔の前に張りつかず動かせます。 VR機器ではCardboardなどスマホの3Dと比べると、コントローラがある分操作感が上がり、装着も簡単。 Oculus Goと比べると、両手操作ができる分自由度が高くなり、歩くこともでき、PCと繋ぐことも可能。Snapdragonは高性能。 Oculus Rift、PSVRと比べてPC、PSなしでも使える。解像度が高い。 6DoF対応なので移動も可能。センサー設置も不要。 カメラ6DoF、ハンドトラッキング、PC接続のできるVRなので手軽方向に振り切っている形です。  Oculus Go、Oculus Riftの系統も廃止、統合する方向のようなので価格も今まで以上に手頃。 アプリはOculus Rift、Oculus Quest両方のものがほぼそのまま使える形です。Oculus Goとは互換性がないが同じアプリ、ゲームは多いので有料のものは買い直す必要があるかもしれません。 あと足りないのは全身フルトラッキング系、PC連携のフル映像ぐらいだと思います。 とりあえず必要なのはOculus Quest 2、使える空間、Wi-Fiネット環境ぐらいかな。 Facebook アカウントとスマートフォン(またはPC?)の設定アプリが必要なので、AndroidまたはiPhoneが必要。たぶん。 Oculus Rift用PCアプリが使えるOculus Linkには6コア以上CPU、GeForce RTX 2070ぐらいの強いPCがあると快適なのかもしれない。 Oculus Linkケーブルは純正が細くて無難だが、Ankerなども推奨されている。ただし太かったり、短かったり、中華メーカーなどの規格外の長さのものは接触が悪かったりする。おすすめはUSB Type-C to USB-Type-C の3.xケーブル。理由はType-A to Type-Cでは電源供給が足りないから。USB PDでは...

Java API for JSON Processing,JSONBと比較してみた

ABNFパーサを作ったおまけでてきとーにRFCだけ見てなんとなく作ったJSON実装(SoftLibJSON)がどれくらいJava標準(Java API for JSON Processing と JSONB)に近いのかなと思い、比較してみた。 結果、一応元のRFCがあるのでほぼそっくりではあるのだけど、微妙に違うのでそのあたりの解説と、今後どうするのかとか。   Java API for JSON Processing SoftLibJSON   TEXTぱーす   どこか JSON.parse()                   JSON TEXT化   JSONValue.toString()    Object→JSON   JSONValue.valueOf()    JSON→Object   JSONValue.map()    値 JsonValue JSONValue         NULL JsonValue.NULL JSONNULL    true JsonValue.TRUE JSONBoolean    false JsonValue.FALSE JSONBoolean    数値 JsonNumber JSONNumber    配列 JsonArray JSONArray    構造体 JsonObject JSONObject   こうしてみると、JsonValue からの継承関係はだいたいおなじ。JsonArrayはList,JsonObjectはMapを継承するのに対して、SoftLibJSONではJSON Pointerに対応するための機能も埋め込んだため、JSONArrayとJSONObjectではJSONCollectionとしてまとめたものを継承しているのが違い。 値の取り出し方はJava APIの方が型変換の呪縛でいろいろ...

HMACと暗号の実装

ハッシュを作ったので次はHMACなど作ってみた。 HMACはハッシュを使ってパスワード認証的なものもつけているので改変されていないかなどで有利なのかどうなのか。JavaではMacという分類のあれこれ。 ハッシュごとのハッシュ長は取得できてもブロック長やら何やらを取得するのがJavaの標準APIにはなさそうなので自作ハッシュではそのあたりも拡張しておく。 HMACに適当なハッシュを載せられるので、MD2とか対応してなさそうなのをあわせてみてもいいし、SHA-3ではべつのアルゴリズムKMACを使うようだけどもHMACでも問題なく対応しているし、仕様にもあるはず。 JDKにはまだHMAC-SHA3とかなかったかも。 HMAC-MD5とか、HMAC-SHA-256とかいろいろできるので広がる。 ただ、暗号という位置づけなのか、何もしないとHMACなどMac系のアルゴリズムはJavaに登録できない感じだったので、署名などつけないといけないのかもしれず、暗号だけのライブラリには分けてみたけど署名を試すのはまた次回。 登録しなくても、自作すればどうにでも使えるので動作は問題ない。 他にもMac系のものがあるようなので、KMacとか作ってみる予定は未定。SHA-3と別の資料なのでまた読むのが大変。 暗号 作る予定ではなかったかもしれないけど、ハッシュをいろいろ作ってみた勢いで暗号にも手を出してしまった。 詳細ではなくどんなのがあるかくらいのメモでいいかな? ブロック暗号、ストリーム暗号 暗号の基本、大まかにはブロック単位の暗号と、バイト単位でデータと(疑似)乱数をXORで暗号を作るストリーム暗号とがある。他のもあるが、大量のデータを暗号化するにはこのふたつかな。よく使われるのはブロック暗号なのかどうか。ブロック暗号も組み合わせ方によってはストリーム暗号として使うこともできる。逆にストリーム暗号の長さを固定してブロック暗号として使えるのか、というと使える、がビット反転では弱くないのか謎。暗号強度に差が出る場合があるのでそれぞれのアルゴリズムで判断した方がいいかもしれない。 ブロック暗号もストリーム暗号もJavaのストリームとして使えるようにしておくと便利なのかもしれないので基本の部分は共通の設計にしておこう。 ストリーム暗号ではXORするだけなので...

Logicool UnifyingレシーバとUSB3電波干渉

Logicoolのワイヤレスマウスやキーボードは、USBのUnifyingとかいうコンパクトワイヤレスアダプタでPCと繋がっていい感じなのだが、USB3.xとは相性が悪く、隣の端子に(M.2型の)SSDを繋いだところ、ログイン後キーボードマウスが動かなくなってしまう現象に遭遇してしまった。 対処方法は、USB端子を離すこと、Bluetoothを使うこと。 最近のキーボード、マウスはBluetooth LEにも対応しているのでBluetoothにしてみるのがひとつの解決策。 Bluetoothにするとマザーボードの設定ができなくなったりするので可能ならUSB3とUnifyingのレシーバを離して繋ぐのがいいのかも。

4Kディスプレイのススメ

4K UHD Blu-rayなどを見るためにディスプレイを探していたのだけど、HDR対応で探してみるとあまり明るそうなものがなく、と数カ月様子見していたかもしれない。 24型くらいのJAPANNEXTの4Kディスプレイは購入してみたことはあったがHDR対応でもなく、小さすぎるので4Kっぽくもなく。 ディスプレイでHDRというとDisplayHDRという規格があるのでその中から候補を出してみた。 31.5インチ、DisplayHDR 600、というとわりと高級機で10万、30万という値段のものまであるようなないような。 以前50インチのPHILIPSのDisplayHDR1000のディスプレイを見たときは、ドットが崩れすぎてPCでは使えないなと感じてたのでPHILIPSも除外。 ASUSもDisplayHDR1400とかいう変態機を出していたが高すぎるだろうということでよくあるディスプレイの300nit(cd/㎡)越えはほしいのでDisplayHDR 600あたりを漂っていると、Acerの型番が難しそうな機種(ET322QKCbmiipzx)が5万円という破格で出てきた。1年前の機種ということなのでそれほど古くもなく、4KでHDRでDisplayHDR 600もある。ただし標準の輝度は400cd/㎡。 DisplayHDR 600の規格の方をよく見てみると、わりとプロ向け仕様になっていて色域も広い、10bit対応などとあり。 古い機種なのか人気なのか、在庫のある店があまりないのでポイントがつきそうなところで予約。au Payとかは使わなかったけど。1週間から2週間ぐらいで届いたように思う。 型番は類似品があるのでシリーズはET2、DisplayHDR600対応とET322QKC という頭の型番の最後にCがつくのを確認しよう。 開封設置 だいたい32型。今までのより大きい。ディスプレイとして使うなら4Kでは最適な最小サイズかもしれない。Windowsのテキストが100%でも読める。テレビだともう少し大きい方がいい。 足は細いので、物の上など平らな場所にちょっと置くことはできず、それなりのスペースを取る。謎の5cmぐらいの棒が1つついてきたがケーブルでも垂らすものなのか謎。 DisplayPort 1.2 1つとHDMI 2.0が2つ、音声出力...