<?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>Walter Dal Mut</title>
	<atom:link href="http://walterdalmut.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://walterdalmut.com</link>
	<description>When the music&#039;s over turn out the lights</description>
	<lastBuildDate>Mon, 20 Feb 2012 21:24:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Avviare un task Apache PIG da PHP su Hadoop (EMR)</title>
		<link>http://walterdalmut.com/2012/02/19/avviare-un-task-apache-pig-da-php-su-hadoop-emr/</link>
		<comments>http://walterdalmut.com/2012/02/19/avviare-un-task-apache-pig-da-php-su-hadoop-emr/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 22:09:40 +0000</pubDate>
		<dc:creator>Walter Dal Mut</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[Elastic MapReduce]]></category>
		<category><![CDATA[emr]]></category>
		<category><![CDATA[pig]]></category>

		<guid isPermaLink="false">http://walterdalmut.com/?p=1128</guid>
		<description><![CDATA[Analizzare i dati è parte centrale per diverse applicazioni che seguo. I cluster ...]]></description>
			<content:encoded><![CDATA[<p>Analizzare i dati è parte centrale per diverse applicazioni che seguo. I cluster Hadoop sono la tecnologia che utilizzo per l&#8217;analisi dei dati tramite la riduzione dei dati utilizzando Apache PIG su Amazon Elastic Map Reduce (EMR).</p>
<p><span id="more-1128"></span></p>
<p>Amazon tramite EMR ci permette di creare un cluster Hadoop e pagare per il tempo che questo è utilizzato. Per questa motivazione gli scripts Apache Pig vengono posizionati su S3 (Simple Storage Service) e questo viene configurato a runtime quando lanciamo un cluster Hadoop e indichiamo che deve essere installato anche Pig e invocato il nostro script.</p>
<p>Purtroppo online non sono presenti scripts PHP per la creazione e configurazione di questo cluster Hadoop con supporto Pig. Propongo quindi uno di quelli che utilizzo io per la produzione, quindi non sono presenti le richieste di debugging.</p>
<pre class="brush: php; gutter: true">&lt;?php

define(&#039;INPUT_FOLDER&#039;, &#039;s3://your-input-bucket&#039;);
define(&#039;OUTPUT_FOLDER&#039;, &#039;s3://your-output-bucket/hadoop/output&#039;);
define(&#039;SCRIPTS_FOLDER&#039;, &#039;s3://your-output-bucket/hadoop/scripts&#039;);

$emr = new AmazonEMR(array(&#039;key&#039; =&gt; &#039;your-key&#039;, &#039;secret&#039; =&gt; &#039;your-secret&#039;));
$emr-&gt;set_region(AmazonEMR::REGION_EU_W1);

//Use your glob spec.
$inputGlob = &#039;prefix-&#039; . date(&#039;Y-m-d&#039;) . &#039;*&#039;;
$outputFolderName = date(&#039;Y-m-d&#039;);

$response = $emr-&gt;run_job_flow(&#039;my-hadoop-job&#039;, array(
    &#039;Ec2KeyName&#039; =&gt; &#039;indexer&#039;,
    &#039;HadoopVersion&#039; =&gt; &#039;0.20&#039;,
    &#039;KeepJobFlowAliveWhenNoSteps&#039; =&gt; &#039;false&#039;,
    &#039;InstanceGroups&#039; =&gt; array(
        array( // Group #1
            &#039;InstanceCount&#039; =&gt; 1,
            &#039;InstanceRole&#039; =&gt; &#039;MASTER&#039;,
            &#039;InstanceType&#039; =&gt; &#039;m1.small&#039;,
            &#039;Market&#039; =&gt; &#039;ON_DEMAND&#039;,
            &#039;Name&#039; =&gt; &#039;my-hadoop-cluster&#039;,
        )
    ),
    &#039;Placement&#039; =&gt; array(
        &#039;AvailabilityZone&#039; =&gt; &#039;eu-west-1a&#039;
    )
), array(
    &#039;Steps&#039; =&gt; array(
        new CFStepConfig(array(
            &#039;Name&#039; =&gt; &#039;Install Pig&#039;,
            &#039;ActionOnFailure&#039; =&gt; &#039;TERMINATE_JOB_FLOW&#039;,
            &#039;HadoopJarStep&#039; =&gt; CFHadoopStep::install_pig()
        )),
        new CFStepConfig(array(
            &#039;Name&#039; =&gt; &#039;Run Pig Script&#039;,
            &#039;ActionOnFailure&#039; =&gt; &#039;TERMINATE_JOB_FLOW&#039;,
            &#039;HadoopJarStep&#039; =&gt; CFHadoopStep::run_pig_script(
                SCRIPTS_FOLDER . &#039;/my-script-log.pig&#039;,
                array(
                    &#039;p&#039;,
                    &#039;INPUT=&#039; . INPUT_FOLDER . &quot;/&quot; . $inputGlob,
                    &#039;p&#039;,
                    &#039;OUTPUT=&#039; . OUTPUT_FOLDER . &quot;/&quot; . $outputFolderName
                )
            );
        ))
    )
)
);</pre>
<p>In questo script viene semplicemente configurato un bucket S3 da cui leggere i files (utilizza un glob basato sulle date e prefisso) ed un punto di uscita sempre su bucket S3 creando una cartella con la data del lancio dello script.</p>
<p>Avviando questo script viene creato il cluster su EMR ed avviato. Viene configurato il cluster tramite due step, il primo installa Apache Pig ed un secondo che avvia il nostro script residente su S3 a cui vengono passati due parametri INPUT ed OUTPUT che possono essere utilizzati dal nostro script Apache Pig per le operazioni di &#8220;Store&#8221; e di &#8220;Load&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://walterdalmut.com/2012/02/19/avviare-un-task-apache-pig-da-php-su-hadoop-emr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Review of Programming Pig</title>
		<link>http://walterdalmut.com/2012/02/15/my-review-of-programming-pig/</link>
		<comments>http://walterdalmut.com/2012/02/15/my-review-of-programming-pig/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 22:48:46 +0000</pubDate>
		<dc:creator>Walter Dal Mut</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[dynamodb]]></category>
		<category><![CDATA[Elastic MapReduce]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[pig]]></category>

		<guid isPermaLink="false">http://walterdalmut.com/?p=1124</guid>
		<description><![CDATA[Originally submitted at O&#8217;Reilly Dataflow Scripting with Hadoop Programming Pig Great book, clear ...]]></description>
			<content:encoded><![CDATA[<div class="hreview">
<div class="item">
<p><a href="http://oreilly.com/catalog/0636920018087">Originally submitted at O&#8217;Reilly</a></p>
<div><img class="photo" style="margin: 0 0.5em 0 0;" src="http://images.powerreviews.com/images_products/07/15/12507224_100.jpg" alt="" align="left" /></p>
<p style="margin-top: 0;">Dataflow Scripting with Hadoop</p>
</div>
<p><a class="url fn" href="http://oreilly.com/catalog/0636920018087"><span class="fn">Programming Pig</span></a></p>
</div>
<p><strong>Great book, clear and well written</strong></p>
<div>By <strong>Walter</strong> from <strong>Turin, Italy</strong> on <strong><abbr class="dtreviewed" title="2012215T1200-0800">2/15/2012</abbr></strong></div>
<div class="prStars prStarsSmall"></div>
<div><span class="rating">4</span>out of 5</div>
<div><span id="more-1124"></span></div>
<div></div>
<p><strong>Pros: </strong>Concise, Easy to understand, Well-written, Accurate</p>
<p><strong>Best Uses: </strong>Novice, Intermediate</p>
<p><strong>Describe Yourself: </strong>Developer</p>
<p class="description" style="margin-top: 1em;">Very good, it covers a lot of Pig features from the beginning to advanced features.</p>
<p style="margin-top: 0.5em;">(<a href="http://www.powerreviews.com/legal/terms_of_use.html" rel="license">legalese</a>)</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://walterdalmut.com/2012/02/15/my-review-of-programming-pig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Soap_Server compatibile con Java e C#</title>
		<link>http://walterdalmut.com/2012/02/15/zend_soap_server-compatibile-con-java-e-c-sharp/</link>
		<comments>http://walterdalmut.com/2012/02/15/zend_soap_server-compatibile-con-java-e-c-sharp/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 17:40:57 +0000</pubDate>
		<dc:creator>Walter Dal Mut</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[Zend_Soap]]></category>

		<guid isPermaLink="false">http://walterdalmut.com/?p=1110</guid>
		<description><![CDATA[Sfortunatamente Java e C# preferiscono un tipo di servizio SOAP differente da quello ...]]></description>
			<content:encoded><![CDATA[<p>Sfortunatamente Java e C# preferiscono un tipo di servizio SOAP differente da quello che Zend ci offre come default, ovvero il sistema RPC. Questi due, infatti, preferiscono lo stile &#8220;document&#8221; ed una serializzazione diversa da quella di default.</p>
<p><span id="more-1110"></span></p>
<p>Tutto quello che già sappiamo sulla configurazione di un server SOAP tramite Zend rimane comunque valido, per esempio la gestione obbligatoria dei commenti DocBlocks per permettere all&#8217;autodiscover di stabilire il tipo delle proprietà e quindi generare le giuste dichiarazioni dei tipi.</p>
<p>Vediamo subito come costruire il server:</p>
<pre class="brush: actionscript3; gutter: true">&lt;?php 

class Example_BaseController
    extends Zend_Controller_Action
{
    public function indexAction()
    {
        $this-&gt;_helper-&gt;layout()-&gt;disableLayout();
        $this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender();

        if($_SERVER[&#039;REQUEST_METHOD&#039;] == &#039;GET&#039;) {
            $autodiscover = new Zend_Soap_AutoDiscover(&#039;Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence&#039;);
            $autodiscover-&gt;setBindingStyle(array(&#039;style&#039;=&gt;&#039;document&#039;));
            $autodiscover-&gt;setOperationBodyStyle(array(&#039;use&#039; =&gt; &#039;literal&#039;));
            $autodiscover-&gt;setClass(&#039;MyService&#039;);
            $autodiscover-&gt;handle();
        } else {
            $soap = new Zend_Soap_Server(&quot;http://tr.local/example/base/?wsdl&quot;, array(&#039;cache_wsdl&#039; =&gt; false));
            $soap-&gt;setClass(&#039;MyService&#039;);
            $soap-&gt;handle();
        }
    }
}</pre>
<p>In questo esempio ho predisposto che la classe del servizio si chiama &#8220;MyService&#8221;. Ne pubblico un esempio di implementazione:</p>
<pre class="brush: php; gutter: true">&lt;?php
class MyService
{
    /**
     * @param string $name
     * @return MyObj
    public function getFromMyMethod($name)
    {
        $o = new MyObj();
        $o-&gt;name = &quot;hello&quot;;

        return $o;
    }
}</pre>
<pre class="brush: php; gutter: true">&lt;?php
class MyObj
{
    /**
     * @var string $name
     */
    public $name;
}</pre>
<p>Come possiamo vedere non è molto complesso realizzare il server. Le modifiche necessarie sono solo relative al BindingStyle ed al OperationBodyStyle che devono essere rispettivamente di tipo &#8220;document&#8221; ed utilizzare il &#8220;literal&#8221;. Un altra particolarità è il tipo di definizione per l&#8217;autodiscover che è un &#8220;ArrayOfTypeSequence&#8221;.</p>
<p>A questo punto è possibile generare il codice Java o C# sul WSDL generato dall&#8217;autodiscover Zend. Otterremo un servizio con un metodo &#8220;getFromMyMethod&#8221; che restituisce un oggetto &#8220;MyObj&#8221; contente una proprietà di tipo &#8220;string&#8221; con nome &#8220;name&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://walterdalmut.com/2012/02/15/zend_soap_server-compatibile-con-java-e-c-sharp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capistrano &#8211; Remote multi-server automation tool</title>
		<link>http://walterdalmut.com/2012/01/30/capistrano-remote-multi-server-automation-tool/</link>
		<comments>http://walterdalmut.com/2012/01/30/capistrano-remote-multi-server-automation-tool/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 22:40:45 +0000</pubDate>
		<dc:creator>Walter Dal Mut</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[capistrano]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://walterdalmut.com/?p=1105</guid>
		<description><![CDATA[Avere un cluster di diversi server non è mai semplice da gestire, specie ...]]></description>
			<content:encoded><![CDATA[<p>Avere un cluster di diversi server non è mai semplice da gestire, specie per quello che riguarda l&#8217;aggiornamento delle applicazioni web sviluppate.</p>
<p><span id="more-1105"></span></p>
<p>Personalmente seguo un sistema di pubblicazione basato si sistemi di versioning, tipicamente utilizzo GIT ma spesso anche SVN. Rimane comunque un problema dover andare a gestire gli aggiornamenti quando si hanno diversi server in cluster. Per risolvere questo problema ho navigato diverse soluzioni, anche provando hooks di post commit, sia di GIT che di SVN ma spesso è necessario realizzare anche altre operazioni, quindi mi sono mosso verso i Rakefile per automatizzare procedure, oppure sui files Ant. Molto flessibili ed ottimi, forse Rake è anche più elegante rispetto agli Ant files. Manca però sempre qualcosa, soprattutto per quello che riguarda un primo deploy ed altri aspetti.</p>
<p>Mi sono quindi deciso ed ho iniziato a studiare da qualche tempo Capistrano che è realizzato in Ruby ed ha proprio come obiettivo l&#8217;automazione di processi remoti. Capistrano è un prodotto eccezionale, sono favorevolmente colpito ed ora dopo averlo messo in produzione per qualche tempo credo proprio di non poterne fare più a meno.</p>
]]></content:encoded>
			<wfw:commentRss>http://walterdalmut.com/2012/01/30/capistrano-remote-multi-server-automation-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amazon DynamoDB &#8211; NOSQL Database</title>
		<link>http://walterdalmut.com/2012/01/28/amazon-dynamodb-nosql-database/</link>
		<comments>http://walterdalmut.com/2012/01/28/amazon-dynamodb-nosql-database/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 18:39:58 +0000</pubDate>
		<dc:creator>Walter Dal Mut</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[dynamodb]]></category>
		<category><![CDATA[Elastic MapReduce]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[s3]]></category>
		<category><![CDATA[simpledb]]></category>

		<guid isPermaLink="false">http://walterdalmut.com/?p=1102</guid>
		<description><![CDATA[Da pochi giorni Amazon ha rilasciato un nuovo servizio: Amazon DynamoDB il document ...]]></description>
			<content:encoded><![CDATA[<p>Da pochi giorni Amazon ha rilasciato un nuovo servizio: Amazon DynamoDB il document store ottimizzato sulle prestazioni e che si integra in pieno con gli altri servizi Amazon (S3, Elastic-Map-Reduce).</p>
<p><span id="more-1102"></span></p>
<p>La prima domanda che mi sono posto dopo il lancio di DynamoDB è stata sul futuro di SimpleDB e subito sulle pagine di Amazon possiamo trovare una eloquente digressione sulle <a title="Amazon - DynamoDB e SimpleDB" href="http://aws.amazon.com/dynamodb/#whentousedynamodb" target="_blank">differenze</a>, dove in pratica si evince che DynamoDB è realizzato per essere veloce e scalabile.</p>
<p>DynamoDB sembra essere un prodotto fantastico e da qualche giorno mi dedico allo studio delle sue funzionalità e la possibilità di integrarsi con i vari servizi di Amazon come S3 ed Elastic MapReduce.</p>
<p>Spero di avere il tempo presto di scrivere e mostrare qualche esempio sull&#8217;utilizzo di questa piattaforma che farà sicuramente parlare di se nel futuro.</p>
]]></content:encoded>
			<wfw:commentRss>http://walterdalmut.com/2012/01/28/amazon-dynamodb-nosql-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend\Di impressioni &#8211; ZF2</title>
		<link>http://walterdalmut.com/2012/01/08/zend-di-impressioni-zf2/</link>
		<comments>http://walterdalmut.com/2012/01/08/zend-di-impressioni-zf2/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 14:25:42 +0000</pubDate>
		<dc:creator>Walter Dal Mut</dc:creator>
				<category><![CDATA[Applicazioni]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tests]]></category>
		<category><![CDATA[Dependency Injection]]></category>
		<category><![CDATA[DiC]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[Zend\Di]]></category>
		<category><![CDATA[Zend_Di]]></category>
		<category><![CDATA[zf2]]></category>

		<guid isPermaLink="false">http://walterdalmut.com/?p=1088</guid>
		<description><![CDATA[Il panorama Zend è in completo cambiamento. La recente uscita della beta2 (seconda ...]]></description>
			<content:encoded><![CDATA[<p>Il panorama Zend è in completo cambiamento. La recente uscita della beta2 (seconda di un ciclo di quattro beta) del framework di seconda generazione marchiato Zend ha posto le basi per iniziare a muovere i primi passi nelle nuove implementazioni e funzionalità disponibili, in particolare il DiC (Dependency Injection Containers).</p>
<p><span id="more-1088"></span></p>
<p>Il componente è molto flessibile e configurabile, questo lo rende ottimo per l&#8217;inziezione delle dipendenze. In particolare il componente è diviso in diverse sezioni e può essere configurato in diverse modalità per potergli far dirigere l&#8217;iniezione delle dipendenze.</p>
<p>Il metodo più semplice e veloce è utilizzare la definizione forte dei tipi in modo che autonomamente possa capire quali oggetti andare ad iniettare per costruire tutte le dipendenze. Le parti non fortemente dichiarate, come stringhe e tipi  base (scalari), possono essere dichiarate nel configuratore e ottenere un risultato semplice e veloce.</p>
<p>Possiamo vedere un esempio molto chiaro proposto da Ralph Schindler (puoi controllare l&#8217;originale sull&#8217;account github di Ralph Schindler)</p>
<pre class="brush: php">
&lt;?php

namespace MovieApp {

    class Lister implements FinderAwareInterface {
        public $finder;
        public function setFinder(Finder $finder){
            $this-&gt;finder = $finder;
        }
    }

    class Finder {
        public function findAllByName($name) {}
    }

    interface FinderAwareInterface {
        public function setFinder(Finder $finder);
    }
}

namespace {
    // bootstrap
    // ... start autoloader

    $di = new Zend\Di\Di;
    $lister = $di-&gt;get(&#039;MovieApp\Lister&#039;);

    // expression to test
    $works = ($lister-&gt;finder instanceof MovieApp\Finder);

    // display result
    echo (($works) ? &#039;It works!&#039; : &#039;It DOES NOT work!&#039;);

}
</pre>
<p>L&#8217;applicazione esegue la &#8220;get&#8221; ed è compito del DiC andare a costruire tutte le dipendenze e restituire l&#8217;oggetto correttamente inizializzato.</p>
]]></content:encoded>
			<wfw:commentRss>http://walterdalmut.com/2012/01/08/zend-di-impressioni-zf2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doctrine2 ORM impressioni.</title>
		<link>http://walterdalmut.com/2012/01/06/doctrine2-orm-impressioni/</link>
		<comments>http://walterdalmut.com/2012/01/06/doctrine2-orm-impressioni/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 16:59:23 +0000</pubDate>
		<dc:creator>Walter Dal Mut</dc:creator>
				<category><![CDATA[Applicazioni]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://walterdalmut.com/?p=1081</guid>
		<description><![CDATA[Doctrine è un ORM (Object Relational Mapper) ovvero mappa ad oggetti una struttura ...]]></description>
			<content:encoded><![CDATA[<p>Doctrine è un ORM (Object Relational Mapper) ovvero mappa ad oggetti una struttura relazionale tipica dei Database comuni come MySQL, Oracle, SQLite etc. Ho iniziato con Doctrine 1.2 diversi anni fa ma non ho mai voluto spingere su questa tecnologia a causa di alcuni dubbi sulla generazione dei modelli e problematiche su database di grandi dimensioni. Visto che è da poco diventata &#8220;stable&#8221; la release 2 di questo famoso ed ottimo strumento non potevo non fare un test semplice di utilizzo.</p>
<p><span id="more-1081"></span></p>
<p>La cosa che mi ha colpito subito di questo nuovo sistema è la possibilità di utilizzare la &#8220;Annotations&#8221; invece di utilizzare files XML oppure YAML per la generazione dei modelli. Questo mi rende molto contento in quanto non sono costretto a delegare le informazioni in files paralleli ma posso realizzare una mappatura manuale in modo veloce e mantenendo collegata l&#8217;informazione di come è strutturata la base sui modelli.</p>
<p>La direzione dei modelli non è quindi più collegata ad un utilizzo pesante dell&#8217;ereditarietà come nella release precedente ma tramite un &#8220;Entity Manager&#8221; che si occupa di giostrare i nostri modelli.</p>
<p>Ho reso disponibile su <a title="Doctrine Examples" href="https://github.com/wdalmut/my-doctrine2-examples" target="_blank">github</a> i miei primi passi con questa seconda versione di Doctrine per approfondire l&#8217;argomento visto la notevole lista di funzionalità che sono state create dal team di sviluppo che lo rendono uno strumento molto appetibile!</p>
]]></content:encoded>
			<wfw:commentRss>http://walterdalmut.com/2012/01/06/doctrine2-orm-impressioni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Still Maintained &#8211; Risorse per l&#8217;open source</title>
		<link>http://walterdalmut.com/2011/12/20/still-mantained-risorse-per-lopen-source/</link>
		<comments>http://walterdalmut.com/2011/12/20/still-mantained-risorse-per-lopen-source/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 01:30:07 +0000</pubDate>
		<dc:creator>Walter Dal Mut</dc:creator>
				<category><![CDATA[Applicazioni]]></category>
		<category><![CDATA[Generali]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[stillmantained]]></category>

		<guid isPermaLink="false">http://walterdalmut.com/?p=1077</guid>
		<description><![CDATA[Stillmaintained.com è una risorsa molto utile per chi sviluppa progetti open source utilizzando ...]]></description>
			<content:encoded><![CDATA[<p>Stillmaintained.com è una risorsa molto utile per chi sviluppa progetti open source utilizzando <a title="GitHub" href="http://github.com" target="_blank">GitHub</a>.</p>
<p><span id="more-1077"></span></p>
<p><a title="Still Maintained" href="http://stillmaintained.com" target="_blank">Stillmaintained.com</a> è un servizio utile per informare gli utilizzatori dei nostri prodotti opensource sullo stato del prodotto, ovvero se è ancora mantenuto (still mantained), non mantenuto ed in cerca di qualcuno che lo gestica, completamente non mantenuto etc etc.</p>
<p>Ho già attivato alcuni progetti per l&#8217;utilizzo di questa risorsa come <a title="Zend WordPress" href="https://github.com/wdalmut/zend-wordpress" target="_blank">Zend WordPress</a> e <a title="PHP Diff" href="https://github.com/wdalmut/php-diff" target="_blank">PHP Diff</a> che sono disponibili sul mio account github.</p>
]]></content:encoded>
			<wfw:commentRss>http://walterdalmut.com/2011/12/20/still-mantained-risorse-per-lopen-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Travis Continuous Integration</title>
		<link>http://walterdalmut.com/2011/12/16/travis-continuous-integration-php/</link>
		<comments>http://walterdalmut.com/2011/12/16/travis-continuous-integration-php/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 22:28:50 +0000</pubDate>
		<dc:creator>Walter Dal Mut</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tests]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[phpundercontrol]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[travis]]></category>

		<guid isPermaLink="false">http://walterdalmut.com/?p=1062</guid>
		<description><![CDATA[Lavorando con git, su GitHub.com, sono venuto a conoscenza di TravisCI, ovvero Travis ...]]></description>
			<content:encoded><![CDATA[<p>Lavorando con git, su <a title="GitHub Social Coding" href="http://github.com" target="_blank">GitHub.com</a>, sono venuto a conoscenza di TravisCI, ovvero Travis Continuous Integration. Mi sono occupato diverse volte di integrazione continua durante lo sviluppo e ancora di più di testing PHP con PHPUnit ed in java tramite jUnit.</p>
<p><span id="more-1062"></span></p>
<p>Ho analizzato ed utilizzato PHPUnderControl per la continuous integration in PHP ed ho iniziato a vedere anche Jenkins sempre per il PHP. Il primo ostacolo è sempre l&#8217;hosting del sistema di controllo e la continua e costante manutenzione che è necessaria su tutti i sistemi che porta via già il poco tempo a disposizione della giornata. Travis CI è una soluzione di Continuous Integration per prodotti completamente OpenSource con una connessione diretta su GitHUB.</p>
<p>La soluzione sviluppata dal team di Travis è semplice elegante e molto funzionale anche se ancora in Alpha state. Allego alcune screen-shot a questo articolo per farvi saggiare la bontà dello strumento.</p>

<a href='http://walterdalmut.com/2011/12/16/travis-continuous-integration-php/broken-wdalmutupcloo-php-sdk15-2-0-ebcf94d-walter-dalmutgmail-com-gmail/' title='[Broken] wdalmut:upcloo-php-sdk#15 (2.0 - ebcf94d)'><img width="150" height="150" src="http://walterdalmut.com/wp-content/uploads/2011/12/Broken-wdalmutupcloo-php-sdk15-2.0-ebcf94d-walter.dalmut@gmail.com-Gmail-150x150.png" class="attachment-thumbnail" alt="[Broken] wdalmut:upcloo-php-sdk#15 (2.0 - ebcf94d)" title="[Broken] wdalmut:upcloo-php-sdk#15 (2.0 - ebcf94d)" /></a>
<a href='http://walterdalmut.com/2011/12/16/travis-continuous-integration-php/diaspora-continuous-integration-server/' title='Diaspora Continuous Integration Server'><img width="150" height="150" src="http://walterdalmut.com/wp-content/uploads/2011/12/Diaspora-Continuous-Integration-Server-150x150.png" class="attachment-thumbnail" alt="Diaspora Continuous Integration Server" title="Diaspora Continuous Integration Server" /></a>
<a href='http://walterdalmut.com/2011/12/16/travis-continuous-integration-php/schermata-2011-12-16-a-20-29-45/' title='Schermata 2011-12-16 a 20.29.45'><img width="150" height="150" src="http://walterdalmut.com/wp-content/uploads/2011/12/Schermata-2011-12-16-a-20.29.45-150x150.png" class="attachment-thumbnail" alt="Schermata 2011-12-16 a 20.29.45" title="Schermata 2011-12-16 a 20.29.45" /></a>
<a href='http://walterdalmut.com/2011/12/16/travis-continuous-integration-php/schermata-2011-12-16-a-20-30-12/' title='Schermata 2011-12-16 a 20.30.12'><img width="150" height="150" src="http://walterdalmut.com/wp-content/uploads/2011/12/Schermata-2011-12-16-a-20.30.12-150x150.png" class="attachment-thumbnail" alt="Schermata 2011-12-16 a 20.30.12" title="Schermata 2011-12-16 a 20.30.12" /></a>
<a href='http://walterdalmut.com/2011/12/16/travis-continuous-integration-php/schermata-2011-12-16-a-20-30-16/' title='Schermata 2011-12-16 a 20.30.16'><img width="150" height="150" src="http://walterdalmut.com/wp-content/uploads/2011/12/Schermata-2011-12-16-a-20.30.16-150x150.png" class="attachment-thumbnail" alt="Schermata 2011-12-16 a 20.30.16" title="Schermata 2011-12-16 a 20.30.16" /></a>
<a href='http://walterdalmut.com/2011/12/16/travis-continuous-integration-php/fixed-wdalmutupcloo-php-sdk16-2-0-9cbc9f6-walter-dalmutgmail-com-gmail/' title='[Fixed] wdalmut:upcloo-php-sdk#16 (2.0 - 9cbc9f6)'><img width="150" height="150" src="http://walterdalmut.com/wp-content/uploads/2011/12/Fixed-wdalmutupcloo-php-sdk16-2.0-9cbc9f6-walter.dalmut@gmail.com-Gmail-150x150.jpg" class="attachment-thumbnail" alt="[Fixed] wdalmut:upcloo-php-sdk#16 (2.0 - 9cbc9f6)" title="[Fixed] wdalmut:upcloo-php-sdk#16 (2.0 - 9cbc9f6)" /></a>

<p>Travis si configura con un semplice file YAML con un nome di default <strong>.travis.yml</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://walterdalmut.com/2011/12/16/travis-continuous-integration-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silex PHP micro-framework</title>
		<link>http://walterdalmut.com/2011/12/03/silex-php-micro-framework/</link>
		<comments>http://walterdalmut.com/2011/12/03/silex-php-micro-framework/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 14:15:42 +0000</pubDate>
		<dc:creator>Walter Dal Mut</dc:creator>
				<category><![CDATA[Applicazioni]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tests]]></category>
		<category><![CDATA[phar]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[silex]]></category>
		<category><![CDATA[twig]]></category>

		<guid isPermaLink="false">http://walterdalmut.com/?p=1050</guid>
		<description><![CDATA[Silex è un micro-framework scritto da Fabien Potencier, credo sull&#8217;onda di SinatraRB ma potrei ...]]></description>
			<content:encoded><![CDATA[<p>Silex è un micro-framework scritto da Fabien Potencier, credo sull&#8217;onda di <a title="Sinatra Ruby" href="http://www.sinatrarb.com/" target="_blank">SinatraRB</a> ma potrei sbagliare. L&#8217;obbiettivo di Silex è la semplicità con molte funzionalità avanzate che lo rendono flessibile ed adattabile a tantissime occasioni di svilupppo.</p>
<p><span id="more-1050"></span></p>
<p>Silex è traghettato agli sviluppatori, oltre che come codice sorgente, come pacchetto Phar, il nuovo gestore pacchetti di PHP, credo ispirato ai JAR (ma potrei sbagliarmi anche qui).</p>
<p>Il funzionamento base di Silex ruota intorno alle closures PHP introdotte nelle versioni di PHP 5.3 insieme ai namespaces. Un esempio introduttivo è veramente semplice ed include già una potenza e flessibilità incredibile&#8230;</p>
<pre class="brush:php">&lt;?php
require_once __DIR__.&#039;/silex.phar&#039;;

$app = new Silex\Application();

$app-&gt;get(&#039;/hello/{name}&#039;, &lt;strong&gt;function ($name) use ($app) { return &#039;Hello &#039;.$app-&gt;escape($name); }&lt;/strong&gt;);

$app-&gt;run();</pre>
<p>Dopo aver caricato il pacchetto viene creata l&#8217;applicazione e tramite il router viene insegnato all&#8217;applicazione che esiste una &#8220;strada&#8221; di nome &#8220;hello&#8221; che ha un parametro di nome &#8220;name&#8221; che viene gestito nella closure evidenziata.</p>
<p>Se proviamo a chiamare la strada indicata vedremo una pagina web composta semplicemente da &#8220;Hello&#8221; con un nome indicato nel parametro, quindi se chiamo &#8220;/hello/walter&#8221;  vedremo in uscita &#8220;Hello walter&#8221;. Esempio semplice ma già carico di significati e interessanti proprietà.</p>
<p>Le funzionalità sono veramente tante per Silex, come l&#8217;aggiunta di Twig come gestore template e altri providers per la gestione databases e tanto tanto altro come  una gestione in controllers per avvicinarsi ad un pattern MVC completo.</p>
<p>Vediamo ora un esempio più complicato di utilizzo di Silex con Twig ed un provider per incapsulare delle sezioni.</p>
<pre class="brush: php; gutter: true">&lt;?php
require_once __DIR__.&#039;/silex.phar&#039;;

$app = new Silex\Application();

error_reporting(E_ALL);
ini_set(&#039;display_errors&#039;, &#039;On&#039;);

$app-&gt;register(new Silex\Provider\TwigServiceProvider(), array(
    &#039;twig.path&#039;       =&gt; __DIR__.&#039;/views&#039;,
    &#039;twig.class_path&#039; =&gt; __DIR__.&#039;/vendor/twig/lib&#039;,
));

$app-&gt;get(&#039;/&#039;, function(){echo &quot;Hello&quot;;});

$app[&#039;autoloader&#039;]-&gt;registerNamespace(&#039;Wdm&#039;, __DIR__);
$app-&gt;mount(&#039;/blog&#039;, new Wdm\HelloControllerProvider());

$app-&gt;get(&#039;/hello/{name}&#039;, function ($name) use ($app) {
    return $app[&#039;twig&#039;]-&gt;render(&#039;hello.twig&#039;, array(
        &#039;name&#039; =&gt; $name,
        &#039;other&#039; =&gt; array(&#039;eg&#039; =&gt; &#039;walter-eg&#039;)
    ));
});

$app-&gt;run();</pre>
<p>Vediamo che la direttiva &#8220;register&#8221; aggiunge un nuovo Service Provider, in questo caso Twig per la gestione dei templates. Successivamente viene introdotta l&#8217;HelloControllerProvider per la gestione della sezione chiamata &#8220;blog&#8221;.</p>
<p>Il Controller Provider è molto semplice e ne vediamo subito il contenuto</p>
<pre class="brush: php; gutter: true">&lt;?php
namespace Wdm;

use Silex\Application;
use Silex\ControllerProviderInterface;
use Silex\ControllerCollection;

class HelloControllerProvider implements ControllerProviderInterface
{
    public function connect(Application $app)
    {
        $controllers = new ControllerCollection();

        $controllers-&gt;get(&#039;/&#039;, function (Application $app) {
            return $app-&gt;redirect(&#039;/hello/wally&#039;);
        });
        $app-&gt;get(&#039;/blog/{name}&#039;, function ($name) use ($app) {
            return $app[&#039;twig&#039;]-&gt;render(&quot;blog/&quot; . $name . &#039;.twig&#039;, array(
                &#039;name&#039; =&gt; $name,
                &#039;other&#039; =&gt; array(&#039;eg&#039; =&gt; &#039;walter-eg&#039;)
            ));
        });

        return $controllers;
    }
}</pre>
<p>Silex è veramente flessibile e molto interessante, spero di poterlo introdurre presto nell&#8217;ambito dei progetti che incontro sulla strada&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://walterdalmut.com/2011/12/03/silex-php-micro-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

