2025/12/01(月) [n年前の日記]
#1 [gimp] GIMP 3.0.4にBatcherプラグインを導入
GIMP 2.x の頃は、各レイヤーを画像としてエクスポートする際に Export Layers というプラグイン(Python-Fuスクリプト)を使っていた。
_Home | Export Layers
_GitHub - kamilburda/gimp-export-layers: Batch layer export and editing for GIMP 2.8/2.10
ただ、GIMP 3.0 には対応してなくて…。しかし上記のページを開いてみたら、「GIMP 3はBatcherというプラグインを使える」と紹介されていて。
_Batcher - Batch image processing plug-in for GIMP
_GitHub - kamilburda/batcher: Batch Processing Plug-in for GIMP 3
_GIMP3 でバッチコンバートを可能にする Batcher プラグイン - 省型旧形国電の残影を求めて
_GIMP 3で高度なマクロ・バッチ処理ができる「Batcher」 | 玄武のメインブログ
気になったので試用してみることにした。環境は Windows11 x64 25H2 + GIMP 3.0.4 Portable Rev 2。
色んな機能が追加されるようだけど、ひとまず今回は各レイヤーのエクスポートができればそれでいいかなと…。
_Home | Export Layers
_GitHub - kamilburda/gimp-export-layers: Batch layer export and editing for GIMP 2.8/2.10
ただ、GIMP 3.0 には対応してなくて…。しかし上記のページを開いてみたら、「GIMP 3はBatcherというプラグインを使える」と紹介されていて。
_Batcher - Batch image processing plug-in for GIMP
_GitHub - kamilburda/batcher: Batch Processing Plug-in for GIMP 3
_GIMP3 でバッチコンバートを可能にする Batcher プラグイン - 省型旧形国電の残影を求めて
_GIMP 3で高度なマクロ・バッチ処理ができる「Batcher」 | 玄武のメインブログ
気になったので試用してみることにした。環境は Windows11 x64 25H2 + GIMP 3.0.4 Portable Rev 2。
色んな機能が追加されるようだけど、ひとまず今回は各レイヤーのエクスポートができればそれでいいかなと…。
◎ インストール :
batcher-1.1.1.zip を入手して解凍。GIMPのプラグインが入ってるフォルダの中に、batcher というフォルダ名でフォルダを新規作成して、その中に batcher.py やフォルダ群をコピーする。
GIMP 3.0 からは、プラグインをインストールする際、プラグイン別にフォルダを作成してその中に関連ファイルをコピーする、という流儀になった記憶がある。だから今回も batcher というフォルダを作って、その直下に *.py が配置される状態にする、ということなのだろう…。
インストールに成功していれば、GIMPのファイルメニュー内に項目が色々増える。その中の「レイヤーをエクスポート」を選べば、各レイヤーを別画像としてエクスポートすることができる。試したところたしかに動作してくれた。
GIMP 3.0 からは、プラグインをインストールする際、プラグイン別にフォルダを作成してその中に関連ファイルをコピーする、という流儀になった記憶がある。だから今回も batcher というフォルダを作って、その直下に *.py が配置される状態にする、ということなのだろう…。
インストールに成功していれば、GIMPのファイルメニュー内に項目が色々増える。その中の「レイヤーをエクスポート」を選べば、各レイヤーを別画像としてエクスポートすることができる。試したところたしかに動作してくれた。
[ ツッコむ ]
#2 [windows] Windows11のウィジェットが鬱陶しい
Windows11はタスクバーの一番左にウィジェットなるものが追加されて、その場所にマウスカーソルを持っていくだけでウインドウがデローンと開いて、天気予報だのニュースだのが表示されるようになったけれど。これがなかなか鬱陶しい。
自分の場合はそんな場所にマウスカーソルを持っていかない癖がついているからどうでもいいのだけど…。親父さんは何かしらをキーボードから文字入力する際に、何故か画面の左下にマウスカーソルを持っていってそこで放置してから文字入力する癖がついてるようで、結果文字入力しようとするたびに例のウインドウがデローンと出てきて困惑してるようで…。「俺のパソコン調子が悪い。なんか変なのが出てくる」と相談を受けて、そういう状況になっていることに気が付いた。
せめてマウスホバー/マウスオーバーではなく、クリックで表示されるようにしておけばいいのに…。いやまあ、そういう仕様にすると、そこにそういう機能があると気づかない連中がほとんどだろう、と踏んでMicrosoftはわざわざこういう仕様にしてしまったのだろうけど。しかし、文字入力しようとするたびにデローンと出てきたら困惑するだろう…。というか親父さんはソレがデローンと出てきても一体何の機能なんだか全然分かってない気配もあるし。これではユーザの操作をただ邪魔するだけの機能になっちゃってる。
どうにかできんのかとググってみたら、そのデローンウインドウの右上の歯車アイコンをクリックすることで、マウスホバー/マウスオーバーではなくクリックで開くように設定できることを知った。タスクバーを右クリック → タスクバーの設定、で変えられるわけじゃないんだ…。いやまあ、ウィジェットの表示仕様を設定するのだから、ウィジェット自身の設定画面で変更するのが当たり前ではあるのかな…。
しかしこの設定項目の在処に気づけなかったら、このウィジェット自体を無効にするしかないのかな? と思い込むだろうし…。使ってもらいたくてこういうデフォルト設定にしたのだろうけど、その結果、機能全体を無効にされてしまう展開も少なからずありそうな予感。なんだかな。
自分の場合はそんな場所にマウスカーソルを持っていかない癖がついているからどうでもいいのだけど…。親父さんは何かしらをキーボードから文字入力する際に、何故か画面の左下にマウスカーソルを持っていってそこで放置してから文字入力する癖がついてるようで、結果文字入力しようとするたびに例のウインドウがデローンと出てきて困惑してるようで…。「俺のパソコン調子が悪い。なんか変なのが出てくる」と相談を受けて、そういう状況になっていることに気が付いた。
せめてマウスホバー/マウスオーバーではなく、クリックで表示されるようにしておけばいいのに…。いやまあ、そういう仕様にすると、そこにそういう機能があると気づかない連中がほとんどだろう、と踏んでMicrosoftはわざわざこういう仕様にしてしまったのだろうけど。しかし、文字入力しようとするたびにデローンと出てきたら困惑するだろう…。というか親父さんはソレがデローンと出てきても一体何の機能なんだか全然分かってない気配もあるし。これではユーザの操作をただ邪魔するだけの機能になっちゃってる。
どうにかできんのかとググってみたら、そのデローンウインドウの右上の歯車アイコンをクリックすることで、マウスホバー/マウスオーバーではなくクリックで開くように設定できることを知った。タスクバーを右クリック → タスクバーの設定、で変えられるわけじゃないんだ…。いやまあ、ウィジェットの表示仕様を設定するのだから、ウィジェット自身の設定画面で変更するのが当たり前ではあるのかな…。
しかしこの設定項目の在処に気づけなかったら、このウィジェット自体を無効にするしかないのかな? と思い込むだろうし…。使ってもらいたくてこういうデフォルト設定にしたのだろうけど、その結果、機能全体を無効にされてしまう展開も少なからずありそうな予感。なんだかな。
[ ツッコむ ]
#3 [nitijyou] 灯油缶を2本新調
あまりにも古くなった灯油缶(灯油ポリタンク)が家に4〜5本あるのだけど、妹がダイユーエイトで新品の灯油缶(18L、色は赤)を2本購入してきてくれた。たしか1本税込877円だったはず。数日前に近所のホームセンターを回って値段を調べてみたけれど、どこでもその値段で売っていた。また、ダイユーエイトでは、2025/12/03まで2個以上買うと数十円安くなるセール(?)をやっているらしい。
とりあえず、注ぎ口(?)の直径が40mmになっている2本だけ、新しいものと差し替えた。
灯油ポリタンクの注ぎ口は、一般的には50mmと65mmのものがあって、このあたりでは50mmのものが普及してるけれど。注ぎ口が40mmの灯油缶は今ではもう売っていない。つまりはそのくらい古い。交換用キャップも売ってないから、キャップがひび割れだらけになったまま無理矢理使ってた…。当然ながらキャップがひび割れているとそこから灯油が漏れてしまうので非常に危険。車に積んで運ぶ際、振動でポリタンクの中の灯油はジャッポンジャッポンと動きまくるので、キャップが割れていると車内に灯油が漏れてしまう…。
そもそもポリタンクのメーカーは5年毎に買い換えてほしいと主張しているぐらいなので、キャップのみならずポリタンク本体の劣化具合も不安。どこかが割れてしまったら18Lの灯油が床一面に漏れ出してしまう。どう考えても大変なことになる…。
さておき。古いポリタンクはまだ2〜3本あるので順次差し替えていかないと…。
灯油ポリタンクには製造年月が刻印されているけれど、調べてみたら53だの55だのが刻印されていた。いくらなんでも1953年製造ということはないだろうから、おそらく昭和53年製造だろうけど、だとしても47年前のポリタンク…。5年前どころではない…。
とりあえず、注ぎ口(?)の直径が40mmになっている2本だけ、新しいものと差し替えた。
灯油ポリタンクの注ぎ口は、一般的には50mmと65mmのものがあって、このあたりでは50mmのものが普及してるけれど。注ぎ口が40mmの灯油缶は今ではもう売っていない。つまりはそのくらい古い。交換用キャップも売ってないから、キャップがひび割れだらけになったまま無理矢理使ってた…。当然ながらキャップがひび割れているとそこから灯油が漏れてしまうので非常に危険。車に積んで運ぶ際、振動でポリタンクの中の灯油はジャッポンジャッポンと動きまくるので、キャップが割れていると車内に灯油が漏れてしまう…。
そもそもポリタンクのメーカーは5年毎に買い換えてほしいと主張しているぐらいなので、キャップのみならずポリタンク本体の劣化具合も不安。どこかが割れてしまったら18Lの灯油が床一面に漏れ出してしまう。どう考えても大変なことになる…。
さておき。古いポリタンクはまだ2〜3本あるので順次差し替えていかないと…。
灯油ポリタンクには製造年月が刻印されているけれど、調べてみたら53だの55だのが刻印されていた。いくらなんでも1953年製造ということはないだろうから、おそらく昭和53年製造だろうけど、だとしても47年前のポリタンク…。5年前どころではない…。
[ ツッコむ ]
2025/12/02(火) [n年前の日記]
#1 [windows] デスクトップ画面全体に時計を表示したい
Windows11 x64 25H2 のデスクトップ画面全体に時計を表示したくて少し調べてた。
◎ 経緯 :
電池が切れたまま洋間に放置されていた、おそらく100円ショップで購入したミニデジタル時計を回収して、ボタン型電池 LR1130 を入れて復活させた。
*1
ただ、このミニデジタル時計、1日に5秒も進んでしまう。時刻合わせの頻度が増えて面倒臭い。
この手の時計の時刻合わせをする際は、Windows11機のタスクバー上の時計を見ながら行っている。Windowsの時計はインターネット上のNTPサーバにアクセスして時刻補正をするので比較的正確なはず。しかし、このWindows上の時計、フォントが小さくて見辛い…。
この手の作業をする時だけ、デスクトップ画面全体に表示できる時計アプリがあったら多少楽になるかなと思えてきて、そういうアプリが無いものか調べ始めた。
求める機能は以下。
ただ、このミニデジタル時計、1日に5秒も進んでしまう。時刻合わせの頻度が増えて面倒臭い。
この手の時計の時刻合わせをする際は、Windows11機のタスクバー上の時計を見ながら行っている。Windowsの時計はインターネット上のNTPサーバにアクセスして時刻補正をするので比較的正確なはず。しかし、このWindows上の時計、フォントが小さくて見辛い…。
この手の作業をする時だけ、デスクトップ画面全体に表示できる時計アプリがあったら多少楽になるかなと思えてきて、そういうアプリが無いものか調べ始めた。
求める機能は以下。
- 秒の表示ができること。目立つこと。
- デスクトップ画面全体/フルスクリーンで表示できること。
◎ Microsoft Storeで探してみた :
まずは Microsoft Store で探してみた。「desktop digital clock」で検索。
いくつかインストールして試用してみたけれど、どれも今一つ…。
_ディジタルクロック - Windows に無料でダウンロードしてインストールする | Microsoft Store
_Desktop Widget デジタル時計 - Windows に無料でダウンロードしてインストールする | Microsoft Store
_Flip Clock: Digital Widgets & Weather - Windows に無料でダウンロードしてインストールする | Microsoft Store
_Zen Flip Clock: Desktop Digital Clock - Windows に無料でダウンロードしてインストールする | Microsoft Store
背景の画像を変えることができたり、透明度を変更することができるあたりはオシャレでヨサゲなのだけど…。
いくつかインストールして試用してみたけれど、どれも今一つ…。
_ディジタルクロック - Windows に無料でダウンロードしてインストールする | Microsoft Store
_Desktop Widget デジタル時計 - Windows に無料でダウンロードしてインストールする | Microsoft Store
_Flip Clock: Digital Widgets & Weather - Windows に無料でダウンロードしてインストールする | Microsoft Store
_Zen Flip Clock: Desktop Digital Clock - Windows に無料でダウンロードしてインストールする | Microsoft Store
- 秒の表示機能が無いか、あってもフォントがそこだけ小さい。時/分と同じフォントサイズだと助かるのだけど…。
- デスクトップ画面全体に表示できない。小さいウインドウが表示されて、その中に時刻が表示されるものがほとんど。
- 設定変更するたびに有料版への誘導を促すポップアップウインドウが表示されて閉口。
背景の画像を変えることができたり、透明度を変更することができるあたりはオシャレでヨサゲなのだけど…。
◎ Webブラウザで表示できないか試した :
考えてみたら、常時デスクトップに時計を表示したいわけではなく、望んだ時だけ表示できれば十分だなと気が付いた。であれば、Webブラウザ上で時計を表示するWebページが存在していれば済むのではないか…?
ググってみたら、それらしいページにいくつか辿り着いた。
_【WEBツール】時計
_SIMPLE CLOCK - シンプルなデジタル時計
_デジタル時計
_オンライン時計・今何時?
_Full screen clock (JavaScript)
フルスクリーン表示機能(ESCキーで抜けられる)をあらかじめ持っているページがいくつかあって、実に親切だなと…。ありがたや…。また、そういう機能が無くても、Webブラウザ(Firefox)でF11キーを押せば全画面表示になる(再度F11キーで元に戻る)ので、どのページも実にイイ感じの見た目になってくれた。
これで十分なんじゃないかな…。わざわざアプリをインストールしなくても済みそう。
ググってみたら、それらしいページにいくつか辿り着いた。
_【WEBツール】時計
_SIMPLE CLOCK - シンプルなデジタル時計
_デジタル時計
_オンライン時計・今何時?
_Full screen clock (JavaScript)
フルスクリーン表示機能(ESCキーで抜けられる)をあらかじめ持っているページがいくつかあって、実に親切だなと…。ありがたや…。また、そういう機能が無くても、Webブラウザ(Firefox)でF11キーを押せば全画面表示になる(再度F11キーで元に戻る)ので、どのページも実にイイ感じの見た目になってくれた。
これで十分なんじゃないかな…。わざわざアプリをインストールしなくても済みそう。
◎ アプリをインストール :
その後もググっていたら、ヨサゲなアプリを見かけた。
_Clock
_GitHub - virtualmatador/clock
_Clock: a fullscreen clock with seconds, date, and day of the week for Windows and Linux : r/apps
Windows用とLinux用がある。SDLを使って表示しているらしい。試用してみることにした。
画面全体にドドーンと時計が表示される。これもなかなかイイ感じの表示かもしれない…。
_Clock
_GitHub - virtualmatador/clock
_Clock: a fullscreen clock with seconds, date, and day of the week for Windows and Linux : r/apps
Windows用とLinux用がある。SDLを使って表示しているらしい。試用してみることにした。
- clock-AMD64.msi を入手して実行。今回は D:\Prog\virtualmatador\clock\ にインストールしてみた。
- 実行するとデスクトップ画面全体に時計が表示される。
- 終了は画面のどこかをマウスクリックするか、ESCキー。
- ホームディレクトリ(C:\Users\アカウント名\)に、.clock.conf というファイルを置いて、値を書き換えることで設定ができる。
画面全体にドドーンと時計が表示される。これもなかなかイイ感じの表示かもしれない…。
◎ 余談その1 :
最初の頃のWindows11は、通知センターに時刻を表示する機能が削除されてしまっていたらしいけれど、ある時期から機能が復活していたらしい。
タスクバー上の時計を右クリック → 日時を調整する → 「時刻と言語 > 日付と時刻」の設定画面で、「通知センターに時間を表示する」をオンにすれば、タスクバーの時計を左クリックして表示される通知センターに時刻が表示されるようになる。
_Windows 11 通知センターに「秒単位の時間」を表示する
ちょっとだけフォントが大きいので、これでも見易くなるような気もする。
タスクバー上の時計を右クリック → 日時を調整する → 「時刻と言語 > 日付と時刻」の設定画面で、「通知センターに時間を表示する」をオンにすれば、タスクバーの時計を左クリックして表示される通知センターに時刻が表示されるようになる。
_Windows 11 通知センターに「秒単位の時間」を表示する
ちょっとだけフォントが大きいので、これでも見易くなるような気もする。
◎ 余談その2 :
正確な時間を知りたいだけなら、Windows機の時計でもいいし、スマホの時計でもいいのだよな…。そもそも自分の部屋にも電波時計が一つあるので、ソレを見れば正しい時間は分かる。そのあたりを思い返すと…。1日で5秒進んでしまうこのミニデジタル時計、捨ててしまおうか…。ちょっと精度が低過ぎるし…。
昨今は100円ショップで入手できる時計の種類が随分少なくなったなと感じていたけれど、スマホを見れば正確な時間が分かるし、大半の人はスマホを持ち歩いているのだから、そりゃまあ小さい置時計の種類も少なくなって当然だろうか…。
昨今は100円ショップで入手できる時計の種類が随分少なくなったなと感じていたけれど、スマホを見れば正確な時間が分かるし、大半の人はスマホを持ち歩いているのだから、そりゃまあ小さい置時計の種類も少なくなって当然だろうか…。
*1: ちなみに、ケースには「LR1130を使用すべし」と書いてあるのに、LR44が入ってた。それじゃ動くわけがない。こんなアホなことをしたのは親父さんだろうな…。ボタン型電池はどれも同じと思い込んで、サイズの違いも気にしていないのだろう…。もっとも、そもそもボタン型/コイン型電池は種類が多過ぎる気もしているけれど。どうして規格をまとめようとしなかったのか…。
[ ツッコむ ]
2025/12/03(水) [n年前の日記]
#1 [gimp] GIMP 3.0.4 Portableにプラグインを導入
Windows11 x64 25H2 + GIMPPortable 3.0.4 Portable Rev 2 に、G'MIC や Resynthesizer というプラグインを導入しようとしてちょっと苦労してた。
◎ G'MICのインストール :
G'MIC は公式サイトに GIMP 3.0用のバイナリがあるからソレを使えば簡単、というわけでもなかった…。
_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Download
zip版、gmic_3.6.4_gimp3.0_win64.zip を入手して解凍。~/.gimp-3.0/plug-ins_3.0_gmic_qt_x64/ 以下に、gmic_gimp_qt_3.6.4/ というフォルダを作成してその中に入れたのだけど、GIMP 3.0.4 Portable の設定でプラグインフォルダとして追加しても反映されない。
もしかすると、以下のように設定しなければいけなかったのだろうか…。自身無いけど…。
_G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Download
zip版、gmic_3.6.4_gimp3.0_win64.zip を入手して解凍。~/.gimp-3.0/plug-ins_3.0_gmic_qt_x64/ 以下に、gmic_gimp_qt_3.6.4/ というフォルダを作成してその中に入れたのだけど、GIMP 3.0.4 Portable の設定でプラグインフォルダとして追加しても反映されない。
もしかすると、以下のように設定しなければいけなかったのだろうか…。自身無いけど…。
- gmic_gimp_qt.exe に合わせて、フォルダ名も gmic_gimp_qt にする。
- gmic_gimp_qt/ を追加するのではなく、その一つ上の plug-ins_3.0_gmic_qt_x64/ を追加する。
◎ Resynthesizerのインストール :
Resynthesizer のインストールは更に苦労した。本来は、フィルター → カラーマッピング → Resynthesize...、に項目が増えるはずだけど…。
~/plug-ins_3.0_resynthesizer/ 以下に resynthesizer/resynthesizer.exe を置いて、~/plug-ins_3.0_resynthesizer/ をGIMPの設定でプラグインフォルダとして追加したのだけど、反映されない…。
これが不思議なことに、samj版 GIMP 3.00.4 Portable ならそのやり方で反映される。動作もする。
結局、GIMP Portable のページでリンクが張ってある、GIMP_Portable_Resynthesizer_Plugin_3.0_Pre_2025-01-23.paf.exe を入手、実行してインストールした。
_GIMP Portable | PortableApps.com
_PortableApps.com - Browse /GIMP Resynthesizer Plugin at SourceForge.net
この版を GIMP 3.0.4 Portable のインストール場所にインストールしたら項目が出てくるようになった。
中には以下のファイルが含まれていた。
ちなみに、今までsamj版で動作していたバイナリは以下の版。
_Resynthesizer for Windows Gimp 3
_Installing Resynthesizer3 Plugins - bootchk/resynthesizer Wiki - GitHub
~/plug-ins_3.0_resynthesizer/ 以下に resynthesizer/resynthesizer.exe を置いて、~/plug-ins_3.0_resynthesizer/ をGIMPの設定でプラグインフォルダとして追加したのだけど、反映されない…。
これが不思議なことに、samj版 GIMP 3.00.4 Portable ならそのやり方で反映される。動作もする。
結局、GIMP Portable のページでリンクが張ってある、GIMP_Portable_Resynthesizer_Plugin_3.0_Pre_2025-01-23.paf.exe を入手、実行してインストールした。
_GIMP Portable | PortableApps.com
_PortableApps.com - Browse /GIMP Resynthesizer Plugin at SourceForge.net
この版を GIMP 3.0.4 Portable のインストール場所にインストールしたら項目が出てくるようになった。
中には以下のファイルが含まれていた。
./GIMPPORTABLE
├─App
│ │ Readme.txt
│ │
│ └─AppInfo
│ plugininstaller.ini
│
├─Data
│ └─GimpAppData
│ ├─plug-ins
│ │ └─resynthesizer
│ │ resynthesizer.exe
│ │
│ └─scripts
│ plugin-heal-selection.scm
│ plugin-heal-transparency.scm
│ plugin-resynth-controls.scm
│
└─Other
└─Source
ちなみに、今までsamj版で動作していたバイナリは以下の版。
_Resynthesizer for Windows Gimp 3
_Installing Resynthesizer3 Plugins - bootchk/resynthesizer Wiki - GitHub
◎ .scmの置き場所 :
Resynthesizer は添付の .scm によってメニューに登録されるようだけど、GIMP Portableの配布ページから入手できる版と、前述の掲示板から入手できる版で、.scm を置く場所が違っていることに気が付いた。
どちらの置き方を使うべきなのか悩んだけれど、以下のページで説明されていた。
_Changes in ScriptFu v3 - GIMP Developer
GIMP 3.0 からは、.scm も plug-ins/ 以下に置いても良いことになっていたらしい。ただし、スクリプト名と同じ名前のフォルダを作成して、その中に入れることを推奨している。
- 前者は scripts/ に .scm がそのまま置かれる。
- 後者は plug-ins/ に .scm と同じ名前のフォルダを作成してその中に置かれている。
どちらの置き方を使うべきなのか悩んだけれど、以下のページで説明されていた。
_Changes in ScriptFu v3 - GIMP Developer
GIMP 3.0 からは、.scm も plug-ins/ 以下に置いても良いことになっていたらしい。ただし、スクリプト名と同じ名前のフォルダを作成して、その中に入れることを推奨している。
[ ツッコむ ]
#2 [windows] Windows11のスクロールバーが細過ぎる
Windows11 (Windows11 x64 25H2)にしてから、スクロールバーの操作でイライラしている。スクロールバーが細過ぎる…。いや、違う。スクロールバーがそもそも表示されてない…。そこにマウスカーソルを持っていった時だけ表示されている感じがする。
今までは視線を少し横にずらすだけで、スクロールバーを通じてページの長さが瞬時に把握できたけれど。Windows11にしてから、一々マウスカーソルをそこに持っていかないと確認できない。不便だ…。
どうにかならないかとググったら、常時表示するように設定を変更できるらしい。
_スクロールバーが細くて見えない | Schooldepot
_Windows 11 スクロールバーの幅を広くする方法-パソブル
設定 → アクセシビリティ → 視覚効果 → スクロールバーを常に表示する、を有効にする。これで常時表示される状態になった。
レジストリを変更すればスクロールバーの幅や高さも変えられるとのこと。
OSを再起動しないと反映されない。
試しに幅も変更してみたけれど、幅の変更が反映されるアプリと反映されないアプリがあって、なんだかしっくりこない…。デフォルトの -255 に戻しておいた。
今までは視線を少し横にずらすだけで、スクロールバーを通じてページの長さが瞬時に把握できたけれど。Windows11にしてから、一々マウスカーソルをそこに持っていかないと確認できない。不便だ…。
どうにかならないかとググったら、常時表示するように設定を変更できるらしい。
_スクロールバーが細くて見えない | Schooldepot
_Windows 11 スクロールバーの幅を広くする方法-パソブル
設定 → アクセシビリティ → 視覚効果 → スクロールバーを常に表示する、を有効にする。これで常時表示される状態になった。
レジストリを変更すればスクロールバーの幅や高さも変えられるとのこと。
HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics → ScrollWidth を -330 に変更。デフォルト値は -255。
OSを再起動しないと反映されない。
試しに幅も変更してみたけれど、幅の変更が反映されるアプリと反映されないアプリがあって、なんだかしっくりこない…。デフォルトの -255 に戻しておいた。
[ ツッコむ ]
2025/12/04(木) [n年前の日記]
#1 [cg_tools] Affinity Studio 3.0.2が起動しない
無料で利用できる画像編集/ベクター編集ソフト Affinity Studioが起動しない状態になった。
Windows11 x64 25H2上で Affinity Studio 3.0.0 を起動してみたら、「3.0.2が出てるよ。アップデートするかい?」と尋ねてきたので、せっかくだからとアップデートしてみたら、Affinity Studio が起動しなくなった…。スプラッシュスクリーンは表示されるのだけど、表示された後、何も言わずに消えてしまう。プロセスも消えている。
解決できないか試行錯誤。
試しに、2025/11/01 の時点で入手してHDDに残していた Affinity x64.msix を使って再インストールしてみたら、起動した。このバージョンは 3.0.0.3791。
起動するたびに相変わらず、「3.0.2 にアップデートするかい?」と尋ねてくるけれど、アップデートしたらまた起動すらできない状態になりそうで、怖くてアップデートできない…。起動すらしないのでは使い勝手もへったくれもないのだよな…。
もっとも、どうせ自分は GIMP と Inkscape に慣れてしまってるので、今後も Affinity Studio は使わない可能性も…。一応 Affinity Designer 2 を購入してインストールしてあるのだけれど、ついつい Inkscape を起動して作業してしまう…。
さておき。解決方法をググってみたけれど…。
_New Affinity crash on startup : r/Affinity
_Affinityをインストールしてみましたが、.exeファイルから起... - Yahoo!知恵袋
_無料になったPhotoShop代替ソフトのAffinityが起動できない場合の対処方法 | 西村誠一のパソコン無料サポートとWindowsフリーソフトblog
_Affinity が起動しない・すぐ落ちる?【2025年版】原因と完全解決ガイド - からふるパレット
_Affinityツールがクラッシュするときの対処方法について|オオモリちゃん。
_【Affinity】Windows11で起動しない件。ポップアップが一瞬でるのみ | ナポリタン寿司のPC日記
_自作パソコンコミュニティ | 備忘的に、今日解決したトラブルについて | Facebook
これは試してないな…。ただ、他の昔のアプリで不具合が出る可能性もあると書いてある…。
_Affinityのクラッシュレポートはどこにありますか? - Affinityヘルプセンター
このへんを見れば何か分かるのだろうか…?
リリースノートの場所も分かった。
_Release notes - Affinity Help Center
かなり変更されているようではある。
Windows11 x64 25H2上で Affinity Studio 3.0.0 を起動してみたら、「3.0.2が出てるよ。アップデートするかい?」と尋ねてきたので、せっかくだからとアップデートしてみたら、Affinity Studio が起動しなくなった…。スプラッシュスクリーンは表示されるのだけど、表示された後、何も言わずに消えてしまう。プロセスも消えている。
解決できないか試行錯誤。
- アンインストールして、公式サイトから入手した Affinity x64.msix を実行して再インストールしてもダメ。
- アンインストールして、Affinity x64.exe を実行して再インストールしてもダメ。
- ユーザフォルダ C:\Users\アカウント名\.affinity\ 以下の 3.0 とついてるフォルダを削除してみてもダメ。
- ユーザフォルダ C:\Users\アカウント名\AppData\Roaming\Affinity\ 以下の 3.0 とついてるフォルダを削除してみてもダメ。
- Ctrlキーを押しながら Affinity のアイコンをクリックするとユーザフォルダその他をクリアしたりリセットしたりできるウインドウが開くので、そこから全部クリアやリセットしてみてもダメ。
試しに、2025/11/01 の時点で入手してHDDに残していた Affinity x64.msix を使って再インストールしてみたら、起動した。このバージョンは 3.0.0.3791。
起動するたびに相変わらず、「3.0.2 にアップデートするかい?」と尋ねてくるけれど、アップデートしたらまた起動すらできない状態になりそうで、怖くてアップデートできない…。起動すらしないのでは使い勝手もへったくれもないのだよな…。
もっとも、どうせ自分は GIMP と Inkscape に慣れてしまってるので、今後も Affinity Studio は使わない可能性も…。一応 Affinity Designer 2 を購入してインストールしてあるのだけれど、ついつい Inkscape を起動して作業してしまう…。
さておき。解決方法をググってみたけれど…。
_New Affinity crash on startup : r/Affinity
_Affinityをインストールしてみましたが、.exeファイルから起... - Yahoo!知恵袋
_無料になったPhotoShop代替ソフトのAffinityが起動できない場合の対処方法 | 西村誠一のパソコン無料サポートとWindowsフリーソフトblog
_Affinity が起動しない・すぐ落ちる?【2025年版】原因と完全解決ガイド - からふるパレット
_Affinityツールがクラッシュするときの対処方法について|オオモリちゃん。
_【Affinity】Windows11で起動しない件。ポップアップが一瞬でるのみ | ナポリタン寿司のPC日記
_自作パソコンコミュニティ | 備忘的に、今日解決したトラブルについて | Facebook
コントロールパネル → 時計と地域 → 地域 → 管理 → システムロケールの変更 → UTF-8使用をON → 再起動
これは試してないな…。ただ、他の昔のアプリで不具合が出る可能性もあると書いてある…。
_Affinityのクラッシュレポートはどこにありますか? - Affinityヘルプセンター
Windows - MSIXバージョンのユーザー対象: %USERPROFILE%\.affinity\Affinity\3.0\CrashReports\reports - MSI/EXEバージョンのユーザー対象: %APPDATA%\Affinity\Affinity\3.0\CrashReports\reports クラッシュレポートは、.dmp 拡張子で識別され、ランダムな英数字からなるファイル名で構成されます。
このへんを見れば何か分かるのだろうか…?
リリースノートの場所も分かった。
_Release notes - Affinity Help Center
かなり変更されているようではある。
◎ 2025/12/05追記 :
Affinity Studio 3.0.2 を .msix でインストールして確認してみた。
システムロケールの変更をしてみたけれど、起動しない…。効果は無かった…。しかも他のアプリが文字化けしてしまった。壁カレ4とか。
%localappdata%\Publishers\8a0j1tnjnt4a4\ 内のAffinityフォルダを削除すべし、と言う話も見かけたけれど。覗いてみたら Affinityフォルダは無かった。
Affinity Designer 2 の関連ファイルがあるとマズいのかなと、%USERPROFILE%\.affinity を .affinity_old にリネームしてみたけど、これも効果無し。
"--whateverhere" を起動ショートカットに追加する方法もあるらしい。しかし .msix でインストールした版でそんな指定できるのかな…。.exe でインストールした版ならできるのだろうけど。
WinDbgなるツールをMicrosoft Store経由でインストールして、クラッシュレポート(.dmp) を開いてみたけれど、何がなんだかさっぱり分からなかった…。
結局、Affinity Studio 3.0.2 をアンインストールして、3.0.0 を再インストールした。3.0.0 なら一応起動するのだよな…。
システムロケールの変更をしてみたけれど、起動しない…。効果は無かった…。しかも他のアプリが文字化けしてしまった。壁カレ4とか。
%localappdata%\Publishers\8a0j1tnjnt4a4\ 内のAffinityフォルダを削除すべし、と言う話も見かけたけれど。覗いてみたら Affinityフォルダは無かった。
Affinity Designer 2 の関連ファイルがあるとマズいのかなと、%USERPROFILE%\.affinity を .affinity_old にリネームしてみたけど、これも効果無し。
"--whateverhere" を起動ショートカットに追加する方法もあるらしい。しかし .msix でインストールした版でそんな指定できるのかな…。.exe でインストールした版ならできるのだろうけど。
WinDbgなるツールをMicrosoft Store経由でインストールして、クラッシュレポート(.dmp) を開いてみたけれど、何がなんだかさっぱり分からなかった…。
結局、Affinity Studio 3.0.2 をアンインストールして、3.0.0 を再インストールした。3.0.0 なら一応起動するのだよな…。
[ ツッコむ ]
#2 [gimp] GIMPがlnkファイルを読み取れない
Windows11 x64 25H2 + GIMP 3.0.4 Portbale Rev2 を使っていてふと気づいた。Windowsのショートカットファイル、.lnkファイルをGIMPは読み取れないのだな…。開こうとしてもエラーになる。
不便だ…。OneDrive関係のせいで、Documents/ や Pictures/ には極力ファイルを入れないことにして、それらのフォルダには .lnk ぐらいしか置かないことにしたので、その .lnk が使えないとなると…。いやはや、不便だなあ…。
それらのフォルダの中にシンボリックリンクを置いて済ませたいところだけど、シンボリックリンクを使うと OneDriveアプリが各フォルダ内を検索できないと言い出すので、これもちょっと扱いが面倒で…。
不便だ…。OneDrive関係のせいで、Documents/ や Pictures/ には極力ファイルを入れないことにして、それらのフォルダには .lnk ぐらいしか置かないことにしたので、その .lnk が使えないとなると…。いやはや、不便だなあ…。
それらのフォルダの中にシンボリックリンクを置いて済ませたいところだけど、シンボリックリンクを使うと OneDriveアプリが各フォルダ内を検索できないと言い出すので、これもちょっと扱いが面倒で…。
◎ GIMPのファイルダイアログは出来が酷い :
そもそもGIMPのファイルオープンダイアログは独自に実装されたダイアログ(GTK?)で、数千の画像ファイルが入ってるフォルダを開こうとすると全ての画像を一旦読み込もうとして数分固まる不具合がある、という話も見かけた。Inkscape はそんなことにならないのになんで GIMP はそうなるんや、とか言われちゃってる。
_GIMP loading files extremely slow in folder with thousands of files (#8648) - Issue - GNOME/gimp
_GIMP extremly slow open/export dialog : r/GIMP
将来的にはOS標準のファイルダイアログを利用できるようにするかも? という話も出ているようだけど、それが何時頃実現するのかは分からない。
_GIMP loading files extremely slow in folder with thousands of files (#8648) - Issue - GNOME/gimp
_GIMP extremly slow open/export dialog : r/GIMP
将来的にはOS標準のファイルダイアログを利用できるようにするかも? という話も出ているようだけど、それが何時頃実現するのかは分からない。
◎ 昔は回避策があった :
ちなみに昔は、Windowsの標準的なファイルダイアログを利用できるようにするプラグインがあった。fileopen.exe というファイルをプラグインフォルダに入れるだけで、ファイルメニューに WinOpen という項目が追加されて、見慣れたファイルダイアログを利用できるようになる。
_ファイルの開き方と保存方法 - Windows と同様 (ポーランド語?)
_ファイルオープンや保存にWindowsダイヤログを使う (WebArchive)
しかしこのプラグイン、GIMP 2.2 の頃のプラグインで…。
GIMP 2.10.38 Portable に入れて使えるか試してみたけれど、一応使えるっぽいものの、WinOpen という項目が2つ表示されてしまう。また、あらかじめ何か画像を開いた状態じゃないと、項目がグレーになっていて呼び出せない。
ソースを修正すれば直せるのかもしれないけれど、古いプラグインだからソースの入手はできない。当時の実行バイナリしか入手できない。
以前は github に registry.gimp.org のバックアップがあったので、そこを探せばソースが見つかるかなと確認してみたら、404。アップロードしてた方がリポジトリごと削除してしまったようで…。なんでそんなことするんや…。
また、WebArchive にもファイルは残ってない。かろうじてアップロードされてたファイル名だけは分かったけど…。ファイル本体が無いのでは…。
_Plug-In: Windows File Open (WebArchive)
でもまあ、何にせよ、Windowsの標準的なファイルオープンダイアログを利用できるプラグインを作成することは可能っぽい。それがあれば .lnkファイルも辿れるのだろうけど…。
とりあえず当面できることは…。
_ファイルの開き方と保存方法 - Windows と同様 (ポーランド語?)
_ファイルオープンや保存にWindowsダイヤログを使う (WebArchive)
しかしこのプラグイン、GIMP 2.2 の頃のプラグインで…。
GIMP 2.10.38 Portable に入れて使えるか試してみたけれど、一応使えるっぽいものの、WinOpen という項目が2つ表示されてしまう。また、あらかじめ何か画像を開いた状態じゃないと、項目がグレーになっていて呼び出せない。
ソースを修正すれば直せるのかもしれないけれど、古いプラグインだからソースの入手はできない。当時の実行バイナリしか入手できない。
以前は github に registry.gimp.org のバックアップがあったので、そこを探せばソースが見つかるかなと確認してみたら、404。アップロードしてた方がリポジトリごと削除してしまったようで…。なんでそんなことするんや…。
また、WebArchive にもファイルは残ってない。かろうじてアップロードされてたファイル名だけは分かったけど…。ファイル本体が無いのでは…。
_Plug-In: Windows File Open (WebArchive)
でもまあ、何にせよ、Windowsの標準的なファイルオープンダイアログを利用できるプラグインを作成することは可能っぽい。それがあれば .lnkファイルも辿れるのだろうけど…。
とりあえず当面できることは…。
- .lnk が示してる場所をブックマークしておくとか。
- 画像を開く時はエクスプローラからGIMPにドラッグアンドドロップして開く癖をつけるとか。
[ ツッコむ ]
2025/12/05(金) [n年前の日記]
#1 [python] EasyGUIを試用
Python + EasyGUIを使うと、簡単にGUIで入力ダイアログが作れるらしい。開発停止状態という話も見かけたけれど…。まあ、使えるうちは使ってもいいのではないか…。Windows11 x64 25H2 + Python 3.10.10 64bit で動作確認してみた。
インストールは以下。
ググって目にしたサンプルをコピペして動作確認した。
インストールは以下。
pip install easygui
ググって目にしたサンプルをコピペして動作確認した。
"""
EasyGUI sample
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import easygui
easygui.msgbox("Hello EasyGUI")
name = easygui.enterbox("あなたの名前を入力してください。", default="guest")
easygui.msgbox(f"あなたの名前は {name} です。")
if easygui.ynbox("18歳以上ですか?"):
easygui.msgbox("あなたは18歳以上です。")
else:
easygui.msgbox("あなたは18歳未満です。")
filename = easygui.fileopenbox("ファイルを選択してください")
if filename:
easygui.msgbox(f"選択したファイルは {filename}")
◎ EasyGUI_Qtについて :
EasyGUI_Qt というものもあるらしい。EasyGUI は tkinter で各ダイアログを表示しているが、EasyGUI_Qt は Qt で表示している。
_easygui_qt - PyPI
_aroberge/easygui_qt: Inspired by easygui, designed for PyQt
_EasyGUI_Qt - easygui_qt 0.9.2 documentation
先に書いておくけれど、このモジュールは使わないほうがいい。理由は後述する。一応アレコレ調べたのでメモだけはしておく。
PyQt4 か PyQt5 が必要になるらしい。PyQt5 なら PyPI からインストールできるが、ファイルダイアログの表示ができなかった。PyQt4 なら動くのかもしれないが、PyPI からインストールできないらしい。とりあえず PyQt5 をインストールして試用してみる。
easgui_qt 0.9.3 と、PyQt5-5.15.11, PyQt5-Qt5-5.15.2, PyQt5-sip-12.17.1 がインストールされた。
デモプログラムも入っているらしい。IDLE上で以下を打てば表示される。
EasyGUI_Qt は EasyGUI と各関数名が異なっている。Pythonの命名規則に合わせてみたとのこと。
以下のページで、各関数名の対応が表で示されている。
_Comparison with easygui - easygui_qt 0.9.2 documentation
しかし…。使えそうかどうか試していたら、get_file_names() でファイルダイアログを開こうとするとエラーが出ることに気づいた。
情報を探していたら…。
_error message in get_file_names - Issue #35 - aroberge/easygui_qt
自動翻訳を引用しておく。
PyQt5への対応が十分にできないまま開発停止状態になっていた。使わないほうが良さそう。
しかし、PyQt5 に対応させた版を作成した方も居る模様。
_cs20-easygui - PyPI
_schellenberg/easygui_qt: Inspired by easygui, designed for PyQt
以下でインストールできる。EasyGUI_Qt はアンインストールしておいたほうがいいだろうな…。
この版ならエラーは出ない。また、複数のファイルを選択できる get_file_names() 以外にも、ファイルを1つだけ選択できる get_file_name() も用意されていた。
でもまあ、EasyGUI を使ったほうがいいだろうな…。EasyGUI なら PyQt5 のインストールも不要だし…。
一応サンプルもメモ。
_easygui_qt - PyPI
_aroberge/easygui_qt: Inspired by easygui, designed for PyQt
_EasyGUI_Qt - easygui_qt 0.9.2 documentation
先に書いておくけれど、このモジュールは使わないほうがいい。理由は後述する。一応アレコレ調べたのでメモだけはしておく。
PyQt4 か PyQt5 が必要になるらしい。PyQt5 なら PyPI からインストールできるが、ファイルダイアログの表示ができなかった。PyQt4 なら動くのかもしれないが、PyPI からインストールできないらしい。とりあえず PyQt5 をインストールして試用してみる。
pip install easygui_qt pip install PyQt5
easgui_qt 0.9.3 と、PyQt5-5.15.11, PyQt5-Qt5-5.15.2, PyQt5-sip-12.17.1 がインストールされた。
デモプログラムも入っているらしい。IDLE上で以下を打てば表示される。
from easygui_qt.demos import launcher launcher.main()
EasyGUI_Qt は EasyGUI と各関数名が異なっている。Pythonの命名規則に合わせてみたとのこと。
- msgbox() -> show_message()
- ynbox() -> get_yes_or_no()
- enterbox() -> get_string()
以下のページで、各関数名の対応が表で示されている。
_Comparison with easygui - easygui_qt 0.9.2 documentation
しかし…。使えそうかどうか試していたら、get_file_names() でファイルダイアログを開こうとするとエラーが出ることに気づいた。
情報を探していたら…。
_error message in get_file_names - Issue #35 - aroberge/easygui_qt
自動翻訳を引用しておく。
このプロジェクトは4年近く更新していません。前回作業した時は、 #20 で述べたようにQtバージョン4を使用していました。あなたはQtバージョン5(バージョン4はおそらく廃止されているでしょう)をお使いなので、互換性に問題があっても不思議ではありません。
残念ながら、このプロジェクトに取り組む時間がもうありません。他の方がフォーク(またはプルリクエスト)して、Qtの新しいバージョンと互換性を持たせたい場合に備えて、このプロジェクトはオープンのままにしておきます。
PyQt5への対応が十分にできないまま開発停止状態になっていた。使わないほうが良さそう。
しかし、PyQt5 に対応させた版を作成した方も居る模様。
_cs20-easygui - PyPI
_schellenberg/easygui_qt: Inspired by easygui, designed for PyQt
以下でインストールできる。EasyGUI_Qt はアンインストールしておいたほうがいいだろうな…。
pip uninstall easygui_qt pip install cs20-easygui
Successfully installed cs20-easygui-0.9.5 packaging-25.0 setuptools-80.9.0 sip-6.14.0
この版ならエラーは出ない。また、複数のファイルを選択できる get_file_names() 以外にも、ファイルを1つだけ選択できる get_file_name() も用意されていた。
でもまあ、EasyGUI を使ったほうがいいだろうな…。EasyGUI なら PyQt5 のインストールも不要だし…。
一応サンプルもメモ。
"""
EasyGUI_Qt sample
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import easygui_qt
easygui_qt.show_message("Hello EasyGUI_Qt", "Title")
name = easygui_qt.get_string("名前を入力してください", "Title", "guest")
easygui_qt.show_message(f"あなたの名前は {name} です。")
if easygui_qt.get_yes_or_no("あなたは18歳以上ですか?"):
easygui_qt.show_message("あなたは18歳以上です。")
else:
easygui_qt.show_message("あなたは18歳未満です。")
filename = easygui_qt.get_file_names()
if filename:
easygui_qt.show_message(f"選択したファイル : \n{filename}")
[ ツッコむ ]
2025/12/06(土) [n年前の日記]
#1 [gimp][python] GIMP 3.0 + Python-FuでWindowsのファイル選択ダイアログを表示
無料で利用できる画像編集ソフト GIMP のファイル選択ダイアログは、OSが用意したファイル選択ダイアログを使わない独自実装なので、ちょっと不便なところがある。
Windowsが標準で用意しているファイル選択ダイアログを使って画像を開くことができたら、どちらの問題も解決しそうだよなと…。
GIMP 2.2 の頃は、Windowsのファイル選択ダイアログを使ってファイルを開いたり保存できるプラグイン(fileopen.exe)が存在していたのだけど。GIMP 2.10.38 で試してみたらメニュー項目は2つ出るし、おそらく GIMP 3.0 では使えないだろうしで…。今でも使えるプラグインというわけではない…。
そこでふと、GIMP 3.0 + Python-Fu で、Windowsのファイル選択ダイアログを表示するプラグインを作れないものだろうかと気になり始めて、実験してみた。
環境は Windows11 x64 25H2 + GIMP 3.0.4 Portable Rev 2。あるいは Python 3.10.10 64bit。
- Windowsのショートカットファイル(.lnk)を辿れない。
- 数千の画像ファイルが入ってるフォルダを開こうとするだけで数分固まる。
Windowsが標準で用意しているファイル選択ダイアログを使って画像を開くことができたら、どちらの問題も解決しそうだよなと…。
GIMP 2.2 の頃は、Windowsのファイル選択ダイアログを使ってファイルを開いたり保存できるプラグイン(fileopen.exe)が存在していたのだけど。GIMP 2.10.38 で試してみたらメニュー項目は2つ出るし、おそらく GIMP 3.0 では使えないだろうしで…。今でも使えるプラグインというわけではない…。
そこでふと、GIMP 3.0 + Python-Fu で、Windowsのファイル選択ダイアログを表示するプラグインを作れないものだろうかと気になり始めて、実験してみた。
環境は Windows11 x64 25H2 + GIMP 3.0.4 Portable Rev 2。あるいは Python 3.10.10 64bit。
◎ Pythonでファイル選択ダイアログを表示する :
まずは Python でファイル選択ダイアログを表示できるか調べた。
ググったところ、一般的には、「Python でファイル選択ダイアログを表示したい? だったら tkinter のファイル選択ダイアログを使うのが一番簡単で確実でしょう」という話になっているらしい。
しかし、GIMP Windows版に同梱されてる Python に tkinter は同梱されてない。Python console 上で import tkinter と打っても「そんなモジュールは無いよ」と言われてしまう。こりゃ入ってないよな…。考えてみたらGIMP自体がGTKで実装されてるのだから、「GUIで表示したい? GTK使えよ。なんでTkが必要なんだよTkより高機能な Tool Kit が目の前にあるだろお前馬鹿じゃねえの」と言われるわな…。
ただ、GIMP Windows版同梱の Python にも、Python から .dll を呼び出して使える ctypes というモジュールが入ってた。これを使えばどうにかなるのでは…?
以下のページを参考にして動作確認してみた。環境は Windows11 x64 25H2 + Python 3.10.10 64bit。
_Python: ctypesパターン集 #Windows - Qiita
_How to get null terminated strings from a buffer? - Python Help - Discussions on Python.org
_04_showgetopenfilename.py
実行すると、見慣れたファイル選択ダイアログが開く。
複数ファイルを選択すれば、リストの形でファイルパス群を得ることもできる。
これで、Python + ctypes を使ってWindowsのファイル選択ダイアログを開くことは十分に可能と分かった。後はコレを GIMP 3.0 の Python-Fu にできるかどうか…。
余談。ファイル選択ダイアログ( GetOpenFileNameW() )から返ってきたファイルパス群は「\0」を区切り文字として繋がった状態で返されるのだけど、分割の仕方が分からなくて結構悩んだ。前述の解説ページで分割処理のサンプルが提示されていて助かった…。
ググったところ、一般的には、「Python でファイル選択ダイアログを表示したい? だったら tkinter のファイル選択ダイアログを使うのが一番簡単で確実でしょう」という話になっているらしい。
しかし、GIMP Windows版に同梱されてる Python に tkinter は同梱されてない。Python console 上で import tkinter と打っても「そんなモジュールは無いよ」と言われてしまう。こりゃ入ってないよな…。考えてみたらGIMP自体がGTKで実装されてるのだから、「GUIで表示したい? GTK使えよ。なんでTkが必要なんだよTkより高機能な Tool Kit が目の前にあるだろお前馬鹿じゃねえの」と言われるわな…。
ただ、GIMP Windows版同梱の Python にも、Python から .dll を呼び出して使える ctypes というモジュールが入ってた。これを使えばどうにかなるのでは…?
以下のページを参考にして動作確認してみた。環境は Windows11 x64 25H2 + Python 3.10.10 64bit。
_Python: ctypesパターン集 #Windows - Qiita
_How to get null terminated strings from a buffer? - Python Help - Discussions on Python.org
_04_showgetopenfilename.py
import ctypes
import os
# ファイルダイアログの動作を指定するための定数
OFN_ALLOWMULTISELECT = 0x00000200
OFN_FILEMUSTEXIST = 0x00001000
OFN_PATHMUSTEXIST = 0x00000800
OFN_EXPLORER = 0x00080000
# 受け取るファイルパスを格納するバッファのサイズ
BUFFER_SIZE = 32768
class OPENFILENAME(ctypes.Structure):
"""GetOpenFileNameW()を呼び出すために必要な構造体を定義"""
_fields_ = [
("lStructSize", ctypes.c_uint32),
("hwndOwner", ctypes.c_void_p),
("hInstance", ctypes.c_void_p),
("lpstrFilter", ctypes.c_wchar_p),
("lpstrCustomFilter", ctypes.c_wchar_p),
("nMaxCustFilter", ctypes.c_uint32),
("nFilterIndex", ctypes.c_uint32),
("lpstrFile", ctypes.c_wchar_p),
("nMaxFile", ctypes.c_uint32),
("lpstrFileTitle", ctypes.c_wchar_p),
("nMaxFileTitle", ctypes.c_uint32),
("lpstrInitialDir", ctypes.c_wchar_p),
("lpstrTitle", ctypes.c_wchar_p),
("Flags", ctypes.c_uint32),
("nFileOffset", ctypes.c_uint16),
("nFileExtension", ctypes.c_uint16),
("lpstrDefExt", ctypes.c_wchar_p),
("lCustData", ctypes.c_void_p),
("lpfnHook", ctypes.c_void_p),
("lpTemplateName", ctypes.c_wchar_p),
("pvReserved", ctypes.c_void_p),
("dwReserved", ctypes.c_uint32),
("FlagsEx", ctypes.c_uint32),
]
def get_openfilename(initial_dir=None, filters=None):
"""ファイルダイアログを開いて複数ファイルを選択"""
comdlg32 = ctypes.WinDLL("comdlg32")
comdlg32.GetOpenFileNameW.restype = ctypes.c_bool
comdlg32.GetOpenFileNameW.argtypes = (ctypes.POINTER(OPENFILENAME),)
ofn = OPENFILENAME()
lenFilenameBufferInChars = BUFFER_SIZE
buf = ctypes.create_unicode_buffer(lenFilenameBufferInChars)
ofn.lStructSize = ctypes.sizeof(OPENFILENAME)
# ファイル種類のフィルターを設定
if filters:
ofn.lpstrFilter = "\0".join(filters) + "\0\0"
else:
ofn.lpstrFilter = "All files {*.*}\0*.*\0\0"
if initial_dir:
ofn.lpstrInitialDir = initial_dir
ofn.lpstrFile = ctypes.cast(buf, ctypes.c_wchar_p)
ofn.nMaxFile = lenFilenameBufferInChars
ofn.lpstrTitle = "Select file"
ofn.Flags = (
OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST
)
ret = comdlg32.GetOpenFileNameW(ofn)
files = []
if ret:
# 得られたファイルパスを分割してリストにする
s = buf[:].rstrip("\0")
path = s[: ofn.nFileOffset].rstrip("\0")
filenames = s[ofn.nFileOffset :].split("\0")
files = [os.path.abspath(os.path.join(path, f)) for f in filenames]
# リストの形でファイルパス群を返す
return files
return []
def main():
filters = [
"All files {*.*}",
"*.*",
"Text {*.txt}",
"*.txt",
]
homedir = os.path.expanduser("~")
print(f"Initial Directory : {homedir}")
files = get_openfilename(initial_dir=homedir, filters=filters)
if files:
print(files)
else:
print("Cancel.")
if __name__ == "__main__":
main()
実行すると、見慣れたファイル選択ダイアログが開く。
複数ファイルを選択すれば、リストの形でファイルパス群を得ることもできる。
>python.exe 04_showgetopenfilename.py Initial Directory : C:\Users\USERNAME ['D:\\home2\\AppliData\\Desktop\\tmp\\images\\bg_1280x720\\a_bg_1280x720_0.png', 'D:\\home2\\AppliData\\Desktop\\tmp\\images\\bg_1280x720\\a_bg_1280x720_1.png', 'D:\\home2\\AppliData\\Desktop\\tmp\\images\\bg_1280x720\\a_bg_1280x720_2.png']
これで、Python + ctypes を使ってWindowsのファイル選択ダイアログを開くことは十分に可能と分かった。後はコレを GIMP 3.0 の Python-Fu にできるかどうか…。
余談。ファイル選択ダイアログ( GetOpenFileNameW() )から返ってきたファイルパス群は「\0」を区切り文字として繋がった状態で返されるのだけど、分割の仕方が分からなくて結構悩んだ。前述の解説ページで分割処理のサンプルが提示されていて助かった…。
◎ GIMP 3.0 のPython-Fuスクリプトを作成 :
GIMP 3.0 の Python-Fuスクリプトの書き方を調べないといけない。GIMP 3.0 の Python-Fu は、GIMP 2.x の Python-Fu から仕様が激変したらしいので、どう書けばいいのやら…。
以下のページが参考になった。ありがたや。
_4. A Python plug-in writing Tutorial
_GIMP3 / Python プログラミング試行錯誤日誌: GIMP3 Python プラグイン登録サンプルテンプレート - 省型旧形国電の残影を求めて
_GIMP3 / Python プログラミング試行錯誤日誌: どこから手を付けたらいいのか? - 省型旧形国電の残影を求めて
とりあえず自分も、Hello World と表示するだけのPython-Fuスクリプトをコピペして動作確認してみた。環境は Windows11 x64 25H2 + GIMP 3.0.4 Portable samj版。
_m256-helloworld.py
このスクリプトは m256-helloworld.py というファイル名なので、GIMPのプラグインフォルダに m256-helloworld というフォルダを作成して、その中に m256-helloworld.py を入れた。
GIMP を実行すると、フィルター → Development → Hello World py という項目が増えた。項目を選ぶと、エラーメッセージが表示されるウインドウ? エラーコンソール? に「Hello world!」とメッセージが表示された。
これで、GIMP 3.0用のPython-FuスクリプトをGIMPのメニューに追加する方法は分かった。後は実処理を書いていくだけ…。
以下のページが参考になった。ありがたや。
_4. A Python plug-in writing Tutorial
_GIMP3 / Python プログラミング試行錯誤日誌: GIMP3 Python プラグイン登録サンプルテンプレート - 省型旧形国電の残影を求めて
_GIMP3 / Python プログラミング試行錯誤日誌: どこから手を付けたらいいのか? - 省型旧形国電の残影を求めて
とりあえず自分も、Hello World と表示するだけのPython-Fuスクリプトをコピペして動作確認してみた。環境は Windows11 x64 25H2 + GIMP 3.0.4 Portable samj版。
_m256-helloworld.py
import sys
import gi
gi.require_version("Gimp", "3.0")
from gi.repository import Gimp
gi.require_version("GimpUi", "3.0")
from gi.repository import GimpUi
gi.require_version("Gio", "2.0")
from gi.repository import Gio
from gi.repository import Gtk
from gi.repository import GLib
from gi.repository import Gegl
from gi.repository import GObject
# 他のクラスと重ならないユニークな名前をつけること
class m256FirstPythonPlugin(Gimp.PlugIn):
def do_query_procedures(self):
# プロシージャブラウザで表示される名前。ユニークな名前にすること。
return ["m256-plug-in-hello-world-python"]
def do_set_i18n(self, name):
"""国際化に対応してるかどうかを返す"""
return False
def do_create_procedure(self, name):
"""プロシージャに登録するための設定"""
procedure = Gimp.ImageProcedure.new(
self, name, Gimp.PDBProcType.PLUGIN, self.run, None
)
# 対応画像形式
procedure.set_image_types("*")
# 画像を開いてなくてもメニューを有効にする
procedure.set_sensitivity_mask(Gimp.ProcedureSensitivityMask.ALWAYS)
# メニュー上に表示するラベル名
procedure.set_menu_label("Hello World py")
# メニューの場所
procedure.add_menu_path("<Image>/Filters/Development/")
# 説明
procedure.set_documentation(
"Display Hello World", # 簡単な説明
"My first Python 3 plug-in for GIMP 3.0", # 詳細な説明
name,
)
# 作成者、著作権者、作成日
procedure.set_attribution("YOUR NAME", "your name", "2025/12/05")
return procedure
def run(self, procedure, run_mode, image, drawables, config, run_data):
"""処理内容"""
# ここに実処理を書く
Gimp.message("Hello world!")
# 処理を実行して、成功した場合は以下を返す:
return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS, GLib.Error())
class GetDialog(Gtk.Dialog):
"""ダイアログ関係"""
def __init__(self, parent, plugin):
Gtk.Dialog.__init__(
self, title="Dialog Title", parent=parent, flags=Gtk.DialogFlags.MODAL
)
# プラグインとして登録する
Gimp.main(m256FirstPythonPlugin.__gtype__, sys.argv)
このスクリプトは m256-helloworld.py というファイル名なので、GIMPのプラグインフォルダに m256-helloworld というフォルダを作成して、その中に m256-helloworld.py を入れた。
GIMP を実行すると、フィルター → Development → Hello World py という項目が増えた。項目を選ぶと、エラーメッセージが表示されるウインドウ? エラーコンソール? に「Hello world!」とメッセージが表示された。
これで、GIMP 3.0用のPython-FuスクリプトをGIMPのメニューに追加する方法は分かった。後は実処理を書いていくだけ…。
◎ GIMP 3.0 + Python-Fu でWindowsのファイル選択ダイアログを開く :
そんな感じで、GIMP 3.0 + Python-Fu を使って、Windows のファイル選択ダイアログを開いて画像を開くことができる処理を、ある程度は書けた。ある程度は。
GIMP 3.0 + Python-Fu で画像ファイルを開く記述は、以下のページを参考にさせてもらった。ありがたや。
_GIMP3 対応 画像ファイルをレイヤーマスクとして読み込むプラグイン - GIMP3 を便利に! プロジェクト - 省型旧形国電の残影を求めて
_Gimp 3 python migration guide
_GIMP3.0 Pythonで画像読み込み表示する | 家猫ミー 窓のプログラム
_m256-winopen.py
GIMP 3.0 + Python-Fu で画像ファイルを開く記述は、以下のページを参考にさせてもらった。ありがたや。
_GIMP3 対応 画像ファイルをレイヤーマスクとして読み込むプラグイン - GIMP3 を便利に! プロジェクト - 省型旧形国電の残影を求めて
_Gimp 3 python migration guide
_GIMP3.0 Pythonで画像読み込み表示する | 家猫ミー 窓のプログラム
_m256-winopen.py
import sys
import gi
gi.require_version("Gimp", "3.0")
from gi.repository import Gimp
gi.require_version("GimpUi", "3.0")
from gi.repository import GimpUi
gi.require_version("Gio", "2.0")
from gi.repository import Gio
from gi.repository import GLib
from gi.repository import Gtk
from gi.repository import Gegl
from gi.repository import GObject
import ctypes
import os
from pathlib import Path
WINOPEN_FILTERS = [
"All files {*.*}",
"*.*",
"PNG",
"*.png",
"JPEG",
"*.jpg;*.jpeg",
]
OFN_ALLOWMULTISELECT = 0x00000200
OFN_FILEMUSTEXIST = 0x00001000
OFN_PATHMUSTEXIST = 0x00000800
OFN_EXPLORER = 0x00080000
BUFFER_SIZE = 32768
class OPENFILENAME(ctypes.Structure):
"""Windowsの標準ファイルダイアログ用の構造体を定義"""
_fields_ = [
("lStructSize", ctypes.c_uint32),
("hwndOwner", ctypes.c_void_p),
("hInstance", ctypes.c_void_p),
("lpstrFilter", ctypes.c_wchar_p),
("lpstrCustomFilter", ctypes.c_wchar_p),
("nMaxCustFilter", ctypes.c_uint32),
("nFilterIndex", ctypes.c_uint32),
("lpstrFile", ctypes.c_wchar_p),
("nMaxFile", ctypes.c_uint32),
("lpstrFileTitle", ctypes.c_wchar_p),
("nMaxFileTitle", ctypes.c_uint32),
("lpstrInitialDir", ctypes.c_wchar_p),
("lpstrTitle", ctypes.c_wchar_p),
("Flags", ctypes.c_uint32),
("nFileOffset", ctypes.c_uint16),
("nFileExtension", ctypes.c_uint16),
("lpstrDefExt", ctypes.c_wchar_p),
("lCustData", ctypes.c_void_p),
("lpfnHook", ctypes.c_void_p),
("lpTemplateName", ctypes.c_wchar_p),
("pvReserved", ctypes.c_void_p),
("dwReserved", ctypes.c_uint32),
("FlagsEx", ctypes.c_uint32),
]
class m256WindowsOpenDialogPlugin(Gimp.PlugIn):
"""GIMPプラグイン部分"""
def do_query_procedures(self):
# プロシージャブラウザで表示される名前。ユニークな名前にすること。
return ["m256-plug-in-windows-opendlg-python"]
def do_set_i18n(self, name):
"""国際化に対応してるかどうかを返す"""
return False
def do_create_procedure(self, name):
"""プロシージャに登録するための設定"""
procedure = Gimp.ImageProcedure.new(
self, name, Gimp.PDBProcType.PLUGIN, self.run, None
)
# 対応画像形式
procedure.set_image_types("*")
# 画像を開いてなくてもメニューを有効にする
procedure.set_sensitivity_mask(Gimp.ProcedureSensitivityMask.ALWAYS)
# メニュー上に表示するラベル名
procedure.set_menu_label("Win Open")
# メニューの場所
procedure.add_menu_path("<Image>/File/")
# 説明
procedure.set_documentation(
"Open standard Windows file dialog", # 簡単な説明
"Open the file using the standard Windows file dialog", # 詳細な説明
name,
)
# 作成者、著作権者、作成日
procedure.set_attribution("mieki256", "mieki256", "2025/12/05")
return procedure
def get_openfilename(self, initial_dir=None, filters=None):
"""Windowsの標準ファイルダイアログを使って複数ファイルを選択"""
comdlg32 = ctypes.WinDLL("comdlg32")
comdlg32.GetOpenFileNameW.restype = ctypes.c_bool
comdlg32.GetOpenFileNameW.argtypes = (ctypes.POINTER(OPENFILENAME),)
ofn = OPENFILENAME()
lenFilenameBufferInChars = BUFFER_SIZE
buf = ctypes.create_unicode_buffer(lenFilenameBufferInChars)
ofn.lStructSize = ctypes.sizeof(OPENFILENAME)
# ファイル種類を設定
if filters:
ofn.lpstrFilter = "\0".join(filters) + "\0\0"
else:
ofn.lpstrFilter = "All files {*.*}\0*.*\0\0"
if initial_dir:
ofn.lpstrInitialDir = initial_dir
ofn.lpstrFile = ctypes.cast(buf, ctypes.c_wchar_p)
ofn.nMaxFile = lenFilenameBufferInChars
ofn.lpstrTitle = "Select file"
ofn.Flags = (
OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST
)
# ファイル選択ダイアログを開く
ret = comdlg32.GetOpenFileNameW(ofn)
if ret:
s = buf[:].rstrip("\0")
path = s[: ofn.nFileOffset].rstrip("\0")
filenames = s[ofn.nFileOffset :].split("\0")
files = [os.path.abspath(os.path.join(path, f)) for f in filenames]
# ファイルパスをリストで返す
return files
return []
def load_image(self, filepath: str):
"""画像を読み込み"""
# "\\" は問題があるらしいので "/" に置換
p = Path(filepath)
filepath_unix = p.as_posix()
# 画像を読み込む。この段階ではGIMPウインドウに表示されていない
file = Gio.File.new_for_path(filepath_unix)
image = Gimp.file_load(Gimp.RunMode.NONINTERACTIVE, file)
if image:
# 画像バッファに元ファイル名を反映させたいが上手く行かない
# if not image.set_file(file):
# Gimp.message(f"Failed set_file(). {file.get_basename()}")
# GIMPウインドウ上に画像を表示
display = Gimp.Display.new(image)
# 何故か編集された画像として扱われてしまうのでフラグをクリア
image.clean_all()
# 画面を更新
Gimp.displays_flush()
else:
Gimp.message(f"Failed to load {file.get_basename()}")
return image, display
def run(self, procedure, run_mode, image, drawables, config, run_data):
homedir = os.path.expanduser("~")
files = self.get_openfilename(initial_dir=homedir, filters=WINOPEN_FILTERS)
if files:
for path in files:
self.load_image(path)
# else:
# Gimp.message("Cancel.")
# 処理を実行して成功した場合は以下を返す
return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS, GLib.Error())
class GetDialog(Gtk.Dialog):
"""ダイアログ関係"""
# 今回は何もしていない
def __init__(self, parent, plugin):
Gtk.Dialog.__init__(
self, title="Dialog Title", parent=parent, flags=Gtk.DialogFlags.MODAL
)
# プラグインとして登録
Gimp.main(m256WindowsOpenDialogPlugin.__gtype__, sys.argv)
- スクリプト名が m256-winopen.py なので、GIMPのプラグインフォルダに m256-winopen というフォルダを作成して、その中に m256-winopen.py をコピーする。
- GIMPを実行すると、ファイル → WinOpen、という項目が増える。
- Win Open を選ぶと、見慣れたWindowsのファイル選択ダイアログが表示される。複数ファイルを選択して開くこともできる。
- Windowsのショートカットファイル(.lnk)をダブルクリックすれば、ショートカットファイルが指しているフォルダに移動できる。
◎ 問題点 :
一見それらしく動いたのだけど、問題が…。
Gimp.Image.set_file() を使えばそのあたり設定できるかなと試してみたけれど、何度試しても、設定するタイミングを変えても、結果は false が返ってくる。つまり設定できてない。
Microsoft Copilot に解決策を尋ねてみたけど、.set_name() だの .set_filename() だの、存在しないメソッド名を平気で提案してくる…。一体何の情報と混同してるのだか…。
ということで、一見それっぽく動いているようで実はダメダメな結果になってしまった。
でもまあ、ここまで動いたのだから、わざわざC/C++でプラグインを書かなくても Python-Fu でどうにかなりそうな気配は感じる…。あともうちょっとなんだけどなあ…。
- GIMPの、ファイル → 開く/インポート、を選ぶと、元の画像ファイル名がちゃんと画像バッファにも反映される。
- しかし、このスクリプト/プラグインで画像を開くと、画像バッファの名前が「名称未設定」(Untitled)になってしまう。
Gimp.Image.set_file() を使えばそのあたり設定できるかなと試してみたけれど、何度試しても、設定するタイミングを変えても、結果は false が返ってくる。つまり設定できてない。
Microsoft Copilot に解決策を尋ねてみたけど、.set_name() だの .set_filename() だの、存在しないメソッド名を平気で提案してくる…。一体何の情報と混同してるのだか…。
ということで、一見それっぽく動いているようで実はダメダメな結果になってしまった。
でもまあ、ここまで動いたのだから、わざわざC/C++でプラグインを書かなくても Python-Fu でどうにかなりそうな気配は感じる…。あともうちょっとなんだけどなあ…。
◎ GIMP 2.10.38でも少し試した :
GIMP 2.10.38 Portable の Python console上で、少し試してみた。Python経由で画像を開いた時に画像バッファ名はどうなるのか確認してみたい。
以下を打ちこんでみた。
画像バッファに元の画像のファイル名がちゃんと表示されてる…。GIMP 2.x は gimp_file_load() を使うだけで画像バッファ名もちゃんと設定されるっぽい。
ただ、開いただけでも編集作業中の画像として認識されてしまうのは GIMP 3.0 と同じっぽい。閉じるボタンをクリックして閉じようとしても「まだ保存してないよ?」と問い合わせのダイアログが開いてしまう。.clean_all() を呼べばそのあたりのフラグはクリアされるようではあるけど…。
とりあえず、GIMP 2.x と 3.0 では .file_load() の動作が違うらしい。
以下を打ちこんでみた。
from gimpfu import * path = "D:\\hoge\\fuga\\piyo.png" img = pdb.gimp_file_load(path, path) disp = pdb.gimp_display_new(img)
画像バッファに元の画像のファイル名がちゃんと表示されてる…。GIMP 2.x は gimp_file_load() を使うだけで画像バッファ名もちゃんと設定されるっぽい。
ただ、開いただけでも編集作業中の画像として認識されてしまうのは GIMP 3.0 と同じっぽい。閉じるボタンをクリックして閉じようとしても「まだ保存してないよ?」と問い合わせのダイアログが開いてしまう。.clean_all() を呼べばそのあたりのフラグはクリアされるようではあるけど…。
とりあえず、GIMP 2.x と 3.0 では .file_load() の動作が違うらしい。
*1: ただ、自分の環境では、6000個のJpegファイルが入ってるフォルダ(HDD内)にアクセスしても、6秒ぐらいで一覧が表示された。一旦エクスプローラで該当フォルダにアクセスすると、メモリ上にファイル一覧情報がキャッシュされて次回からは速くなるのだろうか?
[ ツッコむ ]
2025/12/07(日) [n年前の日記]
#1 [gimp] Python-Fuで使えるモジュールを一覧表示
GIMP上の Python console で help("modules") と打ち込むと、同梱されているモジュールの一覧を表示してくれる。らしい。
_GIMP 3.0 Python Plugins - Justin's Blog
そんなことができるのか…。知らなかった。Windows11 x64 25H2 + GIMP 3.0.4 Portable Rev 2 で打ってみたら、以下が表示された。
cairo がある…。ということは cairo を使ってキッチリと描画するプラグインも作れそうかな…。
アレ? tkiniter という文字列もあるぞ? もしかして入ってたの? import できるのかな…?
エラーになる…。どゆこと? 実際に入ってるわけではないモジュールも並んでるということなのかな…。
この場合、Python から Tk を呼び出すための Pythonスクリプトは入ってるけれど、Tk の DLL自体は入ってないから呼び出せないということだろうか?
でもまあ、help("modules") と打てば、Python-Fu でどんなモジュールが使えそうか、ざっと調べることはできそう。
余談。GIMP 2.10.38 Portable で同じことをしたら、pathlib が入ってなかった。pathlib が標準モジュールとして導入されたのは Python 3.4 かららしい。GIMP 2.10 までは Python 2.7 が使われてるから、入ってないのだろうな…。
_GIMP 3.0 Python Plugins - Justin's Blog
そんなことができるのか…。知らなかった。Windows11 x64 25H2 + GIMP 3.0.4 Portable Rev 2 で打ってみたら、以下が表示された。
GIMP 3.0.4 Python Console
Python 3.12.10 (main, Apr 18 2025, 06:12:22) [GCC UCRT Clang 20.1.3 64 bit (AMD64)]
>>> help("modules")
Please wait a moment while I gather a list of all available modules...
__future__ _tracemalloc hmac secrets
__hello__ _typing html select
__phello__ _uuid http selectors
_abc _warnings idlelib setuptools
_aix_support _weakref imaplib shelve
_ast _weakrefset imath shlex
_asyncio _winapi imathnumpy shutil
_bisect _xxinterpchannels imghdr signal
_blake2 _xxsubinterpreters importlib site
_bz2 _xxtestfuzz importlib_metadata smartypants
_codecs _zoneinfo inflect smtplib
_codecs_cn abc inspect sndhdr
_codecs_hk aifc io socket
_codecs_iso2022 antigravity ipaddress socketserver
_codecs_jp argparse itertools sqlite3
_codecs_kr array jinja2 sre_compile
_codecs_tw ast json sre_constants
_collections asyncio keyword sre_parse
_collections_abc atexit lib2to3 ssl
_compat_pickle audioop libxml2 stat
_compression autocommand libxml2mod statistics
_contextvars backports linecache string
_csv base64 locale stringprep
_ctypes bdb logging struct
_ctypes_test binascii lzma subprocess
_curses bisect mailbox sunau
_datetime builtins mailcap symtable
_decimal bz2 mako sys
_distutils_hack cProfile markdown sysconfig
_elementtree cairo markupsafe tabnanny
_functools calendar marshal tarfile
_hashlib cgi math telnetlib
_heapq cgitb mesonbuild tempfile
_imp chunk mimetypes test
_io cmath mmap textwrap
_json cmd modulefinder this
_locale code more_itertools threading
_lsprof codecs msilib time
_lzma codeop msvcrt timeit
_markupbase collections multiprocessing tkinter
_md5 colorsys netrc token
_msi compileall nntplib tokenize
_multibytecodec concurrent nt tomli
_multiprocessing configparser ntpath tomllib
_opcode contextlib nturl2path trace
_operator contextvars numbers traceback
_osx_support copy opcode tracemalloc
_overlapped copyreg operator tty
_pickle crypt optparse turtle
_py_abc csv os turtledemo
_pydatetime ctypes packaging typeguard
_pydecimal curses pathlib types
_pyio dataclasses pdb typing
_pylong datetime pickle typing_extensions
_queue dbm pickletools typogrify
_random decimal pipes unicodedata
_sha1 difflib pkg_resources unittest
_sha2 dis pkgutil urllib
_sha3 doctest platform uu
_signal drv_libxml2 platformdirs uuid
_sitebuiltins email plistlib venv
_socket encodings poplib warnings
_sqlite3 ensurepip posixpath wave
_sre enum pprint weakref
_ssl errno profile webbrowser
_stat faulthandler pstats wheel
_statistics filecmp pty winreg
_string fileinput py_compile winsound
_strptime fnmatch pyclbr wsgiref
_struct fractions pyconsole xdrlib
_symtable ftplib pydoc xml
_sysconfigdata__win32_ functools pydoc_data xmlrpc
_testbuffer gc pyexpat xxlimited
_testcapi genericpath pygments xxlimited_35
_testclinic getopt pygtkcompat xxsubtype
_testconsole getpass python-console zipapp
_testimportmultiple gettext queue zipfile
_testinternalcapi gi quopri zipimport
_testmultiphase gidocgen random zipp
_testsinglephase glob re zlib
_thread graphlib reprlib zoneinfo
_threading_local gzip rlcompleter
_tkinter hashlib runpy
_tokenize heapq sched
Enter any module name to get more help. Or, type "modules spam" to search
for modules whose name or summary contain the string "spam".
cairo がある…。ということは cairo を使ってキッチリと描画するプラグインも作れそうかな…。
アレ? tkiniter という文字列もあるぞ? もしかして入ってたの? import できるのかな…?
>>> import tkinter as tk
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "D:\Prog\Gimp-3.0.4-Portable_Rev_2\GIMPPortable\App\gimp\lib\python3.12\tkinter\__init__.py", line 38, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
^^^^^^^^^^^^^^^
ImportError: DLL load failed while importing _tkinter: 指定されたモジュールが見つかりません。
エラーになる…。どゆこと? 実際に入ってるわけではないモジュールも並んでるということなのかな…。
この場合、Python から Tk を呼び出すための Pythonスクリプトは入ってるけれど、Tk の DLL自体は入ってないから呼び出せないということだろうか?
でもまあ、help("modules") と打てば、Python-Fu でどんなモジュールが使えそうか、ざっと調べることはできそう。
余談。GIMP 2.10.38 Portable で同じことをしたら、pathlib が入ってなかった。pathlib が標準モジュールとして導入されたのは Python 3.4 かららしい。GIMP 2.10 までは Python 2.7 が使われてるから、入ってないのだろうな…。
[ ツッコむ ]
#2 [gimp][python][editor] Python-FuをVSCodeで編集する
Windows11 x64 25H2 + GIMP 2.10.38 Portable の環境で、テキストエディタ Visual Studio Code (VSCode) を使って Python-Fuスクリプトを編集したい。
そのままだと、from gimpfu import * とか pdb. とか gimp. とか書かれてる部分でエラーが出る。
以下のページで、VSCode の設定ファイルを作成してやれば GIMP の Python-Fu のモジュールも参照してくれるようになる、と紹介されていた。
_VS Code - configure linting for PythonFu - GIMP Chat
ざっと引用。
Python-Fuスクリプトと同じ場所に、.vscode というフォルダを作成。その中に、settings.json と .env というファイルを作成。
settings.json の内容は以下。Python 2.7 の場所を指定。
.env の内容は以下。自分の場合は GIMP Portable をインストールしてあるので、"(GIMP Portableインストール場所)/App/gimp/lib/gimp/2.0/python" を指定する。要するにGIMPインストール場所の、lib/gimp/2.0/python を指定するのだろう。
これで VSCode が GIMP関係のモジュールを認識してくれるようになった。
あるいは、.env は作らずに settings.json だけ作っておいて、以下にするのもアリだろうか。
"python.analysis.extraPaths" もしくは "python.autoComplete.extraPaths" で指定した場所を VSCode が参照してくれるようになるっぽい。
ただ、エラーは出ない状態になったけど、インテリセンス/自動補完は全然効いてくれない…。もしかすると .pyi なるファイルも必要になるのだろうか?
そのままだと、from gimpfu import * とか pdb. とか gimp. とか書かれてる部分でエラーが出る。
以下のページで、VSCode の設定ファイルを作成してやれば GIMP の Python-Fu のモジュールも参照してくれるようになる、と紹介されていた。
_VS Code - configure linting for PythonFu - GIMP Chat
ざっと引用。
Python-Fuスクリプトと同じ場所に、.vscode というフォルダを作成。その中に、settings.json と .env というファイルを作成。
settings.json の内容は以下。Python 2.7 の場所を指定。
{
"python.pythonPath": "D:/Python/Python27/python.exe",
"python.envFile": "${workspaceFolder}/.vscode/.env",
}
.env の内容は以下。自分の場合は GIMP Portable をインストールしてあるので、"(GIMP Portableインストール場所)/App/gimp/lib/gimp/2.0/python" を指定する。要するにGIMPインストール場所の、lib/gimp/2.0/python を指定するのだろう。
PYTHONPATH="D:/Prog/Gimp-2.10.38-Portable/GIMPPortable/App/gimp/lib/gimp/2.0/python"
これで VSCode が GIMP関係のモジュールを認識してくれるようになった。
あるいは、.env は作らずに settings.json だけ作っておいて、以下にするのもアリだろうか。
{
"python.pythonPath": "D:/Python/Python27/python.exe",
"python.analysis.extraPaths": [
"D:/Prog/Gimp-2.10.38-Portable/GIMPPortable/App/gimp/lib/gimp/2.0/python"
],
"python.autoComplete.extraPaths": [
"D:/Prog/Gimp-2.10.38-Portable/GIMPPortable/App/gimp/lib/gimp/2.0/python"
]
}
"python.analysis.extraPaths" もしくは "python.autoComplete.extraPaths" で指定した場所を VSCode が参照してくれるようになるっぽい。
ただ、エラーは出ない状態になったけど、インテリセンス/自動補完は全然効いてくれない…。もしかすると .pyi なるファイルも必要になるのだろうか?
[ ツッコむ ]
2025/12/08(月) [n年前の日記]
#1 [nitijyou] 灯油缶の交換用キャップを購入
ホームセンターサンデー須賀川店で、灯油缶(灯油ポリタンク)の交換用キャップを購入したことをメモ。
- BOLL ポリタンクキャップ。50mm。品番 XT-18MK。大澤ワックス株式会社。MADE IN VIETNAM。税込161円。
◎ 購入した経緯 :
しばらく前にダイユーエイトで購入して予備用として残しておいた交換用キャップ(サイズ50mm)が、何度試しても ―― どのポリタンクの、どの口で試しても、入ってくれなくて…。きつくてハマらないし、必ず斜めになってしまう。これではポリタンク運搬中に灯油がこぼれる。なんだこれ…。
仕方なく、ホームセンターサンデーで別の商品を買ってきた。試してみたら、こちらはするすると閉まってくれる。やはりウチにあるポリタンクの口のサイズは50mmで合ってたらしい。
ダイユーエイトで売ってたブツは不良品っぽいな…。店頭に持ち込んで交換して貰いたいけれど、レシートは捨てちゃったかも…。
これは勝手な想像だけど、ダイユーエイトで売ってたソレは、おそらくコストダウンを優先してダメになった金型を使い続けて、本来あるべき形状に成型できてないのではないか。そんな商品をダイユーエイトはごっそり入荷しちゃったのでは…。ロット単位で全部不良品とかありそう…。あるいはそもそも設計ミスでもしてるのか…。
何にせよ、次回からはダイユーエイトでこの手の商品を買うのはやめておこう…。店頭には特定のロットをずらりと並べてるはずだし、そいつら全部ダメかもしれん…。
とかメモしちゃってるけど、自分ことだからそのうちスポーンと忘れてまた買ってきちゃって後悔しそうではある。いや待て。買ってきたらすぐに使えるか使えないかをチェックしておけばいいだけか。不良品だったらレシートも残ってるはずだし、店頭で交換して貰えば済むだろう…。
仕方なく、ホームセンターサンデーで別の商品を買ってきた。試してみたら、こちらはするすると閉まってくれる。やはりウチにあるポリタンクの口のサイズは50mmで合ってたらしい。
ダイユーエイトで売ってたブツは不良品っぽいな…。店頭に持ち込んで交換して貰いたいけれど、レシートは捨てちゃったかも…。
これは勝手な想像だけど、ダイユーエイトで売ってたソレは、おそらくコストダウンを優先してダメになった金型を使い続けて、本来あるべき形状に成型できてないのではないか。そんな商品をダイユーエイトはごっそり入荷しちゃったのでは…。ロット単位で全部不良品とかありそう…。あるいはそもそも設計ミスでもしてるのか…。
何にせよ、次回からはダイユーエイトでこの手の商品を買うのはやめておこう…。店頭には特定のロットをずらりと並べてるはずだし、そいつら全部ダメかもしれん…。
とかメモしちゃってるけど、自分ことだからそのうちスポーンと忘れてまた買ってきちゃって後悔しそうではある。いや待て。買ってきたらすぐに使えるか使えないかをチェックしておけばいいだけか。不良品だったらレシートも残ってるはずだし、店頭で交換して貰えば済むだろう…。
◎ 余談。電動ポンプの太さとキャップの穴のサイズ :
以前ダイユーエイトで、ワンタッチで開くと謳ってるキャップ(ポリタンクワンタッチキャップ POC-01、センタック株式会社)も購入したのだけど。先日ホームセンターサンデーで購入した乾電池式灯油ポンプ KOSHIN EP-306 の先端が入らないことに気づいてガックリしてしまった…。便利になることを期待して買ったのに、逆に不便になった…。
ホームセンターサンデーでも、そのワンタッチタイプのキャップを売ってたけれど、アレって大丈夫かな…。サンデーで売ってる電動ポンプと、そのキャップの組み合わせでは、ポンプが使えないのだけどな…。クレームが入ったりしないのかなあ…。
そもそもこの電動ポンプ、なんで先のほうだけ太くなってるんだか…。今まで使ってたポンプは先端が細いままだから全然使えたのに…。もしかするとポンプの給油速度を速めるために、灯油を取り込む先端のサイズをちょっと大き目にしてみた、とかだったりするのだろうか。「いえ。単にデザイン的にアクセントが欲しくて太くしただけです」とかだったら萎えそう。お前はSONYか! みたいな。 *1
ホームセンターサンデーでも、そのワンタッチタイプのキャップを売ってたけれど、アレって大丈夫かな…。サンデーで売ってる電動ポンプと、そのキャップの組み合わせでは、ポンプが使えないのだけどな…。クレームが入ったりしないのかなあ…。
そもそもこの電動ポンプ、なんで先のほうだけ太くなってるんだか…。今まで使ってたポンプは先端が細いままだから全然使えたのに…。もしかするとポンプの給油速度を速めるために、灯油を取り込む先端のサイズをちょっと大き目にしてみた、とかだったりするのだろうか。「いえ。単にデザイン的にアクセントが欲しくて太くしただけです」とかだったら萎えそう。お前はSONYか! みたいな。 *1
*1: SONYのゲーム機、プレイステーション1は、見た目のデザインを優先した結果、熱暴走しやすくなったので…。デザインを優先したら機能面/実利面では不便になりました、なんて話はあるあるだろうけど、そういう事例を目にしたら「SONYかよ」と冗談でなじる(?)ことにしてます。
[ ツッコむ ]
#2 [nitijyou] 寝室のLEDシーリングライトのリモコンについてメモ
親父さんから、寝室のLEDシーリングライトのリモコンが使えないと相談を受けた。ペコペコと押すタイプのボタンだけど、おそらく導電ゴムがダメになってきているのではないかな…。
型番は、アイリスオーヤマ CL-RU1。ググったけれど、単体で売ってる製品ではなさそう。シーリングライトとセットで売ってるものだろうし。
オーム電機から互換リモコンが販売されてることが分かった。以下のページによると、OCR-LEDR2 が対応しているらしい。
_アイリスオーヤマ LEDシーリングライト リモコンCL-RU1故障・修理 | ふろーらいとのブログ
ただ、既に販売終了品で、現在は後継の OCR-LEDR3 が販売されている状態。
_LEDシーリングライト専用照明リモコン 国内9メーカー対応 調光機能対応 品番 08-3097|株式会社オーム電機
_9メーカー対応 シーリングライト用リモコン OCR-LEDR3を購入しました(3機種で動作) | わたしのブログ by bonbonbon - 楽天ブログ
OCR-LEDR2 で CL-RU1 互換にする設定コードは 3121 とのことだけど、OCR-LEDR3 の設定一覧にも 3121 があるので、おそらく対応しているのではなかろうか…。対応していてほしい…。
_オーム電機 OCR-LEDR3 08-3097 シーリングライトリモコン LEDシーリングライト専用照明リモコン 調光機能対応 OHMのレビュー・口コミ - Yahoo!ショッピング - PayPayポイントがもらえる!ネット通販
最低限の機能は使えるらしい。どの設定コードで動くのかは分からないけど…。
とりあえずヨドバシカメラで注文してみた。どうなることやら。
ちなみに楽天でも CL-RU1 は販売されていたけれど、レビューを読んだ感じだと、中古品っぽい…? 中古品では、またボタンが効かないと親父さんが文句を言いそう。今回は避けたほうが無難かもしれない。
それにしても…。各メーカーは、既存製品/販売終了製品の信号仕様を網羅したリモコンを販売すべきではないのかと…。
型番は、アイリスオーヤマ CL-RU1。ググったけれど、単体で売ってる製品ではなさそう。シーリングライトとセットで売ってるものだろうし。
オーム電機から互換リモコンが販売されてることが分かった。以下のページによると、OCR-LEDR2 が対応しているらしい。
_アイリスオーヤマ LEDシーリングライト リモコンCL-RU1故障・修理 | ふろーらいとのブログ
ただ、既に販売終了品で、現在は後継の OCR-LEDR3 が販売されている状態。
_LEDシーリングライト専用照明リモコン 国内9メーカー対応 調光機能対応 品番 08-3097|株式会社オーム電機
_9メーカー対応 シーリングライト用リモコン OCR-LEDR3を購入しました(3機種で動作) | わたしのブログ by bonbonbon - 楽天ブログ
OCR-LEDR2 で CL-RU1 互換にする設定コードは 3121 とのことだけど、OCR-LEDR3 の設定一覧にも 3121 があるので、おそらく対応しているのではなかろうか…。対応していてほしい…。
_オーム電機 OCR-LEDR3 08-3097 シーリングライトリモコン LEDシーリングライト専用照明リモコン 調光機能対応 OHMのレビュー・口コミ - Yahoo!ショッピング - PayPayポイントがもらえる!ネット通販
アイリス純正「CL-RU1」が機能しなくなったので購入。
「全灯(でON/OFF)」「常夜灯」「明暗」しか使えませんが、私にはこれで十分です。
最低限の機能は使えるらしい。どの設定コードで動くのかは分からないけど…。
とりあえずヨドバシカメラで注文してみた。どうなることやら。
ちなみに楽天でも CL-RU1 は販売されていたけれど、レビューを読んだ感じだと、中古品っぽい…? 中古品では、またボタンが効かないと親父さんが文句を言いそう。今回は避けたほうが無難かもしれない。
それにしても…。各メーカーは、既存製品/販売終了製品の信号仕様を網羅したリモコンを販売すべきではないのかと…。
[ ツッコむ ]
2025/12/09(火) [n年前の日記]
#1 [gimp][python] GIMP 2.10 + Python-FuでWindowsのファイル選択ダイアログを表示
_先日、
GIMP 3.0 + Python-Fu でWindowsのファイル選択ダイアログを表示できるか実験していたけれど、GIMP 2.10 で同じことができるのか、動作は違ってくるのか気になったので試してみた。
環境は Windows11 x64 25H2 + GIMP 2.10.38 Portable。
環境は Windows11 x64 25H2 + GIMP 2.10.38 Portable。
◎ ソース :
以下のようなソースになった。
_m256_winopen_gimp2.py
GIMP 3.0 の場合は、開いた画像の画像バッファ名が「名称未設定」(untitled)になってしまったけれど、GIMP 2.10 の場合はバッファ名に画像ファイル名が反映されていた。やはり以下の動作は違うらしいなと…。GIMP 3.0 の動作はバグなのか、それとも仕様なのか…。
_m256_winopen_gimp2.py
"""
Windowsのファイル選択ダイアログから画像を開くPython-Fuプラグイン
ファイル > Win Open にメニュー項目が追加される。
GIMP 2.10用。
Author : mieki256
Windows11 x64 25H2 + GIMP 2.10.38 Portable
"""
from gimpfu import *
import ctypes
import os
WINOPEN_FILTERS = [
"All files {*.*}",
"*.*",
"PNG",
"*.png",
"JPEG",
"*.jpg;*.jpeg",
]
OFN_ALLOWMULTISELECT = 0x00000200
OFN_FILEMUSTEXIST = 0x00001000
OFN_PATHMUSTEXIST = 0x00000800
OFN_EXPLORER = 0x00080000
BUFFER_SIZE = 32768
class OPENFILENAME_WINDLG(ctypes.Structure):
"""Windowsの標準ファイルダイアログ用の構造体を定義"""
_fields_ = [
("lStructSize", ctypes.c_uint32),
("hwndOwner", ctypes.c_void_p),
("hInstance", ctypes.c_void_p),
("lpstrFilter", ctypes.c_wchar_p),
("lpstrCustomFilter", ctypes.c_wchar_p),
("nMaxCustFilter", ctypes.c_uint32),
("nFilterIndex", ctypes.c_uint32),
("lpstrFile", ctypes.c_wchar_p),
("nMaxFile", ctypes.c_uint32),
("lpstrFileTitle", ctypes.c_wchar_p),
("nMaxFileTitle", ctypes.c_uint32),
("lpstrInitialDir", ctypes.c_wchar_p),
("lpstrTitle", ctypes.c_wchar_p),
("Flags", ctypes.c_uint32),
("nFileOffset", ctypes.c_uint16),
("nFileExtension", ctypes.c_uint16),
("lpstrDefExt", ctypes.c_wchar_p),
("lCustData", ctypes.c_void_p),
("lpfnHook", ctypes.c_void_p),
("lpTemplateName", ctypes.c_wchar_p),
("pvReserved", ctypes.c_void_p),
("dwReserved", ctypes.c_uint32),
("FlagsEx", ctypes.c_uint32),
]
def get_openfilename_windlg(initial_dir=None, filters=None):
"""Windowsの標準ファイルダイアログを使って複数ファイルを選択"""
comdlg32 = ctypes.WinDLL("comdlg32")
comdlg32.GetOpenFileNameW.restype = ctypes.c_bool
comdlg32.GetOpenFileNameW.argtypes = (ctypes.POINTER(OPENFILENAME_WINDLG),)
ofn = OPENFILENAME_WINDLG()
lenFilenameBufferInChars = BUFFER_SIZE
buf = ctypes.create_unicode_buffer(lenFilenameBufferInChars)
ofn.lStructSize = ctypes.sizeof(OPENFILENAME_WINDLG)
# ファイル種類を設定
if filters:
ofn.lpstrFilter = "\0".join(filters) + "\0\0"
else:
ofn.lpstrFilter = "All files {*.*}\0*.*\0\0"
if initial_dir:
ofn.lpstrInitialDir = initial_dir
ofn.lpstrFile = ctypes.cast(buf, ctypes.c_wchar_p)
ofn.nMaxFile = lenFilenameBufferInChars
ofn.lpstrTitle = "Select file"
ofn.Flags = (
OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST
)
# ファイル選択ダイアログを開く
ret = comdlg32.GetOpenFileNameW(ofn)
if ret:
# "\0" を区切り文字とした文字列が得られるので分割してリストにする
s = buf[:].rstrip("\0")
path = s[: ofn.nFileOffset].rstrip("\0")
filenames = s[ofn.nFileOffset :].split("\0")
files = [os.path.abspath(os.path.join(path, f)) for f in filenames]
# ファイルパスをリストで返す
return files
return []
def python_fu_plugin_m256_win_open():
"""Windowsのファイル選択ダイアログを経由して複数画像ファイルを開く"""
# 画像を開いてない状態でも動作させるので関数に渡す引数は無い
initdir = os.path.expanduser("~")
files = get_openfilename_windlg(initial_dir=initdir, filters=WINOPEN_FILTERS)
if files:
# ファイルが選択された
for filepath in files:
# "\\" は問題があるらしいので "/" に置換
path = filepath.replace(os.sep, "/")
# 画像を読み込む
image = pdb.gimp_file_load(path, path)
if image:
gimp.Display(image) # GIMPウインドウに画像を表示する
pdb.gimp_image_clean_all(image) # 編集中フラグをクリア
else:
gimp.message("Image loading failed. [%s]" % (path))
else:
# キャンセルされた
pass
gimp.displays_flush()
# GIMPプラグインの情報を指定
register(
"python-fu-m256-win-open", # プロシージャ名
"Open Windows file select dialog", # 簡易説明
"Open image with Windows file select dialog", # 詳細説明
"mieki256", # 作者名 Author
"mieki256", # 著作権者名 Copyright
"2025/12/07", # 作成日
# メニューの表示場所に Toolbox を指定、かつ、画像種類を "" にすることで、
# 画像を開いていなくても利用できるようにするらしい。
"Win Open", # メニューラベル名
"", # 画像種類
[], # 引数
[], # 返り値
python_fu_plugin_m256_win_open, # 関数名
menu="<Toolbox>/File", # メニューの表示場所
)
main()
- GIMPのプラグインフォルダにコピーしてからGIMPを実行すると、ファイル → Win Open という項目が増える。
- Win Open を選ぶと、Windowsのファイル選択ダイアログが開く。複数ファイルの選択も可能。
- Windowsのショートカットファイル(.lnk)も辿れる。
GIMP 3.0 の場合は、開いた画像の画像バッファ名が「名称未設定」(untitled)になってしまったけれど、GIMP 2.10 の場合はバッファ名に画像ファイル名が反映されていた。やはり以下の動作は違うらしいなと…。GIMP 3.0 の動作はバグなのか、それとも仕様なのか…。
# GIMP2.10
# 画像を読み込む
image = pdb.gimp_file_load(path, path)
# GIMP 3.0
# 画像を読み込む
file = Gio.File.new_for_path(filepath_unix)
image = Gimp.file_load(Gimp.RunMode.NONINTERACTIVE, file)
[ ツッコむ ]
2025/12/10(水) [n年前の日記]
#1 [windows][pc] EPSON GT-7600UをWindows11で使いたい
書類を10枚ほどスキャンしなければならない状態になったので、埃を被ってたフラッドベッド型スキャナ EPSON GT-9600U(USB接続、CCDセンサ、主走査1200dpi/副走査1200dpi、各色12bit入力/8bit出力)を引っ張り出してきた。
_GT-7600S/GT-7600U/GT-7600UF 製品スペック情報(販売終了品)|サポート&ダウンロード|エプソン
しかしこのスキャナは滅茶苦茶古いのでWindows11用のドライバは提供されてない。どうしよう。
ググってみたら GT-9300UF用のドライバが使えるかも、という話を見かけたので試してみることにした。環境は Windows11 x64 25H2。
_EPSON GT-7600Uをwindows11で対応させる方法 | もちあるきやがれ.Blog
_GT-7600S/GT-7600U/GT-7600UF 製品スペック情報(販売終了品)|サポート&ダウンロード|エプソン
しかしこのスキャナは滅茶苦茶古いのでWindows11用のドライバは提供されてない。どうしよう。
ググってみたら GT-9300UF用のドライバが使えるかも、という話を見かけたので試してみることにした。環境は Windows11 x64 25H2。
_EPSON GT-7600Uをwindows11で対応させる方法 | もちあるきやがれ.Blog
◎ インストール手順 :
GT-7600U を USBケーブルで接続する前にドライバをインストールする。gtv30u_S.exe (EPSON Scan Rev.3.0u Windows用、バージョン:3.04J、最終更新日: 2020年10月24日) を入手。
_スキャナー GT-9300UF ドライバー・ソフトウェアダウンロード|サポート&ダウンロード|エプソン
実行してインストール。途中で機種を選ぶ画面が出てきたので、GT-9300 を選択。インストールできたら念のためにOS再起動。
GT-7600U をUSBケーブルで接続。しかしデバイスマネージャーになかなか出てこない…。USBデバイスの認識に失敗した、みたいなエラー表示が出てくる…。
何度もUSBケーブルを差し直していたら、そのうち不明なデバイスとしてGT-7600Uが出てきた。もしかするとUSBケーブルの端子の接触が悪くなっているのだろうか…。ずっと使ってなかったし。
デバイスマネージャー上で、不明なデバイスのGT-7600Uを右クリックして、ドライバの更新。手動選択で、イメージングデバイス → EPSON GT-9300 を選択。デバイスマネージャー上では GT-7600 が GT-9300 になった。
EPSON Scan を起動。最初の起動は上手く行ったし、操作をしたらスキャナも動いてプレビュー等ができたのだけど…。そのうち EPSON Scan を起動しようとしてもウインドウが出てこなくてフリーズしてる感じの状態になった。
Microsoft Store経由でWindowsスキャンをインストール。こちらなら反応する。ただ、スキャン結果は EPSON Scan と比べると結構酷い。
そのうち Windowsスキャンも反応しなくなった。起動直後の、おそらくはスキャナ検索の段階で処理中アイコンがグルグル回るだけ。
スキャナの種類として「Canon」が出ているのが気になった。階下にある、親父さん所有の複合機用ドライバもインストールしていたことを思い出した。試しに、設定 → Bluetoothとデバイス → プリンターとスキャナー → Canon複合機を削除。すると嘘のように GT-7600U が認識されるようになった。
そんな感じで一応使うことはできたのだけど…。色々不具合が起きているような気配もあるし、あまり使わないほうがいいだろうな…。
_スキャナー GT-9300UF ドライバー・ソフトウェアダウンロード|サポート&ダウンロード|エプソン
実行してインストール。途中で機種を選ぶ画面が出てきたので、GT-9300 を選択。インストールできたら念のためにOS再起動。
GT-7600U をUSBケーブルで接続。しかしデバイスマネージャーになかなか出てこない…。USBデバイスの認識に失敗した、みたいなエラー表示が出てくる…。
何度もUSBケーブルを差し直していたら、そのうち不明なデバイスとしてGT-7600Uが出てきた。もしかするとUSBケーブルの端子の接触が悪くなっているのだろうか…。ずっと使ってなかったし。
デバイスマネージャー上で、不明なデバイスのGT-7600Uを右クリックして、ドライバの更新。手動選択で、イメージングデバイス → EPSON GT-9300 を選択。デバイスマネージャー上では GT-7600 が GT-9300 になった。
EPSON Scan を起動。最初の起動は上手く行ったし、操作をしたらスキャナも動いてプレビュー等ができたのだけど…。そのうち EPSON Scan を起動しようとしてもウインドウが出てこなくてフリーズしてる感じの状態になった。
Microsoft Store経由でWindowsスキャンをインストール。こちらなら反応する。ただ、スキャン結果は EPSON Scan と比べると結構酷い。
そのうち Windowsスキャンも反応しなくなった。起動直後の、おそらくはスキャナ検索の段階で処理中アイコンがグルグル回るだけ。
スキャナの種類として「Canon」が出ているのが気になった。階下にある、親父さん所有の複合機用ドライバもインストールしていたことを思い出した。試しに、設定 → Bluetoothとデバイス → プリンターとスキャナー → Canon複合機を削除。すると嘘のように GT-7600U が認識されるようになった。
そんな感じで一応使うことはできたのだけど…。色々不具合が起きているような気配もあるし、あまり使わないほうがいいだろうな…。
[ ツッコむ ]
#2 [web] ぷららが終了するらしい
ふと、ぷららの公式サイトを覗いてみたら、ぷららは消滅してOCNと統合されるという記述が目に入った。ウチはぷららを使ってるわけで…。これは非常にマズイ…。
ぷららのメールアドレスも使えなくなるらしい。親父さんは各種Webサービスのアカウントをぷららメールで取得してるので、これまた非常にマズイ…。一応、「ぷらコミ0プラン」なるプランに切り替えることで別プロバイダを利用していてもぷららメールを利用できる状態になるらしいけど、そのぷららメール自体が将来的には無くなる予定だそうで…。これは困った…。
そんな感じで、移行先をどこにしたらいいのか調べ始めた。
ぷららのメールアドレスも使えなくなるらしい。親父さんは各種Webサービスのアカウントをぷららメールで取得してるので、これまた非常にマズイ…。一応、「ぷらコミ0プラン」なるプランに切り替えることで別プロバイダを利用していてもぷららメールを利用できる状態になるらしいけど、そのぷららメール自体が将来的には無くなる予定だそうで…。これは困った…。
そんな感じで、移行先をどこにしたらいいのか調べ始めた。
◎ IPoE(IPv6)がマズイ :
最初は、ぷららの統合先のOCNインターネットでもいいだろうか、料金は月500円ぐらい高くなるけど移行がすんなり行くのでは、と思ったけれど。調べてみたら、接続方式が IPoE になって IPv6 が渡される状態になるようで、その接続方式だと速度は速くなるけれど自宅サーバの公開が難しくなるという情報を目にした。マズイ。この日記ページは自宅サーバ上で動かして外部に公開しているので、自宅サーバの公開ができないとなると、この日記ページも消滅する…。
なんでも、IPoE はポート範囲を区切って複数のユーザ? PC? に使わせる仕組みだそうで、故に特定のポートだけを外部に開放してどうこうということができないらしい。今まで使ってた PPPoE (IPv4) は、80番ポートに外部からアクセスがあったらこのPC(サーバ機)に渡す、という仕組みを利用できたから、自宅サーバを外部に公開できていたわけで…。
IPoE(IPv6)でも自宅サーバを公開する手段はいくつかあるらしいけれど、どの手段もなんだか難しそうで…。困った…。
なんでも、IPoE はポート範囲を区切って複数のユーザ? PC? に使わせる仕組みだそうで、故に特定のポートだけを外部に開放してどうこうということができないらしい。今まで使ってた PPPoE (IPv4) は、80番ポートに外部からアクセスがあったらこのPC(サーバ機)に渡す、という仕組みを利用できたから、自宅サーバを外部に公開できていたわけで…。
IPoE(IPv6)でも自宅サーバを公開する手段はいくつかあるらしいけれど、どの手段もなんだか難しそうで…。困った…。
◎ PPPoEで接続できるプロバイダが分からない :
今まで同様 PPPoE (IPv4) で接続できるプロバイダは無いのだろうかとググってみたけれど、どのプロバイダも昨今は光コラボがどうとかで、IPoE(IPv6)だから速くなりますよと謳ってるプロバイダばかり。光コラボを選んでしまうと PPPoE は選べないということだろうか…。どうしても IPoE を使わないといかんのだろうか…。
◎ レンタルサーバはどうか :
もう自宅サーバは諦めてレンタルサーバにしようかとも思ったけれど、レンタルサーバでCGIが動かせるのか調べてみたら、ちょっとでも負荷が高いCGI動かしたら即座にBANさせてもらうで、とか書いてあって、それはちょっと危ないかもと思えてきた。今までは、自宅サーバだからこのくらいはええやろ的に日記ページを動かしてきたわけで…。
そもそもレンタルサーバってシェルでログインできないのではないか。どうなんだろ。さくらインターネットも、丸々1台サーバを貸し出します的なサービスは終了しました、とか書いてあったし…。
するとやはり自宅サーバ公開か…。
となると、PPPoE で接続して IPv4 のアドレスが渡されるプロバイダじゃないと色々面倒そう…。光コラボとやらを選んでしまうと PPPoE にできないっぽいし、フレッツ光ネクスト + プロバイダ、という契約がいいのかな…。料金は高くなってしまうけれど、どうせ今までもそうだったし…。
そもそもレンタルサーバってシェルでログインできないのではないか。どうなんだろ。さくらインターネットも、丸々1台サーバを貸し出します的なサービスは終了しました、とか書いてあったし…。
するとやはり自宅サーバ公開か…。
となると、PPPoE で接続して IPv4 のアドレスが渡されるプロバイダじゃないと色々面倒そう…。光コラボとやらを選んでしまうと PPPoE にできないっぽいし、フレッツ光ネクスト + プロバイダ、という契約がいいのかな…。料金は高くなってしまうけれど、どうせ今までもそうだったし…。
◎ ひかり電話はどうしよう :
これがまた、NTT東日本は将来的にメタル回線の電話サービスを止めると言い出してて…。ウチはまだひかり電話にしてないのだけど、ひかり電話を導入するとホームゲートウェイなるものを設置することになるらしい。その場合は自宅サーバを外部公開できるのかどうか…。ひかり電話は IPoE で提供されている、という話も見かけた気がするので、PPPoE は使えなくなったりしないか…。
つまり以下の選択肢があるのかなと…。
ひかり電話はどうしよう…。メタル回線の電話サービスの代替として、ワイヤレス固定電話というものもあるらしいので、ソレにする手もあるのかな。ただ、ウチは提供地域に入ってない…。
つまり以下の選択肢があるのかなと…。
- PPPoE (IPv4) で接続できるプロバイダを探して自宅サーバ公開を続ける。
- IPoE (IPv6) でも自宅サーバを公開できる方法を習得する。
- 自宅サーバを諦めてレンタルサーバに移行する。
- 自宅サーバもレンタルサーバも諦めて、この日記ページを消滅させて終了。
ひかり電話はどうしよう…。メタル回線の電話サービスの代替として、ワイヤレス固定電話というものもあるらしいので、ソレにする手もあるのかな。ただ、ウチは提供地域に入ってない…。
◎ 親父さんのアカウント設定変更が大変 :
何にせよ、親父さんがぷららのメールアドレスで登録してしまった各種Webサービスの設定を変更しないといけない。それをしておかないとぷらら以外のプロバイダに移行できない。プロバイダを変えてしまったらぷららメールにアクセスできなくなるから設定変更もできなくなる…。
*1
しかし、設定を変更するためにはぷららメールではない別のメールアドレスが必要だけど…。どうしよう…。どうやって確保しよう…。
親父さんが登録したアカウントの種類もめちゃくちゃ多い…。A4用紙で何枚もある…。今の親父さん自身が無事に設定変更作業をできるとは到底思えないし、自分が代わりにやってあげるしかない…。
しかし、設定を変更するためにはぷららメールではない別のメールアドレスが必要だけど…。どうしよう…。どうやって確保しよう…。
親父さんが登録したアカウントの種類もめちゃくちゃ多い…。A4用紙で何枚もある…。今の親父さん自身が無事に設定変更作業をできるとは到底思えないし、自分が代わりにやってあげるしかない…。
*1: いや、ぷらコミ0プランに切り替えればなんとかなるのかな…。
[ ツッコむ ]
2025/12/11(木) [n年前の日記]
#1 [web] ぷららからの引っ越し先を検討中
プロバイダのぷららが終了してしまうので、引っ越し先というか、移行先を検討中。ウチは自宅サーバを公開してるので、PPPoE(IPv4)接続じゃないとちょっと困る。速度が速くなるよと謳ってる IPoE(IPv6)接続では困るので、確実に PPPoE で接続できそうなプロバイダを探してる。
プロバイダによっては、IPoEはオプションで選べる、と言ってるところもあることに気づいた。オプションということは、そのオプションを選ばなければ PPPoE接続になりますよ、ということだろうか…。そうだとしたら選択肢がちょっと増えてくれそう…。
光回線はフレッツ光のままで、プロバイダだけ変更できるというプランがあることも分かってきた。例えばDTI光シンプルプランとか。ただ、DTI光シンプルプランは1年縛りがあるようで…。使ってみてとんでもなく遅かったら別プロバイダに変更したくなるだろうけど、最低でも1年間は使わないといけないというのは厳しい。いやまあ、解約金を払えば変えられるだろうけど…。
OCNに、プロバイダの機能だけを提供するプランは無いのかなと公式サイトを眺めているけれど…。これ、IPoE(IPv6)を強制されるように見えなくもないような…。PPPoE接続が選べるのかどうか、よく分からん…。
プロバイダによっては、IPoEはオプションで選べる、と言ってるところもあることに気づいた。オプションということは、そのオプションを選ばなければ PPPoE接続になりますよ、ということだろうか…。そうだとしたら選択肢がちょっと増えてくれそう…。
光回線はフレッツ光のままで、プロバイダだけ変更できるというプランがあることも分かってきた。例えばDTI光シンプルプランとか。ただ、DTI光シンプルプランは1年縛りがあるようで…。使ってみてとんでもなく遅かったら別プロバイダに変更したくなるだろうけど、最低でも1年間は使わないといけないというのは厳しい。いやまあ、解約金を払えば変えられるだろうけど…。
OCNに、プロバイダの機能だけを提供するプランは無いのかなと公式サイトを眺めているけれど…。これ、IPoE(IPv6)を強制されるように見えなくもないような…。PPPoE接続が選べるのかどうか、よく分からん…。
[ ツッコむ ]
2025/12/12(金) [n年前の日記]
#1 [nitijyou] LEDシーリングライトの互換リモコンが届いた
両親の寝室のLEDシーリングライト用リモコン、アイリスオーヤマ CL-RU1 の調子が悪い。ON/OFFボタンがなかなか反応しないからどうにかしろと親父さんが文句を言ってる。代わりのリモコンが必要。
そんなわけで、親父さんがヨドバシカメラに注文していた互換リモコン、オーム電機 OCR-LEDR3 が届いた。税込1,590円。
_LEDシーリングライト専用照明リモコン 国内9メーカー対応 調光機能対応 品番 08-3097|株式会社オーム電機
CL-RU1 の代替になるか確認してみたけれど、たしかに設定コード 3121 を設定したらLEDシーリングライトが反応してくれた。 *1 ただ、一番大きい「全灯」ボタンしか反応せず、他のボタンは一切反応しない。全灯ボタンを何度か押すことで、ON → OFF → ON → OFF が切り替わる状態になる。
その全灯ボタンも使い方が難しく…。ちょっとでも押しっぱなしにしてると連続で信号が送られるようで、LEDシーリングライトが「ピピピピ」と連続で音を鳴らして、ONにしたつもりがOFFにまで行ってしまう。「ハッ!」てなノリで素早くチョンとボタンを押せば、ON にしたり OFF にしたりできる。
しかし親父さんのことだから、消灯ボタンも押してしまって「オイ。このリモコンはダメだ。『消灯』を押しても電気が消えない」と平気で言い出しそうな気がする…。あるいは、全灯ボタンをチョンと押さないといけないのに、ベタッと押し続けて、「オイ。このリモコンはダメだ。つく時とつかない時がある」と平気で言い出しそうな気もする…。
一応、全灯ボタンだけを使うこと、素早く押せばON/OFFが切り替わること、長く押しっぱなしにするとONを行き過ぎちゃってOFFまで行ってしまうことを3回説明しておいたけど、どうせ明日になったら忘れてしまって「オイ。このリモコンはダメだ」と言い出すのだろうな…。
そんなわけで、親父さんがヨドバシカメラに注文していた互換リモコン、オーム電機 OCR-LEDR3 が届いた。税込1,590円。
_LEDシーリングライト専用照明リモコン 国内9メーカー対応 調光機能対応 品番 08-3097|株式会社オーム電機
CL-RU1 の代替になるか確認してみたけれど、たしかに設定コード 3121 を設定したらLEDシーリングライトが反応してくれた。 *1 ただ、一番大きい「全灯」ボタンしか反応せず、他のボタンは一切反応しない。全灯ボタンを何度か押すことで、ON → OFF → ON → OFF が切り替わる状態になる。
その全灯ボタンも使い方が難しく…。ちょっとでも押しっぱなしにしてると連続で信号が送られるようで、LEDシーリングライトが「ピピピピ」と連続で音を鳴らして、ONにしたつもりがOFFにまで行ってしまう。「ハッ!」てなノリで素早くチョンとボタンを押せば、ON にしたり OFF にしたりできる。
しかし親父さんのことだから、消灯ボタンも押してしまって「オイ。このリモコンはダメだ。『消灯』を押しても電気が消えない」と平気で言い出しそうな気がする…。あるいは、全灯ボタンをチョンと押さないといけないのに、ベタッと押し続けて、「オイ。このリモコンはダメだ。つく時とつかない時がある」と平気で言い出しそうな気もする…。
一応、全灯ボタンだけを使うこと、素早く押せばON/OFFが切り替わること、長く押しっぱなしにするとONを行き過ぎちゃってOFFまで行ってしまうことを3回説明しておいたけど、どうせ明日になったら忘れてしまって「オイ。このリモコンはダメだ」と言い出すのだろうな…。
◎ CL-RU1を掃除した :
互換リモコンが届いたので、元々の調子の悪いリモコン、CL-RU1を分解して掃除してみることにした。万が一壊してしまっても互換リモコンがあるから大丈夫。安心して分解できる。
事前にWeb上で分解記事等を眺めていたけれど。たしかにボタン部分は両面テープっぽいシート状のもので全面が貼り付けられていた。ちなみに、よくある両面テープではなく、両面テープのように両面に粘着性がある硬めのシートのようなもので貼りついている。
カッターの刃を少しずつ差し込んでいって、一部が剥がれたらそこから指でつまんでゆっくりじっくりちょっとずつじわじわと全面を剥がしていった。
ON/OFFのボタン部分も、基板上の接点部分も、予想通り真っ黒になっていた。アルコールの類を綿棒に染み込ませてゴシゴシと掃除。綿棒は真っ黒になった。
AV機器のリモコンのように、ゴム部分の深さがあるリモコンなら、接点部分に銅テープの類を貼り付けて修理できるかもしれないけれど…。このリモコンはペコペコと丸い出っ張りが凹むタイプなので、銅テープを貼りつけられるスペースはちょっと無さそうに見えた。鉛筆の芯を粉にして塗布するやり方ならできそうだけど。まあ、今回は掃除するだけにしておく。
掃除が終わったら、また両面テープ部分をそのまま貼り付け。粘着性が落ちてる気もするけれど、剥がれてきたら別の両面テープを貼りつけてどうにかしよう…。
自分が操作する分には、LEDシーリングライトはちゃんと反応してくれた。問題は親父さんの使い方だろうな…。
事前にWeb上で分解記事等を眺めていたけれど。たしかにボタン部分は両面テープっぽいシート状のもので全面が貼り付けられていた。ちなみに、よくある両面テープではなく、両面テープのように両面に粘着性がある硬めのシートのようなもので貼りついている。
カッターの刃を少しずつ差し込んでいって、一部が剥がれたらそこから指でつまんでゆっくりじっくりちょっとずつじわじわと全面を剥がしていった。
ON/OFFのボタン部分も、基板上の接点部分も、予想通り真っ黒になっていた。アルコールの類を綿棒に染み込ませてゴシゴシと掃除。綿棒は真っ黒になった。
AV機器のリモコンのように、ゴム部分の深さがあるリモコンなら、接点部分に銅テープの類を貼り付けて修理できるかもしれないけれど…。このリモコンはペコペコと丸い出っ張りが凹むタイプなので、銅テープを貼りつけられるスペースはちょっと無さそうに見えた。鉛筆の芯を粉にして塗布するやり方ならできそうだけど。まあ、今回は掃除するだけにしておく。
掃除が終わったら、また両面テープ部分をそのまま貼り付け。粘着性が落ちてる気もするけれど、剥がれてきたら別の両面テープを貼りつけてどうにかしよう…。
自分が操作する分には、LEDシーリングライトはちゃんと反応してくれた。問題は親父さんの使い方だろうな…。
*1: 設定の仕方は…。全灯ボタン(=1)と30分ボタン(=2)を同時に3秒間押し続けると赤いLEDが点くので、全灯ボタン=1、30分ボタン=2、60分ボタン=3として、4桁の数字を打つ。4桁が入力できると赤いLEDが消灯して設定終了。
[ ツッコむ ]
2025/12/13(土) [n年前の日記]
#1 [nitijyou] パスワード管理ソフト KeePassXC を試用
ぷららメールが消滅するので、親父さんの各種アカウントに登録されているメールアドレスを変更していかないといけない。そのためには、アカウント情報を何かにまとめてリスト化してから作業しないと…。そんなわけで、Windows11 x64 25H2上でパスワード管理ソフト KeePassXC 2.7.11 を試用してみた。
KeePassXC は、無料で利用できるオープンソースのパスワード管理ソフト。クロスプラットフォームで、Windows、Linux、Mac で利用できる。
_KeePassXC Password Manager
_keepassxreboot/keepassxc: KeePassXC is a cross-platform community-driven port of the Windows application “KeePass Password Safe”.
今回は Portable版を利用。KeePassXC-2.7.11-Win64.zip を入手して解凍。ファイル群を任意のフォルダにコピーして、KeePassXC.exe を実行したら起動した。
KeePassXC は、無料で利用できるオープンソースのパスワード管理ソフト。クロスプラットフォームで、Windows、Linux、Mac で利用できる。
_KeePassXC Password Manager
_keepassxreboot/keepassxc: KeePassXC is a cross-platform community-driven port of the Windows application “KeePass Password Safe”.
今回は Portable版を利用。KeePassXC-2.7.11-Win64.zip を入手して解凍。ファイル群を任意のフォルダにコピーして、KeePassXC.exe を実行したら起動した。
◎ フォントの変更はできるのだろうか :
パスワードの類は、0とO、1とIとl などの違いが分からなかったりすると困る。
_見分けにくい文字をIDで使用するべきではない - GIGAZINE
ところが、KeePassXC Windows版のデフォルトフォントは、それらの文字の違いが分かりづらい…。できればそれらの違いがはっきり分かるフォントを使いたい。例えばプログラミング向けフォントを選択できれば目的は叶うはず。
しかし、KeePassXC の設定画面にはフォントを変更できそうな項目が無い…。フォントサイズだけは小中大から選べるようだけど…。フォントを選べないのはパスワード管理ソフトとして結構致命的な気もするのだけどなあ…。
_Allow picking specific Monospace font - Issue #2741 - keepassxreboot/keepassxc
_Custom Font Configuration - Issue #12799 - keepassxreboot/keepassxc
_Bad font for revealed passwords and notes - Issue #10277 - keepassxreboot/keepassxc
_Allow selecting font size - Issue #6822 - keepassxreboot/keepassxc
Issueを眺めたら色んな方が要望を出していた。しかし、「せめてパスワード表示欄だけでもフォント変更したい」という要望に対して「OSのシステムフォント設定を変更して対処しろ」とかなんかスゴイこと言ってるな…。クロスプラットフォームアプリだからどのOSでも似たような見た目にしないとダメだ、とか言い出しちゃって要望を全く受け付けない状態になっているように見える。
どうやらこのアプリにフォント変更機能が実装される可能性は無さそうだと見切りをつけて KeePass に移行した方も居るな…。まあ、KeePass をクロスプラットフォームに、というのが KeePassXC らしいので、Windows環境なら本家本元の KeePass を使ったほうがいいのかもしれない。
自分も KeePass にすることにした。KeePassならフォント変更できるし。もっとも、Linux環境では KeePassXC を使うしかないだろうけど…。
0とOを見分けるのも難しいパスワード管理ソフトなんて使えたもんじゃないよな…。しかも、このアプリのためだけにOSの設定を変えろと平気で言い出す姿勢もゲンナリする…。なんだかなあ。
_見分けにくい文字をIDで使用するべきではない - GIGAZINE
ところが、KeePassXC Windows版のデフォルトフォントは、それらの文字の違いが分かりづらい…。できればそれらの違いがはっきり分かるフォントを使いたい。例えばプログラミング向けフォントを選択できれば目的は叶うはず。
しかし、KeePassXC の設定画面にはフォントを変更できそうな項目が無い…。フォントサイズだけは小中大から選べるようだけど…。フォントを選べないのはパスワード管理ソフトとして結構致命的な気もするのだけどなあ…。
_Allow picking specific Monospace font - Issue #2741 - keepassxreboot/keepassxc
_Custom Font Configuration - Issue #12799 - keepassxreboot/keepassxc
_Bad font for revealed passwords and notes - Issue #10277 - keepassxreboot/keepassxc
_Allow selecting font size - Issue #6822 - keepassxreboot/keepassxc
Issueを眺めたら色んな方が要望を出していた。しかし、「せめてパスワード表示欄だけでもフォント変更したい」という要望に対して「OSのシステムフォント設定を変更して対処しろ」とかなんかスゴイこと言ってるな…。クロスプラットフォームアプリだからどのOSでも似たような見た目にしないとダメだ、とか言い出しちゃって要望を全く受け付けない状態になっているように見える。
どうやらこのアプリにフォント変更機能が実装される可能性は無さそうだと見切りをつけて KeePass に移行した方も居るな…。まあ、KeePass をクロスプラットフォームに、というのが KeePassXC らしいので、Windows環境なら本家本元の KeePass を使ったほうがいいのかもしれない。
自分も KeePass にすることにした。KeePassならフォント変更できるし。もっとも、Linux環境では KeePassXC を使うしかないだろうけど…。
0とOを見分けるのも難しいパスワード管理ソフトなんて使えたもんじゃないよな…。しかも、このアプリのためだけにOSの設定を変えろと平気で言い出す姿勢もゲンナリする…。なんだかなあ。
[ ツッコむ ]
2025/12/14(日) [n年前の日記]
#1 [anime] 「泣きたい私は猫をかぶる」を視聴
BS12で放送されていたので視聴。初見。スタジオコロリド作品。
猫になる能力を手に入れてしまった女子中学生がなんだかんだと色々なことに巻き込まれていく話、という説明でいいのだろうか…。
作品情報を全然知らなかったのでググってみたら、佐藤順一監督 + 柴山智隆監督 + 岡田麿里さんの脚本だった。そんな組み合わせが実現できるのか…。作品の基本設定面は、佐藤順一監督風でもあり、岡田麿里風でもあり…。現実世界の中にちょっと不思議な設定が混じってくるところ、あるいは家庭問題ががっつり絡んでくるあたりは、監督さんと脚本家さん、双方の得意な守備範囲に跨っている印象を受けた。
柴山智隆監督はジブリに仕上げとして入社して、退社してから作画 → 演出と移行してきた方らしい。仕上げからスタートして監督にまでなるなんて、そんな展開もあるのか…。もっとも各種インタビュー記事を眺めると子供の頃から絵が上手かった美大卒の方だそうで。どうしてジブリはそんな人材を仕上げのままにしてたの…。でもまあ、撮影担当から監督になった方や、背景美術から監督になった方も居る業界だから、どこからスタートするかはあまり関係ないのかな。
さておき、感想としてはフツーに面白いアニメだった。なんというか、ジブリの (猫の恩返し+耳をすませば) / 2 みたいな感じで…。大絶賛されるアニメとまでは正直言えないのだけど、フツーに良作佳作扱いされてしかるべきアニメのように感じた。ジャンルとしてはいわゆるジュブナイルもの、なのだろうか。
猫になる能力を手に入れてしまった女子中学生がなんだかんだと色々なことに巻き込まれていく話、という説明でいいのだろうか…。
作品情報を全然知らなかったのでググってみたら、佐藤順一監督 + 柴山智隆監督 + 岡田麿里さんの脚本だった。そんな組み合わせが実現できるのか…。作品の基本設定面は、佐藤順一監督風でもあり、岡田麿里風でもあり…。現実世界の中にちょっと不思議な設定が混じってくるところ、あるいは家庭問題ががっつり絡んでくるあたりは、監督さんと脚本家さん、双方の得意な守備範囲に跨っている印象を受けた。
柴山智隆監督はジブリに仕上げとして入社して、退社してから作画 → 演出と移行してきた方らしい。仕上げからスタートして監督にまでなるなんて、そんな展開もあるのか…。もっとも各種インタビュー記事を眺めると子供の頃から絵が上手かった美大卒の方だそうで。どうしてジブリはそんな人材を仕上げのままにしてたの…。でもまあ、撮影担当から監督になった方や、背景美術から監督になった方も居る業界だから、どこからスタートするかはあまり関係ないのかな。
さておき、感想としてはフツーに面白いアニメだった。なんというか、ジブリの (猫の恩返し+耳をすませば) / 2 みたいな感じで…。大絶賛されるアニメとまでは正直言えないのだけど、フツーに良作佳作扱いされてしかるべきアニメのように感じた。ジャンルとしてはいわゆるジュブナイルもの、なのだろうか。
[ ツッコむ ]
2025/12/15(月) [n年前の日記]
#1 [tv] 「火星の女王」1話を視聴
NHK総合で放送されていたソレを録画していたので視聴。火星を舞台にしたSFドラマ。
こういう場所を舞台にしたTVドラマを日本でも作れるようになったのかと感心。映像がなんだかそれっぽい。映画「さよならジュピター」を見た時は、映像面でガッカリしちゃったものだけど…。VFXの進歩、万歳。
原作はSF作家小川哲さんのSF小説。ドラマの原作を書いてくれと要望されて書かれたものらしい。ただし、映像化することを前提にして書いたわけでもないそうで…。
脚本は吉田玲子さん。アニメ畑ではよく名前を見かける脚本家さんだけど、実写作品も色々手掛けてる。
科学考証は戸梶歩さん。元JAXAの方で、宇宙開発関係が守備範囲らしい。 _「いつかガンダムシリーズの科学考証もやってみたい」 と仰ってるようで…。
脚本協力に鈴木貴昭さんの名前があったけど…。ストパン、ガルパン、ハイフリで考証を担当してたあの方だろうか…。それとも別人…?
さておき、内容は…。まあ、まだ1話だから…。まずは舞台を説明することに尺を使わないといけないだろうし…。SFモノの面倒なところってそこらへんだよな…。
とりあえず、現実世界/現代ではない舞台を堂々と描いた日本の実写作品が少しでも増えてほしいので応援したい。そういうのは戦隊やライダーでしか作れない、という状況では寂しいし。どんどん前例を作って、いつの日か原作準拠のナウシカ実写版を…。まあ、自分が生きてるうちに目にすることは叶わないのだろうけど。
こういう場所を舞台にしたTVドラマを日本でも作れるようになったのかと感心。映像がなんだかそれっぽい。映画「さよならジュピター」を見た時は、映像面でガッカリしちゃったものだけど…。VFXの進歩、万歳。
原作はSF作家小川哲さんのSF小説。ドラマの原作を書いてくれと要望されて書かれたものらしい。ただし、映像化することを前提にして書いたわけでもないそうで…。
脚本は吉田玲子さん。アニメ畑ではよく名前を見かける脚本家さんだけど、実写作品も色々手掛けてる。
科学考証は戸梶歩さん。元JAXAの方で、宇宙開発関係が守備範囲らしい。 _「いつかガンダムシリーズの科学考証もやってみたい」 と仰ってるようで…。
脚本協力に鈴木貴昭さんの名前があったけど…。ストパン、ガルパン、ハイフリで考証を担当してたあの方だろうか…。それとも別人…?
さておき、内容は…。まあ、まだ1話だから…。まずは舞台を説明することに尺を使わないといけないだろうし…。SFモノの面倒なところってそこらへんだよな…。
とりあえず、現実世界/現代ではない舞台を堂々と描いた日本の実写作品が少しでも増えてほしいので応援したい。そういうのは戦隊やライダーでしか作れない、という状況では寂しいし。どんどん前例を作って、いつの日か原作準拠のナウシカ実写版を…。まあ、自分が生きてるうちに目にすることは叶わないのだろうけど。
[ ツッコむ ]
#2 [anime] オニール型スペースコロニーは2基1対が正しいらしい
NHKのSFドラマ「火星の女王」の科学考証を担当している戸梶歩さんの関連情報をググっていたら、ジークアクスにおけるコロニーの描写が話題になっていたことを知った。
_Xユーザーの戸梶 歩 「宇宙開発エバンジェリスト」さん: 「ファーストガンダムなどで描かれるオニール型コロニーがいつも1基なのが物理法則からすると好ましくないことは昔から言われていましたが、ジークアクスでは本来の形である2基が対になっている形で描かれていて宇宙界隈でちょっとした話題になっています」 / X
_Xユーザーの森田 繁さん: 「昨夜のジークアクス最重要注目点。 サイコガンダムでもギャンでもなく、ガンダム史上おそらく初めて?の、オニール型スペースコロニーが2基1対で描かれたこと。だれも見てないけど。」 / X
_XユーザーのKumagai, Mさん: 「そういえば2機で書かれていた。0083でコロニーを2基セットで移動していたのも、このタイプのコロニーは2基一対だから? ※と、すると、描かれてはいた」 / X
_ガンダムワールド
1stの時点ではそこまで考証されてなかったけれど、後のシリーズ作品ではちゃんとこだわって描写していたりもするらしい。知らなかった…。
_数百万人が暮らす宇宙島「スペース・コロニー」、実現の条件とは | サイエンス リポート | TELESCOPE magazine | 東京エレクトロン
現実に実現しているわけではないけれど、よくまあここまで考えるものだなあ…。
_【ガンダム講座第8回】コロニーは2つでワンセットの理由 : 岡田斗司夫公式ブログ
あの岡田斗司夫さんも過去に言及してた話なのか…。
_Xユーザーの戸梶 歩 「宇宙開発エバンジェリスト」さん: 「ファーストガンダムなどで描かれるオニール型コロニーがいつも1基なのが物理法則からすると好ましくないことは昔から言われていましたが、ジークアクスでは本来の形である2基が対になっている形で描かれていて宇宙界隈でちょっとした話題になっています」 / X
_Xユーザーの森田 繁さん: 「昨夜のジークアクス最重要注目点。 サイコガンダムでもギャンでもなく、ガンダム史上おそらく初めて?の、オニール型スペースコロニーが2基1対で描かれたこと。だれも見てないけど。」 / X
_XユーザーのKumagai, Mさん: 「そういえば2機で書かれていた。0083でコロニーを2基セットで移動していたのも、このタイプのコロニーは2基一対だから? ※と、すると、描かれてはいた」 / X
_ガンダムワールド
最近リリースされた『軌道戦士ガンダム0083』でも,コロニー開発公社がコロニー再生計画のためにスペースコロニーを移送中だったが,ちゃんと2基1組になっていた.GUNDAM より
1stの時点ではそこまで考証されてなかったけれど、後のシリーズ作品ではちゃんとこだわって描写していたりもするらしい。知らなかった…。
_数百万人が暮らす宇宙島「スペース・コロニー」、実現の条件とは | サイエンス リポート | TELESCOPE magazine | 東京エレクトロン
現実に実現しているわけではないけれど、よくまあここまで考えるものだなあ…。
_【ガンダム講座第8回】コロニーは2つでワンセットの理由 : 岡田斗司夫公式ブログ
あの岡田斗司夫さんも過去に言及してた話なのか…。
[ ツッコむ ]
2025/12/16(火) [n年前の日記]
#1 [python] Python Install Managerについて少し調べてた
Windows版の Python 3.14 からインストールの方法が変わったらしく、Python Install Manager? PyManager? PIM? なるものを使ってインストールすることが推奨される状態になっていたらしい。
どういうものなのか気になってちょっとだけ調べてた。
どういうものなのか気になってちょっとだけ調べてた。
◎ コマンド名 :
コマンド名自体は、今まで利用していた Python Launcher (py.exe) と同じ名前を使うらしい。
ということは Python Launcher と Python Install Manager は共存できないということだろうな…。解説記事を眺めると Python Launcher をアンインストールしてから Python Install Manager を導入せよ、と書いてある。
ということは Python Launcher と Python Install Manager は共存できないということだろうな…。解説記事を眺めると Python Launcher をアンインストールしてから Python Install Manager を導入せよ、と書いてある。
◎ ランタイムのインストール場所 :
Python Install Manager を使えばそれぞれ異なるバージョンの Python もインストールできるらしいけど、各Pythonがインストールされる場所が Cドライブ決め打ちな点がちょっと気になる…。Dドライブにしたいのだけどカスタマイズはできないのかな…。
_4. Windows で Python を使う - Python 3.14.2 ドキュメント
ドキュメントを眺めた感じでは、デフォルトのインストール場所は以下のどこからしい。
ちなみに…。
%AppData%\Python\pymanager.json が設定ファイルで、この設定ファイルを修正することでデフォルトのインストール場所を変更することができるっぽい? install_dir を新規作成して設定すれば変更できるのかな…。試してないから分からんけど。
_4. Windows で Python を使う - Python 3.14.2 ドキュメント
ドキュメントを眺めた感じでは、デフォルトのインストール場所は以下のどこからしい。
%LocalAppData%\Python\bin %LocalAppData%\Programs\Python\PythonXY %LocalAppData%\Programs\Python\PythonXY-32 %LocalAppData%\Programs\Python\PythonXY-64 %ProgramFiles%\Python X.Y %ProgramFiles(x86)%\Python X.Y
ちなみに…。
- %LocalAppData% = C:\Users\(USERNAME)\AppData\Local
- %AppData% = C:\Users\(USERNAME)\AppData\Roaming
- %ProgramFiles% = C:\Program Files
- %ProgramFiles(x86) = C:\Program Files (x86)
%AppData%\Python\pymanager.json が設定ファイルで、この設定ファイルを修正することでデフォルトのインストール場所を変更することができるっぽい? install_dir を新規作成して設定すれば変更できるのかな…。試してないから分からんけど。
◎ Python 2.xのサポート :
Python Launcher なら Python 3.x だけではなく Python 2.x も呼び出せるけど、Python Install Manager は Python 2.x を呼び出せるのだろうか…?
ググってみたけれど、それらしい情報が出てこない…。
AIに尋ねてみたけど、Python 2.x はサポートされてない、と出てくる。もっとも、AIの言うことだから…。まだ情報もそんなに揃ってないだろうから嘘を言われてる可能性も…。しかし Python Install Manager が利用しようとするインストーラ形式は msi形式ではないので、Python 2.x 時代の msi形式は利用できない、と言ってるあたりはなんだかそれっぽい。
ググってみたけれど、それらしい情報が出てこない…。
AIに尋ねてみたけど、Python 2.x はサポートされてない、と出てくる。もっとも、AIの言うことだから…。まだ情報もそんなに揃ってないだろうから嘘を言われてる可能性も…。しかし Python Install Manager が利用しようとするインストーラ形式は msi形式ではないので、Python 2.x 時代の msi形式は利用できない、と言ってるあたりはなんだかそれっぽい。
◎ インストール済みのPythonを登録できないか :
既にインストール済みのPythonを Python Install Manager に登録して利用することはできないのかなとググってみたけれど、これも情報が見当たらない。AIは、Python Install Manager を使ってクリーンインストールされたPythonしか扱えないと言ってるけれど…。
インストール済みの Python を追加登録できたら、Python Install Manager への移行が楽になりそうなのだけどな…。異なるバージョンの Ruby を利用できるようになる pik や uru ならそういうことができるのだけど、後発のはずの Python Install Manager はできないのだろうか?
インストール済みの Python を追加登録できたら、Python Install Manager への移行が楽になりそうなのだけどな…。異なるバージョンの Ruby を利用できるようになる pik や uru ならそういうことができるのだけど、後発のはずの Python Install Manager はできないのだろうか?
[ ツッコむ ]
#2 [nitijyou] かしわぎ公園に行ってみた
犬の散歩のついでに、前々から気になってた近所のかしわぎ公園に行ってみた。以前Googleマップで須賀川市の公衆トイレを探した時、「ここに公衆トイレがあるよ」と表示されていたので、公衆トイレがあるなんてさぞかし立派な公園なのではと期待して行ってみたのだけど…。
草ぼうぼうで、これを公園と呼ぶのはちょっと厳しくないかい? という状態だった。また、公衆トイレの入り口には板が張り付けられていて利用できない状態になっていた。その板もかなりボロボロだったので、最近閉鎖したのではなく随分前から閉鎖状態なのだろう…。
もっとも、この公園へのアクセスがそもそも面倒で…。住宅街のメインの道路から右折して右折して更に左折して、みたいな感じなので、そりゃ利用者も滅多に居ないだろうなと…。せめて下の道路まで階段でもあれば違ったのだろうか。いや、そんなものがあっても利用されないよな…。公園の反対側の住宅街にも階段があったのだけど、今ではロープで塞がされて利用禁止状態になってるし…。
公園を配置する時は、比較的太めの道路に隣接させて、誰でもスイスイと入れるようにしないといかんのだろう…。住宅街の奥のあたりに作ったりするとアクセスのしやすさが無くなってしまうから利用者も減ってしまって、そして誰も利用しない公園は荒れてしまう…。もっとも、太めの道路のすぐ傍なんて住宅街の一等地みたいなものだろうから、そんなところにわざわざ公園を作るなんてもったいない、高く売れる土地なのに、などと業者さんが言い出しそうな気もする。
あんな状態になってしまったら、何のためにあの公園を作ったのかさっぱり分からないな…。いや、そもそも公園って何なんだろう…。どうあるべきなんだろう…。
それはともかく改めてググってみたら、かしわぎ公園に公衆トイレがある、などという情報は一切出てこなかった。一体自分はどのページでそんな古い情報を目にしたのか…。謎だ…。
草ぼうぼうで、これを公園と呼ぶのはちょっと厳しくないかい? という状態だった。また、公衆トイレの入り口には板が張り付けられていて利用できない状態になっていた。その板もかなりボロボロだったので、最近閉鎖したのではなく随分前から閉鎖状態なのだろう…。
もっとも、この公園へのアクセスがそもそも面倒で…。住宅街のメインの道路から右折して右折して更に左折して、みたいな感じなので、そりゃ利用者も滅多に居ないだろうなと…。せめて下の道路まで階段でもあれば違ったのだろうか。いや、そんなものがあっても利用されないよな…。公園の反対側の住宅街にも階段があったのだけど、今ではロープで塞がされて利用禁止状態になってるし…。
公園を配置する時は、比較的太めの道路に隣接させて、誰でもスイスイと入れるようにしないといかんのだろう…。住宅街の奥のあたりに作ったりするとアクセスのしやすさが無くなってしまうから利用者も減ってしまって、そして誰も利用しない公園は荒れてしまう…。もっとも、太めの道路のすぐ傍なんて住宅街の一等地みたいなものだろうから、そんなところにわざわざ公園を作るなんてもったいない、高く売れる土地なのに、などと業者さんが言い出しそうな気もする。
あんな状態になってしまったら、何のためにあの公園を作ったのかさっぱり分からないな…。いや、そもそも公園って何なんだろう…。どうあるべきなんだろう…。
それはともかく改めてググってみたら、かしわぎ公園に公衆トイレがある、などという情報は一切出てこなかった。一体自分はどのページでそんな古い情報を目にしたのか…。謎だ…。
[ ツッコむ ]
2025/12/17(水) [n年前の日記]
#1 [neta] 公園をテーマにしたアニメってどうだろう
妄想メモ。
昨日、近所のかしわぎ公園に行ってみて、「公園とはどうあるべきなんだろう」とちょっと悩んでしまったのだけど。もしかすると宮崎ゴロー監督あたりに「公園とはこうあるべき」みたいな話をどこかで語ってもらったら「おお、なるほどー」と思えたりするのかなと妙な妄想をしてしまった。ゴロー監督は公園の専門家なわけだし、色んな視点で語れそうだよなと…。
そこから更にバカ妄想。ゴロー監督が公園をテーマにしたアニメを作ったら、色々な部分がパシッとハマるアニメができるんじゃないのかと。公園関係の知識が色々あるはずだし…。これはゴロー監督じゃないと作れなかったアニメだよなあ、てなことにならないか。
いやいや、公園をテーマにしたアニメって、それどんなアニメだよ。
うーん…。例えば…。公園で遊んでた子供さんが思春期になって大人になって親になって孫ができて、てな様子を描いてみる、とか。あるいは、公園が戦争中にはどんな光景になってたかを描いてみる、とか。はたまた、公園に設置してあるアレコレの雑学を網羅してみる、とか。
何にせよ、「公園をテーマにしてなんか作れ」というお題でも、色々思いつきそうな感じはする…。いやまあ、公園じゃなくて、家でも山でも商店街でも場所を示す何かならなんでもイケそうだけど。
バカ妄想でした。オチは無いです。
昨日、近所のかしわぎ公園に行ってみて、「公園とはどうあるべきなんだろう」とちょっと悩んでしまったのだけど。もしかすると宮崎ゴロー監督あたりに「公園とはこうあるべき」みたいな話をどこかで語ってもらったら「おお、なるほどー」と思えたりするのかなと妙な妄想をしてしまった。ゴロー監督は公園の専門家なわけだし、色んな視点で語れそうだよなと…。
そこから更にバカ妄想。ゴロー監督が公園をテーマにしたアニメを作ったら、色々な部分がパシッとハマるアニメができるんじゃないのかと。公園関係の知識が色々あるはずだし…。これはゴロー監督じゃないと作れなかったアニメだよなあ、てなことにならないか。
いやいや、公園をテーマにしたアニメって、それどんなアニメだよ。
うーん…。例えば…。公園で遊んでた子供さんが思春期になって大人になって親になって孫ができて、てな様子を描いてみる、とか。あるいは、公園が戦争中にはどんな光景になってたかを描いてみる、とか。はたまた、公園に設置してあるアレコレの雑学を網羅してみる、とか。
何にせよ、「公園をテーマにしてなんか作れ」というお題でも、色々思いつきそうな感じはする…。いやまあ、公園じゃなくて、家でも山でも商店街でも場所を示す何かならなんでもイケそうだけど。
バカ妄想でした。オチは無いです。
[ ツッコむ ]
2025/12/18(木) [n年前の日記]
#1 [nitijyou] KeePassで打ち込み中
親父さん関連のアカウントの情報をKeePass上で打ち込み中。十数枚の紙に印刷されたリストしかないので、どこが変わったのか把握するだけでも大変…。しかも一通り打ち込み直したら、登録したメールアドレスを変更する作業をしていかないといけない…。面倒臭い…。
[ ツッコむ ]
2025/12/19(金) [n年前の日記]
#1 [anime] 「ウィッシュ」を視聴
先週の金曜ロードショーで放送されていた版を録画していたので視聴。ディズニーの3DCGアニメ。初見。
手描き風の3DCGアニメなのだな…。キャラの動きが滑らかだからCGアニメと分かるけど、静止画で見たら手描きと勘違いしそうな質感に思えた。コマをガンガン抜いたら手描きアニメに見えたりしないか…。それにしても、CGアニメの分野では世界的に手描きへの回帰が起きてるのだろうか。
ディズニー100周年に関係する作品になる予定だったらしくて、既存作品のオマージュが色々盛り込まれていたらしい。ディズニーアニメに詳しい人なら元ネタが分かるのだろう…。自分は全然詳しくないので極一部の元ネタしか分からなかった。
途中で出てくる妖精が…。カービィ? いや、角が生えてるからアレだけど。途中まで実はコイツ悪魔じゃないのかと思いながら眺めてた…。
Wikipediaの記述によると、元々は手描きアニメとして作る計画もあったそうで。今のディズニーでそれは無理なのでは…。かなり昔に手描きアニメーターをごっそりリストラしてたのではなかったか…。でもスタジオジブリのように制作部門を解散してもまた作ってるところもあるし、ディズニーもやろうと思えば不可能ではないのかな。
興行的には失敗作として扱われているらしい。結構な赤字になったとか…。そこまで問題のある作品には見えなかったけどな…。いやまあ、たしかに100周年記念作品としては特別感が足りない感じもするけれど。いや、ディズニーに限らず○○周年記念作品ってほとんどの場合パッとしないよな…。アレは何故なのだろう。
さておき。オマージュ関係が気になってググってみたら…。
_【100個以上!?】「ウィッシュ」オマージュまとめ&独自考察 : 映画ニュース - 映画.com
_あなたは何個気づいた? 『ウィッシュ』に登場する小ネタを25個紹介! 過去のディズニー映画愛にあふれた隠れキャラ、オマージュを一挙解説[軽ネタバレ] - tvgroove
_『ウィッシュ』オマージュ一覧まとめ│考察「そんなところに…」100個以上?
スゴイな…。物量に圧倒される…。ルパン三世PART6の押井守脚本回をちょっと思い出した。
手描き風の3DCGアニメなのだな…。キャラの動きが滑らかだからCGアニメと分かるけど、静止画で見たら手描きと勘違いしそうな質感に思えた。コマをガンガン抜いたら手描きアニメに見えたりしないか…。それにしても、CGアニメの分野では世界的に手描きへの回帰が起きてるのだろうか。
ディズニー100周年に関係する作品になる予定だったらしくて、既存作品のオマージュが色々盛り込まれていたらしい。ディズニーアニメに詳しい人なら元ネタが分かるのだろう…。自分は全然詳しくないので極一部の元ネタしか分からなかった。
途中で出てくる妖精が…。カービィ? いや、角が生えてるからアレだけど。途中まで実はコイツ悪魔じゃないのかと思いながら眺めてた…。
Wikipediaの記述によると、元々は手描きアニメとして作る計画もあったそうで。今のディズニーでそれは無理なのでは…。かなり昔に手描きアニメーターをごっそりリストラしてたのではなかったか…。でもスタジオジブリのように制作部門を解散してもまた作ってるところもあるし、ディズニーもやろうと思えば不可能ではないのかな。
興行的には失敗作として扱われているらしい。結構な赤字になったとか…。そこまで問題のある作品には見えなかったけどな…。いやまあ、たしかに100周年記念作品としては特別感が足りない感じもするけれど。いや、ディズニーに限らず○○周年記念作品ってほとんどの場合パッとしないよな…。アレは何故なのだろう。
さておき。オマージュ関係が気になってググってみたら…。
_【100個以上!?】「ウィッシュ」オマージュまとめ&独自考察 : 映画ニュース - 映画.com
_あなたは何個気づいた? 『ウィッシュ』に登場する小ネタを25個紹介! 過去のディズニー映画愛にあふれた隠れキャラ、オマージュを一挙解説[軽ネタバレ] - tvgroove
_『ウィッシュ』オマージュ一覧まとめ│考察「そんなところに…」100個以上?
スゴイな…。物量に圧倒される…。ルパン三世PART6の押井守脚本回をちょっと思い出した。
[ ツッコむ ]
2025/12/20(土) [n年前の日記]
#1 [python] Pythonスクリプトをexe化するアレコレを調べてた
Pythonスクリプトをexe化するアレコレを調べてた。
◎ Codonについて :
Pythonスクリプトを高速化する Codon なるものがあるらしいと知って、そのあたりを調べてた。10倍から100倍の処理速度になるらしい。
しかし…。色々ググって調べてたんだけど…。Windows上では動作しないとのことで…。現状では Linux と Mac にしか対応してないらしい。Windows上で使いたいならWSL上で使えるよ、という解説記事しか見つからなかったけど、WSL上で動かすということは、Linux 上で動かしてるってことだよな…。
_Windows Support (2025) by K0lb3 - Pull Request #691 - exaloop/codon
Windowsに対応させるのは、なかなか大変らしい…。
しかし…。色々ググって調べてたんだけど…。Windows上では動作しないとのことで…。現状では Linux と Mac にしか対応してないらしい。Windows上で使いたいならWSL上で使えるよ、という解説記事しか見つからなかったけど、WSL上で動かすということは、Linux 上で動かしてるってことだよな…。
_Windows Support (2025) by K0lb3 - Pull Request #691 - exaloop/codon
Windowsに対応させるのは、なかなか大変らしい…。
◎ Nuitkaについて :
PythonスクリプトをC言語のソースに変換して、Cコンパイラでビルドして exe化する Nuitka という仕組みもある。Windows11 x64 25H2 + Python 3.10.10 + Nuitka 2.8.9 で exe化できるか試していたのだけど、以前とオプションがちょっと変わってたのでメモ。
GUIアプリを作成したい時、以前は "--windows-disable-console" を指定していたのだけど…。このオプションをつけると作成したexeの実行時にコンソールウインドウ(DOS窓)は開かない。
しかし、Nuitka 2.8.9 にアップデートしたら「--windows-console-mode=disable を使え」と警告が出てきた。
しかし、このオプションをつけると tkinter を使ったアプリが起動しない…。
どうやら --windows-console-mode=attach にしないとダメっぽい。また、--onefile をつけて1ファイル化しないと動いてくれなかった。
--windows-console-mode に指定できるのは4種類。
_Nuitka User Manual - Nuitka the Python Compiler
GUIアプリを作成したい時、以前は "--windows-disable-console" を指定していたのだけど…。このオプションをつけると作成したexeの実行時にコンソールウインドウ(DOS窓)は開かない。
python -m nuitka --standalone --enable-plugin=tk-inter --windows-disable-console --windows-icon-from-ico=icon.ico pyrgbfloatviewer.pyw
しかし、Nuitka 2.8.9 にアップデートしたら「--windows-console-mode=disable を使え」と警告が出てきた。
python -m nuitka --standalone --enable-plugin=tk-inter --windows-console-mode=disable --windows-icon-from-ico=icon.ico pyrgbfloatviewer.pyw
しかし、このオプションをつけると tkinter を使ったアプリが起動しない…。
どうやら --windows-console-mode=attach にしないとダメっぽい。また、--onefile をつけて1ファイル化しないと動いてくれなかった。
python -m nuitka --standalone --onefile --enable-plugin=tk-inter --windows-console-mode=attach --windows-icon-from-ico=icon.ico pyrgbfloatviewer.pyw
--windows-console-mode に指定できるのは4種類。
_Nuitka User Manual - Nuitka the Python Compiler
force : (Default) Forces a console window to open. If the program is launched from an existing console, that console will be re-used.
disable : Prevents a console window from opening. Use this for GUI programs that do not require console interaction.
attach : Attaches to an existing console if the program is launched from one; otherwise, no console window is created.
hide : Forces a console window to be created, but immediately minimizes it. The console window will typically flash briefly.
- force : コンソールウィンドウを強制的に開く。
- disable : コンソールウィンドウを開かない。
- attach : コンソールから起動された場合は既存のコンソールに接続する。そうでない場合はコンソールウィンドウを開かない。
- hide : コンソールウィンドウを開くが直ちに最小化する。
ちなみに他のオプションの意味は以下。
- --onefile : 1ファイル化する。
- --enable-plugin=tk-inter : tkinter を使う時は指定する。
- --windows-icon-from-ico=icon.ico : アイコンファイルを指定する。
◎ Mojoについて :
Pythonではなくて別の言語になってしまうけれど、Mojoというプログラミング言語があるらしい。Pythonに近い書き方ができて、圧倒的に処理速度が速いのだとか。
これもWindows版は無かった…。Linux か Mac でしか動かないっぽい。しかもオープンソースじゃないらしい。
これもWindows版は無かった…。Linux か Mac でしか動かないっぽい。しかもオープンソースじゃないらしい。
[ ツッコむ ]
2025/12/21(日) [n年前の日記]
#1 [web] Yahoo JAPANメールにThunderbirdからアクセスできない
今までメールソフト Thunderbird から Yahoo JAPAN (yahoo.co.jp) のメールサービスに imap でアクセスするようにしていたのだけど、数日前からログインできない状態が頻繁に発生して困ってる。パスワードの入力を求められるけど、打ち込んでもログインできない。
環境は Windows11 x64 25H2 + Thunderbird 140.6.0 esr 64bit。yahoo.co.jp のアカウントは2つ。
Webブラウザ(Firefox)からメールサービスにアクセスしようとすると、「短時間のうちに間違ったパスワードを使ってログインしようとしたからアカウントをロックした」と表示される…。
Thunderbird がアクセスしようとする際に、Thunderbirdのパスワードマネージャに記録されてるパスワードを使ってログインしようとするわけだけど、それがサーバ側に記録されたパスワードとは異なるパスワードになっているということ? Thunderbird がログインしようとして何度もパスワードを送って、その都度弾かれて、結果ロックされている…? それとも、Yahoo.co.jp のアカウントが2つあるせいで立て続けにサーバにアクセスする状態になって、間髪入れずにアクセスしてくるからコイツ怪しいぞとロックされてしまう?
とりあえず、そういう状態になった時は以下の作業をしてアクセスできる状態に戻しているけれど…。
ここ数日で何度パスワードを変更したか分からない。いい加減にしてくれ…。しかも以前利用したパスワードは使えないとか出てくる。
とりあえず、Thunderbird を起動した際にメールチェックしている設定を無効にすることにした。yahoo.co.jp のアカウントだけが対象。
この状態では毎回アカウントのフォルダをクリックしないと新着メッセージの有無を確認できないのだけど…。クリックするのを忘れて、実は新着メールが届いてることにずっと気づかないまま、とかありそうで怖い…。
環境は Windows11 x64 25H2 + Thunderbird 140.6.0 esr 64bit。yahoo.co.jp のアカウントは2つ。
Webブラウザ(Firefox)からメールサービスにアクセスしようとすると、「短時間のうちに間違ったパスワードを使ってログインしようとしたからアカウントをロックした」と表示される…。
Thunderbird がアクセスしようとする際に、Thunderbirdのパスワードマネージャに記録されてるパスワードを使ってログインしようとするわけだけど、それがサーバ側に記録されたパスワードとは異なるパスワードになっているということ? Thunderbird がログインしようとして何度もパスワードを送って、その都度弾かれて、結果ロックされている…? それとも、Yahoo.co.jp のアカウントが2つあるせいで立て続けにサーバにアクセスする状態になって、間髪入れずにアクセスしてくるからコイツ怪しいぞとロックされてしまう?
とりあえず、そういう状態になった時は以下の作業をしてアクセスできる状態に戻しているけれど…。
- Yahoo.co.jp 側のパスワードを変更。
- Thunderbird 側で、設定 → プライバシーとセキュリティ → パスワード → 保存されているパスワード、をクリックして、のパスワードマネージャで該当アカウントの情報を削除。1つのアカウントにつき、imap と smtp の2つを削除する。
- ThunderbirdでYahoo.co.jpのアカウントのフォルダをクリック。
- パスワードの入力を求められるので、変更後のパスワードを入力。
ここ数日で何度パスワードを変更したか分からない。いい加減にしてくれ…。しかも以前利用したパスワードは使えないとか出てくる。
とりあえず、Thunderbird を起動した際にメールチェックしている設定を無効にすることにした。yahoo.co.jp のアカウントだけが対象。
- 各アカウントのサーバー設定で、「新着メッセージがないか起動時に確認する」「新着メッセージがないかxx分ごとに確認する」のチェックを外した。
この状態では毎回アカウントのフォルダをクリックしないと新着メッセージの有無を確認できないのだけど…。クリックするのを忘れて、実は新着メールが届いてることにずっと気づかないまま、とかありそうで怖い…。
◎ Webブラウザで使い分けできないか :
2つあるyahoo.co.jpのアカウントに、1つのアプリからアクセスしようとするからトラブルが起きるのかなと思えてきた。以下のように使い分けるのはどうか…。
Yahoo JAPANとしてはメーラ経由でアクセスさせずに何が何でもWebブラウザ経由で使わせたいのだろうか。でもWebブラウザ経由では複数アカウントがある場合の切り替えが面倒なのだよな…。
- Google Chrome で、アカウントAにログインしたままにして、Yahooメールのページを開く。
- Vivaldi で、アカウントBにログインしたままにして、Yahooメールのページを開く。
Yahoo JAPANとしてはメーラ経由でアクセスさせずに何が何でもWebブラウザ経由で使わせたいのだろうか。でもWebブラウザ経由では複数アカウントがある場合の切り替えが面倒なのだよな…。
[ ツッコむ ]
2025/12/22(月) [n年前の日記]
#1 [nitijou] 100円ショップでシール用紙その他を購入
Seriaやワッツで、インクジェットプリンタで印刷可能なシール用紙を購入。
Seriaフレスポ須賀川店で以下を購入。
ワッツウィズ須賀川西ダイユーエイト店で以下を購入。
Seriaフレスポ須賀川店で以下を購入。
- 耐水性ホワイトラベルシール A4サイズ 1枚入。商品番号 713-WLS。光沢タイプ。白。耐水性。不透明。インクジェットプリンタ専用。ノーカット 297 x 210mm。厚み 0.27mm。ラベル厚 0.14mm。材質 : 紙、ポリプロピレン。発売元 ナカトシ産業株式会社。MADE IN CHINA。手差しトレイか背面給紙で使うこと、と書いてある。
- UVカットセルフラミネート写真2L判2枚入り。商品番号 8631-2L。材質 : PET、紙、アクリル系粘着剤。188 x 138 x 約0.43mm。適合サイズ 178 x 127mm。発売元 ナカトシ産業株式会社。MADE IN CHINA。
- 刺繍糸。1m x 12色。綿100%。発売元 株式会社ツクリエ。日本製。
ワッツウィズ須賀川西ダイユーエイト店で以下を購入。
- 光沢シール用紙 A4サイズ 5枚入。品番 910-GSP。グロスタイプ。インクジェットプリンタ専用。材質 : 紙、アクリル系粘着剤。297 x 210 x 0.27mm。発売元 ナカトシ産業株式会社。MADE IN CHINA。手差しトレイか背面給紙で使うこと、と書いてある。用紙設定は「光沢紙」。耐水性仕様ではないので水や汗で用紙を濡らすなと書いてある。
- PC用キーボードシール。JIS配列準拠。下地は黒。文字色は白。材質 : PVC。シールサイズ : H13 x W11mm。シール数48枚。株式会社 ECore。MADE IN CHINA。
- マグネット付ケーブルホルダー。クリップ3個入(ホワイト)。品番 36-411。丸型ケーブル用、太さ直径3mmまで対応。材質 : ABS樹脂、磁石、鉄。発売元 株式会社セイワ・プロ。MADE IN CHINA。330円商品。
- 中栓用スティック 2本組。HG-304。ステンレスボトルの中栓洗いに、と書いてある。材質 : スティック ABS樹脂、生地 ポリエステル。株式会社まめいた。MADE IN JAPAN。
◎ キーボードシールを作りたい :
普段使ってるキーボードの印字が削れてちょっと厳しいことになってきた。キーボードシールの類を貼ってどうにかできないものかとシール用紙を購入。これでキーボードシールを自作してみたい。インクジェットプリンタで印刷してキーボードに貼ればどうにかならんか。
ワッツでキーボードシールは売っていたけれど、色は黒で…。一応念のため買ってきたけれど、自分のキーボードは下地が白…。世の中は真っ黒なキーボードが主流なのだろうか? 考えてみたらノートPCのキーボードは大体黒いか…。そのせいかな…。
ワッツで購入したシール用紙が5枚入り、Seriaで購入したシール用紙が1枚入りなので、Seriaのソレは高いのではとうっかり思ってしまったけれど…。パッケージをよく読んでみたらワッツの5枚入りは「耐水性ではないから水や汗で濡らすな」と書いてあった。Seriaのソレは耐水性を謳っているので、キーボードシールにしたいならSeriaのソレを使ったほうがマシだろうか…。
A4サイズにちょこっとだけ印刷するのはもったいないので、はがきサイズのシール用紙が欲しかったけれど、100円ショップでは売ってなかった。ヤマダ電機にも寄って眺めてみたけど、何故かELECOMの商品しかなく。事前にエーワンの商品群について調べてたので、ELECOM製品はどれがどれやら。どうしてエーワンの商品群が一切置いてないの…。
ワッツでキーボードシールは売っていたけれど、色は黒で…。一応念のため買ってきたけれど、自分のキーボードは下地が白…。世の中は真っ黒なキーボードが主流なのだろうか? 考えてみたらノートPCのキーボードは大体黒いか…。そのせいかな…。
ワッツで購入したシール用紙が5枚入り、Seriaで購入したシール用紙が1枚入りなので、Seriaのソレは高いのではとうっかり思ってしまったけれど…。パッケージをよく読んでみたらワッツの5枚入りは「耐水性ではないから水や汗で濡らすな」と書いてあった。Seriaのソレは耐水性を謳っているので、キーボードシールにしたいならSeriaのソレを使ったほうがマシだろうか…。
A4サイズにちょこっとだけ印刷するのはもったいないので、はがきサイズのシール用紙が欲しかったけれど、100円ショップでは売ってなかった。ヤマダ電機にも寄って眺めてみたけど、何故かELECOMの商品しかなく。事前にエーワンの商品群について調べてたので、ELECOM製品はどれがどれやら。どうしてエーワンの商品群が一切置いてないの…。
◎ ケーブルホルダーは失敗 :
マグネット付きケーブルホルダーは、枕元でスマホを充電する際に使用するUSBケーブルの固定用にと買ってみたけれど。実際使おうとしたら、ケーブルの太さに対して穴が小さ過ぎる…。測ってみたらケーブルの直径が4mmだった。ケーブルホルダーは太さ直径3mmまで対応と謳ってるのできつくて当然。というか、手持ちのUSBケーブルを色々測ってみたら軒並み直径4mm前後で…。件のケーブルボルダーは一体どうして直径3mmを前提にしたのだろう?
何にせよ、ケーブル/電気が流れる銅線に物理的な力を加えるとそこで発熱をするので、無理矢理ケーブルをクリップに押し込めて使うのは危険な気がする。どうにか部屋の中から直径3.5mmのUSBケーブルを見つけ出して、このケーブルホルダーと組み合わせてみた。大丈夫かな…。
何にせよ、ケーブル/電気が流れる銅線に物理的な力を加えるとそこで発熱をするので、無理矢理ケーブルをクリップに押し込めて使うのは危険な気がする。どうにか部屋の中から直径3.5mmのUSBケーブルを見つけ出して、このケーブルホルダーと組み合わせてみた。大丈夫かな…。
◎ プリンタのリサイクルインクセットを購入 :
ダイユーエイト須賀川西店で、インクジェットプリンタ Canon iP4600用のリサイクルインクセットを購入したこともメモ。
ワゴンの中に入ってた。純正品はカートリッジ1本につき1,000円以上するので、それと比べると5本で900円は圧倒的に安い。まあ、処分価格だろうけど…。時間が経って中身は変色してそうな気もするけれど、この安さなら…。
それにしても、こんな値段で処分されるとは…。さすがにそろそろこのプリンタ(Canon iP4600)も、インクカートリッジが入手し難い状態になりつつあるのだろう…。
ググってみたら、リサイクルインクは認識されない等の不具合もちょくちょくあるようで…。さて、どうなることやら。
- キャノン用ジットリサイクルインクカートリッジ BCI-321+320/5MP。染料インク BCI-321BK(黒)/C(シアン)/M(マゼンダ)/Y(イエロー) + 顔料インク BCI-320PGBK(黒)。900円税抜き。
ワゴンの中に入ってた。純正品はカートリッジ1本につき1,000円以上するので、それと比べると5本で900円は圧倒的に安い。まあ、処分価格だろうけど…。時間が経って中身は変色してそうな気もするけれど、この安さなら…。
それにしても、こんな値段で処分されるとは…。さすがにそろそろこのプリンタ(Canon iP4600)も、インクカートリッジが入手し難い状態になりつつあるのだろう…。
ググってみたら、リサイクルインクは認識されない等の不具合もちょくちょくあるようで…。さて、どうなることやら。
[ ツッコむ ]
#2 [nitijyou] 自転車のソーラーテールの充電池についてメモ
普段利用している電動アシスト自転車、Panasonic ビビ・L BE-ELL432S の後ろの泥除け部分には、ソーラーテールなるものがついている。太陽光発電パネルで充電して、暗い状態で振動を感知するとLEDを光らせる仕組み。
ただ、ふと気づいたら光らなくなっていた…。たぶん充電池がダメになったのではないか。
取扱説明書によると充電池の型番は GP40BVH。しかし市場ではもう無くなっていて、後継品の TRQNB40(H) なら存在する模様。
_【お知らせ】ソーラーテール補修用電池変更のお知らせ - hapyson_cycle
そんなわけで、親父さんがヨドバシカメラに何か注文すると言ってたので、ついでにこの充電池も注文してもらって、昨日届いた。せっかくだから一緒にブレーキシューも注文してもらった。
交換作業をしてみた。
夕方頃に自転車で走ったけれど、ちゃんとソーラーテールが点滅してくれた。やはり充電池の寿命だったらしい。
ただ、ふと気づいたら光らなくなっていた…。たぶん充電池がダメになったのではないか。
取扱説明書によると充電池の型番は GP40BVH。しかし市場ではもう無くなっていて、後継品の TRQNB40(H) なら存在する模様。
_【お知らせ】ソーラーテール補修用電池変更のお知らせ - hapyson_cycle
そんなわけで、親父さんがヨドバシカメラに何か注文すると言ってたので、ついでにこの充電池も注文してもらって、昨日届いた。せっかくだから一緒にブレーキシューも注文してもらった。
- ニッケル水素ボタン電池 Hapyson TRQNB40(H)。Ni-MH 40mAh。580円税込。
- SAGISAKA ブレーキシューDX アルミリム用 バラ 1ペア レッド 61622。478円税込。
交換作業をしてみた。
- 新しい充電池にシールが貼ってあって通電しないようにしてあるので、シールを剥がしておく。
- ソーラーテールの脇のあたりにネジ止めされてるフタがある。
- プラスドライバーでネジを反時計方向に回して外す。
- フタの中に充電池があるので取り外す。
- 新しい充電池をフタの中に入れる。充電池のプラス側がソーラーテールの外側に向くように挿入。
- フタと充電池をソーラーテールにハメて、ネジを回して固定。
夕方頃に自転車で走ったけれど、ちゃんとソーラーテールが点滅してくれた。やはり充電池の寿命だったらしい。
[ ツッコむ ]
2025/12/23(火) [n年前の日記]
#1 [pc] キーボードシールを自作して貼ってみた
日常的に使ってるUSB接続キーボードのキートップの文字が削れて無くなってしまったのでどうにかしたい。キーボードシールっぽいものを自作して貼ればどうにかならないかなと思えてきたので、昨日各100円ショップで購入してきたシール用紙を使って自作を試みた。
キーボードの現状は以下。「D」「N」「M」の文字が削れて消えてしまっている。
「新しいキーボードを買えや」と言われそうだけど、このキーボード、もう売ってなくて…。CHERRYブランドのキーボード。パンタグラフのフルキーボードなのだけど、キーボードに詳しい人なら「そりゃ選択肢が少ないですね」と思うはず。 *1
Inkscape 1.4 x64 を使って、A6サイズの用紙上で3キー分を作ってみた。1キーにつき、幅11 x 高さ13 mm を目安にして作った。
昨日Seriaで購入した、耐水を謳うA4サイズのシール用紙に印刷する。ただ、A4用紙にちょこっとだけ印刷するのはもったいない。カッターで4分割してA6サイズ(105 x 148 mm)にしてみた。
Canon iP4600で印刷。用紙は「写真用紙 光沢」を選択。A6サイズの用紙はリストに無かったので、ユーザー定義用紙にして、A6サイズ = 105 x 148 mm を入力。
この手のシール用紙は染料インクのみを受け付けるらしい。顔料インクはダメ。しかし、染料インクのみで印刷するための設定方法が分からない…。一般的には、文書印刷ではなく写真印刷を選べば染料インクのみを使って印刷できる場合が多いらしいのだけど、このプリンタのドライバにはそういった設定項目は無く…。とりあえず、「きれい」にして、「モノクロ印刷」のチェックは外した。
印刷して、ハサミで切り出してみた。真四角に切らずに、角の部分を少しだけ丸く切ると、角の部分から剥がれてしまう状態を避けられるらしい。
ピンセットを使いながら貼ってみた。
ダサい。そこだけキーの色が違うのが非常にダサい。なんだか虫歯だらけの口の中で一部の歯だけ治療が終わった直後でそこだけはピッカピカ、みたいな感じ。強烈にダサい。
感触も、なんだかちょっと…。他のキーは触るとつるつるしてるのに、シールを貼ったキーだけ指がキュキュッと止まってしまう感じがする。上からフィルムの類を貼る仕上げ方のほうがいいのかもしれない。
でもまあ、これでしばらく様子を見てみよう…。ダサいけど…。
キーボードの現状は以下。「D」「N」「M」の文字が削れて消えてしまっている。
「新しいキーボードを買えや」と言われそうだけど、このキーボード、もう売ってなくて…。CHERRYブランドのキーボード。パンタグラフのフルキーボードなのだけど、キーボードに詳しい人なら「そりゃ選択肢が少ないですね」と思うはず。 *1
Inkscape 1.4 x64 を使って、A6サイズの用紙上で3キー分を作ってみた。1キーにつき、幅11 x 高さ13 mm を目安にして作った。
昨日Seriaで購入した、耐水を謳うA4サイズのシール用紙に印刷する。ただ、A4用紙にちょこっとだけ印刷するのはもったいない。カッターで4分割してA6サイズ(105 x 148 mm)にしてみた。
Canon iP4600で印刷。用紙は「写真用紙 光沢」を選択。A6サイズの用紙はリストに無かったので、ユーザー定義用紙にして、A6サイズ = 105 x 148 mm を入力。
この手のシール用紙は染料インクのみを受け付けるらしい。顔料インクはダメ。しかし、染料インクのみで印刷するための設定方法が分からない…。一般的には、文書印刷ではなく写真印刷を選べば染料インクのみを使って印刷できる場合が多いらしいのだけど、このプリンタのドライバにはそういった設定項目は無く…。とりあえず、「きれい」にして、「モノクロ印刷」のチェックは外した。
印刷して、ハサミで切り出してみた。真四角に切らずに、角の部分を少しだけ丸く切ると、角の部分から剥がれてしまう状態を避けられるらしい。
ピンセットを使いながら貼ってみた。
ダサい。そこだけキーの色が違うのが非常にダサい。なんだか虫歯だらけの口の中で一部の歯だけ治療が終わった直後でそこだけはピッカピカ、みたいな感じ。強烈にダサい。
感触も、なんだかちょっと…。他のキーは触るとつるつるしてるのに、シールを貼ったキーだけ指がキュキュッと止まってしまう感じがする。上からフィルムの類を貼る仕上げ方のほうがいいのかもしれない。
でもまあ、これでしばらく様子を見てみよう…。ダサいけど…。
*1: パンタグラフタイプのキーボードはコンパクトなキーボードがほとんどで、キー数が少なく、変態配列ばかり…。ノートPC感覚のキー配置を前提にしているのだろうか。フルキーボードも稀にあるけれど、そういった製品も何故か一部のキーが変なところに配置されてたりして…。フツーの配列で、それなりに安いキーボードが欲しかったら、メンブレンタイプから選ぶしかなさそう。
[ ツッコむ ]
#2 [nitijyou] ふりかけ探して三千里
妹が買ってきて台所に置いてあったふりかけを ―― 丸美屋しっとりやわらかソフトふりかけ豚しょうが焼き味、の封を自分が切ってしまったので、お詫び(?)に同じ商品を購入してストックしておこうと思ったのだけど。電動アシスト自転車で各店を回ったものの、これがなかなか見つからず。
以下の店を回ってみた。
8軒目のカワチでようやく見つけた。妹は「どこにでも売っている」と言ってたけれど…嘘をつくなよ…カワチでしか売ってないじゃんよ…。いやまあ、カワチにも無かったらダイソーメガステージ須賀川店まで行くしかないかなあと思ってたので、そこまで行かずに済んだのは助かった。
このソフトふりかけ、開封後は冷蔵庫で保管しないといけないそうで、扱いが面倒臭い…。
うっかり全部食べてしまうと、妹が「私まだ食べてなかったのに!」と怒り出すので、今後妹が買ってきたふりかけには絶対に手を出さないことにしたい…。いや、そもそも肉っぽいものが入ってるふりかけって自分は好きじゃないのだけど…。こんな面倒臭いことになるのはもうコリゴリ。
とりあえず、自分好みのふりかけも4種類ほど買ってきた。これだけあればしばらくは大丈夫だろう…。
以下の店を回ってみた。
- ダイソーリオンドール須賀川店
- リオンドール須賀川東店
- ザ・ビッグ須賀川店
- CanDoイオンタウン須賀川店
- ヨークベニマル須賀川森宿店
- サンドラッグ
- ヨークベニマル須賀川西店
- カワチ薬品須賀川店
8軒目のカワチでようやく見つけた。妹は「どこにでも売っている」と言ってたけれど…嘘をつくなよ…カワチでしか売ってないじゃんよ…。いやまあ、カワチにも無かったらダイソーメガステージ須賀川店まで行くしかないかなあと思ってたので、そこまで行かずに済んだのは助かった。
このソフトふりかけ、開封後は冷蔵庫で保管しないといけないそうで、扱いが面倒臭い…。
うっかり全部食べてしまうと、妹が「私まだ食べてなかったのに!」と怒り出すので、今後妹が買ってきたふりかけには絶対に手を出さないことにしたい…。いや、そもそも肉っぽいものが入ってるふりかけって自分は好きじゃないのだけど…。こんな面倒臭いことになるのはもうコリゴリ。
とりあえず、自分好みのふりかけも4種類ほど買ってきた。これだけあればしばらくは大丈夫だろう…。
[ ツッコむ ]
2025/12/24(水) [n年前の日記]
#1 [windows] ArtTipsに登録してたアプリ名が文字化けしていた
ランチャー兼クリップボード管理ツールの ArtTips x64 8.21 Unicode版に登録してた、日本語のアプリ名や、日本語が混じってるパスが、いつの間にか文字化けしてた…。環境は Windows11 x64 25H2。
どのタイミングで文字化けしてたのだろう…。Windows10 から Windows11 にアップグレードした時点で登録情報が壊れた可能性もあるけれど、Affinity Studio を動作させようとして、Windows11の文字コード関連設定を弄った際に壊れた可能性もありそう…。
_Affinity Studio 3.0.2が起動しない - mieki256's diary
とりあえず、文字化けしてるものについては登録し直した。
どのタイミングで文字化けしてたのだろう…。Windows10 から Windows11 にアップグレードした時点で登録情報が壊れた可能性もあるけれど、Affinity Studio を動作させようとして、Windows11の文字コード関連設定を弄った際に壊れた可能性もありそう…。
_Affinity Studio 3.0.2が起動しない - mieki256's diary
とりあえず、文字化けしてるものについては登録し直した。
◎ 整形関係のメニューも文字化けしてた :
見落としが無いか調べていたら、引用符/整形設定のメニューや登録文字列もごっそり文字化けしてた…。これは参った…。元々のメニュー名も分からないし、登録されていた文字種類も分からない…。修正のしようがない…。
2023年頃の ArtTips.ini をHDDから発掘した。そちらには文字化けしてない文字列が列挙されていたので、WinMergeで相違点を確認しながら現在の ArtTips.ini に書き戻してみたところメニュー表示がまともな状態になった。
2023年頃の ArtTips.ini をHDDから発掘した。そちらには文字化けしてない文字列が列挙されていたので、WinMergeで相違点を確認しながら現在の ArtTips.ini に書き戻してみたところメニュー表示がまともな状態になった。
◎ Web検索設定を見直した :
ArtTips関係で他に問題が無いか眺めてみたら、goo英和・和英辞書、excite翻訳の項目が目に入った。そのあたりのサービスは終了したのではなかったか…?
_「goo辞書」サービス終了のお知らせ [2025/6/25更新] - gooヘルプ
_エキサイト翻訳終了のお知らせ : エキサイト翻訳・オフィシャルブログ
_エキサイト翻訳、サービス終了にTwitterで惜しむ声 「英訳→和訳→英訳」で変な文を作る遊びや珍訳の思い出も(1/2) | ねとらぼ
やはりそうだった。SETTING → Web検索設定で、項目を削除しておいた。
代わりに、Bing検索、Google翻訳、weblio英和和英を追加しておいた。
_「goo辞書」サービス終了のお知らせ [2025/6/25更新] - gooヘルプ
_エキサイト翻訳終了のお知らせ : エキサイト翻訳・オフィシャルブログ
_エキサイト翻訳、サービス終了にTwitterで惜しむ声 「英訳→和訳→英訳」で変な文を作る遊びや珍訳の思い出も(1/2) | ねとらぼ
やはりそうだった。SETTING → Web検索設定で、項目を削除しておいた。
代わりに、Bing検索、Google翻訳、weblio英和和英を追加しておいた。
Bing URLエンコード : UTF8 URL(Left) : https://www.bing.com/search?q= URL(Right) : Google翻訳(和訳) URLエンコード : UTF8 URL(Left) : https://translate.google.com/?sl=auto&tl=ja&text= URL(Right) : &op=translate Google翻訳(英訳) URLエンコード : UTF8 URL(Left) : https://translate.google.com/?sl=auto&tl=en&text= URL(Right) : &op=translate weblio英和和英 URLエンコード : UTF8 URL(Left) : https://ejje.weblio.jp/content/ URL(Right) :
[ ツッコむ ]
#2 [prog] Perlのパスを環境変数PATHから除去したい
自分のメインPC(Windows11 x64 25H2)には Strawberry Perl をインストールしてあるけれど、この Strawberry Perl の中には gcc.exe が入っていて、
他のツールが gcc を呼び出して何かしようとする際、Strawberry Perl内の gcc が呼ばれてしまってちょっと困ったことになる。
一時的でも良いので、環境変数PATH内から Strawberry Perl関係のパスを除去できれば良いのだけど…。
Microsoft Copilot に batファイルを作成してもらった。AIめ…なかなかやりおるわい…。いや、誰かが書いてくれたbatファイルを持ってきてるだけ、だろうけど。
removeperlpath.bat というファイル名で保存した。
SJISで保存しておかないとダメ。最初間違って UTF-8 で保存してしまって妙なことになった。
とりあえず、このbatファイルを実行してから作業すれば不具合を回避できるだろう…。
一応、D:\home2\bin\removeperlpath.bat に置いておいたとメモ。もっともそのうち、batファイルの存在を忘れてしまいそうな予感もあるけれど。gcc を使って作業する時だけ、この問題に遭遇するので、普段は忘れてるのだよな…。
一時的でも良いので、環境変数PATH内から Strawberry Perl関係のパスを除去できれば良いのだけど…。
Microsoft Copilot に batファイルを作成してもらった。AIめ…なかなかやりおるわい…。いや、誰かが書いてくれたbatファイルを持ってきてるだけ、だろうけど。
removeperlpath.bat というファイル名で保存した。
@echo off @rem 環境変数PATHの中から、Perl関係のパスを除去する。 @rem Strawberry Perl の中に gcc.exe が入っていて、別ツールがその gcc を呼び出して不具合が起きる。 @rem このbatファイルを実行してから作業すれば問題を回避できる。 setlocal enabledelayedexpansion REM --- 削除したいパスを指定 --- set REMOVE_PATH=D:\Perls\strawberry\5.32.1.1-x64\c\bin;D:\Perls\strawberry\5.32.1.1-x64\perl\site\bin;D:\Perls\strawberry\5.32.1.1-x64\perl\bin; REM --- 現在の PATH を取得 --- set CURRENT_PATH=%PATH% REM --- 置換で削除 --- set CURRENT_PATH=!CURRENT_PATH:%REMOVE_PATH%=! REM --- 先頭と末尾のセミコロンを除去 --- if "!CURRENT_PATH:~0,1!"==";" set CURRENT_PATH=!CURRENT_PATH:~1! if "!CURRENT_PATH:~-1!"==";" set CURRENT_PATH=!CURRENT_PATH:~0,-1! REM --- PATH を更新 --- set PATH=%CURRENT_PATH% echo PATH updated for this session only. echo. echo New PATH: echo %PATH% @rem endlocal endlocal & set "PATH=%CURRENT_PATH%"
SJISで保存しておかないとダメ。最初間違って UTF-8 で保存してしまって妙なことになった。
とりあえず、このbatファイルを実行してから作業すれば不具合を回避できるだろう…。
一応、D:\home2\bin\removeperlpath.bat に置いておいたとメモ。もっともそのうち、batファイルの存在を忘れてしまいそうな予感もあるけれど。gcc を使って作業する時だけ、この問題に遭遇するので、普段は忘れてるのだよな…。
[ ツッコむ ]
2025/12/25(木) [n年前の日記]
#1 [cg_tools] Affinity Studio 3.0.2 が起動しない原因が分かった
自分の手元の環境(Windows11 x64 25H2)上で、無料で利用できる画像編集/ドローソフト Affinity Studio 3.0.2 をインストールしても起動してくれなくて、原因は何だろうと思っていたけれど。
以下のページを目にして原因が分かった…。
_Affinity 3 by Canvaのよくある質問(2025年11月時点) Design - Qiita
_Xユーザーの秀右衛門さん: 「その後、筆まめ(ver.34)があると起動しない事が判明した。(中略) / X
_Xユーザーのまはふらい先生さん: 「(中略)結果としては一部の連綿体フォントが原因と特定できたが余計な時間を使わせやがって…」 / X
_Xユーザーのかわおさん: 「(中略)もし筆まめを入れている場合は、一緒にバンドルフォントがいくつか入っている、それが悪さをしている可能性が」 / X
年賀状ソフトの「筆まめ」に同梱されていた一部のフォントが原因で起動しない、という話を見かけた。「連綿体」と名付けられているフォントがいかんらしい…。たしかに、自分の環境にも筆まめがインストールされていて、以下のフォントが入っていた。
この3つのフォントについては、以下の症状が起きていることにも気づいた。
もっとも、文字のプレビューができないのは、ひらがなしか含まれていないフォントだからかもしれない。英数字は含まれてないし、漢字も含まれていないので、プレビューに使う文字も含まれていない。表示されないのは当然かも。だとしても、フォント管理ツールがフォント名を正常取得できない点はやはりおかしいだろう…。
試しに、この3つのフォントファイルを削除してみた。一応削除する前に、別の場所にコピーしてバックアップを取っておいた。
Affinity Studio を 3.0.0 から 3.0.2 にアップデートしてみた。起動した…。あっさり起動した…。
なんてこった。筆まめのせいだったのかよ…。そんなのわかるわけねえよ…!! いやはや、原因を探り当てた方々、凄いな…。
以下のページを目にして原因が分かった…。
_Affinity 3 by Canvaのよくある質問(2025年11月時点) Design - Qiita
_Xユーザーの秀右衛門さん: 「その後、筆まめ(ver.34)があると起動しない事が判明した。(中略) / X
_Xユーザーのまはふらい先生さん: 「(中略)結果としては一部の連綿体フォントが原因と特定できたが余計な時間を使わせやがって…」 / X
_Xユーザーのかわおさん: 「(中略)もし筆まめを入れている場合は、一緒にバンドルフォントがいくつか入っている、それが悪さをしている可能性が」 / X
年賀状ソフトの「筆まめ」に同梱されていた一部のフォントが原因で起動しない、という話を見かけた。「連綿体」と名付けられているフォントがいかんらしい…。たしかに、自分の環境にも筆まめがインストールされていて、以下のフォントが入っていた。
- AR行楷連綿体H 標準 (JSLM00H.TTF, 367,619 byte)
- AR行楷連綿体L 標準 (JSLM00L.TTF, 358,069 byte)
- CRC&G流麗連綿体 標準 (JRLM00M.TTF, 402,445 byte)
この3つのフォントについては、以下の症状が起きていることにも気づいた。
- エクスプローラで C:\Windows\Fonts\ を開くと、この3つのフォントはアイコン上で文字の見た目がプレビューされない。
- nexusfont というフォント管理ツールで確認すると、この3つのフォントはフォント名を正しく取得できずに文字化けしたフォント名になっていた。かつ、文字のプレビューもできていない。
もっとも、文字のプレビューができないのは、ひらがなしか含まれていないフォントだからかもしれない。英数字は含まれてないし、漢字も含まれていないので、プレビューに使う文字も含まれていない。表示されないのは当然かも。だとしても、フォント管理ツールがフォント名を正常取得できない点はやはりおかしいだろう…。
試しに、この3つのフォントファイルを削除してみた。一応削除する前に、別の場所にコピーしてバックアップを取っておいた。
Affinity Studio を 3.0.0 から 3.0.2 にアップデートしてみた。起動した…。あっさり起動した…。
なんてこった。筆まめのせいだったのかよ…。そんなのわかるわけねえよ…!! いやはや、原因を探り当てた方々、凄いな…。
◎ 「CRC&G流麗連綿体」は問題のあるフォント :
このフォント群は他にも問題を起こしてるのではないかと不安になってググってみたら、予想通りだった。
_GIMPで縦書き - mynote
_筆まめのフォントが原因でフォント選択で強制終了 | yuuAn's Note
GIMPのプラグインやワードパットでも、CRC&G流麗連綿体が不具合を引き起こしていたらしい。
筆まめ、酷いな…。他のアプリに迷惑かけまくってるやん…。いや、かけまくってると言えるほど迷惑かけてるわけでもないか…。いやいや、何かしらのアプリで不具合が起きていても、まさか日本語フォントのせいとは気づかなくてスルーされているだけではないのか? 実際にはもっと色んなアプリに迷惑かけちゃってる可能性は否定できない気もする。
しかしどうしてこんなトラブルが起きるのだろう。何か珍妙なフォントファイルになっているのは間違いないのだろうけど…。
_GIMPで縦書き - mynote
_筆まめのフォントが原因でフォント選択で強制終了 | yuuAn's Note
GIMPのプラグインやワードパットでも、CRC&G流麗連綿体が不具合を引き起こしていたらしい。
筆まめ、酷いな…。他のアプリに迷惑かけまくってるやん…。いや、かけまくってると言えるほど迷惑かけてるわけでもないか…。いやいや、何かしらのアプリで不具合が起きていても、まさか日本語フォントのせいとは気づかなくてスルーされているだけではないのか? 実際にはもっと色んなアプリに迷惑かけちゃってる可能性は否定できない気もする。
しかしどうしてこんなトラブルが起きるのだろう。何か珍妙なフォントファイルになっているのは間違いないのだろうけど…。
[ ツッコむ ]
#2 [cg_tools] Afinity Designer/Studioにスウォッチを追加
Affinity Designer 2.6.5 / Affinity Studio 3.0.2 にスウォッチを追加してみた。環境は Windows11 x64 25H2。
スウォッチとは…。カラーパレットみたいなもの。色見本とでもいうか…。
このあたり、前にも作業していた気がする…。
_mieki256's diary - Affinity Designerのスウォッチ種類を増やしたい
Affinity xxxx の場合、スウォッチとして利用できるファイルは以下らしい。
_PhotoshopのカラーパレットをAffinityDesignerで使う|こるり
スウォッチとは…。カラーパレットみたいなもの。色見本とでもいうか…。
このあたり、前にも作業していた気がする…。
_mieki256's diary - Affinity Designerのスウォッチ種類を増やしたい
Affinity xxxx の場合、スウォッチとして利用できるファイルは以下らしい。
- .afpalette : Affinity製アプリ用のスウォッチデータファイル
- .ase : Photoshop用のスウォッチデータファイル
_PhotoshopのカラーパレットをAffinityDesignerで使う|こるり
◎ ファイル入手先 :
以下のページでスウォッチファイルを公開してくれている方が居るので感謝しつつダウンロードさせてもらった。
_Affinity用スウォッチとグラデーションの配布 | ToooNの工作室
_Deefaze/Affinity-Designer-Palettes: Affinity Designer/Photo Palettes files
_Affinity Designer 16 Palettes/Swatches flat colors sets - Resources - Affinity | Forum
個人的にドット絵用/ピクセルアート用のパレットも好きなので、以下のページから .ase もダウンロードした。
_DawnBringer 32 Palette
_DawnBringer 16 Palette
_DawnBringer's 8 color Palette
_Sweetie 16 Palette
_PICO-8 Palette
Flat UI Colors も好きなので、そちらも入手。
_Palettes | Flat UI Colors - 280 handpicked colors ready for COPY & PASTE
_rokf/gplflat: Flat UI Color Palette in .gpl Gimp Color Palette
他のGIMPパレットファイル(.gpl)の入手先もメモ。
_CGA, Fresh ICS & Flat / Material / Social UI colors - OpenDesktop.org
_マテリアルデザイン / フラットデザイン / SNS などをイメージして作られた 5 種類の GIMP 用パレット - GIGA!無料通信
_Robert-96/gimp-color-palettes: A collection of RGB color palettes for GIMP and Inkscape (but also Aseprite, Drawpile, Krita and MyPaint).
_gimp-color-palettes/palettes at main - Robert-96/gimp-color-palettes
_Affinity用スウォッチとグラデーションの配布 | ToooNの工作室
_Deefaze/Affinity-Designer-Palettes: Affinity Designer/Photo Palettes files
_Affinity Designer 16 Palettes/Swatches flat colors sets - Resources - Affinity | Forum
個人的にドット絵用/ピクセルアート用のパレットも好きなので、以下のページから .ase もダウンロードした。
_DawnBringer 32 Palette
_DawnBringer 16 Palette
_DawnBringer's 8 color Palette
_Sweetie 16 Palette
_PICO-8 Palette
Flat UI Colors も好きなので、そちらも入手。
_Palettes | Flat UI Colors - 280 handpicked colors ready for COPY & PASTE
_rokf/gplflat: Flat UI Color Palette in .gpl Gimp Color Palette
他のGIMPパレットファイル(.gpl)の入手先もメモ。
_CGA, Fresh ICS & Flat / Material / Social UI colors - OpenDesktop.org
_マテリアルデザイン / フラットデザイン / SNS などをイメージして作られた 5 種類の GIMP 用パレット - GIGA!無料通信
_Robert-96/gimp-color-palettes: A collection of RGB color palettes for GIMP and Inkscape (but also Aseprite, Drawpile, Krita and MyPaint).
_gimp-color-palettes/palettes at main - Robert-96/gimp-color-palettes
◎ スウォッチ追加方法 :
Affinity xxxx にスウォッチを追加するには、Affinity xxxx のウインドウにファイルをドラッグアンドドロップする。以下の動画で解説されてる。
_AffinityDesignerにスウォッチを登録する方法 - YouTube
以前の自分は一々メニューから辿って作業してたようで…。どう考えても上記の方法のほうが楽だな…。
_AffinityDesignerにスウォッチを登録する方法 - YouTube
以前の自分は一々メニューから辿って作業してたようで…。どう考えても上記の方法のほうが楽だな…。
◎ 関連ツール :
Windows環境なら、GIMPパレットファイル(.gpl)から、Photoshopのスウォッチファイル(.ase)に変換できるツール(GPL2ASE.exe)が存在するので、GIMPパレットファイル(.gpl)さえ入手できれば好きなパレットを Affinity xxxx に追加できそう。
_solarstrings/GPL2ASE: GIMP .gpl to Adobe .ase palette converter
_solarstrings/GPL2ASE: GIMP .gpl to Adobe .ase palette converter
[ ツッコむ ]
2025/12/26(金) [n年前の日記]
#1 [python] Pythonスクリプト内に画像を含めたい
Pythonスクリプト内にpng画像を含めておいて、Pillowで読み込んで画像処理をしたい。そんなことできるのかな…?
png画像をbase64に変換してしまえば可能。と、Microsoft Copilot が言っている。Windows11 x64 25H2 + Python 3.10.10 で試してみた。
_01_embed_image_file.py
im.convert("RGBA").point(lambda p: p * 2.0) で、画像の明度を上げている。
元画像は以下。

スクリプト実行後の出力画像は以下。

たしかに、base64文字列を Pillow で画像として読み込んで、画像処理ができている。
png画像をbase64に変換してしまえば可能。と、Microsoft Copilot が言っている。Windows11 x64 25H2 + Python 3.10.10 で試してみた。
_01_embed_image_file.py
"""
画像ファイルをPythonスクリプト内にbase64の形で含めておいて、
Pillow で読み込んで処理をするスクリプト。
"""
import base64
from io import BytesIO
from PIL import Image
# --- PNG画像(64x64, RGB)を base64 で埋め込む ---
EMBEDDED_PNG_BASE64 = (
"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFzklEQVR42u2aW2wU"
"VRjH/zuXvV+6l27bpZQtbQkFaaGAlLsFuWgEa4ghUR55wAejPJD4YGIgPhh9QDHh"
"haoPRjfhBSLVQECSyrVaWkuhgm4tVmixl712Z3Z3ZnZ9qKGsO3t2t7SJkXOSTXbO"
"931n5vzmnO/7zpmjaWkxpkEoTVIJSQyvZCDKK5J6orw0qSXKHXGy3C7yRLk1RJYz"
"eMoLBUABUAAUAAXwNBdOaiLH+USigigX42T7mGAhyg2CkSjno2Q5E9Ln6aKOjgAK"
"gAKgACgACoACyJUHeMnr+biYJ87HXET5ZIxsr4uS8wRWZ8rTBbI8FTLQEUABUAAU"
"AAVAAeQKg1lhLyBBSSiProOJydwhimdQxirgODajPhSKIZmUAQCKmMqyK3PawWg0"
"GXUTkxGIyWT2clhmYdKqL3mVdAoPxSBGhAAikoCYHEdCkWDgdDCyWlh4I7yJMrh4"
"K4yM+rKYS1ZkNj58LYixrwOPrm/hATkKOwzYumc96hoXQvNPp7q6/bhy5kZOmwMH"
"9sHrnT/1ALwNANDhv4OT37dn6b7fegi1Je6MurAQQdfgTZzpOY+HsfGC3vSxqiNo"
"tCyZ/SkQC4j45sQF9F7pL9jm/PkfIMty0fdKI42f/7iNg77DOHHZV3DnASCmCHPr"
"Ay74LmN8JFCQ7sDAEO7eHSj6HpfudOKDs8chyPHiX9RcAwAAf9+9gnXb2y9AFAvv"
"yJ1hP453fDnjZ4vKk4U5wVxlyzvrYCkzIzwcwZW2LkjB7CHsvzmI5u1NBbUXDEbQ"
"29sPT31ZXt2kLOGrq6eIOmucy7HVuwF2QwlMvAFKOgVBEhDyR9EduYmI8oQAtCYt"
"TA4jTA4jGlvr0fVFX5ZOOBAt6q2cPn0OzfOaYLfaiHr3xv7EbxPqo6ucd+FQ8xtY"
"5KjJiiwAYA6ZsNP1HCJy9MkApFNppNNAUkjifu+Iqs7CJVXFz+ueTuzevJ2o8/vY"
"UE7ZW6v3Y7GzFgAgynEIkpgZ1pOJR//FVBwGRj8zAEincfGTyxi9NYG0pP5Fvbah"
"mtiEx+PG8PBoRt23Vy9i1ZIGot39gDpwI6dHvatu2k+M+/Hu9Y9ytvNp1RE0/CsU"
"MslSLR7/KWZW1TjhMsK9wZuz854VC+BcV4+o04K4ST1x2bR3t2r9me5ORLXqiUrY"
"ZENEo+6rGxatRdhcjnGjC+NGF8J68lQK8naMaUszfkVFAdfiUvV5uKwSLft3gNeR"
"DyOUz/dg48vbsuq7u6+ho+NcTjub2a5ar1GZ83O6FrBU2qCrmt5hca52o+XNF/HC"
"wVdgdloLamP5+mfB67NPfQhC7pTbaVMH3/PrdSRmkBPMzAcAYDgG247uQkpSwPAs"
"OD2HsqinqBuabRbseK0V7Z+fLNhmQUWN+nadJKBz8BI21U2NqmpXHT7c1Qbfj23o"
"+ev63KwGOT0HrUUHTs/NmPri5c+gvLqyYH1PaSWWVa9SlX3208c4e/sURqMPwWgY"
"GHgDNBpmbkbAbBVep0VL6074jrYV9pAsj5c2voq+wS5Vua+3Db7etrn3AbNZqhYt"
"xNLmFQXrV7oX4O297/1/NkQYhsHaHZuLsqmbX4/D+49h3dIts7chEndkemTFqQW7"
"Zjom6+Up7y7YjWDt2d/qdWz2vrxsN8PeOLXe56XptkJWC0TzdBuszYKNra9j4FZP"
"zgcMm0owanrs24KpBM/vOYSVW/ZhaKgfI/0DuDHwHZRUQtXezdai1roSFaYapMx1"
"GNE6MkNpTd8a4kFJb3QZOTeIzCPKS0JucmidcJI3XEbJH1ZMD6xQUjISkghFSUJJ"
"ydBoGHAsD57Tw/ZL6X/PCc52YRkORp2FbopSABQABUABFJ0HiHbyEjbE5DuHR/4+"
"n1DMRHk0Qfbexhh5lanPsweg4210BFAAFAAFQAFQABRAjjwgZOXzqJDP24dS5HN4"
"eomcJ2hFcp6gNZDzBF5HjvM8b6UjgAKgACgACoACoADUy9/LmLwcqfyorgAAAABJ"
"RU5ErkJggg=="
)
def main():
binary = base64.b64decode(EMBEDDED_PNG_BASE64)
im = Image.open(BytesIO(binary))
print(f"Loaded image: size={im.size} mode={im.mode}")
newim = im.convert("RGBA").point(lambda p: p * 2.0)
newim.save("output.png")
print("Saved processed image as output.png")
if __name__ == "__main__":
main()
im.convert("RGBA").point(lambda p: p * 2.0) で、画像の明度を上げている。
元画像は以下。

スクリプト実行後の出力画像は以下。

たしかに、base64文字列を Pillow で画像として読み込んで、画像処理ができている。
◎ base64への変換 :
png画像をbase64に変換する方法で少し悩んだ。最初は Python スクリプトで書いたけど…。
_png2base64.py
ググってみたら、Windows環境の場合、certutil というプログラムで base64 に変換できるらしい。
_WindowsでBase64エンコード/デコードする方法 コマンドプロンプト - Qiita
DevToys でも base64 に変換できることに気づいた…。DevToys もインストール済みだった…。
_DevToys - A Swiss Army knife for developers
_エンジニアのための十徳ナイフ「DevToys」がバージョン2になってクロスプラットフォームやCLI対応しさらに便利すぎる ツール - Qiita
CLI版の devtoys.cli.exe なら、以下で base64 にできた。
ヘルプは以下で表示できる。
_png2base64.py
"""
Convert png to base64
Usage : python png2base64.py
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import base64
FILENAME = "input.png"
def image_to_base64(file_path):
try:
with open(file_path, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
return encoded_string
except FileNotFoundError:
return f"Error: Not found {file_path}"
if __name__ == "__main__":
result = image_to_base64(FILENAME)
print(result)
ググってみたら、Windows環境の場合、certutil というプログラムで base64 に変換できるらしい。
certutil -f -encode input.png base64.txt
_WindowsでBase64エンコード/デコードする方法 コマンドプロンプト - Qiita
DevToys でも base64 に変換できることに気づいた…。DevToys もインストール済みだった…。
_DevToys - A Swiss Army knife for developers
_エンジニアのための十徳ナイフ「DevToys」がバージョン2になってクロスプラットフォームやCLI対応しさらに便利すぎる ツール - Qiita
CLI版の devtoys.cli.exe なら、以下で base64 にできた。
devtoys.cli.exe base64img -i input.png
ヘルプは以下で表示できる。
devtoys.cli --help devtoys.cli base64img --help
[ ツッコむ ]
#2 [xyzzy] xyzzy上で1行を任意の文字数で分割したい
base64の文字列はずらずらと長いので、一定の文字数で複数行に分割したい。テキストエディタ xyzzy でそういうことはできないのかな? できたような気がする。たぶん。
_Tips - xyzzy - 編集機能 - 詰め込み機能
_xyzzy の音 - 編集
fillコマンドとやらを使えばできるらしい。fill-paragraph に M-q が割り当てられてるから、分割したい行にカーソルを置いて M-q を押すだけで分割できた。
_Tips - xyzzy - 編集機能 - 詰め込み機能
_xyzzy の音 - 編集
fillコマンドとやらを使えばできるらしい。fill-paragraph に M-q が割り当てられてるから、分割したい行にカーソルを置いて M-q を押すだけで分割できた。
◎ 桁数を変更 :
1行が72文字になるな…。もっと1行の文字数を減らしたい…。
折り返したい位置までカーソルを持っていって、set-fill-column (C-x f) を実行すれば、文字数、というか桁数を指定できるらしい。
あるいは ESC 桁数 C-x f と打つらしい。
余談。Obsidian上で検索したら、昔、このあたりをメモしてあった…。すっかり忘れてた…。
折り返したい位置までカーソルを持っていって、set-fill-column (C-x f) を実行すれば、文字数、というか桁数を指定できるらしい。
あるいは ESC 桁数 C-x f と打つらしい。
余談。Obsidian上で検索したら、昔、このあたりをメモしてあった…。すっかり忘れてた…。
[ ツッコむ ]
#3 [python] Pythonスクリプトからウインドウハンドルを使ってアレコレしたい
Windows11 x64 25H2 + Python 3.10.10 で、Pythonスクリプトに与えられたウインドウハンドル(HWND)に対して描画処理ができるのかどうかが気になった。
ウインドウハンドル(HWND)というのは、Windowsのデスクトップに表示されているウインドウを識別する管理ID、みたいなものと思っておけばいいのだろうか。ウインドウハンドルが分かれば、そのウインドウに対してアレコレできる。らしい。たぶん。
pywin32 というモジュールを使えば、そのあたり比較的楽に実現できるらしい。おそらく ctypes を使ってもできるのだろうけど、どうせなら簡単なほうがいいよな…。
_pywin32 - PyPI
pywin32 のインストールは以下。
pywin32 311 がインストールされた。
一般的には以下を import して使うらしい。
ウインドウハンドル(HWND)というのは、Windowsのデスクトップに表示されているウインドウを識別する管理ID、みたいなものと思っておけばいいのだろうか。ウインドウハンドルが分かれば、そのウインドウに対してアレコレできる。らしい。たぶん。
pywin32 というモジュールを使えば、そのあたり比較的楽に実現できるらしい。おそらく ctypes を使ってもできるのだろうけど、どうせなら簡単なほうがいいよな…。
_pywin32 - PyPI
pywin32 のインストールは以下。
python -m pip install pywin32
pywin32 311 がインストールされた。
一般的には以下を import して使うらしい。
import win32gui # Windowsのウィンドウ操作(作成、描画開始など)に使用 import win32con # Windows APIの定数(WM_PAINT, WS_CHILDなど)を定義 import win32api # Windowsの基本機能(インスタンス取得、サイズ取得など)に使用
◎ ウインドウを新規作成する :
本来は何かしらのプログラムからウインドウハンドルをPythonスクリプトに渡して処理したいけれど…。まずはPythonでウインドウを新規作成して、そのウインドウのウインドウハンドルを取得できるのか確認してみたい。
Google Geminiにお願いしてスクリプトを作ってもらった。一発では動かなくて何度かやり取りしたけれど…。せっかくだからコメントもマシマシにしてもらった。
import のあたりに pywin32 _01_createwindow.py
実行すると以下のようなウインドウが表示された。

単にウインドウを作っただけで、まだ何も描画してないけれど、Python + pywin32 を使ってウインドウを新規作成できること、ウインドウハンドルを取得できることは分かった。
Google Geminiにお願いしてスクリプトを作ってもらった。一発では動かなくて何度かやり取りしたけれど…。せっかくだからコメントもマシマシにしてもらった。
import のあたりに pywin32 _01_createwindow.py
"""
pywin32でウインドウを新規作成してウインドウハンドル(HWND)を取得。
描画は何もしない。ウインドウの生成のみを行う。
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import win32gui
import win32con
import win32api
def wnd_proc(hwnd, msg, wparam, lparam):
"""
ウィンドウプロシージャ。ウィンドウに送られてくるイベント(メッセージ)を処理する関数
"""
# ウィンドウが破棄される時の処理。閉じるボタンが押された等。
if msg == win32con.WM_DESTROY:
print("WM_DESTROY 受信。メッセージループ(PumpMessages)終了信号を送る。")
win32gui.PostQuitMessage(0)
return 0
# 自分で処理しないメッセージは、OS提供のデフォルト処理に任せる
return win32gui.DefWindowProc(hwnd, msg, wparam, lparam)
def create_window():
# --- 1. ウィンドウクラスの定義 ---
window_class_name = "MyPythonWindowClass" # ウィンドウの「型」となるクラス名
wc = win32gui.WNDCLASS() # ウィンドウの属性を設定する構造体
wc.lpfnWndProc = wnd_proc # メッセージ処理関数(コールバック)を登録
wc.lpszClassName = window_class_name # クラス名
# このウィンドウを実行しているアプリケーションのインスタンスハンドルを取得
wc.hInstance = win32api.GetModuleHandle(None)
# 背景色を設定
wc.hbrBackground = win32gui.GetStockObject(win32con.WHITE_BRUSH)
# マウスカーソルを標準矢印に設定
wc.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)
# --- 2. ウィンドウクラスをOSに登録 ---
try:
# OSに「この設定のウィンドウを使います」と宣言
win32gui.RegisterClass(wc)
except win32gui.error as e:
# すでに登録済みの場合はエラー(1410)が出るため、それ以外の場合のみ例外を出す
# http://ir9.jp/prog/ayu/win32err.htm
if e.winerror != 1410:
raise
# --- 3. ウィンドウの生成 (HWNDの取得) ---
# 成功すると、ウィンドウを操作するための「ハンドル(HWND)」が返却される
hwnd = win32gui.CreateWindow(
window_class_name, # 使用するクラス名
"Python Win32 Window Sample", # ウインドウタイトル
# ウィンドウのスタイル(最小化・最大化ボタン等あり)
win32con.WS_OVERLAPPEDWINDOW | win32con.WS_VISIBLE,
win32con.CW_USEDEFAULT, # 出現位置 X座標 (OSにお任せ)
win32con.CW_USEDEFAULT, # 出現位置 Y座標 (OSにお任せ)
512, # ウィンドウの幅 (ピクセル)
288, # ウィンドウの高さ (ピクセル)
0, # 親ウィンドウのHWND (なし)
0, # メニューのハンドル (なし)
wc.hInstance, # インスタンスハンドル
None, # 予備のデータ
)
if not hwnd:
print("Error : CreateWindow() は失敗")
return None
# --- 4. ウィンドウの可視化 ---
# 作成直後のウィンドウは非表示なので明示的に表示を命令
print(f"CreateWindow() は成功。HWND : {hwnd}")
win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
# ウィンドウの描画を即座に更新する
win32gui.UpdateWindow(hwnd)
return hwnd
def main():
# ウィンドウの作成とHWNDの取得
main_hwnd = create_window()
if main_hwnd:
# --- 5. メッセージループ ---
# Windowsから送られてくる「マウスが動いた」「キーが押された」などの
# メッセージを絶えず受け取り、wnd_procに振り分ける無限ループ
print("メッセージループ開始。")
win32gui.PumpMessages()
print("Pythonプロセスを終了。")
if __name__ == "__main__":
main()
実行すると以下のようなウインドウが表示された。

単にウインドウを作っただけで、まだ何も描画してないけれど、Python + pywin32 を使ってウインドウを新規作成できること、ウインドウハンドルを取得できることは分かった。
◎ ウインドウに文字を描画する :
ウインドウ上に何かを描画してみる。とりあえず文字列というかテキストを描画してみよう…。
_02_drawtext2window.py

一応テキスト描画もできた。
ちょっとハマったのは、文字が描画できる時とできない時があって…。win32gui.InvalidateRect(hwnd, None, True) と win32gui.UpdateWindow(hwnd) を呼びことで、必ず描画される状態になった。
_02_drawtext2window.py
"""
pywin32でウインドウを新規作成してウインドウハンドル(HWND)を取得。
そのHWNDに対して、背景色は黒、文字色は白で文字列を描画。
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import win32gui
import win32con
import win32api
FONT_NAME = "Meiryo"
FONT_SIZE = 32
def on_paint(hwnd):
"""文字列をウインドウに描画"""
# 描画開始
hdc, ps = win32gui.BeginPaint(hwnd)
# クライアント領域のサイズを取得。(left, top, right, bottom)
rect = win32gui.GetClientRect(hwnd)
# 背景を黒で塗りつぶし
hbrush = win32gui.CreateSolidBrush(win32api.RGB(0, 0, 0))
win32gui.FillRect(hdc, rect, hbrush)
# 作成したGDIオブジェクトは削除していかないとメモリを圧迫(リソースリーク)する。
win32gui.DeleteObject(hbrush)
# フォントの設定。LOGFONT構造体(辞書形式)で詳細を指定
lf = win32gui.LOGFONT()
# フォント名、サイズ(高さ)、ウェイト、アンチエイリアスを設定
lf.lfFaceName = FONT_NAME
lf.lfHeight = FONT_SIZE
lf.lfWeight = win32con.FW_BOLD
lf.lfQuality = win32con.ANTIALIASED_QUALITY
# フォントオブジェクトの作成
hfont = win32gui.CreateFontIndirect(lf)
# 作成したフォントオブジェクトをHDCに選択(戻り値は以前のフォント)
hfont_old = win32gui.SelectObject(hdc, hfont)
# 文字色指定
win32gui.SetTextColor(hdc, win32api.RGB(255, 255, 255))
win32gui.SetBkMode(hdc, win32con.TRANSPARENT)
# 文字描画時の処理を指定、DT_WORDBREAK を指定すると改行も有効になる
draw_style = win32con.DT_CENTER | win32con.DT_VCENTER | win32con.DT_WORDBREAK
# 文字描画
lines = [
"Hello !",
"Windows 11のフォント描画です。",
f"Font : {FONT_NAME}",
f"Size : {FONT_SIZE}",
]
txt = "\n".join(lines)
win32gui.DrawText(hdc, txt, -1, rect, draw_style)
# 後片付け。元のフォントに戻して、作成したフォントを削除(メモリリーク防止)
win32gui.SelectObject(hdc, hfont_old)
win32gui.DeleteObject(hfont)
# 描画終了
win32gui.EndPaint(hwnd, ps)
def wnd_proc(hwnd, msg, wparam, lparam):
"""ウインドウプロシージャ。イベントメッセージ処理関数"""
if msg == win32con.WM_PAINT:
# 描画開始
on_paint(hwnd)
return 0
if msg == win32con.WM_DESTROY:
# ウィンドウ破棄時の処理(閉じるボタンが押された等)
print("WM_DESTROY を受け取ったので Quit メッセージを送る。")
win32gui.PostQuitMessage(0)
return 0
# 自分で処理しないメッセージは、OS提供のデフォルト処理に任せる
return win32gui.DefWindowProc(hwnd, msg, wparam, lparam)
def create_window_with_custom_font():
"""ウインドウを新規作成"""
window_class_name = "PythonCustomFontWindow"
# ウインドウクラスの登録
wc = win32gui.WNDCLASS()
wc.lpszClassName = window_class_name
wc.lpfnWndProc = wnd_proc
wc.hInstance = win32api.GetModuleHandle(None)
wc.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)
# 背景色を指定
wc.hbrBackground = win32gui.GetStockObject(win32con.BLACK_BRUSH)
# wc.hbrBackground = win32gui.CreateSolidBrush(win32api.RGB(0, 0, 0))
# ウインドウリサイズ時に再描画するように指定
wc.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW
# ウインドウクラスをOSに登録
try:
win32gui.RegisterClass(wc)
except win32gui.error as e:
print(f"Error: {e}")
if e.winerror != 1410:
# 登録済みの場合は 1410 が返ってくるのでそれ以外はエラーとする
# http://ir9.jp/prog/ayu/win32err.htm
raise
# ウインドウ新規作成。ウインドウハンドル(HWND)が返ってくる
# CreateWindowEx() と CreateWindow() の違いは拡張スタイルを使えるかどうか
hwnd = win32gui.CreateWindowEx(
0, # 拡張スタイル
window_class_name, # 使用クラス名
"Font Selection Sample", # ウインドウタイトル
win32con.WS_OVERLAPPEDWINDOW | win32con.WS_VISIBLE, # ウインドウスタイル
win32con.CW_USEDEFAULT, # 表示位置 x (OSにまかせる)
win32con.CW_USEDEFAULT, # 表示位置 y (OSにまかせる)
512, # ウインドウ幅
288, # ウインドウ高さ
0, # 親ウインドウ HWND
0, # メニューハンドル
wc.hInstance, # インスタンス
None, # 追加パラメータ
)
if not hwnd:
print("Error: ウインドウの作成に失敗")
return None
print(f"ウインドウを作成。 HWND: {hwnd}")
return hwnd
def main():
hwnd = create_window_with_custom_font()
if hwnd:
# ウインドウを強制的に最前面に表示し、更新を促す
# 作成直後のウィンドウは非表示なので、明示的に表示を命令する
win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
# クライアント領域全体を無効に設定し、WM_PAINTを誘発させる。
# これを呼ばないとウインドウ生成直後の描画処理が行われない時がある。
# 第2引数をNoneにすると全体、第3引数をTrueにすると背景消去も行う
win32gui.InvalidateRect(hwnd, None, True)
# メッセージキューを待たずにウインドウの描画を即座に更新
win32gui.UpdateWindow(hwnd)
# メッセージループ
# Windowsから送られてくる「マウスが動いた」「キーが押された」などの
# メッセージを絶えず受け取って wnd_proc に振り分ける無限ループ
print("メッセージループ開始")
win32gui.PumpMessages()
print("プロセス終了。")
if __name__ == "__main__":
main()

一応テキスト描画もできた。
ちょっとハマったのは、文字が描画できる時とできない時があって…。win32gui.InvalidateRect(hwnd, None, True) と win32gui.UpdateWindow(hwnd) を呼びことで、必ず描画される状態になった。
◎ 子スクリプトを呼び出して文字を描画する :
Python + pywin32 からウインドウを生成して、ウインドウハンドルを取得することが出来ると分かった。
次は、得られたウインドウハンドルを別のPythonスクリプトに渡して、その別スクリプト側で描画処理をしてみたい。
ググっていたら、こういった処理をしたい場合、親ウインドウに対して子ウインドウを新規作成して、その子ウインドウの中に何かしらを描画していく処理が一般的、という話を見かけたのでその方向で試してみる。
まずは親ウインドウを担当するスクリプトを作成。
ウインドウを作成してウインドウハンドルが得られたら、subprocess.Popen() で、コマンドラインオプションをつけながら別スクリプトを呼び出す。subprocess.Popen() を使うと、親スクリプトとは別プロセスで何かしらを起動できるらしい。つまり、親スクリプトと子スクリプトが並列で動作している状態になる。
_04_parent_window.py
続いて、子ウインドウを担当するスクリプト。ひとまず文字描画をしてみる。
_child_drawtext.py
親スクリプトの 04_parent_window.py を実行すると、親ウインドウ生成後に child_drawtext.py が呼び出されて、子ウインドウを生成してその中に文字描画がされる。以下のような見た目になった。

次は、得られたウインドウハンドルを別のPythonスクリプトに渡して、その別スクリプト側で描画処理をしてみたい。
ググっていたら、こういった処理をしたい場合、親ウインドウに対して子ウインドウを新規作成して、その子ウインドウの中に何かしらを描画していく処理が一般的、という話を見かけたのでその方向で試してみる。
まずは親ウインドウを担当するスクリプトを作成。
ウインドウを作成してウインドウハンドルが得られたら、subprocess.Popen() で、コマンドラインオプションをつけながら別スクリプトを呼び出す。subprocess.Popen() を使うと、親スクリプトとは別プロセスで何かしらを起動できるらしい。つまり、親スクリプトと子スクリプトが並列で動作している状態になる。
_04_parent_window.py
"""
pywin32でウインドウを作成。
ウインドウハンドル(HWND)を子スクリプトに渡す。
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import win32gui
import win32con
import win32api
import subprocess
import sys
# 起動対象となる子プロセスのスクリプト名
# CHILD_PY = "child_drawtext.py"
CHILD_PY = "child_drawimage.py"
def wnd_proc(hwnd, msg, wparam, lparam):
"""ウインドウプロシージャ。イベントメッセージ処理関数"""
if msg == win32con.WM_DESTROY:
# ウィンドウ破棄時のメッセージ(WM_DESTROY)
# メッセージループ(PumpMessages)を終了させる信号を送る
print("[Parent] WM_DESTROY 受信。Quit を送信。")
win32gui.PostQuitMessage(0)
return 0
# 自分で処理しないメッセージは、Windowsのデフォルト処理に任せる
return win32gui.DefWindowProc(hwnd, msg, wparam, lparam)
def create_window_and_launch_child():
# --- 1. ウィンドウクラスの定義と登録 ---
window_class_name = "MyPythonWindowClass"
# ウィンドウの「型」となるクラス構造体を作成
wc = win32gui.WNDCLASS()
wc.lpfnWndProc = wnd_proc # 上で定義したメッセージ処理関数を紐付け
wc.lpszClassName = window_class_name # クラス名(ウィンドウを識別する名前)
# 現在実行中のインスタンスハンドルを取得
wc.hInstance = win32api.GetModuleHandle(None)
wc.hbrBackground = win32gui.GetStockObject(win32con.WHITE_BRUSH) # 背景色を白に設定
try:
# 定義したウィンドウクラスをOSに登録
win32gui.RegisterClass(wc)
except win32gui.error as e:
# 同じクラス名が登録済み(Error code = 1410)は無視
if e.winerror != 1410:
raise
# --- 2. ウィンドウの実体を作成 ---
hwnd = win32gui.CreateWindow(
window_class_name, # 使用する登録済みクラス名
"Parent Window", # ウィンドウのタイトルバーに表示される文字列
win32con.WS_OVERLAPPEDWINDOW, # 一般的なウィンドウ形式(最小化・最大化・枠あり)
win32con.CW_USEDEFAULT, # 表示位置 X(OSにお任せ)
win32con.CW_USEDEFAULT, # 表示位置 Y(OSにお任せ)
512, # ウィンドウの幅
288, # ウィンドウの高さ
0, # 親ウィンドウのハンドル(今回は自身が親なので0)
0, # メニューハンドル
wc.hInstance, # インスタンスハンドル
None, # 追加の作成パラメータ
)
if not hwnd:
print("[Parent] Error: ウィンドウ作成に失敗。")
return
# 作成したウィンドウを表示状態にする
win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
# HWND (Window Handle) は、Windows内でのこのウィンドウの固有の背番号のようなもの
print(f"[Parent] ウインドウ生成。HWND: {hwnd}")
# --- 3. 子プロセス起動 ---
try:
# 起動中のPython実行環境 (sys.executable) を使って子スクリプトを実行
# 引数として「/p HWND」を渡す
print(f"[Parent] {CHILD_PY} を起動...")
subprocess.Popen([sys.executable, CHILD_PY, "/p", str(hwnd)])
except Exception as e:
print(f"子プロセス起動に失敗: {e}")
# --- 4. メッセージループの開始 ---
# これを実行しないとウィンドウが「応答なし」になり、すぐにプログラムが終了してしまう。
# Windowsから送られてくる「再描画」「移動」等のメッセージを常に待ち受け wnd_procに振り分ける。
print("[Parent] メッセージループ開始。")
win32gui.PumpMessages()
print("[Parent] プロセス終了。")
if __name__ == "__main__":
create_window_and_launch_child()
続いて、子ウインドウを担当するスクリプト。ひとまず文字描画をしてみる。
_child_drawtext.py
"""
与えられたウインドウハンドル(HWND)を親として、
子ウインドウを作成して文字を描画
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import sys
import time
import win32gui # WindowsのGUI操作用
import win32con # Windowsの定数(WM_xxxなど)用
import win32api # Windowsの基本API(RGB, GetModuleHandleなど)用
class ChildOverlay:
def __init__(self, parent_hwnd):
"""初期化"""
self.parent_hwnd = parent_hwnd # 描画対象となる親のウィンドウハンドル
self.hwnd = None # 自身(子)のウィンドウハンドル
self.class_name = "PersistentOverlayClass" # ウィンドウクラス名
self.timer_id = 1 # 親ウィンドウ監視用タイマーの識別ID
self.font_name = "Verdana" # フォント名
self.font_height = 32 # フォントサイズ
self.font_weight = win32con.FW_NORMAL
# 表示文字列
lines = [
"Overlay Activate",
f"Font name: {self.font_name}",
f"Font size: {self.font_height}",
]
self.text_content = "\n".join(lines)
def create_window(self):
"""ウインドウ生成"""
# 親ウィンドウが現在も存在するか確認
if not win32gui.IsWindow(self.parent_hwnd):
print(f"Error: Parent HWND {self.parent_hwnd} is not valid.")
return False
# 親ウィンドウのクライアント領域(枠の内側)のサイズを取得
left, top, right, bottom = win32gui.GetClientRect(self.parent_hwnd)
width = right - left
height = bottom - top
# ウインドウクラスを設定
wc = win32gui.WNDCLASS() # ウィンドウクラス構造体
wc.lpfnWndProc = self.wnd_proc # イベント(メッセージ)処理関数を指定
wc.lpszClassName = self.class_name # クラス名
# 実行ファイルモジュールハンドル取得
wc.hInstance = win32api.GetModuleHandle(None)
wc.hbrBackground = win32gui.GetStockObject(win32con.BLACK_BRUSH) # 背景色指定
wc.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW) # マウスカーソル指定
try:
win32gui.RegisterClass(wc) # システムに登録
except win32gui.error as e:
# 既に同じ名前のクラスが登録されている場合はエラー(1410)が出るが、その場合は続行
if e.winerror != 1410:
raise
# ウィンドウの作成
self.hwnd = win32gui.CreateWindow(
self.class_name, # 登録したクラス名
"Child Window", # ウインドウタイトル
win32con.WS_CHILD | win32con.WS_VISIBLE, # 子ウィンドウとして作成、即表示
0, # x
0, # y
width, # width
height, # height
self.parent_hwnd, # 親ウィンドウのハンドルを指定
0, # メニューハンドル(なし)
win32api.GetModuleHandle(None), # インスタンスハンドル
None, # 追加パラメータ(なし)
)
if self.hwnd:
print(f"[Child] 子ウインドウ生成。 HWND: {self.hwnd}")
win32gui.InvalidateRect(self.hwnd, None, True) # 初回描画を強制
win32gui.UpdateWindow(self.hwnd) # 強制的に再描画を発生
return True
print("[Child] 子ウインドウ生成に失敗。")
return False
def wnd_proc(self, hwnd, msg, wparam, lparam):
"""イベントメッセージ処理関数"""
if msg == win32con.WM_CREATE:
# ウィンドウが作られた直後にタイマー(500ミリ秒間隔)をセット
win32gui.SetTimer(hwnd, self.timer_id, 500, None)
return 0
if msg == win32con.WM_TIMER:
# 指定したタイマーIDの通知が来た場合
if wparam == self.timer_id:
# 親ウィンドウが閉じられていないかチェック
if not win32gui.IsWindow(self.parent_hwnd):
print("[Child] 親ウインドウ消失。終了します。")
win32gui.KillTimer(hwnd, self.timer_id) # タイマー停止
win32gui.DestroyWindow(hwnd) # 自分を破棄
return 0
if msg == win32con.WM_PAINT:
# 描画が必要なタイミング(ウィンドウ表示時など)で呼ばれる
self._on_paint(hwnd)
return 0
if msg == win32con.WM_DESTROY:
# ウィンドウが破棄されたら、メッセージループを抜けるよう指示
print("[Child] WM_DESTROY 受信。Quit 送信。")
win32gui.PostQuitMessage(0)
return 0
if msg == win32con.WM_NCDESTROY:
# ウィンドウが破棄されたら、メッセージループを抜けるよう指示
print("[Child] WM_NCDESTROY 受信。Quit 送信。")
win32gui.PostQuitMessage(0)
return 0
# 自分が処理しなかったメッセージはWindowsの標準処理に任せる
return win32gui.DefWindowProc(hwnd, msg, wparam, lparam)
def _on_paint(self, hwnd):
"""描画。GDIを使用"""
hdc, ps = win32gui.BeginPaint(hwnd) # 描画開始。デバイスコンテキスト(HDC)を取得
rect = win32gui.GetClientRect(hwnd) # 描画範囲(自分自身のサイズ)を取得
# 背景塗りつぶし
brush = win32gui.CreateSolidBrush(win32api.RGB(0, 0, 0)) # ブラシ作成
win32gui.FillRect(hdc, rect, brush) # 範囲内を塗りつぶす
win32gui.DeleteObject(brush) # ブラシを捨ててメモリ解放
# フォントオブジェクトの作成
lf = win32gui.LOGFONT()
lf.lfFaceName = self.font_name # 書体を指定
lf.lfHeight = self.font_height # 高さを指定
lf.lfWeight = self.font_weight # ウェイトを指定
lf.lfQuality = win32con.ANTIALIASED_QUALITY # アンチエイリアス
hfont = win32gui.CreateFontIndirect(lf) # フォントを作成
# HDCにフォントを適用(古いのは保管)
old_font = win32gui.SelectObject(hdc, hfont)
# 文字色の設定と背景モード(文字の隙間を塗りつぶさない設定)
win32gui.SetTextColor(hdc, win32api.RGB(255, 255, 255)) # 白色
win32gui.SetBkMode(hdc, win32con.TRANSPARENT) # 背景透過
# テキストの描画実行 (中央揃え設定)
draw_style = win32con.DT_CENTER | win32con.DT_VCENTER | win32con.DT_WORDBREAK
win32gui.DrawText(
hdc,
self.text_content,
-1,
rect,
draw_style,
)
# 後片付け (作成したリソースの解放)
win32gui.SelectObject(hdc, old_font) # フォントを元に戻す
win32gui.DeleteObject(hfont) # 作成したフォントを削除
win32gui.EndPaint(hwnd, ps) # 描画終了を報告
def run(self):
"""メインループを実行"""
if self.create_window():
print("[Child] メッセージループ開始...")
# Windowsからのメッセージを待ち受け、wnd_procに振り分ける無限ループ
win32gui.PumpMessages()
print("[Child] プロセス終了。")
def main():
# 引数チェック: python script.py /p <HWND> が前提
if len(sys.argv) == 3 and sys.argv[1].lower() == "/p":
try:
parent_hwnd = int(sys.argv[2]) # HWNDを数値に変換
except ValueError:
print("Error: Invalid HWND. 10進数を指定してください。")
return
else:
print("Usage: python child_drawtext2.py /p <HWND>")
return
# 親ウィンドウが準備できるまで少し待機
time.sleep(1.0)
# オーバーレイオブジェクトを作成して実行
overlay = ChildOverlay(parent_hwnd)
overlay.run()
if __name__ == "__main__":
main()
親スクリプトの 04_parent_window.py を実行すると、親ウインドウ生成後に child_drawtext.py が呼び出されて、子ウインドウを生成してその中に文字描画がされる。以下のような見た目になった。

◎ 子スクリプトを呼び出して画像を描画する :
文字ではなくて、画像を描画してみたい。
親スクリプトは前述のものを再利用。呼び出す子スクリプト名だけ変更する。子スクリプトは以下。
_child_drawimage.py
表示に使う画像ファイルは以下。
_preview.png
親スクリプトを実行すると、以下のような表示になった。画像の描画もできると分かった。

親スクリプトは前述のものを再利用。呼び出す子スクリプト名だけ変更する。子スクリプトは以下。
_child_drawimage.py
"""
与えられたウインドウハンドル(HWND)を親として、
子ウインドウを作成して画像を描画。
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import sys
import win32gui # Windowsのウィンドウ操作(作成、描画開始など)に使用
import win32con # Windows APIの定数(WM_PAINT, WS_CHILDなど)を定義
import win32api # Windowsの基本機能(インスタンス取得、サイズ取得など)に使用
import ctypes # WindowsのDLL(システム設定)を直接呼び出すために使用
from PIL import Image, ImageWin # 画像処理とWin32描画の橋渡しに使用
IMAGEFILE = "preview.png"
# --- Windows 11等の高解像度ディスプレイ(DPI)への対応設定 ---
try:
# プロセスに対して「DPIを認識する」よう命令し、文字や画像のボケを防ぐ
ctypes.windll.shcore.SetProcessDpiAwareness(1)
except Exception:
# 古いOS環境(Windows 7等)でエラーにならないための回避策
ctypes.windll.user32.SetProcessDPIAware()
class PreviewWindow:
"""親ウィンドウの中に画像を高品質に描画する子ウィンドウを管理するクラス"""
def __init__(self, parent_hwnd, image_path):
"""初期化"""
self.parent_hwnd = parent_hwnd # 外部から渡された親ウィンドウのハンドルを保存
self.resized_dib = None # リサイズ後の描画データを保持
# 描画範囲(left, top, right, bottom)を保持
self.draw_rect = (0, 0, 0, 0)
# 起動時の親ウィンドウのサイズに合わせて画像を高品質にリサイズする
self._prepare_high_quality_image(image_path)
# ウィンドウの見た目や振る舞いをOSに登録
# 実際に子ウィンドウを作成し、ハンドルを取得
self.class_name = "PythonStaticHighQualityChild"
self.hwnd = self._create_window()
def _prepare_high_quality_image(self, path):
"""Pillowで親ウィンドウのクライアント領域サイズに合わせた画像を作成"""
try:
# クライアント領域サイズを取得
rect = win32gui.GetClientRect(self.parent_hwnd)
target_w = rect[2] - rect[0]
target_h = rect[3] - rect[1]
if target_w <= 0 or target_h <= 0:
print("Error: 親ウインドウサイズが取得できません。")
sys.exit(1)
# 画像をPillowで開いてRGB形式に変換
img = Image.open(path).convert("RGB")
# LANCZOSアルゴリズムでリサイズ
resized_img = img.resize((target_w, target_h), Image.Resampling.LANCZOS)
# リサイズ画像を Win32 API で直接描画できるDibオブジェクトに変換して保持
self.resized_dib = ImageWin.Dib(resized_img)
# 描画時に使用する矩形情報を保存
self.draw_rect = (0, 0, target_w, target_h)
except Exception as e:
print(f"Error: {e}")
sys.exit(1)
def _create_window(self):
"""親ウィンドウの中に子ウィンドウ(コントロール)としてウィンドウを実体化する"""
wc = win32gui.WNDCLASS() # ウィンドウクラス構造体
wc.lpfnWndProc = self.wnd_proc # メッセージ処理関数を指定
wc.lpszClassName = self.class_name # クラス識別名
# アプリ自体のインスタンスハンドル
wc.hInstance = win32api.GetModuleHandle(None)
# 標準の矢印カーソルを使用
wc.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)
# 背景色を指定
wc.hbrBackground = win32gui.CreateSolidBrush(win32api.RGB(0, 0, 0))
# 水平・垂直方向のリサイズが起きたときに再描画を要求するスタイル
wc.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW
try:
# 定義したクラスをOSに登録
win32gui.RegisterClass(wc)
except win32gui.error as e:
# 登録済みなら Error code = 1410 が出るので、それ以外なら例外を出す
if e.winerror != 1410:
raise
w = self.draw_rect[2] # 準備した画像の幅
h = self.draw_rect[3] # 準備した画像の高さ
# ウィンドウを作成してハンドルを返す
hwnd = win32gui.CreateWindowEx(
0, # 拡張スタイル(今回は無し)
self.class_name, # 登録したクラス名
"Child Window", # ウインドウタイトル
win32con.WS_CHILD | win32con.WS_VISIBLE, # 子ウィンドウとして作成、即表示
0,
0,
w,
h, # 親の左上(0,0)を起点に、計算したサイズで配置
self.parent_hwnd, # 親ウィンドウのハンドルを指定
0, # メニューなし
win32api.GetModuleHandle(None), # インスタンス
None, # 追加のパラメータなし
)
if not hwnd:
print("[Child] Error: ウインドウ生成に失敗")
return None
print(f"[Child] ウインドウ生成。HWND: {hwnd}")
return hwnd
def wnd_proc(self, hwnd, msg, wparam, lparam):
"""メッセージ処理関数"""
if msg == win32con.WM_PAINT:
# ウィンドウの再描画が必要になったとき(初回表示時や、隠れていた窓が出た時)
# 描画の準備。hdc(デバイスコンテキスト)を取得
hdc, ps = win32gui.BeginPaint(hwnd)
if self.resized_dib:
# 事前にPillowで作成した高品質画像を画面(HDC)に転送
self.resized_dib.draw(hdc, self.draw_rect)
# 描画終了をOSに告げる
win32gui.EndPaint(hwnd, ps)
print("[Child] WM_PAINT 受信。")
return 0 # メッセージを処理した場合は0を返すのが基本
if msg == win32con.WM_DESTROY:
# ウィンドウが破棄されるとき(親が閉じる時など)
print("[Child] WM_DESTROY 受信。Quit を送信。")
win32gui.PostQuitMessage(0)
return 0
# 自分で行わないメッセージ処理はOS既定の処理に渡す
return win32gui.DefWindowProc(hwnd, msg, wparam, lparam)
def main():
"""プログラムのメイン実行部分"""
# 引数が正しく渡されているか確認 (/p HWND)
if len(sys.argv) == 3 and sys.argv[1].lower() == "/p":
parent_hwnd = int(sys.argv[2])
else:
print("Usage: python script.py /p <HWND_DECIMAL>")
return
# 指定されたハンドルが、実際に動作しているウィンドウか確認
if not win32gui.IsWindow(parent_hwnd):
print("Error: 指定された親ウィンドウ(HWND)は存在しません。")
return
# プレビュー管理クラスを作成
preview = PreviewWindow(parent_hwnd, IMAGEFILE)
# 初回描画を強制的に促す(メッセージキューにWM_PAINTを入れる)
win32gui.InvalidateRect(preview.hwnd, None, True)
# キューを待たずに、今すぐ描画を反映
win32gui.UpdateWindow(preview.hwnd)
# メッセージループ: OSからの信号(WM_PAINT等)を待ち受け、wnd_procへ流し続ける
# これがないと、スクリプトは一瞬で終了してしまいます。
win32gui.PumpMessages()
print("[Child] プロセス終了。")
if __name__ == "__main__":
main()
表示に使う画像ファイルは以下。
_preview.png
親スクリプトを実行すると、以下のような表示になった。画像の描画もできると分かった。

◎ ハマった点 :
動作確認をしていて、いくつかハマった。
最初、ウインドウ内への描画処理は1回だけ行って、それで表示できたと思い込んでいたのだけど…。ウインドウを最小化してからまた元に戻したらウインドウの中身が消えてしまった。
最小化してから元に戻したり、ウインドウをリサイズしたりすると、ウインドウの再描画が必要になるので、ウインドウプロシージャ(イベントメッセージを処理する関数)を用意して WM_PAINT が送られてきたら再描画するように作っておかないといけない模様。
また、親ウインドウに子ウインドウを作るあたりもハマった。親ウインドウを閉じると、子ウインドウも見た目では消えてくれるけれど、子スクリプトを動かしているPythonのプロセス自体は残ってしまう…。子スクリプト側でも WM_DESTROY が送られてきたら自身のプロセスを終了するように処理を書かないといけない。
ただ、WM_DESTROY なのか、WM_NCDESTROY なのか、どちらが送られてくれるのかよく分かってない…。とりあえず両方並べてみたけれど…。
また、場合によってはそれらのメッセージが送られてこない時もありそうで…。タイマーを使って一定時間毎に、親ウインドウが消えているかどうかをチェックして、親ウインドウが消えていたら自身も消滅させる処理も追加してみた。ただ、動作確認した感じでは、そのチェック処理で終了する場面は確認できてない。WM_DESTROY / WM_NCDESTROY で終了させるだけでも十分かもしれない。
最初、ウインドウ内への描画処理は1回だけ行って、それで表示できたと思い込んでいたのだけど…。ウインドウを最小化してからまた元に戻したらウインドウの中身が消えてしまった。
最小化してから元に戻したり、ウインドウをリサイズしたりすると、ウインドウの再描画が必要になるので、ウインドウプロシージャ(イベントメッセージを処理する関数)を用意して WM_PAINT が送られてきたら再描画するように作っておかないといけない模様。
また、親ウインドウに子ウインドウを作るあたりもハマった。親ウインドウを閉じると、子ウインドウも見た目では消えてくれるけれど、子スクリプトを動かしているPythonのプロセス自体は残ってしまう…。子スクリプト側でも WM_DESTROY が送られてきたら自身のプロセスを終了するように処理を書かないといけない。
ただ、WM_DESTROY なのか、WM_NCDESTROY なのか、どちらが送られてくれるのかよく分かってない…。とりあえず両方並べてみたけれど…。
また、場合によってはそれらのメッセージが送られてこない時もありそうで…。タイマーを使って一定時間毎に、親ウインドウが消えているかどうかをチェックして、親ウインドウが消えていたら自身も消滅させる処理も追加してみた。ただ、動作確認した感じでは、そのチェック処理で終了する場面は確認できてない。WM_DESTROY / WM_NCDESTROY で終了させるだけでも十分かもしれない。
[ ツッコむ ]
2025/12/27(土) [n年前の日記]
#1 [python] PyGTK関係を再度インストールしてみた
HDD内を眺めていたら、以前書き残していた Python + PyGTK のサンプルスクリプトが目に入った。これって Windows11 x64 25H2 + Python 3.10.10 でも動くかな? 試してみたら動かなかった。モジュールをインストールしてなかったのかな。一応入れておくか…。
しかしググってみたら、Windows上で PyGTK / PyGObject をインストールして使うのは難しいらしい。基本的に MSYS2上でしか動かないと思っておいたほうがいいらしい。どうやら昔の自分は MSYS2上で動かして試していた模様…。
_助けて!WindowsでPyGObjectが_gi.pydをインストールできない - ImportErrorで詰まってる : r/learnpython
しかしググってみたら、Windows上で PyGTK / PyGObject をインストールして使うのは難しいらしい。基本的に MSYS2上でしか動かないと思っておいたほうがいいらしい。どうやら昔の自分は MSYS2上で動かして試していた模様…。
_助けて!WindowsでPyGObjectが_gi.pydをインストールできない - ImportErrorで詰まってる : r/learnpython
全部 MSYS2 でやる必要があるよ(python.org から入手する Python は MSVC でビルドされてるから、MSYS を使ってそのモジュールをビルドできないんだ)。つまり、 mingw-w64-x86_64-python をインストールして、そっちのPythonを使うってこと。
でも、別に何もビルドする必要はないんだよね、MSYS2はすでに mingw-w64-x86_64-python-cairo と mingw-w64-x86_64-python-gobject のパッケージを提供してるから、インストールするだけでいいんだよ。
◎ MSYS2 MINGW64上でインストール :
せっかくだからインストールしておくか…。Windows11 x64 25H2 + MSYS2 (MINGW64) で動作確認してみた。
必要なパッケージは以下でインストールできる。MSYS2が有効な状態で打ち込む。ちなみに Python は既にインストール済みだった。
_Package: mingw-w64-x86_64-gtk3 - MSYS2 Packages
_Package: mingw-w64-x86_64-python-gobject - MSYS2 Packages
これで、以前書いた PyGTK / PyGObject のサンプルスクリプトが動くようになった。
必要なパッケージは以下でインストールできる。MSYS2が有効な状態で打ち込む。ちなみに Python は既にインストール済みだった。
pacman -S mingw-w64-x86_64-gtk3 pacman -S mingw-w64-x86_64-python-gobject
$ python --version Python 3.12.12 $ which python /mingw64/bin/python
_Package: mingw-w64-x86_64-gtk3 - MSYS2 Packages
_Package: mingw-w64-x86_64-python-gobject - MSYS2 Packages
これで、以前書いた PyGTK / PyGObject のサンプルスクリプトが動くようになった。
◎ UCRT64環境での動作 :
MSYS2 MINGW64 上で動作確認をしたけれど、MSYS2 UCRT64 環境でも動かせるようにできるらしい。一応インストールしておくか…。
MINGW64 と UCRT64 の違いは、前者が Windows10より前の環境にも対応していて、後者が Windows10以降に対応している環境らしい。今から使うなら UCRT64 がオススメと解説されてる記事を目にした。たしかに Windows10以前はサポートが切れてるもんな…。
_MSYS2 にある複数環境、C++ アプリ開発 #clang++ - Qiita
_MSYS2 の系列と違いについて #C++ - Qiita
MSYS2 UCRT64 を実行して、必要なパッケージをインストールする。
_Getting Started - PyGObject
上記ページに記載されていた行を試してみたらエラーが出た。python3* という名前のパッケージは現状では無くなっているらしい。只の python* ならある模様。だとすると以下になるのかな。
このパッケージ名ならインストールできた。スクリプトも動作した。
要するに、MSYS2上で以下をインストールせよということかな…。
MINGW64 と UCRT64 の違いは、前者が Windows10より前の環境にも対応していて、後者が Windows10以降に対応している環境らしい。今から使うなら UCRT64 がオススメと解説されてる記事を目にした。たしかに Windows10以前はサポートが切れてるもんな…。
_MSYS2 にある複数環境、C++ アプリ開発 #clang++ - Qiita
_MSYS2 の系列と違いについて #C++ - Qiita
MSYS2 UCRT64 を実行して、必要なパッケージをインストールする。
_Getting Started - PyGObject
pacman -S mingw-w64-ucrt-x86_64-gtk4 mingw-w64-ucrt-x86_64-python3 mingw-w64-ucrt-x86_64-python3-gobject
上記ページに記載されていた行を試してみたらエラーが出た。python3* という名前のパッケージは現状では無くなっているらしい。只の python* ならある模様。だとすると以下になるのかな。
pacman -S mingw-w64-ucrt-x86_64-gtk4 mingw-w64-ucrt-x86_64-python mingw-w64-ucrt-x86_64-python-gobject
このパッケージ名ならインストールできた。スクリプトも動作した。
要するに、MSYS2上で以下をインストールせよということかな…。
- gtk3 or gtk4
- python
- python-gobject
◎ gladeのインストール :
GUIでウィジェットのレイアウトができる glade をインストールしておいても良いかもしれない。
_Package: mingw-w64-x86_64-glade - MSYS2 Packages
glade 3.40 がインストールされた。glade と打てば起動する。
_Package: mingw-w64-x86_64-glade - MSYS2 Packages
pacman -S mingw-w64-x86_64-glade or pacman -S mingw-w64-ucrt-x86_64-glade
$ which glade /mingw64/bin/glade
glade 3.40 がインストールされた。glade と打てば起動する。
[ ツッコむ ]
#2 [tv] 「火星の女王」最終回を視聴
NHK総合で放送されていたSFドラマ。3話で構成されている。最終回を視聴。
なるほど、そういうオチか…。
盲目のヒロインがイメージしてるらしき、音しか存在していない世界を映像化したカットに感心。なかなかハードルが高いことをしている…。出来はどうであれ、チャレンジするだけでも偉い…。
面白いドラマだったかと問われたら正直黙り込んでしまうのだけど、こういうジャンルのドラマがもっとたくさん作られる状況になってほしい気もするなと…。裾野が広くないと山は高くならないと言うし。こういうジャンルが実写ドラマとして作られて放送される機会なんて滅多にないので…。いやまあ、藤子F先生のSF短編ドラマのような感じでたくさん作ったほうがいいのかなという気もするけれど。ああいった形なら各話が独立してるから、玉石混交で問題無いだろうし…。
なるほど、そういうオチか…。
盲目のヒロインがイメージしてるらしき、音しか存在していない世界を映像化したカットに感心。なかなかハードルが高いことをしている…。出来はどうであれ、チャレンジするだけでも偉い…。
面白いドラマだったかと問われたら正直黙り込んでしまうのだけど、こういうジャンルのドラマがもっとたくさん作られる状況になってほしい気もするなと…。裾野が広くないと山は高くならないと言うし。こういうジャンルが実写ドラマとして作られて放送される機会なんて滅多にないので…。いやまあ、藤子F先生のSF短編ドラマのような感じでたくさん作ったほうがいいのかなという気もするけれど。ああいった形なら各話が独立してるから、玉石混交で問題無いだろうし…。
[ ツッコむ ]
2025/12/28(日) [n年前の日記]
#1 [nitijyou] 自撮りって難しい
年賀状のデザインに使うために、自分と飼い犬をスマホ+自撮り棒で撮影しようとしたのだけど、これがなかなか難しくて途方に暮れてしまった。全然期待した写真にならない。自分がフレームの外に出てしまったりする。加えて犬がカメラのほうを向いてくれない。少しでも画質を良くしたくて、アウトカメラで撮影しようとしているので、どう写ってるのかさっぱり分からない…。
自撮り棒で撮影してる人達は凄いな…。よくまあちゃんと見れる写真/動画にできるものだなと…。もしかしてインカメラで撮影してるのだろうか? 高画質なインカメラなんて必要なのかなと思ってたけど、これはたしかに必要かも。
待てよ? アウトカメラによる自撮りでも鏡の類があれば楽にならないか? と撮影中に閃いたのだけど、ググってみたらフツーにそういう商品はあるらしい。
_背面カメラで自撮りする装置、それは鏡 :: デイリーポータルZ
今まで自撮りなんてしたことなかったからそんな商品ジャンルがあるとは知らなかった。皆似たようなことを考えるのだな…。と思ったけど更にググったらこの手の商品全然無いな…。いや、スマホの裏面に鏡を貼る系の商品は山ほどあるようだけど。皆インカメラで頑張ってるの…?
_「小型モニター」があればスマホで動画撮影時に映りが確認できますよ! | GoodsPress Web
なるほど…。別モニタを利用する方法もあるのか…。値段は高いけど鏡より確実に状態が分かるよな…。
自撮り棒で撮影してる人達は凄いな…。よくまあちゃんと見れる写真/動画にできるものだなと…。もしかしてインカメラで撮影してるのだろうか? 高画質なインカメラなんて必要なのかなと思ってたけど、これはたしかに必要かも。
待てよ? アウトカメラによる自撮りでも鏡の類があれば楽にならないか? と撮影中に閃いたのだけど、ググってみたらフツーにそういう商品はあるらしい。
_背面カメラで自撮りする装置、それは鏡 :: デイリーポータルZ
今まで自撮りなんてしたことなかったからそんな商品ジャンルがあるとは知らなかった。皆似たようなことを考えるのだな…。と思ったけど更にググったらこの手の商品全然無いな…。いや、スマホの裏面に鏡を貼る系の商品は山ほどあるようだけど。皆インカメラで頑張ってるの…?
_「小型モニター」があればスマホで動画撮影時に映りが確認できますよ! | GoodsPress Web
なるほど…。別モニタを利用する方法もあるのか…。値段は高いけど鏡より確実に状態が分かるよな…。
[ ツッコむ ]
#2 [nitijyou] 年賀状の作り方について質問を受けた
叔母から、PCで年賀状を作りたいので教えてくれと相談を受けた。
なんでも、かんたんに年賀状を作れると謳う書籍を購入して、その書籍に年賀状作成ソフトが入ってたけど起動のさせ方がわからない、CD?を入れたのはいいけど取り出し方が分からないのでノートPCを持っていくから教えてくれ、とのこと。
ノートPCはNEC製のWindows10機だった。メーカ品、しかも家庭用PCなので、最初から年賀状作成ソフトが入ってそうな気もするのだけど…。メーカ品は大体入ってるよな…。確認してみたら予想通り「筆ぐるめ」が入ってた。しかし叔母は、「使い方が分からないからそのソフトは触らない」「書籍のソフトを使いたい」とのこと。たしかに「筆ぐるめ」ってなんだか小難しいよな…。以前別の年配の方に操作方法を教えたことがあるけれど、かなり分かりづらかった印象がある…。
なんでも、かんたんに年賀状を作れると謳う書籍を購入して、その書籍に年賀状作成ソフトが入ってたけど起動のさせ方がわからない、CD?を入れたのはいいけど取り出し方が分からないのでノートPCを持っていくから教えてくれ、とのこと。
ノートPCはNEC製のWindows10機だった。メーカ品、しかも家庭用PCなので、最初から年賀状作成ソフトが入ってそうな気もするのだけど…。メーカ品は大体入ってるよな…。確認してみたら予想通り「筆ぐるめ」が入ってた。しかし叔母は、「使い方が分からないからそのソフトは触らない」「書籍のソフトを使いたい」とのこと。たしかに「筆ぐるめ」ってなんだか小難しいよな…。以前別の年配の方に操作方法を教えたことがあるけれど、かなり分かりづらかった印象がある…。
◎ CDを取り出す方法 :
DVDドライブからCD/DVDを取り出すときの手順を説明しておいた。エクスプローラ上でドライブを右クリックして「取り出し」を選ぶ、と伝えたけれど、ドライブについてる物理ボタンを押すことでも取り出せるのだよな…。一応その方法も伝えたけれど、OS上でCD/DVDドライブにアクセスしている時に強制的に取り出すと問題が起きるのでエクスプローラから操作したほうがいいよな…。
◎ 年賀状ソフトについてメモ :
書籍に付属していたCD/DVDには、「ハッピー年賀2026」というソフトが入ってた。こんなソフトもあるのか。知らなかった。
叔母曰く、年賀状デザインの仕方は分かったけれど、宛名印刷しようにも住所録を取り込む方法が分からないとのこと。Excelで住所録一覧は既に作ってあったので、Excelからcsvでエクスポートして年賀状ソフトにインポートした。.xlsx を直接インポートできたら楽だろうけど、実装が面倒だろうな…。例えばセル結合されてたら…。そういう時はどうすればええんや…。
件の年賀状ソフトは、一度住所録を取り込むと即座に自動でファイル保存してくれる模様。次回の起動時にも登録した内容が表示された。よく出来てるな…。いやまあ、ファイル保存の仕方が分からなくて自分はちょっと戸惑ってしまったけど。そういえばエクスポートってできるのだろうか。確認するのを忘れた。吸い込むことはできるけど外に吐き出せない、ブラックホール仕様だったらどうしよう。
その他の質問はGRPでメモ。
叔母曰く、年賀状デザインの仕方は分かったけれど、宛名印刷しようにも住所録を取り込む方法が分からないとのこと。Excelで住所録一覧は既に作ってあったので、Excelからcsvでエクスポートして年賀状ソフトにインポートした。.xlsx を直接インポートできたら楽だろうけど、実装が面倒だろうな…。例えばセル結合されてたら…。そういう時はどうすればええんや…。
件の年賀状ソフトは、一度住所録を取り込むと即座に自動でファイル保存してくれる模様。次回の起動時にも登録した内容が表示された。よく出来てるな…。いやまあ、ファイル保存の仕方が分からなくて自分はちょっと戸惑ってしまったけど。そういえばエクスポートってできるのだろうか。確認するのを忘れた。吸い込むことはできるけど外に吐き出せない、ブラックホール仕様だったらどうしよう。
その他の質問はGRPでメモ。
◎ 年賀状デザインについて :
今時は年賀状のデザインをWebサービスでやれたりしないのかな? と気になったので叔母が来る前にググって調べてみたけれど、フツーに無料でデザインできるサービスがいくつかあるのだな…。わざわざアプリをローカルにインストールしなくても済んでしまうのね…。
_はがきデザインキット[ウェブ版]
_Web年賀状キット2026 専用の年賀状ソフト不要で無料・フリーのWebサービス | BrotherOnline サービス | 年賀状ならブラザー
_みんなの筆王
えてしてデザインした結果をpdfで保存できるから、そのpdfを印刷してしまえばいい。いやはや、便利な時代になった…。もっとも、もう年賀状という風習自体が消滅しそうな風潮になりつつあるけど…。
ただ、住所録に基づいて宛名を印刷するWebサービスは…。1つ1つをpdfで保存できるサービスなら見かけたけれど、何十人分もやろうとしたらどうなってしまうのか…。まあ、自分が見落としてるだけで、イイ感じのサービスが既にありそうな気もする。
もっとも、今回叔母は、ローカルで動作する年賀状作成ソフトを入手しているし、それを使う予定なので、それらWebサービスは利用せずに済みそう。
_はがきデザインキット[ウェブ版]
_Web年賀状キット2026 専用の年賀状ソフト不要で無料・フリーのWebサービス | BrotherOnline サービス | 年賀状ならブラザー
_みんなの筆王
えてしてデザインした結果をpdfで保存できるから、そのpdfを印刷してしまえばいい。いやはや、便利な時代になった…。もっとも、もう年賀状という風習自体が消滅しそうな風潮になりつつあるけど…。
ただ、住所録に基づいて宛名を印刷するWebサービスは…。1つ1つをpdfで保存できるサービスなら見かけたけれど、何十人分もやろうとしたらどうなってしまうのか…。まあ、自分が見落としてるだけで、イイ感じのサービスが既にありそうな気もする。
もっとも、今回叔母は、ローカルで動作する年賀状作成ソフトを入手しているし、それを使う予定なので、それらWebサービスは利用せずに済みそう。
[ ツッコむ ]
2025/12/29(月) [n年前の日記]
#1 [nitijyou] 今日も自撮りに挑戦
今日も犬の散歩中、自撮りに挑戦してみた。昨日はアウトカメラで撮影して全然期待した構図にならなかったけど、今回はインカメラでチャレンジしてみた。
ただ、どのスマホを使うべきか…。手持ちのスマホのカメラスペックは以下。
画素数だけ見ると ASUS ZenFone5 のほうが少しだけマシに見える。どんぐりの背比べだろうけど、一応 ZenFone5 で撮影してみよう…。
酷い結果になった。こんなに画質が悪い写真は久々に目にした、と思えてくるぐらいに実に酷い画質。これじゃトイカメラだ…。
ただ、圧倒的に構図は決めやすかった。光の当たり具合もディスプレイ上で常に確認できるから、角度や位置を試行錯誤できる。これで画質さえ良ければなあ…。
ただ、どのスマホを使うべきか…。手持ちのスマホのカメラスペックは以下。
- iPhone5 : インカメラ 120万画素, アウトカメラ 800万画素
- ASUS ZenFone5 旧型(A500KL) : インカメラ 200万画素, アウトカメラ 800万画素
画素数だけ見ると ASUS ZenFone5 のほうが少しだけマシに見える。どんぐりの背比べだろうけど、一応 ZenFone5 で撮影してみよう…。
酷い結果になった。こんなに画質が悪い写真は久々に目にした、と思えてくるぐらいに実に酷い画質。これじゃトイカメラだ…。
ただ、圧倒的に構図は決めやすかった。光の当たり具合もディスプレイ上で常に確認できるから、角度や位置を試行錯誤できる。これで画質さえ良ければなあ…。
◎ 画素数の思い出 :
それにしても、120万画素とか200万画素って…。自分が初めて購入したデジカメが、たしか130万画素だった気がする。
日記を検索してみたら RICOH DC-4U だった。132万画素だったらしい。
_mieki256's diary
_DC-4U / デジタルカメラ | RICOH IMAGING
DC-4U は、晴れの日に撮影しても曇り空みたいな灰色っぽい写真になってしまって、このカメラは酷いなと思った記憶がある…。そのうちレンズ周辺にカビが生えてしまって使えなくなったけど…。
その後、Canon PowerShot A300 を購入したのだよな…。320万画素の製品。DC-4U は 1280x960 の写真しか撮れなかったけど、A300は1600x1200以上(2048x1536)の写真が撮れるぞと喜んだ記憶がある。当時としては広角気味だし、Canonらしく彩度が高めの写真になる点もお気に入りだった。いや、細かいところはぼかされてベタっとなってしまう感じもしたけれど…。「Canonのデジカメは何を撮ってもアニメの背景みたいになる」と揶揄されてた記憶が…。
それはともかく。ググってみたら少し前のスマホのインカメラですら1200万画素とか1600万画素とか2400万画素とか3200万画素とかそんなスペックのようで…。
もっとも、画素数が多ければそれだけ画質が良くなるかというとそこはビミョーなんだろうけど。1点あたりに入る光量が少なくなるからノイズが増えて、画像処理で無理矢理それらしく加工してどうにか見れる状態に持っていくのだろうし…。それでも昔と比べたら、画素数がもはや一桁違うのね…。そのくらいの画素数ならインカメラによる自撮りも綺麗に撮れそう。
日記を検索してみたら RICOH DC-4U だった。132万画素だったらしい。
_mieki256's diary
_DC-4U / デジタルカメラ | RICOH IMAGING
DC-4U は、晴れの日に撮影しても曇り空みたいな灰色っぽい写真になってしまって、このカメラは酷いなと思った記憶がある…。そのうちレンズ周辺にカビが生えてしまって使えなくなったけど…。
その後、Canon PowerShot A300 を購入したのだよな…。320万画素の製品。DC-4U は 1280x960 の写真しか撮れなかったけど、A300は1600x1200以上(2048x1536)の写真が撮れるぞと喜んだ記憶がある。当時としては広角気味だし、Canonらしく彩度が高めの写真になる点もお気に入りだった。いや、細かいところはぼかされてベタっとなってしまう感じもしたけれど…。「Canonのデジカメは何を撮ってもアニメの背景みたいになる」と揶揄されてた記憶が…。
それはともかく。ググってみたら少し前のスマホのインカメラですら1200万画素とか1600万画素とか2400万画素とか3200万画素とかそんなスペックのようで…。
もっとも、画素数が多ければそれだけ画質が良くなるかというとそこはビミョーなんだろうけど。1点あたりに入る光量が少なくなるからノイズが増えて、画像処理で無理矢理それらしく加工してどうにか見れる状態に持っていくのだろうし…。それでも昔と比べたら、画素数がもはや一桁違うのね…。そのくらいの画素数ならインカメラによる自撮りも綺麗に撮れそう。
◎ P9 liteのほうがマシだった :
バッテリーが劣化して使えないまま埃を被ってる HUAWEI P9 lite も持ってるけれど、スペックを確認してみたらコレが一番マシだった…。
iPhone5 や ZenFone5 のアウトカメラ並みの画素数を、P9 lite のインカメラが持ってたのか…。どうしよう。互換バッテリーを購入して復活させてみようか…。
バッテリー交換の仕方をググって眺めてみたけれど、いやはやコレは大変そう…。特に、両面テープでガッチリ固定されてしまってるバッテリーを剥がす作業がヤバそう…。絶対バッテリーが曲がるやん…。下手すると火を噴くよな…。これは危ない…。
どうして各メーカは簡単にバッテリー交換できるように設計しておかないのだろう…。いや、ガッチリ固定することで持ち歩きや落下時の事故を防ごうとしてるのかもしれんけど、しかし昔のガラケーはサクッとバッテリー交換ができたわけで、こういう面についてはスマホは退行してるとしか思えないのだけど…。
- HUAWEI P9 lite : インカメラ 800万画素, アウトカメラ 1300万画素
iPhone5 や ZenFone5 のアウトカメラ並みの画素数を、P9 lite のインカメラが持ってたのか…。どうしよう。互換バッテリーを購入して復活させてみようか…。
バッテリー交換の仕方をググって眺めてみたけれど、いやはやコレは大変そう…。特に、両面テープでガッチリ固定されてしまってるバッテリーを剥がす作業がヤバそう…。絶対バッテリーが曲がるやん…。下手すると火を噴くよな…。これは危ない…。
どうして各メーカは簡単にバッテリー交換できるように設計しておかないのだろう…。いや、ガッチリ固定することで持ち歩きや落下時の事故を防ごうとしてるのかもしれんけど、しかし昔のガラケーはサクッとバッテリー交換ができたわけで、こういう面についてはスマホは退行してるとしか思えないのだけど…。
[ ツッコむ ]
2025/12/30(火) [n年前の日記]
#1 [pc] 親父さんが使ってたマウスが壊れた
親父さんが使ってたマウスが壊れてしまったっぽい。
◎ 左ボタンだけが壊れた :
親父さんが外出してるのにPCの電源が入りっぱなしで、なんでだろうと触ってみたらデスクトップを操作できなかった。操作できないから、シャットダウンもできない。なるほど、だから電源入れっぱなしで外出したのだなと…。
Windows11がおかしくなったのか、SSDでも壊れたかと焦ったけれど、キーボードで操作したら反応するし、マウスの右クリックも反応する。別のマウスを繋いだらデスクトップをフツーに操作できたので、これは左ボタンの故障だなと。
壊れたマウスは BUFFALO BSMBW300MBL。ワイヤレスマウス。3ボタン。静音設計。握りやすい形状デザイン。右手用。
Windows11がおかしくなったのか、SSDでも壊れたかと焦ったけれど、キーボードで操作したら反応するし、マウスの右クリックも反応する。別のマウスを繋いだらデスクトップをフツーに操作できたので、これは左ボタンの故障だなと。
壊れたマウスは BUFFALO BSMBW300MBL。ワイヤレスマウス。3ボタン。静音設計。握りやすい形状デザイン。右手用。
◎ ケーズデンキには置いてなかった :
犬の散歩のついでにケーズデンキに寄って、店頭に置いてないか探したけれど、予想通り置いてなかった。
こういう形状のマウスはえてして値段の高い5ボタンマウスしか置いてないのだよな…。親父さんは他ボタンマウスを使えない派なので、3ボタンじゃないと困る…。
いやまあ、X-Mouse Button Control のようなツールをインストールすれば4〜5ボタンを無効化できるけど、どうせ使わないと分かってるなら最初から3ボタンマウスのほうがいいだろうし。
こういう形状のマウスはえてして値段の高い5ボタンマウスしか置いてないのだよな…。親父さんは他ボタンマウスを使えない派なので、3ボタンじゃないと困る…。
いやまあ、X-Mouse Button Control のようなツールをインストールすれば4〜5ボタンを無効化できるけど、どうせ使わないと分かってるなら最初から3ボタンマウスのほうがいいだろうし。
◎ 半年で壊れたっぽい :
手元のメモを検索してみたら…。
すると、最初の個体は約1年で壊れて、次の個体はたったの半年で壊れたのだな…。これはもう別製品を選んだほうがいいのでは?
- 2024/06/05 にヤマダ電機で BUFFALO BSMBW300MBK (色は黒)を購入、と書いてあった。
- 2025/06/02 にヨドバシカメラで BUFFALO BSMBW300MBL (色は青)を購入、と書いてあった。
すると、最初の個体は約1年で壊れて、次の個体はたったの半年で壊れたのだな…。これはもう別製品を選んだほうがいいのでは?
[ ツッコむ ]
2025/12/31(水) [n年前の日記]
#1 [pc] 親父さん用のマウスを購入してきた
親父さんが使っていたマウス、BUFFALO BUFFALO BSMBW300MBL が壊れてしまったので、ケーズデンキ須賀川店で代替品を購入してきた。
_USB無線光学式マウス[3ボタン/Lサイズ] - M-LE10DRWH
Lサイズのせいか、親父さんは満足してくれたっぽい。
- ELECOM M-LE10DRWH。3ボタンワイヤレスマウス。Lサイズ。色は白。光学式読み取り。無線2.4GHz。センサー分解能 1000DPI。単3電池1本使用。電池寿命最長6ヶ月。レシーバー収納:対応。幅 62 x 奥行 119 x 高さ 36mm。MADE IN CHINA。動作確認用単3形アルカリ乾電池1本付属。保証期間1年間。1,233円。
_USB無線光学式マウス[3ボタン/Lサイズ] - M-LE10DRWH
Lサイズのせいか、親父さんは満足してくれたっぽい。
◎ マウスの変遷 :
親父さん用マウスの変遷は以下。
こうして並べてみると、BUFFALO製マウスは半年〜1年も経たずに壊れると分かってきたので、今回は別メーカの製品にしてみた。もっとも、このあたりの価格帯ではどの商品も似たようなものだろうという気もしているけれど…。
- BUFFALO BSMBW500LWH (ワイヤレス5ボタンLサイズ、色は白)。購入時期不明。
- BUFFALO BSMBW300MBK (ワイヤレス3ボタンMサイズ、色は黒)。2024/06/05 にヤマダ電機 テックランド須賀川店で購入。2,164円税込。
- BUFFALO BSMBW300MBL (ワイヤレス3ボタンMサイズ、色は青)。2025/06/02 にヨドバシカメラで購入。1,260円税込。
- ELECOM M-LE10DRWH (ワイヤレス3ボタンLサイズ、色は白)。2025/12/31 にケーズデンキ須賀川店で購入。1,233円税込。
こうして並べてみると、BUFFALO製マウスは半年〜1年も経たずに壊れると分かってきたので、今回は別メーカの製品にしてみた。もっとも、このあたりの価格帯ではどの商品も似たようなものだろうという気もしているけれど…。
◎ ヤマダ電機も回った :
親父さんが今まで使っていた BUFFALO BSMBW300Mシリーズがケーズデンキには無かったので、ヤマダ電機まで行って探してみた。一応ヤマダ電機の店頭で売ってはいた。ただ、ヨドバシカメラのソレと比べてしまうと値段が高くて…。ヨドバシと違ってポイントもつかないし。つかないよな…。どうだったっけ…。
加えて、以下の問題がありそうで…。
そういった理由で、今回、件のシリーズはスルーすることにした。
加えて、以下の問題がありそうで…。
- 件のシリーズの個体を2つ買ってみて、どちらも半年〜1年で壊れたから、耐久性が無いことが分かった。
- 左右対称じゃないと親父さんが左手でマウス操作をしてリハビリすることも難しい、かもしれない。
- 親父さんは汚いままの手でマウスを使うから掃除しやすいほうがいいけれど、側面のラバー部分が掃除しにくい。
そういった理由で、今回、件のシリーズはスルーすることにした。
[ ツッコむ ]
#2 [nitijyou] 弟が帰省
16:20頃に弟が到着。道路はそれほど混んでなかったとのこと。ただ、途中で雪が降っていたらしい。
[ ツッコむ ]
以上、31 日分です。




