Reminder

Progetto: Nodo al fazzoletto

Un giorno mi è girato di scrivere un programma che mi ricordasse le scadenze o eventi vari del tipo 'Pagare bollo auto',  'Rata del condominio',  'Compleanno di...', di quelli cioè che richiederebbero il classico nodo al fazzoletto, che noti quando fai un gesto abituale, che sciogli solo se hai fatto ciò che dovevi ricordare, altrimenti lo lasci, e te lo ritrovi alla prossima volta che fai quel gesto abituale. Quel giorno ero in vena di esoticismo informatichese, perciò l'ho chiamato Reminder
Il programma prevede di essere eseguito alla partenza di Windows, mediante inserimento nella cartella "Esecuzione automatica" del menu di avvio. La partenza di Windows, costituisce quindi il gesto abituale citato sopra.

Non so se quello che va bene per me può essere utile anche per voi, io per esempio non ho inserito alcuna gestione di appuntamenti o impegni nell'ambito della giornata, sia perché per questi esistono ottimi programmi, con tanto di funzioni di allarme, ma anche perché non in linea col concetto del nodo al fazzoletto.
Comunque lo metto a disposizione di chi avesse le mie stesse esigenze:

Reminder.zip     1.41 MB - Reminder - Ver.1.13
Note: La versione 1.13 ha corretto un problema in Windows 7, quando si mette un carattere sulla command-line, per evitare l'apertura della finestra se non ci sono eventi.
La versione 1.12 ha corretto un problema di ripristino, per la successiva visualizzazione, degli eventi con data senza anno, dopo circa 6 mesi dalla precedente gestione.


Funzioni

Gli eventi da ricordare sono inseriti nel file Reminder.txt, un semplice file di testo creato e modificato dall'utente con la funzione [Modifica] integrata nel programma stesso (o con un qualsiasi editor di testo) e contenente una riga per evento, nel formato base:

DATA-1 Nota o commento 1
DATA-2 Nota o commento 2
ecc...

All'esecuzione del programma, le righe la cui data rientra in un periodo stabilito attraverso parametri, vengono mostrate a video, e scattano eventuali funzionalità addizionali discusse oltre. Se nessuna riga supera il filtro del periodo, il programma può essere impostato per terminare senza produrre alcun output, oppure attendere le azioni dell'utente.
Il periodo assunto in mancanza di parametri, provoca la segnalazione per il solo giorno dell'evento. Per estendere il periodo di segnalazione sono disponibili i seguenti parametri:

ANTICIPO     Quanti giorni prima della data, iniziare a segnalare l'evento.
RITARDO     Quanto prolungare la segnalazione oltre la data.
SOLLECITO     Quando sollecitare un evento già visto (vedi "Gestione eventi")

Questi parametri sono specificati all'interno del file, normalmente sulla prima riga e posti fra parentesi, ripetibili su righe successive per cambiare valori per gli eventi che seguono, raggruppandoli perciò per caratteristiche.
Un esempio di file potrebbe essere il seguente:

    ; Ogni riga che inizia con punto e virgola è considerata un commento.
    (Anticipo=3 giorni, RITARDO=5) parametri su righe con parentesi
    15/2/2008 Prima rata condominio
    15 06 2008 Seconda rata condominio
    Gennaio Abbonamento TV
    Settembre Bollo auto
    (anticipo 1)
    13 Apr. Compleanno di Enzo

Come si vede, le parole chiave ANTICIPO e RITARDO possono essere specificate sulla stessa riga o su righe indipendenti, in maiuscolo, minuscolo o misto, seguite dal numero di giorni, con o senza l'uso di uguale, duepunti o spazio come separatori. Altre parole, come la parola 'giorni' nell'esempio, possono essere inserite per migliorare la leggibilità del file, e sono ignorate dal programma.

Nelle righe di esempio si nota che le date, oltre ad avere un formato piuttosto libero (uso di barra o spazio per separare giorno mese anno, forma numerica o letterale del mese, completa o abbreviata), presentano anche caratteristiche diverse, con le seguenti conseguenze:

  • se la data porta anche l'anno, l'evento vale solo in tale anno.
  • se l'anno non è specificato, l'evento vale tutti gli anni.
  • se è specificato solo il mese, il giorno sarà quello finale del mese, e per quell'evento è assunto un anticipo pari ai giorni di quel mese. In altre parole, l'evento viene segnalato dal primo del mese, con scadenza all'ultimo del mese più l'eventuale ritardo. Questa data con il solo mese, richiede l'uso della forma letterale (intera o abbreviata) per evitare ambiguità con il giorno.
  • Dalla versione 1.8 è anche possibile produrre eventi ad una certa data di ogni mese, inserendo un asterisco o la parola ognimese, al posto del mese.
  • Dalla versione 1.10 è inoltre possibile definire eventi con date mobili legate alla Pasqua, specificando, invece della data, la parola Pasqua o Pasqua+N o Pasqua-N, dove N è il numero di giorni di distanza dalla Pasqua (per esempio: Pasqua+1 è il lunedì dell’Angelo, Pasqua+49 la Pentecoste, Pasqua-46 le Ceneri).
  • Sempre dalla versione 1.10, possono essere definiti anche eventi mobili legati ad un giorno della settimana, specificando il giorno nella forma N°G, dove N indica il numero ordinale (da 1 a 5) di un certo giorno della settimana nell’ambito del mese, G specifica quale giorno della settimana, secondo la convenzione 1=Lunedì, 2=Martedì....7=Domenica, seguito poi dal mese, nella forma numerica o letterale. Un esempio chiarisce meglio il concetto: Il passaggio all’orario estivo, avviene l’ultima domenica di Marzo, quindi 5°7/3 o 5°7 Marzo. In questo caso, trattandosi dell’ultima domenica, potrebbe essere sia la quarta che la quinta, secondo il mese e l’anno, ma specificando 5, si è certi che verrà sempre interpretata come l’ultima, anche qualora quel mese di domeniche ne avesse solo 4.
  • Per eventi che scadono ad anni alterni, come per esempio il collaudo dell´auto, è possibile specificare come anno, la parola AnniPari o AnniDispari.
  • Dalla versione 1.11, viene eseguito un controllo di coerenza delle date, segnalando una eventuale data invalida, in colore bleu, in testa a tutti gli eventi. Fa eccezione la data del 29 febbraio senza la specifica dell’anno, che sarà considerata valida anche negli anni non bisestili, attribuendone in tal caso l’evento al giorno 28.

E' anche da notare il fatto che gli eventi possono essere inseriti nel file in ordine cronologico sparso, per permettere raggruppamenti più basati sulla tipologia che sulla data. Al momento della segnalazione, in caso di eventi multipli, questi verranno comunque presentati in ordine di data.

Gestione Eventi

L'estensione del periodo di visibilità di un evento, mediante i parametri di anticipo e ritardo, può produrre una fastidiosa segnalazione di eventi ormai già risolti.
Ad evitare questo inconveniente provvede la Gestione Eventi.

Tutto parte da un carattere ? (punto di domanda) che può essere posto a inizio riga degli eventi che si intendono gestire con questa funzione.
Quando un evento di questo tipo viene presentato, la corrispondente riga dello schermo viene identificata da una casella di spunta che, se attivata con un click, dichiara gestito l'evento, evitando le successive segnalazioni. In alternativa si può fare click sulla riga di descrizione, per dichiarare visto l'evento, nel qual caso la segnalazione verrà ignorata per il rimanente periodo di anticipo, e ripresa alla data di scadenza dell'evento. Se è necessario che anche questa segnalazione venga anticipata rispetto alla data dell'evento, può essere usato il parametro SOLLECITO, con le stesse modalità di ANTICIPO e RITARDO. Un click sulla riga di descrizione serve anche a far diventare gestibile un evento inizialmente inserito senza il carattere di controllo (?).
Le condizioni di gestito e visto, sono rappresentate nel file mediante la sostituzione automatica del carattere ? in ! e * rispettivamente.
Se l'evento è per uno specifico anno, il record del file rimarrà per sempre in questo stato, a conferma dell'avvenuta gestione, salvo eliminazione manuale.
Se invece la data dell'evento è senza anno, cioè vale per tutti gli anni, dopo circa sei mesi il programma lo modificherà di nuovo in ?, predisponendo l'evento per la prossima scadenza.
Per consentire la verifica della avvenuta gestione di un evento, anche qualora l'indicatore fosse ormai stato ripristinato in ?, dalla versione 1.10 può essere specificato il parametro TIMESTAMP, semre su righe con parentesi come per i parametri ANTICIPO, RITARDO e SOLLECITO. Se è attivo questo parametro, al momento della gestione di un evento verrà aggiunto un commento alla corrispondente riga del file Reminder.txt, con la data dell'ultima gestione avvenuta, posta fra parentesi graffe. Per non alterare la nota descrittiva, tale commento non sarà visibile nella lista degli eventi, quando questo verrà di nuovo segnalato, ma potrà essere visto nella pagina di Modifica, a conferma della avvenuta precedente gestione.
Il parametro NOTIMESTAMP annulla questa opzione per gli eventi successivi.

L'esempio di file riportato in precedenza, potrebbe quindi presentarsi come segue:

    (Anticipo 3, RITARDO 5)
    ! 15/2/2008 Prima rata condominio
    ? 15 06 2008 Seconda rata condominio
    (sollecito 2 ritardo 30 TIMESTAMP)
    ! Gennaio Abbonamento TV {-12/01/08-}
    ? Settembre Bollo auto {-22/09/07-}
    (anticipo 1 ritardo 1)
    13 Apr. Compleanno di Enzo

Gestione eventi in più località - Funzione FTP (da Ver.1.4)

La funzione facoltativa di salvataggio in rete del file eventi, permette di mantenere allineate due o più località, per esempio casa e ufficio o casa di vacanza. Vi si accede dal modulo di modifica, mediante i tasti FtpSend e FtpRecv che vengono attivati se le informazioni necessarie al collegamento sono state impostate attraverso FtpSetup.

Le informazioni che possono essere immesse sono:

    Nome del server FTP     ( necessario per attivare la funzione )
    FTP user name     ( se omesso verrà richiesto ogni volta )
    FTP password     ( se omesso verrà richiesto ogni volta )
    Pathname da usare per Send     ( se omesso verrà usato /reminder.txt )
    Pathname da usare per Recv     ( se omesso verrà usato /reminder.txt )

L'uso di due distinti parametri per i nomi di percorso/file, usati dalle funzioni di send e receive, può servire a mantenere copie separate per ogni località, configurate incrociando fra di loro i nomi di send e recv.

Mentre la funzione FtpSend si limita ad inviare il file eventi corrente al server FTP, con il nome e il percorso specificati, la funzione FtpRecv si conclude mostrando il file appena ricevuto, permettendo però di passare al file locale originale e viceversa, per consentire allineamenti manuali mediante copia/incolla, prima di salvare definitivamente l'una o l'altra versione, o di annullare le modifiche, mantenendo il file originale.
 

Installazione

E' utilizzata una procedura standard (SETUP.EXE) che assume di installare nella cartella C:\Programmi\Reminder\ ma che può essere cambiata a piacere. Nella cartella vengono copiati i seguenti file:

    Reminder.exe     Il programma
    Reminder.htm     La guida in linea
    STxUNST.LOG     Usato da Windows per la disinstallazione

A questi si aggiungerà in fase di utilizzo, il file degli eventi Reminder.txt e i file Reminder.bk1 e Reminder.bk2, due livelli di backup del file eventi.

Per facilitare l'utilizzo di un file eventi esistente, usato da una precedente versione, nel caso di installazione in una cartella diversa, alla prima esecuzione, se non viene trovato il file Reminder.txt, verrà data la possibilità di individuarlo fra le cartelle per essere copiato nella cartella di Reminder. In mancanza di un precedente file, uscire da questa funzione con il tasto [Annulla] e ne verrà creato uno vuoto. In entrambe i casi la successiva manutenzione del file per inserire nuovi eventi, può essere effettuata direttamente da Reminder, attraverso il tasto [Modifica], oppure con il text editor preferito.

Suggerimenti

L'installazione crea un collegamento a Reminder.exe nel menu di avvio.
Conviene farne una copia anche nella cartella Esecuzione automatica.
A questa copia in esecuzione automatica conviene aggiungere, attraverso la proprietà, qualsiasi carattere sulla riga di comando, separato da spazio, per esempio:
    C:\Programmi\Reminder\Reminder.exe /Q.
Questo fa si che l'esecuzione automatica del programma alla partenza di Windows, in assenza di eventi da segnalare termini senza aprire alcuna finestra, per rendere più efficace l'effettiva segnalazione di eventi, mentre l'esecuzione manuale (senza parametri) apre in ogni caso la finestra, eventualmente generando il messaggio Nessun evento da segnalare, per consentire l'inserimento di nuovi eventi o l'uso della funzione [Previsione] per avere una proiezione ai prossimi 30 giorni.