Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

自動バックアップ機能の実装 #214

Open
kobake opened this issue Jul 5, 2018 · 25 comments
Open

自動バックアップ機能の実装 #214

kobake opened this issue Jul 5, 2018 · 25 comments
Labels
enhancement ■機能追加

Comments

@kobake
Copy link
Member

kobake commented Jul 5, 2018

明示的な「保存」操作を行わなくても定期的(数秒~数十秒おき)に自動バックアップを行う。
異常終了を検出したら、次回起動時に復元の確認ダイアログを表示し、バックアップからの復元を促す。
異常終了は本来起こって欲しくはないが、万が一のための救済策が欲しい。

ちなみにさっき Google Docs 編集中に Chrome が落ちましたが自動バックアップ機能によりほとんど情報失わなくて助かりました……(´Д`;)

簡単な実装にはならないと思うので、対応は次回リリースの後に回しても良いが、いつかは実装したい。

@kobake kobake added the enhancement ■機能追加 label Jul 5, 2018
@KENCHjp
Copy link
Member

KENCHjp commented Jul 5, 2018

でっかいテキストファイルとかって、最初にコピーつくったりするとオーバーヘッドが大きいので、
一旦ジャーナルっぽいのを作成しておいて、保存の時に、元をコピーしてから、ジャーナル反映して、元を消して、コピーを元と入れ替えるとかしないとだめかなと・・・

@kobake
Copy link
Member Author

kobake commented Jul 5, 2018

そそ、いかに自動バックアップの負荷を感じさせないかが要になると思います

@KENCHjp
Copy link
Member

KENCHjp commented Jul 5, 2018

よくあるのは、アンドウ情報を持っておいて、最後に反映させるって感じですが、修正が多い場合には、
全体のファイルの更新した情報を取っておいて、同じ場所を何度も修正した場合は、後側で上書きして保存しておくって感じですかねぇ。

@berryzplus
Copy link
Contributor

クラッシュからの復元対策、欲しいです。

https://github.com/sakura-editor/sakura-editor.github.io/blob/master/help/HLP000145.html
共通設定 『バックアップ』プロパティ

既にあるバックアップ機能は、定時保存でファイルがたくさんできていきます。
欲しいのはGoogle Chromeや最近のExcelにある作業状態の復元なんですよね。

@kobake
Copy link
Member Author

kobake commented Jul 5, 2018

既にあるバックアップ機能は、定時保存でファイルがたくさんできていきます。

これって「定時保存」でしたっけ?
この機能では、ユーザの明示的な「保存」操作時にバックアップが作られるという認識でした。

@kobake
Copy link
Member Author

kobake commented Jul 5, 2018

自動バックアップの実現方法については、方式を独自にあみだすことは考えていなくて、

まずは既存プロダクトの手法を調べる→真似できそうなものが見つかれば真似する→見つからなければその時点から独自方式を検討する、ということを考えています。車輪の再発明は避けたいので。

@berryzplus
Copy link
Contributor

自動じゃなかったんですね。

使える機能の活用には賛成です。
車輪の再発明については思うところあります。
既にある再発明を許容するかとか。
くわしくは具体的な再利用候補が見つかった時に話すのがいいと思っています。

@KENCHjp
Copy link
Member

KENCHjp commented Jul 6, 2018

>くわしくは具体的な再利用候補が見つかった時に話すのがいいと思っています。

ですねー。
シャドーコピーとかうまく使うとロジックで何とかしなくてもなんとかなるのかなとか、思ったり。

@KENCHjp
Copy link
Member

KENCHjp commented Jul 6, 2018

Atom
https://loumo.jp/wp/archive/20151218120001/
定期的に単に保存してる?ファイルでかいと毎度フリーズするのか、それともマルチスレッドとかで保存するのかな・・・

Macのテキストエディット(TextEdit.app)も単に数秒おきに別フォルダに保存してるみたい。。。
http://inforati.jp/apple/mac-tips-techniques/application-hints/how-to-configure-auto-save-function-of-mac-textedit-app.html

秀丸君は細かい指定が出来そうですが結局単にファイル保存してるもよう。
http://www.wasabi3.com/2013/05/hidemaru_jidouhozon/

オートセーブ( Mac の自動保存機能)での復元方法
http://tokyo.secret.jp/macs/version-1.html

テキストエディタ界隈では、VMwareのような差分情報を作っておいて最後にマージなんてリッチなことは流行ってないのかな。。。
https://www.climb.co.jp/blog_vmware/vmware-5612

@KageShiron
Copy link
Member

最近のSSDの書き込みは100MB/sぐらいはいきますからね。差分取るより書き込んじゃった方が早そう。

Node.jsやストアアプリなどでは非同期IOが基本なので、Atomとかはそうしてるでしょう。非同期関数の前にawaitとつけるだけとはいい時代になったものです

await fs.writeFile("filename.txt","data");

@kobake
Copy link
Member Author

kobake commented Jul 7, 2018

サクラエディタ本体のコード量が多く、どういうケースで異常終了するかカバーしきれないと考えていて、別途ファイル保存専用エージェントみたいなコンパクトなサービスプロセス(コンパクトなのでバグも混入しにくい)を用意して、そのサービスに対して保存要求を投げるようにすると非同期保存が可能になるし、サクラエディタ本体が落ちてもエージェント側が生き残って復旧可能性高められそうかなーとか考えています。

先々の対応なので今の時点では単なる妄想なんですけど。時期が来たらもう少し真面目に考えます。

@berryzplus
Copy link
Contributor

管理プロセス(CControlProcess)に要求を投げつけて、
管理プロセス側で起こしたスレッドに実動作させる方式はどうですかね。

「○○専用エージェント」という概念は既にサクラエディタ内に多数含まれている認識なので、
これらを管理プロセス内サブスレッドで走らせる方式にするイメージです。

いま時点ではexeを増やしたり、レジストリにサービスを登録したり、ってのにはやや抵抗ありです。

await、いいですねぇ・・・

@KENCHjp
Copy link
Member

KENCHjp commented Jul 7, 2018

管理プロセス(CControlProcess)に要求を投げつけて、

プロセスとクラスの構造ってどっかにあるんでしたっけ?
UMLチックな奴。

新規な人には俯瞰なクラス図ってあったほうがわかりやすいかなっと。
すいません、Issueと関係ない余談でした。

根本的な構造って、初代の竹さんから変わってないのかな。
そうすると初代の偉業って大きいなって今更ながら思います。

@berryzplus
Copy link
Contributor

プロセスとクラスの構造ってどっかにあるんでしたっけ?
UMLチックな奴。

visioで書かれたクラス図を昔見かけたことがある気がします。
リポジトリには入っていませんね。wikiかなぁ。
そういえばwikiの使い方が分からんくて、こないだPRで書いた説明をまだアップできてないです。

Issueと関係ない余談でした。

軽く雑談issueの様相を呈してまいりました・・・。
別issue立てて作ります? <クラス図

@kobake
Copy link
Member Author

kobake commented Jul 7, 2018

Doxygen生成のドキュメントは無くも無いですが
http://sakura-editor.sourceforge.net/doxygen2/annotated.html
たぶん求めているのはもうちょっと上流の概念図ですよね。自分はそういうのは見たことないです。

@kobake
Copy link
Member Author

kobake commented Jul 7, 2018

sakura.exe 自体が肥大化しすぎているので異常終了の条件潰しはカバーしきれない → キャッシュ&保存エージェントとして信頼度を高めた別プロセスがあると良いのでは、というのが自分の提案です。

ここでいうエージェントとかサービスとかいう言葉は広義の意味で用いたに過ぎず、今ある既存の C*Agent クラスみたいなものとは全く別レイヤーの概念です。レジストリはたぶん使わない方式になります。

@kobake
Copy link
Member Author

kobake commented Jul 7, 2018

何度か言及してますが、まだ自分的には真面目に考えてない段階です。なのでこの深掘りも雑談の範疇なのは想定内。

図はあると嬉しいですけど、誰が初版を描けるのか、またその後、図のメンテナンスをうまく続けていけるのか、ということを考えると足が重くなりますねぇ

@KENCHjp
Copy link
Member

KENCHjp commented Jul 7, 2018

図のメンテナンスをうまく続けていけるのか、ということを考えると足が重くなりますねぇ

確かに、継続したメンテを考えるとつらいですね。
ソースが肥大化していると、羅針盤というか、地図レベルの論理図みたいなのがあると、入っていきやすかったりするんですが、やっぱり作りっぱになりかねないっすもんねぇ。

お金を払う版のDelphiだとソースからUML逆生成出来たりするんですが、ソースレベルからリバースすると細かすぎて、もうソース読んだ方が早いってなったりして、、、

て探してみると、

Doxygen+Graphvizでクラス図を自動生成する
http://gomi-box.hatenablog.com/entry/20090209/1234193014

C++ リバースプラグイン
http://astah.change-vision.com/ja/feature/cpp-reverse-plugin.html

こんなのもあるんですね。
役に立つレベルのものが吐けるのかはありますが。

@KENCHjp
Copy link
Member

KENCHjp commented Jul 8, 2018

VSにあるやん(笑)
classdiagram

VSインストーラーの「個別のコンポーネント」の「クラスデザイナー」
この図が役に立つかは別問題ですが・・・

@kobake
Copy link
Member Author

kobake commented Jul 8, 2018

Doxygen+Graphvizでクラス図を自動生成する
http://gomi-box.hatenablog.com/entry/20090209/1234193014

これは以下みたいな感じで既に実現されているという認識です。(常時更新ではなく、少し前に誰かが更新してくれたやつみたいですが)
http://sakura-editor.sourceforge.net/doxygen2/classCControlProcess.html

@kobake
Copy link
Member Author

kobake commented Jul 8, 2018

VSインストーラーの「個別のコンポーネント」の「クラスデザイナー」
この図が役に立つかは別問題ですが・・・

クラス数が少なければ見る気持ちになりますが……これは……w

@KENCHjp
Copy link
Member

KENCHjp commented Jul 8, 2018

クラス数が少なければ見る気持ちになりますが……これは……w

俯瞰で見るには全く役に立たなさそうですが、ソースと連動してるので、
個々の親子関係とか、メソッドみたりとかミクロで見るツールとしては使えそうです(笑)
フリーで使えるっていいっすねぇ。Delphiにもほしい。。。

@KENCHjp
Copy link
Member

KENCHjp commented Jul 8, 2018

これは以下みたいな感じで既に実現されているという認識です。

そういうのもあったんですねぇ。
仕事こそそうですがドキュメントとソースって結局ダブルメンテにならざるを得ないので、
永遠の悩みの種ですねぇ。
ドキュメントからソース生成って常になにかがありますが、かゆいところに手をとどかそうとすると、結局ドキュメントにソースレベルの情報いっぱい入れてるオチばかりだしwww

@berryzplus
Copy link
Contributor

プロセス→メインウインドウは単純なんですけど、
エディタ側のメインウインドウ→子ウインドウ群がすごいことになってるんですよね。

自動生成のクラス図は往々にしてレイアウト調整はしてくれないので、
仮に自動生成するにしても誰かが並べ替えないといけないです。

あと、microsoft系ツールの吐くxmlはバージョンによる差異が激しい傾向にあるので、
差分管理が適切かどうか?という疑問もあります。
差分管理できないならリポジトリにいれるメリットが微妙なので、
結局メンテどうする?に戻るという。

@KENCHjp
Copy link
Member

KENCHjp commented Jul 8, 2018

あと、microsoft系ツールの吐くxmlはバージョンによる差異が激しい傾向にあるので、

なるほど結局project内に居ないのは意図してかどうかは別にしてそういう背景もありそうですね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement ■機能追加
Projects
None yet
Development

No branches or pull requests

4 participants