<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Simone Cabrino &#187; Programmazione</title>
	<atom:link href="http://simone.cabrino.it/blog/tag/programmazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://simone.cabrino.it</link>
	<description>Informatica, internet e programmazione: è passione!</description>
	<lastBuildDate>Tue, 08 Nov 2011 13:37:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>dateAdd in Javascript</title>
		<link>http://simone.cabrino.it/blog/dateadd-in-javascript/</link>
		<comments>http://simone.cabrino.it/blog/dateadd-in-javascript/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 16:21:15 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Sviluppo Siti]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/?p=734</guid>
		<description><![CDATA[dateAdd è una funzione presente in VBScript (ASP), ma non in JS: ecco la mia versione della funzione.]]></description>
			<content:encoded><![CDATA[<p>Mi sono scontrato con una <strong>funziona banale</strong>, conosciuta in ASP (<strong>VBScript</strong>), ma comoda, funzione che in<strong> JS </strong>non ho mai visto e trovato (magari ne ho anche fatte poche ricerche). DateAdd permette di sommare ad una data un valore qualsiasi di un intervallo dato (secondi, minuti, ore, giorni, mesi e anni).</p>
<p>Potete scaricare qui la mia <a href="http://simone.cabrino.it/wp-content/uploads/2008/12/dateadd.zip">funzione dateAdd in JS</a>.</p>
<h3>Funzionamento</h3>
<p>Utilizzare la funzione è semplicissimo: a seguito alcuni esempi.</p>
<pre><code class="javascript">/* Sommare 10 ore all'ora di oggi */
ora_nuova = addInterval(new Date(), 'h', 10);

/* Sommare 300 secondi all'ora di prima */
ora_nuova2 = addInterval(ora_nuova, 's', 300);
</code></pre>
<p>Semplice, non credete?</p>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/dateadd-in-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Leggere un file remoto via ASP</title>
		<link>http://simone.cabrino.it/blog/leggere-un-file-remoto-via-asp/</link>
		<comments>http://simone.cabrino.it/blog/leggere-un-file-remoto-via-asp/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 16:01:30 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Active Server Pages]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/?p=465</guid>
		<description><![CDATA[Script in ASP Classic per leggere un file remoto e salvarlo sul proprio server. Funzionamento simile alle funzioni CURL di PHP.]]></description>
			<content:encoded><![CDATA[<p>Questo script permette ai programmatori <strong><a class="zem_slink" title="Active Server Pages" rel="wikipedia" href="http://en.wikipedia.org/wiki/Active_Server_Pages">ASP Classic</a></strong> di <strong>leggere un file remoto</strong> (su un altro server) per incorporarlo nelle proprie applicazioni. In sostanza potrei dire che equivale alle funzioni di <strong>CURL</strong> presenti e magnificamente funzionanti di <a class="zem_slink" title="PHP" rel="homepage" href="http://php.net/">PHP</a>.</p>
<p>Dopo tanto tempo torno a pubblicare un articolo di programmazione, anche se banale, semplice e magari da tanti già utilizzato.</p>
<p><span id="more-465"></span></p>
<pre><code class="vbscript">&lt;%
' inserisci qui l'url della pagina da caricare
urlDaAprire = "http://url.protected.com/file-to-retrieve.txt" 

' creiamo un oggetto xml
Set miaConnessione = CreateObject("Microsoft.XMLHTTP")
' connessione alla nostra url
miaConnessione.Open "get", urlDaAprire, false, "username", "password"

miaConnessione.Send 

' ResponsePage è il contenuto dell'interrogazione all'indirizzo
ResponsePage = miaConnessione.responseText
Set miaConnessione = Nothing

' We will write
strPath = Server.Mappath("./nomeFileLocale.txt")
Set conFile = Server.CreateObject ("Scripting.FileSystemObject")
Set mioFile = conFile.OpenTextFile (strPath, 2)

mioFile.Write(ResponsePage)

mioFile.close
Set mioFile = Nothing
Set conFile = Nothing
%&gt;</code>
</pre>
<p>Username e Password non sono necessari. Nel caso che il file remoto che dovete utilizzare è libero e non richiede permessi, cancellate semplicemente gli ultimi 3 parametri alla riga 7, ottenendo</p>
<pre><code class="vbscript">miaConnessione</code><code class="vbscript">.Open "get", </code><code class="vbscript">urlDaAprire</code></pre>
<p>Come sempre, spero di esservi stato utile! <img src='http://simone.cabrino.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/leggere-un-file-remoto-via-asp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony: scaffolding o administration</title>
		<link>http://simone.cabrino.it/blog/symfony-scaffolding-o-administration/</link>
		<comments>http://simone.cabrino.it/blog/symfony-scaffolding-o-administration/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 17:22:33 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/?p=445</guid>
		<description><![CDATA[Scopri le differenze tra i generatori di scaffolding e i generatori di amministrazione forniti da Symfony per la creazione delle tue applicazioni web.]]></description>
			<content:encoded><![CDATA[<div class="zemanta-img" style="margin: 1em; float: right; display: block;"><img style="border: medium none; display: block;" src="http://upload.wikimedia.org/wikipedia/en/thumb/c/c9/Scaffold_Pole_Section.jpg/202px-Scaffold_Pole_Section.jpg" alt="A short section of steel scaffold pole." /></div>
<p><strong><a class="zem_slink" title="Symfony" rel="homepage" href="http://www.symfony-project.com/">Symfony</a></strong>, ormai noto framework per lo sviluppo di applicazioni web, tra le tante funzioni messe a disposizione degli utenti, fornisce <strong>Generatori</strong> (a cui viene dedicato l&#8217;intero capitolo 14 di &#8220;The definitive guide to Symfony&#8221;, libro acquistabile su carta stampata o anche consultabile direttamente online) per due differenti metodi di &#8220;managing&#8221; dei dati.</p>
<p>I generatori messi a disposizione dal symfony-project sono:</p>
<ul>
<li>generatori per lo <strong><a title="Wikipedia, significato di scaffolding" href="http://it.wikipedia.org/wiki/Scaffolding" target="_blank">scaffolding</a></strong></li>
<li>generatori per l&#8217;<strong>amministrazione</strong></li>
</ul>
<p>Potremmo dire, in maniera molto semplice che gli <em>scaffolding module</em> vengono creati ad uso e consumo degli sviluppatori, mentre il modulo backend per l&#8217;amministrazione viene creato per l&#8217;utente finale. Lo scaffolding code è modificato manualmente, mentre i pannelli di amministrazione vengono modificati attraverso i documenti di configurazione e l&#8217;ereditarietà delle classi.</p>
<p><span id="more-445"></span></p>
<h2>Generatori per lo scaffolding</h2>
<p>Lo <em>scaffolding</em> è la generazione della struttura di base (actions e templates) richieste per gestire ed eseguire un&#8217;interfaccia <strong><a href="http://it.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete" target="_blank">CRUD</a></strong>. Il codice di scaffolding è minimale e va visto come codice di partenza per la creazione delle vostre applicazioni.</p>
<p>Non a caso, il termine scaffolding è stato utilizzato, come si dice su Wikipedia,</p>
<blockquote><p>metaforicamente per indicare quelle strategie di <strong>sostegno ai processi di apprendimento</strong> che consentono di svolgere un compito sebbene non si abbiano ancora le competenze per farlo in autonomia, quindi di riuscire nel compito grazie all&#8217;aiuto di un esperto, di un adulto o di un pari più preparato che ci fornisce indicazioni e suggeriment</p></blockquote>
<p>Ecco quindi che l&#8217;utilizzo del generatore di scaffolding andrebbe utilizzato per creare rapidamente tutte le funzioni di accesso web ai dati della base di dati, in particolar modo durante le prime fasi di creazione di un&#8217;applicazione.</p>
<p>Per generare questa impalcatura (<em>scaffolding</em>) in symfony si utilizza la chiamata alla funzione</p>
<pre><code>&gt; symfony propel-generate-crud </code><code>nome_applicazione</code><code> </code><code>nome_modulo</code><code> NomeClasse
&gt; symfony propel-init-crud </code><code>nome_applicazione</code><code> nome_modulo NomeClasse
</code></pre>
<p>dove NomeClasse è la definizione dei dati inserita nel file <code>schema.yml</code>.</p>
<h2>Generatori per l&#8217;amministrazione</h2>
<p>La generazione dell&#8217;<strong>amministrazione</strong> (tipicamente chiamata backend administration) è la creazione di una sofisticata interfaccia per la gestione dei dati. La presentazione è enfatizzata per il codice di amministrazione (<em>vis-a-vis scaffolding code</em>). Vengono offerti metodi per l&#8217;ordinamento, la paginazione, filtri e altre features tipicamente utilizzate nelle interfacce di amministrazione.</p>
<p>Oltre a queste funzioni, tutte le funzioni di <strong>CRUD</strong> (creazione, visualizzazione, aggiornamento e cancellazione dei records) vengono implementate correttamente.</p>
<p>La generazione di questa intera area backend è in &#8220;mano&#8221; alla funzione</p>
<pre><code>&gt; symfony init-app </code><code>nome_applicazione
</code><code>&gt; symfony propel-init-admin </code><code>nome_applicazione</code><code> </code><code>nome_modulo</code><code> NomeClasse</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/symfony-scaffolding-o-administration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usare un framework? Beh, molto più divertente!</title>
		<link>http://simone.cabrino.it/blog/usare-un-framework-beh-molto-piu-divertente/</link>
		<comments>http://simone.cabrino.it/blog/usare-un-framework-beh-molto-piu-divertente/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 22:46:22 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/?p=441</guid>
		<description><![CDATA[L'uso di un framework come Symfony nella programmazione lato PHP può, seppure preveda uno studio iniziale, velocizzare decisamente i tempi di sviluppo. Ecco come.]]></description>
			<content:encoded><![CDATA[<p>Mi rendo conto che, ormai, il <strong>programmatore</strong> ha un ruolo abbastanza &#8220;invisibile&#8221; se si limita a programmare, senza mai aumentare le proprie consocenze, senza mai mettersi a studiare una &#8220;nuova tecnologia&#8221;. Ed oggi, cosa che cerco di fare da ormai davvero parecchio tempo, ho deciso di provare a comprendere, nei dettagli, il funzionamento di un <strong><a class="zem_slink" title="Framework" rel="wikipedia" href="http://en.wikipedia.org/wiki/Framework">framework</a></strong>.</p>
<p>Il framework che ho scelto di usare (di cui vi ho già anticipato nell&#8217;ultimo articolo) è <a class="zem_slink" title="Symfony" rel="homepage" href="http://www.symfony-project.com/">Symfony</a> Project, un framework per lo sviluppo in PHP. E se in questi giorni avevo già visto come creare un progetto, un applicazione ed un modulo per la gestione dei dati, oggi mi sono &#8220;allargato&#8221;, andando a creare il mio &#8220;primo backend&#8221; con Symfony con l&#8217;integrazione del database MySQL.</p>
<p><span id="more-441"></span></p>
<p style="text-align: center;"><a href="http://commons.wikipedia.org/wiki/Image:ModelViewControllerDiagram.svg"><img class="aligncenter" style="border: medium none; display: block;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/ModelViewControllerDiagram.svg/202px-ModelViewControllerDiagram.svg.png" alt="A simple diagram depicting the relationship between the Model, View, and Controller. Note: the solid lines indicate a direct association, and the dashed line indicate an indirect association (e.g., observer pattern)." /></a></p>
<p>Programmare con un framework diventa decisamente più veloce (che non vuol dire semplice), anche se si mettono in gioco decine e decine di files differenti. Un area di editing di tipo <strong><a class="zem_slink" title="Create, read, update and delete" rel="wikipedia" href="http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete">CRUD</a></strong> (<em>Create</em>, <em>Read</em>, <em>Update</em> e <em>Delete</em>) che, per un programmatore base prevede la creazione dai 4 documenti differenti in su (non conto tra questi i file di layout e/o simili), attraverso un framework <a class="zem_slink" title="Model-view-controller" rel="wikipedia" href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a> il numero dei files sale vertiginosamente&#8230;</p>
<p>Unico problema è riuscire a ricordarsi correttamente dove modificare cosa e come modificare le stesse pagine&#8230; Ma appreso il meccanismo, tutto diventa velocissimo!!!</p>
<p><strong>Voi avete provato?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/usare-un-framework-beh-molto-piu-divertente/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ASP: errore 80040e14</title>
		<link>http://simone.cabrino.it/blog/asp-errore-80040e14/</link>
		<comments>http://simone.cabrino.it/blog/asp-errore-80040e14/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 15:10:37 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[errori]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/?p=336</guid>
		<description><![CDATA[Possibile soluzione per l'errore ASP 80040e14 (Errore di sintassi nell'istruzione INSERT INTO).]]></description>
			<content:encoded><![CDATA[<p>Durante l&#8217;esecuzione di una query in ASP siete incappati nell&#8217;<strong>errore 80040e14</strong> (<em>Errore di sintassi nell&#8217;istruzione INSERT INTO</em>)? Se fate una ricerca con Google il numero dell&#8217;errore (80040e14), vi ritroverete sicuramente sul sito della Adobe, precisamente nel LiveDocs per Dreamweaver. Ma veniamo al dunque: <strong>come risolvere l&#8217;errore 80040e14?</strong></p>
<p>Uno dei suggerimenti dati da Adobe è quello di &#8220;<em>evitare l&#8217;uso di parole riservate quali &#8216;date&#8217;, &#8216;name&#8217;, &#8216;select&#8217;, &#8216;where&#8217; e &#8216;level&#8217; quando si specificano i nomi delle colonne del database</em>&#8220;, d&#8217;accordo, ma&#8230;probabilmente la parola chiave, riservata, che voi state cercando di usare come nome di un campo del vostro database e che vi solleva l&#8217;errore 80040e14 è <strong>password</strong>, come troppo spesso è capitato durante la programmazione e il salvataggio degli utenti!!!</p>
<p>Quindi, provate ad utilizzare una parola chiave tipo <strong>pwd</strong>, che sempre sta per password, ma che almeno non vi solleva errori nell&#8217;<em>istruzione INSERT INTO</em>!</p>
<p>Buona programmazione!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/asp-errore-80040e14/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: formattare data</title>
		<link>http://simone.cabrino.it/blog/php-formattare-data/</link>
		<comments>http://simone.cabrino.it/blog/php-formattare-data/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 21:07:04 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/?p=332</guid>
		<description><![CDATA[Convertire le date dal formato mySQL al formato più comunemente usato nella scrittura e nelle pagine web.]]></description>
			<content:encoded><![CDATA[<p>Vi capiterà, sicuro, programmando, di essere incappati in questo noioso problema di formattazione delle date che, nelle basi di dati, vengono solitamente create nella forma YYYY-MM-DD (anno, mese, giorno), anzichè nella più semplice, comune ed utilizzata versione latina: DD-MM-YYYY (giorno, mese, anno).</p>
<p>Visto che ci bazzicavo spesso ed era parecchio tempo che non programmavo in PHP, ecco due comode funzioni per sistemare le date: convertToMySQL() e convertToSimple().</p>
<pre><code class="php">function convertToMySQL($mydate) {
    list($dd,$mm,$yy)=explode(".",$mydate);
    if (is_numeric($yy) &amp;&amp; is_numeric($mm) &amp;&amp; is_numeric($dd)) {
      return "$yy-$mm-$dd";
    }
}

function convertToSimple($mydate) {
list($yy,$mm,$dd)=explode("-",$mydate);
    if (is_numeric($yy) &amp;&amp; is_numeric($mm) &amp;&amp; is_numeric($dd)) {
      return "$dd.$mm.$yy";
    }
}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/php-formattare-data/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TinyMCE: manca la formattazione!?</title>
		<link>http://simone.cabrino.it/blog/tinymce-manca-formattazione/</link>
		<comments>http://simone.cabrino.it/blog/tinymce-manca-formattazione/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 16:52:51 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tinymce]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/?p=293</guid>
		<description><![CDATA[Risolvere il problema di visualizzazione dell'output di un form TinyMCE utilizzando PHP come motore di programmazione, semplicemente usando la funzione stripslashes.]]></description>
			<content:encoded><![CDATA[<p>Mi ha contattato <a title="Stefano commenta Guida a TinyMCE" href="http://simone.cabrino.it/2008/01/17/tinymce-guida/#comment-988" target="_self">Stefano</a> nello scorso post su <a title="Guida a TinyMCE" href="http://simone.cabrino.it/2008/01/17/tinymce-guida/" target="_self">TinyMCE Guida all&#8217;uso</a>, chiedendomi come risolvere il problema della visualizzazione di colori e giustificazioni (come anche la scelta dei font) del testo passato da un form che utilizza questo editor <a title="Editor WYSIWYG a confronto" href="http://simone.cabrino.it/2007/05/08/confronto-editor-wysiwyg/" target="_self">WYSIWYG</a> alla pagina seguente che ne fa il retrieve.</p>
<p><span id="more-293"></span></p>
<h2>Problema</h2>
<p>Per pigrizia ho chiesto allo stesso Stefano di mandarmi il suo script pronto, così da provarlo e capire cosa non andasse. Le due pagine di test ricevute erano:</p>
<ul>
<li>pagina con editor di testo ad uso dell&#8217;amministratore del sito</li>
<li>pagina di retrieve (recupero) dei dati inviati per visualizzazione anteprima</li>
</ul>
<h3>Area amministrativa con editor WYSIWYG</h3>
<pre><code class="html">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Prova News&lt;/title&gt;
&lt;script language="javascript" type="text/javascript" src="&lt;?php $basedir ?&gt;/script/tiny_mce/tiny_mce.js"&gt;&lt;/script&gt;
&lt;script language="javascript" type="text/javascript"&gt;
tinyMCE.init({
mode : "textareas",
theme : "advanced",
plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",

// Theme options
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
apply_source_formatting : true
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form method="post" action="&lt;?php $basedir ?&gt;/vediNews.php"&gt;
&lt;textarea name="content" cols="50" rows="15"&gt;Scrivi News.&lt;/textarea&gt;
&lt;input type="submit" value="Salva" /&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h3>Visualizzazione della news inviata</h3>
<pre><code class="html">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Visualizzazione News&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?=$_POST['content'] ?&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>Il problema, dopo aver inviato il contenuto dell&#8217;editor di testo, riportando la frase del ragazzo che mi ha contattato, è che</p>
<blockquote><p>[...] viene rispettata solo la formattazione quale grassetto, corsivo, sottolineato, mentre ignorati i cambi di colore, carattere ecc ecc… [...]</p></blockquote>
<h2>Soluzione</h2>
<p>Analizzando il <strong>codice di output</strong> ho notato, <em>stupido che non ci ho pensato prima</em>, a come le variabili passate da un FORM e recuperate attraverso gli operatori <strong>$_GET</strong> e <strong>$_POST</strong> di PHP, aggiungono automaticamente slash ( \ ) prima degli apici singoli ( &#8216; ) e doppi ( &#8221; ) per evitare di interpretare le stesse all&#8217;interno del codice PHP, evitando così problemi ancora maggiori, come la &#8220;rottura&#8221; di query che crea problemi di sicurezza.</p>
<p>Per risolvere così il &#8220;problema&#8221;, basta allora utilizzare la funzione PHP <strong>stripslashes</strong>, che restituisce il risultato privo di slash ( \ ), mostrando così il contenuto del FORM pulito e correttamente interpretabile da tutti i browser.</p>
<pre><code class="php">&lt;?=stripslashes($_POST['testo'])?&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/tinymce-manca-formattazione/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Guida a TinyMCE</title>
		<link>http://simone.cabrino.it/blog/tinymce-guida/</link>
		<comments>http://simone.cabrino.it/blog/tinymce-guida/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 18:37:26 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Sviluppo Siti]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[tinymce]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/2008/01/17/tinymce-guida/</guid>
		<description><![CDATA[Guida passo passo all'installazione e personalizzazione di TinyMCE, ottimo editor WYSIWYG per lo sviluppo dei vostri siti web.]]></description>
			<content:encoded><![CDATA[<p>Avevo già parlato di <strong><a class="zem_slink" title="TinyMCE" rel="homepage" href="http://tinymce.moxiecode.com/">TinyMCE</a></strong> (l&#8217;editor HTML utilizzato anche da WordPress) nel post di <a title="Breve confronto tra TinyMCE e FCKEditor" href="http://simone.cabrino.it/2007/05/08/confronto-editor-wysiwyg/"><strong>confronto tra editor WYSIWYG</strong></a> con un altro editor potente e funzionale (<a class="zem_slink" title="FCKeditor" rel="homepage" href="http://www.fckeditor.net/">FCKeditor</a>), ma tra i commenti di quel post, Pino mi ha fatto notare che guide in italiano all&#8217;installazione di questo comodo tool per lo sviluppo web non ce ne sono, e se ci sono sono ben nascoste. Ecco spiegato il perchè di questa semplice <strong>guida passo passo</strong> all&#8217;installazione di quello che, a mio parere, è l&#8217;editor <a class="zem_slink" title="WYSIWYG" rel="wikipedia" href="http://en.wikipedia.org/wiki/WYSIWYG">WYSIWYG</a> migliore: TinyMCE di <a title="Moxiecode" href="http://tinymce.moxiecode.com/" target="_blank">Moxiecode</a>.<br />
<span id="more-179"></span></p>
<h2>TinyMCE: cos&#8217;è?</h2>
<p>Giusto per dare una forma completa questo post, voglio enunciare, a chi non è nel settore, cos&#8217;è questo TinyMCE di cui in questo post cerco di farne una piccola guida all&#8217;installazione. Il primo paragrafo del sito del produttore Moxiecode, recita:</p>
<blockquote><p><em>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances. TinyMCE is very easy to integrate into other Content Management Systems.</em></p>
<p>TinyMCE è una piattaforma web per l&#8217;editing HTML con controlli WYSIWYG indipendente scritta in Javascript e rilasciata con licenza Open Source sotto LGPL da Moxiecode Systems AB. Ha l&#8217;abilità di convertire i campi  HTML TEXTAREA o altri elementi HTML in istanze di editor. TinyMCE è veramente semplice da integrare nei Content Management Systems (Sistemi di Gestione del Contenuto).</p></blockquote>
<p>In poche parole vi permette di ottenere quello che vedete qui in immagine:</p>
<p align="center"><img src="http://simone.cabrino.it/wp-content/uploads/2008/01/editortinymce.gif" alt="TinyMCE nella versione “semplice”" /></p>
<h2>Scarica TinyMCE (download)</h2>
<p>TinyMCE si può scaricare come archivio compresso direttamente dalla <a title="Download di TinyMCE" href="http://tinymce.moxiecode.com/download.php" target="_blank">sezione download del sito Moxiecode</a>. Le versioni scaricabili sono quasi sempre due distinte, una RC (Release Candidate) ed una versione stabile (Stable &#8211; oggi la versione 2.1.3). La differenza è che la versione in Release Candidate è quasi definitiva, in attesa delle ultime correzioni da parte del gruppo di sviluppatori (una sorta di fine del <a title="Testing, l'ultima fase di progettazione" href="http://simone.cabrino.it/2007/11/27/fasi_di_progettazione/">beta-testing</a>).</p>
<p>Le versioni TAR GZip e ZIP corrispondono a differenti sistemi di compressione: se non sapete quale dei due scaricare, scaricate la vesione ZIP.</p>
<p>Oltre al download del pacchetto dell&#8217;applicativo vi sono anche i pacchetti di compressione GZip per rendere più veloce lo scaricamento e la conseguente apertura dell&#8217;editor HTML. Questo pacchetto di compressione in molti casi, se presente, va disabilitato perchè genera un errore tipo &#8220;<a title="Problema con TinyMCE" href="http://simone.cabrino.it/2007/12/16/realtinymce-not-defined/">realTinyMCE is not defined</a>&#8220;.</p>
<h2>Aggiungere TinyMCE ad un sito (installazione)</h2>
<p>L&#8217;integrazione di TinyMCE in un sito web è, come detto da Moxiecode, decisamente semplice. Dopo aver scaricato l&#8217;archivio contentente la piattaforma e la sua documentazione, estraete solamente la cartella &#8220;tiny_mce&#8221; contenuta in &#8220;tinymce/jscripts/&#8221; e salvatela nella root (cartella di base) del vostro sito.</p>
<p>A questo punto inserite questa stringa nell&#8217;instestazione delle pagine prima del tag &lt;/head&gt;:</p>
<blockquote>
<pre><code class="html">...
&lt;script src="tiny_mce/tiny_mce.js" language="javascript" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script language="javascript" type="text/javascript"&gt;
tinyMCE.init({
 mode : "textareas"
});
&lt;/script&gt;
</code></pre>
</blockquote>
<p>L&#8217;integrazione, con l&#8217;aggiunta di queste semplici righe di codice, è già finita: passiamo ora alle personalizzazioni del tool.</p>
<h2>Configurazione di TinyMCE</h2>
<p>Lo spaccato di codice inserito nella sezione di installazione va ad inizializzare l&#8217;editor WYSIWYG su tutti i campi &lt;textarea&gt; presenti nella pagina (<code class="html">mode : "textareas"</code>): altre opzioni per il parametro <em>mode</em> sono<em> specific_textareas</em> che converte solo le textarea con un trigger impostato su <em>true</em>, <em>exact</em> che converte solo una determinata textarea o div e <em>none</em> che non converte nulla (utile se si imposta un pulsante per l&#8217;attivazione dello script).</p>
<p>Dopo la &#8220;modalità di integrazione&#8221;, molto importante è la gestione delle toolbar con i pulsanti, anch&#8217;esse molto semplici da gestire. E&#8217; infatti questa la sezione necessaria per <strong>personalizzare tinyMCE</strong>.</p>
<p>Esistono due differenti profili (<em>themes</em> &#8211; temi) per la configurazione dei pulsanti: <em>simple</em> e <em>advanced</em>. La versione semplice non prevede modifiche ai pulsanti e integra di base i pulsanti più comuni e importanti quali grassetto (<strong>bold</strong>), corsivo (<em>italic</em>) e sottolineato (<span style="text-decoration: underline;">underline</span>) insieme agli elenchi puntati/numerati e la gestione dei links.</p>
<p>La versione advanced, invece, permette una configurazione molto più ampia. Consiglio, per comodità, di utilizzarla e impostare manualmente solo i &#8220;pulsanti&#8221; interessati attraverso questo script di configurazione (non mettendo nulla non viene visualizzata l&#8217;intera riga di pulsanti, vedi <em>theme_advanced_buttons3</em>):</p>
<pre><code class="html">tinyMCE.init({
  ...
  theme : "advanced",theme_advanced_buttons1 : "inserttime,preview,zoom,separator,forecolor",
  theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator",
  theme_advanced_buttons3 : ""
});</code></pre>
<p>Vi è poi la possibilità di gestire anche i così detti plug-in in grado di rendere completamente personalizzato l&#8217;editor WYSIWYG (TinyMCE ne ha davvero molti) ma, la mia piccola guida diventerebbe un libro. Se avete dubbi o perplessità non esistate a chiedere informazioni, sono qui per questo! <img src='http://simone.cabrino.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/pixy.gif?x-id=a9acbc96-8d95-4caa-bb5a-94bffd66b23b" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/tinymce-guida/feed/</wfw:commentRss>
		<slash:comments>144</slash:comments>
		</item>
		<item>
		<title>URL Rewriting in ASP!</title>
		<link>http://simone.cabrino.it/blog/url-rewriting-ottimo-anche-per-lasp/</link>
		<comments>http://simone.cabrino.it/blog/url-rewriting-ottimo-anche-per-lasp/#comments</comments>
		<pubDate>Fri, 18 May 2007 09:19:34 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[Rewrite engine]]></category>
		<category><![CDATA[URL Rewrite]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/2007/05/18/url-rewriting-ottimo-anche-per-lasp/</guid>
		<description><![CDATA[Utilizzare l'URL Rewrite nelle pagine in ASP per avere link gradevoli per l'utente, ma soprattutto per i motori di ricerca.]]></description>
			<content:encoded><![CDATA[<p>Ce l&#8217;ho fatta! Sono riuscito ad applicare la <strong>riscrittura degli <a class="zem_slink" title="Uniform Resource Locator" rel="wikipedia" href="http://en.wikipedia.org/wiki/Uniform_Resource_Locator">URL</a></strong> (URL Rewrite) ad un sito scritto in <strong><a class="zem_slink" title="Active Server Pages" rel="wikipedia" href="http://en.wikipedia.org/wiki/Active_Server_Pages">ASP</a> Classic</strong>, su server con windows 2000 e IIS 5.0, usando la componente <a href="http://www.isapirewrite.com" target="_blank">ISAPI Rewrite</a>.</p>
<p>Premetto che ho preso in considerazione la <strong>versione Lite </strong>(che tra l&#8217;altro è anche completamente gratuita!!) che permette solamente di configurare un unico sito per server, ma offre tutte le funzionalità di riscrittura degli URL. Dopo aver installato la componente, potrete vedere nella sua directory solamente 3 file (httpd.ini, ISAPI_Rewrite.dll e RxTest.exe): se avete utilizzato la versione autoinstallante, l&#8217;unica cosa che dovrete cominciare a fare è compilare il file httpd.ini esattamente come il file .httaccess in Server Apache: RewriteCond e RewriteRule sono molto simili, cambiano solo le lettere per dichiarare le opzioni di reindirizzamento di cui parlerò in seguito.</p>
<p><span id="more-28"></span></p>
<h2><strong>Preparativi per l&#8217;URL Rewrite<br />
</strong></h2>
<p>Innanzitutto è opportuno configurare il proprio sito web secondo una certa logica per non ritrovarsi a lavorare milioni di volte. Evitiamo dunque di scrivere direttamente i link all&#8217;interno delle pagine web (che, per carità, se utilizziamo un distema dinamico potrebbero essere anche poche) e utilizziamo invece una funzione che creeremo ad hoc (per motivi sempre di praticità, consiglio di crearla su un file esterno da importare attraverso la direttiva &lt;!&#8211;#import virtual=&#8221;nomefile.asp&#8221;&#8211;&gt;).</p>
<p>La funzione, che prende in ingresso 3 parametri, potrebbe essere così definita:</p>
<blockquote>
<pre><code class="vbscript">url_rewrite = false
function getURL(par1, par2, par3)
if( url_rewrite ) then
...scrivo URL in bella forma
else
...scrivo URL normale, con QueryString
end if
getURL = URL
end function</code></pre>
</blockquote>
<p>Una funzione così strutturata mi permetterà di avere due diversi modi di riscrittura, quello normale (con parametri passati per GET nella QueryString insomma) e quella da riscrivere tramite l&#8217;ausilio della nostra componente. E tutto sarà semplicemente fattibile modificando la variabile <code>url_rewrite</code>: false per il sistema classico e true per il sistema riscritto e più &#8220;bello&#8221;!!!</p>
<h2><strong>Configurare l&#8217;URL Rewrite nel file httpd.ini</strong></h2>
<p>Dobbiamo innanzitutto capire come vogliamo che i nostri URL appaiano agli utenti (e di conseguenza anche ad i motori di ricerca). Il consiglio che viene sempre dato è quello di utilizzare, nell&#8217;URI anche il titolo della pagina che si andrà a personalizzare, così che, anche guardando direttamente l&#8217;URL si possa capire cosa contiene. Per andare a &#8220;scrivere&#8221; i link come qui sotto dovete utilizzare la funzione getURL() creata precedentemente, nel ramo dell&#8217;IF positivo (primo blocco).</p>
<p>Consiglio link che abbiano più o meno questa forma:</p>
<p>http://www.miosito.ext/par1/titolo-del-post.html</p>
<p>http://www.miosito.ext/par1/titolo-con-parametro-1/par2/titolo-dell-altro-post.html</p>
<p>http://www.miosito.ext/p/par3/titolo-di-un-altro-articolo.html</p>
<p>Supponendo che par1, par2 e par3 siano numeri interi indicanti gli ID dei contenuti del database, possibili regole per reindirizzare questi URL saranno:<br />
<code>RewriteRule /(\d+)/([^/\.]+).html$ /index.asp?par1=$1 [L]<br />
RewriteRule /(\d+)/([^/\.]+)/(\d+)/([^/\.]+).html$ /index.asp?par1=$1&amp;par2=$3 [L]<br />
RewriteRule /p/(\d+)/([^/\.]+).html$ /pagina.asp?par3=$1 [L]</code></p>
<p>Già fatto?! SI!!!</p>
<h2><strong>Google e gli altri motori di ricerca cosa pensano della riscrittura degli URL?</strong></h2>
<p><strong> </strong>NON sono un SEO, ma ragionate semplicemente a quello che state per leggere: è più facile, per voi, ricordare un link nella forma <a href="http://simone.cabrino.it/2007/05/14/migliorare-la-navigazione-dei-siti-a-frame/">http://simone.cabrino.it/2007/05/14/migliorare-la-navigazione-dei-siti-a-frame/</a> oppure qualcosa nella forma http://simone.cabrino.it/article.php?id=##&amp;browser=Mozilla&amp;style=articolosingolo?!!? Ok, forse ho esagerato ed esasperato un po&#8217; il concetto, ma penso di aver reso sufficientemente bene l&#8217;idea.</p>
<p>Molti <strong>SEO </strong>consigliano e spingono per l&#8217;URL Rewriting dandone le giuste argomentazioni:</p>
<ul>
<li><a title="URL Rewriting: serve ancora!" href="http://www.simonecarletti.com/blog/2006/11/url_rewriting_serve_ancora.php" target="_blank">URL Rewriting: serve ancora!</a> di Simone Carletti;</li>
<li><a title="URL Rewriting: non serve più?" href="http://tagliaerbe.blogspot.com/2006/11/url-rewriting-non-serve-pi.html">URL Rewriting: non serve più?</a> di Tagliaerbe;</li>
</ul>
<h2><strong>Conclusioni</strong></h2>
<p>Come avete avuto modo di vedere da questa pagina, creare un <strong>buon URL Rewriting </strong>non è una cosa impossibile, anzi è abbbastanza semplice una volta capite le basi delle Regular Expression (RegEx). Semplici da creare, ottimo per i motori di ricerca e bello fa vedere e da ricordare.</p>
<p>Perchè allora non prendere in considerazione di farlo!?</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/pixy.gif?x-id=a5235884-3a29-4d64-9354-fc4599c679a6" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/url-rewriting-ottimo-anche-per-lasp/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Windows: inviare automaticamente email</title>
		<link>http://simone.cabrino.it/blog/inviare-mail-automaticamente/</link>
		<comments>http://simone.cabrino.it/blog/inviare-mail-automaticamente/#comments</comments>
		<pubDate>Thu, 05 Apr 2007 11:56:14 +0000</pubDate>
		<dc:creator>Simone</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[email]]></category>

		<guid isPermaLink="false">http://simone.cabrino.it/2007/04/05/inviare-mail-automaticamente/</guid>
		<description><![CDATA["Per lavoro devo inviare una mail, tutti i mesi, intorno alla stessa ora, con lo stesso testo. Non c'è modo di inviare la email automaticamente? Tanto so che ce la puoi fare...". Ecco la soluzione.]]></description>
			<content:encoded><![CDATA[<div class="zemanta-img" style="margin: 1em; float: right; display: block;"><img style="border: medium none; display: block;" src="http://cache.daylife.com/imageserve/0fXk1ipeu0al0/150x98.jpg" alt="SAN FRANCISCO - JANUARY 29: (FILES) Buttons wi..." /><span class="zemanta-img-attribution"><a href="http://www.daylife.com"></a></span></div>
<p>Un amico mi ha trovato camminando in paese (<a title="Boffalora sopra Ticino - Google Maps" href="http://maps.google.it/maps?f=q&amp;hl=it&amp;q=Boffalora+sopra+Ticino&amp;layer=&amp;ie=UTF8&amp;om=1&amp;z=12&amp;ll=45.510437,8.886566&amp;spn=0.102012,0.233459&amp;iwloc=addr" target="_blank">boffalora sopra ticino</a> &#8211; il mio grande paese) e mi ha fermato dicendomi:</p>
<blockquote><p>&#8220;Per lavoro devo inviare una mail, tutti i mesi, sempre lo stesso giorno, possibilmente sempre intorno alla stessa ora, con lo stesso testo. Non c&#8217;è modo di inviare la email automaticamente? Tanto so che ce la puoi fare&#8230;&#8221;</p></blockquote>
<p><span id="more-4"></span><br />
Le sfide mi piacciono e, aperto il mio caro amato firefox, mi sono documentato.</p>
<h2>Come inviare e-mail con <a class="zem_slink" title="VBScript" rel="wikipedia" href="http://en.wikipedia.org/wiki/VBScript">VBS</a> su Windows</h2>
<p>Avevo già idea di utilizzare uno <strong>script</strong>, qualcosa tipo <a class="zem_slink" title="Windows Script Host" rel="wikipedia" href="http://en.wikipedia.org/wiki/Windows_Script_Host">WSH</a> (windows scripting host), o un semplice VBS (visual basic script) e di andarlo ad <strong>eseguire automaticamente </strong>grazie alla pianificazione operazioni di windows stesso. Bene, idee chiare, unico problema: se il PC su cui girava questo script fosse stato un server web o avesse almeno avuto installato IIS in una qualsiasi delle sue versioni, tutto sarebbe stato più semplice, mentre su un PC &#8220;normale&#8221;&#8230;</p>
<p>Dopo vari tentativi e codici trovati, ho trovato un VBS che fa al caso mio <em>(per utilizzarlo dovete semplicemente copiare il codice seguente, aprire blocco note, incollare e salvare tutto come &#8220;invio_mail.VBS&#8221; e per eseguirlo, doppio click sul file creato)</em>.</p>
<p>Questo VBS utilizza l&#8217;<strong>oggetto CDOSYS</strong>, un componente integrato nei sistemi operativi <a class="zem_slink" title="Microsoft" rel="homepage" href="http://www.microsoft.com/worldwide/">Microsoft</a> a partire dalla versione Windows 2000, spesso utilizzato per la creazione di newsletter.</p>
<blockquote><p><code class="vbscript">Set objMessage = CreateObject("CDO.Message")<br />
objMessage.Subject = "oggetto della email da inviare"<br />
' gli indirizzi possono essere inseriti semplici oppure con "nome mittente"<br />
' versione "normale": destinatario@dominio.xxx<br />
' versione "avanzata": ""Nome Cognome"" &lt; destinatatio@dominio.xxx&gt;<br />
' da notare la ripetizione dei doppi apici (")<br />
objMessage.From = "mittente@dominio.xxx"<br />
objMessage.To = "destinatario@dominio.xxx"<br />
objMessage.Cc = "destinatario@dominio.xxx"<br />
objMessage.Bcc = "destinatario@dominio.xxx"<br />
objMessage.TextBody = "testo della mail da inviare, solo testo"<br />
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2<br />
' server posta in uscita (SMTP)<br />
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.tuodominio.xxx"<br />
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25<br />
objMessage.Configuration.Fields.Update<br />
objMessage.Send<br />
msgbox "il messaggio è stato inviato!"</code></p></blockquote>
<p>A questo punto, tramite le operazioni pianificate di windows (start &gt; pannello di controllo &gt; <em>(in visualizzazione classica)</em> operazioni pianificate) ne aggiungete una che configurate come preferite (ora esecuzione e numero di esecuzioni) sul file che avete creato.</p>
<p>Avete <strong>finito</strong>, divertitevi!!!</p>
<p><em>(questo script è stato creato a scopo serio, quindi non voglio alcuna responsabilità nel caso di illeciti utilizzi &#8211; clicca </em><strong><a title="scarica inviare mail automaticamente" href="http://simone.cabrino.it/wp-content/uploads/2007/04/invio_mail.zip">qui</a></strong><em> per scaricare il file pronto)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://simone.cabrino.it/blog/inviare-mail-automaticamente/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

