« 2023年2月 | トップページ

2024年9月

2024年9月 5日 (木)

メモリリーク?

iMac の表示が乱れる

2023年11月から、最新の iMac M3 を診療で使用し始めたのだが、OpenDolphin を使い続けるうちに、ウインドウ内容が表示されなくなる現象が発生した。フレームは表示されるのだが、中身が表示されない。OpenDolphin を再起動すると直るが、しばらく使っていると再発する。その前に使っていた intel iMac では、見たことない現象であった。

Bug3

さらに、この現象が起こっている際には、Safari の表示も乱れていることに気付いた。また、メモリ使用量も爆増していたが、それにしてはメモリプレッシャーは低いままで、矛盾している?ように思われた。

Bug2_20240905135701  Bug4

メモリ使用量の爆増はメモリリークの可能性がある。しかし、java の中にいる OpenDolphin が、Safari にまで影響を及ぼす可能性は考えにくいので、おそらくネイティブ側の問題かもしれないと考えて、OpenDolphin を時々再起動することで対応していた。その後、OS のアップデートが何回かあったが、この現象は解消されなかった。

Window#getOwnerlessWindows()

自前で何とかできないか検討するために、メモリ関連の数値をモニタしてみた。-Xmx は設定していなかったので、iMac のヒープはデフォルト値で、十分余裕がある状態であった。さらに調べていくうちに、Window#getOwnerlessWindows() というメソッドを見つけた。OwnerlessWindows というのは一体、ガベージコレクション (GC) される運命の Window ?なのかもしれない。試しにこの Window の数をモニタしてみたところ、数値がどんどん増えていって、値が 200を越えたくらいで、画面表示が乱れることがわかった。

Window 関連のリファクタリング

内部の方で OwnerlessWindows の GC がうまく行っていない可能性を考えて、Window 関連のコードをリファクタリングしてみた。GC にひっかかりやすくなるかと思って、使い終わったら、リスナの除去、dispose、null を代入というのを徹底した。どこが効いたのかよく分からないが、OnwerlessWindows の増加を大幅に減少させることができて、1日再起動しなくても診療終了できるようになった。

Graph

2024年9月 3日 (火)

IME on/off の切り替え

入力フィールドに応じて、ime が on/off される機能を mac で実現するのは結構大変で、これまで色々苦労してきた。ここしばらくは、ATOK の入力モードを、使っていないファンクションキーで切り替えられるように設定して、OpenDolphin からそのキーを robot で出力することで対応していた。

最近、weborca への移行準備を進めていて、mac クライアントを試していたところ、なんと、当たり前のようにフィールドごとに「ひらがな・カタカナ・英数」の切換ができていた。ただ、monsiaj と違って、weborca クライアントはソースが公開されていないので、実際どうやっているかは謎である。

しかし、できるらしいことは分かったので、色々 web 検索してみたところ、im-select なるものを見つけた。内部の方法が weborca と同じなのかどうかは不明だが、OpenDolphin からこれを呼び出して試してみたところ、ime の切換ができるようになった。

2024年9月 1日 (日)

促音拗音の検索

マイナンバーカードになってから、「ショウジ」さんが「シヨウジ」さんで読み込まれている場合はどうしたらよいかと、事務から相談を受けた。拗音促音は、結構適当に登録されているようだ。マイナンバーカードが「シヨウジ」さんになっているのであれば、それを勝手に「ショウジ」さんに変えるわけにもいかないので、そのまま登録してもらうことにした。

そうすると問題になるのが、OpenDolphin での検索である。「ショウジ ショウタ」さんを検索したとき、「シヨウジ シヨウタ」さんも、「ショウジ シヨウタ」さんも、「シヨウジ ショウタ」さんもヒットするようにしなければならない。つまり、促音拗音があった場合、それぞれ大きい場合、小さい場合の全ての組合せを数え上げて検索する必要がある。どうしようか考えていた時、ふと、ChatGPT に相談したらいいのではと思いついた。

相談してみたところ、全ての場合の総数を計算して、総数まで2進数でインクリメントしながら、ビットのありなしで全ての場合を数え上げる java プログラムを教えてくれた。それを元に、プログラムしてうまくいった (swapSmallKana) 。ChatGPT 恐るべし。

« 2023年2月 | トップページ