ORARIO_ELETTRONICO – FAQ

  1. Perchè quel file 'INIZIO_E_BUTTAMI.php'?
  2. Come scelgo quali database sono disponibili in orario_elettronico?
  3. Cosa significano i simboli '##', 'lib', 'free', 'ext', 'D', 'R'?
  4. Come funziona l'assegnazione automatica?
  5. Come faccio a sapere quando uno script di assegnazione automatica ha terminato l'esecuzione? E come faccio a interrompere manualmete l'esecuzione?
  6. Perchè tanti messaggi di warning?
  7. Quali bug ha orario_elettronico?
  8. Perchè su windows il programma funziona solo per 10 giorni?
  9. Come posso aiutare?



Perchè quel file INIZIO_E_BUTTAMI.php?

Orario_elettronico interroga e modifica un database mysql attraverso una serie di script php. Al momento delle prima installazione mysql non sa niente del nostro programma, e d'altra parte il server mysql contiene tanti altri database a cui non vogliamo permettere che acceda chi lavorerà all'orario. Inoltre abbiamo bisogno di almeno due utenti: un amministratore capace di modificare e lavorare all'orario e un visitatore capace di consultare l'orario ma non di modificarlo.
Per tutte queste ragioni non ho voluto usare l'utente root (di solito privo di password nell'installazione di default di mysql e dotato di tutti i privilegi.
Lo script INIZIO_E_BUTTAMI.php provvede a inizializzare il database mysql per l'uso da parte di orario_elettronico:

  1. crea un database consultabile dal programma (giuste tabelle e colonne, altrimenti avreste solo messaggi di warning) chiamto 'orario_elettronico'. Non dovreste nè cancellare nè sovrascrivere questo databse: contiene dati essenziali per il funzionamento del programma che verranno cercati ogni volta che lo lanciate. pEr il resto è un normale database, potete usarlo senza problemi per creare un orario scolastico.

  2. definisce due utenti - e le relative password- capaci di consultare o di modificare 'l'orario.

Una volta fatte queste operazioni lo script non è più necessario: l'utente dotati di privilegi di amministratore può creare altri database e non sarà più necessario entrare come root (a patto che abbiate dato all'amministratore i privilegi su tutti i database, in caso contrario l'amministratore potrà modificare solo il database creato con questo script e per crearne bisognerà tornare alla pagina inizio_e_buttami o usare la linea di comando: 'create database xx', 'grant all on xx to yy identified by zz' come root.

Come scelgo quali database sono disponibili in orario_elettronico?

Da orario_elettronico potete consultare solo database che hanno una certa struttura (quelli creati dal programma, altrimenti avrete solo messaggi di warning), per questa ragione la pagina di ingresso non vi offre la scelta tra tutti i database presenti sul server mysql ma solo tra quelli contenenti una certa stringa che dovete inserire nel nome dei database creati da orario_elettronico.
Questa stringa di default è 'orar', dunque potrete aprire qualunque database il cui nome la contenga (orar2, orario4, orarioooooo4589) ma non avrete accesso a db che non la contengano (se chiamate un nuovo db 'timetable2004', 'ortario' o altro sarete incapaci di vederlo. Potete modificare questa opzione nel file connect.php contenuto nella cartella includes: basta modificare la prima variabile dal nome '$db_expr'.
Se ad esempio modificate la riga
$db_expr = "orar";
traformandola in
$db_expr = "time";
al nuovo login potrete consultare tutti i database il cui nome contiene l'espressione 'time' e non più quelli contenenti 'orar'.

Cosa significano i simboli '##', 'lib', 'free', 'ext', 'D', 'R'?

L'incaricato di compilare l'orario deve, almeno in Italia, cercare di soddisfare moltissime richieste -a volte bizzarre - dei colleghi. Questi simboli dovrebbero servire come segnaposto per queste richieste. Se procedete all'assegnazione manuale potete servirvene come vi pare, l'importante è solo evitare di dare a un collega o una classe l'improbabile nome di '##', 'lib', 'free', 'D', 'R' e 'ext' (e comunque il programma vi impedirà di farlo).
Se invece usate la funzione di assegnazione automatica la scelta ha importanza. In generale il processo di assegnazione automatica non toccherà le ore segnate con uno di questi simboli. Più precisamente questi segni hanno questi effetti e significato:

extl'insegnante in questa ora lavora in una scuola diversa dalla nostra; poichè questa condizione è inviolabile (posso spostare un giorno 'libero' ma non usare un'ora che ho concordato con altre scuole come disponibile per loro) gli insegnanti che hanno ore segnate così avranno la precedenza assoluta nell'assegnazione automatica.
##quest'ora non deve essere usata in una classe o per un insegnante.
lib o freel'insegnante ha chiesto il giorno libero in questa giornata (ma dovete segnare tutte le ore della giornata)
D o RQueste opzioni dovrebbero essere utilizzate solo alla fine, a orario compilato. D dovrebbe indicare ora a disposizione per supplenze, R ora di ricevimento a disposizione di studenti e/o genitori

IMPORTANTEA partire dalla versione 5.0 l'assegnazione automatica fa conto che le ore segnate con questi simboli siano bloccate. Al momento dell'inserimento il programma provvederà automaticamente a bloccarle e non potrete spostarle se prima non le sbloccate (opzione 'sblocca' del menu a tendina'); SE LE SBLOCCATE DOVETE RICORDARE DI ELIMINARE QUESTI 'SEGNAPOSTO' O DI BLOCCARLI NUOVAMENTE, altrimenti l'assegnazione automatica li considererà come ore normali e li sposterà con effetti imprevedibili e certamente errati.

Come funziona l'assegnazione automatica?

Gli script di assegnazione sono molto complicati e hanno richiesto moltissimo lavoro, in compenso credo che sia stato un buon lavoro.
Con la versione 5.0 l'assegnazione automatica parte da parte da un file principale che a seconda delle necessità invoca diverse funzioni; il processo si svolge a diversi 'livelli' di profondità e man mano che si procede l'assegnazione diventa sempre più lenta; in compenso credo di poter dire (ho testato il programma su tre diversi orari con condizioni anche piuttosto severe) che al livello 4 - o 5 in alcuni casi - tutte le ore che possono essere assegante sono collocate. Lo script non violerà mai (se non emerge qualche bug che non ho trovato) le condizioni da voi imposte al momento della creazione o modifica delle classi, questo però comporta una conseguenza spiacevole: se avete posto qualche limitazione impossibile a rispettarsi il programma girerà a livelli sempre più profondi, con grande dispendio di tempo e risorse, cercando di allocare ore che non possono essere allocate.
Ho cercato di aggirare il problema limitando l'automazione al livello 4: dalla pagina aperta con la voce 'ASSEGNAZIONE AUTOMATICA DELLE ORE' premete il tasto 'riempi l'orario', si aprirà una pagina che esegue lo script al livello 0, terminata l'esecuzione (che a questo livello è piuttosto veloce) lo script aspetterà per 60 secondi vostre istruzioni, in mancanza delle quali sarà rilanciato al livello successivo fino al livello 4 (ripeto, l'esecuzione può essere molto lunga e non voglio tenervi inchiodati al computer a aspettare i risultati, anzi io vi consiglio di lanciare la pagina e poi andare a bere un caffè, portare il cane a fare una passeggiata o, meglio ancora, andare a letto e lasciarlo lavorare durante la notte); dopo il livello 4 il rilancio automatico termina e se volete provare ad andare avanti dovete scegliere manualmente il livello successivo e lanciare l'esecuzione.
Lo script con una certa frequenza scrive i risultati nel database mysql; questo vuol dire due belle cose:
1) potete vedere cosa succede caricando e ricaricando la pagina 'QUADRO DI CONTROLLO'.(Usate i tab di mozilla; adesso li ha anche explorer e li chiama 'schede')
2) Se siete soddisfatti o vi pare che il programma non riesca a fare meglio potete duplicare il database, andare al database duplicato e cominciare a lavorarci a mano lasciando intanto andare avanti il programma a lavorare sul primo database. Non toccate invece il database su cui sta lavorando il programma mentre lo script è in esecuzione: il programma carica i dati all'inizio dell'esecuzione e poi lavora interamente in memoria ram fino al termine di ogni cioclo, scrivendo l'output sul database ogni volta che ci sono miglioramenti significativi, dunque modificare il database significherebbe quasi certamente andare incontro a conflitti o, comunque, apportare modifiche che andranno perdute.
Può accadere che interroghiate o duplichiate il database proprio mentre il programma sta scrivendo il suo output, in tal caso avrete degli errori, basta aspettare qualche secondo e ripetere l'operazione quando la scrittura non è in corso.
Cosa sono questi 'livelli'? Al livello 0 lo script si limita - o quasi, non è così semplice - a inserire se possibile le lezioni in ore in cui sia la classe sia il professore sono liberi; andando avanti le cose si complicano sempre più: poniamo che in una classe - come è inevitabile - sia rimasta vuota un'ora in cui nessuno degli insegnanti che hanno ancora ore a disposizione può essere inserito (perchè supererebbe il carico giornaliero di ore previsto, o violerebbe la condizione che prevede di lasciare un giorno vuoto tra una lezione e l'altra, o ha il giorno libero, o altro ancora), a questo punto il programma cercherà di risolvere il problema spostandoci un insegnante da un'altra ora, o di diminuire il numero di ore in cui l'insegnante è impegnato quel giorno; se per effettuare lo spostamento rompiamo una 'doppietta' (ad esempio, ma i casi sono molti) il programma cercherà di crearla in un altro girono, per questo dovrà liberare la classe da qualche insegnante e il professore da qualche classe, questo romperà qualche altra condizione e così via in un processo che può virtualmetwe diventare infinito. Per questo ho inserito i 'livelli': per impedire che il programma si ficchi in loop interminabili, e perchè non ha senso che il programma si intestardisca a assegnare la prima ora del lunedì al prof Pinco nella classe Pallo mentre in molti casi basterebbe passere avanti alle ore successive; dunque cominciamo con il livello 0 (che assegnerà circa il 90% delle ore) e poi ci impegnamo in compiti sempre più complessi per assegnare le ore non allocate.
Se il programma non riesce a riempire l'orario probabilmente gli avete assegnato un compito impossibile, potete sceglere tra modificare i vincoli che avevate imposto o andare avanti a amno, magari violando volontariamente qualche condizione
Una volta che avete un orario completo duplicatelo - non si sa mai - e lanciate lo script per l'eliminazione dei buchi; il procedimento è simile al precedente, ma il rilancio automatico della pagina si fermerà al livello 3. Con un processo ciclico lo script cercherà rima di tutto di togliere i buchi a chi ne ha più di uno nello stesso giorno, poi di diminuire gradualmente il numero massimo di buchi per insegnante (es.: in una classe 4 insegnanti hanno 6 buchi nello settimana, il programma si disinteresserà completamente di chi ha 5 buchi e un po' alla volta vi porterà ad avere 5, 4, 3, 2, 1 insegnanti con 6 buchi; arrivato a 0 il programma andrà avanti a compiere la stessa operazione con chi ha 5 buchi, e così via). Nella mia esperienza al livello 3 nessun insegnante ha più di un buco nella stessa giornata e il numero massimo di buchi per insegnante è 2.
Consiglio: lo script non violerà le condizioni da voi imposte, se tuttavia la posizione di qualche ora per voi è irrununciabile potete bloccarla dalla pagina della classe o del'insegnante.

Come faccio a sapere quando uno script di assegnazione automatica ha terminato l'esecuzione?? E come faccio a interrompere manualmete l'esecuzione?

1) Ogni browser ha qualche icona che indica che sta lavorando, aspettate che finisca l'esecuzione.
2) Guardate la fine della pagina
Una prima osservazione: php e apache non erano progettati per fare questo lavoro, di default php prevede pochi secondi per l'esecuzione di uno script, se a fine pagina trovate un messaggio che dice qualcosa come 'time exceeded' (e lo troverete sicuramente se non avete seguito le istruzioni che seguono) lo script non ha terminato l'esecuzione.
Cercate il file php.ini (in sistemi linux si trova nella directory /etc e , a seconda delle distrubuzioni, può essere nella cartella /etc/php, /etc/apache, /etc/http o altro. In windows dovrebbe essere nella cartella 'windows')
Attenzione, nelle recenti distribuzioni di linux esistono due file con questo nome: uno per php come modulo di apache, l'altro come applicazione autonoma. Dovrebbe bastare modificare il primo, ma su un debian mi è successo di dover modificare il secondo. Se volete essere sicuri modificateli entrambi.
Nel file (o nei file) php.ini andate alla sezione
. ; Resource Limits ;
e cambiate le seguenti voci:
max_execution_time = 30 --> aumentate generosamente; io, avendo anche bisogno di fare il debug, l'ho portato a 172800 pari a 48 ore; se vi sembra eccessivo diminuite, ma non credo possa far male
max_input_time = 60 --> aumentate generosamente; io l'ho portato a 6000 (100 minuti).
memory_limit = 128M ---> aumentate anche questo, tenendo anche conto della vostra disponibilità di ram; io l'ho portato a 300M
ho anche cambiato (ma forse non è necessario) la riga
mysql.connect_timeout = 60 trasformandola in
mysql.connect_timeout = -1 che indica che non ci sono limiti Poi riavviate apache.
Fatto questo, al termine dell'esecuzione dello script dovreste trovare a fondo pagina un breve report sulle operazioni compiute e un bottone per tornare indietro.

Una seconda osservazione: - ho limitato quanto più possibile i messaggi del programma in fase di assegnazione delle ore: mentre lavoravo a scrivere questi script chiedevo molti output per trovare gli errori ma ho spesso avuto dei crash dell'x-server (a pieno debug avevo parecchio GB di output!). Non dovrebbe più accadere, ma usate questo programma a vostro rischio!
- proprio per evitare rischi di congelamento il programma, dopo il livello 2, resterà per parecchio tempo silenzioso, senza stampare messaggi e senza che il browser riceva alcun input. Ho inserito dei contatori che vi mostrano quanto tempo passa durante l'esecuzione di ogni fase dell'assegnazione, ma una volta partiti si fermeranno solo quando l'operazione è finita (e andranno avanti per sempre se l'operazione non termina!).

E allora, come fermare l'esecuzione dello script se i tempi diventano troppo lunghi?
Avete due metodi:
1) Premete il tasto 'stop' del vostro browser: vantaggi: l'operazione dovrebbe essere sicura. Svantaggi: se lo script è impegnato in una lunga operazione senza output l'interruzione non avrà effetto fino a quando il browser non riceve qualche messaggio
2) da una shell, come root (è scomodo, ma non conosco altre soluzioni) riavviare apache. Nella mia distribuzione gentoo : /etc/init.d/apache2 restart , in altre distribuzioni il comando può essere diverso; in windows ci sarà qualche bottone che produce questo risultato, ma un vero uomo o una vera donna non schiacciano bottoni! Vantaggi: lo script si ferma immediatamente. Svantaggi: a parte la scomodità, potrebbe accedere (ma quando lavorate a un livello avanzato e il browser 'dorme' per molto tempo è abbastanza improbabile) che interrompiate l'esecuzione mentre la scrittura del database è in corso, in tal caso vi trovereste con un orario pieno di errori. Consiglio: prima dell'interruzione duplicate il database e assicuratevi di ottenere una copia senza errori, poi fate quello che volete.

Perchè tanti messaggi di warning?

In effetti NON dovreste ricevere molti messaggi di warning a patto che usiate un database creato con questa versione di orario_elettronico o abbiate eseguito le operazioni di aggiornamento con gli script presenti nel programma.
La prima cosa da controllare è il livello di warning del file php.ini (vedi sopra come trovarlo). Cercate la sezione 'Error handling and logging ' e se necessario fissate il livello corretto indicando l'opzione
error_reporting = E_ALL & ~E_NOTICE
(dovrebbe essere necessario solo su windows, in tutte le distribuzioni di linux che ho utilizzato questo è il livello di default). In questo modo riceverete solo i warning e non i messaggi di notice (variabili non assegnate ecc).
Detto questo, nel processo di assegnazione automatica qualche warning è normale; se la pagina 'QUADRO DI CONTROLLO' non segnala errori nel database non curatevene.

Quali bug ha orario_elettronico?

L'assegnazione manuale delle ore è stata da me sperimentata già da tre anni su orari diversi e non dovrebbe contenere errori.
Non sempre vengono aggiornate le aule speciali quando si modifica una classe dalla pagina 'amministrazione e gestione'; per essere sicuri che la tabella aule speciali sia a posto usate lo script '3) Aggiorna la tabella aule speciali' dalla pagina di assegnazione automatica delle ore.
Sono riuscito a risolvere tutti i bug che mi si sono presentati, ma non escludo che ce ne siano altri. Se ne trovate vi prego di segnalarmeli allegando una copia del database che ha dato errori (usate l'opzione '6) Esporta - importa un database' dalla pagina 'AMMINISTRAZIONE E GESTIONE' e fate un file di dump) e una descrizione dei passi compiuti (se siete partiti da un database vuoto, quali passi avete compiuto) al mio indirizzo di email alessandro.brunelli@poste.it.

Perchè su windows il programma funziona solo per 10 giorni?

Beh, prima di tutto il sistema operativo mi è antipatico: odio i messaggi di errore che manda (e che non vogliono dire niente, ma mi dicono che su xp non ci sono quasi più) e odio, soprattutto, che mi tratti da cretino e voglia decidere per me cosa posso e non posso fare. Una volta ho passato un pomeriggio a cercare di installare un driver per il modem di un portatile e per decine di volte ha installato quello che voleva lui e non quello che mi serviva e avevo scaricato in una cartella che sapevo bene quale fosse.Dunque non vedo perchè dovrei dare un software gratuito che potrebbe essere un motivo in più per usarlo.
Secondo: su Linux uso centinaia di programmi gratuiti prodotti dalla comunità open source, orario_elettronico mi sembra una specie di restituzione: prendo molto e do qualcosa a mia volta. Ma su windows devo pagare tutto e non mi sento in debito con nessuno (beh, in realtà sul computer da tavolo win non esiste nemmeno più e sul portatile c'è la versione di base venuta con la macchina e un minimo numero di vecchi programmi ,office97, per intederci, che ho pagato anni fa quando ero alle prime armi con il computer e mi servono per interagire con qualche sito vigliacco di cui ho assolutamente bisogno e non offre applicazioni per linux. L'agenzia delle entrate, per esempio: è un bel guaio, devo pagare le tasse e per di più usare windows, per fortuna succede una volta all'anno).
Dunque ho inserito un blocco che impedisce l'esecuzione del programma dopo 10 giorni di prova, gli utenti windows che vogliano una versione completamente funzionante dovranno contattarmi per avere un codice di sblocco, e se le richieste saranno numerose prenderò in considerazione l'ipotesi di richiedere un modesto pagamento (penso a circa 100 Euro)
D'altra parte il blocco che ho inserito è piuttosto semplice e ingenuo, se volete usare orario elettronico, non volete usare linux e non volete mandarmi qualche euro potete cercare di toglierlo, un discreto conoscitore di php non dovrebbe avere troppi problemi.

Come posso aiutare?

In generale mi piace lavorare da solo e non chiedo aiuti. Questo è quello che potete fare per aiutarmi:

  1. Fatemi sapere se usate orario_elettronico e le vostre impressioni sul programma.

  2. Se trovate di bug segnalateli, cercherò di correggerli.

  3. So bene che il mio inglese è piuttosto approssimativo, suggerimenti per rendere più chiare e precise le pagine in inglese sarebbero molto graditi.

  4. Se siete utenti windows, contattatemi per comprare il programma; se siete utenti linux o mac (ma funziona su mac? non ho mai avuto modo di provare, una segnalazione sarebbe molto gradita) fate una donazione a orario elettronico partendo dalla pagina di sourceforge .