@mlrpadilla fragte nach dem Wiederherstellen von Dateien, wenn JMP keine Möglichkeit hat, sie zu speichern.Wie kann ich die letzte Arbeit an JMP-Dateien wiederherstellen, wenn der Computer/JMP unvermeidlich heruntergefahren wird?
Ich hatte vor einem Jahr eine ähnliche Erfahrung mit .JSL-Skripten, als mich ein Stromausfall mehrere Stunden Arbeit kostete. Ich habe ein Add-In geschrieben, um regelmäßig nach offenen JSL-Dateien zu suchen und Snapshots davon zu erstellen. Snapshots von JMP-Datentabellen werden nicht erstellt. Und es funktioniert nur unter Windows. Aber es hat mir seitdem ein paar Mal meine JSL gerettet. Es hat mich auch mindestens einmal im Stich gelassen (unten.)
FileSnapper-Add-In
Nach der Installation wird das FileSnapper-Add-In-Skript alle fünf Minuten ausgeführt (Standardeinstellung) und sucht in den geöffneten Fenstern nach geänderten Skriptfenstern. Wenn es einen findet, schnappt es sich den Text und speichert ihn.
Wenn JMP keine Möglichkeit hat, normal zu schließen, wird eine Sentinel-Datei zurückgelassen. Wenn JMP das nächste Mal startet und den Sentinel findet, öffnet JMP das FileSnapper-Dialogfeld, damit Sie sehen können, ob es einen Snapshot gibt, den Sie wiederherstellen möchten. Sie können den Dialog auch über das Add-Ins-Menü öffnen und einige Eigenschaften festlegen (wie das 5-Minuten-Intervall und die 14-tägige Aufbewahrungsfrist).
Wie es funktioniert
Um FileSnapper so unsichtbar wie möglich zu halten, verwendet es den JSL-Scheduler nicht. (Der Planer öffnet ein Fenster, und es gibt nur einen Planer, den Sie möglicherweise für etwas anderes verwenden möchten.) Stattdessen verwendet FileSnapper RunProgram, um einen regelmäßigen Weckruf zu erhalten. Es gab eine Reihe von Iterationen; die aktuelle Version verwendet CMD.EXE und das DOS warten auf Befehl in einer Schleife, um alle fünf Minuten Text an FileSnapper zurückzusenden. Wenn JMP heruntergefahren wird, signalisiert es die warten auf Ereignis, damit CMD.EXE schnell beendet wird. CMD.EXE wird auch beendet, wenn der Wächter verschwindet.
Für die Sentinel-Datei wird eine winzige JMP-Datentabelle verwendet. Die Tabelle wird gespeichert, aber auch als private Tabelle offen gehalten. Wenn eine zweite Kopie von JMP ausgeführt wird, erkennt sie, dass die Tabelle in einer anderen Kopie von JMP geöffnet ist, und (1) öffnet den Wiederherstellungsdialog nicht und (2) erstellt eine andere Sentinel-Datei. Wenn ein nicht offener Sentinel gefunden wird, werden alle nicht offenen Sentinels entfernt und der Wiederherstellungsdialog wird geöffnet. Sie sollten nur einmal aufgefordert werden, Dateien wiederherzustellen.
Das Add-In verwendet den Shutdown-Hook, um den Sentinel zu entfernen und verschiedene Dinge zu tun, um sicherzustellen, dass RunProgram beendet wird. Es können einige diagnostische show()-Aufrufe zurückbleiben, aber Sie können ihre Ausgabe normalerweise nicht sehen, weil JMP heruntergefahren wird. Sie können die Ansicht->Add-Ins verwenden, um FileSnapper zu aktivieren/deaktivieren und sie im Protokollfenster anzuzeigen.
Die Funktion backup() wird alle fünf Minuten von RunProgram aufgerufen. Backup() sucht nach verschmutzten (geänderten) Editorfenstern, vergleicht deren Inhalt mit dem letzten Mal und speichert eine Kopie, wenn sie geändert wurde. Für die Schnappschüsse wird ein spezieller Ordner unter Dokumente erstellt. Die Dateien sind als schreibgeschützt markiert, damit Sie nicht versuchen, sie zu verwenden, weil ...
Jedes Mal, wenn FileSnapper gestartet wird, untersucht es die alten Snapshot-Dateien. FileSnapper löscht still und leise alte Snapshots. Sie können steuern, wie laut das Protokoll ist, aber Sie möchten nicht, dass FileSnapper jeden Snapshot protokolliert, den es erstellt, da Sie möglicherweise alle fünf Minuten einen oder zwei Tastenanschläge verlieren und mehr Protokollaktivität es nur noch schlimmer macht.
Das Dialogfenster (nach einem Fehler oder aus dem Menü) zeigt eine Liste der neuesten bis ältesten Schnappschüsse. Sie können (1) zum Öffnen doppelklicken oder (2) zum Auswählen einfach klicken. Wenn Sie eine Datei auswählen, können Sie mit der rechten Maustaste auf die ausgewählte Datei klicken (Rechtsklick wählt NICHT aus, Mist!) und mit einer vorhandenen Datei vergleichen. Wenn Sie zwei Dateien auswählen, können Sie mit der rechten Maustaste klicken und die beiden vergleichen. Überprüfen Sie den Titel des Vergleichsfensters, um schnell zu sehen, ob die Dateien identisch sind. Mit einer vorhandenen Datei vergleichen wird nicht angezeigt; Es sucht in der Registrierung und einigen identifizierten Verzeichnissen nach einer Datei mit dem richtigen Namen. Es kann die Datei sein, mit der Sie vergleichen möchten, oder auch nicht.
Aber ich habe trotzdem etwas Arbeit verloren.
Wenn Sie ein Skript entwickeln, drücken Sie oft die Escape-Taste, um das Skript zu stoppen. FileSnapper ist ein Skript. Es scheint keine Möglichkeit zu geben, zu verhindern, dass es gelegentlich die Escape-Taste verarbeitet und genau zur falschen Zeit stoppt, um fünf Minuten später nie wieder zu laufen. Es gibt eine unausgegorene Idee in FileSnapper, einen Bericht darüber zu erstellen, dass es gestoppt wurde, aber nur, wenn fünf Minuten später eine Datentabelle geöffnet wird. In meinem Fall verwende ich Datentabellen nicht so oft, wenn ich Skripte schreibe, daher bekomme ich möglicherweise keine Benachrichtigung.
Irgendwann habe ich die Aufbewahrung auf 100 Tage und die Snapshot-Frequenz auf 30 Sekunden eingestellt. Das ist zu viel. Es gab über 10.000 Dateien und der Start von JMP konnte 30 Sekunden dauern. Wählen Sie Ihre Schmerzstufe in den Optionen des Dialogs. Drücken Sie die Speichern-Schaltfläche und schließen Sie dann das Dialogfeld.
Ich würde mir wünschen, dass dies in JMP integriert wird, und ich würde mir bessere Rückruf-Timer wünschen. Es gibt eine Menge Verbesserungen, die gemacht werden könnten (wie der Speichern-Button im Dialog kein Feedback gibt). Es könnte jemandem wirklich helfen oder auch nicht. Wenn Sie den gelegentlichen verpassten Tastendruck satt haben, können Sie es deinstallieren. Über das gleiche Menü Ansicht->Add-Ins können Sie auch die Quelle anzeigen. Dank an @Justin_Chilton für den Hinweis, wie die JSL-Fenster in einem Projekt funktionieren.
Zusatz.
Ich liebe die Umgebung wirklich Vor dem Ausführen automatisch speichern .
- Während des JSL-Debuggings kann ich sicher sein, dass der JSL-Code alle paar Minuten gespeichert wird (bei jedem Versuch, ihn zum Laufen zu bringen).
- Durch das Speichern der JSL-Dateien in der Cloud kann ich frühere Versionen des Codes abrufen – nur für den Fall, dass die letzte Version nicht in Ordnung war ...
