<?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>e-xtrategy &#187; webdevelopment</title>
	<atom:link href="http://www.e-xtrategy.net/category/webdevelopment/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.e-xtrategy.net</link>
	<description>dietro ciò che vedi c&#039;è un mondo che neanche immagini</description>
	<lastBuildDate>Wed, 16 May 2012 16:35:46 +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>scrivere un&#8217;applicazione mobile (un anno dopo)</title>
		<link>http://www.e-xtrategy.net/2012/05/02/scrivere-unapplicazione-mobile-un-anno-dopo/</link>
		<comments>http://www.e-xtrategy.net/2012/05/02/scrivere-unapplicazione-mobile-un-anno-dopo/#comments</comments>
		<pubDate>Wed, 02 May 2012 07:00:08 +0000</pubDate>
		<dc:creator>lorenzo massacci</dc:creator>
				<category><![CDATA[mobileapplication]]></category>
		<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[monotouch]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[svilupponativo]]></category>

		<guid isPermaLink="false">http://www.e-xtrategy.net/?p=4489</guid>
		<description><![CDATA[un anno fa raccontavamo su questo stesso blog di come fosse possibile scrivere un'applicazione mobile utilizzando le tecnologie del web; in questi mesi non siamo stati con le mani in mano ma abbiamo messo in pratica quello che prima avevamo solo  teorizzato.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/gillyberlin/6152422615/"><img class="alignnone" src="http://farm7.staticflickr.com/6166/6152422615_e69844fa06.jpg" alt="" width="500" height="333" /></a></p>
<p>un anno fa <a title="raccontavamo" href="http://www.e-xtrategy.net/2011/03/18/scrivere-unapplicazione-mobile-utilizzando-le-tecnologie-del-web" target="_blank">raccontavamo</a> su questo stesso blog di come fosse possibile scrivere un&#8217;applicazione mobile utilizzando le tecnologie del web; in questi mesi non siamo stati con le mani in mano ma abbiamo messo in pratica quello che prima avevamo solo  teorizzato. abbiamo, infatti, avuto la fortuna di metterci alla prova su diverse piattaforme:</p>
<p>* <a title="monotouch" href="http://xamarin.com/monotouch" target="_blank">monotouch</a><br />
* <a title="appcelerator" href="http://www.appcelerator.com" target="_blank">appcelerator</a> titanium<br />
* <a title="phonegap" href="http://phonegap.com" target="_blank">phonegap</a><br />
* oltre allo sviluppo nativo</p>
<p>dopo 12 mesi di lavoro possiamo raccontare la nostra esperienza.<span id="more-4489"></span></p>
<p><strong>sviluppo nativo</strong>: la nostra esperienza di sviluppo nativo è legata alla piattaforma android ed al linguaggio Java ma in due contesti abbastanza diversi. il primo lavoro è stato un piccolo &#8220;modulo&#8221; per la scrittura su stampanti portatili esposto alle altre applicazioni del sistema comprese le pagine del browser, realizzato per permettere creazione e stampa di biglietti a bordo degli autobus del nostro cliente <a title="roma marche linee" href="http://www.romamarchelinee.it" target="_blank">roma marche linee</a>. l&#8217;approccio intrapreso è stato quello di arrivare a basso livello &#8220;solo dove necessario&#8221;, creando una piccola app che espone le proprie funzionalità attraverso il meccanismo degli Intent ed invocare queste funzionalità direttamente da un&#8217;applicazione web utilizzata via browser.</p>
<p>l&#8217;altra esperienza tutt&#8217;ora in corso è legata allo sviluppo di una applicazione per l&#8217;utilizzo di opendata. Ii questo caso parliamo di un&#8217;applicazione &#8220;classica&#8221; nativa che utilizza pienamente l&#8217;SDK e gli strumenti offerti da google. lo sviluppo  sta procedendo un po&#8217; a rilento, ma la cosa è legata probabilmente alla nostra non approfondita conoscenza del java e all&#8217;abitudine ai linguaggi più dinamici. d&#8217;altro canto l&#8217;utilizzo del framework ufficiale offre una quantità di letteratura e di &#8220;problemi risolti&#8221; da non sottovalutare. la cosa che ci è piaciuta molto è la disponibilità di un framework di test rodato come junit integrato nell&#8217;SDK che permette di iniziare a testare il proprio codice &#8220;senza attriti&#8221;.</p>
<p>PRO:<br />
sfrutta a pieno le caratteristiche piattaforma<br />
permette di andare a fondo su qualsiasi problema<br />
comunità di sviluppo molto estesa<br />
unit test framework ben integrato<br />
CONTRO:<br />
non multipiattaforma<br />
sviluppo meno rapido</p>
<p><strong>monotouch.</strong> l&#8217;esperienza con monotouch è stata molto positiva ed è legata allo sviluppo di un software complesso di classe enterprise. quello che offre la piattaforma monotouch è un layer leggero di astrazione sopra le API native della piattaforma non nascondendone le peculiarità. separando bene la logica di business da quella di interfaccia è possibile condividere il core della propria applicazione su praticamente tutte le piattaforme su cui è disponibile il runtime di mono (android, IOs, windows phone, windows e linux). il vantaggio principale è legato alla possibilità di utilizzare tutta una serie di strumenti e librerie offerte dal completissimo framework .NET, con un linguaggio moderno ed elegante come C#. la piattaforma non è comunque esente da problemi: l&#8217;utilizzo di caratteristiche avanzate del linguaggio ci ha fatto riscontrare alcuni bug che hanno creato non pochi grattacapi.</p>
<p>PRO:<br />
cross platform<br />
framework che copre moltissime esigenze<br />
C# ovunque (se vi piace C#)<br />
CONTRO:<br />
C# ovunque (se non ti piace C#)<br />
alcuni bug di gioventù<br />
per ottenere il cross-platform la user interface va riscritta</p>
<p><strong>sviluppo titanium.</strong> titanium appcelerator è stata la prima esperienza mobile affrontata da e-xtrategy, per lo sviluppo di un&#8217;applicazione di domotica: <a title="seavdomus" href="http://www.e-xtrategy.net/progetti/seav-domus" target="_blank">seavdomus</a>.  appcelerator è un framework per la creazione di applicazioni mobile cross-platform (iOS, Android e Blackberry) sopra il quale si sviluppa in javascript. l&#8217;utilizzo di questo linguaggio, unito a buone tecniche di programmazione, ha permesso il raggiungimento di un importante risultato: <a title="strada facendo" href="http://www.e-xtrategy.net/servizi/il-metodo-xq" target="_blank">strada facendo</a> è emersa la necessità di una web app evoluta che replicasse ed estendesse le funzionalità dell&#8217;applicazione mobile, che è stata realizzata riutilizzando gran parte del codice scritto per i dispositivi mobile, nonostante la natura completamente differente dell&#8217;applicazione. il vantaggio principale di titanium è la possibilità di scrivere con un solo linguaggio per diversi dispositivi mobile, utilizzandone al contempo i controlli nativi della piattaforma di destinazione. qualora il framework offerto da titanium non sia sufficiente, è possibile estenderlo, scrivendo moduli custom direttamente in codice nativo (in questo caso, ne va scritto uno per ogni piattaforma).</p>
<p>PRO<br />
con poco codice si ottengono molti risultati (essendo un framework)<br />
cross platform<br />
controlli nativi in base alla piattaforma di destinazione<br />
javascript ovunque (se ti piace Javascript)<br />
CONTRO:<br />
javascript ovunque (se non ti piace il Javascript)<br />
alcuni bug di gioventù<br />
per un corretto cross-platform la UX va comunque rivista e non mancano<br />
gli aggiustamenti da fare</p>
<p><strong>sviluppo phonegap.</strong> phonegap è la soluzione che fa più uso delle tecnologie web e proprio per questo è anche quella che permette il raggiungimento di più piattaforme possibili (iOS, android, windows phone, blackberry, webos, symbian). e&#8217; infatti interamente pensato per sviluppare in HTML, CSS e javascript, tramite l&#8217;utilizzo di una web view che fa da ponte con le funzionalità del dispositivo. la nostra esperienza con questo tool si lega allo sviluppo di un&#8217;applicazione mobile/tablet in ambito wealth management e <a title="finanza" href="http://www.e-xtrategy.net/progetti/prometeia" target="_blank">finanza</a> .accoppiata all&#8217;utilizzo del framework jquery mobile è possibile ottenere un look &amp; feel simil-iphone, anche se è possibile disegnare la propria interfaccia a piacimento e indipendetemente dai controlli nativi. questo è un vantaggio perchè possiamo disegnare una nostra interfaccia custom e farla girare allo stesso modo su tutti i device, ma anche uno svantaggio perchè ogni controllo va disegnato e gestito interamente da noi, non possiamo far affidamento ai controlli nativi e del dispositivo. va tenuto conto delle prestazioni: l&#8217;utilizzo di una web view limita la responsività dell&#8217;interfaccia, è quindi importante tener presente che non è adatto per applicazioni che fanno uso di effetti grafici. &#8220;impacchettare&#8221; è la parola d&#8217;ordine per questo tool: il suo principale vantaggio è infatti la possibilità di rinchiudere web site e servizi esistenti in un&#8217;applicazione mobile, oltre al raggiungimento di un parco dispositivi veramente ampio. non mancano i problemi di giovinezza ed i malfunzionamenti, ma le promesse sono molte.</p>
<p>PRO<br />
cross platform spinto<br />
sviluppo tramite tecnologie già note da chi lavora su web (html, css, js)<br />
riutilizzo elevato del codice<br />
javascript ovunque (se ti piace Javascript)<br />
Interfaccia in HTML/CSS (se siete abituati a lavorare in questo modo o se nel team c&#8217;è alessandro violini)<br />
CONTRO<br />
l&#8217;accesso alle funzionalità del device non è completissimo<br />
javascript ovunque (se non ti piace il Javascript)<br />
instabilità delle API e documentazione poco affidabile<br />
prestazioni<br />
interfaccia in HTML/CSS (se non siete abituati a lavorare in questo modo)</p>
<p><strong>la soluzione</strong></p>
<p>come era facilmente prevedibile non esiste, la soluzione ma ogni piattaforma ha i suoi pregi e suoi difetti, spesso soggettivi e che dipendono dal team che si trova ad affrontare il progetto. quello che ci sentiamo di affermare però è che per poter scegliere la soluzione migliore in base al contesto ed ai vincoli di team e progetto è importante conoscere e sperimentare tutto quello che oggi c&#8217;è a disposizione. nel nostro caso particolare viste l&#8217;esperienza, le peculiarità del nostro team e non ultima la passione per il linguaggio javascript, l&#8217;utilizzo di titanium appcelerator e phonegap sono privilegiati rispetto alle altre soluzioni.</p>
<p>come si è visto le tecnologie utilizzate soffrono tutte di problemi dovuti alla giovinezza ma è evidente l&#8217;impegno che le varie community stanno mettendo per migliorare e renderle mature. Pochi giorni fa è stata rilasciata la versione 2.0 di appcelerator titanium e phonegap dopo l&#8217;adozione del progetto opensource <a title="cordova" href="http://phonegap.com/2012/04/12/rolling-releases-how-apache-cordova-becomes-phonegap-and-why" target="_blank">cordova</a> si stà riorganizzando per poter offrire rilasci frequenti ed incrementali.</p>
<p>inoltre l&#8217;esperienza fatta ci permette di dire che il vero cross platform non esiste, e questo non perché non è tecnicamente possibile, ma perché soprattutto a livello di user experience non è corretto sviluppare nello stesso modo un&#8217;applicazione che deve girare su sistemi diversi perdendo le peculiarità dell&#8217;una o dell&#8217;altra. quindi ben vengano framework e tecnologie che semplificano il riutilizzo del codice cross platrform, ma attenti a non sottovalutare l&#8217;UX.</p>
<p>se vuoi parlarne ci vediamo al <a title="jsday" href="http://2012.jsday.it" target="_blank">jsday</a> e al <a title="whymca" href="http://www.whymca.org" target="_blank">whymca</a></p>
<p>lorenzo, emanuele e giorgio</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-xtrategy.net/2012/05/02/scrivere-unapplicazione-mobile-un-anno-dopo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>digital kanban &#8211; esperimento pivotal night</title>
		<link>http://www.e-xtrategy.net/2011/07/13/digital-kanban-esperimento-pivotal-night/</link>
		<comments>http://www.e-xtrategy.net/2011/07/13/digital-kanban-esperimento-pivotal-night/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 08:00:19 +0000</pubDate>
		<dc:creator>giorgio mandolini</dc:creator>
				<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[kanban]]></category>

		<guid isPermaLink="false">http://www.e-xtrategy.net/?p=3554</guid>
		<description><![CDATA[da un po’ di tempo a questa parte gestiamo la priorità dei nostri task attraverso l’utilizzo di una kanban board. ma che cos’è una kanban board ? vi rimandiamo alla breve ma efficace definizione del nostro coach, che può anche vantare il merito di aver introdotto questo strumento nella nostra azienda.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/e-xtrategy/5929517552/"><img class="alignnone" src="http://farm7.static.flickr.com/6145/5929517552_d3a4e13f6b.jpg" alt="" width="500" height="375" /></a></p>
<p>da un po’ di tempo a <a title="questa parte" href="http://www.sviluppoagile.it/lean-e-xtrategy">questa parte</a> gestiamo la priorità dei nostri task attraverso l’utilizzo di una <strong>kanban</strong> board. ma che cos’è una kanban board ? vi rimandiamo alla breve ma efficace definizione del nostro coach, che può anche vantare il merito di aver introdotto questo strumento nella nostra azienda.</p>
<p><em>il kanban, lo scrivo brevemente a beneficio dei neofiti, è sostanzialmente una lavagna dove viene tracciato secondo poche ma ben determinate regole lo stato dei diversi task, abilitando il team ad una modalità di lavoro</em></p>
<ol>
<li><em>concorrente, dove sono ridotti al minimo gli stati di attesa per svolgere il proprio lavoro</em></li>
<li><em>pull, dove si annulla la necessità di una figura responsabile dell’erogazione del lavoro da svolgere</em></li>
<li><em>trasparente, dove ognuno sa e può sapere cosa sta facendo l’azienda nel suo insieme in un dato momento.</em></li>
</ol>
<p><em>abbattimento della burocrazia, trasferimento del controllo verso il basso e tracciamento di tutte le attività sono il cuore di questa soluzione.<span id="more-3554"></span></em></p>
<p>effettivamente, abbiamo percepito i vantaggi citati da jacopo, vantaggi tangibili sin da subito ma ancora migliorabili. perché ?</p>
<h3>i nostri problemi</h3>
<p>perché nella prima introduzione di questo strumento ne andavamo a forzare lo scopo stesso: <strong>tracciare lo stato del sistema</strong>. provenivamo infatti dall’utilizzo di <a title="pivotal tracker" href="https://www.pivotaltracker.com/">pivotal tracker</a>, un ottimo servizio online per la gestione di user stories tra i vari progetti; ci siamo trovati quindi a “duplicare” lo stato del nostro sistema: le storie su pivotal, le storie sulla lavagna. si può intuire che, quando l’ambiente è rilassato, siamo tutti bravi e volenterosi nel tenere allineati i due strumenti, strumenti che però dovrebbero supportarci quando il carico del nostro sistema azienda è al massimo e che guarda caso andavano a fallire proprio in questo: arrivati al punto di stress viene a mancare la disciplina nel mantenere i 2 stati coerenti e la motivazione più diffusa solitamente recita “non ho avuto tempo, ho messo la storia di là”.</p>
<p>le conseguenze potete immaginarle.</p>
<h3>la nostra soluzione</h3>
<p>ma allora ? buttiamo via il kanban o non usiamo più il tracker online ? entrambe le soluzioni ci hanno aiutato tanto, perché doverne cestinare per forza una ?</p>
<p><strong>pivotal</strong> è ottimo nel gestire le user stories di singoli progetti: calcolo della velocity, burn down charts, stime sulle scadenze via via più precise ad ogni iterazione e tutta una serie di feature che una volta introdotte difficilmente non si dirà “ma come facevamo prima senza?”. di contro non permette la schedulazione e la gestione contemporanea di più progetti: ognuno è un’isola a se stante ed anche se stiamo cercando in tutti i modi di abbassare il nostro wip, l’orizzonte del monotask è ancora un obiettivo a tendere.</p>
<p>il <strong>kanban</strong> ovvia proprio a questo problema: non è più necessario aprire uno ad uno tutti i progetti su pivotal per conoscere chi e su cosa sta lavorando ed a che punto è, basta un colpo d’occhio alla lavagna, vedere lo stato dei cartellini ed il gioco è fatto.</p>
<p>alla luce di queste poche ma importanti considerazioni, abbiamo capito che il problema non era l’esclusività di uno strumento rispetto all’altro, ma il fatto che i due lavoravano su piani differenti: se anche pivotal fosse stato cartaceo, il nostro cartellino riguardante una storia sarebbe stato uno ed uno soltanto, senza più problemi di allineamento perché o si trova nel backlog del kanban (suddiviso per progetti, che è proprio pivotal) o si trova in una qualsiasi altra lane (started, finished, delivered, accepted), ma, ripeto, in un punto soltanto.</p>
<p>se la cosa vale per il cartaceo, a maggior ragione vale per il digitale, ed è per questo che il <strong>13 giugno</strong> abbiamo organizzato la “<strong>pivotal night</strong>”, un evento il cui scopo è stato creare un kanban digitale che accedesse direttamente ai cartellini di pivotal, tramite le sue api, e che ci avrebbe permesso finalmente di risolvere la questione <img src='http://www.e-xtrategy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>per uno strumento agile, ci vuole una metodologia agile!</h3>
<p>visto che abbiamo tutti gli ingredienti, perché non tentare l’utilizzo di una modalità agile al 100% per lo sviluppo di questo progetto ? vi raccontiamo com’è andata la pivotal night, e le buone pratiche che abbiamo potuto sperimentare direttamente.</p>
<h3>iteration meeting, utilizzo di un vocabolario comune e pair programming</h3>
<p>per prima cosa abbiamo iniziato la serata con un briefing, dove tutto il team era riunito: un <strong>iteration meeting</strong>. le veci del cliente sono state fatte da lorenzo, in questo caso è un progetto interno e non c’è un vero e proprio cliente, per cui l’accettazione/rifiuto delle feature sviluppate è stato fatto dal product owner.</p>
<p>in questa fase abbiamo definito gli <strong>obiettivi</strong> della nostra iterazione, li abbiamo tradotti poi in user stories ed ordinate secondo il contributo in termini di <strong>valore</strong> che avrebbero apportato al nostro progetto.</p>
<p>oltre a ciò abbiamo definito un <strong>vocabolario comune</strong> a cui tutto il team doveva attenersi, sia per comunicare con gli altri membri, sia per scrivere codice.</p>
<ul>
<li>dashboard: il nostro kanban digitale</li>
<li>panel: la singola lane, o corsia, che compone il kanban</li>
<li>widget: il singolo cartellino che viene appiccicato nelle corsie e che rappresenta una user story</li>
</ul>
<p>ci siamo poi dati una <strong>regola di comunicazione</strong> quando c’era la necessità di coniare nuovi termini ed aggiungerli al vocabolario, dando a lorenzo la responsabilità di gestire la concorrenza tra i pairs.</p>
<p>alla fine dell’iteration meeting abbiamo organizzato il team in coppie, ciascuna delle quali responsabile di una determinata area di sviluppo:</p>
<ul>
<li>lorenzo / alessandro: grafica e montaggio, supporto alla comunicazione</li>
<li>daniele / emanuele: programmazione lato client</li>
<li>giorgio / riccardo: programmazione lato server</li>
</ul>
<h3>condivisione e monotask</h3>
<p>tutto il team ha lavorato su un unico progetto, ogni membo era a conoscenza dello stato dei lavori e non c’era nessuno di responsabilità. <strong>la visione è stata rovesciata</strong>: non più un comportamento individualistico, dove il responsabile punta al successo dei propri progetti, ma una visione comune, dove si vince e si perde tutti quanti insieme.</p>
<p>se, per quanto appena detto, la condivisione delle informazioni e del lavoro è importante, lo è di conseguenza tenere basso il numero di progetti aperti concorrentemente in azienda, sia per non avere cali d&#8217;attenzione, sia per non disgregare il team. l&#8217;attenzione è infatti la risorsa più limitata di cui il cervello umano dispone: fare più cose contemporaneamente, o passare frequentemente dall&#8217;una all&#8217;altra, porta ad una probabilità di errore più elevata, oltre che ad un allungamento dei tempi di sviluppo (ai tempi necessari per lo svolgimento dei task, vanno sommati anche quelli per il cambio di contesto, che non sono trascurabili).</p>
<p>non dimentichiamo infine che se <strong>il work in progres (wip) è basso</strong> il valore attualmente immobilizzato dall&#8217;azienda per produrne dell&#8217;altro è necessario ma non eccedente. questo significa che se interrompessimo il sistema in questo momento, la quantità di <strong>lavoro parzialmente svolto</strong>, e quindi da buttare, <strong>è inferiore</strong>.</p>
<h3>il nuovo kanban è pronto</h3>
<p>terminata la serata, siamo usciti dai nostri uffici <strong>soddisfatti</strong> del lavoro svolto, stanchi ma <strong>rilassati</strong>, soprattutto <strong>divertiti</strong> e con il nostro nuovo kanban pronto all&#8217;uso. la lavagna cartacea dopo 2 giorni è stata dimenticata e dopo una settimana dismessa. i problemi di allineamento sono stati eliminati.</p>
<p>lo strumento è certamente ancora molto giovane ed abbiamo già previsto nuove user stories per migliorarlo, ma visto quanto è già in grado di aiutarci, ci viene da dire che l&#8217;esperimento è decisamente riuscito <img src='http://www.e-xtrategy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>giorgio</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-xtrategy.net/2011/07/13/digital-kanban-esperimento-pivotal-night/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phing: tra ambienti di lavoro e controllo di versione</title>
		<link>http://www.e-xtrategy.net/2011/02/16/phing-tra-ambienti-di-lavoro-e-controllo-di-versione/</link>
		<comments>http://www.e-xtrategy.net/2011/02/16/phing-tra-ambienti-di-lavoro-e-controllo-di-versione/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 09:00:44 +0000</pubDate>
		<dc:creator>alessandro violini</dc:creator>
				<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[phing]]></category>
		<category><![CDATA[subversioning]]></category>

		<guid isPermaLink="false">http://www.e-xtrategy.net/?p=3371</guid>
		<description><![CDATA[nemmeno un anno fa parlavamo degli ambienti di sviluppo e della continuous integration. oggi riaffrontiamo questi temi in modo trasversale per discutere di phing.

phing è un'applicazione di build project o build tool basato su Apache. E' molto flessibile e può essere usato per molte funzionalità, con PHPunit e simpletest, trasformazioni di file, operazioni su file system, esecuzioni SQL, operazioni CVS/SVN, strumenti per creare pacchetti pear e altro ancora. qui potete trovare altre informazioni su phing.]]></description>
			<content:encoded><![CDATA[<p><a href="http://phing.info/"><img class="alignleft size-full wp-image-3383" title="phing" src="http://www.e-xtrategy.net/wp-content/uploads/2011/02/phing.gif" alt="" width="300" height="90" /></a>nemmeno un anno fa parlavamo degli <a href="http://www.e-xtrategy.net/2010/03/22/il-mac-ambiente-di-lavoro-anche-per-lo-sviluppatore/">ambienti di sviluppo</a> e della <a href="http://www.e-xtrategy.net/2010/06/15/continuous-integration-quando-la-pratica-va-oltre-gli-strumenti/">continuous integration</a>. oggi riaffrontiamo questi temi in modo trasversale per discutere di <strong>phing</strong>.</p>
<p><strong>phing</strong> è un&#8217;applicazione di <strong>build project</strong> o <strong>build tool</strong> basato su apache. è molto flessibile e può essere usato per molte funzionalità, con PHPunit e simpletest, trasformazioni di file, operazioni su file system, esecuzioni SQL, operazioni CVS/SVN, strumenti per creare pacchetti pear e altro ancora. <a href="http://phing.info">qui</a> potete trovare altre informazioni su phing.</p>
<p>il nostro utilizzo di questa applicazione è quello di snellire alcune procedure standard che effettuiamo durante le nostre operazioni con il repository. principalmente (per ora) questa applicazione, grazie ad un file <strong>build.xml</strong> che accompagna ogni progetto, esegue operazioni sul database permettendoci di aggiornarlo automaticamente dopo ogni update, o esportarlo (in struttura e dati) in modo rapido per essere &#8220;committato&#8221; in modo da aggiornare il repository.<span id="more-3371"></span></p>
<p>vediamolo un po&#8217; più nel dettaglio: il file build.xml viene utilizzato da phing per compiere operazioni in maniera automatica. dentro il file build.xml vengono definite delle macro-operazioni dette target, ciascuna delle quali è composta da una o più task, che possono essere operazioni tra le più disparate: dalla connessione SSH all&#8217;esecuzione di un comando da terminale.</p>
<p>nel nostro caso abbiamo creato due target fondamentali per coadiuvare la continuous integration:</p>
<ul>
<li><strong>target 	build</strong></li>
<li><strong>target 	make-sql</strong></li>
</ul>
<p>il <strong>target build</strong> si occupa di leggere i dump del database salvati su file e di importarli, oltre a varie ed eventuali operazioni dipendenti dal progetto (come la cancellazione di file temporanei, l&#8217;impostazione dei permessi di scrittura su determinate cartelle ed altri task che possono essere automatizzati al fine di rendere funzionante il progetto sulla macchina locale).</p>
<p>il <strong>target make-sql</strong> è il suo duale: se il primo si occupa dell&#8217;importazione del database, il secondo si occupa dell&#8217;esportazione. se lo sviluppatore ha bisogno di inviare al repository le proprie modifiche al database, lancerà il comando e successivamente eseguirà una commit dei file aggiornati.</p>
<p><strong>un requisito: pear</strong></p>
<p>per installare phing abbiamo bisogno del comando <strong>pear</strong>. nelle varie distribuzioni linux esso viene solitamente fornito di default quando viene impostato un ambiente LAMP, idem per machintosh che di solito è incluso negli ambienti di lavoro come ad esempio MAMP.</p>
<p>qualora si utilizzasse zendserver bisogna utilizzare l&#8217;eseguibile <em>/usr/local/zend/bin/pear</em>, per averlo sempre disponibile senza dover risalire ogni volta al path originale. Basterà creare un link simbolico dentro <em>/usr/bin</em> in questo modo:</p>
<p><em>sudo ln -s /usr/local/zend/bin/pear /usr/bin/pear</em></p>
<p>nota:<br />
gli utenti linux con zend server troveranno tutti gli eseguibili dentro la cartella <em>/usr/local/zend/bin</em><br />
gli utenti machintosh con MAMP troveranno il comando pear dentro la cartella a<em>pplications/MAMP/conf/php/bin</em> &#8211; diversamente è possibile scaricare Pear separatamente in tal caso la cartella pear sarà sotto a<em>pplications/</em></p>
<p><strong>installazione di phing</strong></p>
<p>per prima cosa bisogna registrare il canale di phing:<br />
<em>sudo pear channel-discover pear.phing.info</em></p>
<p>successivamente basterà eseguire il comando<br />
<em>pear instal phing/phing</em></p>
<p>a questo punto si suggerisce di creare un link simbolico per avere phing come comando di sistema.</p>
<p>ecco un <a href="http://www.e-xtrategy.net/wp-content/uploads/2011/02/build.xml_.zip">esempio del file build.xml</a> <em>(formato zip)</em>.<br />
e voi, come utilizzate phing?</p>
<p>alessandro e giorgio</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-xtrategy.net/2011/02/16/phing-tra-ambienti-di-lavoro-e-controllo-di-versione/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>le prestazioni di un webserver</title>
		<link>http://www.e-xtrategy.net/2010/10/26/le-prestazioni-di-un-webserver/</link>
		<comments>http://www.e-xtrategy.net/2010/10/26/le-prestazioni-di-un-webserver/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 08:00:08 +0000</pubDate>
		<dc:creator>daniele luconi</dc:creator>
				<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[apachebench]]></category>
		<category><![CDATA[perfomancetest]]></category>

		<guid isPermaLink="false">http://www.e-xtrategy.net/?p=3161</guid>
		<description><![CDATA[uno dei tool più utilizzati per effettuare performance test è apachebench.
sviluppato da apache, apachebench è un command line tool di semplicissimo utilizzo che permette di eseguire un determinato numero di richieste http ad una determinata pagina web.]]></description>
			<content:encoded><![CDATA[<p><a href="http://dotnetmarche.org/blogs/andreabalducci/archive/2009/04/24/introducing-abanalyzer-an-apache-bench-runner-and-analyzer.aspx"><img class="alignnone size-full wp-image-3170" title="apachebench" src="http://www.e-xtrategy.net/wp-content/uploads/2010/10/apachebench.png" alt="" width="559" height="303" /></a></p>
<p>uno dei tool più utilizzati per effettuare <a href="http://en.wikipedia.org/wiki/Web_server_benchmarking">performance test</a> è <a href="http://en.wikipedia.org/wiki/ApacheBench">apachebench</a>. sviluppato da apache, apachebench è un command line tool di semplicissimo utilizzo che permette di eseguire un determinato numero di richieste http ad una determinata pagina web.</p>
<p>possiamo utilizzarlo da linux, windows e mac e possiamo testare un server web sia locale che remoto. vengono fatte chiamate http standard quindi è possibile testare sia web server apache che di altro tipo. la configurazione ideale  è quella di avere un client da cui lanciare i test e un&#8217;ottima connessione verso il server (rete locale). se tra client e server c&#8217;e&#8217; di mezzo una connessione internet, probabilmente il collo di bottiglia sarà quello.<span id="more-3161"></span></p>
<p>possiamo effettuare il primo semplice test tramite il comando:</p>
<p>ab -n 100 -c 5 http://www.miosito.it/home.html</p>
<p>dove:</p>
<p>-n 100: ab invierà 100 richieste http alla pagina home.html di www.miosito.it<br />
-c 5 : 5 sarà il numero di richieste contemporanee che ab invierà</p>
<p>ab ritornerà un output di questo tipo</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Server Software:        Apache/2.2.16<br />
Server Hostname:        www.miosito.it<br />
Server Port:            80</p>
<p>Document Path:          /home.html<br />
Document Length:        1144 bytes</p>
<p>Concurrency Level:      5<br />
Time taken for tests:   0.239 seconds<br />
Complete requests:      100<br />
Failed requests:        0<br />
Write errors:           0<br />
Total transferred:      133500 bytes<br />
HTML transferred:       114400 bytes<br />
Requests per second:    418.98 [#/sec] (mean)<br />
Time per request:       11.934 [ms] (mean)<br />
Time per request:       2.387 [ms] (mean, across all concurrent requests)<br />
Transfer rate:          546.23 [Kbytes/sec] received</p>
<p>Connection Times (ms)<br />
min  mean[+/-sd] median   max<br />
Connect:        0    5   4.3      4      26<br />
Processing:     1    7   5.2      6      29<br />
Waiting:        0    4   4.8      3      28<br />
Total:          3   12   5.3     11      31</p>
<p>Percentage of the requests served within a certain time (ms)<br />
50%     11<br />
66%     12<br />
75%     13<br />
80%     14<br />
90%     16<br />
95%     28<br />
98%     31<br />
99%     31<br />
100%     31 (longest request)<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>naturalmente per test più attendibili occorre aumentare il numero di richieste e ripetere il test più volte modificando il numero di richieste contemporanee. ovviamente testare una pagina html statica non ha molto senso ma, se il test viene fatto su uno script lato server ad es php, è possibile valutare il comportamento del server in presenza o meno di <a href="http://en.wikipedia.org/wiki/List_of_PHP_accelerators">sistemi di caching</a>.</p>
<p>nel caso in cui dovessimo testare un script che riceve due parametri in post (ad es user e pass) per effettuare il login alla nostra applicazione web, ci vengono in aiuto i flag -p e -T, ed il comando da lanciare diventerà:</p>
<p>ab -n 100 -c 10 -p postfile.txt -T application/x-www-form-urlencoded http://www.miosito.it/login.php</p>
<p>simuleremo 100 richieste di login con le credenziali di accesso specificate nel file postfile.txt in questo formato:</p>
<p>user=prova&amp;pass=prova</p>
<p>un&#8217;altra opzione di ab che può essere molto utile è rappresentata dal flag -e</p>
<p>ab -n 100 -c 10 -p postfile.txt -T application/x-www-form-urlencoded -e output.csv http://www.miosito.it/login.php</p>
<p>che oltre all&#8217;output stampato a schermo, creerà un file comma separeted che conterrà l&#8217;avanzamento percentuale e in millisecondi delle richieste effettuate.</p>
<p>esistono anche altre opzioni per le quali vi rimandiamo al <a href="http://httpd.apache.org/docs/2.2/programs/ab.html">manuale</a> di ab</p>
<p>buon test<br />
daniele</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-xtrategy.net/2010/10/26/le-prestazioni-di-un-webserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>campo scuola metodologie agili 2010</title>
		<link>http://www.e-xtrategy.net/2010/09/27/campo-scuola-metodologie-agili-2010/</link>
		<comments>http://www.e-xtrategy.net/2010/09/27/campo-scuola-metodologie-agili-2010/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 08:00:48 +0000</pubDate>
		<dc:creator>lorenzo massacci</dc:creator>
				<category><![CDATA[eventi]]></category>
		<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[csma2010]]></category>

		<guid isPermaLink="false">http://www.e-xtrategy.net/?p=3108</guid>
		<description><![CDATA[da più di un anno abbiamo adottato il manifesto agile all'interno di e-xtrategy. dopo l'esperienza del #fagg.it09,  abbiamo iniziato ad imparare e sperimentare le metodologie agili sempre guidati dal nostro coach jacopo romei.  inoltre da quasi un'anno partecipiamo attivamente a XPug marche, avendo l'occasione di metterci in discussione e confrontare le nostre esperienze con altri professionisti.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/ilariamauric/4989544044/"><img class="alignnone" src="http://farm5.static.flickr.com/4126/4989544044_48897c189e.jpg" alt="" width="500" height="354" /></a></p>
<p>da più di un anno abbiamo adottato il <a title="manifesto agile" href="http://agilemanifesto.org/iso/it" target="_blank">manifesto agile</a> all&#8217;interno di e-xtrategy. dopo l&#8217;esperienza del <a title="#fagg.it09" href="http://www.e-xtrategy.net/2009/06/01/agile-ora-tocca-a-noi/" target="_blank">#fagg.it09</a>,  abbiamo iniziato ad imparare e sperimentare le <strong>metodologie agili</strong> sempre guidati dal nostro coach <strong>jacopo romei</strong>.  inoltre da quasi un anno partecipiamo <a title="partecipiamo" href="http://www.e-xtrategy.net/2009/11/19/e-xtrategy-incontra-xpugmarche/" target="_blank">attivamente</a> a <strong>XPug marche</strong>, avendo l&#8217;occasione di metterci in discussione e confrontare le nostre esperienze con altri professionisti.</p>
<p>proprio grazie a XPug marche, abbiamo potuto partecipare a questa esperienza che ha preso vita qualche settimana fa, un campo scuola di tre giorni in full immersion nelle pratiche del manifesto agile in una <a title="cornice" href="http://www.lacasadicampagna.biz/" target="_blank">cornice</a> rilassata dell&#8217;entroterra marchigiano in cui undici professionisti dalle diverse specializzazioni guidati dal coach jacopo romei hanno simulano la realizzazione di un progetto software attraverso l&#8217;utilizzo di <a title="extreme programming" href="http://it.wikipedia.org/wiki/Extreme_Programming" target="_blank">extreme programming</a>.<span id="more-3108"></span></p>
<p><span style="text-decoration: underline;">riassumiamo e citiamo alcune testimonianze e punti di vista in merito da parte di due partecipanti:</span></p>
<p>considerazioni di <a title="alessandro violini" href="http://it.linkedin.com/in/lorenzomassacci" target="_blank">lorenzo massacci</a>:</p>
<p>“perché vieni al campo scuola sulle metodologie agili?” mi ha chiesto  jacopo almeno un paio di volte prima del csma10. in effetti dopo aver   partecipato al fagg.it 09 (che trattava in sostanza gli stessi  argomenti) poteva sembrare una ripetizione.</p>
<p>la mia risposta sta nella  metafora utilizzata da lui stesso quando mi ha spiegato in cosa  consiste il suo ruolo di coach, non ricordo le parole esatte ma il  concetto era  questo: <em>per imparare a giocare bene a calcio serve un  allenatore, ma anche alessandro del piero (che ha esperienza e bravura)  ha un allenatore che lo aiuta ad ottenere il massimo dal suo talento.<br />
</em> dopo questi mesi in cui ho letto libri, partecipato a conferenze e  sperimentato sul campo posso affermare con certezza che per trarre  beneficio dalle metodologie agili serve molto allenamento ed un team di  sviluppatori di qualità e quindi quale migliore occasione del campo  scuola per “allenarmi” e mettermi a confronto con “sviluppatori di  qualità” come quelli dell&#8217;xpug marche.</p>
<p>inoltre alcune perle come provare  praticamente il TDD (test driven development) in pair programming con  jacopo o la discussione nata studiando il grafico del <a title="software feedback loop" href="http://www.ilariamauric.it/2010/09/14/csma10-il-mio-bilancio-parte-23/" target="_blank">software feedback  loop</a> non hanno prezzo <img src='http://www.e-xtrategy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>considerazioni di <a title="alessandro violini" href="http://it.linkedin.com/in/alessandroviolini/" target="_blank">alessandro violini</a>:</p>
<p>nonostante avessi partecipato già un anno fa alla formazione di jacopo sulle metodologie agili ho trovato il campo scuola molto utile. in primis il sentirsi ribadire certi concetti dopo un anno di esperienza o “tentata” applicazione è stato molto utile anche perché il mio bagaglio di domande era mutato inevitabilmente e anche alcuni approcci alle metodologie stesse. in secondo luogo è stato molto utile avere anche le testimonianze e le questioni di altre persone che vengono da altri ambienti e da altre specializzazioni ma che spesso incappano nei stessi problemi o dubbi. terzo, in questo campo scuola c&#8217;è stata anche una parte pratica che un anno fa non venne focalizzata. Interessante osservare come lo sviluppatore, qualunque sia il linguaggio, si approccia alla soluzione del problema partendo dai test. stesso punto di vista che potrebbe essere applicato nel mio markup.</p>
<p>in fine, ma non per importanza, questa tre giorni mi ha illuminato su vari aspetti di un progetto in fase di avvio e progettazione. come le varie figure professionali si uniscono nella fase di user stories e plasmano il progetto che verrà realizzato. come il problema del design e della user experience viene “parallelizzato” il più possibile alle altre attività tecniche di codice grazie a piccoli accorgimenti e soprattutto, come l&#8217;agile insegna, grazie ad un approccio mentale diverso. questa parte è spiegata e discussa molto bene in un <a title="post" href="http://www.ilariamauric.it/2010/09/06/csma10-il-mio-bilancio-parte-13/" target="_blank">post</a> di ilaria mauric che ha condiviso con noi questa esperienza.</p>
<p><span style="text-decoration: underline;">cogliamo l&#8217;occasione anche per segnalare un bel articolo del nostro coach </span><a title="jacopo romei" href="http://it.linkedin.com/in/jakuza/" target="_blank">jacopo romei</a><span style="text-decoration: underline;"> che racconta le ultime attività fatte insieme:</span></p>
<p>sono di ritorno da una splendida due giorni passata lavorando con i ragazzi di <strong>e-xtrategy</strong> pensata per svolgere una retrospettiva su un progetto appena concluso, che ho avuto modo di seguire sin dall’inizio. Inutile dire che l’esperienza è stata formativa per me almeno quanto lo è stata per loro, che mi offrono sempre grande fiducia e libertà di svolgere le nostre analisi, senza sovrastrutture inutili, senza pregiudizi e senza la pretesa di dover nascere imparati, né io né loro. (<a href="http://www.sviluppoagile.it/lean-e-xtrategy">leggi tutto l&#8217;articolo di jacopo</a>)</p>
<p>lorenzo</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-xtrategy.net/2010/09/27/campo-scuola-metodologie-agili-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>continuous integration: quando la pratica va oltre gli strumenti</title>
		<link>http://www.e-xtrategy.net/2010/06/15/continuous-integration-quando-la-pratica-va-oltre-gli-strumenti/</link>
		<comments>http://www.e-xtrategy.net/2010/06/15/continuous-integration-quando-la-pratica-va-oltre-gli-strumenti/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 08:00:19 +0000</pubDate>
		<dc:creator>giorgio mandolini</dc:creator>
				<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[continuonusintegration]]></category>

		<guid isPermaLink="false">http://www.e-xtrategy.net/?p=2887</guid>
		<description><![CDATA[il problema dell'integrazione non è banale: quando due o più sviluppatori lavorano contemporaneamente sullo stesso progetto non è raro che, al momento di mettere tutto insieme, si presentino problemi come conflitti o incompatibilità. troppo spesso si assiste allo scenario in cui la data di consegna al cliente è vicina  ed il software è più o meno pronto: < < manca solo l'integrazione finale e gli ultimi fix >>, si direbbe, così facendo però solitamente ci si imbuca in un tunnel dentro il quale difficilmente si farà un bel viaggio, ma soprattutto sarà impossibile conoscerne a priori la lunghezza.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.e-xtrategy.net/wp-content/uploads/2010/06/continuous-integration.jpg"><img class="size-full wp-image-2954 alignnone" title="continuous integration" src="http://www.e-xtrategy.net/wp-content/uploads/2010/06/continuous-integration.jpg" alt="" width="559" height="360" /></a></p>
<p>che cos&#8217;è la continuous integration ?</p>
<p>martin fowler nel suo <a title="Continuous Integration" href="http://martinfowler.com/articles/continuousIntegration.html">articolo</a> spiega:</p>
<p><em>continuous integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily &#8211; leading to multiple integrations per day. each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.</em></p>
<p>da queste poche righe si apre la finestra verso un mondo: fowler non parla di strumenti o tecnologie, bensì di <strong>pratica</strong>.</p>
<p>il problema dell&#8217;integrazione non è banale: quando due o più sviluppatori lavorano contemporaneamente sullo stesso progetto non è raro che, al momento di mettere tutto insieme, si presentino problemi come conflitti o incompatibilità. troppo spesso si assiste allo scenario in cui la data di consegna al cliente è vicina  ed il software è più o meno pronto: <em>&lt;&lt; manca solo l&#8217;integrazione finale e gli ultimi fix &gt;&gt;</em>, si direbbe, così facendo però solitamente ci si imbuca in un  tunnel dentro il quale difficilmente si farà un bel viaggio, ma soprattutto sarà impossibile conoscerne a priori la  lunghezza.<span id="more-2887"></span></p>
<p>i bug e gli imprevisti sono per definizione <strong>non stimabili</strong>, né  in numero né in complessità di risoluzione: come pretendere di stimare  un tempo di integrazione, quando non si ha nemmeno una predizione a  livello locale dei problemi emersi ? siamo finiti nel tunnel, nell&#8217;<strong>integration hell</strong>: la scadenza è sempre più vicina e non abbiamo idea di quando il software sarà correttamente funzionante. lo stress nel team aumenta con l&#8217;avvicinarsi della deadline, si rimane in ufficio fino a tardi e la stanchezza ed il malumore accumulati portano inevitabilmente all&#8217;introduzione di nuovi bug per risolvere quelli precedenti.</p>
<p>è proprio nel momento di mettere tutto insieme che la continuous integration interviene: l&#8217;integrazione del software non dovrebbe avvenire alla conclusione del processo di sviluppo, in cui tutti i problemi vengono identificati e risolti in una sola volta, ma dovrebbe <strong>essere parte</strong> di questo processo ed <strong>intervenire continuamente</strong>. la motivazione di ciò è semplice: rendere questo processo continuo limita il numero e la gravità degli errori rilevati, perché effettuare piccoli cambiamenti ed integrarli subito significa dover correggere al più bug recenti e non interi moduli dipendenti da anomalie introdotte molto tempo indietro e mai rilevate.</p>
<p>vediamo ora le pratiche fondamentali che ci permettono di fare continuous integration correttamente e come esse influenzeranno il nostro processo di sviluppo.</p>
<p><strong>utilizzare un version control repository</strong></p>
<p>l&#8217;utilizzo di un sistema di controllo di versione come <a href="http://subversion.tigris.org/">subversion</a>, <a href="http://git-scm.com/">git</a> o <a href="http://ximbiot.com/cvs/">CVS</a> è il primo mattone con il quale costruire il nostro ambiente di continuous integration. tralasciando le differenze che i vari sistemi di controllo di versione hanno tra loro, è di fondamentale importanza avere un &#8220;repository&#8221; che permetta di gestire e monitorare i cambiamenti che avvengono sulla nostra code base. in questo modo si ha inoltre la possibilità di effettuare rollback dei cambiamenti: tramite strumenti di questo tipo infatti viene tenuta traccia della storia di ogni file.</p>
<p><strong>nel repository deve essere presente tutto il necessario<br />
</strong></p>
<p>non meno importante è l&#8217;avere tutto il nostro software, compresi framework, librerie e dipendenze esterne, all&#8217;interno del nostro repository: esso dovrà fungere da <strong>unica fonte</strong> del codice ed il nostro software dovrà essere in grado di funzionare solamente con quello che vi è contenuto, senza interventi esterni o aggiunte manuali.</p>
<p><strong>eseguire una &#8220;commit&#8221; almeno una volta al giorno</strong></p>
<p>come regola empirica, ci si impone di inviare il proprio lavoro al repository almeno una volta al giorno, anche se è vivamente consigliato puntare ad un numero di integrazioni maggiore. questo è necessario per rispettare il principio dei <strong>piccoli cambiamenti</strong> precedentemente introdotto. naturale conseguenza di ciò è la suddivisione del proprio lavoro in piccoli task atomici, che favorisce inoltre la scrittura di un codice più snello, pulito e mediamente privo di inutili complessità. in una sola parola, rispettare il <a href="http://en.wikipedia.org/wiki/KISS_principle">KISS principle</a>.</p>
<p><strong>automatizzare le build</strong></p>
<p>il processo di build non è solo la compilazione del codice (che non sempre avviene, come ad esempio nel linguaggio PHP) ma significa compiere un determinato numero di azioni che permettono al software di essere correttamente &#8220;costruito&#8221; e reso funzionante. rendere questo insieme di passi automatico attraverso un <strong>singolo script di building</strong> (come <a href="http://ant.apache.org/">ant </a>o <a href="http://phing.info/">phing</a>) porta con sé vari vantaggi. primo: limita l&#8217;intervento umano e di conseguenza la probabilità di errori ed omissioni (lo sviluppatore lancia un singolo comando &#8220;build&#8221;). secondo, ma non meno importante: la riproducibilità ottenuta che permetterà a tutti gli sviluppatore di eseguire gli stessi passaggi in maniera identica (a meno di eventuali parametri di configurazione) mitigando la famosa, odiata frase &#8220;but it works on my machine&#8221;.</p>
<p><strong>self testing build</strong></p>
<p>non si fa continuous integration senza scrivere <strong>test automatici</strong>. tali test devono essere inoltre inglobati nei build script. a build completata lo sviluppatore conoscerà il risultato del proprio lavoro e solo tramite test automatici sarà in grado di averne confidenza sulla bontà. non è pensabile eseguire tali test manualmente perchè inevitabilmente qualcosa prima o poi verrà omesso, soprattutto nel modello di sviluppo che stiamo introducendo, in cui il software viene integrato (e quindi necessita di essere ritestato) ad ogni cambiamento.</p>
<p>è facile dire &#8220;il modulo b non necessita di essere testato perché ho modificato solo il modulo a&#8221; ma quante volte, nella realtà, sono emersi problemi derivanti da certe assunzioni? i test automatici sono la nostra rete di salvataggio e sono perfettamente riproducibili: ad ogni build ritesteranno tutte le funzionalità per cui sono stati scritti, più velocemente e più affidabilmente di qualsiasi sviluppatore o team, anche il più volenteroso, veloce e competente. nessuno riuscirà mai ad eseguire un gran numero di volte la stessa batteria di test senza ogni volta introdurre piccole differenze, soprattutto a fine giornata, quando la stanchezza si fa sentire. i build script, invece, non si stancano, usiamoli.</p>
<p><strong>eseguire delle build private nelle workstation locali<br />
</strong></p>
<p>ogni sviluppatore dovrà scaricare dal repository l&#8217;ultima versione del software che sta sviluppando. a questo punto lavorerà nella propria <strong>macchina locale</strong>, effettuando i cambiementi necessari per il proprio lavoro. una volta terminati dovrà effettuare la build del software sulla propria workstation ed osservarne i risultati. se tutto funziona correttamente, prima di inviare il proprio codice al repository, scaricherà da questo gli eventuali cambiamenti effettuati nel frattempo dagli altri sviluppatori e rilancerà di nuovo la build. se tutto va a buon fine, è stato fatto un primo passo verso l&#8217;integrazione: i propri cambiamenti sono stati integrati ed è possibile aggiornare la code-base eseguendo la &#8220;commit&#8221;.</p>
<p><strong>non inviare codice difettoso al repository</strong></p>
<p>in caso di fallimento dei test durante la build locale lo sviluppatore dovrà <strong>correggere i malfunzionamenti</strong> e rieseguire la build fino alla risoluzione dei problemi. non potrà, in nessun caso, inviare il proprio lavoro al repository se i test non certificano che esso è correttamente integrato.</p>
<p>in questo modo si minimizza la probabilità di avere software non funzionante nel repository: la copia &#8220;rotta&#8221; resterà confinata nella macchina dello sviluppatore che si occuperà di sistemarla.</p>
<p><strong>eseguire una build di integrazione ad ogni cambiamento<br />
</strong></p>
<p>ogni volta che il repository viene aggiornato con nuovi cambiamenti, il codice necessita di essere ritestato. successivamente alle build private, si eseguono quindi delle <strong>build di integrazione</strong>, che devono essere effettuate su di una <strong>macchina dedicata</strong>, che riproduca il più fedelmente possibile il vero ambiente di produzione. è importantissimo, inoltre, che questa ultima macchina sia priva di dipendenze e librerie spurie che non provengano direttamente dal repository: in questo modo ci si accerta che il lavoro dello sviluppatore sia ancora riproducibile e non dipenda da una sua particolare configurazione a livello locale.</p>
<p>l&#8217;integration build può essere manuale o effettuata automaticamente tramite un continuous integration server (come <a href="http://hudson-ci.org/">hudson</a> o <a href="http://cruisecontrol.sourceforge.net/">cruisecontrol</a>). sebbene quest&#8217;ultimo componente non sia obbligatorio, è comunque raccomandato usarne uno: sarà lui per noi a rilevare i cambiamenti sul repository ed eseguire le build automaticamente, fornendo inoltre una comoda dashboard con report sui test, code coverage, strumenti di analisi aggiuntivi e documentazione auto-generata.</p>
<p><strong>non scaricare codice difettoso dal repository, riparare immediatamente le build rotte<br />
</strong></p>
<p>nella malaugurata ipotesi in cui la build di integrazione fallisca, nonostante siano state correttamente passate le build private, sorge il problema della &#8220;broken build&#8221;: è entrato un bug nel codice del repository e tutti coloro che andranno a scaricarlo otterrebbero del software non funzionante.  è compito dell&#8217;ultimo sviluppatore che ha eseguito la commit risolvere il problema, ma visto che questo malfunzionamento coinvolge tutto il team è meglio non scaricare affatto il codice difettoso: invece che perdere tempo nello sviluppo di eventuali workaround è preferibile <strong>aiutare gli altri</strong> a far tornare la build nello status di &#8220;green&#8221;.</p>
<p><strong>build veloci e rapid feedback</strong></p>
<p>è importante che il processo di build sia veloce e rapido: non è accettabile attendere più 10 minuti per il risultato dei nostri test (regola del <em>&#8220;10 minute build&#8221;</em>), altrimenti si perderà troppo tempo per via delle molteplici integrazioni o peggio ancora lo sviluppatore tenderà ad accumulare molto codice prima di lanciare i test. per evitare questo <em>anti pattern</em> è consigliabile quindi eseguire delle <strong>staged-build</strong> ossia lanciare le build private accompagnate solamente da test leggeri (unitari) e le build di integrazione divise in due: test unitari prima (per individuare subito problemi grossolani) per le build lanciate ad ogni commit e test più approfonditi (unitari e funzionali, analisi del codice, delle dipendenze, del code-style ecc) per build lanciate in un successivo momento, magari schedulate in notturna (nightly build) o in seguito al successo delle precedenti commit-build.</p>
<p>in questo modo si ottiene un <strong>feedback immediato</strong> che deve essere coadiuvato da meccanismi che lo rendano facilmente individuabile e  interpretabile: una lampada sempre verde che diventa rossa in caso di build rotta è uno degli esempi più tipici. è importante che il feedback sia incentrato sulle informazioni utili ed essenziali, tutto il superfluo tenderà a distrarre lo sviluppatore, che nella confusione rischia di ignorare messaggi importanti.</p>
<p><strong>i pro ed i contro</strong></p>
<p>il rispetto di una pratica richiede un iniziale costo dovuto dalla intrinseca curva di apprendimento che presenta. test automatici e buone pratiche di programmazione hanno un costo in termini di tempo, come pure l&#8217;acquisto e l&#8217;uso di macchine dedicate per simulare l&#8217;ambiente di produzione; tutto questo, nel brevissimo termine, potrebbe essere visto come un overhead. tali costi verranno però <strong>ampiamente ripagati</strong> durante il ciclo di sviluppo del nostro software. ne <strong>beneficerà la qualità </strong>del codice sviluppato: grazie al testing continuo infatti si ha sempre la certezza che niente è andato storto. <strong>ansia e stress caleranno</strong>: se tutto quel che viene scritto è sempre attestato come funzionante da opportuni test, automaticamente cala anche la paura di andare incontro a imprevisti ed inconvenienti. la <strong>comunicazione </strong>all&#8217;interno del team aumenterà: grazie al feedback rapido e condiviso, tutti sanno a che punto è lo sviluppo del software, quali sono i problemi emersi e le funzionalità ancora da implementare. anche il <strong>rapporto con il cliente</strong> trarrà dei benefici: la maggior tranquillità e sicurezza sul progetto verranno percepite come sintomo di puntualità e professionalità. ultima ma non  meno importante è infine la possibilità di poter effettuare <strong>continui rilasci</strong> di nuove versioni del nostro software: nel repository infatti è presente in ogni momento software perfettamente funzionante e quindi <em>&#8220;deployable&#8221;</em>.</p>
<p><strong>questione di pratica</strong></p>
<p>in questa introduzione abbiamo parlato di buone pratiche (tante) e  citato alcuni strumenti (pochi) per mettere in piedi un ambiente di  continuous integration. è infatti sulle pratiche di sviluppo il vero <strong>investimento </strong>che un team di lavoro dovrebbe sostenere, perchè dietro a tutte le tecnologie, anche le più valide e promettenti, ci sono sempre <strong>le persone</strong>. la continuous integration ne prende atto, facendosi carico di tutti quei compiti che rendono dura la vita dello sviluppatore, che potrà dedicarsi finalmente a compiti di più alto livello e alla vera business logic di progetto.</p>
<p>una miglior comunicazione tra stakeholders ed un ambiente mitigato da ansia e stress sono i primi ingredienti per vivere ogni progetto come una nuova sfida, vissuta con <strong>proattività </strong>e voglia di fare: non dimentichiamo mai che il software, benché eseguito da macchine, è sempre scritto da persone <img src='http://www.e-xtrategy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>per chi volesse approfondire consiglio la lettura dell&#8217;<a href="http://martinfowler.com/articles/continuousIntegration.html">articolo  originale</a> dal sito di martin fowler ma soprattutto dell&#8217;ottimo libro <em>&#8220;Continuous Integration: Improving Software Quality and Reducing Risk&#8221;</em> (<a href="http://www.integratebutton.com/">http://www.integratebutton.com/</a>).</p>
<p>giorgio</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-xtrategy.net/2010/06/15/continuous-integration-quando-la-pratica-va-oltre-gli-strumenti/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>individuare intrusioni con tripwire</title>
		<link>http://www.e-xtrategy.net/2010/05/25/individuare-intrusioni-con-tripwire/</link>
		<comments>http://www.e-xtrategy.net/2010/05/25/individuare-intrusioni-con-tripwire/#comments</comments>
		<pubDate>Tue, 25 May 2010 07:00:27 +0000</pubDate>
		<dc:creator>daniele luconi</dc:creator>
				<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[IDS]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[tripware]]></category>

		<guid isPermaLink="false">http://www.e-xtrategy.net/?p=2868</guid>
		<description><![CDATA[molti sysadmin avranno sicuramente avuto modo nella loro vita professionale di imbattersi nell'arduo (se non a volte impossibile) compito di rimettere in sesto dei sistemi danneggiati da intrusioni di utenti malintenzionati. in casi come questo, ci sono dei software chiamati host based IDS, che ci possono venire in aiuto, se non altro facilitandoci il lavoro, tenendo traccia di tutti i file modificati in un certo arco di tempo.]]></description>
			<content:encoded><![CDATA[<p><a href="http://m.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/087/8758/8758f1.png"><img class="alignleft size-full wp-image-2875" title="tripwire" src="http://www.e-xtrategy.net/wp-content/uploads/2010/05/tripwire.png" alt="" width="341" height="324" /></a>molti sysadmin avranno sicuramente avuto modo nella loro vita professionale di imbattersi nell&#8217;arduo (se non a volte impossibile) compito di rimettere in sesto dei sistemi danneggiati da intrusioni di utenti malintenzionati. in casi come questo, ci sono dei software chiamati <a href="http://it.wikipedia.org/wiki/Host-based_intrusion_detection_system" target="_blank">host based IDS</a>, che ci possono venire in aiuto, se non altro facilitandoci il lavoro, tenendo traccia di tutti i file modificati in un certo arco di tempo.</p>
<p>in questo articolo andremo ad illustrare i passi necessari per la configurazione di <a href="http://www.tripwire.org/" target="_blank">tripwire</a>, uno dei più diffusi host based IDS. disponibile sia in versione open source che in versione commerciale, è un software che una volta installato e configurato ci informerà di tutte le modifiche che avvengono nel file system, rispetto ad uno stato iniziale considerato &#8220;sicuro&#8221; che verrà salvato in un database.</p>
<p>su un sistema operativo come ubuntu, possiamo installare il software con un semplice <em>apt-get install tripwire</em></p>
<p>al termine dell&#8217;installazione verrà avviata automaticamente la configurazione iniziale del programma, durante la quale ci verrà chiesto di inserire la &#8220;site key&#8221; e la &#8220;local key&#8221;, con cui tripwire provvederà a creare in <em>/etc/tripwire</em> i file di configurazione con le policy di default, in particolare i file <em>tw.cfg</em> e <em>tw.pol</em>. è consigliato rendere questi file leggibili solo dall&#8217;utente root con il comando <em>chmod 0600 /etc/tripwire/tw.cfg /etc/tripwire/tw.pol<span id="more-2868"></span></em></p>
<p>da notare che questi 2 file sono binari, creati partendo dai due file plain text <em>twcfg.txt</em> e <em>twpol.txt</em>, saranno quindi questi due file che dobbiamo modificare per apportare modifiche alla configurazione. per un primo utilizzo possiamo lasciare le versioni di default; consiglio solo, nel caso in cui si voglia che i report vengano inviati per email, di aggiungere al file <em>twcfg.txt</em> la riga</p>
<p><em>GLOBALEMAIL   = email@miodominio.it</em></p>
<p>una volta modificato il file <em>twcfg.txt</em> occorre ricreare il corrispettivo file binario, per farlo possiamo utilizzare il comando <em>twadmin &#8211;create-cfgfile -S site.key /etc/tripwire/twcfg.txt</em></p>
<p>nel caso in cui venga invece modificato il file <em>twpol.txt</em> per ricreare il binario <em>tw.pol</em> dobbiamo utilizzare il comando <em>twadmin &#8211;create-polfile -S site.key /etc/tripwire/twpol.txt</em></p>
<p>a questo punto, possiamo creare tramite il comando <em>tripwire &#8211;init</em> il database iniziale che tripwire utilizzerà per confrontare lo stato del sistema ad ogni check, il file verrà creato nella cartella <em>/var/lib/tripwire/</em></p>
<p>ora non ci resta che testare il funzionamento di tripwire utilizzando il comando <em>tripwire &#8211;check &#8211;email-report</em> che ci invierà per email il report con tutti i file di sistema modificati, aggiunti o cancellati dalla creazione del database iniziale. il consiglio è naturalmente quello di inserire il comando in crontab per far generare automaticamente i report quando volete.</p>
<p>nel caso in cui si voglia modificare il file <em>/etc/tripwire/twpol.txt</em>, ecco un semplice esempio di regola che possiamo aggiungere:</p>
<p><em>(<br />
rulename = &#8220;Sito web www.miosito.it&#8221;,<br />
severity = N, (dove N è un numero compreso tra 0 e 100, più alto è il numero più alta è la &#8216;criticità&#8217; di questa sezione)<br />
emailto = webmaster@miosito.it<br />
)<br />
{<br />
/var/www/www.miosito.it                  -&gt; $(SEC_CRIT) ;<br />
}</em></p>
<p>nel dettaglio, questa regola provvederà ad ogni check di inviare una mail a webmaster@miosito.it con tutti i file modificati di uno specifico sito.</p>
<p>un ultimo consiglio: vista la comprensibile sensibilità dei file di configurazione, è buona norma non tenere i file di configurazione plain text, ma di cancellarli ogni volta che si è conclusa la configurazione. per future modifiche possiamo sempre rigenerarli utilizzando i comandi:</p>
<p><em>twadmin &#8211;print-polfile<br />
twadmin &#8211;print-cfgfile</em></p>
<p>daniele<em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-xtrategy.net/2010/05/25/individuare-intrusioni-con-tripwire/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>il mac: ambiente di lavoro anche per lo sviluppatore</title>
		<link>http://www.e-xtrategy.net/2010/03/22/il-mac-ambiente-di-lavoro-anche-per-lo-sviluppatore/</link>
		<comments>http://www.e-xtrategy.net/2010/03/22/il-mac-ambiente-di-lavoro-anche-per-lo-sviluppatore/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 09:00:33 +0000</pubDate>
		<dc:creator>alessandro violini</dc:creator>
				<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[frontenddeveloper]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[mamp]]></category>
		<category><![CDATA[suite]]></category>

		<guid isPermaLink="false">http://www.e-xtrategy.net/?p=2645</guid>
		<description><![CDATA[quasi un anno fa parlammo degli editor e degli ambienti di sviluppo ripercorrendo la storia delle nostre scelte e le migliorie degli strumenti fino a specificare le nostre preferenze. dodici mesi non sono pochi, specialmente nel web e rieccoci a parlare di ambiente di lavoro, questa volta con una certa sicurezza e soprattutto soddisfazione.

non solo una questione di editor, o di sistemi integrati per lo sviluppo ma un discorso di piattaforma, di sistema operativo e di applicazioni. già nel titolo del post spicca una parola mac,  inutile discutere le scelte ma di certo va ancora di moda associare questo sistema operativo solo ai lavori di “grafica”... parola che oltretutto da sola significa tutto e niente.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/puntodevista/118666362/"><img class="size-full wp-image-2654 alignleft" title="mac" src="http://www.e-xtrategy.net/wp-content/uploads/2010/03/mac.jpg" alt="" width="324" height="324" /></a>quasi un anno fa parlammo degli <strong>editor</strong> e degli <strong>ambienti di sviluppo</strong> ripercorrendo la storia delle nostre scelte e le migliorie degli strumenti fino a specificare le nostre <a title="preferenze" href="http://www.e-xtrategy.net/2009/03/24/dagli-editor-visuali-agli-ambienti-integrati-di-sviluppo/" target="_blank">preferenze</a>. dodici mesi non sono pochi, specialmente nel web e rieccoci a parlare di ambiente di lavoro, questa volta con una certa sicurezza e soprattutto soddisfazione.</p>
<p>non solo una questione di editor, o di sistemi integrati per lo sviluppo ma un discorso di piattaforma, di sistema operativo e di applicazioni. già nel titolo del post spicca una parola<strong> mac</strong>,  inutile discutere le scelte ma di certo va ancora di moda associare questo sistema operativo solo ai lavori di “grafica”&#8230; parola che oltretutto da sola significa tutto e niente.</p>
<p>in questo articolo vorrei spiegare come ho creato il mio ambiente di lavoro ideale su questa piattaforma utilizzandone le potenzialità che apprezzo senza rinunciare alla personalizzazione e senza compromessi rispetto alle esigenze dell&#8217;infrastruttura aziendale. da <a title="front-end web developer" href="http://www.e-xtrategy.net/chi-siamo/" target="_blank">front-end web developer</a> necessito innanzi tutto di <strong>una suite di lavoro dalle caratteristiche web-creative</strong> che sia potente, efficace e soprattutto compatibile col gli standard utilizzati dai grafici e creativi. inutile dire che tra le migliori troviamo la <strong>adobe</strong> con la sua <a title="creative suite" href="http://www.adobe.com/it/products/creativesuite/web/" target="_blank">creative suite</a> web premium: massima compatibilità con la piattaforma mac e possibilità di operare con la totalità dei file che provengono dagli studi grafico-creativi.<span id="more-2645"></span></p>
<p>ho poi bisogno di un <strong>editor</strong>, visto che nell&#8217;ultimo periodo abbiamo cambiato modalità di lavoro optando per un <strong>sistema con controllo della versione</strong>, la scelta è stata già scremata dalle applicazioni che non rispettano queste caratteristiche. inizialmente, reduce dalla vecchia modalità di lavoro, mi sarei accontentato di un editor e da un sistema di versioning separato. ho provato <a title="coda" href="http://www.panic.com/coda/" target="_blank">coda</a> e <a title="taco" href="http://tacosw.com/" target="_blank">taco</a> come editor testando parallelamente <strong>subversion, version e syncro SVN</strong> per il controllo della versione. risultati abbastanza soddisfacenti ma il software sopra citato non è tutto freeware.</p>
<p>successivamente, in base anche alle esperienze dei colleghi, ho preferito un software unico più potente (anche se più pesante), in grado di elaborare tutti i formati, con un alto livello di personalizzazione (anche per la parte di colorazione del codice), con un alto livello di utenza (e quindi una community affidabile), con una estendibilità in grado di soddisfare ogni esigenza e freeware. la scelta si è spostata su <a title="eclipse" href="http://www.eclipse.org" target="_blank">eclipse</a>, software disponibile sia per windows, per linux e per mac che tramite il plugin <a title="subvertise" href="http://www.eclipse.org/subversive/" target="_blank">subversive</a> installa anche il sistema per il controllo della versione.</p>
<p>ora manca solo un <strong>web server</strong> da installare sulla macchina per lavorare in locale che in base alle caratteristiche aziendali dovrà essere <strong>LAMP</strong> (linux, apache, mysql, php), mi sono subito orientato alla scelta verso l&#8217;ambiente <a title="MAMP" href="http://www.mamp.info/en/index.html" target="_blank">MAMP</a> molto “apple formed”, gratuito ed immediato tanto che è segnalato anche tra le migliori applicazioni per mac. <strong>MAMP</strong> ha una start-up page immediata che ingloba le preferenze scelte, link alla pagina info.php e link alla gestione dei database con il pannello di phpmysql e un widget appositamente creato per la dashboard di machintosh che permette di avviare e stoppare il server in qualsiasi momento in maniera molto rapida.</p>
<p>potremmo essere pronti per lavorare ma vorrei soffermarmi su un aspetto più tecnico e macchinoso. lavorare in locale esige la modifica del file di <strong>hosts</strong>. questa modifica da mac non è immediata. di seguito spiego minuziosamente i passaggi da fare in modo da permettere anche ai non tecnici di poterlo effettuare autonomamente.</p>
<p>il file di hosts, come su linux, si trova dentro la cartella <em>/etc</em>. per andarci dal nostro finder scegliere il menu <em>&#8220;vai&#8221;</em> quindi <em>&#8220;vai alla cartella&#8221;</em> e scrivere <em>/etc</em> ci si apre la finestra dove possiamo trovare il file hosts che se apriamo con un editor o con l&#8217;applicazione di default text edit ci mostra il contenuto del database di hosts della macchina. in teoria dovremmo aggiungere una riga inserendo la regola che fa rispondere al nostro indirizzo locale la cartella di lavoro ma il problema è che il nostro utente, seppur amministratore della macchina, non ha i privilegi per modificare questi settaggi sensibili.</p>
<p>occorre infatti diventare <strong>utente root</strong> del nostro mac. come fare? in <a title="questo post" href="http://www.spider-mac.com/blog/spider-mac/Voci/2009/9/4_Snow_Leopard__come_abilitare_lutente_root.html" target="_blank">questo post</a> vengono spiegati molto bene i passaggi da fare anche nel più recente sistema operativo snow leopard che ha rivisto l&#8217;organizzazione di certi menu. seguita la procedura avremo abilitato l&#8217;utente root (associando ad esso una password) ed ora dobbiamo abilitarlo utilizzando la<strong> shell</strong>. nelle <em>&#8220;applicazioni&#8221;</em> c&#8217;è la carella <em>&#8220;utility&#8221;</em> quindi l&#8217;applicazione <em>&#8220;terminale&#8221;</em>. digitiamo la parola <em>&#8220;su&#8221;</em> (per diventare super utente, appunto root) e alla pressione di invio ci verrà chiesta la password (quella che abbiamo scelta quando abbiamo abilitato l&#8217;utente root). a questo punto ci verrà restituito il prompt da utente root per quella sessione di terminale. digitiamo il comando <em>&#8220;vim/etc/hosts&#8221;</em> (che equivale a dire modifico il file hosts sito dentro la cartella /etc) e alla pressione di invio ci verrà aperto dentro il terminale il file hosts. premere la lettera <em>&#8220;I&#8221;</em> per effettuare l&#8217;editing e una volta aggiunta la riga necessaria premere il tasto ESC seguito dai due punti. ora digitare <em>&#8220;wq&#8221;</em> (write and quit) per uscire dall&#8217;editing.</p>
<p>alessandro</p>
<p>photo credits: <a title="apple command" href="http://www.flickr.com/photos/puntodevista/118666362/" target="_blank">apple command</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-xtrategy.net/2010/03/22/il-mac-ambiente-di-lavoro-anche-per-lo-sviluppatore/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ispconfig: il pannello di controllo per hosting</title>
		<link>http://www.e-xtrategy.net/2010/02/26/ispconfig-il-pannello-di-controllo-per-hosting/</link>
		<comments>http://www.e-xtrategy.net/2010/02/26/ispconfig-il-pannello-di-controllo-per-hosting/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 09:00:29 +0000</pubDate>
		<dc:creator>daniele luconi</dc:creator>
				<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[ispconfig]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://www.e-xtrategy.net/?p=2552</guid>
		<description><![CDATA[uno dei compiti più complicati per un sysadmin è senza dubbio gestire un server di servizi hosting. è un lavoro che richiede molta esperienza e attenzione, in quanto errate configurazioni possono compromettere uno degli ambienti più delicati: il server di produzione. col tempo sono nati diversi software per semplificare questo lavoro, automatizzando molte procedure laboriose; ce ne sono alcuni proprietari e a pagamento (es: cpanel, plesk) e una vasta scelta tra quelli open source.]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-2560" title="ispconfig_logo" src="http://www.e-xtrategy.net/wp-content/uploads/2010/03/ispconfig_logo.png" alt="" width="258" height="190" />uno dei compiti più complicati per un <strong>sysadmin</strong> è senza dubbio gestire un server di servizi hosting. è un lavoro che richiede molta esperienza e attenzione, in quanto errate configurazioni possono compromettere uno degli ambienti più delicati: il server di produzione. col tempo sono nati diversi software per semplificare questo lavoro, automatizzando molte procedure laboriose; ce ne sono alcuni proprietari e a pagamento (es: cpanel, plesk) e una vasta scelta tra quelli open source.</p>
<p>varie sessioni di ricerca e test ci hanno portato a considerare <a title="ispconfig" href="http://www.ispconfig.org/" target="_blank">ispconfig</a> uno dei migliori software open source in questione disponibili nel mercato. come riportato dal sito web ufficiale, ispconfig è un &#8220;pannello di controllo hosting open source, disponibile sotto licenza <a title="BDS" href="http://it.wikipedia.org/wiki/Licenze_BSD" target="_blank">BSD</a>. è attualmente disponibile in due versioni: <strong>ispconfig 2</strong>, ancora supportata e considerata più stabile e<strong> ispconfig 3</strong>, più recente e senza dubbio migliore nell&#8217;interfaccia, ma ancora non ha tutte le utilità di ispconfig 2 (vedi ad esempio l&#8217;assenza di add-ons ufficiali, che di certo non tarderanno ad essere sviluppati).<span id="more-2552"></span></p>
<p>ispconfig è interamente scritto in<strong> php</strong>, il che lo rende facilmente espandibile e personalizzabile da aziende come e-xtrategy che prediligono lo sviluppo di applicazioni scritte in questo linguaggio di programmazione. come ogni buon software open surce che si rispetti,  ha un&#8217;ottima documentazione, disponibile in rete riguardante l&#8217;installazione e la configurazione, a partire dalla <a title="documentazione" href="http://www.ispconfig.org/documentation.htm" target="_blank">documentazione</a> ufficiale, fino ad arrivare alle utili guide e i forum di supporto presenti su <a title="howtoforge" href="http://www.howtoforge.com/forums/forumdisplay.php?f=14" target="_blank">howtoforge</a>, i cui gestori sono gli ideatori di ispconfig.</p>
<p>la lista delle<a title="features" href="http://www.ispconfig.org/features.htm" target="_blank"> features</a> è veramente vasta, infatti grazie ad ispconfig possiamo eseguire tutte le operazioni che ci permetteranno di amministrare il nostro server hosting (gestione di spazio web, account ftp, account email, dns ecc.), il tutto tramite un&#8217;interfaccia web altamente user friendly. per quanto riguarda la gestione del server web, una delle funzionalità che riteniamo molto utile è la possibilità di scegliere la modalità con cui verrà eseguito il php per ogni sito che andremo a creare, potendo scegliere tra suphp, fast-cgi, mod-php e cgi in base al carico e agli accessi che presumiamo il sito potrà avere.</p>
<p>come detto, ispconfig è scritto in php e, in caso si vogliano apportare delle modifiche al codice, la sua semplice disposizione dei file ci permette con un po&#8217; di pratica di trovare in poco tempo le parti di codice che cerchiamo. tutti i file sono presenti nella cartella<br />
<em>/usr/local/ispconfig/</em><br />
e nella cartella<br />
<em>/usr/local/ispconfig/server<br />
</em> troviamo tutti i php che vengono eseguiti ogni qualvolta eseguiamo un&#8217;operazione dall&#8217;interfaccia web, ad esempio<br />
<em>/usr/local/ispconfig/server/plugins-availabl/email_plugin.inc.php<br />
</em> è  il file verrà eseguito ogni volta che andiamo a inserire/modificare un nuovo account email.</p>
<p>nella cartella<br />
<em>/usr/local/ispconfig/server/conf</em><br />
sono invece contenuti i template dei file di configurazione per ogni applicazione, ad esempio il file<br />
<em>/usr/local/ispconfig/server/conf/vhost.conf.master</em><br />
è il file template che verrà utilizzato da ispconfig per generare il virtualhost apache ogni volta che andremo a creare un nuovo sito web.</p>
<p>daniele</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-xtrategy.net/2010/02/26/ispconfig-il-pannello-di-controllo-per-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>la realtà aumentata è davanti ai nostri occhi</title>
		<link>http://www.e-xtrategy.net/2009/12/15/la-realta-aumentata-e-davanti-ai-nostri-occhi/</link>
		<comments>http://www.e-xtrategy.net/2009/12/15/la-realta-aumentata-e-davanti-ai-nostri-occhi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 09:00:35 +0000</pubDate>
		<dc:creator>alfredo morresi</dc:creator>
				<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[alfredomorresi]]></category>
		<category><![CDATA[mobilesocialgaming]]></category>
		<category><![CDATA[realtàaumentata]]></category>

		<guid isPermaLink="false">http://www.e-xtrategy.net/?p=2404</guid>
		<description><![CDATA[sovrapporre uno o piu' strati informativi alla realta' davanti ai nostri occhi, mostrare dati provenienti dalla rete agganciati a cio' che stiamo vedendo: a piu' di 20 anni di distanza, la visione dei grandi autori del cyberpunk, come gibson in "luce virtuale", incontra una tecnologia in grado di farla diventare concreta e alla portata di tutti. nascono cosi' interessanti scenari di realta' aumentata: un nuovo mondo da scoprire, sempre piu' mobile, sempre piu' con noi anche fuori da casa e dal lavoro.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.uwplatt.edu/web/presentations/ar/heweb09/pix/augmented-reality-hud.jpg"><img class="alignnone" src="http://www.uwplatt.edu/web/presentations/ar/heweb09/pix/augmented-reality-hud.jpg" alt="" width="400" height="300" /></a></p>
<p><strong><img class="alignleft" src="http://www.e-xtrategy.net/wp-content/uploads/2009/12/rainbowbreeze.png" alt="" width="63" height="63" />guest post</strong> di <a title="alfredo morresi" href="http://www.rainbowbreeze.it/" target="_blank">alfredo morresi</a> – <a title="software engineer" href="http://it.linkedin.com/in/alfredomorresi" target="_blank">software engineer</a></p>
<p style="text-align: left;"><em>pubblichiamo con piacere un articolo nato da una riflessione di alfredo che tratta di un argomento innovativo su cui ci stiamo confrontando in questo periodo.</em></p>
<p>sovrapporre uno o piu&#8217; strati informativi alla realta&#8217; davanti ai nostri occhi, mostrare dati provenienti dalla rete agganciati a cio&#8217; che stiamo vedendo: a piu&#8217; di 20 anni di distanza, la visione dei grandi autori del cyberpunk, come gibson in &#8220;luce virtuale&#8221;, incontra una tecnologia in grado di farla diventare concreta e alla portata di tutti. nascono cosi&#8217; interessanti scenari di realta&#8217; aumentata: <strong>un nuovo mondo da scoprire, sempre piu&#8217; mobile</strong>, sempre piu&#8217; con noi anche fuori da casa e dal lavoro.</p>
<p>i cyborg della serie terminator poteva vedere informazioni aggiuntive in sovraimpressione a quanto i loro occhi inquadravano: nome della persona, dati sui veicoli, strada da percorrere. seppur vecchio di 25 anni, questo e&#8217; un primo esempio di cosa si puo&#8217; fare con la realta&#8217; aumentata. da una fiction holliwoodiana del 1984, passiamo ai giorni nostri, dove i telefonini piu&#8217; avanzati hanno portato questa stessa possibilita&#8217; alle masse. basta mettere a fuoco un <a title="monumento" href="http://www.youtube.com/watch?v=8EA8xlicmT8" target="_blank">monumento</a> per conoscere il suo nome e una dettagliata descrizione, presa dalle pagine di wikipedia; trovarsi davanti ad un negozio ed accedere alle recensioni scritte dagli <a title="utenti" href="http://www.youtube.com/watch?v=KgTwSXK_5dg" target="_blank">utenti</a>, puntare una strada e sapere che, in fondo a destra, c&#8217;e&#8217; una pizzeria, potendo anche navigare sul suo sito internet.<span id="more-2404"></span></p>
<p><strong>ma come&#8217; possibile questa magia?</strong> parte del merito e&#8217; dei device mobili di ultima generazione, che da telefonini si sono evoluti fino a diventati smartphone e, oltre ad offrirci un collegamento in mobilita&#8217; alla rete internet, sono in grado di capire esattamente dove si trovano nello spazio. il gps fornisce le coordinate, gli accelerometri l&#8217;inclinazione, la bussola la direzione. combinando questi tre fattori, e&#8217; possibile determinare quali oggetti, con una posizione nota, ricadono nel raggio visuale della fotocamera del device. proprio questo e&#8217; il compito di programmi come <a title="layar" href="http://layar.com/" target="_blank">layar</a>, <a title="wikitude" href="http://www.wikitude.org/" target="_blank">wikitude</a>, <a title="theodolite" href="http://hunter.pairsite.com/theodolite/" target="_blank">theodolite</a> ed altri, che rielaborano il flusso di immagini riprese e lo combinano con le informazioni georeferenziate presenti nei loro database: indicazioni stradali, monumenti, dati sugli esercizi commerciali, modelli tridimensionali.</p>
<p>eh si, perche&#8217; da poco queste applicazioni sanno anche ricostruire complesse forme geometriche e collocarle davanti ai nostri occhi. e&#8217; possibile cosi&#8217; rivedere le <a title="torri gemelle" href="http://www.mobilizy.com/dewikitude-lsst-world-trade-center-3d-mobiltelefon-auferstehen" target="_blank">torri gemelle</a> puntando un iphone su groud zero, oppure scoprire, prima della sua costruzione, come sara&#8217; il cantiere del nuovo market hall, a <a title="rotterdam" href="http://www.youtube.com/watch?v=9tM8L8fMb98" target="_blank">rotterdam</a> : esplorarlo, girandoci attorno ed entrandoci dentro. ancora, scovare piccoli <a title="invizimals" href="http://news.cnet.com/8301-17938_105-10258272-1.html" target="_blank">invizimals</a> a passeggio per la casa e scatenare poi duelli tra di loro, vedere come sara&#8217; l&#8217;aspetto di una costruzione <a title="lego" href="http://www.youtube.com/watch?v=PGu0N3eL2D0" target="_blank">lego</a> mettendo la scatola davanti ad un apposito specchio. interessante anche il concept proposto da <a title="ikea" href="http://www.robinwestergren.com/ikea/" target="_blank">ikea</a>, grazie al quale si stampa un apposito codice a barre bidimensionale di un prodotto preso dal loro catalogo, ad esempio un letto, si posiziona il foglio dove questo prodotto dovrebbe andare, si inquadra con la webcam la stanza e il computer ci svela, in anteprima, come apparira&#8217; con il letto montato e posizionato. <strong>non ci piace? </strong>nessun problema, stampiamo un nuovo codice, lo mettiamo al posto di quello vecchio e controlliamo il risultato. quando siamo finalmente soddisfatti, il computer sa gia&#8217; con quali prodotti stiamo arredando la camera e li ordinera&#8217; per noi.</p>
<p>scordiamoci anche i navigatori cosi&#8217; come li conosciamo oggi: non piu&#8217; una mappa con il percorso da effettuare, ma precise indicazioni sovrapposte direttamente sulla strada davanti ai nostri occhi. oggi, grazie a <a title="wikidrive" href="http://www.youtube.com/watch?v=PdmSVCDmJGA" target="_blank">wikidrive</a> su uno smartphone, domani proiettati sul parabrezza della nostra auto. dopotutto, gli aerei militari utlizzavano l&#8217;hud fin dagli anni &#8217;80, si vedono gia&#8217; le prime macchine con collegamento ad internet incluso negli optional, e&#8217; solo una questione di tempo prima che qualche casa costruttrice trovi un accordo con un fornitore di servizi e includa nella gamma top delle sue vetture un &#8220;visio-navigatore&#8221;.</p>
<p>un altro comparto dove la realta&#8217; aumentata ha grandi potenzialità di sviluppo, e&#8217; quello del <strong>mobile social gaming</strong>: pensiamo ad una caccia al tesoro collaborativa, dove gli indizi virtuali sono disseminati all&#8217;interno di un percorso urbano, dove precisi eventi innescati da un team possono cambiare il corso dell&#8217;avventura a cui anche altri team partecipano: una spia si nasconde all&#8217;angolo del parco: il primo team che la trova, inquadrandola con un telefonino, ricevera&#8217; preziose informazioni. a questo punto la spia va via, oppure si muove e non sara&#8217; piu&#8217; rintracciabile nello stesso luogo, ma in un posto diverso, che i successivi team dovranno scoprire. magari potremmo anche incontrare i beatles per <a title="strada" href="http://gizmodo.com/5417946/dear-new-layar-30-you-got-me-at-beatles" target="_blank">strada</a>.</p>
<p>ovviamente anche il turismo potrebbe beneficiare di queste innovazioni. se gia&#8217; prima si parlava della possibilita&#8217; di sapere nome e informazioni aggiuntive su un monumento, un&#8217;opera d&#8217;arte, un luogo, pensiamo a quanto potrebbe diventare divertente, e formativa, la visita ad un sito storico se arricchita dalla possibilita&#8217; di vedere scene di vita provenienti dall&#8217;antichita&#8217;: i fori romani ricostruiti in tutto il loro sfarzo, gli affreschi di una facciata nella loro brillantezza originaria. basta inquadrare e muoversi, per conoscere cosa c&#8217;era prima. la nuova frontiera delle guide interattive.</p>
<p>dobbiamo comunque precisare che questa &#8220;prima generazione&#8221; di software per la realta&#8217; aumentata non riconosce gli oggetti che vengono messi a fuoco dalla fotocamera del dispositivo, ma, come dicevamo prima, presumono che in quello scorcio di realta&#8217; ci sia qualcosa solamente basandosi sulla sua posizione. un limite che, un po&#8217; alla volta, verra&#8217; superato, come gia&#8217; ci sta mostrando google <a title="goggles" href="http://www.google.com/mobile/goggles/" target="_blank">goggles</a>, annunciato pochi giorni fa.</p>
<p>in ultimo, una buona notizia per gli sviluppatori. non occorre avere decine di migliaia di euro alle spalle per realizzare uno di questi software: layar e wikitude, ognuno con le sue peculiarita&#8217;, mettono a disposizione client o api per android e per iphone che fanno quando abbiamo descritto fin qui, con la possibilita&#8217; di integrare propri dati. anche gratuitamente.</p>
<p>insomma, l&#8217;<strong>hype</strong> intorno a questo settore e&#8217; davvero alto, e non tarderanno ad arrivare applicazioni che saranno in grado di <span style="text-decoration: underline;">lasciarci con il fiato sospeso</span>, ancora di piu&#8217; rispetto a quanto visto fino ad ora. sono convinto che ci troviamo di fronte ad uno stagno appena scoperto: qualche buona idea, iniziativa e un minimo di voglia di rischiare saranno l&#8217;esca giusta per tirare su i grossi pescioni che lo popolano. <strong>cosa state aspettando?</strong></p>
<p>alfredo morresi</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-xtrategy.net/2009/12/15/la-realta-aumentata-e-davanti-ai-nostri-occhi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  www.e-xtrategy.net/category/webdevelopment/feed/ ) in 0.82118 seconds, on May 17th, 2012 at 10:46 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on May 17th, 2012 at 11:46 am UTC -->
