画像ビューアを作りたい
1990年台から現在まで、ちょっとした画像や自炊したコミック&書籍を見るのに色々な画像ビューアを使ってきましたが(数十ソフト)、結局は2000年台頭から使っているマンガミーヤ(MangaMeeya)に落ち着く自分がいます。
しかし、このソフトは現状…
【最強の画像ビューアマンガミーヤの現状】
(1) Windowsのみのソフトである。しかも開発はとっくに昔に止まってしまっている。
(2) ここ数年前からプログレッシブJPEGなどに対応していないため、
ネットで見かけた新しい画像が表示できなかったりする(エラーとなる)。
(3) 他のプラットフォームでエミュレーションして実行はできても色々と不都合がある。
(3-1) SJISで表現できないファイル名に対応していない。
(3-2) 最近はエミュレーションが古いAPIなどに対応していないのか、
プログラムが落ちてしまう事がある。
といった事があるため、Windows以外のプラットフォームはエミュレーションで実行していたものの、Windows自体でも使っていて限界を感じてきています。
これは長年マンガミーヤを神ソフトとして崇めている支持者たちも年々思っているようで、ネットの情報によると有志が魔改造していたりしており(凄いものだとファイル名対応などはファイルオープンを乗っ取ってUnicodeに対応させたり)、色々と頑張ってはいるものの、かなり環境が限定されている様に見受けられます。
また、ここ数年は上述の事があるため、プラットフォーム別に画像ビューアを違うもので運用しており、LinuxやmacOSで一番使っているのは、「MComix」だったりします。
このソフトは素晴らしく、Windows, macOS, Linux(大御所のディストリビューションは全てサポート)の動作を実現しています。
それも、これはエミュレーションではなく…です。
中のからくりは「GTKとPythonで作られている(ランタイムも内包)」という作りになっており、「なるほど、これならGIMPと同じなのでマルチプラットフォーム(クロス開発)も可能だな」…と感心しました。
しかもMComixはオープンソースなので、その気になれば自分色に改造することも可能です。
そして、MComixは結構使ってはいるものの、
【MComixの現状(私の価値観)】
(1) GUI周りが気に食わない箇所が多数ある。(←まだ許せる)
(2) 欲しい機能がない。(←結構キツイ)
(3) キーバインドの機能が弱すぎる。(←正直キツイ)
となっており、この辺りがカスタマイズ性に優れ、多機能、高速というマンガミーヤの足元にも及ばない…けれど、マンガミーヤはWindows上でしかキレイに動かない、しかし最近は使っていてマンガミーヤにも限界を感じ始めている…
くっ、くやしい、ビクンビクン!
となってしまい、「それだったらMComixを改造してしまうのが良いかな」…と思ってはみたのですが、結局MComixを改造するにも、
【MComix改造の検討】
(1) プログラム規模が大きいので、自分色にするにも解読+改造の手間が大きすぎる。
(2) 解読を行った結果、設計思想が合わないと(特にGUI周り)、結局改造するより
一から自作した方が早い。(私の場合)
となってしまい、「それだったら勉強がてらプラットフォームニュートラルな言語(できれば「Write once, run anywhere.」)で画像ビューアを作ってみようかな」…と、今年の夏に一度検討をしてみたのですが、
【2019春の開発検討&調査】
(1) Java
最も古くから動くGUIが作れるのだが、AWT/Swingはアーキテクチャとしては古すぎる
(枯れている)。
またJava SE 9からモジュールシステム(Jigsaw)という糞アーキテクチャが導入されて、
25年弱の素晴らしい構想(「Write once, run anywhere.」)が破綻したので、
Javaは大嫌いな言語となり、選択肢に入れたくなくなった。
(2) C#(mono)
GUI周りがmonoと非常に相性が悪く、私の現在のLinux環境のXでは最新のC#コードで
GUIを作っても、とうまく動かなかった。(コンソールプログラムなら割とうまくいくのだが…)
macOSも同様だった。
(3) Python
PythonでウィンドウGUIアプリを作る方法が幾つかあったので検討したのですが、
かろうじてMComixと同じ方法が良いという頃が分かり、簡単なGUIプログラムを作るも、
GUIのプログラミングが凄く大変で心が折れた。
(というか、この知識は将来メシのタネにならないので、仮に作れたとしてもなんか違うな…
という見解になった)
(4) JavaScript
Electronを筆頭にJavaScriptで色々とデスクトップアプリが作れるフレームワークが
あるが、これもまたGUIアプリを作るのが凄く大変…というか、GUIのガイドラインが
定まっておらず、これをWindowsライクに…とか考えると、非常に骨が折れると
分かった。
また、Linux上で動かす環境構築にも一苦労した。
(VirtualBoxで実験したけどヘトヘトになった)
(5) Visual C++ (VC++ 2017, 2019)
一番私に合っている上に、WindowsのGUIガイドラインは確固たるものとなっているので、
非常に良いのだが、「Windows限定」となる。
となりました。
結局サンデープログラミングとして一番作りやすいのは「Visual C++」(OKI比)となるのと、ここ4年位本業ではずっとVC++のプログラムを作る仕事ばっかりしている上に、C++の言語仕様が年々素晴らしくなってきているので(boostのアーキテクチャがSTL標準になってきている)、最新の言語仕様&ライブラリも使ったことないので、学習しながら作ってみるかな…って気になってきました。
しかし、「Windows限定」だと、マルチプラットフォームが破綻します。
これまでの経験則でマンガミーヤをWindows以外で動かすには、「Wine」しか選択肢がなく(他のエミュレータソフトは動かなかった)、以下の挙動や不具合が散見されているという…
【これまでWine上で起動するマンガミーヤの挙動や不具合】
(1) エミュレータなので起動が遅い。
(2) GUIパーツのアイコンなどがキレイに表示されない。
(リソースのロードに失敗している?)
(3) ファイルシステムのアーキテクチャが上手く噛み合わない。
共有ダイアログなどはWineの世界となるため、
「ドライブ(Zドライブ)」などのマッピングが必要となる。
ただし、起動引数にファイル名を渡す分にはこの限りではない。
(4) 古いAPIでコケる事がある模様。
これは突然クラッシュするので詳細は不明。
ソースコードもないので原因解析も困難。
このため、
(1)(2)は気にしないで使っていた。
(3)は起動引数のみで使う。シェルスクリプトでマンガミーヤをラップして使っていた。
(4)は諦めていた。仕方なく表示できない場合はMComixを使うことにした。
という経緯があり、特に(3)の頻度が上がってきてしまったため、現在LinuxではMComixをメインで使うようになりました。
しかし、MComixは上述の
「(2) 欲しい機能がない。(←結構キツイ)」
「(3) キーバインドの機能が弱すぎる。(←正直キツイ)」
なので、そろそろ重い腰を上げるとしたいところです。
そこで開発プロジェクトを興すとしたら、以下の調査をしながら開発をすることになります。
【調査マイルストン】
(1) 自作アプリが各OSで起動できるかを検討。これは32bit/64bitどちらでも良い。
(2) 起動引数が各OSのファイルシステムと協調できるかを検討。
(3) 外部ライブラリ(オープンソースのもの)を組み込んでも実行できるかを検討。
開発にはアーカイブファイル解凍、画像操作などのライブラリを用いる。
特にライセンスに関しては可能な限りMITやApacheライセンスのようなものを用いる。
最悪でもソースコードを提示しないで良いライセンスを用いる。
マンガミーヤはオープンソースのライセンス違反で開発が凍結した経緯があるので、
二の舞にはなってはならない。
(4) 画像が表示できるかを検討。
(5) キー入力のカスタマイズができるかを検討。
これには高度なグローバルフックなどは用いる必要はなく、アプリ内のメッセージループに
来るイベントで処理できる程度で良い。
(6) GUI構成に標準コントロールのものをサブクラス化で改造できるかを検討。
超シンプルで良い。
とにかく私が満足すれば良いものなので、超シンプルで且つできるだけ軽く、且つできるだけカスタマイズできるようにしなければなりません。また、私が自分でメンテナンスするので、ロギングの機構も必要です。これは流石にC++で且つマルチプラットフォームのライブラリは精通しているので、そこは問題ないと思っています。
◇ ◇ ◇
ということで、重い腰を上げて冬休み初日をまるまる使って色々と調査を始めたのですが、早速コケました(爆)
それは…
『macOSのWineがCatalina 10.15.2
(2019/12/10)で動かない』
というもので、いきなりコケましたw

macOS Catalina 10.15.2。
Steamも動かない…(^^;
ネットの情報によると、なんか今回軒並みやられたって感じですね。たしかに秋口でSteamのゲーム動かしたもんなぁ~
まぁ、時間が解決するのでしょうけど。(他力本願。(^^ゞ)
仕方がないので、まずは画像を表示するまでを開発…

まずは適当なJPEGファイルを使って簡単に画像と文字を表示。

うん、Linux上のWine 4.0.3(安定版)でWindows 64bitアプリが動いた。(´▽`)
とりあえず、本丸のLinuxが動けばいいかな… spdlog使ってログ出力も無事できたし、起動引数のファイル名もWineのドライブを付与したLinux OSの物が来たので期待どおりということで、後はキー入力のカスタマイズができるかってところかな。
どっかで大きな落とし穴に落ちて頓挫してしまうような気もしますが、そうなったら中止ということで。これもサンデープログラミングの醍醐味です。
こんなことしているとあっという間に軽く一日が溶けるのですが、どうやら私は「生涯現役」みたいなので、これもまた趣味の一つということで楽しい(?)一日を過ごしました。
しかし、このソフトは現状…
【最強の画像ビューアマンガミーヤの現状】
(1) Windowsのみのソフトである。しかも開発はとっくに昔に止まってしまっている。
(2) ここ数年前からプログレッシブJPEGなどに対応していないため、
ネットで見かけた新しい画像が表示できなかったりする(エラーとなる)。
(3) 他のプラットフォームでエミュレーションして実行はできても色々と不都合がある。
(3-1) SJISで表現できないファイル名に対応していない。
(3-2) 最近はエミュレーションが古いAPIなどに対応していないのか、
プログラムが落ちてしまう事がある。
といった事があるため、Windows以外のプラットフォームはエミュレーションで実行していたものの、Windows自体でも使っていて限界を感じてきています。
これは長年マンガミーヤを神ソフトとして崇めている支持者たちも年々思っているようで、ネットの情報によると有志が魔改造していたりしており(凄いものだとファイル名対応などはファイルオープンを乗っ取ってUnicodeに対応させたり)、色々と頑張ってはいるものの、かなり環境が限定されている様に見受けられます。
また、ここ数年は上述の事があるため、プラットフォーム別に画像ビューアを違うもので運用しており、LinuxやmacOSで一番使っているのは、「MComix」だったりします。
このソフトは素晴らしく、Windows, macOS, Linux(大御所のディストリビューションは全てサポート)の動作を実現しています。
それも、これはエミュレーションではなく…です。
中のからくりは「GTKとPythonで作られている(ランタイムも内包)」という作りになっており、「なるほど、これならGIMPと同じなのでマルチプラットフォーム(クロス開発)も可能だな」…と感心しました。
しかもMComixはオープンソースなので、その気になれば自分色に改造することも可能です。
そして、MComixは結構使ってはいるものの、
【MComixの現状(私の価値観)】
(1) GUI周りが気に食わない箇所が多数ある。(←まだ許せる)
(2) 欲しい機能がない。(←結構キツイ)
(3) キーバインドの機能が弱すぎる。(←正直キツイ)
となっており、この辺りがカスタマイズ性に優れ、多機能、高速というマンガミーヤの足元にも及ばない…けれど、マンガミーヤはWindows上でしかキレイに動かない、しかし最近は使っていてマンガミーヤにも限界を感じ始めている…
くっ、くやしい、ビクンビクン!
となってしまい、「それだったらMComixを改造してしまうのが良いかな」…と思ってはみたのですが、結局MComixを改造するにも、
【MComix改造の検討】
(1) プログラム規模が大きいので、自分色にするにも解読+改造の手間が大きすぎる。
(2) 解読を行った結果、設計思想が合わないと(特にGUI周り)、結局改造するより
一から自作した方が早い。(私の場合)
となってしまい、「それだったら勉強がてらプラットフォームニュートラルな言語(できれば「Write once, run anywhere.」)で画像ビューアを作ってみようかな」…と、今年の夏に一度検討をしてみたのですが、
【2019春の開発検討&調査】
(1) Java
最も古くから動くGUIが作れるのだが、AWT/Swingはアーキテクチャとしては古すぎる
(枯れている)。
またJava SE 9からモジュールシステム(Jigsaw)という糞アーキテクチャが導入されて、
25年弱の素晴らしい構想(「Write once, run anywhere.」)が破綻したので、
Javaは大嫌いな言語となり、選択肢に入れたくなくなった。
(2) C#(mono)
GUI周りがmonoと非常に相性が悪く、私の現在のLinux環境のXでは最新のC#コードで
GUIを作っても、とうまく動かなかった。(コンソールプログラムなら割とうまくいくのだが…)
macOSも同様だった。
(3) Python
PythonでウィンドウGUIアプリを作る方法が幾つかあったので検討したのですが、
かろうじてMComixと同じ方法が良いという頃が分かり、簡単なGUIプログラムを作るも、
GUIのプログラミングが凄く大変で心が折れた。
(というか、この知識は将来メシのタネにならないので、仮に作れたとしてもなんか違うな…
という見解になった)
(4) JavaScript
Electronを筆頭にJavaScriptで色々とデスクトップアプリが作れるフレームワークが
あるが、これもまたGUIアプリを作るのが凄く大変…というか、GUIのガイドラインが
定まっておらず、これをWindowsライクに…とか考えると、非常に骨が折れると
分かった。
また、Linux上で動かす環境構築にも一苦労した。
(VirtualBoxで実験したけどヘトヘトになった)
(5) Visual C++ (VC++ 2017, 2019)
一番私に合っている上に、WindowsのGUIガイドラインは確固たるものとなっているので、
非常に良いのだが、「Windows限定」となる。
となりました。
結局サンデープログラミングとして一番作りやすいのは「Visual C++」(OKI比)となるのと、ここ4年位本業ではずっとVC++のプログラムを作る仕事ばっかりしている上に、C++の言語仕様が年々素晴らしくなってきているので(boostのアーキテクチャがSTL標準になってきている)、最新の言語仕様&ライブラリも使ったことないので、学習しながら作ってみるかな…って気になってきました。
しかし、「Windows限定」だと、マルチプラットフォームが破綻します。
これまでの経験則でマンガミーヤをWindows以外で動かすには、「Wine」しか選択肢がなく(他のエミュレータソフトは動かなかった)、以下の挙動や不具合が散見されているという…
【これまでWine上で起動するマンガミーヤの挙動や不具合】
(1) エミュレータなので起動が遅い。
(2) GUIパーツのアイコンなどがキレイに表示されない。
(リソースのロードに失敗している?)
(3) ファイルシステムのアーキテクチャが上手く噛み合わない。
共有ダイアログなどはWineの世界となるため、
「ドライブ(Zドライブ)」などのマッピングが必要となる。
ただし、起動引数にファイル名を渡す分にはこの限りではない。
(4) 古いAPIでコケる事がある模様。
これは突然クラッシュするので詳細は不明。
ソースコードもないので原因解析も困難。
このため、
(1)(2)は気にしないで使っていた。
(3)は起動引数のみで使う。シェルスクリプトでマンガミーヤをラップして使っていた。
(4)は諦めていた。仕方なく表示できない場合はMComixを使うことにした。
という経緯があり、特に(3)の頻度が上がってきてしまったため、現在LinuxではMComixをメインで使うようになりました。
しかし、MComixは上述の
「(2) 欲しい機能がない。(←結構キツイ)」
「(3) キーバインドの機能が弱すぎる。(←正直キツイ)」
なので、そろそろ重い腰を上げるとしたいところです。
そこで開発プロジェクトを興すとしたら、以下の調査をしながら開発をすることになります。
【調査マイルストン】
(1) 自作アプリが各OSで起動できるかを検討。これは32bit/64bitどちらでも良い。
(2) 起動引数が各OSのファイルシステムと協調できるかを検討。
(3) 外部ライブラリ(オープンソースのもの)を組み込んでも実行できるかを検討。
開発にはアーカイブファイル解凍、画像操作などのライブラリを用いる。
特にライセンスに関しては可能な限りMITやApacheライセンスのようなものを用いる。
最悪でもソースコードを提示しないで良いライセンスを用いる。
マンガミーヤはオープンソースのライセンス違反で開発が凍結した経緯があるので、
二の舞にはなってはならない。
(4) 画像が表示できるかを検討。
(5) キー入力のカスタマイズができるかを検討。
これには高度なグローバルフックなどは用いる必要はなく、アプリ内のメッセージループに
来るイベントで処理できる程度で良い。
(6) GUI構成に標準コントロールのものをサブクラス化で改造できるかを検討。
超シンプルで良い。
とにかく私が満足すれば良いものなので、超シンプルで且つできるだけ軽く、且つできるだけカスタマイズできるようにしなければなりません。また、私が自分でメンテナンスするので、ロギングの機構も必要です。これは流石にC++で且つマルチプラットフォームのライブラリは精通しているので、そこは問題ないと思っています。
ということで、重い腰を上げて冬休み初日をまるまる使って色々と調査を始めたのですが、早速コケました(爆)
それは…
(2019/12/10)で動かない』
というもので、いきなりコケましたw

macOS Catalina 10.15.2。
Steamも動かない…(^^;
ネットの情報によると、なんか今回軒並みやられたって感じですね。たしかに秋口でSteamのゲーム動かしたもんなぁ~
まぁ、時間が解決するのでしょうけど。(他力本願。(^^ゞ)
仕方がないので、まずは画像を表示するまでを開発…

まずは適当なJPEGファイルを使って簡単に画像と文字を表示。

うん、Linux上のWine 4.0.3(安定版)でWindows 64bitアプリが動いた。(´▽`)
とりあえず、本丸のLinuxが動けばいいかな… spdlog使ってログ出力も無事できたし、起動引数のファイル名もWineのドライブを付与したLinux OSの物が来たので期待どおりということで、後はキー入力のカスタマイズができるかってところかな。
どっかで大きな落とし穴に落ちて頓挫してしまうような気もしますが、そうなったら中止ということで。これもサンデープログラミングの醍醐味です。
こんなことしているとあっという間に軽く一日が溶けるのですが、どうやら私は「生涯現役」みたいなので、これもまた趣味の一つということで楽しい(?)一日を過ごしました。
コメント
コメントの投稿