投稿

2020の投稿を表示しています

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ではなくUSB BC系

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の方が型変換の呪縛でいろいろごっちゃりしているのに対し、SoftLibJSONではvalue()やmap() で取り出すのみでお手軽。 JSONへの変換、JSONからのパースは、Java APIでは別になっているが、SoftLibJSONではいろいろと融合している。JSONValue.valueOf() でなんでも済まそうとしている。 具体的に変換できそうなものは List,配列 と JSONArrayの相互変換 clas

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つ、音声出力

ASUS RT-AX3000買ってメッシュWi-Fiの入り口へ

定評のないASUSルータ、その原因はセキュリティアプリにありそうなのだが、というわけでAmazon専売らしいASUS RT-AX3000購入してみたので、いろいろお試し期間。 今回の組み合わせ (Wi-Fi 6 802.11ax) Intel AX200NGW ASUS RT-AX3000 他ルータ (Wi-Fi 5 802.11ac) BUFFALO WSR-2533DHP2 IODATA WN-AC1600DGR2か3か Wi-Fi 6は802.11ax の高速なWi-Fi規格。デスクトップPCにIntelの拡張カードAX200NGWを載せてみているので、ルータ側を変えるタイミングを窺っていたら1年ぐらい経過していた。ASUSからWi-Fi 6対応で安価なRT-AX92Uよりさらに安いRT-AX3000が出たので購入。5GHz帯が2ストリーム(4804+800)から1ストリーム(2402)に減っている、アンテナ2本なので2402Mbpsという差がある。有線LAN/WANも1Gpbsに落ちる。 CPUなどの性能は同じくらいのようだ。とりあえず1Gbps以上の性能はまだ必要ないと思うところなので、必要になればAiMeshのサブ機にするくらいの買いやすさで購入。 RT-AX92Uから強化されている点はWPA3対応か。AiMeshでは全ルータが対応しているっぽいWPA2しか使えないが。 メッシュWi-Fiとローミングの違い Wi-Fi 6に加え、今流行りのメッシュWi-Fiに対応している、という点が今回の要点。今回安定していれば次は強めのルータを買って2台でメッシュ、というお試しができるかもしれないのがよさそうなところ。 用語 ルータ 外部とも有線と無線とも繋がる機器 AP (Wi-Fi AP) Wi-Fiと有線LANと繋ぐ機能だけ使っている状態 中継器 Wi-FiをWi-Fiに繋ぐ中継をするもの  どれもAPの機能は持っている感じの括り。 子機が途切れずAPをまたいで繋がるのがローミング、それに加えてルータ/AP/中継器間を自動で中継してくれるのがメッシュWi-Fi、 という違いがあるのでどちらを使いたいのか把握しよう。ローミングだけのはあんまりないけども。 ローミングにも対応していない場合は電波がぎりぎりまで

暗号アルゴリズムのなかのハッシュを実装してみる MD5からSHA-3まで

デジタルな暗号の実装はいろいろあるのだけど、中身はあまり把握していないなということで、暗号やハッシュの実装を見てみようと思いいくつか実装してみた。  暗号の中でも使われていることもあり、実装が簡単そうなのがハッシュ関数というわけなのか、最初に目についたからかハッシュのMD4、MD5からSHA-1、SHA-2、SHA-3を実装してみた。GitHubに公開してみたが、結局他の実装はあまり見なかったかもしれない。 入門程度に詳細は省略するのでソースかWikipediaでも見てもらえればハッシュの単純さがわかる。 ハッシュとは、データの固まりに固有の番号(乱数っぽいもの)を生成するアルゴリズムで、ダウンロードしたデータが正確かどうか判定するために使ってみたりする。 昔はチェックサムだとか、CRCだとかがあったところの延長線上でもあり。 結果が分散している、結果からデータを逆に辿れないというのもポイント。 構造は、入力データを512ビットや1024ビット毎に区切り、ビット演算を繰り返した結果256ビットくらいの結果が出力される。 1ビットの違いが出力のほぼ全ビットに影響するので同じ値を探すのも難しい。 入門レベルで書かれているものでは、1回の暗号の構造については書かれているが、初期値がどうなるとか繰り返しがどこからどこまでででどうなるのかなど、よくわからないことも多々ある。 実装するには、基本的にインターネット関連の情報はRFCを読めば見つかる。MD4、MD5などの廃止された古いものもしっかり残っているのはRFCのよいところ。SHA-3はまだRFCにはなさそうだ。日本語化されたものもIPAなどのサイトで見つかるかもしれない。 RFC 1319 MD2 RFC 1320 MD4 RFC 1321 MD5 RFC 3174,FIPS 180-1 SHA-1 RFC 6234,FIPS PUB 180-4 SHA-2, HMAC,HKDF FIPS PUB 202 SHA-3 ハッシュの基本 SHA-2までとSHA-3では違うので別々に。 内部状態を持っている MD5の場合 32bit a,b,c,d で128bit、SHA2-256はa,b,c,d,e,f,g,hで256bit、SHA2-512では64bitの8つで1024bitな