martedì 9 ottobre 2012

Quale sarà il prossimo cartello?

Sulla porta del bagno dei docenti campeggiano questi due cartelli
Uno è portato a chiedersi di che tenore sarà il prossimo....


martedì 25 settembre 2012

Unire più calendari Google in un unico feed RSS

Per portare a compimento la gestione degli eventi della mia scuola attraverso i calendari di Google, avevo l'esigenza di "fondere" diversi calendari Google in un unico feed RSS da mostrare nella homepage del sito scolastico Plone.

Per raggiungere questo scopo ho usato Yahoo Pipes.
Per prima cosa ho fornito come input i feed RSS di 3 calendari Google cui ho fatto seguire la stringa
"?&futureevents=true"
in modo che già in partenza i feed contenessero solo eventi non ancora passati.

I feed RSS degli eventi Google Calendar forniscono un contenuto del genere:
Il mio scopo è stato di fare un parsing di contenuti come quello sopra in modo da ottenere una voce (che ho chiamato "content2") di questo tipo:
2012 09 28 13:30 (ANNO MESE GIORNO ORA:MINUTO)
L'ordinamento alfabetico in base a content2 provoca l'ordinamento degli eventi dei 3 calendari in base all'inizio dell'evento.
Vediamo i primi 3 blocchi di Yahoo Pipes:
Il primo blocco raccoglie i feed RSS dei calendari Google da "fondere".
Nel secondo blocco viene creata una voce "content2" che duplica il contenuto del feed.
Il terzo blocco rinomina il nome dei mesi usando il relativo numero: questo sarà utile per ottenere l'ordinamento in base all'inizio degli eventi sfruttando un normale ordinamento alfabetico.
Vediamo i blocchi da 4 a 6:

Il blocco 4 copia la voce "content2" dentro la voce "description": in questo modo il feed "fusione" avrà i mesi espressi come numero.
Il blocco 4 scrive il numero del giorno sempre con due cifre (il giorno "5" diventa "05") e produce la data nella forma ANNO MESE GIORNO.
Il blocco 5 fa modifiche analoghe per la voce "description".
Vediamo ora gli ultimi blocchi:
Il blocco 6 svolge una operazione fondamentale:
al link generato dal feed RSS "fusione" viene aggiunta la stringa
"&ctz=Europe/Rome"
grazie alla quale quando si clicca su un evento viene mostrato con il fuso orario corretto.
Senza questo accorgimento, chi non ha un account Google riceve informazioni sull'evento usando il fuso orario di Greenwich.
Il blocco 7 effettua l'ordinamento alfabetico in base alla voce "content2"
Il blocco 8 è l'uscita dal tubo.
Il risultato è questo:
Questo elenco può essere trasmesso come feed RSS, JSON e molto altro verso il proprio sito internet.



mercoledì 5 settembre 2012

Integrazione di Fullcalendar dentro il proprio CMS




TRASCRIZIONE DEL VIDEO

Da qualche tempo sto pensando di gestire gli eventi della mia scuola attraverso Google calendar, la cui flessibilità e facilità d'uso mi sembrano inarrivabili.
Sino ad ora ho sempre utilizzato gli "eventi" proposti da mio CMS Plone, che ben si integrano con il widget "calendario" che ogni installazione di Plone propone in homepage.
Ho pensato dunque di usare i javascript di Adam Shaw per portare gli eventi dei calendari Google dentro Plone.
Avrei potuto usare uno degli innumerevoli plug-in già pronti, ma ho preferito evitare di installare altri plug-in e mi sono limitato a copiare gli script dentro il mio CMS scoprendo che... funzionano quasi senza fatica!
Il mio scopo (almeno per adesso) era di costruire una pagina che mostrasse l'agenda degli eventi del giorno (dalle 8 alle 17, per esempio).
Ho creato nel mio profilo di Google diversi calendari (sportello help, impegni docenti, riunioni varie....); ho reso pubblici questi calendari ed ho permesso ad alcuni utenti di aggiungere eventi o apportare modifiche.
Ho scaricato i files dal sito di Adam: qualche javascript e qualche css
Li ho caricati così come sono dentro Plone, e l'ho istruito affinchè li aggiungesse ai css e ai javascript che manda in ogni pagina.
Poi ho costruito la pagina dell'agenda seguendo il tutorial del sito di Adam.

Questo è il risultato: niente male no?
Certo, siamo lontani dall'accessibilità (puro javascript) e con ie8 ancora il calendario non funge (con ie9 sì) ma.... mi sembra promettente.

martedì 21 agosto 2012

Albo pretorio online con Plone e Plomino




TRASCRIZIONE DEL VIDEO

INTRODUZIONE

Plomino è un prodotto aggiuntivo per Plone che permette di gestire un database autonomo di documenti realizzati in modo molto flessibile tramite interfaccia grafica.
Plomino si ispira al noto software Lotus Domino.
La seguente realizzazione prende spunto dall'albo per Drupal realizzato da Nadia Caprotti.
Questo albo on-line è strutturato per rispondere alle esigenze di una scuola, ma può essere adattato anche alle esigenze di altri enti.
Il presente video mostra una versione preliminare installato in locale in un sito Plone senza personalizzazioni.

CARICARE UN DOCUMENTO IN ALBO

Vediamo come caricare un documento in albo.
Mi loggo come "redattorealbo".
Entro in "Registro albo"  - che elenca i documenti già presenti -  e clicco su "Crea nuovo atto".
Compilo i campi presenti.
Alcune sezioni sono facoltative: se non le compilo in fase di lettura dell'atto non verranno visualizzate.
Alcuni campi sono soggetti a vincoli: se sbaglio l'inserimento riceverò un messaggio e l'atto non verrà salvato.
La sezione degli allegati in Plomino non è gestita in modo efficiente: io ho previsto la presenza di 7 allegati con relativa descrizione; si doveva poter contare su un solo campo "allegato" che gestisse la descrizione  con possibilità di caricare files a volontà.
Salviamo il documento.
Al documento è assegnato come nome "Atto + numero seriale"
Il numero seriale viene calcolato al momento del primo salvataggio e non si può modificare.
Ora vediamo il documento come visitatore anonimo.
Clicco su Albo on-line; clicco sul documento appena creato: l'atto è impaginato appositamente per il visitatore non-redattore: le sezioni non compilate non compaiono.

ANNULLAMENTO DEGLI ATTI

Una volta in fase di pubblicazione un atto non può più essere modificato, ma solo annullato.
Vediamo come.
Mi loggo come redattore.
Clicco su "registro albo" e sul documento appena creato.
Ho la possibilità di cliccare su "Annulla atto".
I pulsanti in alto "seguono" le azioni dell'utente: compaiono solo i pulsanti delle azioni possibili.
Per un documento in corso di pubblicazione come questo, per esempio, non compare il pulsante "modifica".
Compilo la motivazione dell'annullamento. Premo salva.
Il nome del documento cambia: diventa atto + seriale + (annullato).
Già dal titolo si mette in evidenza che l'atto è annullato.
Inoltre visualizzando come utente anonimo l'atto annullato, subito sotto il titolo viene riportata in evidenza la data e motivazione dell'annullamento, prima di tutti gli altri campi.

MODIFICA DI ATTI NON IN PUBBLICAZIONE

Creo un atto ed imposto la data di inizio pubblicazione più avanti nel tempo.
Questo documento non è visualizzato subito nell'albo, ma è reperibile nel registro albo ed è modificabile poichè non risulta ancora pubblicato.
Clicco su registro albo, apro il documento appena creato e noto che i pulsanti disponibili sono - oltre ad "Annulla" - anche "modifica".
Procedo con la modifica. Posso farlo anche più volte se il documento non è ancora in fase di pubblicazione.

LA VALIDAZIONE DEI CAMPI

Provo a creare un atto con campi "sbagliati", in modo da mettere in evidenza la gestione dei messaggi d'errore di Plomino.
Proviamo a dimenticare un campo obbligatorio e ad impostare la data di emissione atto come posteriore alla data odierna.
Riceviamo prima i messaggi relativi ai campi "dimenticati", poi quelli sulla validazione dei campi inseriti.

DA FARE

C'è ancora moltissimo da fare per completare questo albo.
Va inserita nell'atto la gestione della nomina dei docenti con campi specifici.
Va gestito tramite uno script  il downtime del server cui dovrebbe seguire un prolungamento della data di fine pubblicazione.
Vanno impostate bene strategie di backup-ripristino del database di atti.
Vanno richieste modifiche al codice di Plomino in modo da essere XHTML conforme.
Vanno stilati ed abbelliti i form di inserimento e visualizzazione degli atti.

venerdì 25 maggio 2012

La (non) conservazione della quantità di moto

In questi giorni ho portato le classi in laboratorio per verificare con la rotaia a cuscino d'aria che la quantità di moto negli urti si conserva.
L'esperienza più semplice è quella dell'urto di due carrelli di massa uguale di cui uno fermo: se dopo l'urto i carrelli rimangono incastrati, DOVREBBERO procedere a velocità dimezzata rispetto a quella del carrello urtante.
Vediamo:
A prima vista le cose vanno proprio così, nel senso che la velocità diminuisce bruscamente dopo l'urto.
L'analisi del moto con Tracker, però, ci riserva sorprese.....
È evidente che prima del'urto il moto era uniforme (quindi niente attriti) e anche dopo l'urto era uniforme (quindi niente attriti); la velocità, però, non si è dimezzata come avrebbe previsto la legge di conservazione della quantità di moto in assenza di forze esterne!
Per capire quale può essere la ragione di tale "fallimento" vediamo al rallentatore e con un po' di zoom il momento dell'urto analizzato con Tracker: guardando bene noterete che al momento del contatto i due carrelli per un attimo si piegano (per vedere bene è necessario mandare il video a schermo intero)
Nel momento della "piega" la rotaia non riesce a sostenere i due carrelli, sui quali dunque - per breve tempo - agisce la forza di attrito che modifica la quantità di moto:
 
 Per evitare il "salto" dei carrelli basterebbe avere a disposizione gli appositi "tamponi" da montare nel punto di contatto. L'esperienza è stata eseguita invece in situazione d'emergenza usando al posto dei tamponi del nastro adesivo ripiegato.

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.

martedì 24 aprile 2012

Ricerca avanzata di Plone

Durante la riunione di dipartimento TIC di oggi, è emerso che il motore di ricerca interno del sito scolastico talvolta restituisce risultati poco interessanti.
Ho voluto dunque mettere alla prova il motore di Plone cercando la parola chiave "Cavagna"

Da quanto ho capito il motore di Plone non ha nulla che non va, anzi!
Poichè Plone è in grado di "leggere" anche dentro i documenti Word e PDF che vengono caricati, può succedere che, per diversi motivi, questi "scavalchino" per rilevanza quello che intendiamo cercare.
Fortunatamente ci viene in aiuto la "ricerca avanzata" di Plone, che permette di limitare in vario modo la ricerca, per esempio limitandosi al titolo:
in questo modo la ricerca diventa davvero efficace.

sabato 25 febbraio 2012

La biro

Non mi capita spesso, eppure oggi è successo: ho ricevuto un regalo. La mia 4T, forse stanca di sentirsi chiedere la biro nera per firmare il registro mi ha regalato una splendida penna a 4 colori. Che dire.... mi ha fatto piacere!

lunedì 6 febbraio 2012

Ridatemi le maniglie!

Plone usa un comodo sistema "Drag and drop" per riordinare i files all'interno delle cartelle: basta trascinare gli elementi prendendoli per le "maniglie" ed il gioco è fatto.

Se il javascript non è attivo, le maniglie vengono sostituite da (scomodi) link a forma di frecce.
Per non so quale motivo lo script "Drag and Drop" ha smesso di funzionare nel mio sito scolastico, e la cosa si ripercuote per tutti i siti che ne condividono la stessa base Zope.
Un illuminante post di Sauzher (leggi il thread) mi ha spiegato come uscirne, ma il metodo non è banale e, dovendo esportare/reimpostare uno ZEXP, immagino che perderò le info sugli utenti ed i permessi.
AGGIORNAMENTI
1) Ho cancellato portal_javascript ed importato lo zexp di un portal_javascript (pari prodotti installati) generato da sito pulito ove drag and drop funziona: non ha risolto il problema.

2) Al Plone migrato manca plone.app.discussion: il workaround per ripristinarlo non funziona. Ecco l'errore:

Traceback (innermost last):
  Module ZPublisher.Publish, line 126, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 46, in call_object
  Module Products.GenericSetup.tool, line 514, in manage_importAllSteps
  Module Products.GenericSetup.tool, line 323, in runAllImportStepsFromProfile
   - __traceback_info__: profile-plone.app.discussion:default
  Module Products.GenericSetup.tool, line 1084, in _runImportStepsFromContext
  Module Products.GenericSetup.tool, line 998, in _doRunImportStep
   - __traceback_info__: toolset
  Module Products.GenericSetup.tool, line 123, in importToolset
TypeError: 'NoneType' object is not callable
3) Si prospetta la migrazione del sito scolastico ad un Plone 4.1.3 pulito. Ho provato ad esportare alcune cartelle in formato ZEXP ed ho notato che l'importazione avviene correttamente e che i contenuti BLOB vengono creati regolarmente. Quindi potrò migrare ma... poi dovrò sistemare A MANO tutti i permessi delle cartelle, le condivisioni, dovrò creare gli utenti....Mah!

4) La migrazione cartella per cartella l'ho fatta. Ho scoperto che l'errore per il javascript del drag and drop era dovuto all'attributo data-rel eliminato per avere la codifica xhtml strict (vedi)
/usr/local/Plone/buildout-cache/eggs/Products.ResourceRegistries-2.0.6-py2.6.egg/Products/ResourceRegistries/browser/kss.pt
  La migrazione cartella per cartella ha comunque sistemato anche la mancanza di plone.app.discussion.



 
 

giovedì 5 gennaio 2012

Viva i backup!

Ieri i bidelli hanno pulito l'aula server, avventurandosi fin dietro lo scaffale.
Questo evento ha avuto un bel po' di effetti collaterali, tra i quali quello di "rovinarmi" un pomeriggio...
Nel pulire, infatti, hanno staccato l'alimentazione del gruppo di continuità: le batterie si sono quasi scaricate e i server automaticamente si sono spenti, proprio come deve essere.
Avendo appurato che l'energia elettrica da rete era presente e non avendo notato l'alimentazione staccata abbiamo riacceso i server, che durante il riavvio hanno prosciugato la carica residua delle batterie e dunque si sono spenti in malo modo in fase di boot!
Ahi, ahi, ahi!
ESXI è ripartito regolarmente e, all'apparenza, anche i 3 server virtuali, eppure... non funzionava nulla!
In pratica il server virtuale del firewall risultava funzionante ma senza alcuna scheda di rete installata per cui... è come se non ci fosse stato: mai successa una cosa del genere!
Dopo un'ora di tentativi per sistemare le cose, mi son deciso a ripristinare l'immagine del server virtuale firewall di maggio 2011: 60 minuti 60 per copiare 10 Gigabytes!!!
Con l'immagine dello scorso anno il server virtuale del firewall è partito liscio liscio e, sistemate al volo un paio di configurazioni, i server della scuola sono di nuovo "up and running": tutto è bene quel che finisce bene e.... viva i backup!

mercoledì 4 gennaio 2012

Aggiornamento sito scolastico a Plone 4.1.3

Dopo qualche giorno di test è finalmente in linea il sito scolastico con la nuova versione di Plone.
Apparentemente il sito non cambia carrozzeria, ma il motore si....