<?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/italian/RSS">
  <title>Italian</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/prodotti-gestire-prenotazioni-plone"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/web-apps-debug-remoto-android-chrome-devtools"/>
      
      
        <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/sunburst-css-dtml"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/plog-2013-due-giorni-al-plone-open-garden-tra-idee-e-nuove-sfide"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/gallerie-slider-immagini-sito-web-20-esempi"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/pudb-ovvero-come-ho-imparato-velocizzare-mio-debug"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/mi-piacciono-le-bagigie"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/rt.atmigrator-pensioniamo-vecchi-tipi-con-un-click"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/sternweber-il-nuovo-portale-plone"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/quando-la-sicurezza-in-plone-e-importante-reindexobjectsecurity"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/e-uscito-il-buildout-2.0-posso-rilanciare-il-mio-buildout"/>
      
      
        <rdf:li rdf:resource="http://blog.redturtle.it/salva-compilazione-form-contenuti-Plone-uwosh-pfg-d2c"/>
      
    </rdf:Seq>
  </items>

</channel>


  <item rdf:about="http://blog.redturtle.it/prodotti-gestire-prenotazioni-plone">
    <title>3 prodotti per gestire le prenotazioni con Plone</title>
    <link>http://blog.redturtle.it/prodotti-gestire-prenotazioni-plone</link>
    <description>Era da un po' che su pypi non si vedevano aggiornamenti relativi alla gestione delle prenotazioni con Plone.  Ora le acque si sono mosse ed ecco cosa è emerso</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>In questo articolo farò una breve analisi di questi tre prodotti:</p>
<ol>
<li><a href="https://pypi.python.org/pypi/Products.PloneBooking/3.0.0a2">Products.PloneBooking</a></li>
<li dir="ltr"><a href="https://pypi.python.org/pypi/rg.prenotazioni/">rg.prenotazioni</a></li>
<li dir="ltr"><a href="https://pypi.python.org/pypi/seantis.reservation/1.0.1">seantis.reservation</a></li>
</ol>
<p>presentati in rigoroso ordine di apparizione su <a href="http://pypi.python.org">pypi</a>.</p>
<p> </p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText">Per tutti, il caso d’uso è il seguente:</div>
<ol>
<li dir="ltr">il redattore pubblica agende di <strong>risorse</strong> (ad es. prestazioni, servizi, sale...) con relative disponibilità</li>
<li dir="ltr">gli utenti richiedono la <strong>prenotazione</strong> della risorsa per un intervallo temporale</li>
<li dir="ltr">i gestori della risorsa <strong>trattano</strong> la richiesta di prenotazione.</li>
</ol>
<p>Ma ora bando alle ciance e vediamo di conoscerli meglio.</p>
<h3 dir="ltr">Products.PloneBooking</h3>
<p dir="ltr"><img class="image-right" src="http://blog.redturtle.it/uploads/plonebooking.png/@@images/e87bd897-c0ff-4f86-b330-cd1a2d557769.png" />Il <i>"decano"</i> dei prodotti per le prenotazioni è senza dubbio <a href="https://pypi.python.org/pypi/Products.PloneBooking/3.0.0a2">Products.PloneBooking</a>. Nato per Plone 2, è ancora <strong>IL</strong> prodotto per le prenotazioni in Plone.</p>
<p dir="ltr">Lo sviluppo pare procedere lentamente: l’ultima release (3.0.0a2) è di <strong>un anno fa</strong><strong>, </strong><strong>ma f</strong>ortunatamente su <a href="https://github.com/collective/Products.PloneBooking">github</a> si può trovare codice un po’ più aggiornato. Proprio questo codice è stato utilizzato per le prove di questo post.</p>
<p dir="ltr">Nonostante abbia utilizzato del codice di sviluppo di una versione alfa, non ho riscontrato <strong>nessun intoppo</strong> significativo nell’utilizzo del prodotto: per prenotare, prenota - e lo fa anche bene!</p>
<p dir="ltr">Il comportamento con javascript disabilitato <strong>non è impeccabile</strong>, ma nessuna delle funzionalità chiave è compromessa.</p>
<h3 dir="ltr">rg.prenotazioni</h3>
<p dir="ltr"><img alt="prenotazionifolderedit.png" class="image-right" src="http://blog.redturtle.it/pypi-images/rg.prenotazioni/prenotazionifolderedit.png/@@images/9d32857b-eb48-4123-9591-fa7dcd2390d9.png" title="prenotazionifolderedit.png" />Questo prodotto è stato sviluppato nell’ambito dell’iniziativa <a href="http://www.plonegov.it/">PloneGov</a>, inizialmente per Plone 3. Ultimamente, grazie a <a class="external-link" href="http://blog.redturtle.it/redturtle/authors/andreacecchi">cekk</a> e <a class="external-link" href="http://blog.redturtle.it/redturtle/authors/luca">keul</a>, è stato considerevolmente migliorato. Le nostre tartarughe l’hanno reso compatibile con Plone 4, non senza dimenticarsi di apportare notevoli migliorie al codice.</p>
<p dir="ltr">Il <strong>punto di forza</strong> di questo prodotto risiede nella possibilità di allocare a priori e con <strong>grande flessibilità intervalli di tempo</strong> per le prenotazioni e di specificare che, in determinate giornate, non verranno accettate prenotazioni (ad esempio durante le <strong>festività</strong>).</p>
<p dir="ltr">Il prodotto è completamente usabile pur disabilitando i javascript.</p>
<p dir="ltr">Il prodotto non è sicuramente maturo quanto PloneBooking e difetta della possibilità di avere una <strong>reportistica</strong> sulle prenotazioni, ma tale funzionalità è in via di sviluppo.</p>
<h3>seantis.reservation</h3>
<p dir="ltr"><img class="image-right" src="http://blog.redturtle.it/uploads/milliwayscalendar.png/@@images/6fc3350d-7fa6-429c-a5c1-f6a7f09fcab2.png" />Questo prodotto è l’ultimo arrivato su pypi, e si vede! Non certo perché mostra difetti di gioventù (anzi, è proprio ben fatto) ma perché è il prodotto <strong>tecnologicamente più avanzato</strong>, sia per quanto riguarda l’interfaccia utente, davvero <strong>moderna</strong>, <strong>comoda</strong> e <strong>intuitiva</strong>, che per quanto riguarda la parte applicativa.</p>
<p dir="ltr">Proprio per questo il prodotto risulta installabile solo su siti <strong>Plone recenti</strong> (minimo 4.3), necessità di un server <strong>postgres</strong> di appoggio (minimo 9.1) e, per il suo utilizzo, <strong>richiede javascript</strong>.</p>
<p dir="ltr">Per quanto concerne le funzionalità, caratteristica <strong>distintiva</strong> di questo prodotto è la possibilità di poterlo configurare per permettere <strong>prenotazioni multiple</strong> nello stesso intervallo temporale.</p>
<h3 dir="ltr">E quindi?</h3>
<p dir="ltr">Cosa dobbiamo usare? La risposta a questa domanda dipende molto dalle vostre effettive esigenze.</p>
<p dir="ltr"><strong>PloneBooking</strong> è consigliato se volete affidarvi a un prodotto maturo con una base di utenti consolidata; <strong>rg.prenotazioni</strong> è in fase di fervente sviluppo quindi aspettatevi a breve novità, correzioni e migliorie; <strong>seantis.reservation</strong> è quello che tecnologicamente cresce di una spanna su tutti, con vantaggi e svantaggi del caso.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Alessandro Pisa</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>riuso</dc:subject>
    
    
      <dc:subject>Plone 4</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    
      <dc:subject>plonegov</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    <dc:date>2013-05-17T12:30:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/web-apps-debug-remoto-android-chrome-devtools">
    <title>Web apps: debug remoto con Android e Chrome Developer Tools</title>
    <link>http://blog.redturtle.it/web-apps-debug-remoto-android-chrome-devtools</link>
    <description>Breve guida all'installazione e configurazione di Google Chrome Developer Tools e Android per il debug remoto di applicazioni web mobile</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Attualmente la maggior parte dei browser web disponibili per <strong>desktop </strong><strong>-</strong><strong> </strong>come per esempio <i>Chrome</i>, <i>Internet Explorer</i>, <i>Opera</i>...<i> -</i> dispone nativamente, o quanto meno permette l'installazione, di strumenti divenuti ormai indispensabili per lo sviluppo web, dei quali sarebbe impensabile fare a meno.</p>
<p style="text-align: center; "><img class="image-inline" src="http://blog.redturtle.it/uploads/browsericons.png/@@images/620b1e8e-9035-4d5b-86f3-82221f9c70fb.png" /></p>
<p>Stiamo parlando infatti di tool molto potenti e raffinati, veri e propri "<i>attrezzi del mestiere</i>" di web developer e designer. <br /><a class="external-link" href="http://getfirebug.com/">Firebug</a>, <a class="external-link" href="https://developers.google.com/chrome-developer-tools/">Chrome Developer Tools</a>, <a class="external-link" href="http://www.opera.com/dragonfly/">Opera Dragonfly</a> sono sicuramente tra i più diffusi e conosciuti, e offrono sofisticate funzionalità tra cui:</p>
<ul>
<li>debugger</li>
<li>console JavaScript</li>
<li>ispezione degli elementi DOM</li>
<li>analisi dei log.</li>
</ul>
<h2 style="text-align: left; ">Problema</h2>
<a name="anchor-breaktext"></a><div class="breakText">In ambiente <i>mobile</i>, nello sviluppo di applicazioni <strong>HTML5 </strong>(web app) le cose non sono diverse,<img class="image-right" src="http://blog.redturtle.it/uploads/lookbehindyou.png" /> nel senso che le esigenze sono le stesse dello sviluppo web tradizionale; a cambiare, però, sono gli strumenti disposizione.</div>
<p>I browser per <i>mobile</i> non hanno infatti le caratteristiche dei fratelli maggiori, lasciando così sviluppatori e designer sprovvisti di un vero e proprio "banco di lavoro" per le loro applicazioni.</p>
<h2>Soluzione</h2>
<p>Fortunatamente a venirci in soccorso sono proprio gli stessi ambienti di sviluppo desktop.mobile.<br /> Negli ultimi anni infatti, alcuni di questi si sono evoluti aggiungendo funzionalità di <i>remote debugging, </i>come ha fatto per esempio Google per <i>Chrome Developer Tools</i>.</p>
<p>Il debug remoto permette di connettersi con il browser in utilizzo sul computer direttamente alla sessione attiva sul browser del dispositivo <i>mobile</i> e rende possibile interagire con essa in tempo reale.</p>
<p><strong>Niente male, direi</strong>! Vediamo come si configura.</p>
<h2 style="text-align: left; ">Installazione</h2>
<p>Nativamente disponibile nella versione desktop di Chrome (F12 da tastiera), <i>Chrome Developer Tools</i> necessita di qualche componente aggiuntivo per l'utilizzo remoto.</p>
<h3>Requisiti</h3>
<ul>
<li>un dispositivo <i>mobile</i> Android</li>
<li>l'ambiente di sviluppo Android (SDK)</li>
<li><i>Chrome for mobile</i> installato sul dispositivo</li>
<li>un cavo USB</li>
</ul>
<p>L'installazione dell'<strong>Android SDK</strong> non presenta grosse difficoltà in quanto Goolge fornisce direttamente l'installer per iOS, Linux e Windows. Una volta scaricato, vi basta seguire le indicazioni di configurazione fornite a schermo. Per maggiori informazioni trovate tutto <a class="external-link" href="http://developer.android.com/sdk/index.html">qui</a>.</p>
<p><strong>Android SDK</strong> viene tipicamente usato per lo sviluppo di applicazioni native, ma è necessario anche nello sviluppo di <strong>applicazioni web <i>mobile</i></strong>: infatti mette a disposizione <strong>adb </strong>(Android Debug Bridge) che permette la comunicazione tra il browser <i>mobile</i> attivo sul dispositivo e <i>Chrome Developer Tools</i> su desktop.</p>
<h3><strong>Chrome for mobile</strong></h3>
<p><i>Chrome for mobile</i> è il browser di Google per <i>mobile</i> scaricabile <strong>free</strong> direttamente da<a class="external-link" href="https://play.google.com/store?hl=en"> Google Play</a>. Attenzione ai requisiti minimi di installazione su <i>Android</i>: richiede infatti una versione 4 o superiore.</p>
<h2 style="text-align: left; ">Configurazione</h2>
<p>Finita la fase di installazione si può procedere con la configurazione, che in linea di massima dovrebbe essere molto veloce; bastano due flag selezionati nei punti giusti.</p>
<p>Ecco cosa fare: connettere il telefono al computer attraverso il cavo USB e, nell'ordine, abilitare il <strong>debugger usb </strong>in <i>Android</i> e il <strong>debugger web <i>mobile</i></strong> in <i>Chrome for mobile </i>come mostrato di seguito:</p>
<p style="text-align: center; "><img class="image-inline" src="http://blog.redturtle.it/uploads/copy2_of_usb.png" style="text-align: center; " /> <img class="image-inline" src="http://blog.redturtle.it/uploads/copy_of_web.png" /></p>
<p>Lanciare ora il comando <strong>adb</strong> direttamente da console per attivare la sincronizzazione tra desktop e dispositivo <i>mobile</i>:</p>
<pre>adb forward tcp:9222 localabstract:chrome_devtools_remote</pre>
<p>Fatto!</p>
<h2>Utilizzo</h2>
<p>Arrivati a questo punto abbiamo tutto il necessario per iniziare una nuova sessione di sviluppo. Digitare quindi nella barra degli indirizzi di Chrome l'indirizzo <i>localhost:9222</i></p>
<p style="text-align: center; "><img class="image-inline" src="http://blog.redturtle.it/uploads/copy_of_image_7.png" /></p>
<p>Se tutto è andato a buon fine, quando si inizia la navigazione da cellulare dovrebbero comparire le pagine navigate in <i>Google Chrome, </i>come mostrato nell'esempio sopra, dove si vedono tre pagine da me aperte in quel momento. Ora potete scegliete quale ispezionare semplicemente cliccandoci sopra. Il sorgente sarà immediatamente disponibile in <i>Chrome Developer Tools</i> sul vostro computer, esattamente come fareste con le applicazioni per desktop:</p>
<p style="text-align: center; "><img class="image-inline" src="http://blog.redturtle.it/uploads/inspection.png" /></p>
<h2 style="text-align: left; ">Conclusioni</h2>
<p>Nel difficile compito di ricerca delle performance, disporre di strumenti adeguati è molto importante specialmente per il <i>mobile</i> dove le risorse a disposizione sono (ancora) ridotte.<br /><i>Chrome Deveveloper tools</i> è uno di questi; di certo non può garantire che le vostre applicazioni siano di successo, ma è di grande aiuto affinché possano diventarlo.</p>
<div>
<div></div>
<div id="_mcePaste"></div>
</div>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Nicola Senno</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>web</dc:subject>
    
    
      <dc:subject>Chrome</dc:subject>
    
    
      <dc:subject>HTML5</dc:subject>
    
    
      <dc:subject>Android</dc:subject>
    
    
      <dc:subject>Remote debug</dc:subject>
    
    <dc:date>2013-05-14T07:40:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <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/sunburst-css-dtml">
    <title>Sunburst e i css + dtml: se li conosci NON li eviti</title>
    <link>http://blog.redturtle.it/sunburst-css-dtml</link>
    <description>Sviluppare un tema basato su Sunburst e cambiargli abito in 5 minuti si può: i dtml non sono ancora morti e aspettano solo di essere riportati in vita!</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Alzi la mano chi, almeno una volta, ha maledetto Sunburst (il tema integrato nelle versioni di Plone 4.x) per averci privato di un preziosissimo supporto nello sviluppo dei temi grafici: <a class="external-link" href="http://plone.org/documentation/glossary/dtml" target="_blank">la sintassi DTML</a>.</p>
<p>Alzi la mano chi ha sul muro dell'ufficio i segni inequivocabili di tazze, portapenne, robottini e cancelleria varia scagliati contro la personificazione di quel public.css di Sunburst che porta scolpito il blu <span>#205C90 nei più reconditi recessi delle proprie righe.</span></p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText"></div>
<p>Proprio così: il formato DTML è stato ufficialmente abbandonato e relegato alle versioni di Plone &lt;= 3.x.</p>
<p>Attenzione: abbandonato non vuol dire "non supportato". Nei nostri temi basati su Sunburst possiamo tranquillamente introdurre file .dtml.<br />Allora non ci resta che prendere esempio dagli sceneggiatori di Beautiful e riportarli alla vita con un bel "<i>coup de theatre</i>".</p>
<p>Lo scopo di questo post non è di spiegarne l'uso, la sintassi o elencarne pregi o difetti. E' una scelta individuale e organizzativa che può essere o meno condivisibile. Ma per tutti i "<i>plone-skinner</i>" che la pensano come me, metto a disposizione la mia personale panacea:</p>
<ul>
<li>il buon vecchio <strong><a href="http://blog.redturtle.it/uploads/base_properties.props" class="internal-link">base_properties.props</a></strong>, ampliato con ulteriori personalizzazioni (stili per la descrizione, bordo inferiore sui link, colore di hover sui link...)</li>
<li>un file <strong><a href="http://blog.redturtle.it/uploads/sunburst_public.css.dtml" class="internal-link">sunburst_public.css.dtml</a></strong> (da aggiungere al proprio tema) che fa uso del <i>base_properties.props</i> per ridefinire tutti gli stili (e solo quelli) del <i>public.css</i> di <strong>Sunburst</strong> in cui sia possibile sostituire un valore statico con una variabile dtml.</li>
</ul>
<p>Entrambi i files vanno inseriti nella cartella "skins/miotema_styles" del proprio pacchetto. Il file sunburst_public.css.dtml dovrà essere registrato in profiles/default/cssregistry.xml con la classica direttiva:</p>
<pre>&lt;stylesheet id="sunburst_public.css" <br />            media="screen" rel="stylesheet" <br />            rendering="link"<br />            cacheable="True"<br />            compression="safe"<br />            cookable="True"<br />            enabled="1"<br />            expression=""/&gt;</pre>
<p>Consiglio di registrarlo <strong>prima</strong> del file css specifico del tema (esempio <i>miotema.css</i>).</p>
<h3><strong>Vantaggi?</strong></h3>
<p>Molteplici:</p>
<ul>
<li>cambiare faccia a Sunburst in 5 minuti </li>
<li>evitare di sovrascrivere l'intero <i>public.css </i></li>
<li>ridurre gli episodi di ipertensione e nervosismo</li>
<li>preservare il candore del muro del proprio ufficio.</li>
</ul>
<h3><strong>Svantaggi?</strong></h3>
<p>Onestamente non ne vedo nessuno, salvo il fatto che il giorno in cui i dtml verranno definitivamente deprecati si dovrà necessariamente rivedere il proprio codice... ma in una simile circostanza si starà senz'altro procedendo con una migrazione di versione "<i>major</i>" e potreste sfruttare l'occasione per proporre un bel restyling del sito ;-)</p>
<p><i>Avvertenze e modalità d'uso: </i>l'uso del prodotto può creare dipendenza e assuefazione. Assumere a piccole dosi e intervallare con la somministrazione di un tema <strong>Diazo</strong> per equilibrare i valori di "<i>cssemia"</i>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Irene Capatti</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>Plone 4</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    
      <dc:subject>css</dc:subject>
    
    <dc:date>2013-04-23T07:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/plog-2013-due-giorni-al-plone-open-garden-tra-idee-e-nuove-sfide">
    <title>Plog 2013, due giorni al Plone Open Garden tra idee e nuove sfide</title>
    <link>http://blog.redturtle.it/plog-2013-due-giorni-al-plone-open-garden-tra-idee-e-nuove-sfide</link>
    <description>Dal 3 al 7 di Aprile si è svolto nella magnifica Sorrento uno degli eventi "must have" italiani su Plone, il Plone Open Garden. Ecco la nostra esperienza</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Come già annunciato nelle ultime news di Plone.it, dal 3 al 7 di Aprile si è svolto nella magnifica <b>Sorrento</b> uno degli eventi "must have" italiani su Plone, il <b>Plone Open Garden</b>. <br />In rappresentanza delle tartarughe, <b>Massimo Azzolini e io</b> siamo arrivati in città il giorno prima dell'inizio ufficiale. Il nostro timore era di essere i soli plonisti in città quella sera, ma appena arrivati in hotel abbiamo avuto la piacevole sorpresa di non essere arrivati tra i primi, bensì tra gli ultimi!</p>
<p>Così l'evento è iniziato già la sera del 2, durante l'aperitivo dell'hotel.</p>
<blockquote class="pullquote">In eventi come il Plog, la comunità Plone mostra le sue qualità migliori: giovialità e socievolezza.</blockquote>
<p>Eventi come il Plog servono anche a stringere nuove amicizie, nuove collaborazioni o semplicemente ritrovare persone che vivono dalla parte opposta del globo e con cui magari si collabora giornalmente a rendere il nostro amato cms sempre più "cool".</p>
<a name="anchor-breaktext"></a><div class="breakText"></div>
<h2>Day 1... si aprano le danze!</h2>
<p>Mercoledì 3, di buonora, sono iniziati i lavori dell'evento. Date le condizioni atmosferiche non ottime, tra i partecipanti si è subito diffusa la gag di rinominare l'evento in "<b>Plone Open Hall</b>" o "<b>Plone Open Basement</b>", per la location scelta per i talk.</p>
<p>Ad aprire le danze sono stati due famosi plonisti francesi, Thomas Desvain e Cédric Messiant. <a class="external-link" href="http://www.slideshare.net/ThomasDesvenain/collectivelocal-plog2013-v2">Thomas ha presentato</a> una suite di prodotti molto interessanti per la <b>delega di permessi agli utenti limitatamente ad un certo contesto </b>di un sito Plone. Tra i prodotti presentati spiccano <b>collective.local.adduser</b> per delegare la creazione di utenti locali; <b>collective.local.addgroup</b> per la delega di creazione dei gruppi; infine <b>collective.local.sendto</b> per la delega di invio di email agli utenti. Tutti i prodotti di questa suite sono disponibili su github:<a class="external-link" href="https://github.com/tdesvenain"> https://github.com/tdesvenain</a>.</p>
<p>Il collega <a class="external-link" href="http://www.slideshare.net/cedricmessiant/collectivecontact-plog2013">Cédric ha presentato</a> un'altra suite di <b>prodotti per la gestione di una rete di contatti/esperti all'interno di un'azienda</b>. La soluzione prevede di poter definire dei gruppi, dei ruoli nei gruppi e degli esperti per i ruoli. La metafora usata durante il talk rappresenta i gruppi con i raggruppamenti gerarchici di un esercito (armata, reggimento); i ruoli sono il corrispondente dei gradi dell'esercito (generale, comandante) e gli esperti sono i singoli soldati. La suite di prodotti è disponibile come al solito su github:</p>
<ul>
<li><a class="external-link" href="https://github.com/collective/collective.contact.plonegroup">https://github.com/collective/collective.contact.plonegroup</a></li>
<li><a class="external-link" href="https://github.com/vincentfretin/collective.contact.core">https://github.com/vincentfretin/collective.contact.core</a></li>
<li><a class="external-link" href="https://github.com/vincentfretin/collective.contact.widget">https://github.com/vincentfretin/collective.contact.widget</a>.</li>
</ul>
<p>Dopo i colleghi francesi è stato il turno di quelli olandesi, con <b>Guido Stevens</b> che ha <a class="external-link" href="http://www.slideshare.net/GuidoStevens/plonesocial-roadmap">presentato</a> la sua soluzione social per Plone, <b>PloneSocial</b>. La chiarezza della visione di cosa c'è nel futuro social di Plone ha lasciato molti piacevolmente impressionati. Il cuore del talk, più che l'insieme dei dettagli tecnici, è stata la presentazione di una roadmap per il completamento del social networking in Plone.</p>
<blockquote class="pullquote">Studi di settore hanno dimostrato che le interazioni lavorative di tipo social all'interno di un'azienda aumentano la produttività dei dipendenti del 20-25%!</blockquote>
<p>La suite di prodotti copre per ora le funzionalità di microblogging, activity stream, follow di utenti o di aree di contenuti e aree di team working. Più di un partecipante al talk era interessato a come avesse affrontato il problema delle performance e Guido ha dimostrato che, attraverso ingegnose soluzioni tecniche, è possibile assicurare la scalabilità sia in alto sia in basso del sistema.<br />Dopo una breve pausa, <b>ha preso la parola il nostro Massimo per <a class="external-link" href="http://www.slideshare.net/massimo.azzolini/agile-values-methods-and-software">presentare l'esperienza di RedTurtle</a> nel mondo del software agile, i problemi comuni e le soluzioni aziendali adottate, sia di tipo organizzativo interno sia come strumenti sviluppati, tra cui Penelope</b>. Il nostro approccio e le nostre soluzioni hanno attirato l'interesse e le domande di molti colleghi Plonisti che si trovano ad affrontare tutti i giorni gli stessi problemi.</p>
<h2><img src="http://blog.redturtle.it/uploads/image.jpeg" title="plog2013-banner" height="286" width="224" alt="plog2013-banner" class="image-left" /></h2>
<p>L'ultimo <a class="external-link" href="http://www.slideshare.net/gborelli/plog2013-lets-get-a-better-collectivegeo-and-improve-plone-for-georeferenced-content">talk</a> della mattinata è stato di <b>Giorgio Borelli</b>, collega plonista italiano, che ha raccontato l'ormai noto e apprezzato prodotto Plone per la geolocalizzazione, <b>collective.geo</b> e la sua roadmap per l'evento.</p>
<p>Nel pomeriggio i lavori sono ripresi con degli sprint su vari argomenti. Lo sprint in assoluto più partecipato è stato incentrato su una <b>discussione sullo stato dell'universo dei prodotti Plone e su come migliorarne sempre più la qualità e la tracciabilità</b>. Dalla discussione è nata l'idea di istituire un concorso annuale per i "migliori 50 prodotti di Plone", in modo da sfruttare questa piccola competizione per spingere la comunità a curare sempre più i propri prodotti.</p>
<p>Nel resto del pomeriggio ho partecipato al gruppo della documentazione, mentre Massimo a quello del Marketing. Nel nostro gruppo ci siamo occupati di trascrivere nero su bianco il processo di rilascio di una nuova release di Plone, le persone coinvolte e gli step da seguire. Abbiamo proseguito con la stesura della documentazione sul processo di installazione passo passo di Plone sui più diffusi sistemi operativi.</p>
<h2>Day 2... the show must go on!</h2>
<p>Il secondo giorno di conferenza si è aperto con un talk di <b>Antonio De Marinis dell'Agenzia Europea per l'Ambiente</b> (eea.europa.eu).</p>
<p>Lo scopo del <a class="external-link" href="http://www.slideshare.net/demarant/visualize-open-data-with-plone-da-viz-plog-2013">talk</a> è stato quello di presentare i lavori dell'Agenzia, fare una panoramica su cosa sia l'Open Data e presentare uno prodotti sviluppati, <a class="external-link" href="http://plone.org/products/eea.daviz">eea.daviz</a>. Questo prodotto permette di visualizzare di dati provenienti dai dataset mondiali in forma di grafici. <br />A seguire ha preso la parola l'attuale presidente della Plone Foundation, <b>Paul Roeland</b><b>, </b>che ha fatto un report sullo stato della fondazione, sui progetti aperti e sulle sovvenzioni per l'organizzazione di nuovi eventi. <br />Dopo una breve pausa ha preso la parola <b>Érico Andrei</b> di Simples Consultoria, l'azienda che quest'anno ha ricevuto l'incarico di organizzare l'annuale conferenza mondiale di Plone.</p>
<blockquote class="pullquote">"...siamo qui per farvi vedere come spendiamo i soldi dell'Agenzia, che  in fin dei conti, sono anche i vostri soldi!" (cit. A. De Marinis)</blockquote>
<p>Come da previsioni, il talk è iniziato con un resoconto dello stato dei lavori dell'organizzazione dell'evento e delle location identificate. <b>Dall'entusiasmo mostrato da <span>É</span>rico ci si aspetta che la Plone Conference 2013 sarà un evento da non perdere</b>. Nella seconda parte del suo talk, Andrei è passato a presentare lo stato di avanzamento di un prodotto presentato in anteprima all'ultima PloneConf, <a class="external-link" href="https://github.com/collective/collective.cover">collective.cover.</a> Questo prodotto, molto interessante, ha lo scopo di <b>fornire alle nostre redazioni uno strumento per la costruzione di homepage in maniera facile, veloce e estremamente flessibile</b>. L'idea di base del prodotto non è nuova, esistevano già vari prodotti per questo scopo - come il più vecchio e famoso <a class="external-link" href="http://plone.org/products/collective.portletpage">collective.portletpage</a> -, ma collective.cover sembra un passo avanti per la flessibilità e per l'utilizzo di tecnologie all'avanguardia che entreranno in Plone nelle prossime release.</p>
<p>Nel pomeriggio, come il giorno precedente, sono ripresi gli sprint. Massimo ed io abbiamo continuato a partecipare ai gruppi del giorno precedente. I lavori della documentazione si sono concentrati sulla preparazione di uno script per l'installazione guidata di tutte le dipendenze di Plone. Lo script, grazie a una grafica minimale, guida l'utente nell'altrimenti delicato compito di preparare il sistema ad ospitare Plone. Il gruppo del Marketing si è concentrato invece sull'identificazione della lista di 50 prodotti "consigliati" di Plone.</p>
<h2>Day 3... leaving Sorrento is never easy, I saw the light fading out!</h2>
<p>Il dovere purtroppo non guarda in faccia nessuno. Il terzo giorno, infatti, la sveglia ci ha riportato alla realtà alle 5 am per prendere il treno che da Napoli ci avrebbe riportato a Ferrara. Dopo 7 ore di viaggio siamo tornati alla nostra città, con un carico di <b>nuovi spunti di approfondimento su soluzioni e prodotti basati sul nostro amato cms Plone</b>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Giacomo Spettoli</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>conference</dc:subject>
    
    
      <dc:subject>eventi</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    
      <dc:subject>community</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    <dc:date>2013-04-12T10:20: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/pudb-ovvero-come-ho-imparato-velocizzare-mio-debug">
    <title>PuDB, ovvero: come ho imparato a velocizzare il mio debug</title>
    <link>http://blog.redturtle.it/pudb-ovvero-come-ho-imparato-velocizzare-mio-debug</link>
    <description>Quando si fa debug di codice poco "docile" è importante avere gli strumenti giusti per non impazzire sprecando tempo prezioso nel trovare il problema</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p style="float:right; "><img class="image-inline" src="uploads/wtf.png/@@images/7c8b7077-5383-4f56-a234-73a3e78d2709.png" /></p>
<p>Nella vita di ogni sviluppatore arriva il giorno in cui si incrocia la propria tastiera con codice incomprensibile, dai risultati inspiegabili e che, ovviamente, bisogna correggere. Avere gli <strong>strumenti adatti per il debugging</strong> è fondamentale.</p>
<p>Come programmatore python ho avuto modo di utilizzare diversi tipi di debugger, dal semplice pdb a una versione più completa: <a class="external-link" href="https://pypi.python.org/pypi/pdbpp/"><strong>pdb++</strong></a>. Esistono debugger integrati nei vari IDE di sviluppo, di cui però non ho mai approfondito troppo l'uso dal momento che li ho sempre trovato ambienti un po' pesanti. Da amante della shell, divido il mio tempo di sviluppo fra vim e un editor di testo molto semplice come <a class="external-link" href="http://www.sublimetext.com/"><strong>sublime</strong></a>.</p>
<p></p>
<a name="anchor-breaktext"></a><div class="breakText">Ed è da amante della shell che sono rimasto piacevolmente colpito da un debugger di cui non conoscevo l'esistenza, e di cui mi ha raccontato qualche giorno fa un uccellino azzurro: <a class="external-link" href="https://pypi.python.org/pypi/pudb"><strong>puDB</strong></a>!</div>
<p>PuDB è un debugger visuale basato su <strong><a class="external-link" href="https://pypi.python.org/pypi/urwid">Urwid</a></strong>. Quando ho visto la sua prima immagine ho pensato che fosse qualcosa per nostalgici: sono riaffiorati parecchi ricordi delle schermate che mi hanno accompagnato quando muovevo i primi passi con TurboPascal.</p>
<p>Ma questo effetto <a class="external-link" href="http://it.wikipedia.org/wiki/Stile_retr%C3%B2"><strong>retrò</strong></a> è passato rapidamente in secondo piano: mi sono reso conto di avere sotto mano <strong>tutto quello che mi serviva per debuggare il problema su cui stavo lavorando</strong>.</p>
<h2>Installazione e uso</h2>
<p>L'installazione è semplice: è necessario utilizzare un interprete che vada almeno dalla versione 2.4 in poi, dopodiché, che si usi buildout, easy_install o pip per l'installazione è indifferente e in un attimo si è pronti all'uso del pacchetto; nel codice che si vuole debuggare basta inserire:</p>
<p class="callout">import <strong>pudb</strong>;<strong>pudb</strong>.set_trace()</p>
<p>e al momento dell'esecuzione, in shell ci si trova nel debugger:</p>
<p><img class="image-inline" src="uploads/pudb.png/@@images/c36746db-0a5c-4e45-b213-802cb5bad61a.png" /></p>
<p>Una sola immagine è già in grado di mostrare che si ha molto per le mani: un'intera pagina di codice sulla sinistra e 3 box sulla destra - il primo con le variabili dello scope, il secondo in cui viene mostrato lo stack e il terzo in cui si trova la lista dei breakpoint.</p>
<h2>Caratteristiche principali</h2>
<p>Il funzionamento base è come quello del pdb: <strong>'n'</strong> per proseguire nel debug, <strong>'s'</strong> per entrare in un metodo e così via. Ma vediamo quali sono le caratteristiche principali di questo debugger e perché, secondo me, rende più veloce il debug.</p>
<blockquote class="pullquote">Navigazione da tastiera tramite le frecce o Shift+[V/S/B] per passare ai box di variabili, stack e breakpoint</blockquote>
<p>Prima di tutto, abbiamo un'ottima navigazione da tastiera: per chi è abituato a vim, si tratta di ricordare qualche combinazione o tasto in più, ma una volta memorizzati i comandi principali si va veramente veloci. Per una lista di tutti i comandi, si può fare riferimento alla guida inserita nel debugger stesso, attivabile premendo <strong>'SHIFT+?'</strong>.</p>
<p>In secondo luogo, si vede una porzione molto ampia di codice; non è una regola, ma cerco di scrivere metodi non troppo lunghi (dove possibile) e con puDB diventa facile visualizzare l'intero metodo di cui si sta facendo debug.</p>
<blockquote class="pullquote">Visualizzazione differenziata per le variabili (tipo, repr, str) ed espandibile nel caso di variabili complesse</blockquote>
<p>Altra caratteristica che reputo importantissima (assieme alla visione completa del codice) è la presenza nei box di destra di tutte le variabili che vengono definite nello scope e aggiornate durante l'esecuzione. Quello che preferisco è il fatto che si possa agire in diversi modi sulle variabili: in caso di variabili complesse, queste si possano espandere come vediamo nell'immagine sotto (premendo <strong>'\'</strong>):</p>
<p style="text-align: center; "><img src="http://blog.redturtle.it/uploads/variables.png" style="text-align: center; " title="" class="image-inline" alt="" /></p>
<p>Inoltre si può scegliere il tipo di visualizzazione per ogni singola variabile, mostrandola per tipo (<strong>'t'</strong>), mostrandone la __repr__ (<strong>'r'</strong>), la __str__ (<strong>'s'</strong>) oppure utilizzando una rappresentazione personalizzata (<strong>'c'</strong>).</p>
<blockquote class="pullquote">Stack delle chiamate navigabile</blockquote>
<p>Per quello che riguarda lo stack, la possibilità di scorrerlo e di navigare nei metodi elencati al suo interno è molto utile, dal momento che si è in grado (senza dover aprire altre finestre o senza riavviare la sessione di debug) di visualizzare il codice chiamante dei metodi che stiamo analizzando. Una volta entrati in un altro metodo dello stack, cambierà lo scope e anche le variabili visualizzate saranno aggiornate; l'esecuzione del debug riprenderà da quel nuovo punto.</p>
<p>Ovviamente, nel caso fosse necessario utilizzare la linea di comando, la possibilità c'è: è sufficiente premere <strong>'!'</strong> per fare switch su una shell python contestualizzata nello scope corrente ('<strong>Ctrl-d'</strong> per uscirne).</p>
<p>Non c'è molto altro da aggiungere; la cosa migliore da fare è mettersi alla tastiera e iniziare a utilizzare questo debugger!</p>
<p><span class="discreet">Immagine nel body: <a href="http://www.flickr.com/photos/smitty/2245445147/">http://www.flickr.com/photos/smitty/2245445147/</a></span></p>
<p><span class="discreet">Immagine in testata: </span><a href="http://www.flickr.com/photos/28208534@N07/4047355843">http://www.flickr.com/photos/28208534@N07/4047355843</a></p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Luca Bellenghi</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>python</dc:subject>
    
    
      <dc:subject>tutorials</dc:subject>
    
    <dc:date>2013-04-03T08:50:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/mi-piacciono-le-bagigie">
    <title>Mi piacciono le bagigie</title>
    <link>http://blog.redturtle.it/mi-piacciono-le-bagigie</link>
    <description>Tartarughe blogger alla riscossa: deliri, speranze e ambizioni di giovani scrittori si incontrano e scontrano (come Mirco e Licia) contro i mostri spaziali
</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><img src="http://blog.redturtle.it/uploads/copy_of_alebagigiesq.jpg" alt="" class="image-left" title="" />Dopo aver ultimato il mio ultimo post, in cui <a class="external-link" href="http://blog.redturtle.it/2013/02/25/migrating-dexterity-items-to-dexterity-containers">facevo il bullo con <strong>dexterity</strong></a>, ho inviato ai temibili revisori del nostro blog una mail dal soggetto <i>"Mi piacciono le bagigie"</i>.</p>
<a name="anchor-breaktext"></a><div class="breakText">Questo il contenuto della missiva.</div>
<p class="callout">Ciao,    ho sottomesso per la pubblicazione questo post:<br /> - <a class="external-link" href="http://blog.redturtle.it/migrating-dexterity-items-to-dexterity-containers">http://blog.redturtle.it/migrating-dexterity-items-to-dexterity-containers</a><br /><br />Vi avviso che è di una noia mortale: già dopo 10 righe capirete che è un'impresa inutile andare avanti. Chi di voi desiderasse avventurarsi oltre sappia che rischia di essere preda di attacchi convulsivi da far invidia a quelli del principe Myskin.<br />Però, secondo me, l'argomento è interessante e mi permette di confrontarmi con i guru di Plone.<br /><br />Giuro che la prossima volta:<br /> - scrivo in itagliano scorrente<br /> - scrivo di <span class="il">bagigie</span><br /><br />Mi sono impegnato molto nel tentare di non subire le dure stoccate di te, cara signorina social: spero di aver fatto tutto a dovere (immagini, page break, numero caratteri, doccia e bidet).<br /><br />Ciao!<br /><br />P.s.: il prossimo blog post sarà un copia incolla di questa mail.</p>
<p>Tutto potrebbe finire qui, ma voglio rivelarvi alcuni dei <strong>terribili e <strong>inconfessabili <strong>segreti</strong></strong></strong> che si celano dietro le righe dei nostri allegri post.</p>
<p>Innanzi tutto, il fatto stesso che ci siano dei revisori è un indice di come le vostre tartarughe preferite <strong>non lascino nulla al caso</strong>. Ben sapendo quanto sia importante il <strong>social media marketing</strong>, abbiamo costituito al nostro interno una <strong>task force</strong> che si occupa di curare la nostra (e quella dei nostri clienti) <strong>presenza sul web</strong>.</p>
<p><img src="http://blog.redturtle.it/uploads/Alien_Tourist_by_madart84.jpg/@@images/deca5ae0-39fc-42fe-bb31-484fce02c5d7.jpeg" alt="" class="image-left" title="" />Questi <i>"mostri spaziali"</i>, come dicevo nell'abstract, si assicurano che chi realizza i vostri siti non si limiti a <strong>destreggiarsi nelle nuvole di bit</strong>, ma si conceda saltuariamente divagazioni letterarie, impreziosendo il proprio lavoro con pregevoli citazioni allo stupendo principe Myskin, protagonista dell'<a class="external-link" href="http://it.wikipedia.org/wiki/L'idiota_(Dostoevskij)">Idiota</a> di Dostoevskij.</p>
<p>Dietro a questi nobili intenti si celano retroscena raccapriccianti. Funziona così: a intervalli regolari una <strong>tartaruga ignara</strong> viene presa, incappucciata e tratta in una cantina buia dove deve redigere in un minuto e mezzo un blog post.</p>
<p>Gli argomenti dei post sono in gran parte lasciati alla buona volontà degli autori, i quali cominciano a sudare freddo, ben sapendo che se sbaglieranno tema i loro carapaci verranno segnati per la vita con fruste infuocate.</p>
<p>Stante il fatto che questo è il blog di un'azienda che "lavora il web", ovviamente non è sensato parlare di <strong>bagigie</strong> (ovviamente!), ma è anche meglio evitare contenuti troppo tecnici. Purtoppo, avendo trasgredito l'ultima volta scrivendo un post iper tecnico, sono stato costretto a cadere nell'estremo opposto scrivendo di <strong>bagigie</strong><strong>, </strong><strong>operazione che mi causerà una</strong><strong> </strong><strong>doppia razione di scudiscio</strong><strong>. </strong></p>
<p>Dopo che il tema del post è stato considerato meritevole di pubblicazione, la povera tartaruga è ben consapevole di dover ornare il suo post con immagini, frasi e metadati destinati all'<strong>integrazione con i social network</strong>.</p>
<p>Per esempio ogni post ha una immagine in testata, che vedete sulla pagina del post, ma ha anche un'immagine (più squadrata) dedicata a <strong>Facebook</strong>. Anche le lunghezze dei testi sono studiate per integrarsi al meglio con i social network, ad esempio <strong>Twitter</strong>.</p>
<p>Deputata a sincerarsi che tutte queste accortezze siano rispettate e che i nostri articoli siano comprensibili e scritti in <i>"itagliano scorrente"</i>, è la figura oscura della <i>"signorina social"</i>. Nessuno sa veramente chi sia e se esista per davvero, ma si vocifera che si aggiri nella notte a caccia di errori di ortografia, causando ai loro autori la morte tra atroci sofferenze.</p>
<p><strong><img src="http://blog.redturtle.it/uploads/Galapagos_Turtle_skeleton.jpg/@@images/0bd428fc-1aa8-44da-8fda-4a85fc40b922.jpeg" alt="" class="image-right" title="" />Se</strong> la tartaruga <strong>sopravvive</strong> a tutto questo, il suo post viene pubblicato e può tornare a programmare alla sua scrivania (sempre che qualche <strong>sciacallo</strong> nel frattempo non abbia saccheggiato il saccheggiabile).</p>
<p><strong>Gioite</strong> quindi, adorati lettori, alla vista di un nuovo post su questo blog: finché i vostri occhi leggeranno le nostre parole, noi saremo in vita. E soprattutto <strong>condividete</strong> la vostra gioia con il mondo: cinguettateci, piaceteci, incrementateci, pinteressatevi di noi!</p>
<p>A presto! (forse...)</p>
<hr />
<p><span class="discreet">Originale immagine in testata: <a href="http://www.flickr.com/photos/teresahsu/6410106143/sizes/l/in/photostream/">http://www.flickr.com/photos/teresahsu/6410106143/sizes/l/in/photostream/</a></span></p>
<p><span class="discreet">Scheletro tartaruga: <a href="http://upload.wikimedia.org/wikipedia/commons/9/9a/Galapagos_Turtle_skeleton.jpg">http://upload.wikimedia.org/wikipedia/commons/9/9a/Galapagos_Turtle_skeleton.jpg</a></span></p>
<p><span class="discreet">Cesare in vacanza: <a href="http://fc06.deviantart.net/fs8/i/2005/314/6/7/Alien_Tourist_by_madart84.jpg">http://fc06.deviantart.net/fs8/i/2005/314/6/7/Alien_Tourist_by_madart84.jpg</a></span></p>
<hr />
<p><strong>P.s</strong>: i bottoni per cinguettarci, piacerci, incrementarci, pinteressarci sono là sopra!</p>
<p><strong>P.p.s</strong>: chi mi ha fregato la sedia intanto che ero via?</p>
<p><strong>P.p.p.s</strong>: Il mio preferito è Woodstock</p>
<p><strong>P.p.p.p.s</strong>: Grazie a <a href="http://blog.redturtle.it/authors/andrea" class="external-link">Baio</a> per il suggerimento degli Skiantos e a <a href="http://blog.redturtle.it/authors/andreacecchi" class="external-link">Cekk</a> per la foto imbagigiata</p>
<p>________</p>
<p><i><strong>Visto, approvato e pubblicato dalla "signorina social" in data odierna, con 3 tratti di matita rossa soltanto.</strong></i></p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Alessandro Pisa</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>web</dc:subject>
    
    
      <dc:subject>Facebook</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    <dc:date>2013-03-28T08:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/rt.atmigrator-pensioniamo-vecchi-tipi-con-un-click">
    <title>rt.atmigrator: pensioniamo i vecchi tipi con un click</title>
    <link>http://blog.redturtle.it/rt.atmigrator-pensioniamo-vecchi-tipi-con-un-click</link>
    <description>Archetype che non servono più e contenuti da migrare in un altro tipo? Un prodotto ci può aiutare a concedere loro il meritato riposo in modo facile ed intuitivo</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<blockquote class="pullquote">Di cosa potrei parlare? Cosa ho fatto ultimamente di interessante da poter condividere?</blockquote>
<p>Quando sto per scrivere un nuovo post per il blog, il problema è sempre il solito: trovare un argomento interessante da proporre.</p>
<p>Sfortunatamente per voi, la risposta è sempre la stessa: <strong>migrazioni!</strong></p>
<a name="anchor-breaktext"></a><div class="breakText">Ormai le migrazioni sono diventate il mio pane quotidiano. Il lavoro dell'ultimo anno è stato prevalentemente quello di prendere per mano <strong>vecchi e appesantiti portali Plone</strong> e dargli nuova vita <strong>migrandoli alla versione più aggiornata</strong>.</div>
<p>Come già detto in un precedente <a href="http://blog.redturtle.it/content-type-products-contentmigration" class="internal-link">articolo</a>, spesso le migrazioni sono anche il momento ideale in cui fare un'analisi del portale e individuare eventuali <strong>archetypes creati ad hoc</strong> che, col tempo, sono <strong>diventati inutili o addirittura da eliminare</strong>, perché mai utilizzati correttamente.</p>
<p><img src="http://blog.redturtle.it/topic_images/recycle_logo.gif/@@images/dfcdee5f-a6c5-429b-979c-93a4cf9672dd.jpeg" alt="recycle" class="image-right" title="recycle" />Se quei contenuti li vogliamo proprio eliminare, li cancelliamo direttamente dal portale e non ci si pensa più.<br />Discorso diverso, invece, se questi vanno <strong>mantenuti e</strong> magari <strong>"<i>convertiti</i>" in qualcosa di più standard</strong>, come ad esempio i contenuti base di Plone.</p>
<p>Ultimamente ho dovuto pensare proprio a come migrare 4-5 vecchi Archetypes ormai inutilizzati e farli diventare dei tipi base di Plone (Cartelle, Pagine ed Eventi).</p>
<p>La prima idea è stata quella di creare una serie di procedure come descritto nell'articolo di cui parlavo prima, ma poi mi sono chiesto se non esistesse un modo per rendere parametrizzabile questa operazione senza dover scrivere ogni volta 200 metodi uguali.</p>
<p>Visto che la migrazione che mi interessava era molto base e non avevo bisogno di eseguire nessuna operazione intermedia, ho deciso di creare un piccolo prodottino che mi aiutasse: <a class="external-link" href="https://pypi.python.org/pypi/rt.atmigrator">rt.atmigrator</a>.</p>
<p>Si tratta di un pacchetto che <strong>va inserito nel buildout e non ha bisogno di essere installato</strong>.</p>
<p>Fornisce una semplice vista (<i>http://url-del-sito/@@migrate-types</i>) che non fa altro che chiedere all'utente 2 cose:</p>
<ul>
<li>Il <strong>tipo di partenza</strong> (selezionabile tra i tipi aggiungibili nel portale)</li>
<li>Il <strong>tipo di destinazione</strong> (selezionabile tra i tipi aggiungibili nel portale).</li>
</ul>
<p><img src="http://blog.redturtle.it/topic_images/atmigrator.png" alt="atmigrator" class="image-inline" title="atmigrator" /></p>
<p>Una volta confermato, viene lanciato un metodo come quelli già descritti, che esegue la migrazione con <a class="external-link" href="https://pypi.python.org/pypi/Products.contentmigration">Products.contentmigration</a> utilizzando come parametri i 2 tipi impostati nel form.</p>
<p>Completata la migrazione, <strong>nel log c'è una descrizione completa delle operazioni svolte</strong> (ed eventualmente il traceback degli errori) e l'utente viene informato di quanti elementi sono stati aggiornati.</p>
<p>Il prodotto di per sé è molto semplice, dato che esegue una migrazione base da un tipo ad un altro.<br />Nulla vieta però di prevedere, in futuro, anche delle evoluzioni e supportare, ad esempio, una gestione di filtri per determinare i contenuti da migrare (oltre al solo tipo, magari anche un percorso o lo stato di pubblicazione), oppure delle operazioni pre e post migrazione per determinati tipi.</p>
<p>Il sorgente è disponibile su <a class="external-link" href="https://github.com/RedTurtle/rt.atmigrator">github</a>, quindi si può consultare ed eventualmente modificare in un attimo.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Andrea Cecchi</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>migration</dc:subject>
    
    
      <dc:subject>Archetypes</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    <dc:date>2013-03-20T08:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/sternweber-il-nuovo-portale-plone">
    <title>sternweber.it, il nuovo sito 100% Plone</title>
    <link>http://blog.redturtle.it/sternweber-il-nuovo-portale-plone</link>
    <description>Da alcuni giorni è online il nuovo sito di Stern Weber. In poche righe vi sveliamo gli ingredienti per una ricetta dal sapore garantito!</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a class="external-link" href="http://www.sternweber.it/" target="_blank"><strong>Stern Weber</strong></a>, leader nella produzione di riuniti dentali, rinnova la vetrina dei prodotti con un <strong>nuovo portale</strong>: un cuore di delizioso <strong><a class="external-link" href="http://plone.it/" target="_blank">Plone</a></strong> al latte racchiuso in un tenero guscio di <strong><a class="external-link" href="http://docs.diazo.org/en/latest/index.html" target="_blank">Diazo</a></strong> extra-fondente. <br />Il connubio Plone-Diazo è poi completato da una croccante nocciolina di <strong><a class="external-link" href="http://twitter.github.com/bootstrap/index.html" target="_blank">Bootstrap</a></strong> che lo rende ancora più invitante.</p>
<a name="anchor-breaktext"></a><div class="breakText"></div><p style="text-align: center; "><img src="http://blog.redturtle.it/topic_images/stern-weber-diazo-in-azione/@@images/b702514a-d3f4-41c7-a414-cf88c5352e20.jpeg" alt="Stern Weber, diazo in azione" class="image-inline" title="Stern Weber, diazo in azione" /></p>
<h3>Perché Bootstrap?</h3>
<p>Perché fornisce una solida base di partenza per il templating, dispone di una vasta scelta di effetti javascript integrati, rende più semplice l'approccio al <i>responsive</i> (adattare la visualizzazione alle diverse risoluzioni) e, se usato nella versione sorgente, permette la <strong>massima personalizzazione</strong> grazie a <strong><a class="external-link" href="http://lesscss.org/" target="_blank">Less</a></strong>.</p>
<h4><img src="http://blog.redturtle.it/topic_images/screencapture1.png/@@images/a0a089f1-d746-42e4-9651-9cdd02756147.png" alt="Stern Weber, i file" class="image-right" title="Stern Weber, i file" />Le dosi</h4>
<p>Per avere la giusta lievitazione dell'impasto è necessario includere tutti i sorgenti di Bootstrap senza modifiche: si potrà in futuro aggiornarli alle ultime versioni disponibili senza correre il rischio di perdere le proprie personalizzazioni.</p>
<p>Nel file "<i>core</i>" del progetto (nel mio caso <i>sternweber.less</i>) sarà sufficiente iniziare con:</p>
<pre style="width: auto;">@import "../bootstrap/less/bootstrap.less";</pre>
<p><i>bootstrap.less</i> includerà a sua volta tutti i file originali del framework.</p>
<p>Si procede poi ad amalgamare gli ingredienti aggiungendo:</p>
<pre style="width: auto;">@import "variables.less"; <br />@import "mixins.less"; <br />@import "plonemixins.less";</pre>
<p>dove</p>
<ul>
<li><strong><i>variable.less</i></strong> permette non solo di dichiarare le proprie variabili ma anche di ridefinire quelle di Bootstrap (colori, font, dimensioni, ...) </li>
<li><strong><i>mixins.less</i></strong> aggiunge alcune utilissime funzioni a quelle già presenti in <i>../bootstrap/less/mixins.less</i>: se siete frontend developer e non avete mai provato Less o <a class="external-link" href="http://sass-lang.com/" target="_blank">Sass</a> allora... sorridete! Siete su <i>Cucine da incubo</i> ;-)</li>
<li><strong><i>plonemixins.less</i></strong>, per la gestione di alcune parti di html specifiche sfornate da Plone, mi è stato saggiamente consigliato da <a class="external-link" href="https://twitter.com/mishunov" target="_blank">Denys</a> in occasione dei <a href="http://blog.redturtle.it/traning-with-jarn-much-more-than-training" class="internal-link">training 2012</a>: posso dire senza sbagliare che è stato il <i><a class="external-link" href="http://it.wikipedia.org/wiki/Gordon_Ramsay" target="_blank">Gordon Ramsey</a></i> della situazione!</li>
</ul>
<p>Tutto il resto è olio di gomito e una lenta cottura alla giusta temperatura.</p>
<h3>Perché Diazo?</h3>
<p><img src="http://blog.redturtle.it/topic_images/stern-weber-dettaglio-prodotto/@@images/94a0bbd1-dbea-4db5-9160-fde9696b49e6.png" alt="Stern Weber, dettaglio prodotto" class="image-right" title="Stern Weber, dettaglio prodotto" />Per avere tanta <strong>autonomia e flessibilità in frontend</strong> quanto Plone la permette nel backend. I gestori del sito hanno largamente apprezzato i vantaggi di un'area redazionale semplice, leggera e veloce e non hanno trovato limitante verificare la resa grafica delle pagine in un frontend separato.</p>
<p><strong><a class="external-link" href="http://docs.diazo.org/en/latest/index.html" target="_blank">Diazo</a></strong>, ormai integrato nelle ultime versioni del <i>CMS pythonico</i>, può fare la differenza tra un'ottima ciambella ricoperta di zucchero a velo e una torta da competizione come solo <i><a class="external-link" href="http://it.wikipedia.org/wiki/Il_boss_delle_torte" target="_blank">Buddy</a></i> sa sfornare: alzi la mano il web designer a cui non sia mai stato chiesto "vorrei una torta multistrato, a più piani, magari a forma di brontosauro ma devi arrangiarti con uno stampo tondo con il buco"!</p>
<h3>Perché Plone?</h3>
<p>Ma dai... è una cosa da chiedere? ;-)</p>
<p class="discreet"><a href="http://www.flickr.com/photos/vanchett/3168757904/" target="_blank">Credits photo</a></p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Irene Capatti</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>web</dc:subject>
    
    
      <dc:subject>Diazo</dc:subject>
    
    
      <dc:subject>Plone 4</dc:subject>
    
    <dc:date>2013-03-15T09:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/quando-la-sicurezza-in-plone-e-importante-reindexobjectsecurity">
    <title>Quando la sicurezza in Plone è importante: reindexObjectSecurity</title>
    <link>http://blog.redturtle.it/quando-la-sicurezza-in-plone-e-importante-reindexobjectsecurity</link>
    <description>Quando gli indici introdotti da prodotti aggiuntivi hanno a che fare con la sicurezza del sito, è meglio prendere alcune precauzioni per evitare problemi</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Per chiunque sviluppi con Plone, diventa presto chiara l'importanza del catalogo e, contemporaneamente, la necessità di <strong>mantenere il catalogo del sito aggiornato</strong>.</p>
<p>L'API principale a cui si fa riferimento per aggiornare lo stato di un contenuto nel catalogo Plone è la chiamata a <strong>reindexObject</strong>:</p>
<pre>&gt;&gt;&gt; context.setTitle('Nuovo titolo')<br />&gt;&gt;&gt; context.reindexObject()<br />&gt;&gt;&gt; context.title()<br />'Nuovo titolo'</pre>
<p>Fin qui, nulla di nuovo.</p>
<a name="anchor-breaktext"></a><div class="breakText"></div>
<p>In alcuni casi è possibile limitare gli indici aggiornati a un sottoinsieme di quelli esistenti.</p>
<pre>&gt;&gt;&gt; context.setTitle('Nuovo titolo')<br />&gt;&gt;&gt; context.reindexObject(idxs['Title', 'sortable_title', 'SearchableText'])<br />&gt;&gt;&gt; context.title()<br />'Nuovo titolo'</pre>
<p>In base all'attributo modificato, vale la pena aggiornare tutti gli indici che lo riguardano.</p>
<h2>Quando la sicurezza incontra la ricerca</h2>
<p><img src="http://blog.redturtle.it/topic_images/MorePaperPeople.jpg/@@images/118a359e-7d62-465d-9cec-9f5f418c1cf4.jpeg" alt="Meeting" class="image-right" title="Meeting" />Un fatto meno noto: <strong>il catalogo di Plone è usato anche nella gestione della sicurezza</strong>.<br />In particolare esiste un indice dal nome <strong>allowedRolesAndUsers</strong> esplicitamente usato per una verifica di sicurezza: capire se un utente ha accesso a un contenuto (in pratica viene memorizzato nel catalogo se gli utenti hanno il permesso di "<strong>View</strong>" sul contenuto).</p>
<p>Perché tutto questo? L'alternativa sarebbe disastrosa in termini di prestazioni: caricare tutti i documenti risultanti dalla ricerca e verificare il controllo di sicurezza direttamente su questi.<br />Tale operazione può diventare molto lenta e dispendiosa, se pensiamo che una semplice ricerca testuale può portare a migliaia di risultati in un sito mediamente popolato.</p>
<p>E' quindi importante che <strong>questo indice sia sempre aggiornato</strong>. Per questo motivo, ogni volta che viene effettuata un'operazione che comporta un cambio di sicurezza di un contenuto (principalmente modifiche nella pagina di condivisione), l'indice viene aggiornato automaticamente.</p>
<p>Dato che una semplice chiamata al metodo <i>reindexObject</i> può essere relativamente dispendiosa (tenete sempre presente che Plone potrebbe indicizzare anche i file allegati e che l'operazione di re-indicizzazione di un file può essere piuttosto lenta), esiste un altro metodo che viene utilizzata al suo posto: <strong>reindexObjectSecurity</strong>.<br />Nel funzionamento base di Plone, questa chiamata si occupa di aggiornare solo l'indice <i>allowedRolesAndUsers</i> introdotto sopra.</p>
<h2>Sicurezze alternative</h2>
<p><img src="http://blog.redturtle.it/topic_images/5894290438_493dd4802c_o.jpg/@@images/81948fc8-a18a-43f3-8235-cc9a7468adf6.jpeg" alt="Security cams" class="image-right" title="Security cams" />Ma è vero che l'unico indice legato alla sicurezza sia allowedRolesAndUsers?<br />Nell'uso quotidiano di Plone sì, ma esistono alternative.</p>
<p>Vi porto due esempi.</p>
<h3>collective.portlet.truereview</h3>
<p>Sto parlando di un prodotto poco noto e di qualche anno fa: <a class="external-link" href="https://pypi.python.org/pypi/collective.portlet.truereview/">collective.portlet.truereview</a>.</p>
<p>Questo prodotto applica lo stesso principio utilizzato col permesso "<i>View</i>" dall'indice <i>allowedRolesAndUsers</i> per un nuovo permesso legato all'attività di revisione dei contenuti: "<i>Review portal content</i>".<br />Per fare questo viene creato un nuovo indice: <i>reviewerRolesAndUsers</i>.</p>
<p>Lo scopo del prodotto è fornire una portlet di revisione alternativa per Plone che, a differenza di quella ufficiale, non richieda il caricamento del contenuto.<br /><i>NB</i>: il prodotto è fermo dal 2009, non sono certo che funzioni ancora ma lo trovo piuttosto didattico.</p>
<h3>collective.localrolesdatatables</h3>
<p>Il secondo esempio è legato al più recente <a class="external-link" href="http://plone.org/products/collective.localrolesdatatables/">collective.localrolesdatatables</a>.</p>
<p>Questo prodotto vuole fornire una vista che permetta di ispezionare lo stato della sicurezza e delle condivisioni in un sito Plone.<br />Per fare questo è necessario capire su quali contenuti ci siano effettivamente delle personalizzazioni locali della sicurezza, ovviamente senza caricare i contenuti per non ricadere nel solito problema di prestazioni (ormai ci siamo capiti, vero?!).<br />L'approccio usato è quello di creare un nuovo indice "<strong>hasLocalRoles</strong>", un valore booleano che indica se un contenuto ha ruoli locali impostati o meno.</p>
<h2>Espandere il funzionamento di reindexObjectSecurity</h2>
<p><img src="http://blog.redturtle.it/topic_images/bingbang.jpg/@@images/35839ef6-0211-4940-b28f-61007cbbed77.jpeg" alt="Universe expanding" class="image-left" title="Universe expanding" />E' stato proprio utilizzando di recente <i>collective.localrolesdatatables</i> che mi sono imbattuto in un bug (di cui sono certo soffra anche <i>collective.portlet.truereview</i>):<br />il prodotto funziona a dovere, ma se la sicurezza di un contenuto viene aggiornata, l'indice "hasLocalRoles" non viene modificato a sua volta, almeno non fin quando l'intero documento verrà modificato (e quindi completamente reindicizzato).</p>
<p>Qual è il problema? Il metodo <strong><i>reindexObjectSecurity</i> "non sa" che anche questo indice fa parte della sicurezza del sito</strong>.</p>
<p>Come risolvere?</p>
<p>Se andiamo ad analizzare l'implementazione di <i>reindexObjectSecurity</i>, troviamo questa riga di codice:</p>
<pre>catalog.reindexObject(ob, idxs=self._cmf_security_indexes,<br />                      update_metadata=0, uid=brain_path)</pre>
<p>Viene quindi chiesto di reindicizzare nel catalogo il documento (<i>ob</i>) e di limitarsi agli indici definiti nella tupla <i>self._cmf_security_indexes</i> (quindi non tutti gli indici).<strong> </strong></p>
<p><strong>_cmf_security_indexes</strong> è un attributo di classe definito per <strong>CatalogAware</strong>, nel pacchetto <i>Products.CMFCore</i>. La sua definizione è la seguente:</p>
<pre>_cmf_security_indexes = ('allowedRolesAndUsers',)</pre>
<p>La soluzione è molto semplice: estendere la lista di indici registrati in questo attributo (<a class="external-link" href="https://github.com/collective/collective.localrolesdatatables/blob/8319deb4aef3d8db1803f1823071052130b28ce4/collective/localrolesdatatables/__init__.py">qui</a> come ho modificato <i>collective.localrolesdatatables</i>):</p>
<pre>from Products.CMFCore.CMFCatalogAware import CatalogAware<br /><br />CatalogAware._cmf_security_indexes += ('mioNuovoSecurityIndex',)</pre>
<h3>Problemi?</h3>
<p>Questo tipo di intervento ha un effetto collaterale: modifica l'attributo <strong>a livello di classe</strong> e si rispecchia quindi su <i>tutti</i> i siti Plone presenti nell'installazione. Potreste anche trovarvi nella situazione in cui il prodotto che necessita di questa modifica sia installato su un solo sito Plone, quindi il nuovo indice non sia presente in altri, eppure la modifica sia comunque applicata.</p>
<p>E' un problema? Per fortuna no!<br />Il catalogo Plone è molto tollerante: se viene chiesta la reindicizzazione di un indice non esistente, questo fallisce l'operazione senza sollevare eccezioni.</p>
<p><span class="discreet">L'immagine di testata è di <a class="external-link" href="http://www.flickr.com/photos/adulau/">Alexandre Dulaunoy</a>.</span></p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Luca Fabbri</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>products</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    
      <dc:subject>Archetypes</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    <dc:date>2013-03-12T08:00:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/e-uscito-il-buildout-2.0-posso-rilanciare-il-mio-buildout">
    <title>E' uscito il Buildout 2.0! Posso rilanciare il mio buildout?</title>
    <link>http://blog.redturtle.it/e-uscito-il-buildout-2.0-posso-rilanciare-il-mio-buildout</link>
    <description>Viene rilasciata una nuova versione di un pacchetto, e per molti Plonisiti è il caos. Vediamo come usare (o non usare) il Buildout 2.0</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Non è molto che è uscita la versione <strong>2.0</strong> di <a class="external-link" href="https://pypi.python.org/pypi/zc.buildout/2.0.1">zc.buildout</a> e, come spesso accade, i buildout, soprattutto quelli un po’ più vecchi, non prendono di buon grado l’aggiornamento.<br />Nel caso di questo pacchetto, le cause sono alcuni import che sono cambiati o sono stati spostati.</p>
<p>Il <strong>Buildout 2.0</strong> fa un taglio netto con il passato che, con le versioni 1.6 e 1.7, aveva come obiettivo principale quello di isolare il più possibile il buildout dalla componente <strong>Python</strong>. Ma il compito si è rivelato troppo difficile da implementare, e quindi si è scelto di abbandonare questa strada e lasciare all’utilizzatore di decidere tramite l'utilizzo di <i>virtualenv</i>.</p>
<p>Non è però in questo articolo che voglio analizzare le modifiche apportate a questo componente (che potete comunque trovare <a class="external-link" href="https://pypi.python.org/pypi/zc.buildout/2.0.1#id4">qui</a>). Oggi vediamo cosa fare per far funzionare i <i>nostri</i> bulidout.</p>
<a name="anchor-breaktext"></a><div class="breakText"></div>
<h2>Rimanere ancorati al passato.</h2>
<blockquote class="pullquote">Tutto dipende dal bootstrap.py presente nel vostro buildout.</blockquote>
<p>Se vi interessa rimanere sulle versioni <strong>1.x</strong><strong>,</strong><strong> </strong>allora potete usare questo <strong>bootstrap.py</strong>: contiene una restrizione sulla versione di <i>zc.buildout</i> che deve essere minore di 2.0 - <a class="external-link" href="http://downloads.buildout.org/1/bootstrap.py">http://downloads.buildout.org/1/bootstrap.py</a>.</p>
<p>Ma se non vi sentite troppo sicuri nel sostituire il <i>bootstrap.py</i> del vostro buildout, c’è una seconda soluzione, suggerita in risposta a <a class="external-link" href="http://stackoverflow.com/questions/14801416/zc-buildout-stopped-working-importerror-no-module-named-apport-fileutils">questo bug report</a> su stack overflow. <br />Dovrete semplicemente rilanciare il bootstrap del vostro buildout  forzando la versione di <i>zc.buildout</i> in questo modo:</p>
<pre><br />     python bootstrap.py -v 1.7.1<br /> </pre>
<p>Tuttavia, con versioni molto vecchie del <i>bootstrap.py</i>, potreste ritrovarvi nel caso in cui non sia possibile forzare la versione; allora dovrete per forza aggiornare il file con la versione di cui sopra, per poi eseguire il comando forzando <i>zc.buildout</i> all’ultima versione precedente alla 2.0; al momento, questa: <a class="external-link" href="https://pypi.python.org/pypi/zc.buildout/1.7.1">https://pypi.python.org/pypi/zc.buildout/1.7.1</a>.</p>
<h2>Il nuovo che avanza.</h2>
<p>Per usare la versione <strong>2.0</strong> di <i>zc.buildout</i> vi consiglio di utilizzare questa versione del bootstrap: <a class="external-link" href="http://downloads.buildout.org/2/bootstrap.py">http://downloads.buildout.org/2/bootstrap.py</a>.</p>
<p>In questo caso, però, vi potreste trovare nella situazione inversa, ovvero: dopo aver lanciato il solito comando "<i>./bin/buildout -N"</i>, non trovate la nuova versione di <i>zc.buildout</i>.</p>
<p>La causa è da attribuire alla presenza di <strong>buildout.dumppickedversions</strong> che ha fatto il pin di alcune versioni e, quindi, lanciando il buildout con il <i>“-N”</i> (pratica più che corretta!), la nuova versione per <i>zc.buildout</i> non è stata presa in considerazione. <br />Magari avete specificato il <i>dumppickedversions</i> nelle <i>extensions</i> nel vostro <i>buildout.cfg</i> e state pensando di rimuoverlo; ma nelle ultime versioni del buildout è automaticamente incluso. <br />La soluzione, consigliata da Reinout van Rees nel suo <a class="external-link" href="http://reinout.vanrees.org/weblog/2013/02/12/prevent-buildout-problems.html">post</a>, è molto semplice: fate il pin di questi due prodotti nel<i> [versions]</i> del vostro file di configurazione e avrete il vostro pacchetto aggiornato :)</p>
<pre><br />    [versions]
    zc.buildout = 2.0.1
    zc.recipe.egg = 2.0.0a3<br /> </pre>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Mirco Angelini</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>Plone 4</dc:subject>
    
    
      <dc:subject>buildout</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    <dc:date>2013-03-11T10:55:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>


  <item rdf:about="http://blog.redturtle.it/salva-compilazione-form-contenuti-Plone-uwosh-pfg-d2c">
    <title>Salva la compilazione dei form in contenuti Plone con uwosh.pfg.d2c</title>
    <link>http://blog.redturtle.it/salva-compilazione-form-contenuti-Plone-uwosh-pfg-d2c</link>
    <description>Panoramica sul prodotto Plone uwosh.pfg.d2c, un utile adattatore per PloneFormGen che memorizza in contenuti i form compilati</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Il prodotto <a class="external-link" href="https://pypi.python.org/pypi/uwosh.pfg.d2c">uwosh.pfg.(d)ata(2)(c)ontent</a> <strong>implementa un adattatore</strong> per <a class="external-link" href="http://plone.org/products/ploneformgen">PloneFormGen</a> (un generatore di form per Plone) che <strong>salva i dati del form in un'istanza di un determinato tipo di contenuto</strong>.<br /><br />Il prodotto fornisce appunto un tipo di <strong>contenuto</strong> <i>dinamico</i> e <i>universale</i> per memorizzare i dati sottomessi attraverso un modulo PloneFormGen. Si tratta di una vera e propria <strong>copia persistente</strong> del modulo compilato dall'utente, che potrai gestire come un qualsiasi oggetto Plone.</p>
<blockquote class="pullquote"><strong>I campi del contenuto generato saranno esattamente i campi del modulo che hai configurato!</strong></blockquote>
<p>Inoltre, una volta generato il contenuto a seguito della sottomissione del form, potrai controllare la sua visibilità e il suo accesso applicando su di esso un <strong>specifico workflow</strong> come per un normale tipo di contenuto.</p>
<p>I campi del modulo diventeranno i campi dell'oggetto creato: potrai quindi modificare il loro valore. Questa funzionalità è realizzata mediante <a class="external-link" href="https://pypi.python.org/pypi/archetypes.schemaextender">schemaextender</a>, che è stato usato nel prodotto uwosh.pfg.d2c per aggiungere i <strong>campi extra</strong> del modulo al tipo di contenuto.</p>
<p>Ora vediamo come applicare l'adattatore ai form in tre mosse e come configurare i campi principali che lo caratterizzano.</p>
<div class="visualClear"></div>
<a name="anchor-breaktext"></a><div class="breakText">
<h2>Uso dell'adattatore</h2>
</div>
<p><img src="http://blog.redturtle.it/uploads/savedatatocontentadapter.png/@@images/77c4146a-abfe-4ae0-a7cb-70de46e51597.png" alt="" class="image-right" title="" />Il prodotto uwosh.pfg.d2c aggiunge un elemento <i>"Save Data to Content Adapter"</i> al menù a discesa "Aggiungi nuovo..." per un form di PloneFormGen.</p>
<p>Una volta abilitato l'adattatore, quando un utente invia un modulo verrà creato un nuovo contenuto con i dati inseriti nel form.</p>
<p>Vediamo in dettaglio come applicare l'adattatore:</p>
<ol>
<li>aggiungi il form, e con "QuickEdit" inserisci tutti i campi di interesse</li>
<li>aggiungi l'adattatore al form</li>
<li>attiva l'adattatore: scegli "QuickEdit" sul form e, nella lista delle azioni, seleziona l'adattatore appena aggiunto.</li>
</ol>
<p><img src="http://blog.redturtle.it/uploads/aggiungiadattatore.png/@@images/8a8c2846-9fe0-4625-b99b-560b94e3eb25.png" alt="" class="image-left" title="" /></p>
<p><img src="http://blog.redturtle.it/uploads/attivaadattatore.png/@@images/e2bc8128-b7b4-4664-b09a-aee9ba09eb94.png" alt="" class="image-left" title="" /></p>
<p>Troverai i contenuti generati dopo la compilazione del form nella cartella dell'adattatore.</p>
<div class="visualClear"></div>
<h2>Campi di configurazione dell'adattatore</h2>
<h3>Il tipo di contenuto dell'oggetto generato</h3>
<p>Il campo <i>"Saved entry content type"</i> si riferisce al <strong>portal type</strong> dell'oggetto usato per il salvataggio dei dati all'invio dei moduli.<br /><br />A questo scopo il prodotto fornisce un nuovo tipo di contenuto <i>"FormSaveData2ContentEntry"</i>, ma è possibile <strong>clonare</strong> <i>"FormSaveData2ContentEntry</i>", per usare un proprio tipo personalizzato, in tre modi:<img src="http://blog.redturtle.it/uploads/addcontenttype.png/@@images/cdc16110-1cb3-43f1-a72f-a827ddce71a8.png" alt="" title="" class="image-right" id="__mce_tmp" /></p>
<ul>
<li>tramite l'interfaccia fornita dal prodotto, alla creazione/modifica dell'adattatore, facendo click sul bottone <i>"Add new type"</i></li>
<li>copiando manualmente il tipo "<i>FormSaveData2ContentEntry"</i> nel portal_types tool (via ZMI) e poi rinominarlo in modo appropriato</li>
<li>aggiungendo il clone del tipo "<i>FormSaveData2ContentEntry</i>" al types tool via codice genericsetup profile.</li>
</ul>
<p>Una volta creato, il nostro nuovo tipo di contenuto sarà presente tra le opzioni del save data adapter; è necessario selezionarlo esplicitamente e quindi tornare in modifica dell'adattatore se lo abbiamo creato con gli utimi due metodi; altrimenti verrà applicato il valore di default <i>FormSaveData2ContentEntry</i>.</p>
<h3>I campi relativi al titolo</h3>
<p>Il campo <i>"Title Field"</i> ti permette di <strong>scegliere tra i vari campi del form</strong> quale sarà il campo da cui verrà preso il titolo dell'oggetto generato.</p>
<p>Se per il titolo del futuro oggetto non vuoi usare nessuno dei campi  del form, puoi utilizzare un'altra funzionalità dell'adattatore: <i>"Dynamic title override"</i>, che ti permette di inserire un'espressione TALES valutata al momento della generazione dell'oggetto per <strong>determinare dinamicamente</strong> il titolo. In questo modo puoi attribuire al contenuto titoli più  complessi, come ad esempio il nome del form (risalendo all'oggetto padre)  seguito dalla data di creazione.</p>
<pre><br />python:'%s %s' % (here.aq_inner.aq_parent.aq_parent.Title(),here.created().strftime('%d/%m/%Y'))</pre>
<p>Come ultimo, il campo dell'adattatore <i>"Nice Ids"</i> ti consente di generare per l'oggetto un nome breve partendo dal titolo del form.</p>
<h3>Permessi e sicurezza</h3>
<p>La compilazione di un form può essere effettuata anche da un utente <strong>anonimo</strong>, se tale modulo è pubblico.</p>
<p>Tuttavia, se l'invio del form è seguito dalla creazione dell'oggetto  corrispondente, come nel nostro caso, l'anonimo non ha i permessi  sufficienti per creare un oggetto e di conseguenza per compilare il  form.</p>
<p>Perciò l'adattatore prevede un campo <i>"Avoid Security Checks"</i> per evitare i controlli di sicurezza nella creazione di un oggetto,  consentendo quindi anche agli utenti anonimi di completare il form.<br /><br />Un  altro modo per fornire questa possibilità senza evitare i controlli di  sicurezza, è modificare il workflow e i permessi del tipo di contenuto  generato a favore dell'utente anonimo.</p>
<h3>In conclusione</h3>
<p>Il prodotto ti fornisce un adattatore per PloneFormGen e un nuovo tipo di contenuto che sarà quello generato una volta sottomesso il form su cui hai applicato l'adattotore. Puoi decidere di utilizzare quel tipo oppure puoi personalizzarlo clonandolo.</p>
<p>Puoi inoltre configurare il punto da cui verrà preso il titolo e permettere anche agli utenti anonimi di usare il tuo form, senza che la creazione del contenuto fallisca per permessi insufficienti.</p>
<p>Personalmente ho trovato molto utile <a class="external-link" href="https://pypi.python.org/pypi/uwosh.pfg.d2c">uwosh.pfg.d2c</a> e ringrazio l'autore del prodotto Nathan Van Gheem e i contributori Author T. Kim Nguyen, Lurker Petri Savolainen, che mi hanno fornito molte delle funzionalità di cui avevo bisogno. Se vi sembra che faccia anche al caso vostro, potete appronfondire con altra <a class="external-link" href="http://pythonhosted.org/uwosh.pfg.d2c/">documentazione</a>.</p>
<p><span style="text-align: start; float: none; ">Anche se il prodotto è legato ad <a class="external-link" href="http://plone.org/products/archetypes">Archetypes</a>, il framework che</span><span style="text-align: start; float: none; "> Plone sta lentamente sostituendo con <a class="external-link" href="http://plone.org/products/dexterity">Dexterity</a> e in futuro è</span><span style="text-align: start; float: none; "> possibile che prodotti come questo non servano più, al momento è</span><span style="text-align: start; float: none; "> ancora un'ottima risorsa!</span><br /><br /><br /><span class="discreet">La foto in testata è di <a class="external-link" href="http://www.flickr.com/photos/59937401@N07/">Images_of_Money</a></span></p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Federica D'Elia</dc:creator>
    <dc:rights></dc:rights>
    
      <dc:subject>Plone 4</dc:subject>
    
    
      <dc:subject>products</dc:subject>
    
    
      <dc:subject>Plone</dc:subject>
    
    
      <dc:subject>plone.it</dc:subject>
    
    <dc:date>2013-03-04T10:45:00Z</dc:date>
    <dc:type>Weblog Entry</dc:type>
  </item>





</rdf:RDF>
