<?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>Blogrammazione &#187; PHP</title>
	<atom:link href="http://www.marcolecce.com/blog/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marcolecce.com/blog</link>
	<description>Programmazione, PHP, JAVA, ASP, Linux, Windows, Ajax, Web 2.0, Web 3.0</description>
	<lastBuildDate>Thu, 22 Jul 2010 13:06:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Zend Framework &#8211; Disabilitare il layout e la view</title>
		<link>http://www.marcolecce.com/blog/2010/07/22/zend-framework-disabilitare-il-layout-e-la-view/</link>
		<comments>http://www.marcolecce.com/blog/2010/07/22/zend-framework-disabilitare-il-layout-e-la-view/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 13:03:19 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Mysq]]></category>
		<category><![CDATA[Sviluppo Web]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=425</guid>
		<description><![CDATA[Lavorando con Zend Framework in diverse occasioni avremo la necessità di disabilitare il layout e la renderizzazione della vista. Per effettuare l&#8217;upload di file ad esempio potrei aver bisogno di una action da richiamare in un determinato controller, senza però per forza applicare a questa una vista. L&#8217;implementazione del pattern MVC (Model-View-Controller) di Zend Framework, [...]]]></description>
			<content:encoded><![CDATA[<p>Lavorando con<a title="Zend Framework" href="http://framework.zend.com/" target="_blank"> Zend Framework</a> in diverse occasioni avremo la necessità di disabilitare il layout e la renderizzazione della vista. Per effettuare l&#8217;upload di file ad esempio potrei aver bisogno di una action da richiamare in un determinato controller, senza però per forza applicare a questa una vista.</p>
<p>L&#8217;implementazione del pattern <a title="Model View Controller - MVC" href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" target="_blank">MVC</a> (Model-View-Controller) di <a title="Zend Framework" href="http://framework.zend.com/" target="_blank">Zend  Framework</a>, in accordo con le regole di naming implementate dal framework, richiedono uno schema di questo tipo:</p>
<p>==&gt; <strong>richiesta al controller</strong> (www.dominio.com/news/list)</p>
<p>==&gt; <strong>attivazione della action corrispondente</strong> (chiamata al metodo listAction() del controller &#8220;news&#8221;)</p>
<p>==&gt; <strong>gestione dei dati nel model</strong> (vengono recuperati dal databse i dati richiesti e passati al controller)</p>
<p>==&gt; <strong>ritorno del responso al controller</strong> (il controller recupera i dati restituiti dal model e li assegna alla vista)</p>
<p>==&gt; <strong>visualizzazione dei dati nella vista corrispondente</strong> (la vista visualizza i dati risultati dalla richiesta ricevuta al primo passaggio )</p>
<p>Per quanto riguarda il naming, invece, il framework richiede che ci sia una corrispondenza tra la richiesta (URL) e gli elementi <a title="Model View Controller - MVC" href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" target="_blank">MVC</a> :</p>
<p>- URL = www.dominio.com/<span style="color: #0000ff;">news</span>/<span style="color: #993366;">list</span></p>
<p>- nome del controller (<span style="color: #0000ff;">News</span>Controller)</p>
<p>- nome della action (<span style="color: #993366;">list</span>Action)</p>
<p>- file della vista che contiene il codice <a title="HTML" href="http://en.wikipedia.org/wiki/HTML" target="_blank">HTML</a> per la visualizzazione del responso (<span style="color: #993366;">list</span>.phtml)</p>
<p>I colori ci aiutano a chiarire le corrispondente. Ci sono dei casi però in cui tutto il meccanismo che implementa l&#8217;<a title="Model View Controller - MVC" href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" target="_blank">MVC</a> non è necessario. In alcuni casi, infatti, il file della vista (nel nostro caso list.phtml) non è necessario.</p>
<p>Pensiamo ad esempio all&#8217;azione di caricamento (upload) di un file: in questo caso ci interessa richiedere al controller che si occupa della gestione dei file di attivare la action adibita alla gestione del caricamento, ma senza richiamare un file di visualizzazione, restituendo invece un semplice messaggio per fornire il feedback sul successo o meno dell&#8217;operazione.</p>
<p>Per ottenere la disabilitazione del layout e il richiamo automatico della vista possiamo servici dell&#8217;helper messo a disposizione da <a title="Zend Framework" href="http://framework.zend.com/" target="_blank">Zend  Framework</a> stesso:<br />
<code><br />
$this-&gt;_helper-&gt;layout-&gt;disableLayout();<br />
$this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender(true);</code></p>
<p>Inserendo queste righe di codice all&#8217;interno della action del controller comunichiamo al framework di disabilitare il layout e dunque la visualizzazione del risultato nel corrispondente file .phtml . In questo modo <a title="Zend Framework" href="http://framework.zend.com/" target="_blank">Zend  Framework</a> non andrà a cercare il file della vista, e noi siamo liberi di utilizzare il risultato della richiesta nel modo più adeguato alle necessità del nostro applicativo.</p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_08b55449_url = 'http://www.marcolecce.com/blog/2010/07/22/zend-framework-disabilitare-il-layout-e-la-view/';
sociallist_08b55449_title = 'Zend Framework - Disabilitare il layout e la view';
sociallist_08b55449_text = '';
sociallist_08b55449_tags = 'Mysq,PHP,Sviluppo Web,Zend Framework';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=08b55449"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2010%2F07%2F22%2Fzend-framework-disabilitare-il-layout-e-la-view%2F&title=Zend+Framework+-+Disabilitare+il+layout+e+la+view" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2010/07/22/zend-framework-disabilitare-il-layout-e-la-view/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Database &#8211; Come gestire le transazioni in Zend Framework</title>
		<link>http://www.marcolecce.com/blog/2010/06/11/come-gestire-le-transazioni-in-zend-framework/</link>
		<comments>http://www.marcolecce.com/blog/2010/06/11/come-gestire-le-transazioni-in-zend-framework/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 07:26:41 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=280</guid>
		<description><![CDATA[Zend Framework è uno tra i principali framework (se non il principale) per lo sviluppo di applicazioni enterprise in PHP. E&#8217; uno strumento molto potente al servizio degli sviluppatori PHP: è estremamente flessibile, estendibile, facile da usare e decisamente manutenibile. Questo è il primo di una serie di articoli che sto preparando per presentare quelle [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a title="Zend Framework" href="http://zendframework.com" target="_blank">Zend Framework</a> è uno tra i principali framework (se non il principale) per lo sviluppo di applicazioni enterprise in PHP. E&#8217; uno strumento molto potente al servizio degli sviluppatori PHP: è estremamente flessibile, estendibile, facile da usare e decisamente manutenibile. Questo è il primo di una serie di articoli che sto preparando per presentare quelle che sono le caratteristiche più interessanti di questo prodotto.</p>
<p style="text-align: justify;">L&#8217;argomento che trattiamo in questo articolo è la gestione delle <a title="Transazione" href="http://it.wikipedia.org/wiki/Transazione_%28database%29" target="_blank">transazioni</a> con <a title="Zend Framework" href="http://zendframework.com/" target="_blank">Zend  Framework</a>. Una <a title="Transazione" href="http://it.wikipedia.org/wiki/Transazione_%28database%29" target="_blank">transazione</a> è una sequenza di operazioni che deve rispettare le proprietà <a title="ACID" href="http://it.wikipedia.org/wiki/ACID" target="_blank">ACID</a> (<strong> Atomicity</strong>, <strong>Consistency</strong>, <strong>Isolation</strong>, e <strong>Durability</strong> &#8211; <strong>A</strong>tomicità, <strong>C</strong>oerenza, <strong>I</strong>solamento e <strong>D</strong>urabilità). Una <a title="Transazione" href="http://it.wikipedia.org/wiki/Transazione_%28database%29" target="_blank">transazione</a> può terminare con successo o con un insuccesso: nel primo caso il risultato sarà permamente, mentre nel caso di insuccesso di deve tornare alla situazione precedente l&#8217;inizio della <a title="Transazione" href="http://it.wikipedia.org/wiki/Transazione_%28database%29" target="_blank">transazione</a>, come se nulla fosse successo.</p>
<p style="text-align: justify;">Una <a title="Transazione" href="http://it.wikipedia.org/wiki/Transazione_%28database%29" target="_blank">transazione</a> inizia con l&#8217;istruzione che dichiara appunto l&#8217; &#8220;inizio della <a title="Transazione" href="http://it.wikipedia.org/wiki/Transazione_%28database%29" target="_blank">transazione</a>&#8221; ( il punto (1) nel codice). Le operazioni che intendiamo eseguire tutte insieme sul database vanno inseriti <strong>dopo</strong> questa istruzione (1), all&#8217;interno di un blocco &#8220;try{} catch {}&#8221; che permette di verificare che tutto abbia funzionanto e pertanto che non siano state lanciate eccezioni.</p>
<p style="text-align: justify;">Nel nostro esempio vogliamo eseguire due operazioni di inserimento sul database (2), utilizzando i modelli &#8220;$model&#8221; e &#8220;$model2&#8243; (<a title="Zend Framework" href="http://zendframework.com/" target="_blank">Zend  Framework</a> si basa su una implementazione del pattern <a title="Design Pattern - Model View Controller" href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC</a>, Model-View-Controller). Vorremmo che queste operazioni di inserimento avvennissero una dopo l&#8217;altra, e che vengano annullate nel caso in cui una delle due &#8220;INSERT&#8221; non andasse a buon fine. I dati che vogliamo inserire li organizziamo in una struttura dati simile a quella nel punto (3) del codice (in sostanza un array associativo).</p>
<p style="text-align: justify;">Nei punti (4) e (5) dell&#8217;esempio effettuiamo gli inserimenti veri e propri. Se tutto funziona senza problemi, effettuiamo l&#8217;operazione di COMMIT (6) per confermare la correttezza della transazione e dunque la conseguente chiusura della stessa.</p>
<p style="text-align: justify;">Nel caso in cui invece  si siano verificati problemi, verrà lanciata una eccezione che sarà catturata dal blocco &#8220;catch&#8221;, nel quale, prima di riportare il messaggio dell&#8217;errore e lanciarlo alla classe padre (8), eseguiamo l&#8217;azione di ROLLBACK (7). Questa è l&#8217;istruzione che comunica alla <a href="http://it.wikipedia.org/wiki/Transazione_%28database%29" target="_blank">transazione</a> che ci sono stati problemi e che dunque deve essere annullata, senza apportare modifiche permanenti alla base di dati.</p>
<p style="text-align: justify;">
<pre>(1) $this-&gt;getAdapter()-&gt;beginTransaction();
try {

  // TODO ho aggiunto io l’autoincrement nelle tabelle articoli
  (2) $model   = new My_Model();
  $model2 = new My_Model2();
  (3) $data   = array("nome"=&gt;"Marco", "cognome"=&gt;"Lecce");
  $data2 = array("tipo"=&gt;"Utente", "ruolo"=&gt;"Editore");
  (4) $id = $model-&gt;insert($data);
  (5) $id2 = $model2-&gt;insert($data2);

  (6) $this-&gt;getAdapter()-&gt;commit();

} catch ( Zend_Exception $e ) {

  (7) $this-&gt;getAdapter()-&gt;rollBack();
  (8) throw new Exception( $e-&gt;getMessage() );

}
</pre>
<p style="text-align: justify;">Come abbiamo visto sono sufficienti queste poche righe di codice per gestire un importante concetto come quello delle <a title="Transazione" href="http://it.wikipedia.org/wiki/Transazione_%28database%29" target="_blank">transazioni</a>. Il codice rimane dunque pulito e molto leggibile: per ora è tutto, ci vediamo al prossimo articolo con <a title="Zend Framework" href="http://zendframework.com/" target="_blank">Zend  Framework</a>! <img src='http://www.marcolecce.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_12ea56dc_url = 'http://www.marcolecce.com/blog/2010/06/11/come-gestire-le-transazioni-in-zend-framework/';
sociallist_12ea56dc_title = 'Database - Come gestire le transazioni in Zend Framework';
sociallist_12ea56dc_text = '';
sociallist_12ea56dc_tags = 'MySql,open source,PHP,Zend Framework';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=12ea56dc"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2010%2F06%2F11%2Fcome-gestire-le-transazioni-in-zend-framework%2F&title=Database+-+Come+gestire+le+transazioni+in+Zend+Framework" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2010/06/11/come-gestire-le-transazioni-in-zend-framework/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP &#8211; Attivare il Code Assistant in Eclipse</title>
		<link>http://www.marcolecce.com/blog/2010/06/09/php-attivare-il-code-assistant-in-eclipse/</link>
		<comments>http://www.marcolecce.com/blog/2010/06/09/php-attivare-il-code-assistant-in-eclipse/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 17:53:32 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Sviluppo Web]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=256</guid>
		<description><![CDATA[Il Code Assistant non solo velocizza la scrittura del codice, ma permette anche di imparare molto più rapidamente il linguaggio o i framework che stiamo utilizzando nel nostro applicativo. Ecco come fare quando smette di funzionare!]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Quando scriviamo il nostro codice è davvero comodo avere un assistente che ti suggerisce ad esempio i metodi che possiamo richiamare su un oggetto o le classi che abbiamo a disposizione per raggiungere il nostro obiettivo. Sono strumenti che quando inizi ad usare non puoi più farne a meno.</p>
<p style="text-align: justify;">Il &#8220;Code Assistant&#8221; di <a title="Eclipse " href="http://www.eclipse.org/" target="_blank">Eclipse</a> è uno strumento molto potente, che non solo suggerisce le librerie di default del linguaggio di programmazione con il quale stiamo lavorando (<a href="http://it.wikipedia.org/wiki/Java_%28linguaggio%29" target="_blank">Java</a>, <a title="PHP" href="http://it.wikipedia.org/wiki/PHP" target="_blank">PHP</a>, ecc.) ma permette anche di personalizzare le librerie a disposizione, aggiungendone ad esempio di terze parti.</p>
<p style="text-align: justify;">Questo non solo velocizza la scrittura del codice, ma permette anche di imparare molto più rapidamente il linguaggio o i framework che stiamo utilizzando nel nostro applicativo. Quando però lavoriamo in team su un progetto, è molto probabile che si utilizzino i plugin come quello di <a href="http://subversion.tigris.org/" target="_blank">subversion</a> per gestire il lavoro. Il problema è che quando lavoriamo in questo ambiente, di default, il progetto perde l&#8217;indicazione sulla sua stessa natura&#8230;.in pratica <a title="Eclipse " href="http://www.eclipse.org/" target="_blank">Eclipse</a> non sa più se stiamo lavorando in <a title="PHP Sito" href="http://php.net/index.php" target="_blank">PHP</a> o <a href="http://www.java.com" target="_blank">Java</a>, sa solo che stiamo lavorando con subversion, perdendo in questo modo il prezioso aiuto che ci fornisce il Code Assistant. Ma per risolvere questo problema ci vogliono davvero 5 minuti&#8230;</p>
<p style="text-align: justify;">Dobbiamo concentrare la nostra attenzione sui file &#8220;.buildpath&#8221; e &#8220;. project&#8221; del nostro progetto <a title="Eclipse " href="http://www.eclipse.org/" target="_blank">Eclipse</a>: se li editiamo noteremo che non vi sono indicazioni circa la natura del progetto (cioè se siamo in ambiente <a href="http://www.java.com/" target="_blank">Java</a>, <a title="PHP Sito" href="http://php.net/index.php" target="_blank">PHP</a> o <a href="it.wikipedia.org/wiki/JavaScript" target="_blank">Javascript</a>). Tutto ciò che dobbiamo fare è inserire nei rispettivi file le seguenti direttive in neretto:</p>
<p style="text-align: justify;">.PROJECT</p>
<p style="text-align: justify;">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;projectDescription&gt;<br />
&lt;name&gt;prova&lt;/name&gt;<br />
&lt;comment&gt;&lt;/comment&gt;<br />
&lt;projects&gt;<br />
&lt;/projects&gt;<br />
&lt;buildSpec&gt;<br />
&lt;buildCommand&gt;<br />
&lt;name&gt;org.eclipse.wst.validation.validationbuilder&lt;/name&gt;<br />
&lt;arguments&gt;<br />
&lt;/arguments&gt;<br />
&lt;/buildCommand&gt;<br />
&lt;buildCommand&gt;<br />
&lt;name&gt;org.eclipse.dltk.core.scriptbuilder&lt;/name&gt;<br />
&lt;arguments&gt;<br />
&lt;/arguments&gt;<br />
&lt;/buildCommand&gt;<br />
&lt;/buildSpec&gt;<br />
&lt;natures&gt;<br />
<strong>&lt;nature&gt;org.eclipse.php.core.PHPNature&lt;/nature&gt;</strong><br />
&lt;/natures&gt;<br />
&lt;/projectDescription&gt;</p>
<p style="text-align: justify;">.BUILDPATH</p>
<p style="text-align: justify;">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;buildpath&gt;<br />
<strong>&lt;buildpathentry kind=&#8221;con&#8221; path=&#8221;org.eclipse.php.core.LANGUAGE&#8221;/&gt;</strong><br />
&lt;buildpathentry external=&#8221;true&#8221; kind=&#8221;lib&#8221; path=&#8221;/myLibrary&#8221;/&gt;<br />
&lt;buildpathentry kind=&#8221;src&#8221; path=&#8221;"/&gt;<br />
&lt;/buildpath&gt;</p>
<p style="text-align: justify;">A questo punto, una volta riavviata l&#8217;<a href="http://en.wikipedia.org/wiki/Integrated_development_environment" target="_blank">IDE</a>, il nostro progetto sarà etichettato in base alla sua natura, e dunque si riattiveranno tutte le funzionalità e tutti gli strumenti a disposizione per lo sviluppo con l&#8217;ambiente che abbiamo impostato (e il Code Assistant non fa eccezione! <img src='http://www.marcolecce.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<div id="wrtranslator-translate" style="left: 217px; top: 110px; text-align: justify;"><a href="http://www.wordreference.com/enit/Java#Otbl" target="_blank">Translate</a></div>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_5e80f2d2_url = 'http://www.marcolecce.com/blog/2010/06/09/php-attivare-il-code-assistant-in-eclipse/';
sociallist_5e80f2d2_title = 'PHP - Attivare il Code Assistant in Eclipse';
sociallist_5e80f2d2_text = '';
sociallist_5e80f2d2_tags = 'Eclipse,Java,Javascript,PHP,Sviluppo Web';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=5e80f2d2"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2010%2F06%2F09%2Fphp-attivare-il-code-assistant-in-eclipse%2F&title=PHP+-+Attivare+il+Code+Assistant+in+Eclipse" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2010/06/09/php-attivare-il-code-assistant-in-eclipse/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ExtJs, inviare un array nelle chiamate Ajax</title>
		<link>http://www.marcolecce.com/blog/2010/05/19/extjs-inviare-un-array-in-ajax/</link>
		<comments>http://www.marcolecce.com/blog/2010/05/19/extjs-inviare-un-array-in-ajax/#comments</comments>
		<pubDate>Wed, 19 May 2010 15:48:37 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ext Js]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=259</guid>
		<description><![CDATA[Le chiamate asincrone sono ormai un fondamento delle interfacce web, e praticamente tutti i principali framework javascript in circolazione forniscono degli strumenti embedded che semplificano lo sviluppo e automatizzano la maggior parte delle impostazioni. ExtJs è un framework javascript che è riuscito ad ottenere forti consensi nell’ambito dello sviluppo di interfacce web: questo grazie soprattutto [...]]]></description>
			<content:encoded><![CDATA[<p>Le chiamate asincrone sono ormai un fondamento delle interfacce web, e praticamente tutti i principali framework javascript in circolazione forniscono degli strumenti embedded che semplificano lo sviluppo e automatizzano la maggior parte delle impostazioni.</p>
<p><a title="ExtJS" href="http://www.extjs.com/">ExtJs</a> è un framework javascript che è riuscito ad ottenere forti consensi nell’ambito dello sviluppo di interfacce web: questo grazie soprattutto alla potenza del prodotto e alla comunità decisamente attiva che fornisce un importante supporto agli sviluppatori.</p>
<p>Il meccanismo implementato da questo  framework per eseguire chiamate<a title="Ajax" href="http://it.wikipedia.org/wiki/AJAX" target="_blank"> Ajax</a> è estremamente semplice ed intuitivo, meccanismo che tra le altre cose ricorda molto da vicino quello adottato da altri framework javascript come <a title="JQuery" href="http://jquery.com/" target="_blank">JQuery</a>. Vediamone un esempio:</p>
<p style="text-align: left;">Ext.Ajax.request({<br />
[…]<br />
url: &#8216;pagina.php&#8217;,<br />
params: {id: ‘3’},<br />
success: function(resp) {<br />
[…]<br />
} ,<br />
failure: function(a, b) {<br />
[…]<br />
}<br />
});</p>
<p>Con queste poche righe di codice, <a title="ExtJS" href="http://www.extjs.com/">ExtJs</a> ci permette di eseguire una chiamata <a title="Ajax" href="http://it.wikipedia.org/wiki/AJAX">Ajax</a> verso l’indirizzo specificato nel parametro di configurazione “url” (pagina.php) e di gestire sia il caso di risposta positiva sia il caso di insuccesso.<br />
“params” invece permette di specificare i parametri che verranno inviati al file “pagina.php” durante la chiamata <a title="Ajax" href="http://it.wikipedia.org/wiki/AJAX">Ajax</a>: nel nostro esempio inviamo un parametro con identificativo “id” che contiene il valore 3.</p>
<p>E se volessimo inviare un array? Nessun problema, ci viene in aiuto <a title="JSON" href="http://it.wikipedia.org/wiki/JSON">JSON</a>.</p>
<p><a title="ExtJS" href="http://www.extjs.com/">ExtJs</a> è chiaramente progettato per fornire pieno supporto a <a title="JSON" href="http://it.wikipedia.org/wiki/JSON">JSON</a>, dunque possiamo sfruttare questo protocollo. Codifichiamo quindi il nostro array utilizzando le funzioni che ExtJs ci mette a disposizione, come ad esempio la seguente:</p>
<p>Ext.encode(array)</p>
<p>Supponendo quindi di voler inviare un array di valori con una chiamata <a title="Ajax" href="http://it.wikipedia.org/wiki/AJAX">Ajax</a> il nostro codice potrebbe diventare:<br />
Ext.Ajax.request({<br />
[…]<br />
url: &#8216;pagina.php&#8217;,<br />
<strong> params: {data: Ext.encode(arrayData)},</strong><br />
success: function(resp) {<br />
[…]<br />
} ,<br />
failure: function(a, b) {<br />
[…]<br />
}<br />
});</p>
<p>Lato server, sarà sufficiente eseguire il decoding del parametro “data”, che giunge al server sottoforma di stringa <a title="JSON" href="http://it.wikipedia.org/wiki/JSON">JSON</a>:</p>
<p>$myArray = json_decode($_POST[‘data’]);</p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_eee80b9c_url = 'http://www.marcolecce.com/blog/2010/05/19/extjs-inviare-un-array-in-ajax/';
sociallist_eee80b9c_title = 'ExtJs, inviare un array nelle chiamate Ajax';
sociallist_eee80b9c_text = '';
sociallist_eee80b9c_tags = 'AJAX,Ext Js,Javascript,PHP';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=eee80b9c"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2010%2F05%2F19%2Fextjs-inviare-un-array-in-ajax%2F&title=ExtJs%2C+inviare+un+array+nelle+chiamate+Ajax" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2010/05/19/extjs-inviare-un-array-in-ajax/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ECLIPSE &#8211; Configurare il manuale di PHP in Eclipse</title>
		<link>http://www.marcolecce.com/blog/2009/09/06/eclipse-configurare-il-manuale-di-php-in-eclipse/</link>
		<comments>http://www.marcolecce.com/blog/2009/09/06/eclipse-configurare-il-manuale-di-php-in-eclipse/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 14:34:18 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=185</guid>
		<description><![CDATA[Eclipse è un IDE meravigioso: con un&#8217;architettura modulare ( a plugin ), con gli strumenti di debug e con una stabilità che suscita invidia&#8230;.il tutto open source!! Vi sono varie versione pre-configurate di Eclipse, in base alle esigenze dello sviluppatore: c&#8217;è la versione per gli sviluppatori J2EE, per applicazioni Java Mobile, per sviluppatori PHP, ecc. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.eclipse.org/" target="_blank">Eclipse</a> è un IDE meravigioso: con un&#8217;architettura modulare ( a plugin ), con gli strumenti di debug e con una stabilità che suscita invidia&#8230;.il tutto open source!!</p>
<p>Vi sono varie versione pre-configurate di <a href="http://www.eclipse.org/" target="_blank">Eclipse</a>, in base alle esigenze dello sviluppatore: c&#8217;è la versione per gli sviluppatori J2EE, per applicazioni Java Mobile, per sviluppatori PHP, ecc.</p>
<p>Ma è anche possibile scaricarsi la versione base e scegliere &#8220;a mano&#8221; la configurazione che si preferisce, installando i plugin che necessitano allo sviluppatore.</p>
<p>Anche se <a href="http://www.eclipse.org/" target="_blank">Eclipse</a> nasce principalmente per gli sviluppatori Java, negli ultimi anni sono state perfezionate versioni per i principali linguaggi web-side, come ad esempio PHP e Ruby. In questo articolo andremo a vedere come integrare il manuale PHP all&#8217;interno dell&#8217;IDE, in modo da avere a portata di click le principali librererie che questo linguaggio di programmazione mette a disposizione.</p>
<p>Di default, il PDT (<a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/R/eclipse-php-galileo-linux-gtk.tar.gz" target="_blank">PHP Development Tools </a>) di <a href="http://www.eclipse.org/" target="_blank">Eclipse</a> segue il manuale online del famoso sito <a href="www.php.net" target="_blank">www.php.net</a>: ovviamente questa è la scelta più comoda, visto che è sicuramente la documentazione più aggiornata di questo linguaggio. Il problema è che questa soluzione vale per un pc sempre connesso a Internet. Se abbiamo la necessità di lavorare sempre con la documentazione, anche quando non siamo connessi (e sarebbe un bene che tutti gli sviluppatori lo facessero), allora dobbiamo seguire questi semplici passi:</p>
<p>1) dal sito di riferimento <a href="www.php.net" target="_blank">www.php.net</a> scarichiamo la versione html del manuale, situata al seguente indirizzo www.php.net/download-docs.php<span id="main" style="visibility: visible;"><span id="search" style="visibility: visible;"><cite> </cite></span></span>(nel caso il download sia congestionato, si può scaricare la documentazione anche dal mirror italiano, al seguente <a href="http://it2.php.net/get/php_manual_en.tar.gz/from/a/mirror" target="_blank">indirizzo</a>)<span id="main" style="visibility: visible;"><span id="search" style="visibility: visible;"><cite><strong><br />
</strong></cite></span></span></p>
<p>2) Una volta scaricato e unzippato l&#8217;archivio, apriamo <a href="http://www.eclipse.org/" target="_blank">Eclipse</a> (con il PDT già installato), andiamo su:</p>
<p>Window &#8211;&gt; Preferences &#8211;&gt; PHP &#8212;&gt; PHP Manual</p>
<p>e creiamo un nuovo elemento cliccando sul tasto &#8220;New&#8221; e selezionando l&#8217;inserimento da cartella.</p>
<p>3) Ad inserimento effettuato, clicchiamo sul nuovo elemento e poi sul tasto &#8220;Default&#8221; se vogliamo che questa sia la versione di default del nostro manuale</p>
<p>A questo punto abbiamo finito: avremo a disposizione per il nostro sviluppo PHP il manuale e la documentazione vitale per ogni sviluppatore, sia che siamo connessi a Internet sia nel caso in cui ci troviamo a lavorare in assenza di connessione.</p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_1ec49172_url = 'http://www.marcolecce.com/blog/2009/09/06/eclipse-configurare-il-manuale-di-php-in-eclipse/';
sociallist_1ec49172_title = 'ECLIPSE - Configurare il manuale di PHP in Eclipse';
sociallist_1ec49172_text = '';
sociallist_1ec49172_tags = 'PHP,Programmazione';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=1ec49172"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2009%2F09%2F06%2Feclipse-configurare-il-manuale-di-php-in-eclipse%2F&title=ECLIPSE+-+Configurare+il+manuale+di+PHP+in+Eclipse" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2009/09/06/eclipse-configurare-il-manuale-di-php-in-eclipse/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySQL &#8211; Formattare efficientemente le date in formato datetime</title>
		<link>http://www.marcolecce.com/blog/2009/07/02/mysql-formattare-efficientemente-le-date-in-formato-datetime/</link>
		<comments>http://www.marcolecce.com/blog/2009/07/02/mysql-formattare-efficientemente-le-date-in-formato-datetime/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 12:45:45 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[MySql]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=164</guid>
		<description><![CDATA[I programmatori si trovano molto spesso a lavorare con le date: in applicativi di gestione del contenuto ad esempio, sono praticamente un elemento obbligatorio senza il quale molte operazioni basilari, come gli ordinamenti cronologici, non sarebbero possibili. Ecco perchè diventa molto importante saper gestire questo tipo di dato. Vi sono molti modi differenti di manipolare [...]]]></description>
			<content:encoded><![CDATA[<p>I programmatori si trovano molto spesso a lavorare con le date: in applicativi di gestione del contenuto ad esempio, sono praticamente un elemento obbligatorio senza il quale molte operazioni basilari, come gli ordinamenti cronologici, non sarebbero possibili.</p>
<p>Ecco perchè diventa molto importante saper gestire questo tipo di dato. Vi sono molti modi differenti di manipolare le date, ma quello che vogliamo presentare oggi è una soluzione che riguarda il salvataggio di date in una base di dati e il conseguente recupero.</p>
<p>Molti programmatori utilizzano le funzioni di manipolazione delle stringhe per formattare le date, ignorando che tale soluzione è poco performante ed ancora meno efficiente. Quando si lavora ad un progetto con un database alle spalle, bisogna sempre tenere presente che far eseguire alcuni tipi di operazioni al <a href="http://it.wikipedia.org/wiki/Database_management_system" target="_blank">DBMS</a> piuttosto che all&#8217;interpreste del linguaggio di programmazione (nel caso del PHP, ad esempio) è sicuramente molto più performante oltre che leggibile.</p>
<p>Bisogna a questo scopo conoscere alcune funzionalità che i database, o meglio, i <a href="http://it.wikipedia.org/wiki/Database_management_system" target="_blank">DBMS</a>, mettono a disposizione. Una di queste è proprio <a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format" target="_blank"><strong>DATE_format</strong></a> , che appunto durante una interrogazione permette di inserire nel result set le date già formattate e pronte per l&#8217;utilizzo.</p>
<p>Vediamo un esempio:</p>
<p><em>SELECT title, created DATE_format(created, &#8216; %e/%m/%Y, %l:%i%p&#8217;) as created<br />
FROM table<br />
WHERE category=1<br />
ORDER BY created DESC</em></p>
<p>Supponiamo di avere una tabella per le notizie, da cui vogliamo recuperare il titolo e appunto la data di crezione di ogni item.</p>
<p>Attraverso l&#8217;utilizzo della funzione <a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format" target="_blank"><strong>DATE_format</strong></a> messa a disposizione dal motore di MySQL, riceviamo una data già formatta è pronta per l&#8217;uso, senza dover richiamare ulteriori funzioni di formattazione o di manipolazione di stringhe, con un conseguente aumento delle prestazioni (seppure di pochi microsecondi nella maggior parte dei casi) e della leggibilità del codice.</p>
<p><a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format" target="_blank"><strong>DATE_format</strong></a><strong> </strong>accetta due parametri: il primo è la data da formattare, il secondo è una stringa di formattazione, che segue delle regole simili a quelle utilizzate per questo tipo di stringhe dalla maggior parte dei linguaggi di programmazione, e che trovate <a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format" target="_blank">qui</a>.</p>
<p>A questo punto, quando si utilizzerà il relativo result set, si potranno usare direttamente sia il campo <em>title </em>che il campo <em>created</em> senza ulteriosi interventi da parte del programmatore.</p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_495a3318_url = 'http://www.marcolecce.com/blog/2009/07/02/mysql-formattare-efficientemente-le-date-in-formato-datetime/';
sociallist_495a3318_title = 'MySQL - Formattare efficientemente le date in formato datetime';
sociallist_495a3318_text = '';
sociallist_495a3318_tags = '';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=495a3318"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2009%2F07%2F02%2Fmysql-formattare-efficientemente-le-date-in-formato-datetime%2F&title=MySQL+-+Formattare+efficientemente+le+date+in+formato+datetime" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2009/07/02/mysql-formattare-efficientemente-le-date-in-formato-datetime/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Joomla &#8211; Gestione delle sessioni</title>
		<link>http://www.marcolecce.com/blog/2009/06/09/joomla-gestione-delle-sessioni/</link>
		<comments>http://www.marcolecce.com/blog/2009/06/09/joomla-gestione-delle-sessioni/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 14:37:25 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=157</guid>
		<description><![CDATA[Joomla ha la caratteristica di essere estremamente versatile, e permette di installare i proprio moduli e componenti in maniera semplice e pulita, promuovendo sì l&#8217;utilizzo del CMS &#8220;a scatola chiusa&#8221;, ma anche lo sviluppo di elementi ad hoc per estenderne le funzionalità. In questo ambito può essere davvero utile conoscere il meccanismo di funzionamento delle [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.joomla.org/" target="_blank">Joomla</a> ha la caratteristica di essere estremamente versatile, e permette di installare i proprio moduli e componenti in maniera semplice e pulita, promuovendo sì l&#8217;utilizzo del CMS &#8220;a scatola chiusa&#8221;, ma anche lo sviluppo di elementi <em>ad hoc</em> per estenderne le funzionalità.</p>
<p>In questo ambito può essere davvero utile conoscere il meccanismo di funzionamento delle sessioni in <a href="http://www.joomla.org/" target="_blank">Joomla</a>. A differenza di quanto si crede, <a href="http://www.joomla.org/" target="_blank">Joomla</a> può essere considerato un vero e proprio framework, con le sue <a href="http://api.joomla.org/" target="_blank">API</a> e tutto ciò che serve per sviluppare componenti realmente e completamente integrati con il sistema.</p>
<p>Uno di questi oggetti, sicuramente tra i principali, è il JFactory: mediante questo oggetto infatti è possibile tra le altre cose gestire ad esempio le connessioni con il database, e, per l&#8217;appunto, le sessioni. Vediamo il procedimento esatto.</p>
<p>Il primo passo è recuperare la sessione e salvarla in una variabile che ne permetta l&#8217;utilizzo:</p>
<p style="text-align: center;"><em>$session =&amp;JFactory::getSession();</em></p>
<p style="text-align: left;">Notiamo che utilizziamo l&#8217;oggetto JFactory per salvare all&#8217;interno della variabile $session un riferimento alla sessione, che possiamo utilizzare per settare un valore:</p>
<p style="text-align: center;"><em>$my_value = &#8220;variabile di sessione&#8221;</em>;</p>
<p style="text-align: center;"><em>$session-&gt;set(&#8216;my_value&#8217;, $my_value);</em></p>
<p style="text-align: left;">In questo modo utilizziamo l&#8217;istanza della sessione precedentemente recuperata per memorizzare la variabile <em>$my_value</em> all&#8217;interno della sessione stessa. Il nome del parametro <em>&#8216;my_value&#8217;</em> non deve ovviamente essere per forza uguale a quello della variabile <em>($my_value)</em>, anche se è buona norma utilizzare lo stesso nome per il parametro e per la variabile, in modo da facilitare la programmazione.</p>
<p style="text-align: left;">Il valore precedente salvato in sessione è facilmente recuperabile attraverso il seguente comando:</p>
<pre class="php" style="text-align: center;"><em>$my_value = $session-&gt;get('my_value');</em></pre>
<p>Come possiamo vedere, quindi, il framework <a href="http://www.joomla.org/" target="_blank">Joomla</a> mette a disposizione tutta una serie di strumenti che facilitano il compito dello sviluppatore: è importante conoscere tali strumenti, perchè sono stati concepiti proprio per facilitare l&#8217;integrazione del nostro codice con quello del CMS, integrazioni da implementare nel modo corretto, se vogliamo che il nostro sistema rimanga stabile e sicuro.</p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_b183e589_url = 'http://www.marcolecce.com/blog/2009/06/09/joomla-gestione-delle-sessioni/';
sociallist_b183e589_title = 'Joomla - Gestione delle sessioni';
sociallist_b183e589_text = '';
sociallist_b183e589_tags = '';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=b183e589"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2009%2F06%2F09%2Fjoomla-gestione-delle-sessioni%2F&title=Joomla+-+Gestione+delle+sessioni" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2009/06/09/joomla-gestione-delle-sessioni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP &#8211; Configurare un ambiente per il team development</title>
		<link>http://www.marcolecce.com/blog/2009/06/04/php-configurare-un-ambiente-per-il-team-development/</link>
		<comments>http://www.marcolecce.com/blog/2009/06/04/php-configurare-un-ambiente-per-il-team-development/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 07:16:42 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Sistemi Operativi]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=148</guid>
		<description><![CDATA[Il team development e la gestione del lavoro di gruppo è molto importante ed è spesso un aspetto trascurato: più un gruppo di lavoro è affiatato e coordinato, e più il lavoro sarà puntuale, preciso e professionale. Il lavoro di squadra richiede da parte delle figure coinvolte pazienza e dedizione, e la strada da scegliere [...]]]></description>
			<content:encoded><![CDATA[<p>Il team development e la gestione del lavoro di gruppo è molto importante ed è spesso un aspetto trascurato: più un gruppo di lavoro è affiatato e coordinato, e più il lavoro sarà puntuale, preciso e professionale.</p>
<p>Il lavoro di squadra richiede da parte delle figure coinvolte pazienza e dedizione, e la strada da scegliere deve essere quelle del dialogo costruttivo e del rispetto delle idee di ognuno dei partecipanti.</p>
<p>Vi sono strumenti che è molto importante conoscere, perchè permettono di sincronizzare il lavoro del team e di gestire in modo professionale e ordinato progetti di dimensioni importanti. In questo articolo vedremo come configurare un ambiente di sviluppo professionale per il team development, ma non bisogna mai dimenticare un elemento importante: gli strumenti che vedremo sono molto potenti ed utili, ma non sono adatti a tutte le situazioni e a tutte le tipologie di progetto.</p>
<p>Uno strumento potente, ma inadatto alle caratteristiche dei progetti o dei movimenti produttivi interni dell&#8217;azienda, può provocare danni non indifferenti.</p>
<p>L&#8217;ambiente che andremo a configurare ha i seguenti requisiti:</p>
<ol>
<li>un server linux (fedora 10)</li>
<li>Apache, PHP, MySql installati nel server e nella propria macchina</li>
<li>IDE Zend Studio for Eclipse (o anche solo Eclipse) installato nella propria macchina</li>
</ol>
<p>Il sistema che andremo a configurare  è dunque composto da un server Linux su cui installaremo l&#8217;svn (subversion), e da una o più workstation su cui sarà configurato un ambiente di sviluppo in locale e l&#8217;IDE che ci permette di gestire i collegamenti con subversion e dunque di lavorare in team con i nostri colleghi.</p>
<p><strong>Configurazione del SERVER</strong></p>
<p>Avendo scelto come sistema operativo Fedora 10, possiamo utilizzare il tool yum per installare <a href="http://subversion.tigris.org/" target="_blank">subversion</a> su linux:</p>
<p style="text-align: center;"><em><code>yum install subversion</code></em></p>
<p>Per renderlo avviabile in Apache, installiamo il modulo mod_dav_svn:</p>
<p style="text-align: center;"><em><code>yum install mod_dav_svn</code></em></p>
<p>Nella directory root del server, creiamo le seguenti cartelle per il repository svn:</p>
<p style="text-align: center;"><em><code>mkdir /svn/repos<br />
svnadmin create /svn/repos/projects</code></em></p>
<p>Per questioni di permessi, è necessario cambiare il proprietario della cartella in &#8220;apache&#8221; :
</p>
<p style="text-align: center;"><em><code>chown -R apache.apache /svn</code></em></p>
<p>A questo punto, dobbiamo creare il file in cui verranno scritte le policy di sicurezza che controllano la metodologia di accesso ai progetti. Creiamo il file svnauth nella directory /svn/repos/projects/svnauth e inseriamo le utenze come da esempio seguente:<br />
<code><br />
[/]<br />
user1 = rw<br />
user2 = r</code></p>
<p><em>user1</em> in questo caso avrà accesso in lettura-scrittura, mentre <em>user2</em> avrà l&#8217;accesso in modalità in sola lettura in tutto il repository.</p>
<p>Il passo successivo è creare il file (/svn/repos/projects/svnpass) che conterrà le password degli utenti di cui sopra:</p>
<p style="text-align: center;"><em><code>htpasswd -bcm </code>/svn/repos/projects/svnpass<code> user1 passwordUser1<br />
htpasswd -bm </code>/svn/repos/projects/svnpass<code> user2 passwordUser2</code></em>
</p>
<p style="text-align: left;">Lanciando i comandi precedenti, creiamo un&#8217;associazione tra utente e password, e tale associazione verrà appunto scritta nel file <em>svnpass</em>. Importante: notate che i parametri del primo comando (<em>-bcm</em>) sono diversi dal secondo (<em>-bm</em>); questo perchè nel secondo caso andiamo solo ad aggiungere una riga al file <em>svnpass</em>, mentre nel primo caso è impostata anche la creazione opzionale del file nel caso in cui questo non esistesse. I parametri associati al comando htpassw hanno il seguento significato:</p>
<p style="text-align: left;">-c    creazione nuovo file</p>
<p style="text-align: left;">-m   forzare la crittografia MD5 della password</p>
<p style="text-align: left;">-b    usare la password inserita da linea di comando</p>
<p>Per ulteriori chiarimenti sul comando <em>htpasswd</em> consigliamo di leggerne la documentazione, anche perchè ci sono alcune differenza in base al sistema operativo in uso.</p>
<p>Ora è arrivato il momendo di configura <a href="http://www.apache.org/" target="_blank">Apache</a>; aggiungiamo allora le seguenti righe al file di configurazione del server web:</p>
<p><em><code>&lt;Location /svn/sandbox&gt;<br />
DAV svn<br />
SVNPath /svn/repos/sandbox<br />
AuthType Basic<br />
AuthName "Subversion Repository"<br />
AuthUserFile /svn/repos/sandbox/svnpass<br />
Require valid-user<br />
AuthzSVNAccessFile /svn/repos/sandbox/svnauth<br />
&lt;/Location&gt;</code></em></p>
<p><code>Riavviamo </code><a href="http://www.apache.org/" target="_blank">Apache</a><code>, e l'ambiente server è pronto per essere utilizzato. Se tutto funziona regolarmente, il repository dovrà essere accessibile da browser al seguente indirizzo</code> <em>http://www.yourserver.com/svn/projects</em>.</p>
<p>Sarà richiesta una login e una password, che ovviamente dovranno corrispondere a quelle che abbiamo procedentemente inserito.</p>
<p>Ora manca il passo finale, quello della configurazione del nostro IDE. Consideriamo a questo punto che su ogni macchina prediposta per il team development vi siamo già configurato un ambiente di sviluppo classico per lo sviluppo locale in PHP (<a href="http://www.apache.org/" target="_blank">Apache</a>-PHP-<a href="http://www.mysql.it/" target="_blank">MySql</a>).</p>
<p>In questa sede sarebbe troppo dispersivo e lungo descrivere il procedimento passo per passo: vi sono diversi pacchetti com xxamp o wamp che si possono usare per configurare in pochi minuti un ambiente di sviluppo in PHP perfettamente funzionante in ambiente Windows (nelle release Linux più diffuse, è già tutto prediposto per una installazione di tale ambiente), anche se il nostro consiglio è di procedere con installazioni manuali di cui si ha il completo controllo. L&#8217;unico appunto è di far puntare la directory root di apache nel workspace che abbiamo scelto durante la configurazione della IDE: in questo modo rendiamo visibili i nostri progetti <a href="http://www.zend.com/it/" target="_blank">ZEND</a> o <a href="http://www.eclipse.org/">ECLIPSE</a> nel nostro localhost.</p>
<p>La configurazione che vedremo è esattamente la stessa sia che si utilizzi Zend Studio for Eclipse che Eclispe con il plugin Php. Quest&#8217;ultima, come la maggior parte degli utenti sapranno, è completamente gratuita, e fornisce gli stessi strumenti di Zend Studio per quando riguarda il team development. Chiaramente Zend Studio è la piattaforma specifica per lo sviluppo in PHP, e sicuramente per un web developper professionista è il top in quanto a strumenti forniti e comodità di sviluppo. Tuttavia, per chi sviluppa in più di un linguaggio di programmazione a livelli professionali, Eclipse, a nostro avviso, risulta essere la scelta più versatile e comoda.</p>
<p>Procediamo alla configurazione della nostra IDE:</p>
<p>1) Apriamo la prospettiva SVN Repositories</p>
<p>2) Nella colonna di destra, andiamo ad aggiungere il nostro repository (tasto destro + new)</p>
<p>2.1) Inserire l&#8217;URL  del repository <em>http://www.tuoserver.com/svn/projects</em>.</p>
<p>2.2) Inserire l&#8217;user e la pass dell&#8217;utente che utilizzerà tale ambiente e che rientrano in quelle precedentemente configurate</p>
<p>2.3) Clicchiamo su &#8220;Finish&#8221;</p>
<p>A questo punto il repository verrà importato nel nostro ambiente: concluso tale processo, apriamo la prospettiva &#8220;PHP Explorer&#8221; (o Resource), che sarà la prospettiva vera e propria che useremo per lo sviluppo. Creiamo un nuovo progetto:</p>
<p>1) New Project</p>
<p>2) Svn &#8211;&gt; Project from SVN</p>
<p>3) Selezionare l&#8217;uso di un repository esistente</p>
<p>4) Scegliere il/i progetto/i, la data attuale e procedere cliccando su &#8220;Finish&#8221;</p>
<p>A questo punto verrà eseguito il checkout del progetto: questo procedimento impiegherà qualche minuti prima di concludere.</p>
<p>Siamo pronti per testare il meccanismo, tornando ad analizzare la sezione &#8220;PHP Explorer&#8221; della nostra IDE.</p>
<p>La prima cosa che notiamo sono dei &#8220;numeri&#8221; presenti su ogni risorsa all&#8217;interno del progetto: questo &#8220;numero&#8221; identifica la versione della risorsa: subversion, infatti, gestisce un potente e importante strumento di versioning, che facilita nelle operazioni di update o di recupero.</p>
<p>Cliccando con il tasto destro del mouse sul nome del progetto, e scegliendo &#8220;Team&#8221;, si apre un menu contestuale che ci mette a disposizione tutti gli strumenti potenti di gestione del team development e di subversion.</p>
<p>La operazioni principali sono <strong>UPDATE</strong> e <strong>COMMIT</strong> : la prima permette di ricevere le modifiche che gli altri membri del team hanno portato al progetto eseguendo un commit. Il COMMIT, appunto, è l&#8217;operazione più importante, perchè permette di scrivere sul progetto finale, direttamente sull&#8217;snv: bisogna per questo fare molto attenzione durante questa operazione, essere sicuri che ciò che si sta &#8220;commitando&#8221; sia perfettamente funzionante e ricordarsi sempre di commentare il proprio COMMIT per permettere una facile gestione del versioning.</p>
<p>Vi sono tantissime altre funzionalità molto importanti e potenti che possiamo sfruttatare per lavorare al meglio con questi strumenti, ma per ora riteniamo siamo meglio fermarci qui&#8230;.abbiamo già abbastanza elementi da testare! Chiaramente, nel caso ci fossero domande o questione di qualsiasi tipo, siamo a  vostra disposizione!! <img src='http://www.marcolecce.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_da69c3e4_url = 'http://www.marcolecce.com/blog/2009/06/04/php-configurare-un-ambiente-per-il-team-development/';
sociallist_da69c3e4_title = 'PHP - Configurare un ambiente per il team development';
sociallist_da69c3e4_text = '';
sociallist_da69c3e4_tags = '';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=da69c3e4"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2009%2F06%2F04%2Fphp-configurare-un-ambiente-per-il-team-development%2F&title=PHP+-+Configurare+un+ambiente+per+il+team+development" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2009/06/04/php-configurare-un-ambiente-per-il-team-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Maps &#8211; Come inserire sul proprio sito le google maps con indirizzi dinamici</title>
		<link>http://www.marcolecce.com/blog/2009/04/18/google-maps-come-inserire-sul-proprio-sito-le-google-maps-con-indirizzi-dinamici/</link>
		<comments>http://www.marcolecce.com/blog/2009/04/18/google-maps-come-inserire-sul-proprio-sito-le-google-maps-con-indirizzi-dinamici/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 10:55:14 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Varie]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=132</guid>
		<description><![CDATA[Gli strumenti forniti da Google sono sempre più utilizzati per integrare i portali web con servizi sempre più interessanti. Tra i più utilizzati e apprezzati dagli utenti, vi sono sicuramente le google map, ovvero le mappe che indicano l&#8217;esatta posizione di un indirizzo o di una locazione geografica. Oramai su quasi tutte le pagine &#8220;Contatti&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p id="line120">Gli strumenti forniti da <a href="http://www.google.it/" target="_blank">Google</a> sono sempre più utilizzati per integrare i portali web con servizi sempre più interessanti.<br />
Tra i più utilizzati e apprezzati dagli utenti, vi sono sicuramente le <a href="http://code.google.com/apis/maps/" target="_blank">google map</a>, ovvero le mappe che indicano l&#8217;esatta posizione di un indirizzo o di una locazione geografica.<br />
Oramai su quasi tutte le pagine &#8220;Contatti&#8221; sparse per il mondo è presente tale servizio: l&#8217;utilizzo  è molto semplice, e la documentazione ricca, anche se per specifiche personalizzazioni bisogna impegnarsi un poco ( giustamente <img src='http://www.marcolecce.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p>Ad esempio, potremmo avere la necessità di inserire nelle nostre pagine una mappa di google che, a<br />
seconda dell&#8217;indirizzo passato (e quindi dinamicamente), visualizzi la posizione desiderata con un &#8220;marker&#8221; e le informazioni relative.<br />
Lo script per implementare tale meccanismo è il seguente:</p>
<p><em>&lt;<span class="start-tag">script</span><span class="attribute-name"> type</span>=<span class="attribute-value">&#8220;text/javascript&#8221;</span>&gt;<br />
var map = null;<br />
var geocoder = null;</p>
<p>function load() {<br />
if (GBrowserIsCompatible()) {<br />
map = new GMap2(document.getElementById(&#8220;map&#8221;));<br />
var latitude = 45.05872;<br />
var longitude = 7.723114;<br />
var zoom = 13;<br />
var location = new GLatLng(latitude, longitude);<br />
//    var marker = new GMarker(location);<br />
//    map.addOverlay(marker);<br />
map.setCenter(location, zoom);<br />
geocoder = new GClientGeocoder();<br />
showAddress(address);<br />
}<br />
}</p>
<p>function showAddress(address) {<br />
if (geocoder) {<br />
geocoder.getLatLng(<br />
address,<br />
function(point) {<br />
if (!point) {<br />
$(&#8220;#nomap&#8221;).text(&#8216;indirizzo non disponibile&#8217;);<br />
} else {<br />
map.setCenter(point, 13);<br />
var marker = new GMarker(point);<br />
map.addOverlay(marker);<br />
//				              marker.openInfoWindowHtml(address);<br />
}<br />
}<br />
);<br />
}<br />
}</p>
<p>window.onload = load;<br />
window.onunload = GUnload;<br />
&lt;/<span class="end-tag">script</span>&gt;</p>
<p>&lt;<span class="start-tag">div</span><span class="attribute-name"> id</span>=<span class="attribute-value">&#8220;nomap&#8221; </span><span class="attribute-name">style</span>=<span class="attribute-value">&#8220;color: red;&#8221;</span>&gt;&lt;/<span class="end-tag">div</span>&gt;<br />
&lt;<span class="start-tag">div</span><span class="attribute-name"> id</span>=<span class="attribute-value">&#8220;map&#8221; </span><span class="attribute-name">style</span>=<span class="attribute-value">&#8220;width: 300px; height: 200px;&#8221;</span>&gt;&lt;/<span class="end-tag">div</span>&gt;</em></p>
<p>Il codice HTML delle ultime due righe crea due div: il primo serve per visualizzare un messaggio di<br />
warining nel caso in cui l&#8217;indirizzo passato non sia stato trovato dal motore di ricerca, il secondo serve per la visualizzazione della mappa.</p>
<p>Lo script è composto da due funzioni: load() e showAddress(address). La funzione load viene richiamata al caricamento della pagina, ed è ovviamente il cuore di questo script:  si occupa di settare tutti i paramentri necessari, tra cui il settaggio dell&#8217;id del div che conterrà la mappa (map).<br />
Eseguite tutte le assegnazioni del caso, viene infine richiamata la seconda funzione importante,<br />
showAddress(address).<br />
Questa ha un parametro, <em>address</em>, che potremmo ad esempio generare e passare con computazioni proveniente da pagine php, che è proprio l&#8217;indirizzo che verrà visualizzato sulla mappa attraverso l&#8217;uso dei marker settati nella prima funzione.<br />
L&#8217;indirizzo è un parametro, ed è quindi dinamico: ogni qualvolta la pagina verrà ricaricata, leggerà l&#8217;indirizzo attualmente impostato e lo passerà allo script, che si occuperà di visualizzarlo sulla mappa.</p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_f06f1b5c_url = 'http://www.marcolecce.com/blog/2009/04/18/google-maps-come-inserire-sul-proprio-sito-le-google-maps-con-indirizzi-dinamici/';
sociallist_f06f1b5c_title = 'Google Maps - Come inserire sul proprio sito le google maps con indirizzi dinamici';
sociallist_f06f1b5c_text = '';
sociallist_f06f1b5c_tags = '';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=f06f1b5c"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2009%2F04%2F18%2Fgoogle-maps-come-inserire-sul-proprio-sito-le-google-maps-con-indirizzi-dinamici%2F&title=Google+Maps+-+Come+inserire+sul+proprio+sito+le+google+maps+con+indirizzi+dinamici" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2009/04/18/google-maps-come-inserire-sul-proprio-sito-le-google-maps-con-indirizzi-dinamici/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP &#8211; Sviluppare comodamente con file .tpl</title>
		<link>http://www.marcolecce.com/blog/2009/02/17/php-sviluppare-comodamente-con-file-tpl/</link>
		<comments>http://www.marcolecce.com/blog/2009/02/17/php-sviluppare-comodamente-con-file-tpl/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 11:22:31 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=117</guid>
		<description><![CDATA[Quando capita di dover lavorare con strutture che utilizzano per il desgin HTML file con l&#8217;estensione .tpl, siamo di fronte ad un bivio: correre veloce veloce verso la colonna portante del nostro ufficio con la testa in avanti finchè non sentiamo un tonfo, oppure impazzire perchè siamo obbligati a lavorare sostanzialmente con file di testo, quindi [...]]]></description>
			<content:encoded><![CDATA[<p>Quando capita di dover lavorare con strutture che utilizzano per il desgin <a href="http://it.wikipedia.org/wiki/HTML" target="_blank">HTML</a> file con l&#8217;estensione .tpl, siamo di fronte ad un bivio: correre veloce veloce verso la colonna portante del nostro ufficio con la testa in avanti finchè non sentiamo un tonfo, oppure impazzire perchè siamo obbligati a lavorare sostanzialmente con file di testo, quindi senza la possibilità di avere i tag di codice colorati per facilitarne il riconoscimento.</p>
<p>In realtà siamo stati un pò troppo precipitosi <img src='http://www.marcolecce.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  : c&#8217;è un&#8217;altra soluzione, ed ha fornirla è chiaramente la <a href="http://it.wikipedia.org/wiki/Integrated_development_environment" target="_blank">IDE </a>professionale e meravigliosa per lo sviluppo <a href="http://it.wikipedia.org/wiki/PHP" target="_blank">PHP</a>, ovvero <a href="www.zend.com/en/products/studio/" target="_blank">Zend Studio for Eclipse</a>.</p>
<p>Questo ambiente di sviluppo, oltre a fornire infinite utilissime ed efficentissime funzionalità per il professionista, permette la personalizzazione e la gestione dell&#8217;editor: lo sviluppatore può quindi decidere come visualizzare alcuni tipi di file, permettendogli di lavorare più agevolmente anche nelle situazioni più critiche.</p>
<p>Se vogliamo salvare la nostra testolina, ma soprattutto la colonna portante del nostro ufficio, tutto ciò che dobbiamo fare per lavorare tranquillamente con file aventi estensione .tpl è seguire questi semplici e veloci passi:</p>
<p><span class="MsgBodyText">1) nel menu, andare in Window-&gt;Preferences</span></p>
<p>2) nell Preferences, andare in General-&gt;Content Types</p>
<p>3) nella sezione Content Types, scegliere Text-&gt;PHP</p>
<p>4) Cliccare sul pulsante &#8220;Add&#8221;, ed inserire la stringa *.tpl</p>
<p>5) Cliccare sul pulsante &#8220;OK&#8221;</p>
<p>A questo punto, una volta riavviato il nostro ambiente di sviluppo, i file con estensione .tpl verranno visualizzati come normali file <a href="http://it.wikipedia.org/wiki/PHP" target="_blank">PHP</a>: in questo modo sarà più semplice riconoscere i tag <a href="http://it.wikipedia.org/wiki/HTML" target="_blank">HTML</a> dal codice <a href="http://it.wikipedia.org/wiki/PHP" target="_blank">PHP</a>, rendendo il nostro lavoro più efficiente e comodo. Ovviamente non è obbligatorio scegliere la visualizzazione in <a href="http://it.wikipedia.org/wiki/PHP" target="_blank">PHP</a> al passo 3) : ad esempio, chi preferisce, può associare i file .tpl alla visualizzazione <a href="http://it.wikipedia.org/wiki/HTML" target="_blank">HTML</a>, a seconda delle proprie necessità.</p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_21ed7937_url = 'http://www.marcolecce.com/blog/2009/02/17/php-sviluppare-comodamente-con-file-tpl/';
sociallist_21ed7937_title = 'PHP - Sviluppare comodamente con file .tpl';
sociallist_21ed7937_text = '';
sociallist_21ed7937_tags = '';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=21ed7937"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2009%2F02%2F17%2Fphp-sviluppare-comodamente-con-file-tpl%2F&title=PHP+-+Sviluppare+comodamente+con+file+.tpl" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2009/02/17/php-sviluppare-comodamente-con-file-tpl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
