Devlog : 餅を絵に描く
Written on

おモチを空想する #

LaunchBox を知る #

ここ数年エミュレータ界隈の情報からは遠ざかっていた。1
サイトリニューアルの反映確認に、久しぶりに “CatShanty2” で検索してみたところ、2ちゃんねるで いまだに CatShanty2 が語られていることに驚いた。

そして LaunchBox という超かっこいいランチャーがあることを知り、しかも恐れ多くも、それと比べられている事実にまた驚いた。 検索すると法人格の運営するソフトウェアで、こんな爺の日曜プログラムなど比較する意味もないと思うが、いやはやまあ大変光栄なことだ。

一方、何やら LaunchBox 推しの人が CatShanty2 を紹介した人と言い争いをしている場面も見受けられた。
終いには「CatShanty2を紹介した者は作者くさい」と、私に飛び火する流れになっていた(ナンデ~

私は2ちゃんの仕組みをよく知らず、また匿名である以上成す術もなく、なんだか計り知らぬ場所でケガをさせられた気分になった。

文章から察するに20代前後だろうか。血気盛んな時期なのか「死」という過激な言葉まで使っておられる。2

私は人生折返しを疾うに過ぎていて、いよいよ次の節目は還暦かという人間である。
故に、双方ともに私の事など気にする価値もないと考え、是非仲良くやってほしい。争いごとは何も生まない。

それに所詮、ソフトウェアは道具でしかない。
道具は好きなものを選べば良いし、人に押し付けるものではない。3

そして惚れる #

LaunchBox は動画を見るだけで楽しさが伝わり、素晴らしいゲームセレクタUIだと感銘を受けた。
私には到底及ばないセンスを備えている。私の年代(いや私だけか?)は、やはり海外の方の作るモノの目線・文化・感覚というものは、いつになっても憧れの対象である。4

ケガはさせられたが大変良いものを知り得た。
Unbroken Software, LLC に感謝しつつ、暫く LaunchBox のセットアップで楽しく過ごせそうである。

CatShanty3でなにをするか #

さて、CatShanty2 の改修が難しいという理由だけで CatShanty3 を作るのはモチベーションが上がらない。
LaunchBox を知った今、私の特殊な用途(蔵書管理)による使い心地次第では、私も LaunchBox をメインで使用するかも知れない。

CatShanty3 で改善したい要素はなんだろうかと自問してみる。

  • UTF8文字対応
    • これは「だいな♥あいらん」のハートをちゃんと出したい。それだけ😋
  • x64化
    • x86のままでもWow64が優秀なため別段不便はないけれど、x64化は時代の流れだし何も考えなくてもコンパイラがやってくれる。
  • 不要機能の削除
    • 要らない機能が結構ある。
      OSが標準でZIPに対応する現代において、「イメージファイルを解凍してコピー」などはエクスプローラーを開けばいいだけだ。
  • 自前ライブラリをメジャーなライブラリに載せ替え
    • CRC計算はVB用に公開されていた他作者さんのソースから移植したもので、ActiveBasicはビットシフトが使えるので多少改修して高速化したものの、現代のライブラリを使用すれば爆速化が期待できる。5
      ほかにも SQLite3 のアクセス部分はリストビューとの連携で都合の良いように自前ライブラリを書いたが、これも現代のメジャーなライブラリに載せ替えることで安定化が見込める。6
  • メインウィンドウGUIのリフレッシュ
    • 端的に言えば「見た目に飽きている」。

主にこんな感じだろうか。
結局は趣味でのライフワークの継続といったところだろうか。

メインウィンドウ考察 #

現状の把握 #

詳細を語る前に CatShanty2 をおさらいする。
CatShanty2 は グループ、インフォメーション、アイテムリストを決め打ちで用意した。

当時のエミュランチャは軒並みこういった構成だったが、特にお気に入りは AL88 というエミュランチャで、そこへ hogehoge2006 という SQLite3 でタイトル管理する音楽プレイヤーに感銘を受けアイディアをミックスした。画面構成は AL88 もそうだが hogehoge2006 を相当参考にさせてもらった。

私が愛し触発された名作ソフトたち



H2k6 (旧Hogehoge2006(仮)) : © super.hitodhi.kun 氏
我ながら相当そっくりである。毎日起動するほど、かなりお気に入りの音楽プレイヤーだった。



AL88 : © AKATTA 氏
国産レトロPCのエミュレータが好きな私としては一番のお気に入りラウンチャーだった。公式サイトのメタルオレンジのスクリーンショットにも痺れた。
※今回撮影のために Win10 でなんとか起動できた。所々発生している文字化けはそのためでありソフトウェアのせいではない。



SlaunchXP : © sodoms 氏
決定版と言って良いエミュランチャで、私も長い間愛用していた。



K-Launch Plus : © KEI 氏
まず目に付くカッコ良いエンプティ画像で一瞬にして虜になった。SlaunchXPと併用して使わせてもらっていた。


どれも非常にお世話になり、思い出深く、こうして未だにバイナリを削除出来ないでいる。
これらの素晴らしいソフトウェアを生み出し、公開してくれた作者の皆様へ感謝をいたします。
例えばタイトル一覧で #

実際のところ音楽でもゲームでも、タイトル群を俯瞰する場合、それなりのアートワーク7が揃っていない状態ならば「リストビュー」形式が最適だと感じている。加えてCatShanty2 でリストビューを採用したのは元々は蔵書管理ソフトであることにも起因する。

しかし、アートワークが充実すると今度はその画像を並べたくなるし、アイコンが増えればカスタマイズしたくなる。 これらはコレクターとして当然のことであろう。

CatShanty2 でも “3ショットタブ” を付けたり、アイテムリスト内へスクリーンショットを表示したりして欲望を満たしてきた。

もっと個性を #

固定画面構成で開発をしていると、ユーザー各々の理想が湧き出てくる。
アイコンを好きなように並べたい、背景に画像を置きたい、関連動画を再生したい、などなど。

愛されている証拠でとても嬉しかったが、固定設計上の縛りや、私の技量不足も相まって、沢山のアイディアを見送らせてもらう結果となってしまった。

そしてインスパイア #

以下は先週の LaunchBox を知らない私が書き溜めたもので、記事を編集している今では、もしかしたら LaunchBox が備えているかもと期待している部分にも成り得る。

過去に見送ったアイディアを思い起こすうち、現在の私が日々愛用するソリューション群に触発され、次のようなギミックを考えるようになった。8

  • foobar2000 のような
    • コンポーネント選択の自由
  • Rainmeter のような
    • ユーザーが簡単に作れるコンポーネント(メーター)
    • コンポーネントの自由な配置
  • PLEX のような
    • 有能なエージェント

これらにより ユーザーが自由に部品を作成・配置できたら素敵じゃないか と思うに至るのであった。

CatShanty3が見る夢 #

コンポーネントの選択の自由 #

そこで考えるのは foobar2000 Rainmeter のように、コンポーネント毎にプラグイン化してしまうことだ。9

例えばリストビューひとつ取っても、いくつかのタイプから選ぶことができれば、ユーザーは理想に近いものを配置することができるし、不要なものは組み入れずにおくことができる。

アートワークと情報 #

PLEX というパーソナルメディアソリューションがある。
私は自宅の Ubuntu Server へインストールして PLEXサーバーを立ち上げ、映画・ドラマ・音楽のホームシアターサーバーとして愛用している。

この PLEX のエージェントがまた優秀で、「こんな人まで?!」というアーティスト、アルバムやポスター画像、概要テキストまで、色々と自動で収集してくれる(間違うことも多い)。

エージェントのおかげで、それほど手間を掛けずに自分のライブラリが華やかになってしまうのだ。

そんなエージェントが裏で働いてくれたら…と妄想する私であったが、優秀なエージェントを動かすのは中々難しそうである。

自由配置とユーザー作成コンポーネント #

コンポーネントの配置に関しては特に Rainmeter に触発される。

コンポーネント同士の重なりを許可したほうが面白いだろう。スクリーンショットやアイコン、その他の情報などを重ね合えることでカッコいい画面が作れそうだ。

それならいっそのこと、コンポーネントのデザインや動作もユーザーが作れたらなお素敵だ。

Rainmeter のようにテキストで書けば何かしら表示されて動いちゃえばハードルも低く、ユーザーフレンドリーだし、高揚感もある。

ユーザースクリプトで悩む #

この高揚感、胸の高鳴りを実現するにはどうしたら良いのか?

何らかのユーザースクリプトにより CatShanty3 がコンポーネントをGDI なり DirectX なりで描画すれば、具現化できる可能性があるのではないか。

ではどんなスクリプトにするか。

CatShanty2 でもキー入力発行エミュレーションなど、独自のスクリプトは提供していたが、変数も条件分岐の入れ子も未対応だ。10

変数や入れ子などを提供するには、既存の完成されたスクリプト言語を内包すれば良いのではと考えた。

調べるとそのような仕組みを「グルー言語」と言うらしいことが分かった。グルーガンのグルー(にかわの接着剤)。なるほどと感心した。

グルー言語と通信できる独自APIや関数を用意すれば、画面の描画や動作処理などを分離した上で、ユーザーにも提供できそうだ。

更に調べると、軒並みの主要言語に対して軽量スクリプト言語をグルーできる拡張が開発されていた。私は深く感心するとともに無知であることを恥じた。

既にRust向けにも色々なグルー言語環境があり、その中でも Luaスクリプトあたりが良さそうだと調査を始めた。 Lua言語なら Rainmeter でも馴染みがあるし、軽量高速を謳っていたからだ。

キー入力エミュレーションなどはグルー言語が使えるとして、ユーザーUI作成スクリプトに関してはもっと楽な方法に逃げ道を見つけてしまった。

そしてWebView #

TAURI で WebView2 に乗っかってみようと思ったのは前述した通りだが、ここで

「WebViewならLua噛ませなくてもjavascriptが動くじゃん」

という所にたどり着く。

コンポーネントは個別に javascript+HTML+CSS で作成し、Rust でメインウィンドウと結合して配置すれば、何となく考えていることが出来そうな気がする。

またセキュリティ #

ただし問題がないわけではない。
グルー言語と独自APIという構成と違い、外部javascriptを結合することはセキュリティ上非常に脆弱となり、悪意のあるスクリプトをどう排除するのかが課題となってくる。

またもや面倒な部分に時間を取られやりたいことが出来なくなるパターンだ。 世の中に悪い人間は沢山いるわけで、これは永遠の課題なのだろうが、ハテ一体どうしたものか。

他の事例を見る #

己の例を挙げれば CatShanty2 にも外部プラグインを読み込む機能があり、悪意のある DLL を作れば HDD を消去することだってできる。

では、foobar2000 や Rainmeter はどうやっているのだろうか。
プラグインや DLL やスクリプトで同じような被害を与えたり、隠密にネットへ何かを送信することができるだろう。 プログラム的には何かしらの対処や制限を設けているのだろうか。

コミュニティの力 #

一方で、悪意の行動に対して、ユーザーコミュニティが有効に機能しているように感じた。

フォーラムも充実していて、信憑性つまり書き込むユーザーに一定の透明性が確保されるため、価値のある情報が交換されていると感じる。

CatSahntyサイトの、旧態依然の「ザ・掲示板」ではこれは中々難しい。
そちらの整備も必要になってくるのかも知れない。うーむ。

ユーザー側の知識に頼るか #

javascript ならソースを読めるユーザーが殆どではないだろうか。ある程度危険なコマンドを除去して結合すれば、あとはコミュニティに頼ってみても良いのではないだろうか。
…などと他力本願の妄想を抱きつつ、調査を進める私であった。


  1. 言語選定に夢中だったことに加え、所有機のソフトで優先度の高いものは大体ファイル化したため熱が冷めた理由もある。XBOXエミュレータが動作するようになっていると最近掲示板で教えてもらったくらい疎遠になっている。ただXBOXは改造してまで遊び尽くしたマシンであり久しぶりに胸の高鳴りを覚えた。 ↩︎

  2. 若いということはそれだけで途轍もない価値がある。皮肉なことに若いうちには気づかない事が多い。是非そのエネルギーを他方への発散ではなく己の発展のために使ってほしい。 ↩︎

  3. 例えば音楽ひとつとっても、古くても使い慣れたレコンポーザーを使う人、MMLで書く人、色々いらっしゃるし、またそれ一つで完結するものでもない。私は一つの価値観に縛られる必要はないと考える。 ↩︎

  4. ハンバーガーという謎の食べ物が凄くおしゃれに感じ、食べたこともないのにその容姿写真に惹かれ、学生時代に美術の時間にて鈴木英人風の浮き彫り彫刻筆箱を制作するくらい、「舶来」というだけで憧れを持つ人間である。 ↩︎

  5. 当時は公開ソースに明確なライセンス表示が無く、自由に改変して使ってください的な文章がWebページに添えられているものが多かった。結局よくわからずCatShanty2のソース公開を躊躇する要因にもなっている。一番の躊躇要因は自分のソースが汚いからなのだが。 ↩︎

  6. 英語の解説を読みながら抽出結果のメモリマップを直接叩くような方法を取っているためかなり自信がなかった。意外と安定しているので自分でも驚いている。ただアクセスできる機能は少ない。 ↩︎

  7. この場合アルバムジャケットやスクリーンショットを指す。 ↩︎

  8. ここに挙げた素晴らしいソフトのユーザーであれば、なるほどと思うかもしれない。或いは既にそういったエミュランチャがあるのかもしれない。もしかしたら自分で作ろうという開発者が現れるかも知れない。 ↩︎

  9. この頃はまだ WebView では検討しておらず、我が脳みそは GDI+ か DirectX での描画を考えていたが、メインウィンドウを1枚のキャンバスと考え、コンポーネントを自由配置してはどうかと思い始めたのもこの頃だった。 ↩︎

  10. 非常に取り留めのないスクリプト仕様でユーザーに不便強いていたことと思う。 ↩︎

marm.nakamura