2022年9月28日水曜日

Roomで(使う前に)ハマったポイント

データベース操作をするならこれからはRoomを使うのが当たり前みたいな流れなので試してみました。

が、これがもうデータ操作をする前の準備段階で結構痛い目を見ています。

参考にできそうな情報が過去と錯綜しているのと、プレビュー段階の物とか。あと、Googleのドキュメントが結構嘘っぱちすぎて辛いです。

2022/09/28現在、Roomのステーブルバージョンは 2.4.3

この状態で日本語のドキュメントと英語のドキュメントのサンプルコードの差異はほぼない感じ。

で す が

このサンプルがかなりあてにならない。

プロジェクトへの導入部分のコードが誤っているとか何というか…モジュールレベルのbuild.gradleへ追記する必要のある定義で問題

その1kspはなかったことにしよう

dependencies {
    def room_version = "2.4.3"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // To use Kotlin annotation processing tool (kapt)
    kapt "androidx.room:room-compiler:$room_version"
    // To use Kotlin Symbol Processing (KSP)
    ksp "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:2.5.0-alpha03"
}

誤りと言うのは何ともな部分ですが、「ksp "androidx.room:room-compiler:$room_version"」をコメントアウトしないと先に進まない。コメントアウトしても問題が無いのかという判断もできない状態でコメントアウトするのはかなりきつかった。色々見る限り、コンパイル時間が短くなるだけのようなので、不安定になるぐらいならこんなものいらない。ステーブルバージョンとはいったい何なのかと…

その2「implementation "androidx.room:room-paging:2.5.0-alpha03"」

結論から言えば、これが大問題で、バージョンは他と合わせる必要がありました。

なので implementation "androidx.room:room-paging:$room_version" とすれば解決できます。そもそもオプショナルってなっているのでこれもコメントアウトするだけでもいいのかもしれませんが不明。

ちなみに2.5.0-alpha03は現時点でアルファリリース状態のバージョン。

しかもです。こいつが2.5.0ベースのおかげで、SDKレベルも33以上にする必要が出て来てたりこれのおかげでえらい遠回りさせられました。

@ナントかで記述して作法通りに記述する必要があり、いくつかのデータベースプログラミング経験があってもマニュアルがないときつい気がしました。ネット上で探すとそれなりに時間を浪費する。そしてエラーが表示されても文字化けして想像を絶するという。

この文字化けは Android StudioにおけるBuild Outputの文字化けを解消 https://qiita.com/watanaby0/items/bc2459e03c81a4b708c7 で解決できました。Room以外にもたびたび悩まされた文字化けですが、Roomで発生するエラーはコード展開されたあとのコンパイラのエラーなので全く想像つきませんでした。出力は英語のままでもいいのに変なところでローカル化するから…

で表示されたエラーが「(public)より弱いアクセス権限を割り当てようとしました」という感じで、これの英語表記は多分「attempting to assign weaker access privileges; was public」となっていて、これをヒントに検索してみたところ、2.3ベースにすれば解決するっぽい記述が出てたので変更しても変化せず。

悩んだ挙句に「room-paging:2.5.0-alpha03」が原因じゃないかと当たりを付けたところようやく解決したという。

こう言うのがandorid触ってて非常に面倒くさい。windowsも似たようなことはあるのですが、環境設定レベルで動かせないとか知らない人間にとってものすごいハードルが高い気がします。

2022年9月26日月曜日

Windows11 タスクマネージャのCPUのグラフに違和感

[ctrl]+[shift]+[esc]キーで不要なプロセスを終了できるとかブログ記事を見たので試したら、タスクマネージャが開きました…確かそんなショートカットだったなぁと記憶が少しかすりました。windows11で地味に不便なところはスタートメニューを右クリックで開くポップアップメニューは前のままなのですが、タスクバーの部分を右クリックしても「タスクバーの設定」というポップアップメニューしか開かないのが結構めんどいというのがあったりします。

まぁどうでもいいんですけど

ついでに開いたタスクマネージャなので様子を見てみると、どうもCPU負荷が高い状態のままのようで…原因を少し調べてみることに。

詳細タブで表示されるプロセスはシステムアイドルプロセスのCPUが60%とかなのにもかかわらず、パフォーマンスタブではほぼほぼいっぱいの使用率。意味が解らないので再起動してみたり、不要そうなアプリを終了させてみたがあまり変わらず。

最初のページのプロセスタブを見ると、そこには使用率100%という表示。しかし、詳細タブの方では依然としてシステムアイドルプロセスが60%とか。意味わからんw

とりあえず見た感じ、プロセスタブの表示とパフォーマンスタブのCPU使用率はほぼ一致。パフォーマンスタブで表示されるグラフを見ていると、カーネル時間の比率が多い感じ。パフォーマンスタブのCPU使用率が100%の状態でもUIのレスポンスは悪くなっていない。経験上この状態になるとマウスの反応などはおかしくなる。しかもBluetoothマウスなのでその影響は結構大きくなる傾向が強いはずだが、問題なし。

と、一つの結論。もしかしてパフォーマンスのグラフは何と読んだらいいのかわからないけど、Windowsモダン系のサブシステムをベースとしていて、実際のシステム全体の表示じゃなくなっている。詳細タブの表示は従来のまま。

そんな感じがしてます。注視したのはCPUだけなのでその他のリソースがどうなっているかは不明。

2022年9月25日日曜日

Windows11にアップグレード2台目

Windows11への更新が有償化するかもみたいなブログ記事が目に止まり始め、重い腰を上げて、先々週ぐらいにメインで使ってるネットブックを更新。正直なところいまだにWindows10ですらWindowsUpdateで不安定になる事があるのに明らかに不安定そうなWindows11にするとかアホかと思います。しかも目玉機能のAndroidアプリの起動は未だにできないわけで。
で、アップデートするとUIで当然不満があるわけですよ。
まず、Window系のアニメーションが結構うざい。スタートメニューがデフォルトで中央配置(左寄せにすることは可能になっていた)なのですが、おかげでアプリを起動するたびにズリズリ動くので切り替えるのも正直やりずらいし、見た目のウザさもハンパない。
たとえタッチパネルだったとしても切替時にズリズリ動くのは結構ストレスになりそう。
これでも使うまではスタートメニューが中央配置でもあんま問題ないんじゃと思っていたのですが、実際に触ってみるとありえないぐらい使いづらかった。
ある程度触っているとまだアニメーションがうざく感じたので、アニメーションをカットさせるとかなり快適に。ウィンドウの最大化とウィンドウ化ぐらいしか使ってないんですが、それでもなんかウザい感じがこの上なく…よくよく比較はしていませんが、アニメーションの時間がWindows10より伸びている感じがします。
全体的にアニメーションがうざく感じるので、コンボボックスなどのアニメーションやヒントなどのフェードアウトもカット。
ヒント表示のフェードアウトは見た目はいいんですけど、結構使えないと感じてるのは私だけかな?
コンボボックスのアニメーション効果は確実に操作が遅くなるので百害あって一利なしってやつです。リストボックスはごくごく稀にリスト項目の高さが高くなっていて表示される高さが1.5行ぐらいしかないときに操作が楽になることはありますが…そもそもそんなUIにするなって話です。
ここまで設定するのは随分久々なきがします。

で、ちょっとしたときに拡大鏡を使ってみると…スタートメニューがスタートバー?の後ろに隠れるようになって、Firefoxがスタートバーを隠すようになる始末。
百歩譲ってアプリのウィンドウの最大化が崩れるのは仕方がないにしても、スタートメニューや、タスクトレイのポップアップメニューなども崩れるのはアカンでしょ。レポートしたけども、多分見てないんだろうな。

それ以外の部分は、まぁなんだろう、それなり?
未だにモダンタイプ(死語)の設定画面には統一できていなく、当然のように旧コントロールパネルのプロパティ設定ダイアログを表示させて逃げてるところが気になるし、思ったとおりに検索で引っかからないしでやっぱ使えんという感じが強い。このへんは多言語対応の弊害なのかもしれないが、日本語でWindowsの設定は微妙。

と、そんな感じで使っていましたが、週末にはブログ記事で     Windows 11への無償アップデートが「2022年10月5日以降は有償化される可能性がある」   
なんて物を見つけ、ホントかウソかはわからんが、使ってるPCはアップデートしておいたほうが安心かもという気になってしまった。

なってしまったので、寝る前に更新したものの、なんかCPUの使用率が上がってたり、WindowsUpdateでエクスプローラーのリスト項目の行間が伸びてたり(オプションで変更できるのをまだ覚えていたので被害は数秒だったが)放置しててスリープに入るタイミングが早くなってたり…てか、CPU負荷が結構かかっててスリープするようになったのか?という驚きが…

メインで使ってるデスクトップはWindows11にはできない物もあったりしますが、HDDを先月買ったSSDに置き換えたら随分まともに動くようになったのでまだまだ現役続行…

ほらな…やっぱ愚痴だらけの記事になったよw