CardWirth 1.60のデータ圧縮について

Issue #71 new
k4nagatsuki repo owner created an issue

現在開発中のCardWirthNextで*.widファイルに圧縮がかかるようになりました。どのような形式かは不明です。Twitterを見る限りでは訊ねてもはぐらかされているようです。DLLを用意する必要がある所を見ると、独自形式でしょうか。

情報が公開されないとすると、これは事実上のデータ形式の隠蔽です。私はCardWirthPyの開発を再開する際に互換性の再重視を掲げましたが、データを隠蔽されてしまうとそれが不可能になってしまいます。cwxeditorを含むCWPy以外の周辺ツールも同様です。

以前、CardWirthのデータは何も隠蔽しない形になっており、そのため開発が停止しても(長い時間をかけて)周辺ツールの開発が可能となっていました。どのような開発者も人間ですから、事故・病気・飽きが来るなどの理由で特定のプロダクトから手を離さざるを得ない時がやってきます。実際にgroupAskの活動停止がありました。その時は前述のような事情でCWPyのようなクローンを作成してシナリオ資産を生き延びさせようとする試みが可能でしたが、今度はそのような事態が再起不能な形でやってくるかもしれません。

このような大上段な言い方は好きではないのですが、私は10年後、20年後、あるいは50年後もCardWirthが遊べるべきだと考えています。多数のシナリオ作家の手になる膨大な努力は何があっても無に帰すべきではないと考えています。それを実現するのがCardWirthという基盤のメンテナの責任ではないかとも思っています。

DLLが出されるとして、そのライブラリがあらゆるプラットフォームでリリースされ・永遠にフリーで・メンテナンスされ続ける保証がなければ上のような事に対して意味がありませんが、そんな保証は現実問題として不可能です。現実に長期間それを達成できる可能性があるのはフリー・オープンソースという手段だけです。CWPyとcwxeditorをフリー・オープンソースの移植性のあるCardWirthエンジン+エディタとして開発しているのはそのためです。

とはいえ、このままデータ構造の隠蔽が推し進められると、開発中止か、あるいは将来性をどうしても確保したければ独自路線へ突き進んで事実上の分裂という事にならざるを得ないと思います。それは仮に唯一としても最悪の選択です。ユーザが割を食って不便を強いられるからです。これが杞憂であればよいのですが。どうせcwxeditorやCWPyは互換性維持の方向で行くのだから知る人ぞ知る程度の存在でいいや、という考え方も改めなければならないかもしれません。

とりあえずもう少しよくデータを調べてみて、分からなければLyna氏にメールで問い合わせてみる事にします。後の行動はその結果次第です。

Comments (33)

  1. k4nagatsuki reporter

    ついでのようですが、今回のデータの件の他にも現状に対して次のような懸念を抱いています。

    • バリアントが事実上切り捨てられている事(でこぱちやアレンジパックはリソースオーバーライドという形でカバーされている)。
    • エフェクトブースターのソースコードはCW本体への同梱という形で公開されていたが、1.50リリースと共に隠蔽された事。
    • 互換性がわずかながら損なわれている事。例えばカードサイズ以外の画像を話者に使うとメッセージがずれるバグは、害がなく、それを利用しているシナリオが複数存在しており、そのことが通知されたにもかかわらず挙動が変更されてしまいました。また、??で始まる名前の変数が1.30からシステム変数として扱われていますが、これは\\で始まる変数名ならば存在し得ないので安全であるとの話があったにもかかわらず現状のようになっています。

    CWPyの開発再開は上のような事に対するフォローも目的としており、現状スキン機能と互換性機能で完全にフォローに成功していると思います。

  2. k4nagatsuki reporter

    私は冷静さを欠いているかもしれません。書いている事に喧嘩腰のような部分があったとしても本意ではないです。そのような箇所を見つけたらたしなめていただければ幸いです。

  3. k4nagatsuki reporter

    メールで送る予定の文面を載せておきます。送らずに済めばラッキー。

    お久しぶりです。cwxeditorの開発者です。 お訊ねしたい事があってメールを送らさせていただきます。

    Lyna様が開発中のCardWirthNextは、将来的にCardWirth 1.60としてリリースされる見込みと推察しています。

    このバージョンで、シナリオのデータが圧縮され、以前のように解読ができなくなっているのですが、これはどのような理由があってのことでしょうか。

    https://bitbucket.org/k4nagatsuki/cwxeditor/issue/71/cardwirth-160

    ここに書いた事をお読みいただければお分かりになるかと思うのですが、私はその変更によってCWの将来が危うくなるのではないかという危機感を抱いています。これらの懸念を打ち消すような行動を取られる予定はお有りでしょうか(圧縮・展開ルーチンの完全な仕様の公開、オープンソース・フリーソフトウェア化など)。

    不躾なお問い合わせで申し訳ありませんが、どうかご返信をよろしくお願い申し上げます。

    なお、このメールに対する返信は上の記事で公開させていただきたいと考えております。 ご了承いただければ幸いです。

  4. k4nagatsuki reporter

    ご意見等あればどんどんこの下に追加していってくださればと思います。

    bitbucket.orgのアカウントが必要になってしまいますが……。

  5. tachi gigas

    ややこしい話になりましたね。

    DLLの形でもラッパーが用意されれば当面の問題なら解決できそうに見えますが、本家様の腹の内で話は変わってきそうですね。そこも含めて僕の意見としては連絡するならなるはやで連絡取った方がいいと思います。

  6. takuto_cw

    データを圧縮した理由については、恐らくこれじゃないでしょうか。

    Lynaさんのtwitter発言(10/3)
    https://twitter.com/lynatan/status/385785908504436736

    理由があるなら、圧縮すること自体は構わないんじゃないかと自分は思ってたりします。

    でも圧縮・解凍する方法は、ぜひとも公開していただきたいところ。非公開のデメリット(CWPy の互換性や周辺ツールへの影響)なんて大したことない、と思われていたら悲しいですね。やはりβである今のうちに、連絡をとるのが良いかと思います。

    問い合わせの文面については、圧縮の部分だけ「理由はこれこれだと見受けられますが~」などとすれば、他は問題ないかと。

  7. k4nagatsuki reporter

    ありがとうございます。他に方にもその発言の事を教えていただきました。

    それが理由だとすれば、現在のやり方には次のような問題があって効果的ではないと思います。

    • JPEGやPNGのようなすでに圧縮された形式に対してはそもそも効果がありません。
    • 音声や画像と知った異なる形質のデータにはそれぞれ適切な圧縮方式があり、一律に同じ方式を適用しても効果的ではありません(圧縮に様々な規格がある理由の一つがこれです)。

    そして次のようなデメリットがあります。

    1. grep(テキスト検索)ができなくなります。ConSearchのようなツールはテキスト検索を行っていますが、それも使えなくなります。
    2. 外部ツール・CWのデータを扱うプログラムを作る事が困難になります。
    3. データを処理する際に圧縮・展開のオーバヘッドがかかります。
    4. 将来CWの開発が停止するような事があった場合、それを復活させる事が著しく困難になります。

    適切と思われる方法についてですが、従来のCWのデータ部分はそのままで、音声や画像がある所だけをそれに適した形で圧縮した方がよいと思われます。上に挙げた問題はすべて解消あるいは非常に軽減されます。

    私はそもそも素材の格納という機能事態に問題があると考えており(重複や素材のライセンスに絡む問題)、それを解決する方法も知っていますが(カードごとにフォルダを作って宿へ取り込む方法等)、話が逸れすぎるので詳述は割愛します。

    とにかくまずいのがデメリットの4.です。これが解消されなくてはCWの将来に関わります。

    というわけで、文面を変更します。

    このバージョンで、シナリオのデータが圧縮され、以前のように解読ができなくなっているのですが、これはどのような理由があってのことでしょうか。

    このバージョンで、シナリオのデータが圧縮され、以前のように解読ができなくなっているのですが、これには問題があると考えております。

  8. k4nagatsuki reporter

    どんな圧縮かよくわからんという結論になりましたので、メールを送りました。

    メールアドレスがわからないのでCW愛護協会のアドレスへ送りました。取り次ぎされれば届くはず。それに伴いメールの冒頭部分を次のように変更しています。

    Lyna様並びにCardWirth愛護協会の皆様

    お久しぶりです、あるいははじめまして。 cwxeditor(https://bitbucket.org/k4nagatsuki/cwxeditor/)というツールを開発している者です。

    spamフィルタに引っかかったりしなければいいのですが。反応がなければ他の方に再送をお願いするかもしれません。

  9. k4nagatsuki reporter

    現在まで何も反応は無いです。今日一日待ってみても何も無ければCWUN辺りに書き込んで連絡を試みます。

  10. k4nagatsuki reporter

    CWUNが消滅してました……。

    個人的にアカウントを作りたくないのですが、Twitter以外に連絡手段は無いのでしょうか? どなたかご存じであれば教えていただければ。

    どうしてもそれしか無いならTwitterアカウント作ります。

  11. tachi gigas

    愛護協会様のアドレスで反応がなかったとしたら(スパム判定されましたかねぇ…)、Twitterアカウント作るしかないと思われます。readmeでもtwitter上でバグ報告してくださいみたいな書き方ですし。

  12. takuto_cw

    「バグ報告フォーム」と、「気軽にご意見投稿フォーム」なら見つかりました。

    前者は愛護協会の1.50リリース報告ニュースの、「また、引き続きバグ報告は受け付けております。」のすぐ下にあるリンクから。後者は掲示板のページ、「CardWirthに思う事アンケート」から行けます。

    ちなみに自分が9月はじめ頃に、本家エンジンのEPマイナス値バグを報告したときは(※内容はCWPyのissue86 参照)、バグ報告フォームから送りました。バグが直っているところを見ると、少なくとも前者は生きている模様。

    後者は、ギルド機能・エンジン機能の要望アンケートが主な用途のようです。でも一応2ページ目に「どんなことでもOK」という欄があります。

  13. k4nagatsuki reporter

    ありがとうございます。2ページ目は気がついてませんでした。メールフォームなら確実ですね。

    とりあえずは後者で送ってみて、何も音沙汰が無ければ前者を使ってみることにします。

  14. k4nagatsuki reporter

    先ほど送りました。記録しとくの忘れましたが文面はメールとほぼ同じでフォーム用に若干変更しています(あとメールを送ったんですが~みたいな文をつけた)。

  15. k4nagatsuki reporter

    フォームでの送信は成功したと思うんですが、今のところ何も反応はありません(返信用のメールアドレスは付けてます)。

    Twitterで連絡を取るしか無さそうな気がしてきました。文面等考えます。

  16. saki_cw

    愛護協会のマッキーです。 返事が遅れていて申し訳ございません。 きちんと届いていますので、回答をお待ちください。

  17. k4nagatsuki reporter

    あっと、大変申し訳ありません。気付かないまま、たった今呟いてしまいました。メールは届いていたようで何よりです。どうぞよろしくお願い致します。

    つぶやいちゃったアカウント(すでに用済み): https://twitter.com/k4nagatsuki

  18. k4nagatsuki reporter

    上のアカウントで補足説明を呟きました。こんなの補足じゃないと自分でも思いましたが。

    1. CWPyは開発が止まっていた
    2. その間にNextが出た
    3. オープンソースにならないみたいなのでCWPyをフォローとして開発再開した
    4. そしたらNext更新でフォローすら不可能になりそう。まずい

    要約したらこれだけ? どうしてああなる……。

  19. k4nagatsuki reporter

    この件に関して、幾つか意見が書かれています。ありがとうございます(他にもあったら教えてください)。

    すべてのデータにアクセス・保存可能なDLLが実際にリリースされれば、ラッキー氏の仰る通り問題は部分的に解決するかと思います。

    部分的解決にも前提条件があり、次のようになるかと思います。

    • DLLはエンジンのβリリースより前か、少なくとも同時に公開される必要がある(狭間の期間のリスク回避)
    • 現実的に使用可能なライセンスでリリースされる必要がある
    • DLLがエンジンよりも古くならないよう同時並行で更新される必要がある
  20. k4nagatsuki reporter

    上に書き損ねた全体圧縮のデメリットについて。直接ユーザに関係するデメリットが2つあります。

    • 過渡期のシナリオが作れません。1.20から1.28への移行期のように、新しいエンジンかどうか判定して処理を分岐させるようなシナリオを作る事はできません。新しいデータ形式のシナリオは古いエンジンでは一律でプレイ不可になります。
    • 現状、新機能を使用しているしていないにかかわらず、一度新しい形式で保存したシナリオを古い形式に戻す手段は存在しません。

    上に書いた部分圧縮の手法であれば、これらの問題も解決します。

  21. takuto_cw

    こんばんは。先週末も大量更新お疲れ様です。放置しっぱなしの解説がリンクされて大慌てな takuto_cw です。

    意見のリンク先を見たところ、「結局 Lyna さんにどうして欲しいのか」について、誤解されている気がします。NEXT のオープンソース化の要求だと思っている方もいらっしゃるようですし…。

    そういう自分も勘違いしているかもしれないので、一度確認しておきたいのですが、

    要望:データを圧縮するならば、他のソフトでも読み書きできるような手段を用意してください。(圧縮の手法を公開するなど)

    提案:全体圧縮はデメリットが多いので部分圧縮にしませんか?

    これで合っていたでしょうか。

  22. takuto_cw

    話は変わり、ここからは……「事実上のデータ形式の隠蔽」なんて、大げさだなあ、考えすぎじゃないかな、と思ったひと達への補足説明。(自分はプログラムにあまり詳しくないので、間違ってるかもしれません。おかしなところはご指摘ください)

    さて、1.60 の圧縮方法を k4nagatsuki さんが探しても見つけられなかった(おそらく一般に使われてる圧縮・解凍方法をいくつか試したけど、それらのどれとも違ったのでしょう)。ここから分かるのは、

    「どうやら一般的な方法でなく、オリジナルな圧縮方法を用いているらしい」

    これが正しいと仮定して、「何故わざわざそんな事をするのか」ということです。

    圧縮率が高いのでしょうか? でも上に書かれた k4nagatsuki さんの解説(音声や画像と知った異なる形質のデータにはそれぞれ適切な圧縮方式があり~)を読む限り、自分には部分圧縮の方がずっとメリット多いように見えます。

  23. takuto_cw

    もしこの件だけだったら「きっと外部ツール用 dll くらい、何も言わなくたって提供してくれるよ」と思えるのですが。

    実は、似たような事件が既にありました。愛護協会さんの開発版エンジンで、この件より前にやはり「何のメリットがあるのかわからない」データ構造が採用されていたそうなのです。

    大雑把にいうと、データを細切れにして並べ替えて保存しているということです。圧縮ではないので、データ量の節約にもなりません。(現在はここからまた形式を変えたとのこと)

    詳しくはこちら(自分が分かってないだけで実はメリットがあるのだったらごめんなさい)

    「作ったひと以外に分かりにくい」「そうすることのメリットも不明」なデータ構造を、こうも連発で出されると……不安です。そうすることの目的は、一体何なのかと。「事実上のデータ形式の隠蔽」という言葉には、こういう背景があったのです。

  24. k4nagatsuki reporter

    要望:データを圧縮するならば、他のソフトでも読み書きできるような手段を用意してください。(圧縮の手法を公開するなど)

    提案:全体圧縮はデメリットが多いので部分圧縮にしませんか?

    そうですね。その要望の前提として、CWはソフトとそのユーザだけで成り立つものでなく、シナリオ作者や素材作者など多くの人のエネルギーが注ぎ込まれているものなので、継続性を大事にしていきたいという考え方があります。この考え方が成り立つかどうかはもはや善悪正邪ではなく個々人の趣味の問題かと思います。

    今になって思うと私の言い方はちょっと煽り過ぎだったような感じがしています。言い方次第で伝わらないというトラブルは世に溢れているのでもうちょっとマシな言い方をするべきでした。意を汲み取って補足されてくださる方には本当に感謝しています。

    ついでですが、「CardWirth1.60とNEXTとpyについて」の記事にコメントをつけた事も報告させていただきます。

  25. takuto_cw

    挙手。夜20時くらいなら、曜日はいつでも大丈夫です。

    ちなみに自分、返事にすごく時間がかかる人間なので、多分流れを追うだけで精一杯です…。喋ってなくても、どうぞおかまいなく。

  26. tachi gigas

    皆様お疲れ様です。

    参加できるかどうかは日時等もよりますが、僕としてはいつかラッパー(というか外部操作用DLL)が用意されればいいと軽く思っていますので、最悪それを不在者票にでもしていただければなと。

  27. k4nagatsuki reporter

    状況が変わったので私の意見と見方をまとめておきます。

    具体的には、Lyna氏から次のような発言がありました。今回の件に関係する事は間違いないはずです。

    他にも関連する発言はありますが割愛します。

    まずはLyna氏を始めとする関係者に不愉快な思いをさせてしまったことや、結局大騒ぎになってしまった事について謝罪させてください。もう少しよい立ち回り方があったと思います。申し訳ありません。

    なお、上にある意見交換会が行われるかは現在のところ不透明です。


    さて、今回の件について私がメール・メールフォーム・Twitterを使って伝えようとした懸念は次の通りです。

    現行のCardWirthNextでデータ圧縮がかかるようになったが、その圧縮仕様が公開されなければCardWirthの継続性が危ぶまれる。例えば開発者が何らかの理由で開発を継続できなくなり(これには今回のような事態も含まれます)、連絡もつかなくなったような場合、CardWirthの開発は停止するだけでなく、データ仕様が分からず他の人がどうにか継続しようとする事もできなくなる。

    他に君の文章からはこうも読み取れるよ、というような事があったらご指摘ください。

    この指摘についてのご返答ですが、CardWirthのオリジナル開発者でも無いにもかかわらずCardWirthの将来のような責任を負わされては困る、といった旨の発言をいただいております。

    また、上の指摘に関連して私が要求した事柄は次の通りです。

    データ圧縮仕様の開示または仕様の変更。現在の圧縮仕様に問題があることを示し、具体的な対案を提示しました(この記事内)。圧縮仕様については最初からLyna氏が設計されたものであるはずなので、その部分の仕様は問題なく把握されているであろうという想いもありました。これについてはご返答はいただいておりません。

    オープンソース化できない理由の提示。これは上にリンクを張ってある記事に対するコメント内です。引用すると次のようになります。

    別の話になりますが、Nextのオープンソース化について話し合いが行われた時、派生版が出ては困るという事が理由として挙げられていたかと思います。しかしながらCWPyがその時点ですでに存在しており、その理由はそもそも前提が成り立っていません。他に理由があるとすれば、それも知りたいと思っています(単にそうしたくないとかでも理由は理由です)。

    これについてもご返答はいただいておりません。また、同記事内で次のような提案を行っています。

    私見ですが、Nextの開発体制を変えられないという事であれば、この問題に関する解決策のうちベターなものは、そもそもファイル全体を圧縮するのをやめてしまうというものです。挙げられている記事内に書いた通り、その方法にはデメリットが多すぎます。格納部分の限定的な圧縮であればデメリットがすべて解消するといった具体的な対案もそこに書きました。

    さらによいのが、素材の格納自体をやめ、「宿へカードを持ち帰った時にきちんと動かしたい」といった需要はカードと一緒に関連素材を個別に宿へ投入する事で解決する事です。これはファイル格納から来るデメリットがすべて消滅する上、実装も簡単です(CWPyではすでに実現していたりします)。

    これは今のところ読んで頂けたかどうかも不明です。コメントしたよ、などという報告ではなく、最初から引用するべきだったかもしれません。


    上の件をどのように伝えようとしたかですが、次のような順序になります。

    1. この記事を作る
    2. Lyna氏にメールで連絡を取ろうとするが個人メールアドレスが分からず愛護協会へ送る
    3. 数日返信がなかったので愛護協会のメールフォームを使用して送る
    4. Twitterを作成して@lynatanへメッセージを送る(関係しそうなアカウントのフォローもする)。入れ違いで砂輝氏からこの記事へ書き込み。
    5. 作成したTwitterアカウントで今回の件を説明する一連の発言
    6. 砂輝氏のBlog記事へコメント。
    7. Webチャットを利用した話し合いの提案があり、参加可能な時刻等を伝える。

    成り行きで砂輝氏とのやりとりが中心になりましたが、Lyna氏を蚊帳の外に置こうとしたことはありません(最大の当事者ですので、当然チャットにはLyna氏も参加するものと思い込んでいました)。そのことはご理解ください。


    Lyna氏のTwitterの発言から、CardWirthNextのオープンソース化を要求されたと受け取られている事が読み取れます。それについては、望ましいと思いつつも、要求しないように注意していたつもりです。なぜならば、これまでの傾向からしてLyna氏がオープンソース化を望んでいない事が明らかであるように思われたからです(その理由を知りたいとは思っていましたし、実際に書きました)。ただ、今回のデータ仕様の変更については、上に書いた通り継続性・将来性の問題が発生するため、どうにかならないかとアクションを起こした次第です。

    穏健な展開も可能だったはずですが、現在は上に書いた通り要件が適切に伝わっておらず(質問に対する返答をいただけていないのはたぶんそのせい)、険悪とも取れる状況になっています(おそらく私の書き方がまずかったはず。よくある)。連絡の不備の問題もあったと思います。私の方からもLyna氏へ直接メッセージを入れるべき場面が何度もあったはずですが怠りました。申し訳ありません。

  28. Former user Account Deleted

    すみません、完全に空気を読まない場違いな発言だったので、コメントを消したかったのですが、delete リンクが正常に動作しなかったため、テキストを削除させていただきました…失礼しました。

  29. Former user Account Deleted

    k4nagatsuki氏はLyna氏の考えを思い違いしているかと。 Lyna氏は単にオープンソース化を要求されたと思い込んで反発しているのでなく 趣味でやってることに対してあれこれ指図されることに反発しているのだと思います。 データ圧縮方法にデメリットがあろうがなかろうが取り入れるかはLyna氏の自由。 そもそも10年後、20年後ユーザーがカードワースのシナリオを遊べることは あなたにとっての理想であってLyna氏にとっての理想でない以上 データを隠蔽しようがしまいがLyna氏の自由では?

  30. saki_cw

    カードワースで遊ぶ全ての人にご迷惑をお掛けして申し訳ありませんでした。 原因の一端となったチャットは中止にします。

  31. k4nagatsuki reporter

    ご意見ありがとうございます。チャット中止了解しました。

    ご意見について。

    Lyna氏は単にオープンソース化を要求されたと思い込んで反発しているのでなく 趣味でやってることに対してあれこれ指図されることに反発しているのだと思います。

    そうですね、今では私もそう思います。「楽しくやりたかった」という発言がそれを表しています。単に目指しているものが違うという事で、その辺りを察せなかったのは返す返すも残念です。

    そもそも10年後、20年後ユーザーがカードワースのシナリオを遊べることは あなたにとっての理想であってLyna氏にとっての理想でない以上 データを隠蔽しようがしまいがLyna氏の自由では?

    これに対してアクションを起こさざるを得なかったのは、すべてのユーザが巻き添えになるからです。エンジンとエディタが中心となるインフラである以上、そこに問題が起きるとどうしても現在と未来のすべてのCardWirthユーザが巻き添えになります。もちろん私も含めてですので、私は行動を起こしました。

    CardWirthがユーザが創造力と労力をつぎ込む型のソフトであったことが不幸の大本です。そうでなければ問題は遥かに小さかったでしょう。

  32. Log in to comment