domenica 20 maggio 2012

Cambiare sfondo all'alba e al tramonto

Nel sito Plone della mia scuola lo sfondo è diverso a seconda dell'ora in cui lo si visita, come si può desumere dalla immagine che segue:
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

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).
Lo script adatta l'ora dell'alba e del tramonto ai diversi periodi dell'anno, anticipando il tramonto durante l'inverno e così lo sfondo del sito sembra seguire il ciclo delle stagioni....
L'adattamento è grezzo e approssimato all'ora intera. Il testing è ancora in corso.

Nessun commento:

Posta un commento