@mlrpadilla preguntó sobre la recuperación de archivos cuando JMP no tiene la oportunidad de guardarlos.¿Cómo recupero el trabajo más reciente en archivos JMP en casos de apagado inevitable de la computadora/JMP?
Tuve una experiencia similar hace un año, con scripts .JSL, cuando un corte de energía me costó varias horas de trabajo. Escribí un complemento para buscar periódicamente archivos JSL abiertos y hacer instantáneas de ellos. No toma instantáneas de tablas de datos JMP. Y solo funciona en Windows. Pero me ha guardado mi JSL un par de veces desde entonces. También me ha fallado al menos una vez (abajo).
Complemento FileSnapper
Después de la instalación, la secuencia de comandos del complemento FileSnapper se ejecuta cada cinco minutos (predeterminado) y busca en las ventanas abiertas las ventanas de secuencias de comandos que se han modificado. Cuando encuentra uno, toma el texto y lo guarda.
Si JMP no tiene la oportunidad de cerrarse normalmente, se deja un archivo centinela. La próxima vez que JMP se inicie y encuentre el centinela, JMP abrirá el cuadro de diálogo FileSnapper para que pueda ver si hay una instantánea que desea restaurar. También puede abrir el cuadro de diálogo desde el menú de complementos y establecer algunas propiedades (como el intervalo de 5 minutos y el período de retención de 14 días).
Cómo funciona
Para mantener FileSnapper lo más invisible posible, no utiliza el programador JSL. (El programador abre una ventana y solo hay un programador que quizás desee usar para otra cosa). En cambio, FileSnapper usa RunProgram para recibir una llamada de atención periódica. Hubo una serie de iteraciones; la versión actual usa CMD.EXE y DOS esperar comando en un bucle para enviar un texto a FileSnapper cada cinco minutos. Cuando JMP se apaga, indica el esperar evento para hacer que CMD.EXE salga rápidamente. CMD.EXE también terminará si el centinela desaparece.
Se utiliza una pequeña tabla de datos JMP para el archivo centinela. La mesa se guarda, pero también se mantiene abierta como mesa privada. Si se ejecuta una segunda copia de JMP, detecta que la tabla está abierta en otra copia de JMP y (1) no abre el cuadro de diálogo de recuperación y (2) crea un archivo centinela diferente. Si se encuentra algún centinela no abierto, todos los centinelas no abiertos se eliminan y se abre el cuadro de diálogo de recuperación. Solo debería recibir un aviso una vez para recuperar archivos.
El complemento usa el enlace de apagado para eliminar el centinela y hacer varias cosas para asegurarse de que RunProgram finalice. Es posible que queden algunas llamadas show() de diagnóstico, pero normalmente no puede ver su salida porque JMP se está cerrando. Puede usar la vista->complementos para habilitar/deshabilitar FileSnapper y verlos en la ventana de registro.
La función de copia de seguridad () se llama desde RunProgram cada cinco minutos. Backup() busca las ventanas del editor que están sucias (modificadas), compara su contenido con la última vez y, si se modifica, guarda una copia. Se crea una carpeta especial en Documentos para las instantáneas. Los archivos están marcados como de solo lectura para ayudarlo a no intentar usarlos porque...
Cada vez que se inicia FileSnapper, estudia los archivos de instantáneas anteriores. FileSnapper elimina silenciosamente las instantáneas antiguas. Puede controlar qué tan ruidoso es el registro, pero no quiere que FileSnapper registre cada instantánea que hace porque puede perder una pulsación de tecla o dos cada cinco minutos, y más actividad de registro solo empeora las cosas.
La ventana de diálogo (después de una falla o desde el menú) muestra una lista de las instantáneas más recientes a las más antiguas. Puede (1) hacer doble clic para abrir o (2) hacer un solo clic para seleccionar. Si selecciona un archivo, puede hacer clic derecho en el archivo seleccionado (el clic derecho NO selecciona, ¡qué fastidio!) y compararlo con un archivo existente. si selecciona dos archivos, puede hacer clic derecho y comparar los dos. Verifique el título de la ventana de comparación para ver rápidamente si los archivos son iguales. Comparar con un archivo existente no solicita; busca en el registro y en algunos directorios identificados un archivo con el nombre correcto. Puede o no ser el archivo con el que desea comparar.
Pero todavía perdí algo de trabajo.
Cuando está desarrollando una secuencia de comandos, a menudo presionará escape para detener la secuencia de comandos. FileSnapper es un script. Parece que no hay forma de evitar que procese ocasionalmente la tecla de escape y se detenga en el momento equivocado, para no volver a ejecutarse cinco minutos después. Hay una idea a medias en FileSnapper para hacer un informe de que se detuvo, pero solo si se abre una tabla de datos después de cinco minutos. En mi caso, no uso tablas de datos con tanta frecuencia cuando escribo scripts, por lo que es posible que no reciba el aviso.
En un momento establecí la retención en 100 días y la frecuencia de las instantáneas en 30 segundos. Esto es demasiado. Había más de 10 000 archivos y el inicio de JMP podía demorar 30 segundos. Elija su nivel de dolor en las opciones del cuadro de diálogo. Presione el botón Guardar, luego cierre el cuadro de diálogo.
Desearía que esto estuviera integrado en JMP, y desearía mejores temporizadores de devolución de llamada. Hay muchas mejoras que se podrían hacer (como el botón Guardar en el cuadro de diálogo que no da ninguna respuesta). Podría o no ayudar a alguien. Si te cansas de las pulsaciones de teclas perdidas ocasionales, puedes desinstalarlo. El mismo menú de vista->complementos también le permitirá ver la fuente. Gracias a @Justin_Chilton por señalar cómo funcionan las ventanas JSL en un proyecto.
Complemento
Realmente me encanta el entorno Autoguardado antes de ejecutar .
- durante la depuración de JSL, puedo estar seguro de que el código JSL se guarda cada pocos minutos (con cada prueba para ejecutarlo)
- guardar los archivos JSL en la nube me permite obtener versiones anteriores del código - en caso de que la última versión no estuviera bien...
