<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="" type="text/css"?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:dcterms="http://purl.org/dc/terms/"
         xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
         xmlns:rss="http://purl.org/rss/1.0/"
         xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <rss:channel rdf:about="http://blog.redturtle.it/redturtle-blog">

        <rss:title>redturtle blog</rss:title>
        <rss:link>http://blog.redturtle.it/redturtle-blog</rss:link>

        <rss:description>The redturtle blog</rss:description>
        

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

        <sy:updatePeriod>daily</sy:updatePeriod>
        <sy:updateFrequency>1</sy:updateFrequency>

        <rss:items>
            <rdf:Seq>
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/08/30/new-ideas-from-the-turtle..."/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/08/13/where-is-my-manage-portlets-link"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/07/21/migliorare-lusabilita-dei-link-interni-in-tinymce"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/07/20/aggregate-zope-munin-graphs"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/07/19/amberjack-e-windmill-un-matrimonio-damore"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/07/14/new-collective-navigationtoggle-integration-with-any-theme"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/07/13/javascript-use-strip-or-trim"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/07/08/scripted-css-injection"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/07/02/generating-pdf-with-itext-and-xpages"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/06/29/textareabound-trying-my-first-jquery-plugin"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/06/26/system.getproperty-returns-null"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/06/24/rt.vuvuzela"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/06/24/rt.vuvuzela-is-out"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/06/17/mail-triage"/>
                
                
                <rdf:li rdf:resource="http://blog.redturtle.it/redturtle-blog/2010/06/15/plone-ti-vedo-e-non-ti-vedo"/>
                
            </rdf:Seq>
        </rss:items>
    </rss:channel>

    <rss:image rdf:about="http://blog.redturtle.it/logo.png">
        <rss:title>redturtle blog</rss:title>
        <rss:link>http://blog.redturtle.it/redturtle-blog</rss:link>
        <rss:url>http://blog.redturtle.it/logo.png</rss:url>
    </rss:image>

    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/08/30/new-ideas-from-the-turtle...">

        <rss:title>New ideas from RedTurtle....</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/08/30/new-ideas-from-the-turtle...</rss:link>       

        <rss:description>RedTurtle Technology seeks to contribute to improving Notes</rss:description>

        <content:encoded>
          <![CDATA[
          
<p><span class="Apple-style-span">If <a class="external-link" href="http://ideajam.net/IdeaJam/P/ij.nsf/">IdeaJam</a> asks the community new ideas for improving Lotus Notes, RedTurtle Technology answer!&nbsp;</span></p>
<p><span class="Apple-style-span"><a class="external-link" href="http://ideajam.net/IdeaJam/P/ij.nsf/0/6ACD6F9597FEED76862577890035467E?OpenDocument">Here</a> is what was proposed by us recently.</span></p>

          ]]>
        </content:encoded>        

        <dc:date>2010-08-30T17:45:00+02:00</dc:date>

        <dcterms:modified>2010-08-30T17:56:36+02:00</dcterms:modified>

        <dc:creator>Andrea Baglioni</dc:creator>

        

        
            <dc:subject>Lotus</dc:subject>
        
        
            <dc:subject>Domino</dc:subject>
        
        
            <dc:subject>english</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/08/13/where-is-my-manage-portlets-link">

        <rss:title>Where is my manage portlets link?</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/08/13/where-is-my-manage-portlets-link</rss:link>       

        <rss:description>Check that your content implements plone.portlets.interfaces.ILocalPortletAssignable</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>It is the second time in a couple of days that I am asked why in some pages there is no link to the <strong>@@manage-portlets</strong> view. In both cases the archetypes missing the link (and the view) where inheriting from a very basic object.</p>
<p>After a small research I found that this view is registered for the interface <strong>plone.portlets.interfaces.ILocalPortletAssignable</strong>.</p>
<p>Making the object interface inherit from this interface solved the problem.</p>

          ]]>
        </content:encoded>        

        <dc:date>2010-08-13T16:00:00+02:00</dc:date>

        <dcterms:modified>2010-08-13T16:59:42+02:00</dcterms:modified>

        <dc:creator>Alessandro Pisa</dc:creator>

        

        
            <dc:subject>Plone</dc:subject>
        
        
            <dc:subject>english</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/07/21/migliorare-lusabilita-dei-link-interni-in-tinymce">

        <rss:title>Migliorare l'usabilità dei link interni in TinyMCE</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/07/21/migliorare-lusabilita-dei-link-interni-in-tinymce</rss:link>       

        <rss:description>Analisi di collective.tinymceplugins.advfilelinks, un'alternativa al plugin di TinyMCE per i link interni a Plone che permette di gestire in modo differente i link a file del sito.</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>La <a class="external-link" href="http://www.regione.emilia-romagna.it/">Regione Emilia Romagna</a> sta lavorando alacremente al miglioramento dell'accessibilità e dell'usabilità di Plone.</p>
<p>Dato che il futuro dell'editor <a class="external-link" href="http://it.wikipedia.org/wiki/WYSIWYG">WYSIWYG </a>in Plone non è più <strong>Kupu</strong> (difficilmente personalizzabile e non troppo supportato) ma <a class="external-link" href="http://plone.org/products/tinymce/">TinyMCE</a>, già da tempo la scelta è stata di passare a TinyMCE anche nella versione 3 di Plone, usata in vari siti regionali.</p>
<p>Migliorare TinyMCE è più semplice che Kupu e lo dimostra come è stato possibile da parte nostra aumentarne le funzionalità per venire incontro ad alcune delle richieste della Legge Stanca (modifiche di cui si è discusso in un <a class="external-link" href="topics/TinyMCE">altro post</a>, e ora integrate nella release ufficiale già dalla <strong>versione 1.1rc9</strong>); Altro particolare: trovo importante che questo editor esista anche come <a class="external-link" href="http://tinymce.moxiecode.com/">progetto indipendente</a>.</p>
<h3>Altre novità: la gestione dei link</h3>
<p>Una richiesta recente per aumentare l'usabilità dei documenti è stata la seguente:</p>
<p class="callout">Modificare Plone in modo che i link interni, se fatti a contenuto di tipo File, mostrino l'icona del tipo di contenuto e la dimensione del file stesso</p>
<p>Una simile modifica aumenta l'usabilità generale della pagina, nonché impatta col <a class="external-link" href="http://webaccessibile.org/legge-stanca/guida-ai-22-requisiti-tecnici/requisiti-19-20-21-22/#sezione19">Requisito 19 della Legge Stanca</a>.<br />Dopo una prima analisi è risultato chiaro come fosse necessario scrivere un nuovo plugin per TinyMCE.</p>
<h3>Come funziona collective.tinymceplugins.advfilelinks?<br /></h3>
<p>Il prodotto rilasciato fornisce il minimo delle modifiche possibili a TinyMCE (ma non minime quanto avrei voluto... ne parliamo dopo). Si tratta di un un plugin aggiuntivo (e per fortuna la presenza di plugin è prevista non solo dall'editor ma anche dalla sua configurazione di Plone) che sostituisce quello predefinito di Plone per i link interni (dal nome autoesplicativo <strong>plonelink</strong>).</p>
<p>Dopo un'analisi attenta di come poter ottenere le funzionalità richieste e della flessibilità delle API di TinyMCE, su indicazione della Regione stessa abbiamo preso la seguente strada, forse un po' limitata ma di minimo impatto sullo sviluppo e con una resa eccezionale se il browser è aggiornato:</p>
<ul><li>I link a file acquisiscono un nuovo attributo <a class="external-link" href="http://www.w3.org/TR/html401/struct/links.html#adef-type-A">type</a> (previsto dallo standard HTML anche se poco conosciuto) ed viene fornito un CSS aggiuntivo contenente varie regole per fornire l'icona.<br />Esempio:<br />
<pre>a[type='application/pdf'] {
    background: url(pdf.png) no-repeat 0 50%;
    padding-left: 20px;
}</pre>
Questo tipo di regola CSS ha un buon supporto (da Internet Explorer 7 in poi).
</li><li>La dimensione del file è prima di tutto inserita nel <a class="external-link" href="http://www.w3.org/TR/html401/struct/global.html#adef-title">title</a> del link (che normalmente il plugin originale non fornisce) ma un buon effetto è ottenuto associando una ulteriore regola CSS:<br />
<pre>a.internal-link-tofile:after {
	content: " ("attr(title)")";
}</pre>
Questa magica regola CSS (fa parte dello standard CSS 2, per quanto Internet Explorer la supporti solo dalla versione 8 in poi) inserisce del testo aggiuntivo dopo i link con classe <em>internal-link-tofile</em>.<br />Il contenuto di questo testo è preso dall'attributo <em>title</em>, ma vi vengono aggiunte delle parentesi. Ovviamente questa classe CSS aggiuntiva è inserita dal nostro plugin in aggiunta alla già nota <em>internal-link</em>.</li></ul>
<p>L'ultima funzionalità è forse la più interessante e per quanto il metodo usato sia davvero poco invasivo e l'effetto finale a dir poco bello, il limite ad avere Internet Explorer 8 è ancora grande.<br />E' comunque sopportabile? Sì, dato che l'attributo <em>title</em> rimane comunque disponibile agli utenti (e agli Screen Reader) in tutti i casi.</p>
<p><img class="image-inline image-inline" src="topic_images/collective.tinymceplugins.advfilelinks0.0.101.png/image_preview" alt="Preview degli effetti del Plugin" /></p>
<h3>Note tecniche di estendibilità</h3>
<p>TinyMCE per Plone sfrutta chiamate AJAX per richiedere al server informazioni sui contenuti. Come sempre le modifiche lato server sono minime e perfettamente integrate con quanto Plone già fornisce.</p>
<p>E' bastato fornire un nuovo <strong>adapter.</strong></p>
<pre>  &lt;adapter
        for="Products.ATContentTypes.interface.IATFile"
        provides="Products.TinyMCE.adapters.interfaces.JSONDetails.IJSONDetails"
        factory=".adapters.JSONDetails"
        /&gt;</pre>
<p>Grazie alla <a class="external-link" href="http://www.muthukadan.net/docs/zca.html">ZCA</a>, questo adapter aggiuntivo interviene solo per i contenuti di tipo File o sottotipi (a volte ho l'impressione che senza adapter i plonisti non vivrebbero più!).</p>
<p>I problemi maggiori sono lato client... L'idea <em>sarebbe</em> come sempre estendere e non sovrascrivere. In un mondo perfetto questo plugin si sarebbe dovuto integrare con quello preesistente, sfruttandone tutto il codice presente.</p>
<p>Non mi è ancora chiaro se questo non è stato possibile per limiti miei, del plugin stesso, o di TinyMCE, ma il risultato per quanto funzionante è anche una copia di molti dei file originali (una forma di branch del plugin)... probabilmente non dormirò di notte per aver dovuto copiare i file di lingua... ma dopo tutto è una versione alpha!</p>
<p>Il limite maggiore di TinyMCE attualmente è che non usa jQuery (per quanto ci sia <a class="external-link" href="http://wiki.moxiecode.com/index.php/TinyMCE:JQuery_Plugin_reference">un progetto che integra jQuery e TinyMCE</a>) e soprattutto che non c'è uso di eventi Javascript.</p>
<p><img class="image-left" src="topic_images/Schermata20100721a10.34.24.png/image_mini" alt="Selezione link interni in TinyMCE" />Sarebbe stato bello (ma che dico bello! Utile) se al click del mouse sul pulsante radio che seleziona un file piuttosto che un qualunque altro documento a cui associare il link, venisse lanciato un <strong>evento Javascript</strong>... evento al quale un buon plugin per jQuery avrebbe potuto reagire per eseguire azioni...</p>
<p>Per ora questo non pare possibile, ma sarebbe un buon passo avanti per TinyMCE.</p>
<h3>Nota sul namespace</h3>
<p>Sono rimasto colpito nel vedere come sulla <strong>collective</strong> ci siano così pochi plugin the TinyMCE (l'unica eccezione pare essere <a class="external-link" href="http://svn.plone.org/svn/collective/collective.tinymcetiles">collective.tinymcetiles</a>). Ci sono state sanguinose discussioni in passato sull'uso di namespace a 2 o 3 livelli (<a class="external-link" href="http://weblion.psu.edu/news/are-we-overusing-namespace-packages">ne ricordo una</a> completa e interessante). In questo caso l'uso dei 3 livelli mi è parso opportuno.</p>
<p>Spero che in futuro altri contribuiscano al gruppo di plugin <strong>collective.tinymceplugins</strong> e figli!</p>
<h3>Riferimenti</h3>
<ul><li><a class="external-link" href="http://plone.org/products/collective.tinymceplugins.advfilelinks/">Plugin su plone.org</a></li><li><a class="external-link" href="http://pypi.python.org/pypi/collective.tinymceplugins.advfilelinks">Plugin su Python Cheeseshop</a></li></ul>
<p>&nbsp;</p>

          ]]>
        </content:encoded>        

        <dc:date>2010-07-21T11:54:10+02:00</dc:date>

        <dcterms:modified>2010-07-21T11:54:10+02:00</dcterms:modified>

        <dc:creator>keul</dc:creator>

        

        
            <dc:subject>TinyMCE</dc:subject>
        
        
            <dc:subject>javascript</dc:subject>
        
        
            <dc:subject>Legge Stanca</dc:subject>
        
        
            <dc:subject>accessibility</dc:subject>
        
        
            <dc:subject>integration</dc:subject>
        
        
            <dc:subject>release</dc:subject>
        
        
            <dc:subject>italiano</dc:subject>
        
        
            <dc:subject>IE</dc:subject>
        
        
            <dc:subject>Plone</dc:subject>
        
        
            <dc:subject>css</dc:subject>
        
        
            <dc:subject>usability</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/07/20/aggregate-zope-munin-graphs">

        <rss:title>Aggregate zope munin graphs</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/07/20/aggregate-zope-munin-graphs</rss:link>       

        <rss:description>Munin with munin.zope is a handy tool if you want to monitor your Zope instance. But it starts to be annoying when you have too many zeoclients and too many projects on one server.  Using munin aggregate functionality you can create nice, human readable graphs reusing your existing data.</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>With the newest version of munin.zope you have 4 different plugins:</p>
<ul><li>ZServer threads</li><li>ZODB activity</li><li>Zope cache parameters</li><li>Zope memory usage<br /><br /></li></ul>
When you start using it in production environment you can end like this:
<p>&nbsp;</p>
<div><img class="image-inline image-inline" src="uploads/munin1.png/image_preview" alt="Munin" /></div>
<div>&nbsp;</div>
<p>Using aggregation you can end like this:</p>
<p><img class="image-inline image-inline" src="uploads/total_memorymonth.png/image_preview" alt="Munin aggregation" /></p>
<p>What it does? It takes data from multiple zeoclients (in this case every project from A-E have 4 zeoclients) and renders only total amount per project.<br />Here is munin.conf which does this trick:</p>
<pre>[Server1;projectA]
  address 127.0.0.1
[Server1;projectB]
  address 127.0.0.2
[Server1;projectC]
  address 127.0.0.3
[Server1;projectD]
  address 127.0.0.4
[Server1;projectE]
  address 127.0.0.5

[Server1;Aggregated]
  update no
  total_memory.update no
  total_memory.graph_category Zope
  total_memory.graph_title Aggregated Zope memory
  total_memory.graph_order \
    projectA \
    projectB \
    projectC \
    projectD \
    projectE

  total_memory.projectA.sum \
    projectA:projecta_zopememory_instance_1.VmSize \
    projectA:projecta_zopememory_instance_2.VmSize \
    projectA:projecta_zopememory_instance_3.VmSize \
    projectA:projecta_zopememory_instance_4.VmSize
  total_memory.projectA.label project A

  total_memory.projectB.sum \
    projectB:projectb_zopememory_instance_1.VmSize \
    projectB:projectb_zopememory_instance_2.VmSize \
    projectB:projectb_zopememory_instance_3.VmSize \
    projectB:projectb_zopememory_instance_4.VmSize
  total_memory.projectB.label project B

  total_memory.projectC.sum \
    projectC:projectc_zopememory_instance_1.VmSize \
    projectC:projectc_zopememory_instance_2.VmSize \
    projectC:projectc_zopememory_instance_3.VmSize \
    projectC:projectc_zopememory_instance_4.VmSize
  total_memory.projectC.label project C

  total_memory.projectD.sum \
    projectD:projectd_zopememory_instance_1.VmSize \
    projectD:projectd_zopememory_instance_2.VmSize \
    projectD:projectd_zopememory_instance_3.VmSize \
    projectD:projectd_zopememory_instance_4.VmSize
  total_memory.projectD.label project D

  total_memory.projectE.sum \
    projectE:projecte_zopememory_instance_1.VmSize \
    projectE:projecte_zopememory_instance_2.VmSize \
    projectE:projecte_zopememory_instance_3.VmSize \
    projectE:projecte_zopememory_instance_4.VmSize
  total_memory.projectE.label project E</pre>
<p>&nbsp;</p>
<p>For more information please check:<br /><a class="external-link" href="http://munin-monitoring.org/wiki/aggregate_examples">http://munin-monitoring.org/wiki/aggregate_examples</a><br /><a class="external-link" href="http://munin-monitoring.org/wiki/PercentGraphHowto">http://munin-monitoring.org/wiki/PercentGraphHowto</a><br /><a class="external-link" href="http://munin-monitoring.org/wiki/stack_examples">http://munin-monitoring.org/wiki/stack_examples</a></p>

          ]]>
        </content:encoded>        

        <dc:date>2010-07-20T13:09:12+02:00</dc:date>

        <dcterms:modified>2010-07-20T13:09:12+02:00</dcterms:modified>

        <dc:creator>Andrew Mleczko</dc:creator>

        

        
            <dc:subject>munin</dc:subject>
        
        
            <dc:subject>Plone</dc:subject>
        
        
            <dc:subject>english</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/07/19/amberjack-e-windmill-un-matrimonio-damore">

        <rss:title>Amberjack e Windmill: un matrimonio d'amore</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/07/19/amberjack-e-windmill-un-matrimonio-damore</rss:link>       

        <rss:description>Il successo di Amberjack e la conferma della sua inclusione nei futuri rilasci di Plone continuano a riempirci di soddisfazione. Per non riposare sugli allori, abbiamo organizzato un matrimonio che promette di generare grandi benefici per tutta la comunità Plone.</rss:description>

        <content:encoded>
          <![CDATA[
          
<div class="pullquote">Come abbiamo sempre cercato di fare, ci siamo spinti oltre alla semplice
 creazione di un'opportunità, impegnandoci a supportare chi desidera 
sfruttarla. Nel caso di Amberjack, ultimamente ci siamo impegnati per 
agevolare al massimo la creazione interattiva di tutorial, eliminando la
 necessità di scrivere codice sorgente. Come nel mondo reale, per 
insegnare un'azione deve bastare saperla eseguire, senza farsi carico di
 tecnicismi. Ecco perchè abbiamo pensato di integrare in Amberjack un 
registratore interattivo di tutorial.</div>
<h3>Costruire su Amberjack</h3>
<p>Abbiamo concepito e realizzato Amberjack, un sistema efficace e intimamente legato a Plone per generare tutorial sul CMS e su qualsiasi prodotto Plone, per consentire, a chi sviluppa nuovi prodotti Plone, di offrire il massimo supporto a coloro che useranno tali prodotti, aumentandone il gradimento e consentendo a tutti di utilizzarli al meglio. Questo livello di supporto si riverbera in positivo sull'intera comunità e sull' immagine pubblica di Plone.</p>
<p>Tuttavia, generare un tutorial Amberjack, fino a ieri, era un'attività piuttosto lenta, che richiedeva una certa dimestichezza con il linguaggio Python e con la programmazione a basso livello. Tali abilità non sono necessariamente presenti in chi, ad esempio negli Enti Pubblici, si occupa di formazione e comunque di supporto agli Utenti. Capita così che prodotti sviluppati all'interno degli Enti, con una partecipazione più o meno limitata delle Aziende, non abbiano ancora beneficiato di Amberjack.</p>
<p>
<object height="300" width="400"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12198138&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1"><embed height="300" width="400" src="http://vimeo.com/moogaloop.swf?clip_id=12198138&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<h3>Windmill e Amberjack, un matrimonio di interesse... per tutti!<br /></h3>
<p>Come potrete capire dal video che precede, per non inventare l'acqua calda, siamo ricorsi a Windmill (http://www.getwindmill.com/), prodotto libero ben noto a chi, come noi, pratica il test driven development. Windmill si basa su uno strumento installabile lato Client e integrato con Python, e su una serie di servizi Web&nbsp; (acceduti via proxy tramite chiamate javascript remote) che centralizzano alcuni dei processi di generazione dei test, ad esempio il loro salvataggio su un file di idoneo formato.</p>
<p>E' così nato collective.amberjack.windmill, prodotto aggiuntivo che installa un'istanza Windmill sul sito Plone, e ne sostituisce alcune delle librerie con versioni specifiche per Amberjack. Ne nasce un "registratore di azioni" che, anzichè essere asservito alla creazione di casi di test, genera un tutorial esemplificativo, completo di ogni fase, dalla login alla logout. Ai formati nativi di Windmill, Python e Javascript, è stata aggiunta la possibilità di salvare queste registrazioni nel formato nativo di Amberjack, rendendo la loro creazione molto più rapida, semplice e immediata.</p>
<h3>Prodotti Plone autoesplicativi<br /></h3>
<p>Il tutorial può, indifferentemente, essere creato su una istanza Plone locale o direttamente sul sito di produzione, passando l'URL come parametro sulla linea di comando al momento dell'avvio di Windmill. A prescindere dall'istanza Plone utilizzata per la generazione del tutorial, esso può agevolmente essere ricontestualizzato su un server differente grazie al supporto agli URL relativi. Il file zip generato da Windmill viene caricato sul sito di produzione tramite un'apposita funzionalità di upload.</p>
<p>A questo punto, non manca niente: Amberjack e Windmill, sposi felici, annunciano la nascita del loro pargolo, un Plone veramente autoesplicativo, che starà a tutti noi fare crescere nel modo migliore.</p>

          ]]>
        </content:encoded>        

        <dc:date>2010-07-19T12:00:00+02:00</dc:date>

        <dcterms:modified>2010-07-19T15:36:05+02:00</dcterms:modified>

        <dc:creator>Cesare Brizio</dc:creator>

        

        
            <dc:subject>amberjack</dc:subject>
        
        
            <dc:subject>Plone</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/07/14/new-collective-navigationtoggle-integration-with-any-theme">

        <rss:title>New collective.navigationtoggle release: integration with any theme (I hope)</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/07/14/new-collective-navigationtoggle-integration-with-any-theme</rss:link>       

        <rss:description>The new release only fixed a small bug, but also add some better integration with Plone themes. What if fun: a bug inside Sunburst theme was the demonstration that the approach is good!</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>I already talked about the features of <strong>collective.navigationtoggle</strong> in <a class="external-link" href="2010/04/11/change-navigation-behaviour-with-jquery-collective.navigationtoggle">previous post</a>, but the new release helped me to be sure of one thing: the unobtrusive approach chosen was good.</p>
<p>The new version also add some refactoring and support for other themes than the classic Plone one. <em>Plone 4 is coming</em>... we must live with this and luckily the products migration has begun.</p>
<p>What is more difficult, after years the default theme is changed (for what I remember, the default theme you all know is with us from Plone 2.0... maybe some changes was done to it at Plone 2.1, but the core never changed). All products that act on Plone UI must check also the new <strong>Sunburst</strong> theme.</p>
<p>Going back to <em>navigationtoggle</em>, I choosed an approach that was "use existing Plone navigation element to know how to render new ones".</p>
<p>For the new release I only empowered some existings feature, like also generate CSS classes for new element on the navigation.</p>
<p>Why? In Plone 3 navigation main node is like this:</p>
<pre>&lt;li class="navTreeItem visualNoMarker"&gt;
      &lt;div&gt;
        &lt;a title="..." class="state-... navTreeFolderish" href="..."&gt;
            &lt;img width="16" height="16" alt="..." src="..."&gt;
            &lt;span&gt;Foo&lt;/span&gt;
        &lt;/a&gt;
    &lt;/div&gt;
   ...
&lt;/li&gt;</pre>
<p>And Sunburst is like this:</p>
<pre>&lt;li class="navTreeItem visualNoMarker"&gt;
        &lt;a title="" class="state-... navTreeFolderish contenttype-..." href="..."&gt;
            &lt;img height="16" width="16" alt="Folder" src="..."&gt;
            &lt;span&gt;Foo&lt;/span&gt;
        &lt;/a&gt;
   ...
&lt;/li&gt;</pre>
<p>Apart some node difference (no more containing DIV) the new theme also rely on a <em>contenttype-xxx</em> class.</p>
<p>What is funny (and what make me say "<em>thanks navigationtoggle</em>") is an unwanted behavior of the current Sunburst theme. A bug that double the content type icon: one given from the <em>IMG</em> tag and another ones from CSS, thanks to the new class.</p>
<p>I'm not interested in this bug (<a class="external-link" href="authors/irenecapatti">Irene</a> says that probably it has been already fixed), but using <em>navigationtoggle</em> with this bugged version of Sunburst... also make the bug applyed to elements navigation nodes generated by our script!</p>
<p>This (uncommonly) is <em>good</em> as respect the original idea: the original theme use doubled icons?! Is not a problem of <em>navigationtoggle</em>, so do it!</p>

          ]]>
        </content:encoded>        

        <dc:date>2010-07-14T16:37:42+02:00</dc:date>

        <dcterms:modified>2010-07-14T16:37:42+02:00</dcterms:modified>

        <dc:creator>keul</dc:creator>

        

        
            <dc:subject>portlet</dc:subject>
        
        
            <dc:subject>Plone 4</dc:subject>
        
        
            <dc:subject>javascript</dc:subject>
        
        
            <dc:subject>english</dc:subject>
        
        
            <dc:subject>release</dc:subject>
        
        
            <dc:subject>navigation</dc:subject>
        
        
            <dc:subject>Plone</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/07/13/javascript-use-strip-or-trim">

        <rss:title>Evil Javascript... use strip() or trim()?</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/07/13/javascript-use-strip-or-trim</rss:link>       

        <rss:description>I hate doing the same error all the time! One time again: how to obtain a cross browser method for Javascript to remove leading and trailing whitespaces inside strings?</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>Every time I make the same stupid error! So, let's make quickly, a guide for obtaining this behavior.</p>
<p>The <strong>trim()</strong> function <strong>works only on Firefox</strong> and maybe other browsers, but <strong>not on IE</strong>.</p>
<p>In my experience the <strong>stript()</strong> function instead works better, both on Firefox and IE.</p>
<p>So what is the problem? That every time I forget to use this last one, and I use again <em>trim</em> instead of <em>stript</em>...</p>
<p>There is a solution for my lazy brain? Well... I use very often (AKA "always") <strong>jQuery</strong> for our projects, so... <em>please</em> Luca... from now just use <a class="external-link" href="http://api.jquery.com/jQuery.trim/"><strong>jQuery.trim()</strong></a>.</p>
<p>I feel better! No more error from now...</p>
<p>...</p>
<p>... until next time.</p>

          ]]>
        </content:encoded>        

        <dc:date>2010-07-13T17:22:33+02:00</dc:date>

        <dcterms:modified>2010-07-13T17:22:33+02:00</dcterms:modified>

        <dc:creator>keul</dc:creator>

        

        
            <dc:subject>jQuery</dc:subject>
        
        
            <dc:subject>humor</dc:subject>
        
        
            <dc:subject>javascript</dc:subject>
        
        
            <dc:subject>english</dc:subject>
        
        
            <dc:subject>IE</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/07/08/scripted-css-injection">

        <rss:title>Scripted CSS Injection (or whatever better name you can find for this technique)</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/07/08/scripted-css-injection</rss:link>       

        <rss:description>While trying to close a request for one of our customer for obtaining a random image portlet I tested an alternative way to deliver CSS. Using Javascript.</rss:description>

        <content:encoded>
          <![CDATA[
          
<h3>When Web pages load and run things</h3>
<p>Let's start with <strong>CSS</strong>. Browsers load HTML source from the Web. Inside the page you will find resources that are CSS file. Immediately the resource is loaded and the rules inside are applied to your HTML.</p>
<p>Now switch to <strong>Javascript</strong> resources. For Javascript... it's the same. The Javascript code is executed as soon as it is found in the page...</p>
<p>...but for this reason, when we need to act using Javascript on an already loaded <strong>DOM</strong>, we rely onto <strong>Javascript events</strong>.</p>
<p>We <em>read</em> immediately the code, but the <em>execution</em> is postponed later, when the page is fully loaded.</p>
<p>As the use of <strong>jQuery</strong> became standard for those tasks (especially in Plone) we always use something like this:</p>
<pre>jq(document).ready(function() {
    // do something
});
</pre>
<h3>When this lead to problems</h3>
<p>Although we have really no choice, there are some cases where this "postpone things" is not perfect: when we need to apply (using Javascript) CSS classes on page elements at page load time.</p>
<p>But we <em>can't avoid</em> making those actions when page is loaded.</p>
<p>If we don't rely on <em>onload</em> event, we have no ready DOM to traverse. So we can't load and change a DOM node if the page is not fully loaded (even if we put the Javascript script after the HTML that define the node).</p>
<pre>&lt;html&gt;
&lt;body&gt;
    &lt;div id="foo"&gt;Hello world&lt;/div&gt;
    &lt;script type="text/javascript"&gt;
    &lt;!--
        var foo = document.getElementById("foo");
        alert(foo.innerHTML);
    // --&gt;
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>The code above is <em>bad</em>, even if you are using or not jQuery... So we really need to wait for the moment when DOM is ready. You can't act of the page DOM before it is fully loaded.</p>
<p>However: what is the problem applying CSS style when the DOM is loaded?</p>
<p>The nasty effect can be a <strong>visual flip</strong>.</p>
<p>The page in the browser show the DOM node with the original CSS style, then after some time (that can be not so brief sometimes if the page is full of elements and heavy scripts) the Javascript engine run your code, and the node is changed: your new CSS class or your new scripted style is applied.</p>
<pre>&lt;html&gt;
&lt;head&gt;
    &lt;style type="text/css"&gt;
    #foo {
        background-color: red;
    }
    &lt;/style&gt;
    &lt;script type="text/javascript"&gt;
    &lt;!--
        window.onload = function() {
            ... MANY OTHER EXPENSIVE OPERATIONS
            var foo = document.getElementById("foo");
            alert(foo.innerHTML);
        }
    // --&gt;
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="foo"&gt;Hello world&lt;/div&gt;
    ... A LOT OF MANY AND MANY HTML NODES
    &lt;script type="text/javscript"&gt;
    &lt;!--
        var foo = document.getElementById("foo");
        alert(foo.innerHTML);
    // --&gt;
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h3>A practical example</h3>
<p>A customer ask us to develop a Plone portlet that:</p>
<ul><li>show some random images when the page is load<br /></li><li>works behind a reverse proxy (Varnish)</li><li>works with Javascript disabled (accessibility and <a class="external-link" href="http://en.wikipedia.org/wiki/Fault-tolerant_system">graceful degradation</a>)</li></ul>
<h3>Step 1</h3>
<p>Varnish is caching all our resource, images and also HTML for every page. We can't (and don't want) change this.<br />How to cache everything but some little images inside a portlet?</p>
<p>The idea is to use Javascript&nbsp; for performing AJAX request for this portlet and obtain a structure of data. The cache of this kind of request can be avoided easily.</p>
<h3>Step 2</h3>
<p>So we are able to load an HTML for the portlet without images then, when the DOM is ready, we can populate the portlet waiting for the AJAX call to the server. For some time the visitor see and empty portlet that magically begin load images. The effect is pleasant (at least... it's not annoying).</p>
<p>But we can't!<br />The portlet must work also with disabled Javascript... So we must load random images also when the page is loaded.</p>
<p><strong>NB</strong>: if the visitor use a browser with Javascript disabled, we can only give him some random pre-loaded images, but we can't prevent Varnish cache of the whole page. Reloading the same page will show him the same images for some minutes. This is acceptable for us (and for the customer!).</p>
<h3>Step 3</h3>
<p>The final result is to load the first "static" images in the portlet itself, then use Javascript as described at step 1: changing those images with new ones obtained from AJAX call.</p>
<p>This lead to the ugly visual flip effect I talked above.</p>
<p>I can't explain why (this is not my work), but see an empty section that is filled after a little delay is not ugly... instead seeing a set of images that suddenly change to other is... bothersome!</p>
<h3>Step 4?</h3>
<p>Ok, so we can simply load static images hidden by some CSS class, then using Javascript we can show them only after the AJAX call and...<br />Opss!</p>
<p>But in this way we don't see any image when Javascript is disabled!</p>
<p>Ok... step 4 aborted.</p>
<h3>Scripted CSS Injection</h3>
<p>The perfect world is the one where the step 4 is performed, but only with Javascript enabled.</p>
<p class="callout">I need a CSS that is loaded early like all other CSS in the page (so its style is applied immediately to the page) but only when Javascript is enabled.</p>
<p>I found a way to do this, but surfing the web I was not able to find other example like this one. So I called this approach <strong>Scripted CSS Injection</strong> (SCI)... maybe someone can point me to other original name or example?</p>
<p>However... how this works? Simply generating the additional CSS... with Javascript!<br />For this we use the standard <strong>window.write</strong> Javascript API. The <em>window.write</em> command is used commonly to write HTML inside windows (is more common to use it in popup windows for generating the contained HTML from scratch).</p>
<p>The additional Javascript is load in the page <em>head</em> section and it doesn't wait for DOM load. The one in our product is only one line:</p>
<pre>document.write('&lt;style type="text/css"&gt;.hideFlag img {display: none}&lt;/style&gt;');
</pre>
<p>As I said at the beginning, Javascript is interpreted as CSS, so immediately when found in the page.<br />The browser will add to HTML the style node immediatly.</p>
<p>What is nice of SCI approach is obvious: a browser with no Javascript support can't add the CSS rule to the page!</p>
<h3>Fairytale gone well</h3>
<p>This technique finally lead us to a portlet that:</p>
<ul><li>will show cached images if without Javascript support, but images are still random (chosen server side and changed with some delay)</li><li>will show random (and not cachable) images client side if Javascript is enabled</li><li><em>No ugly visual flip effects</em>. With Javascript enabled static images are loaded hidden, then new dynamic ones are taken from the server and show. Thanks to SCI approach.<br /></li></ul>
<p>
For more info, check the code of <a class="external-link" href="http://pypi.python.org/pypi/auslfe.portlet.multimedia">auslfe.portlet.multimedia</a>.</p>

          ]]>
        </content:encoded>        

        <dc:date>2010-07-08T21:32:11+02:00</dc:date>

        <dcterms:modified>2010-07-08T21:32:11+02:00</dcterms:modified>

        <dc:creator>keul</dc:creator>

        

        
            <dc:subject>portlet</dc:subject>
        
        
            <dc:subject>graceful degradation</dc:subject>
        
        
            <dc:subject>javascript</dc:subject>
        
        
            <dc:subject>accessibility</dc:subject>
        
        
            <dc:subject>english</dc:subject>
        
        
            <dc:subject>images</dc:subject>
        
        
            <dc:subject>Plone</dc:subject>
        
        
            <dc:subject>css</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/07/02/generating-pdf-with-itext-and-xpages">

        <rss:title>Generating pdf with iText and Xpages</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/07/02/generating-pdf-with-itext-and-xpages</rss:link>       

        <rss:description>Brief tutorial to simply create PDF's inside XPages</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>Many thanks to John Mackey:</p>
<p><a class="external-link" href="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G9GT4">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G9GT4</a></p>
<p><span class="Apple-style-span">and to Daniele Vistalli&nbsp;<a class="external-link" href="http://factor-y.com">http://factor-y.com</a>&nbsp;for this idea, for their help and the great powers.</span></p>
<p><span class="Apple-style-span">Since Domino 8.5 is Eclipse based, you can switch to the Java perspective and add Java code to your project. The nsf database is the project. &nbsp;(If you haven't done this yet, it is interesting to switch perspectives and look around at the structure and the code.) &nbsp;By switching to the Java perspective, you open up your code to the importing or referencing of Java libraries, or the creation of your own classes.<br /></span></p>
<p><span class="Apple-style-span">Now we investigate how to create PDF using XPages. This tutorial summarize John's article, with some other things that you have to pay attention to.</span></p>
<p><span class="Apple-style-span">Step by step.....</span></p>
<span class="Apple-style-span">
<ul><li>Create your own .nsf</li><li>Switch to the Java perspective by selecting:&nbsp;<strong>Window-&gt;Open Perspective-&gt;Other</strong>.</li><li>Expand your project on the Left hand Project navigator. &nbsp;Select the<strong>&nbsp;WebContent/WEB-INF&nbsp;</strong>Folder</li><li>right click and select&nbsp;<strong>New-&gt;Folder</strong>. &nbsp;Name the folder&nbsp;<strong>source,&nbsp;</strong>click<strong>&nbsp;Finish.</strong>&nbsp;</li><li>right click on the&nbsp;<strong>source folder</strong>&nbsp;and select&nbsp;<strong>New-&gt;Package. &nbsp;</strong>Name the Package&nbsp;<strong>mypackage&nbsp;</strong>click<strong>&nbsp;Finish.</strong>&nbsp;</li><li>right click on the&nbsp;<strong>mypackage&nbsp;</strong>package and select&nbsp;<strong>New-&gt;File</strong>. Enter&nbsp;<strong>Test.java</strong>&nbsp;for the name. &nbsp;Click&nbsp;<strong>Finish</strong>.&nbsp;</li><li>Now double click on the <strong>Test.java</strong>&nbsp;and paste in the following code:&nbsp;</li></ul>
</span>
<pre>package mypackage;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
/**
* First iText example: Hello World.
*/
public class Test {
      public static void createPdf(String filename) throws Exception {	
       try {
            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream(filename));
            document.open();
            document.add(new Paragraph("Hello World!"));
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
     }
}</pre>
<p>&nbsp;</p>
<ul><li><span class="Apple-style-span">select the project and then select&nbsp;<strong>Project-&gt;Properties</strong>&nbsp;from the menu (or right click)</span></li><li><span class="Apple-style-span">select the&nbsp;<strong>Java Build Path</strong>&nbsp;and click on&nbsp;<strong>Add Folder</strong>&nbsp;button. &nbsp;Select the new source folder. &nbsp;Click OK.</span></li><li><span class="Apple-style-span">In <strong>WebContent</strong>\<strong>WEB-INF </strong>add the folder called <strong>lib</strong></span></li><li><span class="Apple-style-span">Right-click on it and select <strong>Import-&gt;File System-&gt;Browse</strong>&nbsp;and select itext jar (i.e&nbsp;<strong>iText-5.0.2.jar</strong>)</span></li><li><span class="Apple-style-span">import itext jar (i.e iText-5.0.2.jar) in your <strong>Java Build Path:&nbsp;</strong>&nbsp;</span><span class="Apple-style-span"><strong>Project-&gt;Properties-&gt;</strong></span><span class="Apple-style-span"><strong>Java Build Path-&gt;Libraries-&gt;Add Jar </strong>and select jar from <strong>WebContent\WEB-INF</strong></span></li><li><span class="Apple-style-span">Note: you have to deploy jar in your server, in <strong>data\</strong></span><span class="Apple-style-span"><strong>domino\java </strong>and append this line in notes.ini, JavaUserClasses variable</span></li></ul>
<span class="Apple-style-span"><br /></span>
<pre>JavaUserClasses=......;C:\Programmi\IBM\Lotus\Domino\data\domino\java\iText-5.0.2.jar</pre>
<p>&nbsp;</p>
<p>this will not cause security problem when you call iText methods to generate PDF</p>
<div>
<ul><li>Create a <strong>Script Library Server Side</strong>&nbsp;called <strong>SLCode</strong>&nbsp;and save this code on it</li></ul>
</div>
<pre>function create(){ 
        mypackage.Test.createPdf("hello.pdf");
}</pre>
<p>&nbsp;</p>
<div>
<ul><li>Now create an xpage</li><li>in <strong>Resources </strong>section, include <strong>SLCode </strong>library</li><li>Drag a Button control in Xpage</li><li>Goto <strong>Event section </strong>of this button, <strong>onClick </strong>event, and put this JSS code</li></ul>
</div>
<pre>create();</pre>
<p>&nbsp;</p>
<div>
<ul><li>Open your XPage in a browser and click the button: pdf will be created in domino directory on server</li></ul>
</div>
<p>That's all!</p>

          ]]>
        </content:encoded>        

        <dc:date>2010-07-02T10:15:00+02:00</dc:date>

        <dcterms:modified>2010-07-15T07:32:07+02:00</dcterms:modified>

        <dc:creator>Andrea Baglioni</dc:creator>

        

        
            <dc:subject>Lotus</dc:subject>
        
        
            <dc:subject>Domino</dc:subject>
        
        
            <dc:subject>xPages</dc:subject>
        
        
            <dc:subject>english</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/06/29/textareabound-trying-my-first-jquery-plugin">

        <rss:title>TextAreaBound: trying my first jQuery plugin</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/06/29/textareabound-trying-my-first-jquery-plugin</rss:link>       

        <rss:description>HTML has some nice attributes to control the size and bound of input fields. However those features aren't working for textarea.
Our customer asked us for those features: max number of lines in a textarea, max numbers of character in the textarea AND in a line...
Let's try to develop a jQuery plugin for obtaining this!</rss:description>

        <content:encoded>
          <![CDATA[
          
<h3>The APIs we want</h3>
<p>We must reach this:</p>
<pre>$(...).maxLinesLengthBound(n)
$(...).maxLinesCountBound(n)
$(...).maxTextLength(n)
</pre>
<p>Obviously, we like jQuery chaining so also this must work:</p>
<pre>$("#textareaid").maxLinesLengthBound(20).maxLinesCountBound(15)</pre>
<p>All of the 3 new jQuery feature take all the textarea element from the expression given and apply new bounds.</p>
<ul><li>The <strong>maxLinesLengthBound</strong> method will put a limit on the number of lines in a textarea</li><li>The <strong>maxLinesCountBound</strong> method will put a limit in the number of characters of each line</li><li>The <strong>maxTextLength</strong> method is the most simple: put a limit to the number of total character in textareas</li></ul>
<h3>Bad news one: Javascript events<br /></h3>
<p>When adding character in Javascript we can rely on 3 events:</p>
<ul><li><strong>keydown</strong> event is called when a key is pressed (before it's released)</li><li><strong>keyup</strong> event is called when a key came up after <em>keydown</em>.</li><li><strong>keypress</strong> event is called when a key is... pressed! So it goes down and then up. More important, if you keep pressed a button, starting the characters-repeat, this even is called multiple times.</li></ul>
<p>As you can see, the <em>keypress</em> is the best choice... but using this event has a great limitation.</p>
<p>When you rely on <em>keydown</em> event, the "actual" value of the field is the old one. When you bind an handler to the <em>keyup</em> or <em>keypress </em>events the value you can read is the new one. You have <em>no way</em> to know what was the old value of the field.</p>
<p>Don't think to use other events like <strong>change</strong> event. This type of event has the same problems and also is called only when the control loose focus.</p>
<h3>Solution to bad news one</h3>
<p>Yes, we can only read the new value of the field, but we can also use the <strong>event object</strong> and take from it the value of the pressed key, so we can know what new character will be added to the textarea</p>
<h3>Bad news two: knowing where the cursor is (on Internet Explorer)<br /></h3>
<p>Unluckily in a textarea you not always append characters... you can also add new characters inside the text. The pressed key is still a very important resource, but we must also know in which position we are inside the textarea.</p>
<p>The task seems simple on all browsers, with only a single exception: you can read the <strong>selectionStart</strong> attribute of the textarea DOM element.</p>
<p>We really need this only for one of the 3 APIs we need above: the <em>maxLinesLengthBound</em> method. Other 2 APIs don't need to know where the cursor is...</p>
<p>The vary bad news is this: Internet Explorer do not support selectionStart!</p>
<h3>Solution to bad news two (AKA: bad news three)</h3>
<p>You can surf the Web looking for an alternative, and you will find <strong>a lot</strong> of blog post, articles and script for giving an alternative.</p>
<p>What is clear is that you must use some funny IE specific APIs like <strong>getBookmark</strong> and <strong>createRange</strong>... and you will fail.</p>
<p>I found <strong>no way</strong> to really have the same simple features. On Internet Explorer 7 I have a lot of problems when I go to the second line. Those APIs seems buggy and the browser don't see that you go on a new line.</p>
<p>Tired of this, I leave the problem to someone more expert than me with IE Javascript.</p>
<p class="callout">Wanna help me?</p>
<h3>The jQuery plugin</h3>
<p>You can find the plugin on the jQuery <a class="external-link" href="http://plugins.jquery.com/project/textareabound">plugin official page</a>, and also other info and the SVN repository in my <a class="external-link" href="http://code.google.com/p/keul-at-javascript">Google Code space</a>.</p>
<p>&nbsp;</p>

          ]]>
        </content:encoded>        

        <dc:date>2010-06-29T12:22:03+02:00</dc:date>

        <dcterms:modified>2010-06-29T12:22:03+02:00</dcterms:modified>

        <dc:creator>keul</dc:creator>

        

        
            <dc:subject>jQuery</dc:subject>
        
        
            <dc:subject>textarea</dc:subject>
        
        
            <dc:subject>javascript</dc:subject>
        
        
            <dc:subject>english</dc:subject>
        
        
            <dc:subject>IE</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/06/26/system.getproperty-returns-null">

        <rss:title>System.getProperty() returns null</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/06/26/system.getproperty-returns-null</rss:link>       

        <rss:description>How to avoid a null pointer using System.getProperty() within  a java agent.</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>Sometimes, for some reason, you have to do it. I'm talking about the use of&nbsp;<em>System.setProperty()</em> method within a java agent. If you don't pay attention it's easy to get a null pointer as result. Infact I got it.&nbsp;</p>
<p>After a quick search I found out a way to solve the issue:</p>
<p>I will use "jna.library.path" as example.</p>
<p>First of all add the following line in "java.policy" file (in the "jvm\lib\security" folder below the Domino program folder).</p>
<pre>permission java.util.PropertyPermission "jna.library.path", "read,write";</pre>
<p>&nbsp;</p>
<p>After that, add the java code to your agent :</p>
<pre>String jnaProperty = "jna.library.path";
if(System.getProperty(jnaProperty) == null) {
   System.setProperty(jnaProperty,"your path");
}</pre>
<div>&nbsp;</div>
<div>And that it's all.</div>
<div>&nbsp;</div>
<div>Bye</div>

          ]]>
        </content:encoded>        

        <dc:date>2010-06-26T02:10:00+02:00</dc:date>

        <dcterms:modified>2010-06-28T12:38:57+02:00</dcterms:modified>

        <dc:creator>Nicola Senno</dc:creator>

        

        
            <dc:subject>Domino</dc:subject>
        
        
            <dc:subject>java.policy</dc:subject>
        
        
            <dc:subject>java</dc:subject>
        
        
            <dc:subject>english</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/06/24/rt.vuvuzela">

        <rss:title>rt.vuvuzela?! </rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/06/24/rt.vuvuzela</rss:link>       

        <rss:description>Creato durante l'agonia di Italia - Slovacchia</rss:description>

        <content:encoded>
          <![CDATA[
          
<div>
<div id="parent-fieldname-text">
<h3>
rt.vuvuzela e' su <a class="external-link" href="http://pypi.python.org/pypi/rt.vuvuzela/">pypi</a></h3>
Per vedere ciò di cui <strong>rt.vuvuzela</strong> è capace aggiungetela agli come al solito alla sezione [instance] del vostro buildout (eggs e zcml).
<p>Una volta rilanciato il buildout la vista <strong>vuvuzela</strong> sarà a vostra disposizione.</p>
<p>Ecco uno screenshot della vista:</p>
<p><img class="image-inline" src="uploads/vuvuzela.png/image_preview" alt="rt.vuvuzela at work" /></p>
Per accedere al player aggiungete "vuvuzela" all'url, ad esempio:
<pre>http://nohost.com/vuvuzela
http://nohost.com/mycontent/vuvuzela
</pre>
<h3><br /></h3>
<h3>Un logo per rt.vuvuzela???</h3>
<p><img class="image-inline" src="uploads/rtvuvuzela.png/image_preview" alt="rt.vuvuzela logo" /></p>
</div>
</div>

          ]]>
        </content:encoded>        

        <dc:date>2010-06-24T17:40:00+02:00</dc:date>

        <dcterms:modified>2010-06-24T17:38:07+02:00</dcterms:modified>

        <dc:creator>Alessandro Pisa</dc:creator>

        

        
            <dc:subject>fake-eggs</dc:subject>
        
        
            <dc:subject>Plone</dc:subject>
        
        
            <dc:subject>italiano</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/06/24/rt.vuvuzela-is-out">

        <rss:title>rt.vuvuzela is out!</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/06/24/rt.vuvuzela-is-out</rss:link>       

        <rss:description>Developed while watching Italy on tv. Suffering...</rss:description>

        <content:encoded>
          <![CDATA[
          
<h2>rt.vuvuzela is available from <a class="external-link" href="http://pypi.python.org/pypi/rt.vuvuzela/">pypi</a></h2>
<p>As usual add <strong>rt.vuvuzela</strong>
to eggs and zcml into the [instance] section of your buildout.</p>
<p>Then you can just go to your site and you will have a nice vuvuzela view displaying a player stealed borrowed from wikipedia. Here you can see a snapshot of the view:</p>
<p><img class="image-inline" src="uploads/vuvuzela.png/image_preview" alt="rt.vuvuzela at work" /></p>
<p>To see it live just append "vuvuzela" to your browser url, e.g.:</p>
<pre>http://nohost.com/vuvuzela
http://nohost.com/mycontent/vuvuzela</pre>
<h3><br /></h3>
<h3>rt.vuvuzela logo???</h3>
<p><img class="image-inline image-inline" src="uploads/rtvuvuzela.png/image_preview" alt="rt.vuvuzela logo" /></p>

          ]]>
        </content:encoded>        

        <dc:date>2010-06-24T17:30:00+02:00</dc:date>

        <dcterms:modified>2010-06-24T19:13:48+02:00</dcterms:modified>

        <dc:creator>Alessandro Pisa</dc:creator>

        

        
            <dc:subject>fake-eggs</dc:subject>
        
        
            <dc:subject>Plone</dc:subject>
        
        
            <dc:subject>english</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/06/17/mail-triage">

        <rss:title>New 'Email Triage' Technology by IBM</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/06/17/mail-triage</rss:link>       

        

        <content:encoded>
          <![CDATA[
          
<p><object height="385" width="640"><param name="movie" value="http://www.youtube.com/v/dZ14iyFCoNI&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed width="640" height="385" allowscriptaccess="always" allowfullscreen="true" type="application/x-shockwave-flash" src="http://www.youtube.com/v/dZ14iyFCoNI&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1"></embed></object></p>

          ]]>
        </content:encoded>        

        <dc:date>2010-06-17T11:27:10+02:00</dc:date>

        <dcterms:modified>2010-06-17T11:27:10+02:00</dcterms:modified>

        <dc:creator>Fabio Pignatti</dc:creator>

        

        
            <dc:subject>Lotus</dc:subject>
        
        
            <dc:subject>Domino</dc:subject>
        
        
            <dc:subject>email</dc:subject>
        
        
            <dc:subject>triage</dc:subject>
        

    </rss:item>

    
    

    <rss:item rdf:about="http://blog.redturtle.it/redturtle-blog/2010/06/15/plone-ti-vedo-e-non-ti-vedo">

        <rss:title>Plone: ti vedo e non ti vedo</rss:title>

        <rss:link>http://blog.redturtle.it/redturtle-blog/2010/06/15/plone-ti-vedo-e-non-ti-vedo</rss:link>       

        <rss:description>Quando si porta in Plone di un portale esistente, chi lo gestisce e chi lo popola di contenuti notano sempre la differenza in meglio. Ma cosa si può fare perché chi usa il portale non si accorga del cambiamento?</rss:description>

        <content:encoded>
          <![CDATA[
          
<p>C'è ancora chi crede che un sito Plone si riconosca a prima vista: può essere, se parliamo di installazioni "out of the box" o comunque se si decide di restare nelle skin più classiche. Ma certamente non è un principio generale: la flessibilità di Plone è testimoniata&nbsp;non tanto dalla possibilità di impostazioni grafiche complesse e innovative,&nbsp;quanto dalla sua possibilità di&nbsp;mimetizzarsi completamente&nbsp;in un layout grafico preesistente.</p>
<p>Due casi di studio, entrambi provenienti dall'ambito della Regione Emilia Romagna, dimostrano questa flessibilità con particolare evidenza:</p>
<ul><li>Nel sito <a class="external-link" href="https://www.iopartecipo.net/cgi-bin/partecipa.base/unox1">"Io Partecipo" / "Uno x uno"</a>, che propone una soluzione mista Plone / non Plone, l'integrazione trasparente di Plone è stata ottenuta grazie a Deliverance (diversi dei nostri tecnici hanno parlato di questa soluzione nelle loro presentazioni: <a class="external-link" href="http://www.slideshare.net/massimo.azzolini/bibliotecaaccessibile">Massimo</a>, <a class="external-link" href="http://www.slideshare.net/stemrc/breve-resoconto-dalla-world-plone-conference-2009-26-ottobre-1-novembre">Stefano</a>, e <a class="external-link" href="topics/deliverance">nel nostro blog</a>). Deliverance consente di ridistribuire gli elementi grafici di uno o più&nbsp;layout esistenti, assemblandoli in modo differente e - se necessario - armonizzandoli dal punto di vista grafico. Nel caso di "Io partecipo", tutti gli elementi del layout grafico sono riproposti direttamente da un preesistente sito,&nbsp;salvo la colonna di sinistra (notizie, commenti, argomenti) che è invece tratta da un sito plone ad hoc. Ciò ha consentito di mantenere inalterata l'originaria infrastruttura, pur offrendo ai redattori i vantaggi di Plone per la redazione delle informazioni modificate più di frequente.</li><li>Invece, nel caso di Ermes, <a class="external-link" href="http://ermes.regione.emilia-romagna.it/">il portale della Regione Emilia Romagna</a>, gli utenti non si sono accorti di nulla nonostante l'intero portale sia stato interamente reingegnerizzato in Plone. In questo caso, Plone è stato meticolosamente personalizzato in modo molto granulare, per caratterizzare ogni elemento visibile secondo i tematismi grafici e la struttura del portale originale: la buona riuscita dell'operazione può essere testimoniata da chiunque abbia usato Ermes negli ultimi mesi - a parte la differente&nbsp;struttura degli URL, nulla denuncia il cambiamento di tecnologia. Altrettanto rimarchevole il fatto che, sebbene l'originale implementazione fosse in HTML statico e quindi particolarmente leggera, i tempi di caricamento delle pagine in Plone sono immutati: insomma, l'enorme vantaggio di una gestione dei contenuti immediata e "through the web" non si paga in termini di prestazioni. Tra l'altro, a differenza della precedente implementazione statica,&nbsp;il portale Plone&nbsp;sarà agevolmente adattabile&nbsp;ad altri media palmari&nbsp;(ipad/iphone/smartphone in genere).<br /></li></ul>
<p>In conclusione, le ragioni per non rinunciare alla veste grafica "storica" di un portale sono molteplici, soprattutto legati all'elevato numero di utenti abituali, e bisogna trasformare questa esigenza in un'opportunità. Il fatto che Plone lo consenta è importante per molti validi motivi:</p>
<ul><li>dimostra la flessibilità della tecnologia</li><li>abbatte un ostacolo spesso insormontabile: la paura del cambiamento; L'alibi "Ma i nostri utenti sono abituati a vedere le cose in questo modo!" si dissolve con un "E così continueranno a vederle!";</li><li>preserva gli investimenti passati: se il progetto di comunicazione su cui è disegnato il portale è valido, può avere senso mantenerlo anche al variare della tecnologia.</li></ul>

          ]]>
        </content:encoded>        

        <dc:date>2010-06-15T16:05:00+02:00</dc:date>

        <dcterms:modified>2010-06-15T18:57:22+02:00</dcterms:modified>

        <dc:creator>Cesare Brizio</dc:creator>

        

        
            <dc:subject>italiano</dc:subject>
        
        
            <dc:subject>Plone</dc:subject>
        
        
            <dc:subject>tema</dc:subject>
        
        
            <dc:subject>deliverance</dc:subject>
        

    </rss:item>

    

</rdf:RDF>
