<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns="http://purl.org/rss/1.0/">




    



<channel rdf:about="http://blog.redturtle.it/case-study/RSS">
  <title>Case study</title>
  <link>http://blog.redturtle.it</link>

  <description>
    
      
    
  </description>

  

  
            <syn:updatePeriod>daily</syn:updatePeriod>
            <syn:updateFrequency>1</syn:updateFrequency>
            <syn:updateBase>2012-05-08T16:02:35Z</syn:updateBase>
        

  

  <image rdf:resource="http://blog.redturtle.it/logo.png"/>

  <items>
    <rdf:Seq>
      
        <rdf:li rdf:resource="http://blog.redturtle.it/come-gestire-l-iscrizione-alle-notifiche-di-un-sito-con-le-rule-di-plone"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/analisi-modifica-come-plone-genera-link-file-pt2"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/analisi-modifica-come-plone-genera-link-file-pt1"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/gallerie-slider-immagini-sito-web-20-esempi"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/giochi-sotto-lombrellone-flask"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/plone.app.linkintegrity-trouble"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/earthquake-plone-to-the-rescue"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/un-mondo-di-newsletter-parte-3"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/un-mondo-di-newsletter-parte-2"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/un-mondo-di-newsletter-parte-1"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/appunti-su-stanca-wcag-accessibilita"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/arpav-la-pazienza-premiata"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/sant-agostino-consip"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/plone-in-10-secondi"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/sottositi-in-plone-la-nostra-soluzione"/>
      
    </rdf:Seq>
  </items>

</channel>


  <item rdf:about="http://blog.redturtle.it/come-gestire-l-iscrizione-alle-notifiche-di-un-sito-con-le-rule-di-plone">
    <title>Come gestire l'iscrizione alle notifiche di un sito con le rule di Plone</title>
    <link>http://blog.redturtle.it/come-gestire-l-iscrizione-alle-notifiche-di-un-sito-con-le-rule-di-plone</link>
    <description>E' possibile permettere agli utenti di restare sempre informati sulle novità di un sito? Certo, con le contentrules e l'invio delle notifiche via mail</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Lo ammetto, quando si avvicina il momento di scrivere un nuovo post del blog mi sembra sempre di non avere argomenti interessanti o di approfondire argomenti già raccontati (vedi i miei <a href="http://blog.redturtle.it/content-type-products-contentmigration" class="internal-link">innumerevoli</a> <a href="http://blog.redturtle.it/migrazione-plone-4-tips-and-tricks" class="internal-link">post</a> sulle <a href="http://blog.redturtle.it/rt.atmigrator-pensioniamo-vecchi-tipi-con-un-click" class="internal-link">migrazioni</a>, per esempio).</p>
<p>Poi, però, capita che un paio di giorni prima della scadenza (argomento già trattato da Ale in un <a href="http://blog.redturtle.it/mi-piacciono-le-bagigie" class="internal-link">post precedente</a>) arrivi una richiesta di un cliente che mi accende la lampadina e mi da il <strong>LA</strong> per scrivere il mio prossimo articolo.</p>
<p>Il caso di studio che vi racconto è partito da una semplice richiesta:</p>
<p class="callout">Sarebbe possibile permettere agli utenti del sito di rimanere sempre aggiornati con i nuovi contenuti del sito?</p>
<blockquote class="pullquote">Usiamo le contenrules! Un gioco da ragazzi!</blockquote>
<a name="anchor-breaktext"></a><div class="breakText">Il mio primo pensiero è andato subito alle <strong>regole</strong>: una funzionalità nativa di Plone che permette di definire una (o più di una) certa azione da fare al verificarsi di un (o più di uno) determinato evento. Per esempio, in questo caso mi sarebbe bastato creare una regola che si attivava alla creazione di determinati contenuti, e come azione inizialmente pensavo di spedire una mail agli utenti utilizzando <a class="external-link" href="https://pypi.python.org/pypi/collective.contentrules.mailtogroup">collective.contentrules.mailtogroup</a> per gestire la lista di indirizzi. Non c'era da sviluppare nulla di nuovo e in due minuti impostavo il tutto. Più facile di così, si muore.</div>
<p><img src="http://blog.redturtle.it/topic_images/data.jpg/@@images/dfaa0819-f5fb-4bd7-812f-a87c3f1fc3a8.jpeg" alt="" class="image-right" title="" /></p>
<p>Ma la domanda nascondeva qualche trabocchetto (o come direbbe Data, un tracobbetto): infatti gli "<i>utenti</i>" potevano anche essere utenti <i>anonimi</i>, e gli utenti stessi dovevano potersi iscrivere liberamente alle notifiche, senza passare per un gestore intermedio (ingenuamente mi ero illuso di poter creare un form di richiesta con <a class="external-link" href="https://pypi.python.org/pypi/Products.PloneFormGen">Products.PloneFormGen</a> in modo che poi i gestori potessero raccogliere le iscrizioni e gestire le liste di notifiche direttamente nella regola).</p>
<p>A questo punto, dopo alcune ricerche, era chiaro che nessuno dei prodotti disponibili faceva al caso mio.<br />Dovevo quindi studiare un modo per soddisfare questa richiesta e donare alla comunità un nuova utile funzionalità. Per questo è nato <strong>collective.contentrules.subscription</strong>.</p>
<p>E' un prodotto molto semplice che ha due componenti principali: una nuova azione per le regole e un tool che memorizza le varie sottoscrizioni.</p>
<p>Nell'azione da associare alle regole si possono inserire il soggetto e il testo della mail che verrà poi spedita, e quando viene scatenata questa azione, la lista di email a cui spedire la notifica è presa interrogando il tool e recuperando la lista di indirizzi a lei associata.</p>
<p>Lato utente, è presente una vista che mostra tutte le possibili regole disponibili (ovviamente solo quelle che hanno la nostra nuova azione impostata), da cui può scegliere a quali iscriversi. E' previsto anche un controllo di prevenzione per lo spam sfruttando <a class="external-link" href="https://pypi.python.org/pypi/collective.z3cform.norobots">collective.z3cform.norobots</a>.</p>
<p><img src="http://blog.redturtle.it/topic_images/iscrizione_rules.png" alt="Iscrizione notifiche" class="image-inline" title="Iscrizione notifiche" /></p>
<p>Esiste poi anche un pannello di controllo per i gestori del sito, che permette di avere una panoramica sullo stato delle iscrizioni ed eventualmente intervenire per rimuoverne.</p>
<p><img src="http://blog.redturtle.it/topic_images/controlpanel_rules.png/@@images/be49399f-16c3-43fd-9e15-7a55c802dbe1.png" alt="Controlpanel rules" class="image-inline" title="Controlpanel rules" /></p>
<p>Il tutto ovviamente è versionato e disponibile su <a class="external-link" href="https://github.com/RedTurtle/collective.contentrules.subscription">github</a>, quindi se vi piace l'idea e volete contribuire a migliorarlo, siete i benvenuti :)</p>
<p><br />Questa è una versione di partenza e mancano diverse funzionalità utili che potrebbero essere introdotte nelle prossime versioni, come per esempio la possibilità da parte degli utenti di visualizzare le proprie iscrizioni ed eventualmente cancellarsi, e anche un maggior livello di sicurezza nella gestione delle sottoscrizioni (ad esempio con un passaggio di validazione e conferma dell'indirizzo inserito).</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Andrea Cecchi</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>python</dc:subject>
    
    
      <dc:subject>mail</dc:subject>
    
    
      <dc:subject>products</dc:subject>
    
    
      <dc:subject>release</dc:subject>
    
    <dc:date>2013-05-09T12:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/analisi-modifica-come-plone-genera-link-file-pt2">
    <title>Analisi (e modifica) di come Plone genera link ai File - seconda parte</title>
    <link>http://blog.redturtle.it/analisi-modifica-come-plone-genera-link-file-pt2</link>
    <description>Continua il viaggio e l'analisi dei prodotti per rendere Plone compatibile con software di statistiche</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Nella <a class="external-link" href="http://blog.redturtle.it/2013/05/03/analisi-modifica-come-plone-genera-link-file-pt1">prima parte dell'articolo</a> abbiamo risolto solo una parte del problema per rendere gli URL di Plone più "parlanti".</p>
<p>Vediamo ora come affrontare i problemi restanti.</p>
<h2>Fase 2: come trattare il pregresso</h2>
<p>Infatti è solo ora che le cose si fanno interessanti...</p>
<p>Ci siamo trovati di fronte a un grosso problema: come "bonificare" la situazione creatasi negli anni precedenti alle modifiche sopra descritte?</p>
<p>Sarebbe stato possibile scrivere una procedura automatica che sistemasse automaticamente tutti i link generati tramite TinyMCE dalla forma canonica alla forma di download modificata?<br />La risposta per noi è stata "forse... ma meglio di no". Si parlava di centinaia (migliaia) di link, per decine di siti Plone.</p>
<p>L'eventualità di eseguire qualcosa senza un intervento umano era a dir poco terrificante, col rischio di trovare contenuti rovinati dall'operazione dopo mesi.<br />Molto meglio aiutare l'utente a sistemare il problema, cercando per lui i potenziali link da sistemare ma chiedendo conferma dell'operazione: un lavoro di certo più lungo ma che dà la sicurezza del risultato.</p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText"></div>
<p>Il primo passo è stato quindi quello di riprendere uno spike, un prodotto mai rilasciato che si occupava di ricerca all'interno del testo Plone usando espressioni regolari, e renderlo qualcosa di utilizzabile da interfaccia Plone: <a class="external-link" href="https://plone.org/products/rt.bulkmodify">rt.bulkmodify</a>.</p>
<p>Il prodotto presenta un'interfaccia Plone che permette di <strong>cercare testo all'interno dei contenuti del sito</strong>. Quando il testo viene trovato, una tabella viene popolata con i risultati.</p>
<p>Visto che questo tipo di operazione richiede il risveglio dei contenuti Plone, il tempo richiesto per completarsi su un sito molto popolato potrebbe essere tanto lungo da mandare in timeout la richiesta, quindi la scelta presa è stata quella di fornire un'<strong>interfaccia JavaScript reattiva, completamente basata su chiamate AJAX</strong>.<br />Se tutta l'operazione dovesse durare anche 20 minuti, questa viene spezzata in tante piccole chiamate che terminano velocemente.</p>
<p>Oltre alla ricerca è poi possibile eseguire la <strong>sostituzione del testo trovato</strong>, sempre sfruttando le espressioni regolari.</p>
<p>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" height="700" width="100%">
<param name="src" value="uploads/rt.bulkmodify-demo.swf"><embed height="700" width="100%" src="uploads/rt.bulkmodify-demo.swf" type="application/x-shockwave-flash"></embed>
</object>
</p>
<p>C'è un problema: una semplice espressione regolare con sostituzione testuale non può sistemare il problema perché non c'è modo di sapere, senza un'analisi del contenuto Plone, il nome reale del file caricato.</p>
<p>Il prodotto doveva quindi essere <strong>estendibile</strong>, permettendo di lanciare speciali operazioni lato server di sostituzione del testo, per individuare i link interni ai file e trasformarli nella forma voluta. Tutto questo è stato di nuovo inserito nel prodotto specifico del Cliente ma senza tradire l'idea iniziale: sarà una persona in carne e ossa che supervisionerà e deciderà cosa sostituire e cosa no.</p>
<h2>Link a file... esterni!</h2>
<p>L'ultimo pezzo del puzzle riguarda i link tra siti diversi.<br />Il Cliente ha un grande numero di siti Plone che, per fortuna, condividono il 90% dei prodotti installati.</p>
<p>La necessità di sistemare le statistiche era quindi valida anche per link ad altri siti del Cliente.<br />Se quindi un sito nel dominio "http://sub1.vostro-host.com/" conteneva un link a un file in un altro sito "http://sub2.vostro-host.com/", questo link al file avrebbe dovuto rispettare la regola di essere comprensibile al software di raccolta statistiche.</p>
<p>Nel caso di nuovi link, tutto ciò diventa lavoro del redattore: è lui che deve fornire il link corretto per il download (copiandolo dalla vista di downalod del file, che ora monta rer.downloadurl)...</p>
<p>...ma ancora una volta: come sistemare il pregresso??</p>
<p>La soluzione è stata quella di scrivere un nuovo plugin che sfruttasse le caratteristiche di Plone scoperte per capire se i link, anche quando esterni, fossero link a file Plone.</p>
<p>Per fare questo occorre:</p>
<ul>
<li>cercare gli URL nel testo</li>
<li>per ogni URL, tentare di scaricare lo stesso aggiungendovi in fondo "/at_download/file" (se ok: probabilmente è Plone!)</li>
<li>se si ottiene una risposta con un header che identifica il nome reale del file, salvare questo nome</li>
<li>generare l'URL aggiungendovi "/at_download/file" e il nome del file.</li>
</ul>
<p>Il Cliente era interessato a sistemare solo i propri link interni (intesi come: link ad altri siti dell'organizzione) e quindi l'espressione regolare di ricerca è stata limitata agli URL contenenti il nome host corretto, anche perché aprire connessioni a URL esterni a un sito può (ulteriormente) rallentare la procedura.</p>
<h2>Conclusione</h2>
<p>La Storia ha avuto un lieto fine, anche grazie a una serie di prodotti con compiti ben separati.</p>
<p>Ma probabilmente varrebbe la pena sistemare tutto questo direttamente alla fonte: tra i tanti pregi di Plone c'è sempre stato quello di avere gli "URL parlanti", quindi credo valga la pena rendere gli URL ai file già <strong>leggibili dagli HTTP log</strong>.</p>
<p class="callout">Non ha senso (e confonde) avere più modi per accedere alla stessa informazioni in modi "simili".</p>
<p>Che ne dite?</p>
<p><span class="discreet">L'immagine in testata è di <a class="external-link" href="http://www.flickr.com/photos/8741037@N08/">mothemagicdragon</a>.</span></p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Luca Fabbri</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>tutorials</dc:subject>
    
    
      <dc:subject>products</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    <dc:date>2013-05-07T09:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/analisi-modifica-come-plone-genera-link-file-pt1">
    <title>Analisi (e modifica) di come Plone genera link ai File: una storia vera (parte 1)</title>
    <link>http://blog.redturtle.it/analisi-modifica-come-plone-genera-link-file-pt1</link>
    <description>L'esigenza: rendere i link ai file generati in Plone compatibili con software di statistiche e come una serie di prodotti riutilizzabili abbiamo risolto il problema</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h2>C'era una volta il File in Plone</h2>
<p>Questa Storia parte da un Cliente non molto contento del modo in cui Plone gestisce i file.<br />Nel caso non lo sappiate, c'è una certa confusione a riguardo.</p>
<p>Se nel vostro sito Plone vi collegate all'indirizzo diretto a un file, nella forma...</p>
<p style="padding-left: 30px; ">http://vostro-host.com/percorso/al/file.pdf</p>
<p>...il file in questione viene "aperto direttamente": gli header inviati da Plone scatenano l'apertura del file "<i>inline</i>", quindi sfruttando eventuali plugin del browser, se presenti.<br />Questo tipo di comportamento ha<strong> problemi di usabilità</strong>: utenti che non capiscono di essere ancora "<i>dentro al browser</i>" potrebbero chiudere il browser pensando che si tratti di un programma esterno. Se l'utente poi vuole scaricare il file dal plugin, deve trovarne la funzione all'interno dello stesso.</p>
<p>Eppure se arrivate allo stesso file dall'interfaccia Plone (dal navigatore del sito, da una delle viste, ...) vi troverete a un URL diverso:</p>
<p style="padding-left: 30px; ">http://vostro-host.com/percorso/al/file.pdf/view</p>
<p>Questo è l'indirizzo della vista del contenuto file (<strong>file_view</strong>) da cui potete vedere alcune informazioni sul file e da dove viene mostrato il link per scaricarlo, che assume invece questa forma:</p>
<p style="padding-left: 30px; ">http://vostro-host.com/percorso/al/file.pdf/at_download/file</p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText"></div>
<p><strong>NB</strong>: per alcuni, passare prima dalla vista del contenuto file è solo una perdita di tempo... e un click inutile. Per altri, se il navigatore facesse scaricare direttamente il file (funzionalità semplice da ottenere con Plone), sarebbe inconcepibile: capirete quindi che non esiste una soluzione universale.</p>
<h2>La Storia si complica</h2>
<p>Il <strong>contenuto File</strong> in Plone è uno di quei pochi tipi dove il <strong>campo titolo non è obbligatorio</strong>.</p>
<p>Partendo da Plone 4 (con l'inclusione di <i>plone.app.blob</i> nel core Plone) è stata introdotta un'altra grossa differenza: prima di Plone 4, caricare un file con e senza titolo non aveva differenze sull'URL generato: l'id del file (che determinava anche l'URL) era sempre lo stesso: il nome del file caricato.<br />Con Plone 4 il campo titolo è rimasto opzionale ma, se venisse fornito, questo verrà utilizzato per generare l'id del contenuto (come per tutti gli altri tipo Plone).<br />Se dovessimo quindi caricare lo stesso "<i>file.pdf</i>" con il titolo "<i>Il mio file PDF</i>", otterremmo in realtà questo URL:</p>
<p style="padding-left: 30px; ">http://vostro-host.com/percorso/al/il-mio-file-pdf</p>
<h2>TinyMCE (la Storia diventa un gran caos)</h2>
<p>Avete mai fatto caso <strong>al modo in cui TinyMCE genera link ai file</strong>? Li tratta in modo diverso dagli altri contenuti?<br />No!</p>
<p>Usando il comodo plugin per i link interni, TinyMCE genera un semplice <i>link diretto al file</i>, che per quanto visto sopra è il link che determina l'apertura del file <i>inline</i>.</p>
<p>Vediamo di ricapitolare; la situazione è la seguente:</p>
<ul>
<li>dai navigatori Plone arrivo alla vista dei file ("/view")</li>
<li>da questa vista ho disponibile il link per scaricare il file ("/at_download/file")</li>
<li>usando link generati dall'editor ottengo l'apertura diretta del file <i>inline</i>.</li>
</ul>
<h2>...ed infine le statistiche</h2>
<p>Il colpo di grazia ci viene dato dai <strong>sistemi di statistiche che analizzano i log</strong>. Esistono infatti software che, analizzando i log degli accessi HTTP, sono in grado di individuare se la risorsa scaricata è un file, e di quale tipo.</p>
<p>Il problema di questo approccio è che nel log HTTP non ci sono molte informazioni se non l'URL (questo è un limite universale dell'approccio... Plone e altri CMS non potrebbero fare nulla per evitarlo); per capire quindi se un dato URL si riferisce ad un file PDF, l'unico modo è sperare che l'URL stesso finisca con "<i>.pdf</i>". Nessun header può fare la differenza qui...</p>
<p>Se torniamo ai file di Plone, avrete notato come da quasi nessuno di questi si capisca che si sta per accedere ad un file PDF:</p>
<ul>
<li>http://vostro-host.com/percorso/al/il-mio-file-pdf<br />non finisce con ".pdf"</li>
<li>http://vostro-host.com/percorso/al/il-mio-file-pdf/view<br />non finisce con "<i>.pdf</i>" ma almeno non mente! Non è un link al file, ma solo una vista</li>
<li>http://vostro-host.com/percorso/al/il-mio-file-pdf/at_download/file<br />non finisce con "<i>.pdf</i>"</li>
<li>http://vostro-host.com/percorso/al/file.pdf<br />questo andrebbe bene... peccato che l'unico caso in cui potremmo ottenere questo URL è non fornendo un titolo al file (potreste aggiungere il titolo dopo ma sarebbe troppo scomodo, e dovremmo essere certi che nessuno lo rinomini).</li>
</ul>
<p>Tanto per essere chiari: il Cliente utilizza uno di questi sistemi di statistiche e si è trovato (giustamente) scontento della grande varietà di URL presenti.</p>
<p>Ci è quindi giusta questa richiesta:</p>
<ul>
<li>"niente attivazione di plugin, i file vanno scaricati"</li>
<li>"voglio che gli URL dei file Plone indichino il formato del file".</li>
</ul>
<h2>Fase 1: fermare il problema</h2>
<p>Analizzando la situazione, ci siamo resi conto che il comportamento corretto per scaricare file lo abbiamo solo tramite la chiamata a "<strong>/at_download/file</strong>", che però ha comunque dei problemi:</p>
<ul>
<li>non finisce col nome reale del file</li>
<li>non è utilizzata da TinyMCE.</li>
</ul>
<p>La fortuna ha voluto che il Cliente utilizzasse già da tempo (e con soddisfazione) una variante del plugin dei link a file in Plone: <a class="external-link" href="http://plone.org/products/collective.tinymceplugins.advfilelinks">collective.tinymceplugins.advfilelinks</a>.<br />Se fino ad allora questo plugin si era sempre limitato ad accorgimenti grafici atti ad aumentare l'<strong>usabilità dei link</strong> (in primis: <strong>fornire la dimensione del file che si sta per scaricare</strong>), ora poteva tornarci utile per sistemare una delle funzionalità che TinyMCE non offre: scegliere il <i>tipo</i> di link al file.</p>
<p>Abbiamo quindi rilasciato una nuova versione del prodotto che portasse una nuova funzionalità: poter scegliere se avere un link diretto al file (<i>inline</i>), un link alla vista (<i>preview</i>) del file o un link per scaricare il file - tramite un nuovo menù a tendina.</p>
<p><img src="http://blog.redturtle.it/pypi-images/collective.tinymceplugins.advfilelinks/collective.tinymceplugins.advfilelinks-1.1.0-03.png" /></p>
<p>Per questioni di correttezza verso la comunità che già utilizza questo prodotto non sarebbe stato giusto scegliere un valore di default diverso da quello predefinito di TinyMCE, quindi è stato tenuto come valore predefinito il "<i>link diretto al contenuto</i>".<br />Ma non era nemmeno pensabile che gli utenti del Cliente cambiassero ogni volta quel menù a tendina... è stato quindi usato un prodotto aggiuntivo che "sistemasse" il valore predefinito (funzionalità nativa, prevista dalla nuova versione di <i>collective.tinymceplugins.advfilelinks</i>).</p>
<p>Bene! Ora i link ai file fatti tramite TinyMCE hanno iniziato ad essere link al download reale, tagliando fuori gli eventuali plugin.</p>
<h2>at_download, Quel Permissivo</h2>
<p>Ma rimane il problema cruciale delle statistiche.</p>
<p>Dopo aver eseguito qualche test ci siamo accorti che <strong>la chiamata a "at_download/file" può ricevere altri elementi di percorso senza inficiarne il comportamento</strong>.</p>
<p>La cosa forse è un po' strana, ma richiamando un URL Plone in questo modo...</p>
<p style="padding-left: 30px; ">http://vostro-host.com/percorso/al/il-mio-file-pdf/at_download/file/fasullo.doc</p>
<p>... non ottenete errori: L'URL scatena comunque il download del file (e negli header inviati c'è il vero nome "<i>file.pdf</i>"... non preoccupatevi).<br />Il sistema di statistiche però in questo caso avrebbe (erroneamente) capito che la risorsa scaricata era un file di Word (.doc).</p>
<p>Sfruttando questa "<i>funzionalità</i>" abbiamo reso <i>collective.tinymceplugins.advfilelinks</i> ancora più flessibile, rendendo possibile indicare, tramite un prodotto di terze parti, come generare gli URL nel caso di "<i>URL alla preview</i>" o "<i>URL al download</i>".<br />Nello stesso prodotto di cui sopra è stato quindi cambiato il valore per il download del file da "<i>/at_download/file</i>" a "<i>/at_download/file/nome reale del file</i>".</p>
<p>Infine, la cosa più semplice: cambiare la vista <i>file_view</i> perché mostrasse lo stesso URL di download modificato. Per fare questo è stato rilasciato un micro-pacchetto: <a class="external-link" href="http://plone.org/products/rer.downloadurl">rer.downloadurl</a>.</p>
<p>Ok, missione compiuta: da ora in poi i link ai file saranno amichevoli con il software di statistiche!</p>
<p>... ma i vecchi link?!</p>
<p>Siete curiosi di sapere come finisce? Per ora ho già scritto troppo; per il resto della Storia ci rivediamo martedì prossimo!</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Luca Fabbri</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>tutorials</dc:subject>
    
    
      <dc:subject>products</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    <dc:date>2013-05-03T12:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/gallerie-slider-immagini-sito-web-20-esempi">
    <title>Gallerie e Slider di immagini per il tuo sito web: eccone 20 esempi! </title>
    <link>http://blog.redturtle.it/gallerie-slider-immagini-sito-web-20-esempi</link>
    <description>Durante le mie ricerche ho raccolto tutti i riferimenti agli slider che mi hanno più incuriosito. Scopri anche tu come mostrare le immagini del tuo sito in modo originale!</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p class="p1">La maggior parte dei clienti chiede una <strong>gallery</strong> o uno <strong>slider</strong> nel proprio sito. In effetti, un carousel di immagini può fare una grande differenza e dare quel tocco <i>cool</i> al portale.</p>
<p class="p1">E' per questo che spesso mi piace perdermi alla ricerca di qualcosa di nuovo da proporre. Qui sotto ho elencato una serie di slider e gallery costituiti principalmente da <strong>JQuery plugin</strong> e <strong>CSS3</strong>.</p>
<h2 class="p1"><a class="external-link" href="http://buildinternet.com/project/supersized/">supersized! JQuery plugin</a></h2>
<h3 class="p1" style="text-align: left; ">Supersized è un fullscreen background slideshow costruito utilizzando la libreria jQuery.</h3>
<p class="p1" style="text-align: right; "><strong><a class="external-link" href="http://buildinternet.com/project/supersized/slideshow/3.2/demo.html">DEMO &gt;&gt;</a></strong></p>
<p class="p2"><a class="external-link" href="http://buildinternet.com/project/supersized/"><img class="image-inline" src="http://blog.redturtle.it/uploads/supersized.png/@@images/2c14dd26-c534-42b7-85ad-b2fe0b2e1d48.png" /></a></p>
<p class="p2"><span class="s1"><br /></span></p>
<p> </p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText"></div>
<h2 class="external-link"><a class="external-link" href="http://manos.malihu.gr/sideways-jquery-fullscreen-image-gallery/">SIDEWAYS</a></h2>
<h3 class="p1">Una galleria fullscreen di immagini creata con la libreria jQuery e CSS. La galleria presenta le immagini a schermo intero in diverse modalità e con barre di scorrimento personalizzate.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://manos.malihu.gr/tuts/sideways_jquery_fullscreen_image_gallery.html">DEMO &gt;&gt;</a></strong></p>
<p class="p1"><img class="image-inline" src="http://blog.redturtle.it/uploads/sideways.png/@@images/8bad9c57-9c3e-4e29-b8dd-3aac1f6ea453.png" /></p>
<p class="p1"> </p>
<p> </p>
<h2 class="breakText"><a class="external-link" href="http://www.webstuffshare.com/2012/07/flyout-image-slider-using-jquery-css3/">Flyout Image Slider Using jQuery &amp; CSS3</a></h2>
<h3>Uno slider costituito da una pila di immagini, che funziona facendo “volare” l'immagine selezionata davanti alla pila. Usa le transizioni CSS3, animazione e jQuery.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://webstuffshare.com/demo/FlyoutSlider/index.html">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/FlyoutSlider.png/@@images/d918e5af-688f-4566-98fb-c3624603f8b5.png" /></p>
<p class="p3"> </p>
<h2 class="p3"><a class="external-link" href="http://www.egrappler.com/full-screen-responsive-jquery-image-and-content-sliderrslider/">Rslider</a></h2>
<h3>Uno slider jQuery di immagini e contenuti, fullscreen e responsive.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://www.egrappler.com/responsive-image-content-slider/index.htm">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/responsiveimagecontentslider.png/@@images/a42eecfc-1038-4402-a29d-31ee15bc5f1a.png" /></p>
<p class="p1"> </p>
<h2 class="external-link"><a class="external-link" href="http://www.webstuffshare.com/2012/07/portfolio-flipping-slider-using-jquery-css3/">Portfolio Flipping Slider Using jQuery &amp; CSS3</a></h2>
<h3>Uno slider per visualizzare il proprio portfolio con un effetto "flipping" per l'impaginazione. Usa jQuery e trasformazioni CSS3.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://webstuffshare.com/demo/FlippingSlider/index.html">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/FlippingSlider.png/@@images/3e35fcac-0ae4-40a9-b9be-489f8b32910a.png" /></p>
<p class="p2"> </p>
<h2 class="p3"><a class="external-link" href="http://www.sequencejs.com/themes/category/free/">Sequence</a></h2>
<h3>Uno slider responsive che usa transizioni CSS3 avanzate.</h3>
<p><img class="image-left" src="http://blog.redturtle.it/uploads/slidinghorizontalparallax.png/@@images/3cd4d953-429f-4c6c-82e4-d622e715515a.png" /></p>
<blockquote class="pullquote">Sliding Horizontal Parallax Theme</blockquote>
<p><strong><a class="external-link" href="http://www.sequencejs.com/themes/sliding-horizontal-parallax/">DEMO &gt;&gt;</a></strong></p>
<div class="visualClear"></div>
<p><img class="image-left" src="http://blog.redturtle.it/uploads/modernslidein.png/@@images/2bedee8e-399d-4df9-b8db-4bd3b7c723c1.png" /></p>
<blockquote class="pullquote">Apple iPhone4 Style Theme</blockquote>
<p class="p1"><strong><a class="external-link" href="http://www.sequencejs.com/themes/apple-style/">DEMO &gt;&gt;</a></strong></p>
<div class="visualClear"></div>
<p style="text-align: center; "><img class="image-left" src="http://blog.redturtle.it/uploads/applestyle.png/@@images/b5f91b3f-a0e5-4258-b191-a93770e8e287.png" /></p>
<blockquote class="pullquote">Minimalist Horizontal Sliding Theme</blockquote>
<p class="p1"><strong><a class="external-link" href="http://www.sequencejs.com/themes/modern-slide-in/">DEMO &gt;&gt;</a></strong></p>
<div class="visualClear"></div>
<p class="p1"> </p>
<h2 class="external-link"><a class="external-link" href="http://tympanus.net/codrops/2012/08/02/animated-responsive-image-grid/">Animated Responsive Image Grid</a></h2>
<h3>Un plugin jQuery per la creazione di una griglia di immagini responsive che cambia automaticamente le immagini con animazioni e tempi diversi.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://tympanus.net/Development/AnimatedResponsiveImageGrid/">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/copy_of_animatedresponsiveimagegrid.png/@@images/348f122e-362e-4417-938f-7861fefc1dc3.png" /></p>
<p class="p2"> </p>
<h2 class="p3"><a class="external-link" href="http://www.webstuffshare.com/2012/05/showing-image-with-bounce-effect/">Showing Image With Bounce Effect</a></h2>
<h3>Un effetto di rimbalzo quando viene mostrata un'immagine, creato utilizzando trasformazioni CSS3 e animazione.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://webstuffshare.com/demo/BounceEffect/index.html">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/BounceEffect.png/@@images/71356b40-9b2f-4a3d-b36c-657205268c6c.png" /></p>
<p class="p2"> </p>
<h2 class="p3"><a class="external-link" href="http://tympanus.net/codrops/2012/08/16/triple-panel-image-slider/">Triple Panel Image Slider</a></h2>
<h3>Uno slider jQuery di immagini a pannello triplo con un look 3D.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://tympanus.net/Tutorials/TriplePanelImageSlider/">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/TriplePanelImageSlider.png/@@images/0f241448-985f-404a-8fa8-d0effc738e9c.png" /></p>
<p class="p1"> </p>
<h2 class="p3"><a class="external-link" href="http://www.minimit.com/works/minimit-gallery-plugin">Minimit</a></h2>
<h3 class="p1">Minimit Gallery è un plugin slider che supporta transizioni e trasformazioni CSS3, trascinamento, scroller, e interazioni touch.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://www.minimit.com/mg/demo.html">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-left" src="http://blog.redturtle.it/uploads/minimit.png/@@images/50f37580-65b9-40d3-9e42-5c5c22103649.png" /></p>
<h3 class="p1"><img class="image-inline" src="http://blog.redturtle.it/uploads/minimit1.png/@@images/8a20f79b-f6c0-489e-b4bd-72ededbf2a37.png" /></h3>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/minimit2.png/@@images/e11216c2-8e2d-4388-8d13-ba9f00156839.png" /></p>
<p class="p1"> </p>
<p class="p1"> </p>
<h2 class="p3"><a class="external-link" href="http://www.script-tutorials.com/css3-parallax-scrolling-slider/">CSS3 Parallax scrolling slider</a></h2>
<h3>Uno slider verticale che usa solamente proprietà CSS3.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://www.script-tutorials.com/demos/273/index.html">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/CSS3Parallaxscrollingslider.png/@@images/0090ba95-3722-40d0-8eff-b2a2ad7e4866.png" /></p>
<p class="p2"> </p>
<h2 class="p3"><a class="external-link" href="http://tympanus.net/codrops/2012/06/06/image-accordion-with-css3/">Image Accordion with CSS3</a></h2>
<h3>Un accordion di immagini che espande un elemento al click.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://tympanus.net/Tutorials/CSS3ImageAccordion/">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/CSS3ImageAccordion.png/@@images/656ed21d-0886-4e81-9446-cc1c69aeb88f.png" /></p>
<p class="p2"> </p>
<h2 class="p3"><a class="external-link" href="http://vegas.jaysalvat.com/">Vegas</a>, Background jQuery Plugin</h2>
<h3>Uno slider di diversi background.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://vegas.jaysalvat.com/demo/">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/vegas.png/@@images/ed27a5db-d0b8-4680-9309-eb2fe635a6f9.png" /></p>
<p class="p3"> </p>
<h2 class="p3"><a class="external-link" href="http://tympanus.net/codrops/2011/09/12/elastislide-responsive-carousel/">Elastislide</a></h2>
<h3>Carousel responsive di immagini che si adatterà in modo fluido a un layout. Si tratta di un plugin per jQuery che può essere disposto in orizzontale o in verticale.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://tympanus.net/Development/Elastislide/">DEMO &gt;&gt;</a></strong></p>
<p style="text-align: center; "><img class="image-inline" src="http://blog.redturtle.it/uploads/Elastislide.png/@@images/683f37ad-76f5-4572-a091-302bb81ff8dd.png" /></p>
<p style="text-align: center; "> </p>
<h2 class="external-link"><a class="external-link" href="http://www.zurb.com/playground/orbit-jquery-image-slider">Orbit</a>, A Slick jQuery Image Slider Plugin</h2>
<h3>Un plugin jQuery per un slider di immagini.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://www.zurb.com/playground/orbit-jquery-image-slider">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/orbit.png/@@images/4e0b38d4-341c-4589-8f49-ab84ca9d41b5.png" /></p>
<p> </p>
<h2 class="external-link"><a class="external-link" href="http://tympanus.net/codrops/2012/06/12/css-only-responsive-layout-with-smooth-transitions/">CSS-Only Responsive Layout with Smooth Transitions</a></h2>
<h3>Un layout con effetto a “scorrimento fluido” creato solamente attraverso CSS.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://tympanus.net/Tutorials/SmoothTransitionsResponsiveLayout/">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/SmoothTransitionsResponsiveLayout.png/@@images/3fce5e9f-7969-4f21-8263-9872e33e254f.png" /></p>
<p class="p2"> </p>
<h2 class="external-link"><a class="external-link" href="http://glisse.victorcoulon.fr/">Glisse.js</a></h2>
<h3>Un photo viewer jQuery, responsive e completamente personalizzabile.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://glisse.victorcoulon.fr/example-1/">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/glisse2.png/@@images/d96d4820-65f3-4202-b410-01c5558681ed.png" /></p>
<p class="p2"> </p>
<h2 class="external-link"><a class="external-link" href="http://www.iosscripts.com/iosslider/">iosSlider</a>, Touch Enabled jQuery Horizontal Slider Plugin</h2>
<h3>Un plugin jQuery progettato per essere usato come un dispositivo di scorrimento del contenuto, un carousel, un banner di scorrimento o una galleria di immagini.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://www.iosscripts.com/iosslider/">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/iosslider.png/@@images/d4bd7d87-c3e5-415d-84e7-33a6820868e1.png" /></p>
<p class="p3"> </p>
<h2 class="external-link"><a class="external-link" href="http://tympanus.net/codrops/2011/11/21/elastic-image-slideshow-with-thumbnail-preview/">Elastic Image Slideshow with Thumbnail Preview</a></h2>
<h3>Uno slideshow "elastico" che usa miniature per le anteprime. La presentazione si regolerà automaticamente al suo contenitore.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://tympanus.net/Tutorials/ElasticSlideshow/">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/ElasticSlideshow.png/@@images/ebac87e8-7a2f-4165-bf76-403926fa6d95.png" /></p>
<p class="p3"> </p>
<h2 class="p3"><a class="external-link" href="http://wowslider.com/">WOW Slider</a></h2>
<h3>Uno slider jQuery di immagini, responsive e con vari effetti di visualizzazione.</h3>
<p style="text-align: right; "><strong><a class="external-link" href="http://wowslider.com/demo.html">DEMO &gt;&gt;</a></strong></p>
<p><img class="image-inline" src="http://blog.redturtle.it/uploads/wowslider.com.png/@@images/282b0560-de26-4fb8-91b0-c16a2bc844fb.png" /></p>
<p> </p>
<p>Come vedete, le possibilità per mostrare le vostre immagini sono davvero molte; e queste sono solo alcune delle tante proposte!</p>
<p>Ci si potrebbe chiedere: "quale scegliere"? Ma a questa domanda non è possibile dare un risposta che vada bene per tutti. Alcuni di questi plugin richiedono funzionalità estremamente avanzate, non ancora disponibili per tutti i browser, e questo non è un aspetto che si possa trascurare. In altri casi potreste avere bisogno di una soluzione <strong>accessibile</strong>, e allora sarà vostro compito testare l'utilizzo della tastiera.</p>
<p>Una sola cosa credo sia chiara: le funzionalità che ad oggi <strong>CSS3</strong> e <strong>HTML5</strong> ci offrono, hanno reso più semplice la creazione di questi strumenti, e questo ci fa ben sperare per il futuro.</p>
<p>Spero che abbiate trovato in uno di questi slider una soluzione alla vostra specifica esigenza!</p>
<p><span class="discreet">La foto in testata è di <a class="external-link" href="http://www.flickr.com/photos/widerbergs/">Widerbergs</a>.</span></p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Federica D'Elia</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>jQuery</dc:subject>
    
    
      <dc:subject>web</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    
      <dc:subject>HTML5</dc:subject>
    
    
      <dc:subject>css</dc:subject>
    
    <dc:date>2013-04-08T08:15:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/giochi-sotto-lombrellone-flask">
    <title>Giochi sotto l'ombrellone: Flask</title>
    <link>http://blog.redturtle.it/giochi-sotto-lombrellone-flask</link>
    <description>Dalla necessità di creare un'applicazione snella, mi sono spinto alla ricerca di un framework semplice, ma efficace</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Il bello del mondo informatico è che <strong>non si finisce mai di imparare cose nuove</strong>, soprattutto che si ha la fortuna di poterle<strong> imparare giocando</strong>.</p>
<p>Per esempio, se un informatico (<i>uno a caso</i>) ha la passione per il <strong>fantacalcio </strong>e deve pensare a come gestire l’asta che si svolgerà a settembre con i suoi amici, questa è l’occasione giusta per sperimentare qualche nuova tecnologia per <strong>creare un’applicazione</strong> che li aiuti.</p>
<h3>Quale tecnologia adottare?</h3>
<p>Il primo passo ovviamente è stata la <strong>scelta della tecnologia</strong> da utilizzare. I requisiti erano molto basilari (stiamo pur sempre parlando di uno svago): un’applicazione semplice e leggera che permetta di memorizzare in un <strong><i>database </i></strong>una serie di informazioni, eseguire diverse <i>query</i> e inserimenti successivi.</p>
<p> </p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText"></div>
<blockquote class="pullquote">Plone non era lo strumento giusto, volevo sperimentare!</blockquote>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText">Come prima idea mi è venuto in mente <strong>Plone</strong> ovviamente, il nostro amato CMS con il quale lavoro tutti i giorni.</div>
<p class="breakText">Idea che ho scartato quasi subito: lavorandoci quotidianamente, so che non mi sarebbe servito un sistema così grande e complesso. E poi, che esperimento sarebbe stato, giocando in casa? ;-)</p>
<p>Mi sono messo allora a cercare informazioni su <strong>altri <i>framework </i>basati su </strong><i><strong>python</strong></i>: va bene sperimentare, ma mantenendo qualche sicurezza nello sviluppo dell'applicazione. Stavo pensando a <strong>Django</strong> e <strong>Pyramid</strong> (già usati per diversi <a class="external-link" href="https://www.redturtle.it/it/clienti">progetti</a> in azienda, ma su cui non ho ancora avuto la fortuna di lavorare), quando sono stato introdotto a un sistema che non conoscevo. Mentre a Firenze si svolgeva <a href="http://blog.redturtle.it/redturtle/giochi-sotto-lombrellone-flask/giochi-sotto-lombrellone-flask/il-mio-europython2012" class="internal-link">Europython</a>, in rete fioccavano <i>tweet </i>su un <a class="external-link" href="http://nicolaiarocci.com/sviluppare-una-restful-web-api-con-python-flask-e-mongodb/">talk di Nicola Iarocci</a> incentrato sul framework <strong>Flask</strong>.</p>
<p><img src="http://blog.redturtle.it/redturtle/topic_images/flasklogo.png/@@images/b5fea397-5cce-4ab6-a537-72f094fb8d24.png" alt="flask logo" class="image-right" title="flask logo" />Subito incuriosito, sono andato a cercare più informazioni in merito. Sul <a class="external-link" href="http://flask.pocoo.org/">sito ufficiale</a> viene descritto come un “<i>microframework for Python based on <strong>Werkzeug</strong>, <strong>Jinja 2</strong> and good intentions</i>”. In sostanza, il framework si basa su <strong>un’applicazione centrale</strong>, la quale ha il compito di smistare le varie richieste che arrivano verso diverse funzionalità precedentemente definite.</p>
<p>Questo si nota bene dal primo semplice esempio che ho trovato sul sito:</p>
<pre>from flask import Flask
<br />app = Flask(__name__)
<br />@app.route("/")<br />def hello():<br />    return "Hello World!"
<br />if __name__ == "__main__":<br />    app.run()</pre>
<p>Non si fa altro che creare una nuova app e si imposta in modo che tutte le richieste che arrivano sulla porta in cui è in ascolto visualizzeranno il classico <i>“<strong>Hello world!</strong>”</i>.</p>
<p>La <strong><a class="external-link" href="http://flask.pocoo.org/docs/">documentazione</a></strong> sul sito è molto ben fatta; c'è anche un <a class="external-link" href="http://flask.pocoo.org/docs/tutorial/">tutorial</a> molto chiaro, che permette di prendere subito confidenza con le funzionalità principali del framework, tra cui un ottimo e intuitivo motore di <i>templating </i>(<a class="external-link" href="http://jinja.pocoo.org/">Jinja2</a>) e gli immancabili test.</p>
<p>Visto che uno dei miei prerequisiti era proprio quello di creare un’applicazione snella e con poco sforzo, <strong>ho deciso di buttarmi su Flask</strong>.</p>
<p>Il problema successivo è stato scegliere <strong>come e dove memorizzare i dati</strong>. Il tutorial ufficiale utilizza un semplice database SQLite per creare un microblog. Poteva anche andarmi bene visto che non avevo particolari esigenze, però guardando le slide del talk di Europython e cercando in rete, ho trovato diversi esempi di integrazione di Flask con database <strong>NoSQL</strong>, come <strong>MongoDb</strong> e <strong>Redis</strong>.</p>
<p><img src="http://blog.redturtle.it/redturtle/topic_images/mongodb.png/@@images/17e5bb6e-aec2-4bb4-823b-9df562478073.png" alt="mongodb logo" class="image-right" title="mongodb logo" />Perché non provare anche un nuovo tipo di database, già che c’ero? La scelta è ricaduta su <a class="external-link" href="http://www.mongodb.org/">MongoDB</a>, il quale ha una gestione del database a <strong><i>Documenti</i></strong> e ovviamente ha una serie di <strong>librerie specifiche</strong> per i più famosi linguaggi di programmazione. Io ho optato per <strong><a class="external-link" href="http://mongoengine-odm.readthedocs.org/en/latest/index.html">MongoEngine</a></strong> perché è dotato di una buona documentazione e permette di integrarsi facilmente con un database MongoDB.</p>
<p>Come ultimo passo ho utilizzato il famoso <strong><a class="external-link" href="http://twitter.github.com/bootstrap/">TwitterBootstrap</a></strong> per avere un’<strong>ottima base grafica</strong> di partenza.</p>
<p>Non mi soffermo su come ho implementato la mia applicazione, anche perché è ancora in fase di sviluppo. Passo invece esporvi le mie <strong>considerazioni su Flask</strong>, che sono decisamente positive.</p>
<p class="callout"><i>Flask è semplice e potente</i></p>
<p>In poco tempo si riesce a mettere in piedi un <strong>sistema completo e funzionante </strong>grazie alla semplicità della sintassi e alla potenza degli strumenti che mette a disposizione, come il motore di templating e la possibilità di avviare il server in <i>debug-mode</i> per lo sviluppo. Questo è davvero utile perché permette di avere un <i>traceback</i> immediato di eventuali errori, senza dover riavviare a ogni cambiamento.</p>
<p>Ovviamente di base non offre molti strumenti a parte il <i>routing </i>delle richieste e la gestione delle viste, però come tutti i progetti <i>open-source</i> che si rispetti ha <strong>una buona comunità</strong> che ha già prodotto <a class="external-link" href="http://flask.pocoo.org/extensions/">diversi plugin</a> per <strong>aumentare le sue funzionalità</strong>. Tra queste, la gestione delle sessioni degli utenti, la connessione a diversi database, l’internazionalizzazione o la possibilità di generare <i>form </i>automaticamente con WTForms.</p>
<p>Potrebbe quindi essere <strong>un valido strumento alternativo</strong> a Django o a Pyramid nella costruzione di applicazioni web dove serve un certo grado di personalizzazione e non si ha bisogno di framework più strutturati, come ad esempio Plone.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Andrea Cecchi</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>Flask</dc:subject>
    
    
      <dc:subject>python</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    <dc:date>2012-07-31T07:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/plone.app.linkintegrity-trouble">
    <title>plone.app.linkintegrity trouble</title>
    <link>http://blog.redturtle.it/plone.app.linkintegrity-trouble</link>
    <description>Il problema dell'integrità referenziale cancellando contenuti Plone tramite procedure Pyhton</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Quando un <b>programmatore</b> Plone vuole <b>cancellare una serie di documenti tramite una procedura Python</b>, non sempre questa operazione va a buon fine. Se vi è capitato e non avete capito il perché allora provate a leggere a questo articolo; la colpa potrebbe essere del <b>controllo di integrità referenziale</b>.</p>
<p>Partiamo da un po' più lontano; mai visto questa schermata?</p>
<p><img src="http://blog.redturtle.it/redturtle/topic_images/LinkIntegrity_screenshot.png" alt="avviso di interruzione collegamento Plone" class="image-inline" title="avviso di interruzione collegamento Plone" /></p>
<p><i>Beh</i>, suppongo proprio di sì. Questo è dovuto al <b>controllo di integrità referenziale</b> che ha trovato un problema; cancellando <i>Pagina 2,</i> il link contenuto in <i>Pagina di Test</i> risulterà rotto, senza più il suo riferimento.</p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText">Ma andando a <b>cancellare un contenuto Plone via Python,</b> con un comando tipo questo, invece, cosa succede?</div>
<pre class="visualClear"><br />   parent.manage_delObject(obj_id,)<br /> </pre>
<p class="breakText">Ve lo dico io. Il controllo in questione si attiva ugualmente e vi <b>impedisce di cancellare </b>l'elemento, ritornando un'eccezione (<i>LinkIntegrityNotificationException</i>). Forse anche questa cosa vi era nota e magari nelle vostre pocedure, essendo previdenti, <b>gestite l’eccezione </b>in un modo simile a questo.</p>
<pre class="visualClear"><br /><div id="_mcePaste">   try:</div><div id="_mcePaste">       parent.manage_delObject(obj.getId())</div><div id="_mcePaste">   except LinkIntegrityNotificationException:</div><div id="_mcePaste">       custom_log(“Non è stato possiblie cancellare il contenuto %s a causa di un problema </div><div id="_mcePaste">                   di integrità dei link” %obj.absolute_url())</div></pre>
<p class="visualClear">Non crediate di essere al sicuro perché, nel caso in cui la procedura debba cancellare più di un documento, potreste incappare in un comportamento anomalo:</p>
<p class="callout">Invece di cancellare tutte le schede tranne quelle per cui si è trovata l’eccezione di integrità dei link, ci si ritrova che <b>nessuna delle schede che si voleva cancellare viene cancellata</b>.</p>
<p class="visualClear">Mi sono imbattuto in un caso del genere mentre sviluppavo una procedura per permettere la <b>sincronizzazione di contenuti Plone su portali differenti</b>. La procedura aveva tre fasi: aggiunta di nuovi contenuti, modifica dei contenuti già esistenti e cancellazione dei contenuti non più presenti sul portale di origine.</p>
<p class="visualClear">Il portale di destinazione però non era totalmente sotto il controllo della sincronizzazione e quindi poteva capitare che altri contenuti del portale avessero un link che puntava a una scheda che doveva essere cancellata.</p>
<p class="visualClear">Scoperto il problema, mi sono messo ad analizzarlo e ho scoperto che la causa di questa anomalia è da imputare al pacchetto <i><b>plone.app.linkintegrity</b></i> e più precisamente alla creazione dell’istanza della <b>classe <i>LinkIntegrityInfo</i></b>.</p>
<p class="visualClear">Alla classe <i>LinkIntegrityInfo</i> è demandato il compito di salvare gli <b>errori di integrità referenziale</b> durante la procedura di cancellazione, per poi notificarli all’utente tramite la schermata mostrata all'inizio.</p>
<p class="visualClear">Purtroppo questa classe viene inizializzata tramite un unico parametro: <i>context</i>, che è <b>la <i>request </i>dell’azione</b>.</p>
<pre class="visualClear"><br />   def __init__(self, context):
       self.context = context      # the context is the request<br /> </pre>
<p class="visualClear">Nel caso si sia lanciata una procedura che deve cancellare una serie di contenuti, la request è sempre la stessa e quindi per ogni contenuto che si cerca di cancellare Plone va ad <b>analizzare la stessa istanza </b>di questa classe.</p>
<p class="visualClear">I <b>metodi di controllo</b> che vengono richiamati durante la cancellazione, però, ritornano l’errore di integrità referenziale non solo se il contenuto che si sta analizzando ha questo tipo di problema:  succede anche se c’è già salvato un precedente contenuto contenente un link che aveva questa problematica.</p>
<pre class="visualClear"><br />   def getIntegrityBreaches(self):
       """ return stored information regarding link integrity breaches
           after removing circular references, confirmed items etc """
       deleted = self.getDeletedItems()
       breaches = dict(self.getIntegrityInfo().get('breaches', {}))
       targets = breaches.keys()
       for target, sources in breaches.items():    # first remove deleted sources
           for source in list(sources):
               if source in targets or source in deleted:
                   sources.remove(source)
       for target, sources in breaches.items():    # then remove "empty" targets
           if not sources or self.isConfirmedItem(target):
               del breaches[target]
       return breaches<br /> </pre>
<p class="visualClear">Se non volete stare ad impazzire facendo <i>patch </i>su <i>patch </i>di queste funzioni io vi propongo una <b>soluzione</b> tanto semplice quanto efficace:</p>
<p class="callout">Mentre scrivete la vostra procedura di cancellazione ricordatevi di <b>effettuare dei controlli preventivi</b>.</p>
<p class="visualClear">Per ogni elemento potrete eseguire il controllo riportato nel box sotto e fare la cancellazione solo quando sarete sicuri che non verrà rilevato un errore di integrità referenziale; in caso contrario eseguite il <b>log dell’errore</b>.</p>
<pre class="visualClear"><br />   rc = getToolByName(self, 'reference_catalog')<br />   for obj in to_delete_obj:
     back_references = rc.getBackReferences(obj, relationship="isReferencing")
     if not back_references == []:
       for back_ref in back_references:
         errorlog('Errore durante la cancellazione; l’oggetto è referenziato da: %s'
                  %'/'.join(back_ref.getSourceObject().getPhysicalPath()))
     else:
       try:
         obj.aq_parent.manage_delObjects(obj.id)
         transaction.commit()<br /> </pre>
<p class="visualClear">Sicuramente questa non è l'unica soluzione al problema, ma mi ha consentito di aggirare velocemente l'ostacolo e di procedere con successo.</p>
<p class="visualClear">Perciò mi sento di consigliarvi di  mettere in conto questo tipo di controllo <b>ogni qual volta avrete a che fare con una procedura di cancellazione</b>. Questo vi permetterà di evitare di inserire debito tecnico nel codice,si ridurrà la probabilità di dover eseguire <i>bug fixing</i> e quindi, cosa più importante, vi farà risparmiare tempo e denaro.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Mirco Angelini</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>python</dc:subject>
    
    
      <dc:subject>Plone 4</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    <dc:date>2012-07-26T07:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/earthquake-plone-to-the-rescue">
    <title>Earthquake? Plone to the rescue!</title>
    <link>http://blog.redturtle.it/earthquake-plone-to-the-rescue</link>
    <description>To work in Italy you need to be pragmatic. Very pragmatic. That's why when an earthquake hit our region last month we were more than happy to help. Check out what we have done in 72h using Plone, Pyramid and Facebook</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>The idea behind the project is simple: build a tool that will help suffered companies to sell their products. It should be intuitive and integrates with social networks to gain publicity. You probably heard about the <a class="external-link" href="http://www.telegraph.co.uk/news/worldnews/europe/italy/9282504/Italys-cheese-makers-facing-losses-of-200-million-following-earthquake.html">parmigiano reggiano</a> losses and the huge will to buy all the cheese that was left. Our project should help people do it much easier.</p>
<blockquote class="pullquote">Check the site: <a class="external-link" href="http://www.facciamoadesso.it" target="_blank">www.facciamoadesso.it</a></blockquote>
<h3>Plone</h3>
<p>Most of the application is done in Plone, which is so fast to develop nowadays. We have used heavily <a class="external-link" href="http://pypi.python.org/pypi/eea.facetednavigation/4.6">eea.facetednavigation</a> which saved us hours if not days. Big thanks to Alin Voinea, Alexandru Ghica, Antonio De Marinis. You guys rock!</p>
<p>We have implemented a custom facebook integration with a <a class="external-link" href="https://github.com/RedTurtle/restarter.policy/blob/master/src/restarter/policy/plugin.py">separate PAS plugin</a>. We couldn't use plonesocial.auth.rpx cause we wanted to integrate more deeply with facebook app (more about that later), and that will cost a fortune using rpxnow.com.</p>
<p>We have also added a small disqus trick that notifies archetype object owner that somebody made a comment. We are using the callback method:</p>
<pre><br /> function disqus_config() {<br />    this.callbacks.onNewComment = [function(comment) {<br />         $.post('%(document_url)s/disqus_notify', {comment: comment});<br />       }];<br />  }<br /> </pre>
<p> </p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText">and a browser view:</div>
<pre><br /> class Notify(BrowserView):<br />     def __call__(self):<br />         comment_text = self.request.form.get('comment[text]')<br />         comment_id = self.request.form.get('comment[id]')<br />         objectEventNotify(DisqusNotify(self.context, comment_id, comment_text))<br /> </pre>
<p>you can find a working example on <a class="external-link" href="https://github.com/RedTurtle/restarter.policy/blob/master/src/restarter/policy/browser/disqus.py">github</a>.</p>
<p class="mceContentBody documentContent">We have also a separate Zope <a class="external-link" href="https://github.com/RedTurtle/restarter.policy/blob/master/src/restarter/policy/processor.py">process</a> that is <a class="external-link" href="https://github.com/RedTurtle/restarter.policy/blob/master/src/restarter/policy/tool.py">collecting</a> internal stats (products sold, value gained, etc.) mounted in a separate ZODB. In this case we have minimized the problem of ConflictErrors while having the stats always fresh.</p>
<h3>pyramid / celery</h3>
<p>Second important part of the project is the notification app. We are notifying users almost on every single user action (registration, creating company, adding products, buying, commenting, etc.). We are sending 3 types of notifications: email, sms and facebook (using open graph API). We wanted to have something async, easy to implement and stable. Pyramid_celery was the best choice.</p>
<h3>Facebook and Open Graph</h3>
<p>Last important part of the stack is the facebook integration. We wanted something more then simple authentication. We wanted to involved facebook users a bit more. Thanks to <a class="external-link" href="https://developers.facebook.com/docs/opengraph/">Open Graph</a> it's quite easy.</p>
<p>First we have included the basic <i>og</i> meta tags in your <i>&lt;head&gt;</i> section. We have used <a class="external-link" href="http://pypi.python.org/pypi/sc.social.like">an existing Plone product</a> for that. Then we have registered several actions, objects and aggregations that correspondent to notifications I have mentioned before.</p>
<p>One of the action we have is <i>sell</i>. It can be used only with <i>product</i> object. In Plone you need to include in the &lt;head&gt; section of your product object additional meta:</p>
<pre><br /> &lt;meta property="og:type" content="facciamoadesso:product" /&gt;<br /> </pre>
<p>and then using your new action is trivial:</p>
<pre><br /> curl -F 'product=http://example.com/products/my-product' \<br />      'https://graph.facebook.com/me/facciamoadesso:sell'<br /> </pre>
<p>and that's it. Well, almost. You need of course to handle the access_token (we did it with our custom PAS plugin explained above).</p>
<p style="text-align: center; "><iframe align="middle" frameborder="0" height="400" scrolling="no" src="http://www.flickr.com/slideShow/index.gne?set_id=72157630218434554" width="500"></iframe></p>
<h3></h3>
<p>Once again many thanks to all Plone and pyramid developers whose add-ons we have used! It's truly amazing how much you can get in such a short time period.</p>
<p>Last, some code stats:</p>
<ul>
<li><b>21.274 lines of code</b></li>
<li><b>4 contributors</b></li>
<li><b>127 tickets closed</b></li>
<li><b>Most productive between 12:00-13:00 :-)</b></li>
</ul>
<p> </p>
<p class="callout"><b>All the code is open source and can be found on <a class="external-link" href="https://github.com/RedTurtle/restarter.buildout">RedTurtle's</a> github repository</b></p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Andrew Mleczko</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>pyramid</dc:subject>
    
    
      <dc:subject>python</dc:subject>
    
    
      <dc:subject>Plone 4</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    
      <dc:subject>community</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    <dc:date>2012-06-27T08:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/un-mondo-di-newsletter-parte-3">
    <title>Un Mondo di Newsletter (parte 3)</title>
    <link>http://blog.redturtle.it/un-mondo-di-newsletter-parte-3</link>
    <description>excursus sui prodotti per newsletter sviluppati per Plone</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ed eccoci arrivati al terzo ed ultimo, per ora!, articolo con tema Newsletter.<br />Se vi siete persi i primi due, catapultatevi a leggere Un Mondo di Newsletter (<a href="http://blog.redturtle.it/redturtle/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-1" class="internal-link">parte 1</a>) e (<a href="http://blog.redturtle.it/redturtle/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-2" class="internal-link">parte 2</a>).</p>
<p>E ora bando alle ciance, mettiamoci a parlare del prodotto di oggi:</p>
<h2>PloneGazette</h2>
<div><span id="internal-source-marker_0.9339859299361706">
<p dir="ltr" style="text-align: right; "><strong>nome prodotto:</strong> PloneGazette<br /><strong>pagina principale:</strong> <a class="external-link" href="http://plone.org/products/plonegazette">http://plone.org/products/plonegazette</a></p>
</span></div>
<p>L’AT principale è <strong>“NewsletterTheme”</strong>; esso è considerato un canale di newsletter e quindi per ognuno degli elementi è possibile configurare la solita serie di campi obbligatori come titolo, email di test, email del mittente, formato con cui inviare, ecc. e una serie di dati che ci permettono di configurare le mail che vengono inviate come più ci piace.<br />All’interno di un <i>“NewsletterTheme”</i> si possono aggiungere <i>“Newsletter Large Folder”</i>, <i>“Newsletter”</i> e <i>“Subscriber”.<br /><br /></i>Gli oggetti <strong>“Subscriber”</strong> sono molto semplici e permettono di scegliere la modalità di invio della mail, testuale o html. I gestori della newsletter che registrano un utente tramite il menu di aggiunta classico, hanno anche la possibilità di attivare direttamente l’iscritto.<br /><br />La <strong>“Newsletter Large Folder”</strong> serve per la visualizzazione e la gestione dei subscriber; la vista associata a questa cartella mostra in una tabella l’elenco degli iscritti alla newsletter. Vi è indicato, per ogni utente, il formato con cui vuole ricevere la newsletter e lo stato di attivazione. I gestori della newsletter potranno, da questa vista, eliminare subscriber.<br />Le singole mail sono gestite tramite gli oggetti <strong><i>“Newsletter”</i></strong> in cui si inserisce titolo, descrizione e testo.</p>
<div style="text-align: center; "><img src="http://blog.redturtle.it/redturtle/uploads/Schermata20120124a16.25.27.png/image_preview" alt="PloneGazette screenshot" class="image-inline image-inline" title="PloneGazette screenshot" /></div>
<p> </p>
<p> </p>
<p> </p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText">La vista riassuntiva del canale <i>“NewsletterTheme”</i> presenta una tabella che riassume le newsletter inviate e non inviate, con annessa la data di invio.</div>
<div>
<h2>Cosa ci piace</h2>
</div>
<div class="pullquote">PRO        
<ul>
<li><span style="text-align: left; ">creazione di template personalizzati per le mail da richiamare tramite TAL</span></li>
</ul>
<ul>
<li><span style="text-align: left; ">buon sistema di test e preview</span></li>
</ul>
<ul>
<li><span style="text-align: left; ">portlet di iscrizione per anonimi completa</span></li>
<li><span style="text-align: left; ">è stato fatto il porting a Plone 4</span></li>
</ul>
</div>
<p>Questo prodotto ci consente una grande personalizzazione del template della mail oltre alle più comuni personalizzazioni quali <i>header</i>, <i>footer </i>e <i>css. </i>Permette di usare una sintassi <strong>TAL</strong> per richiamare un template, precedentemente creato e caricato nel portale, ed utilizzarlo come render per la mail che viene spedita. <br /><br />La cosa è sicuramente apprezzabile da parte dei programmatori, che possono così mettere mano su tutti gli aspetti della resa grafica. Il dettaglio della singola newsletter presenta un utile tab (<i>Test</i>) che permette di avere la <strong>preview</strong> di entrambi i tipi di mail (plain text e html) oltre al solito invio di test all’indirizzo impostato. Questa è un’ottima funzionalità vista anche la possibilità di una forte personalizzazione del template della mail.<br /><img src="http://blog.redturtle.it/redturtle/uploads/Schermata20120118a16.57.41.png/image_mini" alt="Newsletter PloneGazette portlet" class="image-left" title="Newsletter PloneGazette portlet" /></p>
<p><br />La <strong>portlet di iscrizione</strong> ai canali per gli utenti anonimi è completa: oltre ai due campi proposti anche nel form di iscrizione, mostra all’utente i vari canali a cui è abilitato ad iscriversi. Contiene inoltre una serie di link ad ognuno degli archivi per consultare le newsletter passate.</p>
<h2>Cosa non ci piace</h2>
<p>Se i programmatori apprezzeranno l’idea di personalizzare tramite TAL il template di render della mail, per gli utenti, più o meno esperti, questa possibiltià non è propriamente fruibile. Gli utenti poco esperti, che devono configurare una newsletter molto base, si trovano alcuni campi di troppo che non sanno se e come configurare, mentre utenti un po’ più esperti devono agire via ZMI per creare il loro template. Creando un oggetto Plone “ATTemplate” si sarebbero potuti migliorare entrambi gli use case.</p>
<div class="pullquote">CONTRO<br /> 
<ul>
<li><span><span style="text-align: left; ">gestione per l’amministratore a volte macchinoso</span></span></li>
<li><span><span style="text-align: left; ">setting della folder per subscriber</span></span></li>
<li><span><span style="text-align: left; ">non tradotto in italiano</span></span></li>
<li><span><span style="text-align: left; ">lo sviluppo delle funzionalità è stato abbandonato</span></span></li>
</ul>
</div>
<p>La gestione della folder per i “Subscriber” non è molto chiara, poiché inizialmente alla creazione di una “NewsletterTheme” non viene creato alcunché. Bisogna procedere in un secondo momento a creare a mano un “Newsletter Large Folder” e poi rientrare in modifica del “NewsletterTheme” a settare l’id della cartella appena creata. Questo passaggio ci è sembrato inutile ed automatizzabile.<br /><br />L’iscrizione alle newsletter, che possono effettuare gli utenti Plone tramite il tab presente nella barra di “gestione” del “NewsletterTheme”, non propone la mail utilizzata durante la profilazione del proprio account. Anche la creazione della portlet per la registrazione di utenti anonimi è una procedura abbastanza macchinosa, ma questo è probabilmente dettato dal fatto che il prodotto viene da una vecchia versione di Plone.</p>
<p> </p>
<h2>Oltre l’orizzonte</h2>
<p>E' giunto per noi il momento di tirare le somme di tutto ciò che abbiamo scritto: <br />Singing&amp;Dancing, trattato nella <a href="http://blog.redturtle.it/redturtle/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-1" class="internal-link">prima parte</a>, EasyNewsletter, di cui abbiamo parlato nella <a href="http://blog.redturtle.it/redturtle/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-3/un-mondo-di-newsletter-parte-2" class="internal-link">seconda parte</a>, PloneGazette, discusso in questo articolo, o qualcosa di diverso che tratteremo in un quarto capitolo?</p>
<p class="callout"><i>PloneGazette</i> è stato, ultimamente, rilasciato per Plone 4 ma lo sviluppo sembra abbandonato e quindi non ci sembra, al momento, una scelta possibile per il futuro.</p>
<p>Noi usiamo con moderato successo sia <strong>Singing&amp;Dancing</strong> che <strong>EasyNewsletter</strong> e quindi consigliamo di concentrarsi su questi due prodotti.</p>
<p><br />Ci sembra evidente che EasyNewsletter ha bisogno di lavoro per chiudere i bug noti e consolidare tutto il pacchetto, mentre Singing&amp;Dancing ha già un buon grado di solidità ed è <strong>ben seguito dalla comunità</strong>.<br />La nostra esperienza ci porta quindi a propendere per l’utilizzo di Singing&amp;Dancing (anche se non è esente da difetti, come abbiamo visto) ma aspettiamo con ansia la ripresa di EasyNewsletter così da proporre una bella sfida, come è giusto che sia in un ambiente OpenSource.</p>
<p>Esiste certo un’altra via per gestire le newsletter; ovvero quella di appoggiarsi a <strong>servizi esterni </strong>(come <a class="external-link" href="http://mailchimp.com/"><i>MailChimp</i></a> per esempio), soprattutto se si prevede un intenso traffico di iscrizioni alla newsletter e di messaggi spediti.<br /><img src="http://blog.redturtle.it/redturtle/uploads/mailchimpcrearenewslettergratis.jpg/image_mini" alt="MailChimp" class="image-left" title="MailChimp" />In questo modo si può alleggerire il sistema (sia in termine di banda che di prestazioni, visto che Plone non dovrà prendersi carico anche della spedizione di migliaia di mail, ma potrà tornare ad occuparsi solo della gestione del portale) e delegare la gestione delle newsletter esternamente. In questo modo il programmatore dovrà solamente preoccuparsi di come interfacciare Plone con questi servizi, per esempio fornendo strumenti per potersi iscrivere direttamente alle newsletter dal sito.<br />E per il gestore del portale? Cambierebbe qualcosa?<br />Forse sì, dato che la gestione del sistema di newsletter potrebbe non risiedere più solo in un posto (Plone) ma potrebbe essere necessario fare certe configurazioni nel proprio portale e altre all’interno del servizio esterno che si sta utilizzando.<br />Infine, ciò potrebbe portare a una maggiore manutenzione da parte delle aziende sviluppatrici che si potrebbero trovare a convivere, analizzare, segnalare problematiche legate al sistema esterno di mailing senza poterli risolvere direttamente.</p>
<p>Ci sono state, in tempi più o meno recenti, <a class="external-link" href="http://plone.293351.n2.nabble.com/Newsletter-Product-for-Plone-4-td7102107.html">discussioni</a> a riguardo; ma probabilmente non sono state risolutive. L’argomento ci sembra abbastanza importante per la completezza di un CMS come Plone e pensiamo che l’argomento newsletter potrebbe essere portato a una discussione più ampia all’interno della comunità, cercando di trovare una direzione comune e di avere un buon prodotto completo ed affidabile.</p>
<h2>Cosa deve esserci</h2>
<div>
<ul>
<li style="list-style-type: disc; ">mandare mail agli iscritti (ovviamente)</li>
<li style="list-style-type: disc; ">invio di AT (base di Plone e non) tramite Newsletter</li>
<li style="list-style-type: disc; ">personalizzazione dei template base della newsletter con immagini e css (header/footer)</li>
<li style="list-style-type: disc; ">ruolo per la gestione delle Newsletter</li>
<li style="list-style-type: disc; ">newsletter locali (più redazioni che devono gestire solo il proprio canale).</li>
</ul>
<br />
<p dir="ltr" style="text-align: right; ">Mirco &amp; Andrea</p>
</div>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Mirco Angelini</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>newsletter</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    
      <dc:subject>community</dc:subject>
    
    <dc:date>2012-02-21T09:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/un-mondo-di-newsletter-parte-2">
    <title>Un Mondo di Newsletter (parte 2)</title>
    <link>http://blog.redturtle.it/un-mondo-di-newsletter-parte-2</link>
    <description>excursus sui prodotti per newsletter sviluppati per Plone</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><span id="internal-source-marker_0.9339859299361706"> </span></p>
<p>Continuiamo il nostro viaggio nel mondo delle Newsletter iniziato nella <a href="http://blog.redturtle.it/redturtle/un-mondo-di-newsletter-parte-2/un-mondo-di-newsletter-parte-2/un-mondo-di-newsletter-parte-1" class="internal-link"> prima parte</a> con l'analisi di Singing &amp; Dancing.<br />Oggi prendiamo in esame un secondo prodotto che abbiamo utilizzato in diverse occasioni:</p>
<h2 dir="ltr">EasyNewsletter</h2>
<div style="text-align: left; "></div>
<p dir="ltr" style="text-align: right; "><strong>nome prodotto</strong>: Products.EasyNewsletter<br /><strong>mantainer:</strong> Maik Derstappen<br /><strong>pagina ufficiale</strong>: <a class="external-link" href="http://plone.org/products/easynewsletter">http://plone.org/products/easynewsletter</a></p>
<p>Il pacchetto <strong>Products.EasyNewsletter</strong> si compone di 4 AT: <i>“Newsletter”</i>, <i>“Issue”</i>, <i>“Subscriber”</i> e <i>“Template”</i>.</p>
<p> </p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText">L’oggetto <strong>“Newsletter”</strong> costituisce il canale, riguardante un determinato argomento o per una determinata zona del portale; gli oggetti <strong>“Issue” </strong>sono le singole mail che potranno essere inviate; <strong>“Subscriber” </strong>è un oggetto che identifica il singolo utente, non Plone, registrato al canale che riceverà le issue di notifica; <strong>“Template”</strong> è un AT per definire la resa grafica della parte di contenuto delle issue.<br /><br /><img src="http://blog.redturtle.it/redturtle/uploads/Schermata20120124a15.36.40.png/image_preview" alt="EasyNewsletter screenshot1" class="image-inline image-inline" title="EasyNewsletter screenshot1" /><br /><br />Infine è disponibile una portlet che permette la sottoscrizione ad un canale da parte di utenti anonimi andando a creare un subscriber.</div>
<h2>Cosa ci piace</h2>
<p>Sicuramente ci ha colpito la grande <strong>flessibilità</strong> nella gestione del <strong>templating</strong> che è configurabile sul singolo oggetto<i> “Newsletter”</i>. Questo permette di avere configurazioni indipendenti per ogni newsletter creata nel portale.</p>
<div class="pullquote">PRO     
<ul>
<li><span><span style="text-align: left; ">personalizzabile in ogni suo aspetto</span></span></li>
</ul>
<ul>
<li><span><span style="text-align: left; ">nessun parametro di gestione generalizzato</span></span></li>
</ul>
<ul>
<li><span><span style="text-align: left; ">invio ad utenti e gruppi Plone</span></span></li>
</ul>
<ul>
<li><span><span style="text-align: left; ">progetto recente con margini di miglioramento</span></span></li>
</ul>
</div>
<p>L’impostazione di <strong>header e footer</strong> viene effettuata tramite dei RichWidget, sia a livello di newsletter sia a livello delle singole issue, andando in questo caso a sovrascrivere le impostazioni definite a livello newsletter; è quindi facile per l’utente inserire testo formattato o immagini.<br /><br />A livello di newsletter, invece, è possibile modificare aspetti come i <strong>CSS</strong> da applicare alle mail da spedire, inserendo stili che rendono personalizzabili le newsletter le une dalle altre; a seconda della sezione, si può avere una mail con sfondo bianco, giallo o nero.</p>
<p>La possibilità di <strong>scegliere una serie di gruppi o singoli utenti</strong> ci è sembrata molto utile per gestire più newsletter nello stesso portale; se si pensa, per esempio, ad un portale medico dove possiamo avere una decina di branche specialistiche, ognuna con il proprio gruppo (di soli lettori o redattori), ecco che usando una newsletter per ogni specializzazione si può facilmente provvedere all’invio solo alle persone interessate tramite la configurazione del gruppo a cui inviare.</p>
<h2>Cosa non ci piace</h2>
<p>Gli AT <i>“Newsletter” </i>e <i>“Issue”</i> sono stati creati come <strong>estensione degli oggetti “Collezione”</strong> e questo, secondo noi, porta più svantaggi che vantaggi.</p>
<div class="pullquote">CONTRO     
<ul>
<li><span style="text-align: left; ">ereditarietà dalle Collezioni</span></li>
</ul>
<ul>
<li><span style="text-align: left; ">codice non molto semplice e tecnicamente migliorabile</span></li>
</ul>
<ul>
<li><span style="text-align: left; ">non ha una coda per l’invio</span></li>
</ul>
<ul>
<li><span style="text-align: left; ">non ha uno sviluppo costante</span></li>
</ul>
</div>
<p>Gli svantaggi riguardano soprattutto l’usabilità per un utente redattore che, seppur conoscendo l’ambiente Plone ed il comportamento delle collezioni, potrebbe trovarsi in difficoltà a gestire criteri e sotto-criteri.<br /><br />Sia l’oggetto <i>“Newsletter”</i> che i singoli oggetti <i>“Issue”</i> hanno a disposizione il <strong>tab <i>“Criteri”</i> e <i>“Cercatori subordinati”</i></strong>, che sono da comandare attraverso la creazione di AT <i>“Template”</i> o della modifica del template di default. Per impostare la resa grafica della issue si hanno quindi quattro elementi principali: il testo che si va a scrivere nella issue; i file eventualmente contenuti all’interno dell’oggetto <i>“Issue”;</i> i risultati secondo i criteri della issue; i risultati secondo i criteri degli eventuali cercatori subordinati.</p>
<p>Il testo che si inserisce nella issue deve essere sempre visibile, mentre l’elenco dei risultati del cercatore e dei sotto-cercatori sono opzionali. A complicare la situazione intervengono il cercatore della newsletter e i suoi sotto-cercatori, i quali compaiono se non sovrascritti da cercatore e sotto-cercatori delle singole issue.</p>
<pre>&lt;tal:block tal:repeat="object context/queryCatalog"&gt;
    &lt;h1 tal:content="object/Title"&gt;Title&lt;/h1&gt;
    &lt;p&gt;
        &lt;span tal:content="object/Description"&gt;Description&lt;/span&gt;
    &lt;/p&gt;
    &lt;p&gt;
        &lt;a tal:attributes="href object/getURL"&gt;Please read on.&lt;/a&gt;
    &lt;/p&gt;
&lt;/tal:block&gt;

&lt;tal:block tal:repeat="subtopic context/getSubTopics"&gt;
    &lt;h1 tal:content="subtopic/Title"&gt;Title&lt;/h1&gt;

    &lt;tal:block tal:repeat="object subtopic/queryCatalog"&gt;
        &lt;h2 tal:content="object/Title"&gt;Title&lt;/h2&gt;

        &lt;p&gt;
            &lt;span tal:content="object/Description"&gt;Description&lt;/span&gt;
        &lt;/p&gt;
        &lt;p&gt;
            &lt;a tal:attributes="href object/getURL"&gt;Please read on.&lt;/a&gt;
        &lt;/p&gt;
    &lt;/tal:block&gt;
&lt;/tal:block&gt;</pre>
<div>
<p dir="ltr" style="margin-left: 36pt; "> </p>
</div>
<p>A noi questa gestione non è piaciuta perché ci pare più frequente la possibilità di avere delle issue contenente un semplice testo piuttosto che un elenco di una collezione.<br />L’invio di una issue contenente i risultati di una collezione poteva essere risolta molto più facilmente creando un adapter per ENL, che sfruttasse il sistema del template per il contenuto, come abbiamo poi creato noi con la nostra estensione descritta sotto.</p>
<h2>Estensioni: EasyNewsletterSendTo</h2>
<p>Questa estensione che abbiamo sviluppato, ma non ancora rilasciato, è nata da un’idea molto semplice:<strong> </strong><strong> </strong></p>
<p><strong> </strong></p>
<p class="callout"><strong><i>la maggior parte delle volte un redattore vuole inviare un contenuto del sito come newsletter invece di dover riscrivere informazioni su un evento o una notizia</i></strong></p>
<p>Per questo motivo abbiamo pensato che sarebbe stato utile studiare un modo per creare un oggetto <i>“Issue”</i> a partire dalle informazioni presenti nei vari AT Plone.<br />Abbiamo per questo sviluppato una nuova action <i>“Send to Newsletter”</i> che permette ad un redattore di creare una issue in una o più newsletter nelle quali ha il permesso di operare.<br />La cosa più importante è il mapping dei campi dei vari AT Plone con quelli disponibili nell’AT <i>“Issue”</i> fatto tramite una serie di adapter; l’esempio sotto si riferisce a due funzioni usate per l’inserimento di un AT<i> “Image”</i> dentro il campo testuale della <i>“Issue” </i>.</p>
<p> </p>
<pre>def contentToDict(self):
    ''' Returns a dictionary with some field of the object '''
    kargs = {}
    kargs['title'] = self.context.Title()
    kargs['description'] = self.context.Description()
    kargs['text'] = self.manageText()
    kargs['text_text_format'] = 'text/x-html-safe'
    return kargs

def manageText(self):
    ''' aggregator of some field into text '''
    return '&lt;p&gt;&lt;img title="%s" alt="%s" src="%s" /&gt;&lt;/p&gt;' %(self.context.Title(),
             self.context.Title(),
             self.context.absolute_url()+'/image_preview')</pre>
<p> </p>
<p>Un esempio, invece, di caso più particolare è quello dell’invito dell’AT <i>“Topic”</i> per cui abbiamo deciso di non andare a complicarci il lavoro cercando di inserire la vista delle collezioni dentro il campo di testo della issue; abbiamo invece sfruttato la possibilità di avere <strong>sotto-collezioni</strong> andando a copiare la collezione come oggetto figlio della issue (in questo caso diventa una sotto-collezione).<br />Per essere certi della resa grafica siamo anche andati ad utilizzare <strong>un nuovo template</strong>, inserito nel nostro pacchetto aggiuntivo, che mostra soltanto l’elenco delle sotto-collezioni in modo simile alla vista delle collezioni Plone.</p>
<p>Il tutto è corredato dalle possibilità di inviare il contenuto tramite più newsletter e di aggiungere un <strong>prologo</strong>, che viene utilizzato come descrizione all’inizio della mail generata.<br />Per il futuro pensavamo di migliorare questa estensione inserendo anche <strong>un’anteprima</strong> delle varie mail generate mostrando soprattutto la resa grafica, probabilmente differente, dovuta alle diverse personalizzazioni realizzate nelle varie newsletter.</p>
<p><a href="http://blog.redturtle.it/redturtle/un-mondo-di-newsletter-parte-2/un-mondo-di-newsletter-parte-2/un-mondo-di-newsletter-parte-3" class="internal-link">To be continued...</a></p>
<div>
<p dir="ltr" style="text-align: right; ">Mirco &amp; Andrea</p>
</div>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Mirco Angelini</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>newsletter</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    
      <dc:subject>community</dc:subject>
    
    <dc:date>2012-02-15T13:30:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/un-mondo-di-newsletter-parte-1">
    <title>Un Mondo di Newsletter (parte 1)</title>
    <link>http://blog.redturtle.it/un-mondo-di-newsletter-parte-1</link>
    <description>excursus sui prodotti per newsletter sviluppati per Plone</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="pullquote"><span id="internal-source-marker_0.9339859299361706"><i>“Quale portale web che si rispetti è sprovvisto di una newsletter?”</i></span></div>
<p><span id="internal-source-marker_0.9339859299361706">Per quanto riguarda la nostra esperienza, un cliente su due ci richiede l'attivazione di un sistema di Newsletter.<br /></span><span id="internal-source-marker_0.9339859299361706"><br />La domanda successiva, da bravi sviluppatori Open Source, è: <br /></span></p>
<p class="callout"><i>“esiste qualcuno che l’ha già fatto?”</i></p>
<p>Nel nostro caso specifico ci chiediamo:</p>
<p class="callout"><i>“ci sono dei prodotti Plone per la gestione delle newsletter?”</i></p>
<p><span id="internal-source-marker_0.9339859299361706">La risposta è ovviamente <i>“Sì”</i> e quindi nel corso degli anni abbiamo installato, testato, litigato, patchato, utilizzato tre diversi prodotti: <strong>Singing &amp; Dancing</strong>, <strong>EasyNewsletter</strong> e <strong>ploneGazette</strong>.</span></p>
<p><span id="internal-source-marker_0.9339859299361706">A partire da questo articolo andremo ad analizzare i singoli prodotti, per scoprirne pregi e difetti e i miglioramenti che in qualche caso abbiamo apportato.<br /></span></p>
<div><span id="internal-source-marker_0.9339859299361706"><br />
<h2>Singing &amp; Dancing</h2>
<div style="text-align: left; "><strong><img src="http://blog.redturtle.it/redturtle/uploads/S_and_D_logo.jpeg/image_thumb" alt="Singing and Dancing logo" class="image-left" title="Singing and Dancing logo" /><br /></strong></div>
<p dir="ltr" style="text-align: right; "><strong>nome prodotto</strong>: collective.dancing (+ collective.singing)<br /><strong>owner e maintainer</strong>: Daniel Nouri<br /><strong>pagina ufficiale</strong>: <a class="external-link" href="http://plone.org/products/dancing">http://plone.org/products/dancing</a></p>
</span></div>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText">Singing &amp; Dancing non è un prodotto unico, <strong>ma l’insieme di 2 prodotti</strong>: <i>collective.singing</i> e <i>collective.dancing</i>, che si occupano della gestione/creazione delle mailing-list e del loro invio.<br />E’ un prodotto <i>“out of the box”</i> perché <strong>non prevede Archetypes</strong> specifici da utilizzare per le newsletter, ma permette di spedire potenzialmente ogni contenuto del sito come corpo della newsletter.<br />All’installazione ci si ritrova praticamente con una newsletter “chiavi in mano”, visto che nel tool di gestione delle newsletter (accessibile dal panello di controllo del sito, sotto la voce <i>“Singing &amp; Dancing”</i>) è già presente un canale di diffusione di default da poter utilizzare subito.</div>
<div style="text-align: center; "><img src="http://blog.redturtle.it/redturtle/uploads/SD_MailingListAdmin.png/image_preview" alt="Singing and Dancing channel" class="image-inline image-inline" title="Singing and Dancing channel" /></div>
<p><strong><br />I canali di diffusione</strong> sono lo strumento con cui viene definito comportamento e aspetto di una newsletter. Infatti per ogni singolo canale (se ne possono creare quanti se ne vuole, a seconda di quante diverse newsletter si vogliono avere all’interno del proprio portale) si possono definire svariate elementi, come la possibilità di iscriversi o meno, un eventuale testo da aggiungere in testata e nel footer della mail spedita e degli stili CSS da applicare.</p>
<p><img src="http://blog.redturtle.it/redturtle/uploads/Schermata20120203a10.19.34.png/image_mini" alt="send as newsletter" class="image-right" title="send as newsletter" />Come abbiamo detto, non utilizzando nessun Archetype particolare, volendo si può <strong>spedire qualunque contenuto del sito come newsletter</strong> semplicemente scegliendo la voce <i>“invia come newsletter”</i> dal menu <i>“azioni”</i> dell’oggetto, e poi scegliendo il canale di diffusione attraverso cui si vuole spedire.<br /><br />Il prodotto prevede inoltre una comoda <strong>portlet di iscrizione</strong> che permette di iscriversi direttamente ad un canale, oppure passare prima per il form di iscrizione dove potrebbe esserci del testo informativo (magari impostato nella configurazione del canale).</p>
<h2>Nostre impressioni<strong> </strong><strong> </strong></h2>
<p><img src="http://blog.redturtle.it/redturtle/uploads/like_dislike.jpg/image_thumb" alt="impressioni" class="image-left" title="impressioni" />Ci siamo ritrovati ad usare Singing &amp; Dancing per diversi clienti; l’abbiamo trovato molto potente e spesso fa bene il suo dovere; ci sono, però, alcune cose che non ci sono piaciute. Di seguito è riportata una serie di pro e contro per analizzare meglio la situazione.</p>
<p><strong><br /></strong></p>
<p><strong>PRO</strong></p>
<p><strong> </strong></p>
<ul>
<li><span style="text-align: left; ">E' costruito sfruttando l'architettura a componenti di Zope3 e la libreria z3c.form</span></li>
</ul>
<ul>
<li><span style="text-align: left; ">E' estremamente estensibile e upgradabile in base alle proprie </span></li>
<span style="text-align: left; ">esigenze</span> 
</ul>
<ul>
<li><span style="text-align: left; ">Consente una buona gestione dei canali attraverso il tool di gestione</span></li>
</ul>
<ul>
<li><span style="text-align: left; ">La gestione delle iscrizioni è resa sicura mediante un codice di conferma inviato agli utenti</span></li>
</ul>
<ul>
<li><span style="text-align: left; ">Permette di spedire qualunque contenuto</span></li>
</ul>
<ul>
<li><span style="text-align: left; ">Buon supporto della comunity</span></li>
</ul>
<ul>
<li><span style="text-align: left; ">Buon supporto agli utenti con manuali, chat e gruppo dedicato.</span></li>
</ul>
<div style="text-align: left; "></div>
<p><strong> CONTRO</strong></p>
<ul>
<li>Per customizzarlo bisogna avere una buona conoscenza di z3c.form e dell'architettura utilizzata</li>
</ul>
<ul>
<li>Non prevede la gestione decentrata delle newsletter</li>
</ul>
<ul>
<li>Prevede un meccanismo di invio schedulato che non sempre funziona correttamente</li>
</ul>
<ul>
<li>Se per sbaglio si cancella un contenuto (o un canale) che è in coda per essere spedito come newsletter, la coda non si svuota a meno che non si ricrei l’oggetto/canale vecchio</li>
</ul>
<ul>
<li>Il processo di accodamento ed effettivo invio delle newsletter è un po' troppo macchinoso (bisogna eseguire 3 passaggi in tutto) </li>
</ul>
<ul>
<li>E’ vero che si può spedire tutto, ma non essendoci controlli, si rischia anche di spedire l’intero portale.</li>
</ul>
<div style="text-align: left; ">
<div></div>
</div>
<h2><strong>Estensioni</strong><img src="http://blog.redturtle.it/redturtle/uploads/rol_powerup.png/image_thumb" alt="power-up" class="image-right" title="power-up" /></h2>
<p>Come dicevamo in precedenza, il prodotto è nato per essere particolarmente "upgradabile", quindi su pypi ci sono diversi prodotti che estendono il funzionamento di base di S&amp;D a seconda delle esigenze.<br />Alcuni di questi li abbiamo creati anche da noi, come per esempio:</p>
<h2>collective.dancingnotlikely</h2>
<p>[<a class="external-link" href="http://pypi.python.org/pypi/collective.dancingnotlikely">http://pypi.python.org/pypi/collective.dancingnotlikely</a>]<br />Dato che il corpo della newsletter è la vista dell’oggetto vero e proprio, dentro S&amp;D è presente un dizionario di <i>“sezioni”</i> della vista da non riportare. Alcuni clienti però ci hanno fatto notare che venivano riportate anche le informazioni sul creatore dell’oggetto e la sua history. Abbiamo quindi creato un semplice plugin che aggiunge questi elementi nella lista di quelli da non mostrare.</p>
<div>
<h2>collective.dancefloor</h2>
<p>[<a class="external-link" href="http://pypi.python.org/pypi/collective.dancefloor">http://pypi.python.org/pypi/collective.dancefloor</a>]<br />Uno dei difetti maggiori di S&amp;D è il fatto che tutta la <strong>gestione delle newsletter è centralizzata</strong>.<br /><br />Per poterle gestire bisogna accedere al relativo pannello di controllo, e a questo si accede solamente avendo un determinato permesso globale.<br />Sempre più clienti, però, hanno la necessità di far gestire diverse newsletter (o canali) a varie redazioni distribuite in più sezioni del sito, le quali dovrebbero poter gestire solo i canali a cui sono abilitate.<br />Ciò ovviamente col prodotto originale non si poteva fare, quindi ci siamo messi a cercare (senza troppe speranze) se c’era già qualche plugin che facesse questo... e c’era!<br />Sfortunatamente era un prodotto iniziato e abbandonato dagli sviluppatori ormai da anni, così ci siamo messi in contatto con loro e ne abbiamo preso il controllo.</p>
<p>Il suo funzionamento è molto semplice. In sostanza permette di <i>“dichiarare” </i>che una cartella (o un qualunque oggetto folderish) è una newsletter locale (attraverso un flag che si imposta dal tab di modifica dell’oggetto).</p>
<p>Una volta marcata una cartella come <i>“Newsletter locale”</i>, questa avrà a disposizione l’intera gestione delle newsletter di S&amp;D replicata localmente.<br />In questo modo, basta segnalare che degli utenti/gruppi sono abilitati a gestire quella newsletter locale (dallo sharing della cartella, utilizzando un nuovo permesso creato ad hoc) e questi avranno tutti i poteri per gestirla in completa autonomia.<br />Inoltre, quando cercheranno di spedire un contenuto all’interno di una newsletter locale, avranno a disposizione solamente i suoi canali locali (e quelli globali, se esistono), in modo da garantire una certa separazione tra le varie redazioni.</p>
<p class="discreet">Le immagini sono state prese dal <a class="external-link" href="http://www.webtide.co.za/how-to/singing-dancing-user-manual">manuale ufficiale</a> di S&amp;D.</p>
</div>
<p><a href="http://blog.redturtle.it/redturtle/un-mondo-di-newsletter-parte-1/un-mondo-di-newsletter-parte-2" class="internal-link"><i>To be continued...</i></a></p>
<div>
<p dir="ltr" style="text-align: right; ">Mirco &amp; Andrea</p>
</div>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Andrea Cecchi</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>newsletter</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    
      <dc:subject>community</dc:subject>
    
    <dc:date>2012-02-08T09:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/appunti-su-stanca-wcag-accessibilita">
    <title>Accessibilità: cosa sta succedendo?</title>
    <link>http://blog.redturtle.it/appunti-su-stanca-wcag-accessibilita</link>
    <description>Ecco alcuni appunti sull'aggiornamento della Legge Stanca, le WCAG 2.0, l'accessibilità e chi sta cercando di fare il punto sulla situazione
</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p>Capire cosa stia succedendo <strong>non è affatto semplice</strong>. Qualcosa si sta muovendo, ma le notizie non sono molte, anche&nbsp;in Italia: tutto sembra tacere da troppo tempo.</p>
<p>Già a settembre 2011 volevo scrivere qualcosa sull'aggiornamento dei requisiti della <strong>Legge Stanca</strong>, senza riuscirci. Sono stato mosso da vari eventi che vorrei condividere con voi. E' un peccato che alcuni dei link raccolti non siano permanenti sul sito in questione.</p>
<p>Nel testo del <strong>DM 8 luglio 2005</strong>,
con gli aggiornamenti (ma datato 2010), e sul documento di presentazione delle linee guida dei siti web della PA,&nbsp;avevo letto che la consultazione che sarebbe seguita alla
proposta di aggiornamento 2011 (avviata l'11 maggio) si era conclusa l'11 luglio, cercando di fare luce sulla situazione&nbsp;nel documento delle linee guida&nbsp;stesso avevo anche letto anche la <strong>nota 17</strong>. Eccola:</p>
<em><br /></em>
<p class="discreet"><em>“</em><em>Al momento dell’aggiornamento delle presenti
Linee guida, l’Allegato A del Decreto Ministeriale 8 luglio 2005 è
in via di revisione per permettere un adeguamento della normativa
italiana alle evoluzioni degli strumenti tecnologici e delle
regolamentazioni internazionali intervenute dalla sua pubblicazione.
Attualmente, terminata la fase di consultazione pubblica, la proposta
di adeguamento è stata notificata alla Commissione europea, ai sensi
della Direttiva 98/34/CE, e potrà essere adottata al termine del
periodo di statu quo previsto (settembre 2011). Si veda: <a class="external-link" href="http://ec.europa.eu/enterprise/tris/pisa/app/search/index.cfm?fuseaction=pisa_notif_overview&amp;iYear=2011&amp;inum=297&amp;lang=IT&amp;sNLang=IT">Direttiva 98/34/CE</a>".</em></p>
<p class="discreet"><em><br /></em></p>
<p>Seguendo quest'ultimo link avevo trovato scritto che<strong> la fine del periodo di
<em>status quo</em> </strong>era stato il 22 settembre 2011, cosa che suggeriva senza troppe ambiguità che questo fosse l'ultimo aggiornamento entrato in vigore.</p>
<p>Pensai immediatamente:<strong> e perché
nessuno ne parla sul web?</strong> Forse mancava solamente
una pubblica approvazione da parte del gruppo di lavoro e un
aggiornamento delle date?</p>
<p>Allo stato attuale,&nbsp;diversi Enti Pubblici, tra cui alcune Regioni, considerano già la possibilità di&nbsp;fornire una doppia scelta: 
conformarsi ai vecchi requisiti Stanca (22) o ai nuovi (12),
aggiornati dal DM e basati su un adeguamento alle WCAG 2.0.</p>
<p>In generale, cosa si può dire sulle <strong>novità</strong>? Alcune di queste sono sicuramente
l'utilizzo di javascript “accessibile” e quindi javascript è
inserito tra le tecnologie utilizzabili. Chiaramente però è necessario
che sia implementato nel rispetto dei <a class="external-link" href="http://www.w3.org/TR/WCAG20-TECHS/client-side-script.html">requisiti</a>.</p>
<p>Senza entrare troppo nello specifico di
tutti i requisiti riformulati, ne vorrei segnalare semplicemente uno
sul quale occorre porre attenzione, fin dalla fase iniziale di
<strong>progettazione</strong>:</p>
<p><strong>Requisito 11 - Assistenza
nell'inserimento di dati e informazioni</strong></p>
<p>Questa è sicuramente una fase del
progetto che va pianificata e su cui difficilmente sarà possibile
intervenire a posteriori in maniera completa. <br />Al di là dei
suggerimenti e dell'informare l'utente sulle sue interazioni, la
revisione e la correzione delle informazioni inserite, anche a
posteriori, implica l'esistenza di <strong>funzionalità</strong> che permettano queste
operazioni.</p>
<p>In sostanza occorre comunque essere
allineati con le WCAG2.0, le linee guida del W3C in materia, le quali il <strong>3 gennaio 2012</strong> sono state affiancate dagli
aggiornamenti dei due principali <strong>strumenti di comprensione e di
apprendimento delle tecniche per le WCAG2.0</strong>.</p>
<p>Sicuramente per districarsi in materia occorre&nbsp;ripartire anche da questi strumenti aggiornati che ci sono stati messi a disposizione.</p>
<p>All'estero si cerca di fare il punto della situazione. Lo si è fatto da poco a San Diego, con una bella e articolata&nbsp;<strong><a class="external-link" href="http://www.csun.edu/cod/conference/sessions/index.php/public/conf_sessions/index/day:all/track_id:13">conferenza sull'accessibilità</a></strong>, (<a class="external-link" href="http://twitter.com/#!/search/%23CSUN12">#CSUN12</a>), <em><strong>the CSUN 27th Annual International Technology and Persons with Disabilities Conference</strong></em>.&nbsp;</p>
<p>Questo è un bell'<a class="external-link" href="http://www.mediaaccess.org.au/practical-web-accessibility/w3c-column/simplifying-the-web-accessibility-message-–-reflections-on-csun-2012">articolo</a> che parla di alcuni punti emersi alla conferenza,<br />del disagio, non solo italiano, nel cercare informazioni chiare anche per i principianti dell'argomento e quindi, della possibilità di fornire nuovi strumenti di consultazione semplificati (<a class="external-link" href="http://accessiblog.fr/2012/03/how-we-could-build-a-body-of-knowledge-for-web-accessibility-a11ybok/">vedi anche questo</a>) e dell'approccio "<strong>Be the fire fighter, not the cop</strong>" ovvero del focalizzare l'attenzione sul processo di aiutare a capire e a formare sull'argomento e non l'avere come fine il punire.</p>
<p>A Roma ci prova fra poco <strong>10 maggio 2012</strong>&nbsp;un manipolo di coraggiosi con un piccolo incontro di aggiornamento <em><strong>Innovazione tecnologica e responsabilità sociale</strong></em>:</p>
<table class="uiGrid mvm">
<tbody>
<tr>
<td class="vTop">
<p class="callout"><br class="Apple-interchange-newline" /><strong>Il punto sulla Legge 4/2004 dopo 8 anni e le prospettive future per l'accessibilità del Web</strong><br />Interverranno (in ordine alfabetico):<br />- Onorevole Ileana Argentin (Partito Democratico)<br />- Sergio Bellucci (Net Left)<br /><span class="text_exposed_show">- Marco Bertoni (Esperto di accessibilità del Web)<br /></span><span class="text_exposed_show">- Antonio De Vanna (Capo dell’Ufficio Accessibilità dei sistemi informatici CNIPA)<br /></span><span class="text_exposed_show">- Ennio Paiella (Fondazione Asphi)<br /></span><span class="text_exposed_show">- Nicola Palmarini (IBM)<br /></span><span class="text_exposed_show">Il convegno si svolgerà giovedì 10 maggio 2012 a Roma presso l'Associazione Culturale Centofiori, Via Goito 134 alle ore 17 <br /></span></p>
</td>
</tr>
</tbody>
</table>
<p>Seguite l'evento su <a class="external-link" href="https://www.facebook.com/events/417874758240782/">Facebook</a>. (ci saranno aggiornamenti anche sulla <em>location</em>)</p>
<p>Sarebbe davvero bello se questo silenzio si sciogliesse e potessimo capire insieme quali sono le <strong>nuove prospettive</strong>. Quali le implementazioni possibili, le soluzioni pratiche, le opportunità per l'accessibilità che il web può offrire oggi. Come ho imparato fin dal primo giorno da un vecchio amico che fa formazione in questo settore, l'accessibilità è un processo e il processo va anche aggiornato.&nbsp;</p>
<p><strong>Bibliografia:</strong></p>
<p class="discreet">03-01-2012<br /><a class="external-link" href="http://www.w3.org/QA/2012/01/wcag_techniques_learn_more.html">WCAG Techniques Updated - Learn about
the informative guidance</a></p>
<p class="discreet">22-09-2011<br /><a class="external-link" href="http://open.abstract.it/it/blog/cinzia/legge-stanca-e-accessibilita-cosa-cambia">Legge
Stanca e accessibilità: cosa cambia?</a></p>
<p class="discreet">15-06-2011&nbsp;<br /><a class="external-link" href="http://www.destralab.it/aggiornamento-legge-stanca/">Aggiornamento Legge Stanca</a></p>
<p><strong>Documenti:</strong></p>
<p class="discreet">11-12-2008<br /><a class="external-link" href="http://www.w3.org/TR/WCAG20/">Web Content Accessibility Guidelines
(WCAG) 2.0</a><br />W3C Recommendation 11 December 2008</p>
<p class="discreet">03-01-2012<br /><a class="external-link" href="http://www.w3.org/TR/WCAG20-TECHS/complete.html">Techniques for WCAG 2.0</a></p>
<p class="discreet">03-01-2012<br /><a class="external-link" href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/complete.html">Understanding WCAG 2.0</a></p>
<p><strong>Sitografia:<br /></strong></p>
<p class="discreet"><a href="http://www.w3.org/WAI/">http://www.w3.org/WAI/</a></p>
<p class="discreet"><a href="http://www.w3.org/WAI/Technical/Activity">http://www.w3.org/WAI/Technical/Activity</a></p>
<p class="discreet"><a href="http://radharc.com.au/2012/01/the-good-points-of-wcag2/">http://radharc.com.au/2012/01/the-good-points-of-wcag2/</a></p>
<p><strong>Link di cui si è persa la consistenza nel sito di origine:</strong></p>
<p class="discreet"><a href="http://www.innovazionepa.gov.it/TestoPDF.aspx?d=19451">http://www.innovazionepa.gov.it/TestoPDF.aspx?d=19451</a></p>
<p class="discreet"><a href="http://www.innovazionepa.gov.it/lazione-del-ministro/linee-guida-siti-web-pa/presentazione.aspx">http://www.innovazionepa.gov.it/lazione-del-ministro/linee-guida-siti-web-pa/presentazione.aspx</a></p>
<p class="discreet"><a href="http://www.innovazionepa.gov.it/media/835828/linee_guida_siti_web_delle_pa_2011.pdf">http://www.innovazionepa.gov.it/media/835828/linee_guida_siti_web_delle_pa_2011.pdf</a></p>
<p>&nbsp;</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Riccardo Petracchini</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>Legge Stanca</dc:subject>
    
    
      <dc:subject>accessibility</dc:subject>
    
    <dc:date>2012-02-07T10:40:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/arpav-la-pazienza-premiata">
    <title>Arpav: la pazienza premiata</title>
    <link>http://blog.redturtle.it/arpav-la-pazienza-premiata</link>
    <description>Dalla commessa per l'Agenzia Regionale veneta, una lunga serie di insegnamenti, un grazie a Plone e una parabola sulla perseveranza, nostra e del personale dell'Ente</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h3>Plone, chi era costui?</h3>
<div class="pullquote">Plone, a dispetto delle sue qualità, deve ancora raggiungere una  notorietà paragonabile a quella di altri CMS. Ma cinque anni fa c'era  già chi lo aveva notato</div>
<p>Il crescente successo di Plone nella PA italiana è innegabile, i Clienti soddisfatti (tra cui i membri di PloneGov Italia) non mancano, ma i positivi risultati non sono ancora bastati a garantire la meritata notorietà al più modulare ed evoluto dei CMS liberi di classe Enterprise.<br /><br />E, se per ora Plone non è ancora il nome più citato tra i CMS, immaginate cos'era cinque anni fa!</p>
<p>Risalta quindi ancor di più la lungimiranza con cui <a class="external-link" href="http://www.arpa.veneto.it">Arpa Veneto</a>, nel Maggio 2007, lanciava un bando con base d'asta di 205.000 Euro per il <b>rifacimento in Plone di tutta la galassia di siti Web gestiti dall'Ente</b>. Si trattava del più grande bando Plone mai visto prima in Italia, e anche per RedTurtle fu una "prima" assoluta (prima commessa RedTurtle di questa dimensione, complessità realizzativa, articolazione burocratica), cui ebbi il piacere di contribuire portando un'esperienza da "vecchio volpone" nella redazione dell'offerta tecnica.</p>
<p align="center"><img src="http://blog.redturtle.it/topic_images/Arpav.png/image_preview" alt="arpav_portale" class="image-inline image-inline" title="arpav_portale" /></p>
<h3>La soluzione RedTurtle per ARPAV</h3>
<p>Abbiamo realizzato una<b> soluzione globale</b> comprensiva di Intranet, Portale Web, siti satellite, integrata con varie banche dati ambientali e meteo-climatiche, bollettini e informazioni utilizzando anche tecnologie GIS condivise con il Sistema Informativo Nazionale Ambientale (SINANET).</p>
<div class="pullquote">Portale ma non solo... <a class="external-link" href="https://www.redturtle.it/it/clienti/arpav-portale">una soluzione Web</a> per le ARPA di tutta italia</div>
<p>Integrato con applicazioni legacy e al centro di una rete di siti tematici, il portale Arpav è inserito in un'<b>architettura informativa di grande complessità</b>: alimentato da numerose origini dati grazie a un <b>sofisticato sistema di "abilitatori" HTML e XML</b>, il nuovo portale è completo dal punto di vista informativo e funzionale, è ricco di servizi online e aperto all'interazione con il pubblico.<br />In una delle Regioni italiane di maggior successo turistico, il portale è destinato ad attirare l'attenzione di un pubblico non solo regionale, ed è quindi stato configurato per <b>gestire elevate moli di traffico</b>, come quelle tipicamente associate alle richieste di servizi meteo, alla qualità dell'aria e ad altre informazioni di pubblico interesse.</p>
<h3>"A long and winding road..." - un piccolo passo indietro</h3>
<p>Mettendo in gioco le nostre migliori risorse realizzammo un'offerta, poi rivelatasi vincente, comprensiva della progettazione dell'architettura hardware e sistemistica a supporto del complesso dispiegamento, giocato su due piani (portale e Intranet) e comprensivo di una serie di siti a corredo.</p>
<div class="pullquote">Anni di gestazione, commissariamento, ridiscussione: ma il progetto sopravvive</div>
<p>Pronti a partire, nel Luglio 2007 ricevemmo la notizia della sospensione della gara per motivi di riorganizzazione interna: riaperta ad Agosto, la gara ci veniva aggiudicata nel Gennaio 2008. La redazione del progetto esecutivo coincideva con l'avvio di una fase di commissariamento dell'Ente, che si rifletteva, tra l'altro, in una radicale ridiscussione del progetto e delle sue priorità. Questa fase transitoria si è conclusa l'anno scorso, con la fine della gestione commissariale e con il collaudo formale a Luglio 2011. La messa in produzione è avvenuta il 18 gennaio di quest'anno.</p>
<h3>"And the winner is..."</h3>
<p>"Bene," si chiederanno i miei lettori, "cosa c'è di straordinario?".<br />Dal mio punto di vista, ci sono dei premi da assegnare:</p>
<ul>
<li>ARPAV va premiata per almeno due motivi: la scelta precoce di Plone, che ben si inserisce nelle scelte regionali per il free software, e l'aver mantenuto dritto il timone attraverso i pericolosi mari del commissariamento e della mancanza di fondi, non solo portando a compimento un progetto da alcuni dato per morto già sul nascere, ma, per strada, convertendolo in qualcosa di diverso e più adatto a ciò che l'Agenzia è diventata nel frattempo</li>
<li>Plone va premiato per avere saputo rispondere a questo cambiamento: cosa che probabilmente nessuna tecnologia proprietaria avrebbe saputo garantire.</li>
</ul>
<p>Noi di RedTurtle, che certamente abbiamo imparato a non dare nulla per scontato, e che abbiamo messo in gioco una resistenza da ultramaratoneti, il nostro premio lo abbiamo già avuto: un Cliente soddisfatto, tra i primi membri di PloneGov Italia, che ora potrà finalmente entrare in una fase di piena partecipazione (si parla già di un evento di confronto con la comunità PloneGov e non solo...).</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Cesare Brizio</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>Plone</dc:subject>
    
    <dc:date>2012-01-26T11:25:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/sant-agostino-consip">
    <title>Plone, da Sant'Agostino al CONSIP</title>
    <link>http://blog.redturtle.it/sant-agostino-consip</link>
    <description>Il Comune di Sant'Agostino rilascia al pubblico il suo nuovo portale, caratterizzato da semplicità d'uso, costo contenuto e completezza: RedTurtle distribuisce sul Marketplace della Pubblica Amministrazione soluzioni Plone CONSIP di caratteristiche analoghe.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h3>Esigenze diffuse? Una risposta per tutti!</h3>
<p>Una soluzione completa ed integrata con costi  d'esercizio contenuti per Comuni piccoli e medi dalle evolute esigenze  comunicative...<br />Più facile a dirsi che a farsi. La risposta di RedTurtle si basa su <b>Plone 4</b> e su un set di funzionalità standard che, nel caso del Comune di Sant'Agostino, un nostro nuovo Cliente con le idee molto chiare, sono state accompagnate da un layout grafico che unisce semplicità e gradevolezza.</p>
<p><img alt="Comune di Sant'Agostino" class="image-left" height="187px" src="http://www.redturtle.it/it/clienti/progetti/comune-santagostino-portale/additionalImage1" width="200" /></p>
<p>Il sito soddisfa tutte le esigenze di base: adempiere agli obblighi di Legge, offrire un sito accessibile e completo, e al contempo promuovere il territorio con i suoi eventi. Il tutto, usando software libero, <a class="external-link" href="http://www.redturtle.it/it/tecnologie/cms-plone">Plone</a> e l'esperienza di <a class="external-link" href="http://www.redturtle.it">RedTurtle</a> nel servire le <b>Pubbliche Amministrazioni  Locali</b>.</p>
<p>Ispirandosi a questo concetto di "completezza espandibile", RedTurtle ha recentemente confezionato due soluzioni Plone, dotate dei prodotti aggiuntivi di utilizzo più frequente, ed ha deciso di servirsi del MEPA di CONSIP per la loro distribuzione.</p>
<h3>Il vantaggio MEPA</h3>
<div class="pullquote">Il Mercato Elettronico della PA: alternativa veloce ed economica ai classici bandi, per un migliore investimento del denaro pubblico.</div>
<p>Il <a class="external-link" href="https://www.acquistinretepa.it/shres/loginPage">Mercato Elettronico della Pubblica Amministrazione</a> da diversi anni consente alle PA un accesso rapido agli acquisti di beni e servizi: in questo caso, è CONSIP che si fa carico di accertare le <b>caratteristiche di solidità e solvibilità delle aziende</b>, e di incanalarne l'offerta in bandi "sempre aperti" verificando poi la rispondenza di quanto offerto ai requisiti di riferimento. L'Ente viene così sgravato dall'onere delle procedure di gara e di selezione fornitori, e deve semplicemente, per così dire, apporre la sua firma su di un <b>contratto già pronto con prezzo "chiavi in mano"</b>, per la fornitura di uno specifico bene.</p>
<p align="center"><img src="http://blog.redturtle.it/topic_images/LogoAcquistiinretePA.png/image_preview" alt="Logo Acquiti in rete PA" class="image-inline image-inline" title="Logo Acquiti in rete PA" /></p>
<h3>Come Plone aiuta... tutti!</h3>
<div class="pullquote">Plone non si vende, si personalizza: abbiamo predefinito il costo di due livelli di personalizzazione, differenziati nel numero di giornate dedicate a formazione, installazione e adeguamento alle esigenze degli utenti</div>
<p>Proprio la modularità di Plone, con i suoi prodotti aggiuntivi, ha consentito di modulare l'offerta su Plone base più un set preconfigurato di prodotti, ad attivazione opzionale. Dal lato RedTurtle, si è preconfezionata e semplificata una parte delle attività, potendo così proporre agli Enti, quale che sia la loro dimensione, un costo più che abbordabile, per dotarsi di una solida piattaforma, altamente estensibile, ed accedere al riuso di soluzioni in ambito <a class="external-link" href="http://www.plonegov.it">PloneGov Italia</a>.</p>
<p>RedTurtle non intende discostarsi dal suo storico profilo di realizzatore di soluzioni su misura, ma al tempo stesso intende giovarsi della <b>completezza funzionale di Plone</b>, già in versione base, per favorire l'ulteriore diffusione di questo apprezzatissimo software open.</p>
<p>Le due soluzioni CONSIP, simili a quella realizzata appositamente per il Comune di Sant'Agostino, sono cedute a costo  differenziato a seconda della complessità e della provincia dell'Ente acquirente. Denominate "Portale Plone versione Base" (qui la descrizione per <a class="external-link" href="http://bit.ly/srY5TL">prima fascia</a> e <a class="external-link" href="http://bit.ly/v7QUcx">seconda fascia</a> di Province) e "Portale Plone Versione Plus" (<a class="external-link" href="http://bit.ly/sdq1bl">prima fascia</a> e <a class="external-link" href="http://bit.ly/uLWp7d">seconda fascia</a> di Province).</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Cesare Brizio</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>plonegov</dc:subject>
    
    
      <dc:subject>Plone 4</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    <dc:date>2012-01-12T17:20:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/plone-in-10-secondi">
    <title>Plone in 10 secondi</title>
    <link>http://blog.redturtle.it/plone-in-10-secondi</link>
    <description>Ho provato per voi il nuovo servizio creato da Alan Runyan per creare al volo il tuo Plone site.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="pullquote">Impiegherò sicuramente più tempo a raccontarti come farlo che quello che ho utilizzato per creare <a class="external-link" href="http://massimoazzolini.ploud.com">massimoazzolini.ploud.com</a>.</div>
<h2>Configura</h2>
<p>Il sistema è molto semplice e molto <br /><b>come-te-lo-aspetti</b>:</p>
<ol>
<li>vai su <a class="external-link" href="http://ploud.com">ploud.com</a></li>
<li>iscriviti: email, dominio, lingua</li>
<li>controlla la tua posta: c'è una mail di validazione con un link (devo davvero dirti che fare? :-)</li>
<li>ti chiederà la password che vorrai utilizzare</li>
<li>fatto.</li>
</ol>
<p>Ci sono 2 tipi di servizi: <b>gratuito</b> e a canone mensile. Fondamentalmente si tratta della stessa soluzione, ma a pagamento ottieni:</p>
<ul>
<li>la possibilità di avere un tuo dominio</li>
<li>più banda</li>
<li>più spazio</li>
<li>indicizzazione di google</li>
</ul>
<h2>Scegli il tema</h2>
<p>Ora puoi impostarti il tuo tema tra quelli disponibili.</p>
<p><img src="http://blog.redturtle.it/topic_images/Screenshot20111229at17.34.43.png/image_thumb" alt="Il tema scelto" class="image-right image-inline" title="Il tema scelto" />Tra gli 11 disponibili, io ho scelto "<a class="external-link" href="http://pypi.python.org/pypi/plonetheme.earthlingtwo/0.2">Earthling two</a>" che avevamo adattato e rilasciato mesi fa su <a class="external-link" href="http://pypi.python.org/pypi?%3Aaction=search&amp;term=redturtle&amp;submit=search">pypi</a>. <br />E' bello vedere come ancora una volta la comunità funziona.</p>
<p>Tra l'altro l'uso di <a href="http://blog.redturtle.it/ploneconference-2011-novita-e-conferme" class="internal-link">Diazo</a> facilita molto l'implementazione di questo tipo di servizi: oggi ci sono "solo" 11 temi, ma è possibile aggiungerne altri.</p>
<h2>Aggiungi funzionalità</h2>
<p>Ora puoi aggiungere gli add-on, tra cui:</p>
<ul>
<li>Carousel</li>
<li>Dropdown menu</li>
<li>Autenticazione con OpenID</li>
<li>PloneFormGen per creare moduli online</li>
<li>Simple Social: vuoi farti mancare Facebook &amp; co?</li>
<li>Workflow personalizzati per cartella</li>
<li>Copia di lavoro</li>
<li>plone.app.caching: cache per siti più veloci</li>
</ul>
<p>e i due nuovi cavalli di razza di Plone:</p>
<ul>
<li>Dexterity</li>
<li>Diazo theme support</li>
</ul>
<h2>Quindi?</h2>
<p>Beh, è Plone! Hai tutto quello che puoi fare con Plone, niente di meno. Ci sono alcuni add-on interessanti anche se c'è tutta una serie di ulteriori add-on che vorrei già poter usare.</p>
<p>L'attuale target di mercato è sicuramente molto basico e i temi sono veramente pochi (anche se con Diazo e un po' di olio di gomito puoi fare faville).</p>
<p>Seconde me ha le potenzialità necessarie per crescere. Stay tuned.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Massimo Azzolini</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>Dexterity</dc:subject>
    
    
      <dc:subject>Plone 4</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    
      <dc:subject>Diazo</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    <dc:date>2011-12-29T17:25:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/sottositi-in-plone-la-nostra-soluzione">
    <title>Sottositi in Plone: la nostra soluzione</title>
    <link>http://blog.redturtle.it/sottositi-in-plone-la-nostra-soluzione</link>
    <description>Approfittando della migrazione a Plone 4, ci siamo presi il tempo di rilasciare finalmente, nella consueta ottica del riuso in stile PloneGov, il prodotto Plone per gestire sottositi in uso da qualche anno nel Comune di Modena</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<h2>La priorità: capire <em>cosa</em> è un sottosito</h2>
<p>Prima di addentrarsi nella scelta di una delle soluzioni Plone per gestire <strong>sottositi</strong>, è bene iniziare il tutto con un'esame della propria organizzazione (o di quella del Cliente che vi ha richiesto "<em>Plone e sottositi</em>") per capire che cosa è un sottosito agli occhi dell'utilizzatore finale.</p>
<p>Può sembrare un passo inutile e dal risultato ovvio in quanto ogniuno di voi avrà in questo momento un'idea ben precisa ma posso assicurarvi che in questi anni abbiamo potuto vedere come questo concetto possa essere percepito in modo molto diverso.</p>
<p>Diamo innanzi tutto una definizione abbastanza generica da poter essere corretta in ogni caso (che dite, la scrivo anche su Wikipedia?).</p>
<p class="callout">Un sottosito è una porzione di un sito più grande ma che risente di un certo grado di indipendenza, pur mantenendo un legame col sito principale o con eventuali sottositi fratelli.</p>
<p>Fin qui tutto ok ma in seguito inizieranno ad emergere dettagli e molto spesso le similitudini tra le differenti richieste finiranno qui.</p>
<p>Le variabili in gioco sono le seguenti: <strong>indipendenza</strong> e <strong>legame col sito principale</strong>. Tutti vedono queste due caratteristiche in modo molto diverso.</p>
<p>Il nostro lavoro in questi casi è sempre stato analizzare innanzi tutto che cosa l'utente vuole ottenere.</p>
<p>Non ci siamo sorpresi quando alle volte il concetto di sottosito si è fermato alla richiesta di avere un dominio diverso col quale poter navigare una parte del il sito principale (e.g: sottosito.ente.it) oppure alla semplice <a class="external-link" href="http://plone.org/products/redturtle.subsites/#subsite-sometimes-is-only-matter-of-theme">applicazione di un tema differente</a>. Non c'è nulla di male: un logo differente, o poco più, alle volte è tutto quello che i vostri utenti si aspettano e basta ai visitatori del sito per dare il giusto messaggio.</p>
<h2>Gradi di indipendenza dal sito madre<br /></h2>
<p>Vediamo i vari scenari che si possono presentare.</p>
<h3>Indipendenza 0%, legame col principale 100%</h3>
<p>E' l'esempio fatto poco fa. Stiamo quindi parlando di siti dove l'indipendenza è nulla mentre il legale col sito principale è completo. L'utente ha solo bisogno di un richiamo visuale che identifichi l'entrata in un dipartimento diverso, una sottosezione dell'ente o della compagnia, etc.</p>
<h3>Indipendenza 100%, legame col sito principale 0%</h3>
<p>Altro non infrequente esempio è lo sviluppo di tanti piccoli sottositi, potenzialmente diversi tra loro in tutto.</p>
<p>Al termine dell'analisi di queste situazioni ci vede essere da parte vostra la lecita domanda "<em>Ma perché dite che vi serve un sottosito? Quale è il legame col sito principale?</em>".<br />Anche in questo caso non stupitevi se la risposta a volte è "<em>Nessun legame!</em>".</p>
<p>Molto spesso l'utente ha davvero bisogno di siti Plone completamente separati che condividono semplicemente:</p>
<ul><li>i prodotti installati</li><li>una base dati utente comune (ma non è detto)</li><li>l'uso di un dominio principale condiviso (ente.it/sottosito oppure sottosito.ente.it)</li></ul>
<p>In questi casi Plone risolve da solo brillantemente la necessità, permettendovi di creare siti Plone separati nella stessa istanza Zope. Non vi serve altro!</p>
<h3>La verità sta nel mezzo</h3>
<p>Ovviamente nella maggior parte dei casi si ha "la sana via di mezzo".</p>
<p>In questa zona grigia molto spesso non vi serve chissà quale prodotto installato, ma qualche piccolo accorgimento.</p>
<p>Un esempio reale:</p>
<p>"<em>i sottositi dovranno essere completamente indipendenti ma il link "Home" delle briciole di pane deve puntare al sito principale</em>".</p>
<p>Quindi la Home del sottosito parte in realtà dalla seconda voce. Come otteniamo una cosa simile? Una semplice modifica che personalizzi la viewlet che genera questo elemento, per inserire un link assoluto al sito base. Per il resto: siamo ancora in presenza di un ambiente altamente indipendente. Il vostro "Plonista di fiducia" può farvi ottenere questo comportamento con poche ore di lavoro!</p>
<p>Da qui possiamo incontrare casi dove l'indipendenza cala piano piano e i prodotti da personalizzare ed installare crescono e si complicano...</p>
<p>Quando arrivate a questo, vale la pensa guardarvi attorno a capire che cosa vi serve davvero, e verificare che cosa Plone vi offre.</p>
<h2>Altri prodotti che SI OCCUPANO DI sottositi</h2>
<p>La necessità di ottenere sottositi è largamente sentita in Italia (forse anche legata alle recenti norme di razionalizzazione dei siti esistenti per gli Enti Pubblici) ma assai meno all'estero.</p>
<p>Al termine della Plone Conference di Budapest ho partecipato ad un Open Space dove si è parlato di sottositi, ma per il resto abbiamo dovuto faticare, <a class="external-link" href="http://dev.plone.org/plone/ticket/8787">inviare segnalazioni</a>, discutere ed aspettare perché Plone ci facilitasse questo comportamento. Anche le discussioni a riguardo non sono poi tante (vale la pena leggere "<a class="external-link" href="http://ifpeople.wordpress.com/2008/12/11/subsites-in-plone-review-of-info-and-call-for-sharing-products-experiences-and-best-practices/">Subsites in Plone: Review of info and call for sharing products, experiences, and best practices</a>").<br />Ad oggi l'unico prodotto che sembra abbastanza mantenuto e aggiornato che si occupa di questa necessità è <a class="external-link" href="http://plone.org/products/collective-lineage/">Lineage</a>.</p>
<p>... almeno fino al rilascio del nostro prodotto! <img src="http://keul.it/images/blog/stock_smiley-2.png" alt=":-)" /></p>
<p>Ad ogni modo con la release 4 il nostro CMS preferito è diventato un <em>ottimo</em> ambiente per avere sottositi.</p>
<h2>Fare sottositi in Plone senza usare Plone: redturtle.subsite</h2>
<p>La natura di <a class="external-link" href="http://plone.org/products/redturtle.subsites/">redturtle.subsites</a> si riassume in questo. Spostare al di fuori di Plone (Apache) tutta una serie di problematiche che, grazie a funzionalità native di Plone (anche se poco conosciute) è possibile gestire senza codice aggiuntivo.</p>
<p>Il prodotto nasce da alcuni esperimenti di RedTurtle ma viene portato poi avanti grazie alle esplicite richieste del <a class="external-link" href="http://www.comune.modena.it/">Comune di Modena</a>, che ha sentito da molti anni questa necessità in alcune installazioni ed è quindi un precursore dell'esplorazione dei sottositi in Plone.</p>
<p>Siamo in presenza di sottositi dove il rapporto "indipendenza/legame col principale" è <em>variabile</em>, ma comunque molto spostata verso un livello di bassa indipendenza ed altra integrazione: i sottositi fanno tutti parte della Rete Civica e questo non viene mai completamente nascosto.</p>
<p>Descriviamo nel dettaglio le richieste originali.</p>
<h3>Back-end</h3>
<p>I redattori dei sottositi devono poter accedere ad un indirizzo di back-end (anche detto "back-office") riservato, e si autenticano da quell'indirizzo (qualcosa come <em>redazione.ente.it</em>).</p>
<p>La caratteristica del back-end è quella di nascondere completamente tutto ciò che identifica i sottositi e mostrare il sito Plone principale. I sottositi risultano quindi semplici cartelle all'interno del portale visitato.</p>
<p>Anche il tema grafico può essere personalizzato fino ai limiti dello spartano, eliminando tutto quello che occupa spazio visivo nello schermo del redattore (o perché no, aggiungendovi elementi che abbiano il solo scopo di facilitare la redazione).<br />Il tema diventa quindi un vero e proprio <strong>tema riservato al back-end</strong> (ma non è obbligatorio).</p>
<p>Il redattore può quindi facilmente eseguire link interni (usando l'editor di Plone) tra documenti di sottositi diversi, creare collezioni che catturino informazioni da più sottositi, ...</p>
<h3>Front-end</h3>
<p>Questo comportamento deve cambiare nel front-end. Quando il visitatore accedere ad un sottosito deve ovviamente vedere il tema applicato a questo, ma deve avere un livello di integrazione col sito principale molto più basso.</p>
<p>I link alla home del sito, dal logo e dalle briciole di pane, devono riferirsi al sottosito corrente, non a quello principale.</p>
<p>Se non fosse per le ricerche effettuate nel sito o per la presenza di collezioni che qua e là possono mostrare contenuti proveniente dagli altri sottositi fratelli, potrebbe quasi sembrare di trovarsi all'interno si un sito Plone separato.</p>
<p>Con Plone è estremamente semplice (leggasi "<em>senza installare nulla</em>") isolare una cartella perché questa funzioni come un sito indipendente, ma questo influenzerebbe sia il back-end che il front-end (livello di indipendenza troppo elevato).</p>
<h3>La nostra soluzione</h3>
<p>Il nostro prodotto offre un modo estremamente semplice e poco invasivo di avere:</p>
<ul><li>un back-end che nasconda completamente i sottositi</li><li>un front-end che mostri alcune cartelle come sottositi</li><li>una metodologia semplice per creare temi aggiuntivi per questi sottositi</li></ul>
<p>Creare uno di questi <a class="external-link" href="http://plone.org/products/redturtle.subsites/#create-a-subsite-plone-theme">temi per i sottositi</a>, o personalizzare un tema esistente, è estremamente semplice.</p>
<p>Il prodotto offre già alcune piccole personalizzazioni di Plone (modificandolo il meno possibile) per non dover sviluppare nessun codice aggiuntivo. Abbiamo anche fornito un <a class="external-link" href="http://pypi.python.org/pypi/example.rtsubsites_theme">tema di esempio per un sottosito Plone</a>.</p>
<p>Le altre caratteristiche fornite sono:</p>
<ul><li>la navigazione di front-end interna al sottosito è altamente limitata al sottosito stesso (briciole di pane, link alla radice, ...)</li><li>le ricerche sono eseguite a livello globale</li><li>le collezioni comprendono tutto il sito (viene lasciato quindi al redattore il compito di limitarle, se lo desidera)</li><li>ipotetici redattori di front-end (utenti esterni alla redazione) sono fortemente limitati, come se stessero lavorando in un sito Plone indipendente</li></ul>
<h2>Conclusioni</h2>
<p>Il prodotto redturtle.subsite è semplicemente un aggregatore di tutta la splendida tecnologia sottostante e la pagina ufficiale del prodotto può essere vista come un <a class="external-link" href="http://plone.org/products/redturtle.subsites/#apply-the-theme-aka-get-a-subsite">manuale dei sottositi in Plone</a>, per chiunque volesse intraprendere la strada (anche senza voler per forza usare redturtle.subsite potreste trovare informazioni interessanti).</p>
<p>La sua limitata dimensione dimostra come Plone sia di per se uno strumento estremamente maturo e, lasciatemelo dire, ancora una volta pieno di belle sorprese!</p>
<p>&nbsp;</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Luca Fabbri</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>riuso</dc:subject>
    
    
      <dc:subject>integration</dc:subject>
    
    
      <dc:subject>plonegov</dc:subject>
    
    
      <dc:subject>release</dc:subject>
    
    
      <dc:subject>navigation</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    <dc:date>2011-08-01T14:47:55Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>





</rdf:RDF>
