<?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</title>
	<atom:link href="http://blog.danilosanchi.net/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>Giocando con Selenium</title>
		<link>http://blog.danilosanchi.net/2014/02/10/giocando-con-selenium/</link>
		<comments>http://blog.danilosanchi.net/2014/02/10/giocando-con-selenium/#comments</comments>
		<pubDate>Mon, 10 Feb 2014 16:58:00 +0000</pubDate>
		<dc:creator><![CDATA[Danilo]]></dc:creator>
				<category><![CDATA[Sviluppo]]></category>
		<category><![CDATA[behat]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mink]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.danilosanchi.net/?p=194</guid>
		<description><![CDATA[E&#8217; parecchio che conosco Selenium, credo dal 2009 quando l&#8217;ho visto usare in un workshop di Francesco Trucchia al PHPDay in quel di Verona. Francesco ci mostrava come si poteva rifattorizzare un&#8217;applicazione dopo averne ingabbiato il comportamento con test funzionali. &#8230; <a href="http://blog.danilosanchi.net/2014/02/10/giocando-con-selenium/">Continua a leggere <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.danilosanchi.net/2014/02/10/giocando-con-selenium/selenium/" rel="attachment wp-att-206"><img class="alignright size-full wp-image-206" alt="selenium" src="http://blog.danilosanchi.net/current/wp/wp-content/uploads/2014/02/selenium.png" width="162" height="174" /></a>E&#8217; parecchio che conosco <a title="Selenium" href="http://docs.seleniumhq.org/" target="_blank">Selenium</a>, credo dal 2009 quando l&#8217;ho visto usare in un workshop di <a title="Francesco Trucchia" href="http://www.francescotrucchia.it/" target="_blank">Francesco Trucchia</a> al <a title="PHPDay" href="http://2013.phpday.it/" target="_blank">PHPDay</a> in quel di Verona. Francesco ci mostrava come si poteva rifattorizzare un&#8217;applicazione dopo averne ingabbiato il comportamento con test funzionali.</p>
<p><em>Traduzione: prima di modificare il codice di un&#8217;applicazione che non conosci, magari scritta male, generalmente da un&#8217;altro, è buona norma scrivere un programma che simuli l&#8217;intervento dell&#8217;utente e svolga tutte le operazioni più importanti sull&#8217;applicazione stessa.<span id="more-194"></span></em></p>
<p>Con Selenium è possibile pilotare il browser e quindi muoversi tra le pagine di un sito, compilare form, cliccare link, draggare elementi. Quando facciamo questo sulla nostra applicazione stiamo eseguendo un test automatico per verificare che si comporti come ci aspettiamo. Quando invece lo facciamo su un altro sito per raggiungere delle informazioni ed estrarle periodicamente, stiamo facendo web scraping.</p>
<p>La leggenda narra che con il Selenium IDE sia possibile registrare delle macro, mentre un utente reale esegue le operazioni sull&#8217;applicazione, per poi rieseguirle in un secondo momento e verificare che questa continui a comportarsi nello stesso modo, nonostante il programmatore abbia cambiato la sua struttura interna.</p>
<p>Ad oggi questo mito è stato ormai sfatato poiché è evidente che il modo più pratico per utilizzare Selenium è quello di programmare manualmente le operazioni da eseguire attraverso una delle varie librerie a disposizione per ciascuno linguaggio di programmazione.</p>
<p>Per funzionare Selenium deve poter pilotare un browser, ad esempio Firefox, ed un browser ha bisogno di un ambiente grafico per funzionare. Su un server web però non abbiamo un ambiente grafico. Sul proprio computer invece è piuttosto difficile ed irritante fare qualsiasi altra cosa mentre Firefox continua ad aprirsi e a sbilinare da solo.</p>
<p>Possiamo però simulare l&#8217;ambiente grafico e dire a Selenium di usarlo. La parolina magica, suggeritami da<a title="Giorgio Sironi" href="http://www.giorgiosironi.com/" target="_blank"> Giorgio Sironi</a> all&#8217;<a title="Agile Day" href="http://www.agileday.it/" target="_blank">AgileDay2013</a>, è <strong>xvfb</strong>.</p>
<p>Installiamo <a title="Xvfb" href="http://www.x.org/releases/current/doc/man/man1/Xvfb.1.xhtml" target="_blank">Xvfb</a> e facciamo in modo che venga lanciato all&#8217;avvio della macchina:</p>
<pre>sudo apt-get install xvfb
sudo vim /etc/init.d/xvfb</pre>
<pre><em># /etc/init.d/xvfb</em>

#!/bin/bash

if [ -z "$1" ]; then
echo "`basename $0` {start|stop}"
exit
fi

case "$1" in
start)
/usr/bin/Xvfb :99 -ac -screen 0 1024x768x8 &gt; /dev/null &amp;
;;

stop)
killall Xvfb
;;
esac</pre>
<pre>sudo chmod 755 /etc/init.d/xvfb
vim ~/.bash_aliases</pre>
<pre><em># ~/.bash_aliases</em>

...
alias xvfb='etc/init.d/xvfb'</pre>
<pre>sudo /etc/init.d/update-rc.d xvfb default 10</pre>
<p>Ora è possibile avviare xvfb tramite il comando xvfb start e fermarlo tramite xvfb stop</p>
<p>Ora installiamo Selenium.<br />
scarichiamo da <a href="http://docs.seleniumhq.org/download/">http://docs.seleniumhq.org/download/</a> l’ultima versione di <strong>Selenium Server (formerly the Selenium RC Server)</strong>:<br />
Lo mettiamo tra le nostre librerie e poi facciamo la stessa cosa che abbiamo fatto per xvfb, ne semplifichiamo l&#8217;esecuzione.</p>
<pre>wget <a href="http://selenium.googlecode.com/files/selenium-server-standalone-2.39.0.jar">http://selenium.googlecode.com/files/selenium-server-standalone-2.39.0.jar</a>
sudo mkdir /var/lib/selenium
sudo mv selenium-server-standalone-2.39.0.jar /var/lib/selenium
cd /var/lib/selenium
sudo ln -s selenium-server-standalone-2.39.0.jar selenium-server.jar
sudo vim /etc/init.d/selenium</pre>
<pre><em># /etc/init.d/selenium</em>

#!/bin/bash

if [ -z "$1" ]; then
echo "`basename $0` {start|stop}"
exit
fi

export DISPLAY=":99"
case "$2" in
show)
export DISPLAY=":0"
;;
esac

case "$1" in
start)
java -jar /var/lib/selenium/selenium-server.jar -browserSessionReuse &gt; /dev/null &amp;
;;

stop)
curl http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer
;;
esac</pre>
<pre>sudo 755 selenium
vim ~/.bash_aliases</pre>
<pre><em># ~/.bash_aliases</em>
...
alias selenium='etc/init.d/selenium'</pre>
<p>Ora è possibile avviare selenium nell&#8217;ambiente grafico generato da xvfb con il comando selenium start oppure in quello reale (se c&#8217;è) con selenium start show, e fermarlo con selenium stop</p>
<p>In alcuni casi potrebbe essere interessante lanciarlo all&#8217;avvio del server: lo si può fare con</p>
<pre>sudo /etc/init.d/update-rc.d selenium default 20</pre>
<p>Se non l&#8217;avete fatto non rimane che installare Firefox</p>
<pre>sudo apt-get install firefox</pre>
<p>Ora possiamo creare test funzionali con <a href="http://phpunit.de/manual/3.7/en/selenium.html">Selenium2 PHPUnit Extension</a> oppure far web scraping con <a href="http://mink.behat.org/">Mink<br />
</a></p>
<p>Questo articolo non è altro che un&#8217;assemblaggio ed una personalizzazione delle pratiche lette nei seguenti:</p>
<p><a href="http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/" target="_blank">http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/<br />
</a><a href="http://www.labelmedia.co.uk/blog/setting-up-selenium-server-on-a-headless-jenkins-ci-build-machine.html" target="_blank">http://www.labelmedia.co.uk/blog/setting-up-selenium-server-on-a-headless-jenkins-ci-build-machine.html<br />
</a><a href="http://testerinyou.blogspot.it/2011/05/run-selenium-rc-using-command-prompt.html">http://testerinyou.blogspot.it/2011/05/run-selenium-rc-using-command-prompt.html</a></p>
<p>Direi che è tutto. Ciao!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danilosanchi.net/2014/02/10/giocando-con-selenium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obiettivo raggiunto</title>
		<link>http://blog.danilosanchi.net/2013/03/22/obbiettivo-raggiunt/</link>
		<comments>http://blog.danilosanchi.net/2013/03/22/obbiettivo-raggiunt/#comments</comments>
		<pubDate>Fri, 22 Mar 2013 11:00:49 +0000</pubDate>
		<dc:creator><![CDATA[Danilo]]></dc:creator>
				<category><![CDATA[Idee]]></category>
		<category><![CDATA[Storie]]></category>
		<category><![CDATA[diet]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[running]]></category>
		<category><![CDATA[sport]]></category>
		<category><![CDATA[story]]></category>

		<guid isPermaLink="false">http://blog.danilosanchi.net/?p=171</guid>
		<description><![CDATA[Il 30 aprile 2012 scrissi sul blog A better Mundi il seguente articolo. Lo trascrivo qua, ora che ho anche io un blog, perché mi era piaciuto molto e perché celebrava un piccolo grande successo di cui vado piuttosto fiero. Eccolo &#8230; <a href="http://blog.danilosanchi.net/2013/03/22/obbiettivo-raggiunt/">Continua a leggere <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><em>Il 30 aprile 2012 scrissi sul blog <a title="A Better Mundi" href="http://www.abettermundi.com/" target="_blank">A better Mundi</a> il seguente <a title="Obbiettivo raggiunto" href="http://www.abettermundi.com/2012/04/obiettivo-raggiunto/" target="_blank">articolo</a>. Lo trascrivo qua, ora che ho anche io un blog, perché mi era piaciuto molto e perché celebrava un piccolo grande successo di cui vado piuttosto fiero.</em><br />
<em>Eccolo qua&#8230;</em></p>
<hr />
<p>&nbsp;</p>
<p>Ho perso 5kg ed ho raggiunto il mio obiettivo entro la data stabilita.</p>
<p><em><strong>Le cose stanno così</strong></em></p>
<p>Qualcuno dirà “E che ci vuole?”. Qualcun’altro invece “Come hai fatto? Io sono anni che ci provo”.<br />
Il problema è che i primi non capiscono che ciò che per loro è stato facile per altri può sembrare un’impresa <strong>impossibile</strong>, e che i secondi chiedono consiglio a chi ci è riuscito, ossia i primi.</p>
<p>La verità è che i secondi sono tanti, <strong>tantissimi</strong>. La verità è che se sei uno dei secondi e alla fine raggiungi il tuo obiettivo, tu hai affrontato un’impresa, tu non ti sei arreso, tu hai sofferto, ti sei sentito frustrato, tu hai affrontato un problema che credevi <strong>irrisolvibile</strong> e l’hai risolto, hai trovato il modo di risolverlo.</p>
<p>Chi ce l’ha fatta al primo tentativo <strong>evidentemente</strong> non aveva un problema da risolvere, ha semplicemente eseguito un’azione che era già in grado di eseguire, non ha imparato niente, non ha combattuto, ha “vinto facile”.</p>
<p>Io faccio parte dei secondi.<span id="more-171"></span></p>
<p><em><strong>Il Problema</strong></em></p>
<p>Nel 2006 ero sovrappeso di più di 15kg. Un amico dopo alcuni giorni di snowboard insieme nei quali ero sempre l’ultimo a ripartire, mi fece notare che mi ero lasciato un po andare, forse per via della laurea.</p>
<p>Perderne 10 non è stato difficile. E’ bastato smettere di mangiare pastarelle a colazione, non mettevo più lo zucchero nel cappuccino, ho cominciato a dire no a chi mi invitava a cenare fuori 2 volte a settimana. Sport? Un po’ in più forse. Niente di difficile, ho solo rimosso cattive abitudini di cui non avevo bisogno, facili da perdere. Non so neanche se è stato solo questo, non me lo ricordo, è stato <strong>facile</strong>.</p>
<p>Purtroppo 2-3 anni fa mi sono assestato intorno a +5kg. Quello che facevo gratis non bastava più. Allora ho provato con la dieta ipocalorica, ma non riuscivo a seguirla per più di 2 settimane, e provavo ad andare a correre ma era noioso e portava via tempo che mi serviva per altro. Provavo a tracciare il mio peso per tenere l’attenzione su quello che mangiavo (carne e verdura quanta ne vuoi, occhio con carboidrati, etc.). Avevo preso dieci ingressi in piscina con l’idea che “li ho pagati, adesso li faccio”, li ho esauriti l’altro giorno dopo 3 anni. Niente da fare.</p>
<p><em><strong>La Soluzione</strong></em></p>
<p>Cosa è cambiato?<br />
Cosa ho scoperto? <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;" /><br />
L’ho trasformata in un <strong>gioco</strong>. E adesso vi dico come ho fatto, così che anche voi possiate costruire il vostro gioco personale.</p>
<p>Per rendere divertente la <strong>corsa</strong> ne dovevo fare poca per volta, se no mi annoiavo. Andare insieme ad altri non mi aiutatava. Un bel giorno è arrivato <strong>Android</strong> nella mia vita e con lui <strong>Endomondo</strong>. Tracciare il percorso fatto e vederlo su Google Maps, sapere più o meno quante calorie avevo consumato (gli hamburger bruciati, i giri del modo fatti, etc.) trasformava la corsa in un gioco. Inoltre potevo comparare la fatica fatta con lo sfizio di un bombolone, comfrontare le entrate con le uscite, come in un gioco manageriale.<br />
Condividere queste informazioni su <strong>Facebook</strong> e vedere i “Mi piace” degli amici che silenziosamente dicevano “Grande Dani, 6Km oggi?” mi dava una <strong>carica motivazionale</strong> non irrilevante. La <strong>tifoseria</strong> è importante.<br />
E poi più corri e meno diventa faticoso, sarà che ad oggi devo accelerare meno massa&#8230;</p>
<p><a href="http://blog.danilosanchi.net/current/wp/wp-content/uploads/2013/03/endomondo.png"><img class="alignnone  wp-image-327" style="border: 1px solid black;" src="http://blog.danilosanchi.net/current/wp/wp-content/uploads/2013/03/endomondo.png" alt="" width="590" height="273" /></a></p>
<p>Da gennaio vivo da solo e dopo un breve periodo di sperimentazione in cucina ho ripreso quella vecchia <strong>dieta ipocalorica</strong>. Ora potevo <strong>pesare ogni cosa</strong> poiché potevo <strong>cucinare io quello che mangiavo</strong> e cucinarlo solo per me. Mi sono reso conto che il sapore della pasta in bianco non è affatto male se ci metti un po’ di pepe e che se mando giù 250g di verdura a pasto arrivo alla frutta che quasi non riesco a mangiarla da quanto sono pieno. Inoltre il pasto della domenica con la tua famiglia acquisisce un sapore diverso, tutto è così buono e speciale.</p>
<p>Pesando TUTTO quello che mangi ti vien da chiederti come sia possibile essere sazi e continuare a dimagrire e così ti rendi conto che <strong>il nostro stomaco ha una capacità volumetrica</strong> (cm o litri) non calorica e che la domanda da farsi non è “quante calorie sto ingerendo?” ma “qual’è la densità calorica di questo alimento”. Quindi comincerai a guardare le <strong>calorie per 100g</strong> ( o per 10cl) di alimento e ti renderai conto che è il solo numero di cui hai bisogno. Io ho trovato questo sito per farmi un’idea generica <a href="http://www.calorie.it/">http://www.calorie.it/</a> . Per tutto il resto questo numero c’è praticamente su ogni confezione di prodotto. Abbiamo gratis un <strong>sistema di punteggio</strong>.</p>
<p>Importante è<strong> tracciare il peso, registrare i progressi</strong>. Questa sarà la vostra <strong>classifica</strong>. Io uso un Google Documents (adesso Drive), un foglio di lavoro. Quando sei preso dallo sconforto perché il tuo ultimo peso è maggiore di quello di due giorni fa vedere da un grafico che comunque nell’ultimo mese il trend è comunque positivo, ti risolleva il morale e ti spinge a non mollare. Non è assolutamente vero che dovreste pesarvi una volta a settimana. Questo lo dicono perché una rilevazione giornaliera è troppo fluttuante per essere leggibile ad occhio nudo. Ma voi avete bisogno di stare focalizzati ogni giorno e pesarvi vi aiuterà. Fatelo quasi tutti i giorni E mettete questi dati in uno stylesheet, guardate il grafico generato ed ignorate il vostro peso odierno.</p>
<p><a href="http://blog.danilosanchi.net/current/wp/wp-content/uploads/2013/03/dieta.png"><img class="alignnone  wp-image-323" style="border: 1px solid black;" src="http://blog.danilosanchi.net/current/wp/wp-content/uploads/2013/03/dieta.png" alt="" width="590" height="248" /></a></p>
<p>Una <strong>condizione di vittoria</strong> è fondamentale. Ad esempio la mia era questa: Se pesandoti una mattina appena sveglio, con il pigiama addosso, ma senza pantofole, il tuo peso è inferiore di x Kg e la data di scadenza non è ancora passata, allora hai vinto! “E ma se i tuoi pigiami hanno peso differente” direte voi. Io rispondo “la condizione di vittoria non contempla questa variabile” come in una partita di calcio “la condizione di vittoria non contempla la bravura dell’arbitro”.</p>
<p>Sentirete dirvi più spesso “Ma sei dimagrito”. <strong>Ringraziateli</strong>. Si, lo so, stanno constatando l’evidenza, ma quel che conta è che vi stanno motivando, vi stanno mettendo di<strong> buon umore</strong>, vi stanno dando un <strong>feedback positivo</strong>. E poi noi ci vediamo tutti i giorni, loro invece ci vedono più raramente e notano meglio la differenza. Per quanto ci sembri sbagliato daremo sempre importanza al giudizio degli altri, forse più che ai numeri. Anche se già lo dice il nostro grafico sentirselo confermare dalle persone ci aiuterà a credere di potercela fare ed è <strong>quello che ci serve</strong>.</p>
<p>Alla fine di tutto, fermatevi un attimo e, come sto facendo io, <strong>scrivete</strong>, descrivete quello che avete fatto, <strong>cosa avete appreso</strong>, come l’avete fatto e<strong> condividetelo con gli altri</strong>: ciò che avete scoperto può essere utile ad altri e a voi in futuro quando vi sarete dimenticati di questa vittoria e starete combattendo un’altra battaglia che vi sembra impossibile.</p>
<p><em><strong>Cosa farò adesso</strong></em></p>
<p>Innanzi tutto <strong>festeggerò</strong>. Credo che mi sparerò una cena al Thailandese o al Giapponese.<br />
E poi, <strong>il gioco deve continuare</strong>. Il gioco non è finito e non finirà mai. Ora che il grosso e fatto devo controllare qual’è il mio peso forma e raggiungerlo, credo di dover perdere ancora qualcosina.</p>
<p><em><strong>Infine</strong></em></p>
<p>Leggete ogni tanto gli articoli di questo blog <a href="http://www.efficacemente.com/">http://www.efficacemente.com/</a>. Mi ha aiutato a vedere le cose sotto un altro punto di vista. Purtroppo ancora alcuni concetti faccio fatica ad accettarli perché ho dei preconcetti da rimuovere che vanno in conflitto con i nuovi. Tuttavia credo che piano piano leggere questa roba stia addestrando la mia mente a pensare diversamente.</p>
<p>Usate <a href="http://abmundi.com/">http://abmundi.com/</a>, perché ABMundi nasce proprio per indurre tutti i comportamenti di cui vi ho parlato nel vostro modo di porvi di fronte ad una sfida: Misurare, feedback continuo, condividere con gli altri, vedere l’apprezzamento degli altri per quello che stiamo facendo, focalizzazione sull’obiettivo, una scadenza, una condizione di vittoria.</p>
<p>Se siete arrivati a questo punto, vi ringrazio per l’attenzione. Volevo evitare di dirvi semplicemente &#8220;dovete mangiare di meno e fare più sport&#8221; ma volevo dirvi quali strumenti ho utilizzato io per aiutarmi a farlo, nella speranza che la sintesi dei miei pensieri possa esservi utile in qualche modo.</p>
<p>Chi sono? Mi han detto di dire che sono un marinaio che sta su una nave della stessa flotta&#8230; in sala macchine. <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>
<p style="text-align: right;"><em>Danilo, ABMundi Lead Developer</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danilosanchi.net/2013/03/22/obbiettivo-raggiunt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Orgoglio</title>
		<link>http://blog.danilosanchi.net/2013/03/07/orgoglio/</link>
		<comments>http://blog.danilosanchi.net/2013/03/07/orgoglio/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 13:41:54 +0000</pubDate>
		<dc:creator><![CDATA[Danilo]]></dc:creator>
				<category><![CDATA[Storie]]></category>
		<category><![CDATA[family]]></category>
		<category><![CDATA[friends]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[story]]></category>

		<guid isPermaLink="false">http://blog.danilosanchi.net/?p=155</guid>
		<description><![CDATA[Credo di essere fortunato. Sono fortunato ad essere orgoglioso dei miei genitori. Potete immaginare il piacere di sentire la propria madre dire al telefono a sua cognata Ah guarda, se vuoi possiamo vederci lo stesso, il concerto lo posso guardare domani &#8230; <a href="http://blog.danilosanchi.net/2013/03/07/orgoglio/">Continua a leggere <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.danilosanchi.net/2013/03/07/orgoglio-per-i-propri-genitori/old-computer/" rel="attachment wp-att-157"><img class=" wp-image-157 alignright" title="No, non l'ho preso così vecchio... :)" alt="Old computer" src="http://blog.danilosanchi.net/current/wp/wp-content/uploads/2013/03/old-computer-300x291.jpg" width="240" height="233" /></a></p>
<p>Credo di essere fortunato. Sono fortunato ad essere <strong>orgoglioso dei miei genitori</strong>.</p>
<p>Potete immaginare il piacere di sentire la propria madre dire al telefono a sua cognata <em>Ah guarda, se vuoi possiamo vederci lo stesso, il concerto lo posso guardare domani sul computer</em>?<br />
Oppure vedere il proprio padre giocare a <strong>poker</strong> on line (gratuitamente) oppure vederlo prenotare il pagamento del prossimo F24 dal <strong>sito della banca</strong>?</p>
<p><span id="more-155"></span></p>
<p>Uno o due anni fa andai a visitare la fiera dell&#8217;elettronica di Morciano con alcuni amici. Tra le tante cose, più o meno interessanti, trovai diversi stand che vendevano <strong>portatili usati</strong>. A seconda del difetto che avevano costavano di più o di meno. In ogni caso li vendevano a circa il 30-40% del più economico dei computer nuovi.</p>
<p><strong>Ne presi uno</strong> per i miei genitori.<br />
Speravo che avendone uno tutto per loro avrebbero imparato ad utilizarlo.</p>
<p>All&#8217;inizio provai a mostrare loro che con <a title="Wikipedia" href="http://it.wikipedia.org" target="_blank"><strong>Wikipedia</strong></a> potevano sapere tutto quello che volevano su qualsiasi cosa, in meno tempo che cercandolo sull&#8217;enciclopedia.<br />
<strong>Non gli interessava.</strong></p>
<p>Ho provato a mostrare loro <a title="Youtube" href="http://www.youtube.com/" target="_blank"><strong>Youtube</strong></a> e che potevano cercare canzoni, scatch di Benigni, di Crozza, video di quel noto comico genovese e di quell&#8217;altro arcoriano.<br />
<strong>Troppo complicato. </strong><em>Danilo, ormai siam <strong>vecchi</strong> per queste cose.</em></p>
<p>Ho provato a mostrare loro<strong> <a title="Google Earth" href="http://www.google.com/earth/index.html" target="_blank">Google Earth</a></strong> e di come potessero esplorare il pianeta cercando le piramidi, la tour Eiffel, la Basilica di San Pietro&#8230;<br />
L&#8217;<strong>interfaccia era troppo complicata</strong>, posti così lontani non suscitavano <strong>abbastanza curiosità</strong> e mia madre aveva seri <strong>problemi con il mouse</strong>.</p>
<p>Provai con <a title="Google Maps" href="https://maps.google.it/" target="_blank"><strong>Google Maps</strong></a> che è <strong>più semplice</strong> e mostrai loro <strong>casa nostra</strong>, grazie a <strong><strong><a title="Steet View" href="http://maps.google.it/intl/it/help/maps/streetview" target="_blank">Street View</a></strong></strong>, con la mia macchina parcheggiata davanti.<br />
<strong>Tombola</strong>. <em>E si può vedere la casa della zii a Tavullia? E quella degli zii in centro?<br />
</em>Ero riuscito a <strong>suscitare l&#8217;interesse</strong> in mia madre e a <strong>disinnescare la repulsione</strong> di mio padre.</p>
<p>Ora mia madre <strong>riguarda i programmi</strong> televisivi che si è persa su <strong><a title="Rai Replay" href="http://www.rai.tv/dl/replaytv/replaytv.html" target="_blank">Rai Replay</a> abitualmente</strong>. Una volta l&#8217;ho <em>beccata</em> pure a <strong>cercare informazioni</strong> sui <strong>lavori</strong> estivi disponibili in riviera.<br />
Tempo fa poi ha comprato una fontanella elettrica per la Milu (un persiana buffissima). Solo successivamente ha cercato le <strong>recensioni</strong> su internet scoprendo che era rumorosa e spaventava i gatti, e questo tutto <strong>da sola</strong>. La prossima volta probabilmente controllerà le recensioni <strong>prima di fare un acquisto</strong> particolare.<br />
Ovviamente, oggi, ha capito <strong>come funziona il mouse</strong>.</p>
<p>Mio padre ha fatto un po&#8217; più di fatica ma ha trovato questo <strong>poker</strong> on line, grazie al quale è entrato in <strong>confidenza</strong> con il computer.<br />
Se vuole farmi ascoltare una canzone che gli è piaciuta di Sanremo, ad esempio, accende il computer&#8230; si va beh, poi la fa cercare a me&#8230; ma almeno ha capito che li può trovare <strong>qualsiasi informazione desideri</strong>.</p>
<p>Insomma, <strong>informatizzare</strong> la propria famiglia da le sue soddisfazioni. Forse la da, ancor di più, vedere la <strong>curiosità</strong> e la <strong>meraviglia</strong> negli <strong>occhi</strong> delle persone mentre <em>giocano</em> con qualcosa di nuovo.<br />
Per cui non posso che consigliarvi di farlo. <strong>Non fermatevi alle prime resistenze</strong>, ci sono sempre e in tutto. <strong>Insistete</strong>. Voi<strong> sapete</strong> che<strong> trarranno beneficio</strong> da ciò che gli state proponendo&#8230; dovete solo <strong>trovare il modo giusto </strong>di farlo.</p>
<p>Un ultimo pensiero prima di chiudere a <a title="Davide Bertozzi" href="http://www.davidebertozzi.it/" target="_blank">Davide</a> e al suo <a title="Mela + A, poi Canc" href="http://www.abettermundi.com/2012/01/mela-a-poi-canc/" target="_blank">bellissimo articolo</a> su una sua un&#8217;esperienza, simile alla mia, che ha avuto con sua madre. Lui l&#8217;ha descritta molto meglio e molto più sinteticamente di me. Vale la pena di leggerlo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danilosanchi.net/2013/03/07/orgoglio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<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>
		<item>
		<title>Hello World</title>
		<link>http://blog.danilosanchi.net/2012/11/11/ciao-mondo/</link>
		<comments>http://blog.danilosanchi.net/2012/11/11/ciao-mondo/#comments</comments>
		<pubDate>Sun, 11 Nov 2012 09:46:42 +0000</pubDate>
		<dc:creator><![CDATA[Danilo]]></dc:creator>
				<category><![CDATA[Idee]]></category>
		<category><![CDATA[helloword]]></category>
		<category><![CDATA[idea]]></category>

		<guid isPermaLink="false">http://blog.danilosanchi.net/?p=1</guid>
		<description><![CDATA[Ma guarda questo!!! Non ha neanche cambiato il titolo del post d&#8217;esempio di WordPress&#8230; Beh, in realtà è il titolo che gli avrei dato comunque. Avrei dato questo titolo al mio primo post perché è il nome della prima applicazione &#8230; <a href="http://blog.danilosanchi.net/2012/11/11/ciao-mondo/">Continua a leggere <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><em><img class="wp-image-14 alignright" title="Hello World" alt="Hello World" src="http://blog.danilosanchi.net/current/wp/wp-content/uploads/2012/11/542810_4839188903302_1376298385_n-300x212.jpg" width="180" height="127" />Ma guarda questo!!! Non ha neanche cambiato il titolo del post d&#8217;esempio di WordPress&#8230;</em></p>
<p>Beh, in realtà è il titolo che gli avrei dato comunque. Avrei dato questo titolo al mio primo post perché è il nome della prima applicazione che si fa quando si impara un nuovo linguaggio di programmazione o dichiarativo oppure un nuovo framework: la <em>Hello World Application.</em></p>
<p>Che sia il Basic con il mitico Commodore 64, il Pascal, il C o il C++, l&#8217;HTML, l&#8217;ASP o il PHP, Javascript, Symfony 2&#8230; WordPress la prima cosa che si cerca di ottenere è far si che in qualche modo venga scritta la frase <em>Hello World.</em></p>
<p><em><span id="more-1"></span></em></p>
<p>Sicché questo è il mio primo post che scrivo sul mio primo blog credo che non si possa che chiamarlo <em>Hello World</em>. <em>(questa l&#8217;ho un tantinino sgraffignata da <a href="http://blog.abmundi.com">qui</a>).</em></p>
<p><em>Si va beh! Già 3 paragrafi per dire sta c@#!a! Ma mi vuoi dire chi sei, che vuoi da me e perché dovrei degnarmi di leggere ogni tanto gli articoli del tuo blog?</em></p>
<p>Il mio nome è Danilo, vivo a Riccione e Internet è la mia più grande passione. Per questo motivo faccio lo sviluppatore Web.</p>
<p>Che scriverò in questo blog?</p>
<p>Credo che molti cedano alla tentazione di aprire un blog per sfogarsi pubblicando le proprie opinioni. Io non ho intenzione di scrivere qui le mie opinioni. Credo che, per chi legge, le mie opinioni valgano meno di 2 centesimi.</p>
<p>Racconterò delle storie, farò degli esempi esempi, userò metafore, farò citazioni, condividerò informazioni. Vi parlerò di Internet e di persone, di tecnologia e di come sta cambiando il mondo. Vi parlerò di cose che molti nemmeno immaginano, cose di cui sono venuto a conoscenza col e che guardando indietro mi fanno esclamare <em>Se l&#8217;avessi saputo prima!. </em>Insomma vi parlerò di <a href="http://www.youtube.com/watch?v=Rvqm_1NhgR4&amp;feature=related">cose che voi umani</a>&#8230; (cit.) e che sarebbe un peccato andassero perdute come lacrime nella pioggia.</p>
<p>Inoltre ogni volta che scoprirò qualcosa di nuovo, magari un po&#8217; tecnico, ogni volta che mi verrà un&#8217;idea, avrò un posto in cui abbozzare un tutorial o un semplice suggerimento per dare il mio contributo.</p>
<p>Insomma, cercherò attraverso questo blog di dire ciò che potrebbe essere interessante leggere e non ciò che piacerebbe a me scrivere.</p>
<p>Non ci resta che provare&#8230; vediamo che succede. A presto!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danilosanchi.net/2012/11/11/ciao-mondo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
