@mlrpadilla interrogé sur la récupération de fichiers lorsque JMP n'a pas la possibilité de les enregistrer.Comment puis-je récupérer le travail le plus récent sur les fichiers JMP en cas d'arrêt inévitable de l'ordinateur/JMP ?
J'ai eu une expérience similaire il y a un an, avec des scripts .JSL, lorsqu'une panne de courant m'a coûté plusieurs heures de travail. J'ai écrit un complément pour rechercher périodiquement des fichiers JSL ouverts et en faire des instantanés. Il n'effectue pas d'instantané des tables de données JMP. Et cela ne fonctionne que sur Windows. Mais cela m'a sauvé mon JSL plusieurs fois depuis. Cela m'a également échoué au moins une fois (ci-dessous.)
Complément FileSnapper
Après l'installation, le script du complément FileSnapper s'exécute toutes les cinq minutes (par défaut) et examine les fenêtres ouvertes pour rechercher les fenêtres de script qui ont été modifiées. Lorsqu'il en trouve un, il saisit le texte et l'enregistre.
Si JMP n'a pas la possibilité de se fermer normalement, un fichier sentinelle est conservé. La prochaine fois que JMP se lancera et trouvera la sentinelle, JMP ouvrira la boîte de dialogue FileSnapper pour vous permettre de voir s'il existe un instantané que vous souhaitez restaurer. Vous pouvez également ouvrir la boîte de dialogue à partir du menu des compléments et définir quelques propriétés (comme l'intervalle de 5 minutes et la période de rétention de 14 jours.)
Comment ça fonctionne
Pour garder FileSnapper aussi invisible que possible, il n'utilise pas le planificateur JSL. (Le planificateur ouvre une fenêtre et il n'y a qu'un seul planificateur que vous voudrez peut-être utiliser pour autre chose.) Au lieu de cela, FileSnapper utilise RunProgram pour obtenir un appel de réveil périodique. Il y avait un certain nombre d'itérations; la version actuelle utilise CMD.EXE et le DOS attendre commande dans une boucle pour renvoyer du texte à FileSnapper toutes les cinq minutes. Lorsque JMP s'arrête, il signale au attendre événement pour que CMD.EXE se ferme rapidement. CMD.EXE se terminera également si la sentinelle disparaît.
Une petite table de données JMP est utilisée pour le fichier sentinelle. La table est enregistrée, mais également maintenue ouverte en tant que table privée. Si une deuxième copie de JMP s'exécute, elle détecte que la table est ouverte dans une autre copie de JMP et (1) n'ouvre pas la boîte de dialogue de récupération et (2) crée un fichier sentinelle différent. Si une sentinelle non ouverte est trouvée, toutes les sentinelles non ouvertes sont supprimées et la boîte de dialogue de récupération s'ouvre. Vous ne devriez être invité qu'une seule fois à récupérer des fichiers.
Le complément utilise le crochet d'arrêt pour supprimer la sentinelle et faire plusieurs choses pour s'assurer que RunProgram se termine. Il peut rester quelques appels de diagnostic show(), mais vous ne pouvez normalement pas voir leur sortie car JMP est en cours de fermeture. Vous pouvez utiliser les add-ins view-> pour activer/désactiver FileSnapper et les regarder dans la fenêtre du journal.
La fonction backup() est appelée depuis RunProgram toutes les cinq minutes. Backup () recherche les fenêtres d'éditeur qui sont sales (modifiées), compare leur contenu à la dernière fois et, en cas de modification, enregistre une copie. Un dossier spécial est créé sous Documents pour les instantanés. Les fichiers sont marqués en lecture seule pour vous aider à ne pas essayer de les utiliser car...
Chaque fois que FileSnapper démarre, il étudie les anciens fichiers d'instantanés. FileSnapper supprime discrètement les anciens instantanés. Vous pouvez contrôler le bruit du journal, mais vous ne voulez pas que FileSnapper journalise chaque instantané qu'il crée, car vous risquez de perdre une ou deux frappes toutes les cinq minutes, et plus d'activité de journal ne fait qu'empirer les choses.
La fenêtre de dialogue (après un échec ou depuis le menu) affiche une liste des instantanés les plus récents aux plus anciens. Vous pouvez (1) double-cliquer pour ouvrir, ou (2) un simple clic pour sélectionner. Si vous sélectionnez un fichier, vous pouvez cliquer avec le bouton droit sur le fichier sélectionné (le clic droit ne sélectionne PAS, dommage !) et le comparer à un fichier existant. si vous sélectionnez deux fichiers, vous pouvez cliquer avec le bouton droit et comparer les deux. Vérifiez le titre de la fenêtre de comparaison pour voir rapidement si les fichiers sont identiques. Comparer à un fichier existant ne demande pas ; il recherche dans le registre et dans certains répertoires identifiés un fichier du bon nom. Il peut s'agir ou non du fichier auquel vous souhaitez effectuer la comparaison.
Mais j'ai quand même perdu du travail.
Lorsque vous développez un script, vous appuyez souvent sur Échap pour arrêter le script. FileSnapper est un script. Il semble n'y avoir aucun moyen de l'empêcher de traiter occasionnellement la touche d'échappement et de s'arrêter au mauvais moment, pour ne plus jamais s'exécuter cinq minutes plus tard. Il y a une idée à moitié cuite dans FileSnapper pour faire un rapport qu'il s'est arrêté, mais seulement si une table de données est ouverte après cinq minutes plus tard. Dans mon cas, je n'utilise pas souvent les tables de données lorsque j'écris des scripts, donc je ne reçois peut-être pas l'avis.
À un moment donné, j'ai défini la rétention sur 100 jours et la fréquence des instantanés sur 30 secondes. C'est trop. Il y avait plus de 10 000 fichiers et le démarrage de JMP pouvait prendre 30 secondes. Choisissez votre niveau de douleur dans les options de la boîte de dialogue. Appuyez sur le bouton Enregistrer, puis fermez la boîte de dialogue.
Je souhaiterais que cela soit intégré à JMP, et je souhaiterais de meilleurs minuteurs de rappel. Il y a beaucoup d'améliorations qui pourraient être apportées (comme le bouton Enregistrer dans la boîte de dialogue ne donne aucun retour). Cela pourrait ou non aider quelqu'un. Si vous en avez assez des frappes manquées occasionnelles, vous pouvez le désinstaller. Le même menu affichage-> compléments vous permettra également de regarder la source. Grâce à @Justin_Chilton pour indiquer le fonctionnement des fenêtres JSL dans un projet.
Ajouter à.
J'aime vraiment le cadre Sauvegarde automatique avant exécution .
- pendant le débogage JSL, je peux être sûr que le code JSL est enregistré toutes les quelques minutes (à chaque essai pour le faire fonctionner)
- enregistrer les fichiers JSL dans le cloud me permet d'obtenir les versions précédentes du code - juste au cas où la dernière version ne serait pas OK...
