Come si può ottenere questo risultato?
Non è troppo complicato, si lavora con i CSS e con un piccolo script Python.
Iniziamo dal CSS:
Il CSS è inserito nella cartella portal_styles/custom della ZMI e sfrutta la sintassi "&dtml" per lanciare due script.
Con le righe:
background: #A3C3E5 url(&dtml-cambia_sfondo;) repeat-x scroll 0 0;
color: &dtml-cambia_colore;;
il CSS imposta sfondo e colore tramite gli script Python "cambia_sfondo" e "cambia_colore" che si occupano materialmente di capire che giorno è, che ora è e del conseguente settaggio di sfondo e colore.
Il CSS va registrato in portal_css e bisogna disattivare il caching:
Veniamo ora agli script Python per il cambio si sfondo e colore analizzandone uno, quello del cambio dello sfondo.
Lo script è molto grezzo e sfrutta appieno la mia poca conscenza nel gestire date e ore nel Python ristretto concesso agli script che dimorano nella ZMI.
# QUESTO CODICE PER IL CALCOLO DI ALBA E TRAMONTO
# È ISPIRATO DA INTRODUZIONE AL CALCOLO ASTRONOMICO
# DI COSTANTINO SIGISMONDI QUADERNI DI STUDIO 2007
# ISPEF ROMA GEOASTROLAB UNIVERSITÀ EUROPEA DI ROMA
import math
dNow = DateTime()
giorno = dNow.day()
mese =dNow.month()
ora_legale = 0
if mese >=4 and mese<= 10:
ora_legale=1;
giorni_da_equinozio=giorno+30*mese-(21+30*3)
omega=6.28/365.25
lamb=45*3.14/180
delt=23.5*3.14/180*math.sin(omega*giorni_da_equinozio)
durata=math.asin(math.tan(lamb)*math.tan(delt))*180/3.14*2/15+12
alba=int(round(12-durata/2))+ora_legale
tramonto=int(round(12+durata/2))+ora_legale
tNow = dNow.hour()
if tNow>= alba and tNow <= tramonto:
print "sfumatura_2.png"
else:
print "cielo_stellato.png"
return printed
# È ISPIRATO DA INTRODUZIONE AL CALCOLO ASTRONOMICO
# DI COSTANTINO SIGISMONDI QUADERNI DI STUDIO 2007
# ISPEF ROMA GEOASTROLAB UNIVERSITÀ EUROPEA DI ROMA
import math
dNow = DateTime()
giorno = dNow.day()
mese =dNow.month()
ora_legale = 0
if mese >=4 and mese<= 10:
ora_legale=1;
giorni_da_equinozio=giorno+30*mese-(21+30*3)
omega=6.28/365.25
lamb=45*3.14/180
delt=23.5*3.14/180*math.sin(omega*giorni_da_equinozio)
durata=math.asin(math.tan(lamb)*math.tan(delt))*180/3.14*2/15+12
alba=int(round(12-durata/2))+ora_legale
tramonto=int(round(12+durata/2))+ora_legale
tNow = dNow.hour()
if tNow>= alba and tNow <= tramonto:
print "sfumatura_2.png"
else:
print "cielo_stellato.png"
return printed
Ecco cosa fa lo script:
- prende dal server la data e l'ora della navigazione
- legge nella variabile "lamb" la latitudine del luogo del sito e la converte in radianti
- converte la data in giorni dall'equinozio di primavera
- calcola la durata delle ore di luce usando le indicazioni di Costantino Sigismondi
- calcola l'ora dell'alba e del tramonto per quel giorno
- se l'ora di navigazione è compresa tra l'alba e il tramonto applica lo sfondo "sfumatura2.png" (sfondo per il giorno) altrimenti applica lo sfondo "cielo_stellato.png" (sfondo per la notte).
L'adattamento è grezzo e approssimato all'ora intera. Il testing è ancora in corso.
Nessun commento:
Posta un commento