<?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>in Web we Trust &#187; git</title>
	<atom:link href="http://blog.danilosanchi.net/tag/git/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.danilosanchi.net</link>
	<description>storie, pensieri, idee...</description>
	<lastBuildDate>Tue, 22 Apr 2025 13:55:16 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.39</generator>
	<item>
		<title>Pioritree e Silex</title>
		<link>http://blog.danilosanchi.net/2013/01/27/pioritree-e-silex/</link>
		<comments>http://blog.danilosanchi.net/2013/01/27/pioritree-e-silex/#comments</comments>
		<pubDate>Sun, 27 Jan 2013 19:17:21 +0000</pubDate>
		<dc:creator><![CDATA[Danilo]]></dc:creator>
				<category><![CDATA[Idee]]></category>
		<category><![CDATA[Sviluppo]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[silex]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[time]]></category>
		<category><![CDATA[todo]]></category>

		<guid isPermaLink="false">http://blog.danilosanchi.net/?p=123</guid>
		<description><![CDATA[Circa due anni fa stavo (finalmente) studiando i design pattern su Head First Design Patterns, un libro semplice, pieno di figure, sicuramente più accessibile (ai programmatori un po&#8217; meno svegli) del ben più noto Design Patterns: Elementi per il riuso di &#8230; <a href="http://blog.danilosanchi.net/2013/01/27/pioritree-e-silex/">Continua a leggere <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.danilosanchi.net/2013/01/27/vino-vecchio-nella-botte-nuova/post_it_tree/" rel="attachment wp-att-134"><img class="alignright  wp-image-134" alt="post_it_tree" src="http://blog.danilosanchi.net/current/wp/wp-content/uploads/2013/01/post_it_tree-267x300.jpg" width="214" height="240" /></a>Circa due anni fa stavo (finalmente) studiando i <strong>design pattern</strong> su <em><a title="Head First Design Patterns" href="http://www.headfirstlabs.com/books/hfdp/" target="_blank">Head First Design Patterns</a></em>, un libro semplice, pieno di figure, sicuramente più accessibile (ai programmatori un po&#8217; meno svegli) del ben più noto<em> <a title="Design Patterns" href="http://en.wikipedia.org/wiki/Design_Patterns" target="_blank">Design Patterns: Elementi per il riuso di software ad oggetti</a></em>, il quale è più un <strong>catalogo</strong> da consultare che un testo di <strong>apprendimento</strong>.</p>
<p>Beh, avevo letto del <strong><a title="Composite Pattern" href="http://en.wikipedia.org/wiki/Composite_pattern" target="_blank">Composite Pattern</a></strong> e mi era venuta in mente un&#8217;<strong>idea</strong> per metter in pratica quanto appreso.<br />
Cercavo un modo per <strong>dedicare il giusto tempo</strong> alle mille attività che dovevo/volevo svolgere senza trascurare nulla, ma soprattutto senza trascurare le cose più importanti:</p>
<p><em>Quanto tempo devo dedicare alla pulizia della casa? Quanto ne posso dedicare alle attività della mia associazione? Ma della pulizia della casa, quanto tempo dedico alla cucina e quanto alla camera da letto?</em></p>
<p><em><span id="more-123"></span></em></p>
<p>Insomma volevo costruire una <strong>gerarchia</strong> (un albero) di <strong>attività</strong> da svolgere, in cui ogni attività potesse essere suddivisa in sottoattività e così via. Ad ogni attività avrei quindi assegnato un <strong>livello di priorità</strong> (da 1 a 10 per esempio). Avrei infine scelto un <strong>monte ore</strong> di riferimento (ad esempio 100 ore) da <strong>distribuire automaticamente</strong> a ciascuna attività in base alle loro priorità. Il <strong>Composite Pattern</strong> era perfetto per gestire <strong>gerarchie di elementi</strong> e avrei potuto sperimentare un approccio <strong><a title="Test First" href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">TDD</a></strong>. Il nome che gli avrei dato sarebbe stato <strong>Prioritree</strong>.</p>
<p>Non mi ci volle molto per realizzare un <strong>prototipo. </strong>Sarebbe stato impossibile implementare le classi che gestiscono una gerarchia senza l&#8217;ausilio di <strong>test unitari</strong>.<br />
Praticamente si doveva definire la propria gerarchia di attività con le loro priorità ed il monte ore assegnato su un file <strong>Yaml</strong>:</p>
<pre><span style="color: #0000ff;">// mytasks.yml</span>
<span style="color: #008000;">Root</span>:
  data: timeBox=100
  children:
     <span style="color: #008000;">Casa</span>:
        data: priority=10
        children:
           <span style="color: #008000;">Camera da letto</span>:
              data: priority=6
           <span style="color: #008000;">Bagno</span>:
              data: priority=10
           <span style="color: #008000;">Cucina</span>:
              data: priority=8
     <span style="color: #008000;">Associazione</span>:
        data: priority=6
        children:
           <span style="color: #008000;">Sito</span>:
              data: priority=2
           <span style="color: #008000;">Facebook</span>:
              data: priority=4
           <span style="color: #008000;">Eventi</span>:
              data: priority=10</pre>
<p>eseguendo un semplice <em>php index.php </em>il file veniva arricchito con le ore assegnate a ciascuna attività.</p>
<pre><span style="color: #0000ff;">// mytasks.yml</span>
<span style="color: #008000;">Root</span>:
   data: usedTime=0; timeBox=100; progress=0%; time=0/100
   children:
      <span style="color: #008000;">Casa</span>:
         data: usedTime=0; priority=10; progress=0%; time=0/62.5
         children:
            <span style="color: #008000;">Camera da letto</span>:
               data: usedTime=0; priority=6; progress=0%; time=0/15.63
            <span style="color: #008000;">Bagno</span>:
               data: usedTime=0; priority=10; progress=0%; time=0/26.04
            <span style="color: #008000;">Cucina</span>:
               data: usedTime=0; priority=8; progress=0%; time=0/20.83
      <span style="color: #008000;">Associazione</span>:
         data: usedTime=0; priority=6; progress=0%; time=0/37.5
         children:
            <span style="color: #008000;">Sito</span>:
               data: usedTime=0; priority=2; progress=0%; time=0/4.69
            <span style="color: #008000;">Facebook</span>:
               data: usedTime=0; priority=4; progress=0%; time=0/9.38
            <span style="color: #008000;">Eventi</span>:
               data: usedTime=0; priority=10; progress=0%; time=0/23.44</pre>
<p>Successivamente era possibile specificare il <strong>tempo utilizzato</strong> per ciascuna attività  a qualsiasi livello di dettaglio impostando <em>usedTime;</em> rilanciando <em>php index.php</em> veniva aggiornato il progresso percentuale e le ore assegnate su tutte le attività discendenti ed ascendenti.</p>
<pre><span style="color: #0000ff;">// mytasks.yml</span>
<span style="color: #008000;">Root</span>:
   data: usedTime=0; timeBox=100; progress=<span style="color: #0000ff;"><strong>11%</strong></span>; time=<span style="color: #0000ff;"><strong>11</strong></span>/100
   children:
      <span style="color: #008000;">Casa</span>:
         data: usedTime=<strong><span style="color: #ff0000;">2</span></strong>; priority=10; progress=<span style="color: #0000ff;"><strong>17.6%</strong></span>; time=<span style="color: #0000ff;"><strong>11</strong></span>/62.5
         children:
            <span style="color: #008000;">Camera da letto</span>:
               data: usedTime=<span style="color: #ff0000;"><strong>4</strong></span>; priority=6; progress=<span style="color: #0000ff;"><strong>29.87%</strong></span>; time=<span style="color: #0000ff;"><strong>4.67</strong></span>/15.63
            <span style="color: #008000;">Bagno</span>:
               data: usedTime=<span style="color: #ff0000;"><strong>5</strong></span>; priority=10; progress=<span style="color: #0000ff;"><strong>21.76%</strong></span>; time=<span style="color: #0000ff;"><strong>5.67</strong></span>/26.04
            <span style="color: #008000;">Cucina</span>:
               data: usedTime=0; priority=8; progress=<span style="color: #0000ff;"><strong>3.2%</strong></span>; time=<span style="color: #0000ff;"><strong>0.67</strong></span>/20.83
      <span style="color: #008000;">Associazione</span>:
         data: usedTime=0; priority=6; progress=0%; time=0/37.5
         children:
            <span style="color: #008000;">Sito</span>:
               data: usedTime=0; priority=2; progress=0%; time=0/4.69
            <span style="color: #008000;">Facebook</span>:
               data: usedTime=0; priority=4; progress=0%; time=0/9.38
            <span style="color: #008000;">Eventi</span>:
               data: usedTime=0; priority=10; progress=0%; time=0/23.44</pre>
<p>Era possibile cambiare le priorità delle attività oppure cambiare la struttura dell&#8217;albero in qualsiasi momento: le ore assegnate cambiavano, nessun problema.</p>
<p>Faceva altre cose ovviamente, come resettare il monte ore portandosi dietro i <em>debiti</em> e i <em>crediti</em> del monte ore precedente, ma l&#8217;idea in soldoni era questa.</p>
<p>Utilizzai come contenitore un <strong>microframework</strong> che stavo realizzando per i miei progetti personali ispirato a quanto avevo letto di <a title="Symfony 1.x" href="http://symfony.com/legacy" target="_blank"><strong>Symfony</strong></a> e dell&#8217;archiettura <a title="MVC" href="http://it.wikipedia.org/wiki/Model-View-Controller" target="_blank"><strong>MVC</strong></a>. Solo l&#8217;anno scorso imparai ad utilizzare <a title="Git" href="http://git-scm.com/" target="_blank"><strong>Git</strong></a> e <a title="Github" href="https://github.com" target="_blank"><strong>Github</strong></a> e vi pubblicai il mio Prioritree.</p>
<p>Quest&#8217;estate, però, ho imparato ad utilizzare <a title="Silex" href="http://silex.sensiolabs.org/" target="_blank"><strong>Silex</strong></a>, il fratellino minore di <a title="Symfony 2" href="http://symfony.com" target="_blank"><strong>Symfony 2</strong></a>, grazie ad un lavoretto con <a title="Ideato" href="http://www.ideato.it" target="_blank"><strong>Ideato</strong></a>. Quindi ho pensato di riprendere il Prioritree e sostituire il mio incompleto e rozzo microframework con Silex, al fine di costruire in un secondo momento una&#8217;interfaccia web decente per quello che ora è solo un set di classi.</p>
<p>Grazie ai vecchi test il <strong>porting</strong> è stato rapido e indolore e questo è il <a title="Prioritree" href="https://github.com/danielsan80/Prioritree" target="_blank"><strong>risultato</strong></a>.</p>
<p>Ho cercato di fare <em>commit</em> piccole e significative in modo da mettere in evidenza tutti i passaggi fatti per cambiare contenitore. I tag <a title="v1.0" href="https://github.com/danielsan80/Prioritree/tree/v1.0" target="_blank"><strong>v1.0</strong></a> e <a title="v2.0" href="https://github.com/danielsan80/Prioritree/tree/v2.0" target="_blank"><strong>v2.0</strong></a>  corrispondono rispettivamente al Prioritree prima e dopo il <em>travaso</em> in Silex.</p>
<p>Ora manca il <em>Readme</em> in <em>markdown</em> e buttar su un&#8217;interfaccia web semplice semplice per poterlo pubblicare e rendere disponibile a tutti. E&#8217; la prima volta che a distanza di anni riesco a riprendere del vecchio codice e a riutilizzarlo senza che mi faccia schifo. <img src="http://blog.danilosanchi.net/current/wp/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danilosanchi.net/2013/01/27/pioritree-e-silex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La mia macchina</title>
		<link>http://blog.danilosanchi.net/2012/12/05/la-mia-macchina/</link>
		<comments>http://blog.danilosanchi.net/2012/12/05/la-mia-macchina/#comments</comments>
		<pubDate>Wed, 05 Dec 2012 20:00:11 +0000</pubDate>
		<dc:creator><![CDATA[Danilo]]></dc:creator>
				<category><![CDATA[Sviluppo]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[capifony]]></category>
		<category><![CDATA[capistrano]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[phing]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://blog.danilosanchi.net/?p=28</guid>
		<description><![CDATA[Tempo fa mi sono fatto un reference con tutto ciò che devo fare per configurare la una macchina di sviluppo e ho pensato che, riadattandolo un po&#8217;, sarebbe stato bello condividerlo. Questo reference è per coloro che sviluppano in PHP &#8230; <a href="http://blog.danilosanchi.net/2012/12/05/la-mia-macchina/">Continua a leggere <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.danilosanchi.net/current/wp/wp-content/uploads/2012/11/Bianchina_bda-vi.jpg"><img class="alignright size-medium wp-image-87" title="Bianchina" alt="" src="http://blog.danilosanchi.net/current/wp/wp-content/uploads/2012/11/Bianchina_bda-vi-300x194.jpg" width="300" height="194" /></a>Tempo fa mi sono fatto un <em>reference</em> con tutto ciò che devo fare per configurare la una <strong><em>macchina di sviluppo</em></strong> e ho pensato che, riadattandolo un po&#8217;, sarebbe stato bello condividerlo. Questo reference è per coloro che sviluppano in <strong><em>PHP</em></strong> e vogliono dedicarsi all&#8217;aspetto creativo di questa attività, lasciando le cose ripetitive alle macchine come è giusto che sia.<br />
Sicuramente non è completo, e qualcuno salterà alcuni passi che riterrà poco utili.<br />
Potrà subire aggiornamenti. Osservazioni ed obiezioni saranno ben gradite.</p>
<p><span id="more-28"></span></p>
<p><em>Nota: quando un comando apre un editor di testo segue il testo da inserirvi indentato.</em></p>
<h2>Hardware</h2>
<p>Un portatile Asus X54C con <strong> disco a stato solido </strong> e 6Gb di RAM.</p>
<p>Il DSS è un buon investimento dato che fa risparmiare da subito tanto tempo e stress/frustrazione, quindi lo consiglio vivamente.</p>
<h2>Sistema Operativo</h2>
<p>Ubuntu 12.x</p>
<h2>LAMP</h2>
<p>L&#8217;installazione di un sistema LAMP si trova ovunque come per esempio <a href="http://www.howtoforge.com/ubuntu_lamp_for_newbies"> qui </a> . Ecco i comandi in rapida sequenza senza ulteriori spiegazioni:</p>
<pre class="font:courier-new toolbar:2 striped:false lang:sh highlight:0 decode:true crayon-selected">sudo apt-get install apache2</pre>
<p><em> verifica: Apache funziona?<br />
</em> <span style="font-family: 'courier new', courier;"> Browser -&gt; http://localhost </span></p>
<pre class="nums:false decode-attributes:false lang:sh decode:true">$ sudo apt-get install php5 libapache2-mod-php5
$ sudo service apache2 restart
$ sudo gedit /var/www/testphp.php
    &lt;?php phpinfo(); ?&gt;</pre>
<p><em> verifica: PHP funziona?<br />
</em><span style="font-family: 'courier new', courier;">Browser -&gt; http://localhost/test.php</span></p>
<pre>$ sudo apt-get install mysql-server
$ sudo apt-get install libapache2-mod-auth-mysql php5-mysql
$ sudo apt-get install phpmyadmin
$ sudo service apache2 restart</pre>
<h2>PhpMyAdmin</h2>
<p>Abbiamo già installato PHPMyAdmin. Rendiamolo accessibile da<br />
<span style="font-family: 'courier new', courier;">http://phpmyadmin</span></p>
<pre>$ sudo gedit /etc/apache2/sites-available/phpmyadmin
    &lt;VirtualHost *:80&gt;
        ServerAdmin myemail@email.com
        ServerName phpmyadmin
        ServerAlias phpmyadmin.local.com
        DocumentRoot /usr/share/phpmyadmin
        DirectoryIndex app.php index.php index.html
        &lt;Directory /usr/share/phpmyadmin&gt;
            AllowOverride all
        &lt;/Directory&gt;
        ErrorLog ${APACHE_LOG_DIR}/phpmyadmin.error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg
        LogLevel notice
        CustomLog ${APACHE_LOG_DIR}/phpmyadmin.access.log combined
    &lt;/VirtualHost&gt;
$ sudo a2ensite phpmyadmin
$ sudo gedit /etc/hosts
    127.0.0.1 phpmyadmin
$ sudo a2enmod rewrite
$ sudo service apache2 restart</pre>
<p><em> verifica: PhpMyAdmin funziona?<br />
</em><span style="font-family: 'courier new', courier;">Browser -&gt; http://phpmyadmin</span></p>
<h2>NetBeans</h2>
<p>Per lo sviluppo PHP, l&#8217;IDE che ho scelto, dopo anni di Eclipse, è NetBeans.</p>
<p>Download Netbeans:<br />
<span style="font-family: 'courier new', courier;">Browser -&gt; <a href="http://netbeans.org/downloads/start.html?platform=linux&amp;lang=en&amp;option=php">http://netbeans.org/downloads/start.html?platform=linux&amp;lang=en&amp;option=php</a></span></p>
<pre>$ cd ~/Scaricati
$ sudo chmod 777 netbeans-7.1-ml-php-linux.sh
$ ./netbeans-7.1-ml-php-linux.sh</pre>
<h2>Permissions</h2>
<p>Il vostro utente dovrebbe essere proprietario della cartella www</p>
<pre>$ sudo chown -R myuser /var/www</pre>
<p><em> Nota: recentemente l&#8217;ho spostata in ~/www e quindi è già di proprietà del l&#8217;utente. </em></p>
<h2>Symfony2</h2>
<p>Installando Symfony potrò usarne il tool di configurazione e ottimizzare il sistema per ospitarlo. Per un&#8217;applicazione complessa <a href="http://symfony.com/"> Symfony 2 </a> è il framwork ideale. Per qualcosa di un po&#8217; più semplice c&#8217;è <a href="http://silex.sensiolabs.org/"> Silex </a></p>
<h3>donwload</h3>
<p><span style="font-family: 'courier new', courier;">Browser -&gt; </span><a href="http://symfony.com/download"><span style="font-family: 'courier new', courier;">http://symfony.com/download</span></a></p>
<pre>$ cd ~/Scaricati
$ cp Symfony_Standard_Vendors_2.0.x.tgz /var/www/
$ cd /var/www/
$ tar -xf Symfony_Standard_Vendors_2.0.x.tgz</pre>
<p><span style="font-family: 'courier new', courier;">Browser -&gt; http://localhost/Symfony/web/config.php</span></p>
<pre>$ cd /var/www/Symfony</pre>
<h3>permissions</h3>
<pre>$ chmod -R 777 app/cache
$ chmod -R 777 app/logs</pre>
<p>Lanciando Symfony (ma anche qualsiasi altro script PHP) da client (per i test ad esempio) l&#8217;utente è quello di sistema, mentre da browser è www-data; i file scritti in cache nel primo non sono accessibili nel secondo e viceversa creando non pochi problemi. Quindi:</p>
<pre>$ setfacl -R -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs
$ setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs</pre>
<h3>configuration</h3>
<pre>$ sudo apt-get install php5-sqlite
$ cd /etc/php5/conf.d/
$ sudo mv sqlite.ini sqlite.ini~
$ sudo service apache2 restart</pre>
<pre>$ sudo apt-get install php-apc
$ sudo service apache2 restart</pre>
<pre>$ sudo apt-get install php5-intl
$ sudo service apache2 restart</pre>
<pre>$ sudo gedit /etc/php5/apache2/php.ini
   short_open_tag = Off
   date.timezone = Europe/Paris
$ sudo service apache2 restart</pre>
<h2>Git</h2>
<p>Dopo anni di SVN mi hanno fatto scoprire Git e l&#8217;ho scelto per la velocità e perché&#8230; c&#8217;è <a href="https://github.com/"> GitHub </a> . Insomma se non hai un account GitHub <em> sei fuori. <img src="http://blog.danilosanchi.net/current/wp/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </em></p>
<pre>$ sudo apt-get install git-core git-gui git-doc
$ sudo apt-get install gitg
$ git config --global color.ui true</pre>
<p><span style="font-family: 'courier new', courier;">Browser -&gt; </span><a href="http://help.github.com/linux-set-up-git/"><span style="font-family: 'courier new', courier;">http://help.github.com/linux-set-up-git/</span></a></p>
<h2>Pear</h2>
<p>Pear serve per reperire i pacchetti PHP presenti su Pear, fondamentalmente PHPUnit.</p>
<pre>$ sudo apt-get install php-pear
$ pear config-set auto_discover 1</pre>
<h2>PHPUnit</h2>
<p>Per testare il codice PHP lo standard de facto è PHPUnit. Per testare il proprio codice ci vuole disciplina, ma ancora prima è necessario che non ci siano ostacoli alla gestione di una suite di test. In questo Symfony  2 ci aiuta molto.</p>
<pre>$ sudo pear channel-discover pear.phpunit.de
$ pear install --alldeps phpunit/PHPUnit</pre>
<h2>Tools</h2>
<p>I seguenti tools sono utilità molto avanzate di controllo del codice non particolarmente utili se non si utilizza <a href="http://jenkins-ci.org/"> Jenkins </a>  e attualmente non lo uso.</p>
<pre>$ pdepend --help
$ sudo pear channel-discover pear.pdepend.org
$ sudo pear install pdepend/PHP_Depend</pre>
<pre>$ phpmd --help
$ sudo pear channel-discover pear.phpmd.org
$ sudo pear install --alldeps phpmd/PHP_PMD</pre>
<pre>$ phpcs --help
$ sudo pear install PHP_CodeSniffer
$ phpcs
$ pear config-show | grep php_dir
$ cd /usr/share/php/PHP/CodeSniffer/Standards/
$ sudo git clone git://github.com/opensky/Symfony2-coding-standard.git Symfony2
$ sudo phpcs --config-set default_standard Symfony2</pre>
<pre>$ phpcpd --help
$ pear install pear.phpunit.de/phpcpd</pre>
<pre>$ phpdoc --help
$ sudo pear install PhpDocumentor</pre>
<pre>$ phpcb --help
$ sudo pear install phpunit/PHP_CodeBrowser</pre>
<h2>Phing</h2>
<p>Phing permette di definire comandi che eseguono task ripetitivi, utili per la continous integration ma anche per facilitare la distribuzione del progetto su macchine di sviluppo differenti</p>
<pre>$ sudo pear channel-discover pear.phing.info
$ pear install phing/phing</pre>
<h2>Ruby on Rails, Capifony e Less</h2>
<p>Ruby serve principalmente per poter utilizzare Capistrano/Capifony per il deploy e Less, il CSS dinamico.</p>
<p>Seguire il tutorial per installare l’rvm e quindi ruby 1.9.2:</p>
<p><span style="font-family: 'courier new', courier;"> Browser -&gt; <a href="http://www.the-tech-tutorial.com/?p=1868">http://www.the-tech-</a></span><a href="http://www.the-tech-tutorial.com/?p=1868"><span style="font-family: 'courier new', courier;">tutorial.com/?p=1868</span></a></p>
<p>Fermarsi prima dell’installazione di Rails. Non eseguire  <em> $ gem install rails </em><br />
Eseguire invece</p>
<pre>$ gem install capifony</pre>
<pre>Aggiungere a ~/.bashrc
    if [ -f /etc/profile.d/rvm.sh ]; then
        source /etc/profile.d/rvm.sh
    fi $ sudo apt-get install libnode-less
$ sudo apt-get install npm nodejs
$ sudo npm install -g less</pre>
<h2>Virtual Host</h2>
<pre>$ sudo gedit /etc/apache2/sites-available/myproject
    &lt;VirtualHost *:80&gt;
        ServerAdmin myemail@email.com
        ServerName myproject
        ServerAlias myproject.local.com
        DocumentRoot /var/www/myproject/web
        DirectoryIndex app.php index.php index.html
        &lt;Directory /var/www/myproject/web&gt;
            AllowOverride all
        &lt;/Directory&gt;
        ErrorLog ${APACHE_LOG_DIR}/myproject.error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg
        LogLevel notice
        CustomLog ${APACHE_LOG_DIR}/myproject.access.log combined
    &lt;/VirtualHost&gt;
$ sudo a2ensite myproject
$ sudo gedit /etc/hosts
    127.0.0.1 myproject myproject.local.com
$ sudo a2enmod rewrite
$ sudo service apache2 restart</pre>
<h2>XDebug</h2>
<pre>$ sudo pecl install xdebug
$ find / -name 'xdebug.so' 2&gt; /dev/null /usr/lib/php5/20090626+lfs/xdebug.so
$ sudo gedit /etc/php5/conf.d/xdebug.ini
    zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
    xdebub.max_nesting_level=200
$ sudo service apache2 restart</pre>
<h2>Capifony</h2>
<p>Ho trovato molto comodo Capifony per il deploy su Servergrove. Precedentemente lo abbiamo installato, qui si parla di come utilizzarlo per il deploy di un progetto Symfony 2 su ServerGrove:<br />
<a href="http://blog.servergrove.com/2011/09/07/deploying-symfony2-projects-on-shared-hosting-with-capifony/">http://blog.servergrove.com/2011/09/07/deploying-symfony2-projects-on-shared-hosting-with-capifony/ </a></p>
<p>Inoltre:</p>
<pre>$ gem install capifony capistrano-ext
$ gem install inifile</pre>
<p>Controllare con</p>
<pre>$ cap -vT</pre>
<p>e verificare che ci sia la lista dei task disponibili.</p>
<p>Ora copiamo parameters.ini in parameters.yml (e lo convertiamo in uno yml file) e lanciamo<br />
cap production database:move:to_local<br />
Questo task copia in locale il db remoto.</p>
<h2>CURL</h2>
<pre>$ sudo apt-get install php5-curl
$ sudo service apache2 restart</pre>
<h2>Nesting level</h2>
<p>Ricontrollare phpinfo() -&gt; xdebug.max_nesting_level=200<br />
eventualmente riscriverlo in</p>
<pre>$sudo gedit /etc/php5/conf.d/xdebug.ini</pre>
<p>e</p>
<pre>$ sudo service apache2 restart</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.danilosanchi.net/2012/12/05/la-mia-macchina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
