Abbiamo riunito tutti gli RSS che parlano di Plone.

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

Ultimo aggiornamento: 23/09/2014 02:15:16

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


18/04/2014

di Giorgio Borelli 15:39:00

Come riscaldare la cache del nostro CMS con collective.warmup

collective.warmup è uno strumento che consente di riscaldare la cache di un sito web leggendo un file di configurazione e passando in rassegna una serie di pagine in maniera automatizzata.

10/04/2014

di abstract 07:48:00

Webinar 1 - Introduzione a Plone, il CMS scritto in Python

Il primo webinar Abstract del 2014, dedicato al nostro amato CMS Plone.

03/04/2014

di dmoro 10:23:45

Gestione avanzata keyword con Plone - appendice (molte keyword)

Appendice finale alla serie di articoli "Gestione avanzata keyword con Plone". Argomento: grossi portali e widget autocomplete

01/04/2014

di sauzher 09:35:21

[solved] AttributeError: type object ‘IThemeSpecific’ has no attribute ‘isOrExtends’

Il Grande Capo Estiqaatsi direbbe:  – eh, grosso problema ora c’è -“. Il problema si manifesta nel caso in cui disinstallate un prodotto del quale avevate customizzato una sua viewlet… qualcosa del tipo: 1) installo mio.prodotto 2) customizzo da zmi -> portal_view_customizations una viewlet di mio.prodotto 3) disinstallo il mio.prodotto (ach! ho dimenticato di cancellare […]
Il Grande Capo Estiqaatsi direbbe:  – eh, grosso problema ora c’è -“. Il problema si manifesta nel caso in cui disinstallate un prodotto del quale avevate customizzato una sua viewlet… qualcosa del tipo: 1) installo mio.prodotto 2) customizzo da zmi -> portal_view_customizations una viewlet di mio.prodotto 3) disinstallo il mio.prodotto (ach! ho dimenticato di cancellare […]

26/03/2014

di Luca Bellenghi 09:30:00

Migrazioni e sorprese: cose che bisogna saper gestire

Oggi voglio condividere con voi un piccolo problema e relativa soluzione capitati pochi giorni fa lavorando a una migrazione da Plone 3 a Plone 4

Diversi giorni dopo aver terminato la migrazione, preparando i contenuti per il nuovo portale, mi sono ritrovato a navigare un'area di contenuti basati sullo stesso tipo di documento di altrettanti già verificati, per cui non mi aspettavo nulla di strano e problematico. Invece...

Il problema

Invece mi sono trovato sul monitor una pagina bianca con scritto (riassumendo) "broken object"! Cosa può essere successo? Problemi nella migrazione? Codice non aggiornato correttamente alla versione Plone 4? Codice completamente mancante per quei tipi di oggetto?

Nel mio caso, si trattava di una versione non aggiornata del prodotto "incriminato": durante il porting a Plone 4, non essendo presente la classe da cui è stato istanziato l'oggetto in questione, il risultato è stato una procedura di migrazione che non ha prodotto errori (non bloccanti quantomeno, magari qualcosa nei log era indicato) e un oggetto corrotto nel sito.

L'errore

In console, in corrispondenza della navigazione sull'oggetto corrotto, l'unica cosa che ho potuto vedere è stata:


Traceback (innermost last): ....... Module plone.app.folder.base, line 65, in index_html Module plone.folder.ordered, line 202, in __contains__ TypeError: argument of type 'NoneType' is not iterable

Mentre cercando di visitare la stessa sezione in zmi:

 
Traceback (innermost last): .......... Module Products.BTreeFolder2.BTreeFolder2, line 332, in objectCount TypeError: 'NoneType' object is not callable

Bene. L'errore indica un problema con oggetti di tipo folderish e come ben sappiamo (o dovremmo sapere) ci sono stati profondi cambiamenti nella struttura delle cartelle da Plone 3 a Plone 4.

Questo mi ha indicato che il problema risiedeva proprio nell'implementazione delle nuove cartelle e nel fatto che quelle corrotte nel sito non sono state migrate correttamente.

Facciamo pulizia

Vediamo come fissare la situazione. Uno degli step di migrazione da Plone 3 a Plone 4 è, appunto, la migrazione delle cartelle.

Controllando il codice, si può verificare che questa migrazione è ottenuta chiamando una vista sulla radice del sito: "@@migrate-btrees" presente dentro al pacchetto plone.app.folder.

Questa vista, fra l'altro, non è necessario chiamarla nella radice del sito perché, come si può vedere nel codice, l'analisi degli oggetti viene fatta a partire dal contesto in cui la vista viene chiamata.

        
....
for path, obj in findObjects(self.context): if isinstance(obj, BTreeFolder): if self.migrate(obj): processed += 1 cpi.next() self.postprocess(obj)
....

Una volta terminato il processo di migrazione delle cartelle, queste ancora non compariranno navigando il sito, ma il più è fatto. A questo punto, infatti, basta fare un update del catalogo oppure indicizzare nuovamente almeno i contenuti di quella cartella.

Immagini di http://www.flickr.com/photos/photowest/