Abbiamo riunito tutti gli RSS che parlano di Plone.

Vuoi aggiungere il tuo blog al planet? Invia una mail alla lista italiana.

Ultimo aggiornamento: 18/10/2014 15:15:14

29/10/2014

di Luca Fabbri 10:05:00

7 interessanti prodotti Plone che potresti voler usare

Sapete tutti che cos'è paragon.plone.org?

Se non lo sapete ve lo dico in due parole: è la nuova idea per rivoluzionare la pagina dei prodotti di plone.org che è in via di dismissione.

Il problema di questa sezione del sito (non è la prima volta che affronto la cosa) è che non tutti gli sviluppatori di add-on la tenevano aggiornata con le release recenti dei loro prodotti.
Morale della storia: prodotti eccellenti, qui, non sono sempre disponibili.

L'idea di Plone Paragon è di sostituire questa pagina con una nuova versione dove i contenuti saranno revisionati da umani senzienti, una "commissione d'inchiesta" che si metterà a valutare i prodotti esistenti per trovare "i migliori 50" (Se vi chiedete "perché 50?" la risposta è: "e perché no?!").

Ci sono alcune regole di massima: chiunque può sottomettere il prodotto che preferisce ma la giuria considererà vari fattori, tra cui la documentazione, la compatibilità con Plone 5, l'uso di Dexterity e non ultimo, che sia un prodotto che porti gloria a Plone.

Se non avete ancora nominato il vostro add-on preferito e le nomination sono ancora aperte, vi invito a farlo! Io ne ho sottomessi almeno 5... ma non vi dirò quali (siamo già in par condicio). Sappiate che nessuno di questi è stato fatto da RedTurtle (forse anche con una punta di scaramanzia)!

Visti i criteri, da questa lista saranno quindi probabilmente assenti (o comunque non dovrebbero far parte dei vincitori) i prodotti:

  • instabili
  • con poca/assente documentazione
  • utili solo agli sviluppatori
  • non tradotti e non traducibili.

In pratica Plone Paragon vuole trovare i prodotti "cool", che rendono grande Plone... ma è altrettanto sicuro che altri prodotti "un-po'-meno-cool" non otterranno quindi la giusta visibilità!
Ci sono vari prodotti per sviluppatori o prodotti di nicchia che non ho nominato (e nessun altro lo ha fatto) ma che, a mio parere, vanno tenuti d'occhio e utilizzati.

Ecco la mia lista... chiamatela pure "Plone Anti Paragon"!

collective.auditlog

http://github.com/collective/collective.auditlog

Questo prodotto è in via di sviluppo e non ufficialmente rilasciato ma ricopre un caso molto interessante e spesso ricercato: mantenere un monitoraggio delle attività fatte su Plone.
Potrete tenere traccia di tutte le volte che un documento Plone...

  • è stato creato?
  • è stato modificato?
  • è stato spostato?
  • è stato eliminato?
  • ...

La lista delle operazioni sotto monitoraggio può essere estesa, mentre i dati sono salvati su un database esterno a Plone e c'è il supporto all'uso di plone.app.async (continuate a leggere).

collective.elasticsearch

https://github.com/collective/collective.elasticsearch

Un altro prodotto non rilasciato, ma dalle promesse interessanti.
Tutti noi ci troviamo bene ad usare le funzionalità di ricerca native di Plone, ma in casi particolarmente spinti è bene che la ricerca venga demandata a software che la fanno di mestiere.

L'uso di Solr come sostituto o integrazione della ricerca Plone è cosa nota, ma ultimamente c'è un prodotto che sta prendendo piede per alcune delle sue caratteristiche: Elasticsearch. Non per niente servizi emergenti come searchly.com utilizzano esattamente Elasticsearch e le sue API.

La promessa di collective.elasticsearch è quella di poter sostituire (o mantenere in accoppiata) il catalogo Plone, demandando l'indicizzazione ad un Elasticsearch in ascolto.

Se fosse così semplice, sarebbe un enorme salto in avanti... rimanete sintonizzati!

RedirectionTool

https://github.com/collective/Products.RedirectionTool

Questo è un vecchio prodotto, ma che definirei un "sempreverde".
Fa un lavoro semplice ma efficace: fornisce al redattore un'interfaccia Web sulla funzionalità di Plone nel gestire i collegamenti interrotti (che tecnicamente è gestita da plone.app.redirector).

Se non ve ne siete mai accorti, ecco una delle tante funzionalità di Plone: quando spostate un contenuto da una posizione a un'altra (compresa l'azione "rinomina"), i link alla posizione originale vengono automaticamente rediretti con il corretto HTTP status alla nuova posizione, così utenti (e motori di ricerca) sono felici.

Il RedirectionTool permette di manipolare manualmente questo database interno di Plone.
Se vi state chiedendo dove sia l'utilità, sappiate che può diventare un inseparabile amico del SEO:

  • può aiutare a gestire la migrazione di tecnologia. Avete migrato il vostro sito PHP a Plone? Quale modo più semplice di redirigere la pagina "/contatti.php" alla contact-info di Plone?
  • potete creare alias anche partendo da URL non esistenti. Non usate LinguaPlone nel vostro sito ma decidere che la chiamata a "/en" venga rediretta ad una pagina statica in lingua inglese
  • potete eliminare voci dal database, che altrimenti non è modificabile nemmeno da ZMI.

collective.configviews

https://github.com/collective/collective.configviews

Vi è mai capitato di sviluppare viste che richiedano configurazioni? Ad esempio: una speciale vista per le cartelle dove il numero di elementi per pagina debba essere configurabile.

In questo caso si ricade spesso nelle due seguenti soluzioni:

  • avere una configurazione globale nel sito
  • aggiungere la configurazione ai campi del contenuto su cui la vista va applicata.

Entrambi gli approcci hanno notevoli limiti, ma potete risolvere tutto usando collective.configviews.

Lo scopo del prodotto è semplicemente quello di fornire un form di configurazione per le viste, tramite la definizione di interfacce (attività ben nota ai developer Plone).

Semplice, eppure geniale.

sc.contentrules.groupbydate

https://github.com/collective/sc.contentrules.groupbydate

Plone non ha nessun problema nel mantenere migliaia di elementi all'interno di una cartella... ma così non è per gli utenti che poi devono lavorarci (maledetti umani)!

Questo prodotto aggiunge una nuova regola di contenuto a Plone, che automaticamente archivia i contenuti aggiunti in una cartella in sotto-cartelle (che, se non esistenti, vengono create) organizzandole nella universalmente riconosciuta struttura anno/mese/giorno.

Il prodotto è particolarmente adatto per le redazioni che pubblicano tante news ed eventi, e rende molto semplici le operazioni di pulizia (cancellare tutti i documenti dell'anno 2004 non sarà più un problema!).

plone.app.imagecropping

https://github.com/collective/plone.app.imagecropping

Di prodotti di manipolazione immagini in Plone ne abbiamo parecchi e personalmente li ho sempre guardati dall'alto in basso: io sono di quelli che non vogliono far fare al CMS cose che dovrebbero essere fatte da un programma specifico... se la foto caricata la vuoi "nero di seppia", fattela con Photoshop!

Eppure, quando per esigenze di un nostro cliente Andrea si è imbattuto in questo prodotto, ho fatto un'eccezione alla regola. Non ne avevo mai sentito parlare prima ma è davvero ben fatto!

La bellezza del prodotto non è che permette di fare il ritaglio delle immagini (sua funzionalità principale), ma che permette di fornire immagini diverse, partendo da operazioni di taglio differenti, per tutte le miniature di Plone.

plone.app.imagecropping preview

Non vi è mai successo di volere un'immagine diversa per le vostre news nella miniatura pubblicata in homepage?

plone.app.async

https://pypi.python.org/pypi/plone.app.async

Quando Plone deve fare operazioni estremamente pesanti a seguito di un'azione di un utente, possono sorgere problemi di prestazioni e di User Experience.
Per questo motivo negli ultimi anni vari prodotti hanno iniziato a fornire un supporto opzionale (ma di solito: consigliato) per plone.app.async.

Questo prodotto si occupa di gestire, tramite un'istanza Plone dedicata, le operazioni "lunghe", che vengono messe in coda ed eseguite in seguito.

A parte collective.auditlog citato sopra, un ottimo esempio di questo è dato da wildcard.media (presente nelle selezioni di Plone Paragon!) quando deve occuparsi del pesante lavoro di codifica dei video caricati; l'utente carica il video e se plone.app.aync è presente e configurato, le versioni del video per i vari dispositivi sono fatte in seguito permettendo all'utente di non dover aspettare parecchi minuti in attesa della fine del task.

Alternativa interessante e totalmente in via di sviluppo è quella fornita da collective.celery (ma sono già arrivato a 7, finiamola qui!).

Conclusioni

Se vi state chiedendo "perché 7 prodotti?", la risposta che posso darvi è... "e perché no?!".

Alla prossima!

07/10/2014

di Maurizio Delmonte 07:53:00

Università e CMS: quale scegliere in ateneo?

Redazioni decentralizzate con utenti poco esperti, integrazione con i sistemi informativi interni, gestione di siti simili per facoltà e dipartimenti solo alcuni dei problemi da risolvere.

07/10/2014

di Maurizio Delmonte 07:53:00

Gestire i contenuti online di un ateneo è più facile con un CMS adeguato.

Redazioni decentralizzate con utenti poco esperti, integrazione con i sistemi informativi interni, gestione di siti simili per facoltà e dipartimenti solo alcuni dei problemi da risolvere.

01/10/2014

di Maurizio Delmonte 07:16:19

23/09/2014

di abstract 07:48:00

Webinar 4 - Pregi e difetti dei pricipali CMS Open Source

Il quarto webinar Abstract del 2014 ha messo a confronto i principali CMS Open Source, evidenziandone pregi e difetti.

03/09/2014

di Luca Pisani 22:00:00

Con plone.api si semplifica lo sviluppo delle applicazioni Plone.

La documentazione di plone.api è ben strutturata e permette anche ai neofiti di sviluppare da subito applicazioni in Plone.

26/08/2014

di Luca Fabbri 12:20:00

Autenticazione tramite social network con Plone? E' facile!

In questo articolo introdurrò un prodotto Plone che ci ha reso possibile l'autenticazione e la profilazione di utenti usando il proprio social network preferito: pas.plugins.velruse.

Vedremo i motivi per cui il plugin è stato sviluppato e le alternative possibili.

Tanto Tempo Fa, In Un Web Lontano Lontano

Lo sapere cos'è questo?

Join form Plone

Se avete risposto "un form di iscrizione ad un sito" avete sbagliato. Oggigiorno la risposta migliore è "il metodo più veloce per far allontanare il visitatore dal vostro sito".

Non è certo una novità che gli utenti del Web:

  • Abbiano fretta. Devono veramente essere interessati al vostro servizio per voler investire tempo nell'attivare nuove credenziali. Chiedete ad un utente di iscriversi al vostro sito solo se strettamente necessario.
  • Siano allergici alla creazione di nuovi account. Tutti noi custodiamo gelosamente un numero minimo di credenziali (posta elettronica, social network, la propria banca, ...) ma diventa estremamente complesso gestire un numero sempre crescente di servizi che richiedono autenticazione e profilazione utenti.

I gestori di credenziali, quasi sempre integrati nei maggiori browser, possono aiutare ma sono tutto sommato dei palliativi. La cruda realtà è che molti utenti in presenza della richiesta di iscrizione passano oltre.

 

La richiesta di credenziali va quindi evitata in tutti i modi o, se proprio necessaria, va resa talmente semplice da diventare banale.

La password che non dimentichi mai

Eppure la soluzione perfetta esiste, ed è passata inosservata nelle righe qui sopra.
Ci sono alcuni servizi senza i quali l'utente medio del Web non riuscirebbe a vivere! In alcuni casi questi servizi giustificano l'accesso alla rete da parte di una certa categoria di utenti.

Sto parlando dei social network!

Quante persone conoscete che visitano il proprio profilo Facebook non meno di 10 volte al giorno? Non so voi, ma io parecchie!

Per questi utenti ricordarsi lo username e la password di Facebook non è un problema (e, come vedremo poi, molto spesso non è necessario ricordarsi nemmeno questi dati).

Badate bene: Facebook non è l'unico esempio. Magari esistono persone che non hanno un account su questo social network ma usano spasmodicamente Twitter. Cambia qualcosa? No!

"Io sono a-social! Non uso nessun social network! Di vedere le foto del tuo gattino non me ne può importare meno!"

Già... esistono anche queste categorie di utenti. Magari sono una nicchia ma non è detto siano un numero così esiguo da dover essere ignorato.
Volete forse dire che queste persone non leggono nemmeno la posta? Tutti noi non abbiamo forse un account Google, per usare uno dei suoi numerosi servizi quali YouTube, GooglePlus, GMail, ...?

"Io sono a-social e combatto Google, perché penso sia il Grande Fratello del futuro!"

Ok... ma non siete nemmeno interessati alla vostra vita lavorativa? Non tenete aggiornato il vostro curriculum su Linkedin?

"Io sono a-social e combatto Google, perché penso sia il Grande Fratello del futuro e non trovo Linkedin utile perché è il lavoro che cerca me, non il contrario."

La cosa qui inizia a farsi difficile. Questa categoria di utenti è data di solito dai programmatori... della sottospecie "Programmatore Che Si Crede Membro Di Anonymous".

Eppure anche tu, oh Hacker Che Vivi nell'Ombra, non utilizzi forse uno dei famosi servizi di hosting di codice come GitHub o Bitbucket per rendere pubblico il tuo lavoro che salverà il mondo (ovviamente, rilasciato sotto licenza GPL 3!)?

Ironia a parte, come avrete capito, lo scopo è trovare un servizio indispensabile all'utente e una password che questi non abbia problemi a ricordarsi.

OAuth (come lo spiegherei alla mia Mamma)

Che cosa hanno in comune tutti i servizi che ho citato sopra? Sono tutti OAuth provider.
Cos'è OAuth? E' uno standard per la condivisione di dati e credenziali fornite da un provider ad un altro servizio a seguito di una esplicita autorizzazione dell'utente.

Belle parole, ma passiamo ai fatti.
Diciamo solo che questa tecnologia è quella che può salvarci dal doversi ricordare nuovi account ancora ed ancora; sono in realtà certo che l'abbiate già usata, magari senza sapere quello che stavate veramente facendo.

Facciamo un esempio pratico: il noto quotidiano "La Repubblica" ha la sua controparte Web disponibile al sito repubblica.it.
Il sito ovviamente non richiede autenticazione di per sé ma gli articoli sono commentabili dagli utenti; se navigate un po' noterete che i commenti non sono pochi.
In questo caso la profilazione dell'utente è necessaria (anche per evitare problemi di tipo legale) ma credete forse che repubblica.it obblighi un'iscrizione al sito?

Cosa succede cliccando sull'area di aggiunta di un nuovo commento? Si apre una finestra di popup così composta:

Commentare sul sito

Sebbene sulla destra ci sia la possibilità di creare un nuovo account nel sistema interno del portale, state pur certi che il 95% degli utenti viene attirato dai famigliari pulsantoni colorati sulla sinistra e sceglierà il proprio social network/servizio preferito.

Autorizzazione Twitter

A questo punto (qui sopra ho selezionato Twitter) la pagina successiva non è più del sito repubblica.it, ma mi sono spostato su twitter.com.

E' quindi Twitter mi sta chiedendo:

  • di autenticarmi
  • di autorizzare il sito repubblica.it ad accedere ad alcuni dei miei dati

Il primo passo poi non è detto sia necessario. Se con il browser utilizzato si era già autenticati in Twitter (quanti di voi immettono tutti i giorni la password di Facebook/Twitter/Google ogni mattina? Scommetto pochi...) non ho bisogno di autenticarmi di nuovo ma solo di confermare la richiesta si autorizzazione.

A questo punto eccomi autenticato (usando Twitter) sul sito de "La Repubblica", pronto a commentare la notizia/il video, etc. Il tutto in modo molto semplice e trasparente.

Pronto a commentare su

E' molto importante notare come la mia password Twitter non è stata data al sito repubblica.it. Questo sito ha accesso ad alcuni miei dati (da qui la richiesta di autorizzazione) ma nulla più.

Lost in OAuth

Ma quello che fa "La Repubblica.it" è fattibile nel mio nuovo sito Web?

L'utilizzo di un OAuth provider come fonte di autenticazione nel proprio sito Web si compone in due fasi:

  • la creazione di un'app nel provider
  • il collegamento tra il provider e il nostro servizio Web (parlando OAuth/OAuth 2).

Creare una nuova app è tutto sommato semplice (anche se ogni provider ha ovviamente procedure differenti e le prime volte si potrebbe fare un po' di confusione, ma nulla che una ricerca su Google non possa sistemare)

A questo punto però il vostro nuovo e scintillante sito Web dovrà trovare una libreria che permetta di "parlare OAuth"... e qui a volte nasce la vera complessità perché ogni servizio è differente. Maggiore è il numero di servizi che volete supportare, maggiori saranno i grattacapi da affrontare.

E' prova di questo il fatto che esistano aziende quali Janrain che fanno la loro fortuna unificando le differenze di accesso dei vari social e fornendo un'interfaccia comune: lo sforzo a questo punto diventa quello di parlare col servizio offerto da Janrain che a sua volta astrae le differenze che andremmo ad affrontare.

Un servizio per dominarli tutti.

Autenticazione social con Plone

Dato che il form di iscrizione che ho mostrato all'inizio di questo articolo è quello di un sito Plone, vediamo come possiamo semplificare l'autenticazione nel nostro amato CMS utilizzando altri authentication provider.

Vi sono varie strade, vediamole tutte per darvi modo di trovare la vostra.

cs.auth.facebook e cs.auth.twitter

Codesyntax ha sviluppato una serie di plugin di autenticazione Plone (PAS plugin) per l'accesso ai due più noti social network:

Non c'è molto da aggiungere se Facebook e Twitter sono tutto quello che vi serve.

Se qualcuno di voi sta dicendo "Ehi! Ne mancano alcuni, per lo meno Google!" posso solo dirvi: avete ragione.
A questo punto il vostro sforzo sarebbe quello di scrivere un plugin dall'ipotetico nome "cs.auth.google" che ricopra questa mancanza... e così via fino ad aver ottenuto un supporto per tutti i social network che vi interessano.
Ma ci sono lati negativi:

  • lo sforzo potrebbe non essere irrisorio
  • avrete installato ben 2, 3 o più prodotti aggiuntivi Plone
  • ogni volta che "qualcosa" cambia in uno degli authentication provider dovrete correre ai ripari e verificare che tutto funzioni.

plonesocial.auth.rpx

Ma se, come ho detto sopra, esistono aziende che si sono fatte carico di gestire tutto questa complessità, non esiste un unico plugin Plone per gestirli tutti?

Ovviamente sì. plonesocial.auth.rpx permette l'autenticazione su tutti i maggiori social network usando un singolo prodotto Plone ma sfruttando i servizi offerti da Janrain!
Per di più lo abbiamo già usato con successo in passato.

I giochi sono fatti. O no?

Privacy?!

Per quanto parlare di privacy in un articolo che illustra come autenticarsi usando social network possa sembrare un controsenso, ci siamo trovati ad dover affrontare anche questo argomento.

Molti lo ignorano ma la Normativa Italiana ha regole molto precise sul trattamento dei dati personali per i siti delle pubbliche amministrazioni. Ci è stato chiesto di avere l'autenticazione con social network in un sito Plone di una pubblica amministrazione.

La nostra prima scelta è ricaduta ovviamente su plonesocial.auth.rpx per poi scoprire che non era utilizzabile.
Che uso fa Janrain dei dati degli utenti (poiché Janrain è un tramite è ovvio che sia in possesso di alcuni dati degli utenti... a ri-ecco il Grande Fratello)?

Per aumentare la complessità della cosa era poi presente la richiesta di potersi autenticare usando anche FedERa, un sistema di autenticazione per i cittadini della Regione Emilia Romagna.
Janrain ovviamente non sa nulla di cosa sia FedERa.

A questo punto si è anche valutata l'implementazione di tutti i plugin PAS che al momento Plone non supportava (Google +, FedERa, ...) ma Andrew aveva già usato un'ottima alternativa  per l'uso di OAuth.

Velruse

Esiste un software Python per il framework Pyramid che replica le funzionalità offerte da Janrain senza però basarsi su servizi altrui: Velruse.

Velruse è Open Source, ed in questo modo il discorso privacy viene ampiamente superato, ma soprattutto è pluggabile.
Il prodotto offre di per sé un numero enorme di possibili provider ma rende semplice l'integrazione con nuove fonte dati... come lo è FedERa!

pas.plugins.velruse

Da qui il passo finale è stato davvero semplice. Abbiamo sviluppato un nuovo plugin PAS il cui scopo fosse quello di comunicare con un servizio Pyramid/Velruse (gestito dall'Ente stesso) per ottenere i dati degli utenti.

E' Velruse che si occupa di comunicare con i vari social network (FedERa incluso) nascondendo le complessità sottostanti. Il risultato finale è comunque un servizio di autenticazione social sullo stile di quanto ho mostrato per repubblica.it.
Plone ottiene i dati in modo uniforme: utenti del sito già profilati e con vari metadati disponibili (email, nome, ritratto, ...).

Durante le prime esperienze con Velruse (Velruse 1.0) abbiamo trovato alcune carenze minori: la foto dell'utente, sebbene disponibile, non veniva raccolta così come altri metadati come la località, l'email era assente da Linkedin, ...

Ma non stavamo parlando di un progetto Open Source? E allora perché non contribuire?! Dopo un paio di modifiche accettate nel progetto originale, la versione 1.1 ha risolto tutti i nostri problemi.

Login social completo

Per maggiori informazioni sul progetto vi rimando alla presentazione di Stefano.

La realizzazione di pas.plugins.velruse non sarebbe stata possibile senza il lavoro di (in ordine di importanza):

  • Ben Bangert - creatore di Velruse
  • Andrew - per aver scoperto ed utilizzato per primo questo prodotto dandoci le dritte iniziali
  • Mauro - per aver realizzato il plugin per FedERa ed averci supportato nelle installazioni Pyramid
  • Ed infine io e Andrea, che abbiamo sfruttato il lavoro altrui ed ora ce ne prendiamo i meriti.

Mr Burns"Il lavoro di squadra ti fa avanzare un tantino, poi la persona evoluta fa quello scatto in più per la gloria personale"
- Charles Montgomery Burns

Autenticazione Social? E' facile!

Spero che questo articolo vi abbia aperto gli occhi su quanto possa essere sconsigliato oggigiorno utilizzare la profilazione utente "in stile classico" (per non dire "vecchio") e che le alternative per una semplice integrazione OAuth ci sono (per lo meno: con Python e Plone!).

PS: caro lettore, ora sono sicuro tu stia per commentare questo articolo per dirci quanto siamo stati bravi. Non ti sei accorto che per i commenti a questo blog puoi usare i tuoi social network preferiti?!
Perderesti tempo a commentare se fossi obbligato ad iscriversi al blog?

Pensaci... :)

L'immagine di Monty viene da Wikipedia, le schermate del sito repubblica.it sono state prese dal sito stesso.

09/07/2014

di Maurizio Delmonte 07:43:15

5 motivi per migrare a Plone 5 appena sarà rilasciato.

L’Interfaccia utente completamente ridefinita, con ancora maggiore attenzione ad usabilità ed accessibilità, è solo il più evidente dei molti vantaggi della prossima versione di Plone.

29/06/2014

di Giovanni Giangiobbe 22:00:00

Il video del Plone Open Garden 2014: tutto il PLOG in 2 minuti

Giunto alla sua ottava edizione, anche quest’anno il Plog, che si è tenuto a Sorrento dal 22 al 26 Aprile 2014, ci ha regalato grandi soddisfazioni

25/06/2014

di Giovanni Giangiobbe 07:01:00

Manuale Plone 4

Il manuale per editori e manager di contenuti del nostro CMS di riferimento, nel comodo formato ePub

24/06/2014

di Luca Fabbri 07:55:00

Plone e risorse JavaScript/CSS: alcuni consigli per buone prestazioni

Di recente siamo stati incaricati di occuparci dell'ottimizzazione di front-end di un sito Plone. Il lavoro è stato svolto sotto molti aspetti, ma nel seguito di questo articolo mi occuperò solo di uno dei recenti mantra che sta imperversando nel web relativamente all'ottimizzazione del front-end: limitare il numero di connessioni HTTP della pagina.

Perché? In poche parole: per quanto la risorsa sia piccola o grande, il problema è la connessione alla risorsa e i tempi di latenza che questa introduce.

Stato del sito

Il sito in questione ha una storia piuttosto lunga, è in produzione da anni; questo si traduce spesso in una lunga lista di prodotti aggiuntivi installati e modifiche varie effettuate al tema grafico o ai prodotti aggiuntivi stessi.

Altra caratteristica importante: è un Plone 4.2, ma la sua storia è iniziata con la versione 3.3. Si è passati attraverso un processo di migrazione della versione di Plone.

Infine: il tema grafico, anche se migrato a Plone 4, è fondamentalmente fedele al vecchio stile della realizzazione Plone 3 (in due parole: no Diazo).

Strumenti utilizzati

Per testare le prestazioni di front-end di un sito (qualunque sia la tecnologia) ci sono vari strumenti disponibili sia come estensioni dei più noti browser (YSlow, Google PageSpeed), sia come strumenti online (GTMetrix, PageSpeed Insights).
Il primo consiglio che posso darvi è: provateli tutti, e magari utilizzatene più di uno.

In forma diversa, tutti questi strumenti testano più o meno le stesse best practice, indicando un voto per ognuno dei punti verificati e fornendo delle spiegazioni sul problema rilevato e su come affrontarlo.
Solitamente alcuni punti sono considerati ad alta priorità (quindi errori gravi o accorgimenti che possono dare grandi benefici), mentre altri possono essere considerati peccati veniali.

Tornando all'argomento di questo articolo: questi strumenti avevano individuato un problema relativo all'eccessiva presenza di risorse CSS e JavaScript caricate.
Stiamo parlando di:

  • 22 CSS
  • 14 JavaScript.

ResourceRegistries

Che siano amati od odiati (varie persone nella comunità Plone pensano che la loro introduzione non sia stata una grandissima idea), ad oggi l'uso dei tool portal_css e portal_javascript è il metodo principale per permettere a prodotti aggiuntivi e temi grafici di registrare risorse.

L'uso di Diazo dovrebbe mitigare notevolmente questa necessità, ma credo che nel futuro prossimo questi due tool rimarranno comunque qualcosa con cui dovremmo convivere.

Il loro lavoro è piuttosto importante:

  1. raccolgono tutti i JavaScript/CSS registrati, rispettando un dato ordine
  2. permettono di includere delle condizioni di inclusione basate sullo stato di autenticazione dell'utente ("Restrict to authenticated users?")
  3. permettono di inserire condizioni di inclusione basate su un'espressione ("Condition")
  4. permettono di fornire i commenti di inclusione condizionali (funzionalità utilizzabile solo da Internet Explorer)
  5. permettono di specificare se la risorsa può essere messa nella cache del browser utente ("Caching allowed")
  6. effettuano una minificazione della risorsa ("Compression type", seppur non ottimale se confrontata con altri servizi)
  7. permettono di specificare il tipo di media e il rel type (solo CSS)
  8. permettono di specificare la modalità di inclusione nella pagina ("Render type" per CSS e flag "Inline rendering" per JavaScript)
  9. raggruppano più risorse per poter fornire un'unica risorsa da scaricare, riducendo le connessioni HTTP effettuate (flag "Merging allowed")
  10. Permettono di definire dei "bundle" logici di risorse ("Bundle").

Configurazione del portal_cssConfigurazione del portal_javascript

... aspettate! Ma quindi dove starebbe il problema? Non basta verificare che il flag "Merging allowed" sia sempre attivo? Fantastico!

Limiti dei ResourceRegistries

Com'era possibile che, seppur utilizzando questi due tool, le risorse richieste dalla home page del sito fossero così tante? Il raggruppamento quindi non funziona?

Risorse facilmente raggruppateIl problema nasce da alcune delle funzionalità che portal_javascript e portal_css offrono e che ho messo in evidenza nelle immagini sopra, aggiungendovi un numero in rosso. Chiamiamole "configurazioni cruciali" da qui nel seguito, e con questo intendiamo che tali configurazioni possono influire sul numero di risorse fornite.
Vediamo come.

La regola principale di questi due tool sta nel rispettare l'ordine delle risorse fornite: che siano fogli di stile o sorgenti JavaScript, l'ordine di esecuzioni conta (soprattutto per gli script, dove la questione diventa delicata).

Preview risorse perfettamente accorpateIn una situazione semplice/ideale, quando abbiamo qualcosa come cinque risorse tutte egualmente configurate, il raggruppamento funziona senza problemi.
E' sempre possibile tenere sotto controllo lo stato del raggruppamento dal tab "Merged CSS Composition" e "Merged JS compisition" dei due tool.

La logica del raggruppamento è però applicabile solo se c'è eguaglianza delle condizioni delle risorse registrate. Se, all'interno della sequenza di risorse fornita, una di queste ha una delle configurazioni cruciali differente, la sequenza viene spezzata.

Facciamo un esempio: se una risorsa è definita come non gestibile dalla cache del browser (ma lo stesso vale per tutte le altre configurazioni cruciali), questa dovrà essere inviata al browser con un header HTTP differente dalla sequenza di risorse che la precedono o che la seguono. Questo spezza la sequenza.
Ammettendo di avere una serie di 5 risorse come in figura, se la risorsa numero 3 ha una configurazione differente dalle altre quattro presenti, ResourceRegistries non potrà fare altro che generare ben 3 risorse differenti:

  • una prima risorsa contenente l'unione tra 1 e 2
  • una seconda risorsa contenente la sola 3
  • una terza risorsa contenente 4 e 5.

Risorse non ben raggruppatePreview risorse non ben accorpate

Da qui è facile capire come si possa arrivare a un alto livello di frammentazione, visto l'alto numero di configurazioni cruciali presenti e le loro possibili combinazioni.

Problemi comuni riscontrati

Dei molti possibili scenari che l'analisi sopra può avervi suggerito, vale la pena sottolinearne alcuni che reputo quantomeno interessanti.

Risorse per utenti autenticati o con condizioni

In linea di principio la restrizione delle risorse dovrebbe migliorare le performance: sembrerebbe logico supporre che sia inutile fornire a un utente anonimo un pezzo di codice JavaScript/CSS (che il suo browser interpreterà), se questo poi non verrà effettivamente utilizzato.

Eppure questo può non essere vero e può addirittura peggiorare le performance per utenti anonimi e autenticati!

Tornando alle 5 risorse dell'esempio sopra, se ammettiamo che la ricorsa C abbia il flag per la restrizione a utenti autenticati attivo, gli utenti autenticati otterranno 3 risorse differenti... e gli utenti anonimi 2.
Perché gli anonimi non ricevono una sola risorsa? Il ResourceRegistries non è così avanzato da "unire" due gruppi (AB + DE) se la risorsa che ha spezzato il flusso non viene nei fatti fornita; questo significherebbe avere configurazioni differenti potenzialmente per ogni utente.

Fate quindi attenzione: non sempre vale la pena impostare condizioni per evitare che la risorsa arrivi all'utente finale. Tenete presente sempre che la risorsa potrebbe essere compressa e accorpata con altre risorse e l'effettivo guadagno sarebbe quindi minimo, estremamente inferiore al dover scaricare una risorsa aggiuntiva (ricordate che la latenza è il nemico).

  • Se la risorsa è un CSS: forse vale la pena scrivere un CSS sempre incluso, ma con delle regole tanto specifiche da applicarsi solo ai template corretti (le classi aggiuntive aggiunte al tag BODY aiutano moltissimo).
  • Se la risorsa è un JavaScript la questione è più delicata, ma si potrebbe lavorare per interrompere in fretta l'esecuzione di codice costoso se non applicabile alla pagina corrente, o usare altri meccanismi di lazy loading.

Nessuna delle regole sopra va presa come oro colato... la valutazione dei costi e benefici dipende dalla vostra installazione e dalle risorse in esame.

Uso di "import" come "Render type"

I tutorial in rete che dicono di non usare la direttiva @import per includere i CSS si sprecano. Per ragioni che si perdono nelle nebbie del tempo, Plone 3 utilizzava massivamente questo modo di includere CSS, mentre recenti prodotti aggiuntivi e versioni di Plone preferiscono (giustamente) link.

Come già detto, il sito in esame veniva da una migrazione da Plone 3. Ci si è quindi accorti che la migrazione non aveva modificato il render type: ci siamo trovati con un uso massiccio di @import... Anche ignorando i consigli di evitare l'uso di @import, ricordate che il rendering type è una delle configurazioni cruciali!
Quindi, non mischiate import e link: l'unico effetto che otterrete è quello di spezzare la sequenza.

Risolvere i problemi del sito

Il lavoro svolto per ridurre quel grande numero di connessioni è stato prettamente manuale e di analisi:

  • si è tentato di ridurre al minimo le condizioni di inclusione
  • si è tentato di riordinare le risorse (con le dovute attenzioni) perché ci fossero due blocchi di risorse: una per tutti e una per gli autenticati
  • altre condizioni di inclusione particolari sono state valutate meglio, ed eliminate
  • sono stati modificati i render type dal misto di @import e link al solo uso di link.

Il risultato finale? Riferendosi alla sola homepage del sito sì è passati da 22 a 2 CSS, e da 14 a 2 JavaScript!

Ma un Plone "base" come si comporta?

Ci si potrebbe aspettare che i problemi del sito in esame fossero dovuti alla sua lunga storia e all'alto numero di prodotti aggiuntivi, e questo è innegabile.
Un Plone 4.3 "base", appena uscito dalla fabbrica, sarà ovviamente tutt'altro che mal configurato, giusto?

Eppure anche qui non mancano le sorprese!

CSS

Stato CSS Plone base

Come si vede nella figura precedente, ci sono 7 CSS... eppure sarebbe possibile fare di meglio!

  • Se member.css fosse incluso prima del reset.css, quest'ultimo si accorperebbe col blocco che segue
  • plone.app.jquerytools.dateinput.css delle jQueryTools usa il metodo di inclusione import e non link
  • ploneCustom.css deve sempre essere l'ultimo della sequenza... ma se non lo usate (non avete modifiche TTW attive): perché non disattivarlo?
  • RTL.css è il supporto per le lingue arabe e si attiva solo in ben determinati casi, ma verificare che venga incluso dopo plone.app.jquerytools.dateinput.css così da non interrompere il suo accorpamento
  • IEFixes.css: verificate che non rompa nessuna sequenza.

Così facendo potremmo migliorare la situazione come segue:

Stato CSS Plone base (ottimizzato)

JavaScript

La situazione dei JavaScript di un sito Plone 4.3 base è già ottimale!

Stato JavaScript Plone base

Dall'accorpamento otteniamo solo due JavaScript, col secondo blocco riservato agli utenti autenticati, ma i problemi potrebbero iniziare molto presto, non appena l'installazione dei prodotti aggiuntivi ha inizio.
Se un prodotto registra un nuovo JavaScript lo metterà probabilmente in fondo (comportamento di default) e se questo fosse ad uso di tutti gli utenti, verremmo a creare un terzo blocco. In questo caso andrebbe invece spostato alla fine del primo blocco.

Conclusione

L'ottimizzazione di front-end di un sito Plone è un'attività tutto sommato semplice, ma come avrete capito è qualcosa che va mantenuto e monitorato nel tempo.

Spero di avervi incuriosito abbastanza da farvi correre a controllare lo stato del vostro sito! Potreste individuare in fretta ampi margini di miglioramento :)

16/06/2014

di Maurizio Delmonte 07:49:00

Report dal Plone Mosaic sprint di Barcellona, ecco i risultati.

Mosaic vuole offrire a utenti e sviluppatori del cms Plone un modo di composizione delle pagine più potente e flessibile.

09/05/2014

di Maurizio Delmonte 14:08:03

Breve resoconto dal PLOG 2014

Alla sua ottava edizione, il Plone Open Garden ha visto una grande partecipazione della comunità internazionale, che ha dato vita a cinque giorni intensi di talk, sprint e open space.

09/05/2014

di Giorgio Borelli 07:59:00

Il World Plone Day 2014 a Bologna

Un breve resoconto del WPD che si è tenuto a Bologna. Un evento incentrato sull'uso di Plone nella Pubblica amministrazione.

07/05/2014

di Valentina 22:53:46

Il mio World Plone Day 2014

Per il quarto anno consecutivo la regione Emilia Romagna ha organizzato il World Plone Day e quest’anno, per la prima volta, ho partecipato anch’io all’evento presentando il caso d’uso dell’Università di Bologna.

Plone    programma

“Pubblica amministrazione” è la parola d’ordine nel World Plone Day bolognese; gli interventi sono infatti incentrati su questo argomento e vengono presentati diversi casi sull’utilizzo di Plone nella pubblica amministrazione italiana.

La giornata è divisa in due sessioni: la prima comincia alle 9:30 alla “Terza torre” in Fiera a Bologna ed è la parte dedicata ai Talk.

La Regione Emilia Romagna, fedele da diverso tempo a Plone, ci racconta i suoi pensieri e l’importanza del software libero e della community, anticipando quelli che poi saranno gli argomenti principali nel pomeriggio.
Segue il talk di Unibo, cioè il mio, dove presento l’esperienza della nostra Università che ha adottato Plone con successo dal 2012. Attualmente Plone è utilizzato su un’ottantina di siti dell’ateneo, tra cui il portale principale.
Continuamo con MoInMo un’applicazione presentata dal comune di Modena per la valorizzazione del centro storico della città.

Un ottimo Coffee break per fare due chiacchiere e poi si ricomincia.

E’ il turno di RedTurtle che presenta iopartecipo+ un servizio realizzato per la Regione Emilia Romagna, in cui Plone si tinge di social per il confronto tra i cittadini su diverse tematiche.
GisWeb ci racconta del servizio realizzato per il comune di La Spezia con cui gli utenti possono segnalare disagi e problemi in giro per la città.
E’ il turno di Abstract che ci parla di migrazioni con 70000 oggetti migrati all’interno di un portale Plone nel loro caso d’uso su ISPRA,.
I talk si concludono con la presentazione del regalo che tutti noi vorremmo sotto l’albero di Natale quest’anno: Plone 5.

Dopo un pranzo veloce si comincia con la sessione pomeridiana in cui RedTurtle cambia la parola d’ordine in “Community”.
Vengono raccontati quali sono i luoghi, reali o virtuali, in cui si può incontrare la comunità Plone, come interagire, come documentarsi, come partecipare e quali sono in vantaggi di avere una community solida come la nostra.

wpd

 

Il tutto si conclude con un ottimo aperitivo :)

Ringrazio sia la regione che RedTurtle per l’organizzazione dell’evento.
Ci vediamo al prossimo World Plone Day.

Le slide del mio intervento le trovate a questo link: http://www.slideshare.net/valentinabolognini1/plone-alluniversit-di-bologna-il-portale-e-il-multilingua