@mlrpadilla chiesto informazioni sul ripristino dei file quando JMP non ha la possibilità di salvarli.Come posso recuperare il lavoro più recente sui file JMP in caso di arresto inevitabile del computer/JMP?
Ho avuto un'esperienza simile un anno fa, con gli script .JSL, quando un'interruzione di corrente mi è costata diverse ore di lavoro. Ho scritto un componente aggiuntivo per cercare periodicamente i file JSL aperti e crearne degli snapshot. Non esegue lo snapshot delle tabelle di dati JMP. E funziona solo su Windows. Ma da allora mi ha salvato il mio JSL un paio di volte. Mi ha anche deluso almeno una volta (sotto).
Componente aggiuntivo FileSnapper
Dopo l'installazione, lo script del componente aggiuntivo FileSnapper viene eseguito ogni cinque minuti (impostazione predefinita) e esamina le finestre aperte per trovare le finestre di script che sono state modificate. Quando ne trova uno, prende il testo e lo salva.
Se JMP non ha la possibilità di chiudersi normalmente, viene lasciato un file sentinella. La prossima volta che JMP si avvia e trova la sentinella, JMP aprirà la finestra di dialogo FileSnapper per farti vedere se c'è uno snapshot che vuoi ripristinare. Puoi anche aprire la finestra di dialogo dal menu dei componenti aggiuntivi e impostare alcune proprietà (come l'intervallo di 5 minuti e il periodo di conservazione di 14 giorni).
Come funziona
Per mantenere FileSnapper il più invisibile possibile, non utilizza lo scheduler JSL. (Lo scheduler apre una finestra e c'è solo uno scheduler che potresti voler usare per qualcos'altro.) Invece, FileSnapper usa RunProgram per ricevere una chiamata di sveglia periodica. C'erano un certo numero di iterazioni; la versione corrente utilizza CMD.EXE e il DOS aspettare comando in un ciclo per inviare del testo a FileSnapper ogni cinque minuti. Quando JMP si spegne, segnala il aspettare evento per fare in modo che CMD.EXE si chiuda rapidamente. CMD.EXE terminerà anche se la sentinella scompare.
Una piccola tabella di dati JMP viene utilizzata per il file sentinella. La tabella viene salvata, ma viene anche mantenuta aperta come tabella privata. Se viene eseguita una seconda copia di JMP, rileva che la tabella è aperta in un'altra copia di JMP e (1) non apre la finestra di dialogo di ripristino e (2) crea un file sentinella diverso. Se viene trovata una sentinella non aperta, tutte le sentinelle non aperte vengono rimosse e viene aperta la finestra di dialogo di ripristino. Dovresti essere richiesto solo una volta per il ripristino dei file.
Il componente aggiuntivo utilizza l'hook di spegnimento per rimuovere la sentinella e fare diverse cose per assicurarsi che RunProgram termini. Potrebbero essere rimaste alcune chiamate diagnostiche show(), ma normalmente non è possibile visualizzare il loro output perché JMP si sta spegnendo. Puoi utilizzare la visualizzazione->componenti aggiuntivi per abilitare/disabilitare FileSnapper e guardarli nella finestra di registro.
La funzione backup() viene chiamata da RunProgram ogni cinque minuti. Backup() cerca le finestre dell'editor che sono sporche (modificate), confronta il loro contenuto con l'ultima volta e, se modificate, ne salva una copia. Una cartella speciale viene creata in Documenti per le istantanee. I file sono contrassegnati in sola lettura per aiutarti a non provare a usarli perché...
Ogni volta che FileSnapper si avvia, studia i vecchi file di snapshot. FileSnapper elimina silenziosamente le vecchie istantanee. Puoi controllare quanto è rumoroso il registro, ma non vuoi che FileSnapper registri ogni snapshot che crea perché potresti perdere una sequenza di tasti o due ogni cinque minuti e più attività del registro peggiorano le cose.
La finestra di dialogo (dopo un errore o dal menu) mostra un elenco delle istantanee più recenti e meno recenti. È possibile (1) fare doppio clic per aprire o (2) fare clic singolo per selezionare. Se selezioni un file, puoi fare clic con il pulsante destro del mouse sul file selezionato (il clic con il pulsante destro NON seleziona, peccato!) e confrontarlo con un file esistente. se selezioni due file, puoi fare clic con il pulsante destro del mouse e confrontare i due. Controlla il titolo della finestra di confronto per vedere rapidamente se i file sono gli stessi. Il confronto con un file esistente non viene richiesto; cerca nel registro e in alcune directory identificate un file con il nome corretto. Potrebbe essere o meno il file con cui vuoi confrontare.
Ma ho ancora perso del lavoro.
Durante lo sviluppo di uno script, spesso premi il tasto Esc per interrompere lo script. FileSnapper è uno script. Non sembra esserci alcun modo per impedirgli di elaborare occasionalmente la chiave di escape e di fermarsi al momento sbagliato, per non correre mai più cinque minuti dopo. C'è un'idea incompleta in FileSnapper per creare un rapporto che si è interrotto, ma solo se una tabella di dati viene aperta dopo cinque minuti. Nel mio caso, non utilizzo spesso le tabelle di dati quando scrivo gli script, quindi potrei non ricevere l'avviso.
A un certo punto ho impostato la conservazione su 100 giorni e la frequenza degli snapshot su 30 secondi. Questo è troppo. C'erano oltre 10.000 file e l'avvio di JMP poteva richiedere 30 secondi. Scegli il tuo livello di dolore nelle opzioni della finestra di dialogo. Premi il pulsante Salva, quindi chiudi la finestra di dialogo.
Vorrei che questo fosse integrato in JMP e mi auguro migliori timer di richiamata. Ci sono molti miglioramenti che potrebbero essere apportati (come il pulsante di salvataggio nella finestra di dialogo non fornisce alcun feedback). Potrebbe o non potrebbe effettivamente aiutare qualcuno. Se ti stanchi dell'occasionale battitura persa, puoi disinstallarlo. Lo stesso menu Visualizza->Componenti aggiuntivi ti consentirà anche di guardare la fonte. Grazie a @Justin_Chilton per sottolineare come funzionano le finestre JSL in un progetto.
Aggiungere.
Adoro l'ambientazione Salvataggio automatico prima dell'esecuzione .
- durante il debug JSL posso essere sicuro che il codice JSL viene salvato ogni pochi minuti (ad ogni prova per farlo funzionare)
- salvare i file JSL nel cloud mi permette di ottenere versioni precedenti del codice - nel caso in cui l'ultima versione non fosse OK ...
