csTimerのデータ消失対策

csTimerのデータが消えてこの記事に辿り着いた人へ。 もし多少なりとも復元できているならば、今すぐ「ファイルにエクスポート」しましょう。 私は、「サーバーからインポート」で1か月前まで巻き戻ったデータが復元できたが、その後色々試す中で「サーバーにエクスポート」をポチり、実はポチった瞬間にもデータが消えていて、サーバーのデータを空っぽにしてしまった。ファイルにエクスポートしていた3か月前までさらに巻き戻ってしまった。

csTimerとは

https://cstimer.net/

ルービックキューブ系のパズルの早解き用のタイマーアプリ。 非常に高機能。 使っている人が一番多いのではないかと思う。

1万件以上の記録を残せるし、それをグラフにして見ることもできる。 「練習の成果が出て、だいぶ速く回せるようになってきたなぁ」とできる。

そんなcsTimerのデータが消えることがある。

つらい。

ということで、対策を書いていく。

エクスポート

csTimerのデータは、サーバーではなくブラウザに保存されている。何もしないと、PCが壊れたら終わり。

左上のパネルのエクスポートボタンから、記録をサーバーやファイルに出力することができる。

単に「サーバーにエクスポート」は入力したアカウントを忘れるとアウトなので、WCAIDでログインした上でcsTimerのサーバーに保存するか、GoogleアカウントでログインしてGoogleのサーバーに保存するのが良いと思う。

ただ、サーバーにエクスポートだとデーターは上書きされる。 私のように消えた状態で上書きしてしまうと、もうそれまで。 「ファイルにエクスポート」もしておくと良い。

……と思っていたけど、下の画像を良く見ると、オートエクスポートの下に「最新でないデータをインポート」があるな。前からあったっけ? これで助かるのかもしれない。

なお、100ソルブごとに自動でエクスポートすることもできる。

どうせなら1ソルブごとにエクスポート……というか、他のウェブアプリのように全てサーバー側でデータを持ってくれと思うが、きっとサーバー代が大変なことになるのだろう。というか、100ソルブごとでも大変そう。寄附するか、広告を表示しましょう。私は寄附しました。

私は、100ソルブごとのエクスポートを有効にした上で、良い記録が出たタイミングでファイルにエクスポートもしている。

IndexedDBの消失対策

PCが壊れてデータが飛ぶのは分かるが、PCもブラウザも壊れたわけではないのに、データが消えることがある。 その理由の考察と、対策になるかもしれない、ちょっとIT技術的な話。

csTimerはデータをブラウザのIndexedDBというものに保存している。

developer.mozilla.org

「データを永続的に保存する手段です」と書かれているのに、PCの空き容量が不足気味になったりすると、実は消されるらしい。 PCが壊れたわけでもないのに消えるのは、たぶんこれが原因。

消されないためにはどうしたら良いか? navigator.storage.persist() を呼び出せば良い。

developer.mozilla.org

Google Chromeの場合は、Ctrl+Shit+J で開発者ツールを開き、

navigator.storage.persist().then(console.log)

を打ち込む。これで true が出てくればOK。

なお、この開発者ツールで何かをするというのは、危険な操作である。 (この記事のような)誰が書いているかも分からないサイトに書かれたことに従って、例えば「Google検索結果の画面で開発者ツールを開いてこれを打ち込むと面白いことになるよ」に乗せられたりすると、最悪Googleアカウントが乗っ取られる。 内容を理解した上で実行しましょう。

本来は、これを実行した時点で、「通知を許可しますか?」みたいな感じのダイアログが出てきて、そこで許可をするという流れらしい。 しかし、Google Chromeの場合はダイアログが出ない。 true になるなら良いのだが、 false になることがある。

その条件が非常に複雑。 しかも、その人がどの程度そのサイトを使っているかもあったりして、人によって異なる。

qiita.com

私の場合は、 https://cstimer.net/ で通知を許可したら true になった。 https://cstimer.net/ は通知を送らないので、サイトの設定から許可をする。 通知を送らないサイトで通知を許可するというのも謎だが、Google Chromeの謎のレーティングを上げるためなので仕方がない。

あとは、Firefoxだと「永続ストレージへのデータ保存を許可しますか?」のダイアログが出てくる。csTimerが navigator.storage.persist() を呼び出しているらしく、csTimerを開くだけで良い。 開発者ツールでの操作は不要。 Firefoxを使うというのも一つの手だろう。

これで本当に消えないようになるのかは分からない。 Google Chromeで2週間前くらいにちょくちょく消えていて、この操作をしてからは消えていないけど。 もし消えることがあったら追記する。