ワークスペース破棄タイミングについて

  1. Kuro さん

    すっかり夏が本気を出してきましたが、暑さにも負けず新バージョンをリリースされている Kuro さんには相変わらず頭が上がりません。

    そしてこんな猛暑の中、要望を出すことをお許しください...^^;

    ワークスペース機能ですが、ワークスペースファイルの破棄タイミングは Mery 起動時かと思います。
    これを、終了時に破棄するようにしてはどうでしょうか?

    先日不意に Mery が異常終了してしまったのですが、そこは慌てず
    「あ、落ちちゃった…編集途中のテキストは消えちゃったかな…まぁ最悪、前回の正常終了時の状態が復元されるからいっか」
    と思い、再度 Mery を起動したところ、ワークスペースは消え、まっさらな状態になっていました。

    ※「異常終了しても前回の正常終了時の状態に復元される」と勘違いしたのは、ワークスペースの破棄タイミングを Mery の正常終了時と思い込んでいたためです...^^;

    終了時に破棄するようにできれば、異常終了時の復元可能性をひとかけらほど大きくできると思ったのですが、難しいでしょうか?

     |  yuko  |  返信
  2. いえいえ、夏バテ真っ最中で溶けてます ^^;

    > ワークスペース機能ですが、ワークスペースファイルの破棄タイミングは Mery 起動時かと思います。
    > これを、終了時に破棄するようにしてはどうでしょうか?

    私も最初はその仕様で開発していました。起動時に一時ファイルを削除するってのは、ちょっと特殊な感じがありますからね。

    でも、終了時に破棄するようにすると問題があるんです。

    > と思い、再度 Mery を起動したところ、ワークスペースは消え、まっさらな状態になっていました。

    おそらく、すべて未保存で「無題*」な状態だったのではないでしょうか?

    ワークスペースの状態は Workspace.ini に保存されており、このファイルは上書きのみで削除はしませんので、異常終了のあとでもワークスペースは復元されます。

    起動時に削除しているのはワークスペース機能の中の「元に戻す情報」データで、Workspace フォルダに保存されています。(以下、一時ファイルと呼びます)

    一時ファイルを起動時ではなく終了時に削除する仕様にした場合ですが、異常終了したときに一時ファイルが残ったままになりますから、次に起動したときにワークスペースと「元に戻す情報」は復元されることはされます。

    が、これは異常終了する直前の状態ではなく、"前回の正常終了時の状態" です。

    つまり、何かしら編集・保存を行ったあとに異常終了してしまうと、途中まで正常に保存できていた箇所もすべて消えて "前回の正常終了時" の状態に戻ってしまうので都合が悪いというわけです。

    "前回の正常終了時" のデータを復旧の目的で保存しておきたいとなると、Mery 側で対応するよりはバックアップソフトで Workspace フォルダと Workspace.ini を監視してバックアップを取るほうが良いかと思います。

    異常終了時からの復旧という観点から Mery 側でできそうなこととしては、異常終了をキャッチして直前にワークスペースをどこかに書き出す、なんてことができれば良さそうですが…。

    エラーの内容によっては書き出しすらできないこともありそうですし、タスクマネージャーからの強制終了などは拾えないですし信頼性は低いですね ^^;

    それか、定期的にワークスペースを別のフォルダに書き出すような仕組みを用意しておいて、異常終了のときは自分でそのフォルダからデータを復旧してくださいね、みたいなかたちであれば可能かと思います。

    自動保存と機能が若干かぶってしまいますが、自動保存のワークスペース版みたいな感じですかね。

    うーん、異常終了時の対応、難しいですね… ^^;

     |  Kuro  |  返信
  3. 私の場合、相変わらずマクロのテスト中に「無限ループ地獄 → タスクキル」することが多いので、ワークスペース機能にいつも助けてもらっています。

    「ファイルを開いたとき」や「ファイルを閉じたとき」にも Workspace.ini を更新すればよいのでは? とおもわなくもないですが、エディタを閉じたときや Mery を終了したときに「ファイルを閉じたとき」のイベントと衝突したりするのかしら? :(

     |  sukemaru  |  返信
  4. > おそらく、すべて未保存で「無題*」な状態だったのではないでしょうか?

    あっ、まさしくその通りです。
    「元に戻す情報を保持」機能が便利すぎて、一時メモを保存することがほぼ皆無となってしまいました…^^;

    > "前回の正常終了時" のデータを復旧の目的で保存しておきたいとなると、Mery 側で対応するよりはバックアップソフトで Workspace フォルダと Workspace.ini を監視してバックアップを取るほうが良いかと思います。

    目的としては「前回の終了時を復元したい」というよりも「できるだけ直近の履歴を復元したい」ですね。
    「前回の終了時」と言ったのは、「新たに別の仕組みを作るよりも、ある程度は軽微な変更で実現できるのかな?」と勝手に推測したためです。これは残念ながら副作用があるようなので、ちょっとダメそうですが。。。

    > それか、定期的にワークスペースを別のフォルダに書き出すような仕組みを用意しておいて、異常終了のときは自分でそのフォルダからデータを復旧してくださいね、みたいなかたちであれば可能かと思います。

    やはり定期的な書き出しが対策として有効っぽいですよね。

    例えば、定期書き出しの一時ファイルを復旧用と見なして別フォルダに書き出しておき、本来の終了時書き出しの一時ファイルが出来上がったタイミングで消してしまう、というのはどうでしょうか?

    それなら正常に終了した際には、終了時書き出しの一時ファイルだけが残り、異常終了時には定期書き出しの一時ファイルが残っているので、異常終了したんだという判別はつくかと思います。

    ただそれでも問題が残るのは、

    > つまり、何かしら編集・保存を行ったあとに異常終了してしまうと、途中まで正常に保存できていた箇所もすべて消えて "前回の正常終了時" の状態に戻ってしまうので都合が悪いというわけです。

    ですね…。

    「無題*」なタブに関してはそもそもファイル保存していないので、少し状態が戻ってしまっても「ある程度復旧されたー!やったー!」と思えます。
    しかし、既に保存されているファイルだと Kuro さんが仰っているように都合が悪いことがありそうですね。

    保存済みファイルと、定期書き出しの一時ファイルとで、どちらの編集が最新のものかを判別できればよさそうなんですけどね。
    それなら、保存済みファイルの方が最新の場合にダイアログでワークスペース復元の確認をするとか、ファイルを読み込み直すとか、何らかの対策は取れそうな気がします。

     |  yuko  |  返信
  5. >> sukemaru さん
    ご意見ありがとうございます。

    > 「ファイルを開いたとき」や「ファイルを閉じたとき」にも Workspace.ini を更新すればよいのでは?

    Mery では基本的に設定ファイルはメモリ上で管理しており、終了時に書き出しという仕組みで動作速度を高速化しています。

    もちろんそういったタイミングで Workspace.ini を書き出すことも技術的には可能ですが、HDD や USB メモリへの設定ファイルの保存は負荷が大きいですからなるべく避けたいです。

    ファイルを閉じたときになぜか HDD がスピンアップしちゃうとイヤでしょ…? ^^;

    >> yuko さん
    なるほど。そもそも、ワークスペース機能は元に戻す情報を保持できるだけであって、保存の操作が不要なメモ的な用途というのは考慮していませんからね。

    そういうときはプロ生ちゃん付箋を ^^

    > 目的としては「前回の終了時を復元したい」というよりも「できるだけ直近の履歴を復元したい」ですね。

    [自動保存] の機能を使えば「無題*」のファイルも自動的に保存されていきますが、これではだめでしょうか?

    > 保存済みファイルと、定期書き出しの一時ファイルとで、どちらの編集が最新のものかを判別できればよさそうなんですけどね。

    実は、その機能はすでに実装されています ^^; Workspace.ini にファイルのタイムスタンプも含めて記録されていますので、一時ファイルのほうが古い場合は確認ダイアログが表示されるはずです。

    しかし、どちらかというとすべて「無題*」でメモ的に使っている状況よりも、普通にワークスペース機能として使用していただいているケースのほうが多いと思いますので、なるべく確認ダイアログを出さない仕組みということで現在の仕様とさせていただいております。

    定期的にワークスペースを別のフォルダに保存して異常終了時に備える機能ということで、そういった機能はあると便利かもしれませんね。

    ご意見は今後の開発の参考にさせていただきたいと思います。

     |  Kuro  |  返信
  6. > そもそも、ワークスペース機能は元に戻す情報を保持できるだけであって、保存の操作が不要なメモ的な用途というのは考慮していませんからね。

    ですよね。。。元に戻す機能があまりにも便利なので、ついつい甘えて付箋メモ的に使ってしまいます^^;

    > 実は、その機能はすでに実装されています ^^;

    おおー、そうだったんですね。知らなかったとはいえ、失礼しました。流石です。

    > [自動保存] の機能を使えば「無題*」のファイルも自動的に保存されていきますが、これではだめでしょうか?

    確かに異常終了対策としては十分有効なのですが、どうしても「無題-*」なファイルが増えすぎてしまうのと、編集中ファイルを別フォルダにずっと保存しておきたくないんですよね… (タスクスケジューラとかで定期的に消せばいい話なので、ただのわがままですね…^^;)

    > 定期的にワークスペースを別のフォルダに保存して異常終了時に備える機能ということで、そういった機能はあると便利かもしれませんね。

    ですねー。
    夏バテを乗り切れたときにでも、ご検討いただければ嬉しいです。

     |  yuko  |  返信
  7. ご返信、ありがとうございます。

    > もちろんそういったタイミングで Workspace.ini を書き出すことも技術的には可能ですが、HDD や USB メモリへの設定ファイルの保存は負荷が大きいですからなるべく避けたいです。
    > ファイルを閉じたときになぜか HDD がスピンアップしちゃうとイヤでしょ…? ^^;
    現状でも「ファイルを閉じたとき」には Mery.his の書き込みがあるので、INI の上書きも問題ないのでは? とおもったもので。
    ディスク I/O の頻度を気にする環境のことは失念してました。 :|

    > 定期的にワークスペースを別のフォルダに保存して異常終了時に備える機能
    継続的に適用できる方法(オプションまたは隠しオプション的なスイッチ)とともに、任意のタイミングで「セッションを保存」できるような方法もご検討いただければとおもいます。

    e.g. 「フォントサイズをリセット」のように、「ポップアップメニューの設定」や「ショートカットキー設定」に「現在のセッションを保存」コマンドを仕込む

    「無限ループするようないい加減なコード書くな!」という話ですよね… すみません。 :(

     |  sukemaru  |  返信
  8. > 現状でも「ファイルを閉じたとき」には Mery.his の書き込みがあるので、INI の上書きも問題ないのでは? とおもったもので。

    確かに、his 書き出しでも HDD スピンアップしちゃいますね… ^^;

    Workspace.ini の場合は「元に戻す情報」とセットでの書き出しになりますから。「元に戻す情報」は変更が加わるたびに変更箇所をまるまる記録していきますからかなりのサイズになります。

    一時ファイルに書き出すときに ZIP 圧縮してファイルサイズを小さくしていますが結構負荷がかかるので、終了時にとりあえず Mery の画面を隠したあと、裏でゴリゴリ圧縮したりしてます (w

    あまり頻繁に発動させるものではないなと…。

    > 継続的に適用できる方法(オプションまたは隠しオプション的なスイッチ)とともに、任意のタイミングで「セッションを保存」できるような方法もご検討いただければとおもいます。

    ワークスペースを任意のタイミングで保存・読み込みできるような機能はあっても良さそうですが、その場合は「元に戻す情報」は保持できませんね。

    トピックのテーマが異常終了時に備えて「元に戻す情報」を復元したいという内容なので、今回はとりあえず、そのご要望は保留とさせてください。

     |  Kuro  |  返信
スポンサーリンク