<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-13046644</id><updated>2011-11-30T11:09:40.362+01:00</updated><category term='test'/><category term='business'/><category term='Script'/><category term='agile'/><category term='wicket'/><category term='rails'/><category term='Music'/><category term='code'/><category term='Future'/><category term='Metrics'/><category term='citazioni'/><category term='life'/><category term='Public Speaking'/><title type='text'>Computer Science Lover</title><subtitle type='html'>torti:~ tot$ echo "l'importante e' il contenuto"</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default?start-index=101&amp;max-results=100'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>174</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13046644.post-4208140995169408772</id><published>2011-11-30T11:08:00.001+01:00</published><updated>2011-11-30T11:09:40.584+01:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ditostiphotos.com/images/collection4/MessDesk.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 318px; height: 480px;" src="http://www.ditostiphotos.com/images/collection4/MessDesk.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nel settembre 2009 scrissi questo blog post:&lt;a href="http://tommasotorti.blogspot.com/2009/09/metodo-i-falsi-miti-del-customer-on.html"&gt; i falsi miti del Customer On Site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Son passati 2 anni e sono della stessa idea. Ho cambiato progetti, clienti, sedi, ma c'è sempre una costante: l'incapacità organizzativa che si manifesta in questi fenomeni:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;essendo lo sviluppatore (o il cliente) 'in zona' non ci sono momenti dedicati per il planning, o la raccolta di specifica, o la dimostrazione di ciò che si vuole o che si sta realizzando. &lt;span style="color: rgb(255, 0, 0);"&gt;Sia lo sviluppatore che il cliente sono implicitamente sempre disturbabili&lt;/span&gt;. Quindi spesso vengono disturbati, e di conseguenza portano avanti tante attività, tante parentesi aperte, senza chiuderne alcuna per parecchio tempo.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Last in first out: è difficile delegare e incasellare le attività in qualcosa che si può fare prima o dopo. &lt;span style="color: rgb(255, 0, 0);"&gt;L'ultima mail o l'ultima telefonata sono sempre più importanti di qualsiasi attività in corso.&lt;/span&gt; Tale incapacità di prioritizzare le attività porta a ritardare l'obiettivo e a non portare mai avanti attività di media o bassa priorità, che sono comunque importanti. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Sul concetto di bassa priorità rammento che in un progetto recente un team ha delegato ad un solo collega la scrittura e manutenzione degli script di deploy dell'applicazione. Quando qualcun altro doveva metterci mano si sentiva a disagio, non avendo mai affiancato lo sviluppatore originario. Quegli script erano frutto di venerazione e timore, perchè a lungo sono andati senza bisogno di conoscerli. A fronte di un problema l'unica speranza era di 'riprovare' e sperare di non aver bisogno di aprirli in lettura :) La manutenzione degli script e in generale il passaggio di consegna sono sempre state considerate attività di bassa priorità da parte del team, era tutto sacrificabile rispetto all'ultima richiesta del cliente di dare un colpo di vernice al front web.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Insomma le soluzioni sono sempre quelle:&lt;br /&gt;1) che tu sia dal cliente o no, accordati per dei momenti dedicati dove svolgere le varie attività di sviluppo&lt;br /&gt;2) dai importanza alle attività in alta priorità ma lasciati un buffer temporale costante dove portare avanti attività di media e bassa priorità.&lt;br /&gt;&lt;br /&gt;Feedback?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-4208140995169408772?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/4208140995169408772/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=4208140995169408772' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4208140995169408772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4208140995169408772'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2011/11/nel-settembre-2009-scrissi-questo-blog.html' title=''/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-2840574813531923805</id><published>2011-08-16T14:10:00.006+02:00</published><updated>2011-08-16T14:21:03.844+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script'/><title type='text'>[Script]  automatically crontab update</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.serverplan.com/wp-content/uploads/2008/02/crontab-syntax.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 400px; height: 162px;" src="http://blog.serverplan.com/wp-content/uploads/2008/02/crontab-syntax.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sometimes you need to update a crontab configuration in multiple enviroments (staging, production...).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have properly configured ssh, you can use this shell function:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function addToCrontabIfNotAlreadyPresent() {&lt;br /&gt;HOST=$1&lt;br /&gt;&lt;br /&gt;ssh -o "BatchMode yes" $USER@$HOST  &lt;&lt; EOF&lt;br /&gt;&lt;br /&gt;    crontab_line="5 0 * * * cd ~/yourproject/ &amp;&amp; ./script/run.sh &gt;/dev/null 2&gt;&amp;1-" &lt;br /&gt;    alreadyInCrontab="\$(crontab -l | grep "\$crontab_line" )"&lt;br /&gt;    &lt;br /&gt;    if test "\$alreadyInCrontab" == ""; then&lt;br /&gt;       crontab -l &gt; /tmp/updating_crontab.tmp&lt;br /&gt;       echo "\$crontab_line" &gt;&gt; /tmp/updating_crontab.tmp&lt;br /&gt;       crontab /tmp/updating_crontab.tmp&lt;br /&gt;       rm /tmp/updating_crontab.tmp&lt;br /&gt;       &lt;br /&gt;       echo "Crontab updated"; &lt;br /&gt;    else &lt;br /&gt;       echo "Crontab ok"; &lt;br /&gt;    fi&lt;br /&gt;EOF&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;USER='your_user'&lt;br /&gt;addToCrontabIfNotAlreadyPresent "10.10.10.10"&lt;br /&gt;&lt;/eof&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-2840574813531923805?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/2840574813531923805/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=2840574813531923805' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2840574813531923805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2840574813531923805'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2011/08/script-automatically-crontab-update.html' title='[Script]  automatically crontab update'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-6116124950196804985</id><published>2011-06-24T13:55:00.004+02:00</published><updated>2011-06-24T15:22:42.407+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>[Agile] meglio un mal di testa ogni giorno o un cancro una volta nella vita?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-NoGppc80WVE/TfeEZlaPL7I/AAAAAAAAAM0/WorC1Vb03Ec/s200/ritardo.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 150px; height: 178px;" src="http://4.bp.blogspot.com/-NoGppc80WVE/TfeEZlaPL7I/AAAAAAAAAM0/WorC1Vb03Ec/s200/ritardo.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I team agili, la trasparenza e la percezione della velocità.&lt;br /&gt;&lt;br /&gt;Penso che i team agili a volte si tirano la zappa sui piedi.&lt;br /&gt;Il fatto che si esplicita un piano di iterazione (consegneremo queste funzionalità entro una settimana da oggi), che si fa una review del piano (su questa funzionalità siamo arrivati in ritardo) e che spesso si esegue una dimostrazione e verifica col cliente di quanto consegnato è un fatto virtuoso.&lt;br /&gt;&lt;br /&gt;E' un fatto che tendenzialmente le stime sono piu basse di quanto di solito ci vuole a completare davvero una funzionalità (lo dico per varie ragioni che potrei argomentare, raccolta numeri e confronto con vari team) quindi tendenzialmente un progetto avrà tanti piccoli ritardi, comunicati costantemente durante la pianificazione lavori.&lt;br /&gt;&lt;br /&gt;Il cliente sentirà spesso ripetere che ci sono stati tanti piccoli ritardi e la sua tendenza sarà di percepire una lentezza del team 'agile' che ha virtuosamente collezionato e comunicato queste informazioni.&lt;br /&gt;&lt;br /&gt;Altri team non agili non danno grande visibilità sui lavori, vivono in pace e lasciano vivere in pace il cliente fino ai dintorni della famosa 'data di consegna'; lì tutti si aspettano di rodersi il fegato perchè quel giorno diventa per forza di cose un momento di confronto tra aspettative e risultati.&lt;br /&gt;&lt;br /&gt;E' vero però che il cliente sente di un grosso ritardo, somma di tanti piccoli, dopo un bel po' di tempo, e fino ad allora è vissuto bene.&lt;br /&gt;&lt;br /&gt;Insomma, il dubbio è: &lt;span style="font-weight: bold;"&gt;l'eccesso di trasparenza aumenta la percezione che i team agili siano più 'lenti' rispetto ad un team non agile?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In altre parole, &lt;span style="font-weight: bold;"&gt;meglio un mal di testa ogni giorno o un cancro una volta nella vita?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-6116124950196804985?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/6116124950196804985/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=6116124950196804985' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6116124950196804985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6116124950196804985'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2011/06/agilemeglio-un-mal-di-testa-ogni-giorno.html' title='[Agile] meglio un mal di testa ogni giorno o un cancro una volta nella vita?'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-NoGppc80WVE/TfeEZlaPL7I/AAAAAAAAAM0/WorC1Vb03Ec/s72-c/ritardo.gif' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-3561462172816587561</id><published>2011-05-05T17:13:00.003+02:00</published><updated>2011-06-24T17:48:12.255+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>[Agile] da noi non si può fare</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_v37pu2SRRN0/TT7tY1o8o4I/AAAAAAAAAB4/kqqExxig55Y/s320/19+-+Come+trattare+le+critiche.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 248px; height: 203px;" src="http://3.bp.blogspot.com/_v37pu2SRRN0/TT7tY1o8o4I/AAAAAAAAAB4/kqqExxig55Y/s320/19+-+Come+trattare+le+critiche.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;br /&gt;Quando mi capita di confrontarmi con persone interessate alla tematica di introduzione di un metodo di lavoro sento spesso delle obiezioni abbastanza comuni.&lt;br /&gt;&lt;/div&gt;E mi pare che negli anni le maggiori problematiche siano all'incirca le stesse.&lt;br /&gt;Provo a riassumerle con degli slogan e una classifica. Al primo posto :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1) "Da noi non si può fare"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Spesso si pensa che la propria realtà lavorativa sia assolutamente straordinaria e unica per quanto riguarda colleghi, rapporti con il management, rapporti con il cliente. Io penso che sia abbastanza simile da tutte le parti, e si compone così:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;rapporto con i colleghi&lt;/span&gt;: di media buono con quelli dello stesso team. Probabilmente il fatto di lavorarci tutti i giorni incentiva l'impegno a creare relazioni piacevoli. Quello che noto è che quando ci sono team diversi si tende a parlare delle persone degli altri team 'disumanizzandoli', banalmente smettendo di chiamare per nome e cognome e sostituendo con un sostantivo generico. Ad esempio frasi del tipo: "Quando si lavora con gli *(indiani|cinesi|spagnoli|americani)* è sempre un disastro" "il team di *(analisi|test|dba|plm)* ci mette il bastone fra le ruote".                                                              E allora in questo senso vedo bene tutte quelle pratiche che portano a ripristinare i nomi e i cognomi, al fine di avere una comunicazione umana.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;rapporto con il management o con i commerciali&lt;/span&gt;: tendenzialmente ogni sviluppatore pensa di essere migliore del proprio manager o del proprio commerciale nei loro rispettivi lavori. Mi sbaglio? Mi chiedo quindi se è anche vero che ogni commerciale o manager pensa di essere migliore dei propri sviluppatori per quanto riguarda la codifica. Se così fosse sarebbe buffo! Ma in effetti a volte *forse* manager e commerciali ci azzeccano, quando ci chiedono delle funzionalità davvero banali tipo 'sposta questo link da destra a sinistra' e la cosa genera giorni di lavoro. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;rapporti con il cliente. &lt;/span&gt;E' mia convinzione che un buon cliente gioca sempre il ruolo dell'insoddisfatto ma continua a mantenerti come fornitore. Ovviamente questo non vuol dire si debba dormire sugli allora o lodarsi per sempre. Ma questo porta allo slogan numero due:&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) "Siamo lenti" oppure "il team XXX non è abbastanza produttivo" &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Posto che non è possibile definire chiaramente la &lt;span style="color: rgb(255, 0, 0);"&gt;produttività&lt;/span&gt;, e qualsiasi metrica che viene _imposta_ per misurare la produttività verrà di certo raggirata, la risposta deve andare nella direzione della chiarezza. Non si è produttivi rispetto al passato? O non si è produttivi rispetto ad un altro team? La ricerca di una metrica è una scusa per cercare di sviscerare e oggettivare la percezione di lentezza di un team.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) "Mi sembra che ci sia poca documentazione"&lt;/span&gt;&lt;br /&gt;Sì, in certi ambienti si ama la carta. Ammetto di essere uno di quei sviluppatori che di base reputano la documentazione inutile perchè non porta valore. Ma so che in certi casi mi sbaglio. Quel che noto in verità è che quando lavoro in un team XP scrivo molta piu documentazione di quando lavoro da solo. Esempi:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;documento tutti gli script&lt;/li&gt;&lt;li&gt;manutengo il file di istruzioni per il setup del progetto&lt;/li&gt;&lt;li&gt;scrivo un journal delle attività ogni fine giornata&lt;/li&gt;&lt;li&gt;scrivo un iteration report da consegnare al cliente ogni fine iterazione&lt;/li&gt;&lt;li&gt;scrivo un riassunto di ogni meeting che si effettua&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Alla base di questa critica che viene fatta all'XP o Scrum o quel che sia pongo solo un principio: che non scrivo per principio ciò che non viene letto. Se scrivo qualcosa è perchè qualcuno davvero la legge e trova valore in quel che scrivo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4) "Non posso migliorare il codice perchè non mi viene allocato del tempo per farlo"&lt;/span&gt;&lt;br /&gt;E' virtuoso coinvolgere il cliente nel processo di sviluppo del suo prodotto, ma non è furbo farlo ad ogni livello, sopratutto scendendo troppo nel tecnico. &lt;span style="color: rgb(255, 0, 0);"&gt;L'importante è mantenere i RUOLI&lt;/span&gt;. eXtreme Programming e Scrum li identificano con grande precisione, cosa può o non può fare un cliente e uno sviluppatore. Non ha senso chiedere a un cliente se dopo che hai risolto un baco puoi scrivere un test per garantire che non accada più: lo fai e basta. Il cliente non ha alcun diritto di entrare in merito alla gestione di task tecnici.&lt;br /&gt;Immedesimandomi in un cliente, non farei fare allo sviluppatore niente di cio che non capisco, tranne poi lamentarmi degli effetti.&lt;br /&gt;&lt;br /&gt;Nella stessa direzione va la maggior critica che viene posta al "pair programming":&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5) "Non possiamo fare pair programming perchè il management non vuole due persone lavorino sulla stessa cosa" &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ok. Mettiamola così, se la situazione lavorativa è buona e il management non si lamenta, va bene non fare pair programming. Altrimenti è giusto sperimentare, coinvolgere, ma come dicevo prima è fondamentale distinguere cosa si può fare in un certo ruolo.&lt;br /&gt;Se il management forza i tentativi di miglioramento del team, ed ha il diritto (diritto, non il potere) di farlo, va bene purchè poi si assume le responsabilità della scelta, prendendo quindi su di sè eventuali critiche sulla 'produttività' del team. Patti chiari, amicizia lunga. Però per ragionare in questo modo ci vuole &lt;span style="color: rgb(255, 0, 0);"&gt;coraggio&lt;/span&gt;! Dimostriamo che davvero c'è miglioramento nell'applicazione di una tecnica!&lt;br /&gt;L'invito è di provare, di valutare dopo un certo periodo di tempo e non scendere a compromessi se non dopo averla imparata con una certa disinvoltura.&lt;br /&gt;&lt;br /&gt;In bocca al lupo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-3561462172816587561?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/3561462172816587561/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=3561462172816587561' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3561462172816587561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3561462172816587561'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2011/05/quando-mi-capita-di-confrontarmi-con.html' title='[Agile] da noi non si può fare'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_v37pu2SRRN0/TT7tY1o8o4I/AAAAAAAAAB4/kqqExxig55Y/s72-c/19+-+Come+trattare+le+critiche.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-1050152122352000042</id><published>2011-04-05T11:50:00.003+02:00</published><updated>2011-04-05T11:59:00.578+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>[Ruby] A Quick Ruby Kata Solution</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i.ytimg.com/vi/DdyBhRXH1-o/0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 480px; height: 360px;" src="http://i.ytimg.com/vi/DdyBhRXH1-o/0.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;First solution of the kata described here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://railsrx.com/2010/09/27/a-quick-ruby-kata/"&gt;http://railsrx.com/2010/09/27/a-quick-ruby-kata/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;PAIRS   = [ [1,1], [2,2], [3,3], [4,4], [5,5] ]&lt;br /&gt;SINGLES = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]&lt;br /&gt;&lt;br /&gt;def single_from_pair(pair)&lt;br /&gt;  [pair[0]]&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def sum(pair)&lt;br /&gt;  pair[0] + pair[1]&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;result = []&lt;br /&gt;&lt;br /&gt;PAIRS.each do |pair|&lt;br /&gt;  (SINGLES - single_from_pair(pair)).each do |y|&lt;br /&gt;   (SINGLES - single_from_pair(pair)).each do |k|&lt;br /&gt;&lt;br /&gt;      z = 15 - sum(pair) - y - k &lt;br /&gt;      if z &gt; 0 &amp;&amp; z != single_from_pair(pair).first&lt;br /&gt;        candidate = [pair, y, k, z].flatten.sort&lt;br /&gt;        result &lt;&lt; candidate unless result.include?(candidate)&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-1050152122352000042?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/1050152122352000042/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=1050152122352000042' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/1050152122352000042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/1050152122352000042'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2011/04/ruby-quick-ruby-kata-solution.html' title='[Ruby] A Quick Ruby Kata Solution'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-3069544736849352165</id><published>2011-03-22T14:34:00.004+01:00</published><updated>2011-03-22T14:40:01.278+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>[Rails]  Html to plain text</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm1.static.flickr.com/136/346483297_c4cb93ab4e.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 240px; height: 343px;" src="http://farm1.static.flickr.com/136/346483297_c4cb93ab4e.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I need to extract some text from a model in order to publish it in a CSV file. My problem was that one field's content is in pure html, like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;amp; quot; name &amp;amp; quot;=&amp;amp; gt;&lt;br /&gt;[&amp;amp; quot;TommasoTorti&amp;amp; quot;, &amp;amp; quot;Tommaso&amp;amp; quot;]&lt;br /&gt;&lt;/pre&gt; ; but in my csv file i need the text in a plain format.&lt;br /&gt;One way is to unescape the html in the model:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def to_csv&lt;br /&gt;[... , CGI.unescapeHTML(self.field) ].join("\t")&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and insert the 'raw' command inside the view:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;%= raw my_model.to_csv %&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(The controller's code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; @models = MyModel.all&lt;br /&gt; response.headers["Content-Type"]         = "text/csv; charset=UTF-8; header=present"&lt;br /&gt; response.headers["Content-Disposition"] = "attachment; filename=my_models.csv"&lt;br /&gt; render :layout =&gt; false&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-3069544736849352165?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/3069544736849352165/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=3069544736849352165' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3069544736849352165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3069544736849352165'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2011/03/rails-html-to-plain-text.html' title='[Rails]  Html to plain text'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/136/346483297_c4cb93ab4e_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-8677565683452244701</id><published>2011-03-09T12:50:00.002+01:00</published><updated>2011-03-09T12:58:03.134+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metrics'/><title type='text'>[Performance] memory leak analysis with JProfiler for a java webapp</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.patextra.it/wp-content/uploads/2008/12/brain-763982.jpg"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 249px; height: 248px;" src="http://www.patextra.it/wp-content/uploads/2008/12/brain-763982.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span id="result_box" class="long_text" lang="en"&gt;&lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;I&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;wrote&lt;/span&gt; a&lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt; first draft&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;that&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;explains&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;how&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;to use&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;JProfiler&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;to&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;analyze&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;possible&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;memory&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;leak&lt;/span&gt;s &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;in&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;a classical&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;Java&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;application&lt;/span&gt;&lt;span title="Fai clic per visualizzare le traduzioni alternative"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;Following&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;the&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;article&lt;/span&gt;&lt;span title="Fai clic per visualizzare le traduzioni alternative"&gt;: &lt;a href="https://github.com/tortitommaso/PerformanceAnalysis/raw/master/MemoryLeak.pdf"&gt;https://github.com/tortitommaso/PerformanceAnalysis/raw/master/MemoryLeak.pdf&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;You can&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;follow&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;this&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;tutorial&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;to&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;gain&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;a&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;method&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;to conduct such an&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;analysis&lt;/span&gt;&lt;span title="Fai clic per visualizzare le traduzioni alternative"&gt;.&lt;/span&gt; &lt;span title="Fai clic per visualizzare le traduzioni alternative" class="hps"&gt;Good luck&lt;/span&gt;&lt;span title="Fai clic per visualizzare le traduzioni alternative"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-8677565683452244701?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/8677565683452244701/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=8677565683452244701' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8677565683452244701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8677565683452244701'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2011/03/performance-memory-leak-analysis-with.html' title='[Performance] memory leak analysis with JProfiler for a java webapp'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-5821224863953921562</id><published>2011-03-07T17:17:00.002+01:00</published><updated>2011-03-07T17:25:12.081+01:00</updated><title type='text'>[Rails] Test di convenzioni interne</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://zaragozaciudad.net/blogdelmayor/upload/20080418142433-memoria-1-.gif"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 252px; height: 291px;" src="http://zaragozaciudad.net/blogdelmayor/upload/20080418142433-memoria-1-.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Una tipologia di test assai utile sono i test di integrità delle convenzioni, che eseguono un check di sanità su una certa convenzione interna che il team si è dato per lo sviluppo/ manutenzione di una funzionalità.&lt;br /&gt;&lt;br /&gt;Faccio un esempio concreto.&lt;br /&gt;&lt;br /&gt;Nell'applicazione RAILS ereditata su cui stiamo lavorando (io e Ivan Lombardi Borgia) abbiamo alcuni modelli sempre chiamati sub_form che l'utente ADMIN può osservare e scaricare in versione CSV, con tante colonne quante i campi del modello e i valori correnti.&lt;br /&gt;&lt;br /&gt;L'implementazione concreta prevede il render di alcuni partial ( '_header.xls.builder' , '_row.xls.builder' e '_empty.xls.builder' ) riferiti al modello sotto esame. Tali file sono presenti all'interno di ogni directory del tipo sub_form_something e ogni view ha sempre un solo campo di riferimento @sub_form.&lt;br /&gt;&lt;br /&gt;La regola è:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;"Ricordati che se aggiungi o togli campi dal modello di riferimento devi aggiornare i partial dell'export" &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ovviamente nel tempo non ci siamo ricordati ;-) quindi abbiamo optato per automatizzare con un test di configurazione questa regola:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;it "should export all model's field" do&lt;br /&gt;  assert_fields_in_export(Factory.create(:first_sub_form), "first_sub_form_dir", do_not_include = ["countries", "leader"])&lt;br /&gt;  assert_fields_in_export(Factory.create(:second_sub_form), "second_sub_form_dir")&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;e l'implementazione della assert custom:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def assert_fields_in_export(sub_form, sub_form_dir, do_not_include = [])&lt;br /&gt;    view = ActionView::Base.new(ActionController::Base.view_paths, {})&lt;br /&gt;&lt;br /&gt;    class &lt;&lt; sub_form =" sub_form" row_output =" view.render(:file"&gt; "#{RAILS_ROOT}/app/views/account/#{sub_form_dir}/#{file_name}")&lt;br /&gt;&lt;br /&gt;    assert_equal sub_form.class.columns.length - (["id", "created_at", "updated_at"] + do_not_include).length , row_output.scan(/&lt;cell&gt;/).length&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/cell&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Se ad esempio alla first_sub_form aggiungiamo un campo il test fallisce indicando: mi aspetto 13 campi ma ne vedo solo 12. Quindi potremo o escludere il campo dall'elenco da controllare oppure aggiornare i file. Il test non è ricco di dettagli, serve solo come remainder di una convenzione che ci siamo dimenticati di rispettare.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-5821224863953921562?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/5821224863953921562/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=5821224863953921562' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5821224863953921562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5821224863953921562'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2011/03/rails-test-di-convenzioni-interne.html' title='[Rails] Test di convenzioni interne'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-4219554642851886313</id><published>2011-02-10T19:47:00.001+01:00</published><updated>2011-02-10T19:47:46.263+01:00</updated><title type='text'>[Poesia] Orizzonti di Sabino De Bari</title><content type='html'>&lt;div style="text-align: center;"&gt;Orizzonti&lt;br /&gt;&lt;br /&gt;Ho attraversato mondi incomprensibili,&lt;br /&gt;di cui non sapevo il nome, nelle mie molte vite riunite in uno sguardo solo,&lt;br /&gt;quello di chi non conosce orizzonti.&lt;br /&gt;Cercavo riparo dal vento che sferza, dalla pioggia che allaga, dal sole che acceca, dalle parole che feriscono, dagli sguardi che accusano e dagli abbracci che soffocano.&lt;br /&gt;Riparo dalla mia immagine, coperta di ombre, uomo povero di sorrisi, con un cuore che non capisce.&lt;br /&gt;&lt;br /&gt;Ma poi una musica è giunta a me.&lt;br /&gt;Un canto di voci che senza capire io ho capito, riconosciuto e accolto, e ritrovato.&lt;br /&gt;E ho saputo.&lt;br /&gt;&lt;br /&gt;Che ho amato tutti gli amori possibili, fuorchè quello per me stesso.&lt;br /&gt;Che non è il mondo che cambia ma il cuore che si eleva, e che trasforma.&lt;br /&gt;&lt;br /&gt;Così ho camminato, come per la prima volta, e ho scoperto un vento che può parlare, e una pioggia che può nutrire, sole che fa strada e parole che guariscono; sguardi che regalano e abbracci che proteggono.&lt;br /&gt;&lt;br /&gt;E la mia immagine, nuda e indifesa, e finalmente autentica, e in cerca di sorrisi.&lt;br /&gt;E un cuore collettivo, che batte insieme al mio.&lt;br /&gt;&lt;br /&gt;Così ho capito.&lt;br /&gt;Che non esistono domande quando la risposta è felicità.&lt;br /&gt;E ho aperto gli occhi,&lt;br /&gt;vinto dalla pace,&lt;br /&gt;circondato da orizzonti.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-4219554642851886313?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/4219554642851886313/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=4219554642851886313' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4219554642851886313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4219554642851886313'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2011/02/poesia-orizzonti-di-sabino-de-bari.html' title='[Poesia] Orizzonti di Sabino De Bari'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-898780232522927142</id><published>2011-01-14T11:11:00.005+01:00</published><updated>2011-01-14T11:17:50.002+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>[JQuery] highlight event detail with jquery</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://marcgrabanski.com/img/highlight.jpg"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 291px; height: 151px;" src="http://marcgrabanski.com/img/highlight.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My html page has multiple events inside a div identified by a prefix and the event's id.&lt;br /&gt;&lt;br /&gt;Look at this example:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt; id="event_1"&gt;...&lt; /div &gt;&lt;br /&gt;&lt; id="event_2"&gt;...&lt; /div &gt;...&lt;br /&gt;&lt;br /&gt;I want to highlight the selected div when the user click on the link inside it and, in the meantime, deselect all the others divs.&lt;br /&gt;My css:&lt;br /&gt;.time_line_event_highlighted {&lt;br /&gt;background-color:yellow;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Here is the jquery snippet:&lt;br /&gt;&lt;br /&gt;$("#" + divId).click(function(){ // when a user click on a link inside a div...&lt;br /&gt;$('div[id^=event]').removeClass("time_line_event_highlighted");&lt;br /&gt;$("#event" + id).addClass("time_line_event_highlighted")&lt;br /&gt;    ...&lt;br /&gt;});&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-898780232522927142?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/898780232522927142/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=898780232522927142' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/898780232522927142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/898780232522927142'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2011/01/jquery-highlight-event-detail-with.html' title='[JQuery] highlight event detail with jquery'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-2657527766488253553</id><published>2010-12-22T14:08:00.002+01:00</published><updated>2010-12-22T14:13:23.920+01:00</updated><title type='text'>[Ricetta] mais e tonno</title><content type='html'>&lt;img style="width: 200px; height: 166px;" src="http://www.fondazionedirittigenetici.org/new/foto/553_Mais_OGM.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Aprire una scatola di mais e versare in un piatto&lt;br /&gt;Aprire una scatola di tonno, preferibilmente in olio di oliva (non extravergine), eventualmente scaldare per 1 minuto o 2&lt;br /&gt;&lt;br /&gt;Mescolare con tanto amore nel piatto e servire con crakers e acqua gassata.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-2657527766488253553?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/2657527766488253553/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=2657527766488253553' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2657527766488253553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2657527766488253553'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2010/12/ricettamais-e-tonno.html' title='[Ricetta] mais e tonno'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-7475773789679287300</id><published>2010-10-20T15:19:00.002+02:00</published><updated>2010-10-20T17:02:55.975+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>[Rails] how to tail log from multiple servers</title><content type='html'>&lt;span style="font-family: arial;"&gt;A different approach from the one described here:  &lt;/span&gt;&lt;a style="font-family: arial;" href="http://serverfault.com/questions/112457/tail-multiple-remote-files"&gt;http://serverfault.com/questions/112457/tail-multiple-remote-files &lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;is to use a capistrano task like (in my &lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: arial; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px;"&gt;deploy.rb &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: arial; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;font-size:100%;" &gt;task :tail_logs, :roles =&gt; :your_server_tag do&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new;font-size:100%;" &gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px;"&gt;&lt;div&gt;cap production deploy:tail_logs&lt;/div&gt;&lt;div&gt;&lt;div&gt;    run "tail -f #{current_path}/log/production.log" do |channel, stream, data|&lt;/div&gt;&lt;div&gt;      puts  # for an extra line break before the host name&lt;/div&gt;&lt;div&gt;      puts "#{channel[:host]}: #{data}" &lt;/div&gt;&lt;div&gt;      break if stream == :err    &lt;/div&gt;&lt;div&gt;    end&lt;/div&gt;&lt;div&gt;end&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-7475773789679287300?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/7475773789679287300/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=7475773789679287300' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7475773789679287300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7475773789679287300'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2010/10/railshow-to-tail-log-from-multiple.html' title='[Rails] how to tail log from multiple servers'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-84814160516780871</id><published>2010-06-18T11:39:00.001+02:00</published><updated>2010-06-18T11:41:41.382+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>[Rails] from html to pdf</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mimifroufrou.com/scentedsalamander/i/Victoria_Copying_Machine_1913.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 279px; height: 310px;" src="http://www.mimifroufrou.com/scentedsalamander/i/Victoria_Copying_Machine_1913.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm trying to use the nice library &lt;a href="http://github.com/jdpace/PDFKit"&gt;PDFKit&lt;/a&gt;, used for generate Pdf given an html in a rails application.&lt;br /&gt;&lt;br /&gt;An interesting strategy for retrieving html generated by rails in order to put it directly in your pdf is shown in the following example:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;def export_pdf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    html = render :layout =&gt; false &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    kit = PDFKit.new(html)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    kit.stylesheets &lt;&lt; RAILS_ROOT + '/public/stylesheets/your_css.css'       &lt;br /&gt;&lt;br /&gt;send_data(kit.to_pdf, :filename =&gt; "your_pdf_name.pdf", :type =&gt; 'application/pdf')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  end&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-84814160516780871?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/84814160516780871/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=84814160516780871' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/84814160516780871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/84814160516780871'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2010/06/rails-from-html-to-pdf.html' title='[Rails] from html to pdf'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-5927134064745389300</id><published>2010-06-17T12:52:00.002+02:00</published><updated>2010-06-17T12:55:29.472+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>[Code] Abilitazione e disabilitazione funzionalità a run time - senza GIT</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sbs.ucsc.edu/images/checkbox.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 200px;" src="http://sbs.ucsc.edu/images/checkbox.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Una esigenza comune a pressochè tutti i progetti è quella di abilitare o disabilitare funzionalità con facilità.&lt;br /&gt;Un esempio sono le ultime funzionalità sviluppate, non ancora testate nell'ambiente di staging, che non devono finire in produzione.&lt;br /&gt;Ecco quindi che GIT o sistemi analoghi di controllo versione tentano di risolvere questo problema: una branch per ogni funzionalità e quando vuoi comporre il tuo pacchetto di installazione selezioni le branch a piacimento. Eppure mi pare una soluzione di bassissimo livello, che lavora con i file e non per alto livello tipo le funzionalità.&lt;br /&gt;&lt;br /&gt;Concettualmente mi piacerebbe una dashboard di installazione, dove sono elencate con delle checkbox tutte le funzionalità dell'applicazione. L'applicazione sta su un solo ramo, senza alcuna branch.&lt;br /&gt;L'amministratore può quindi disabilitare o abilitare funzionalità a run time, senza bisogno di riavvio. Questo è un sistema che mi piacerebbe !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-5927134064745389300?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/5927134064745389300/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=5927134064745389300' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5927134064745389300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5927134064745389300'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2010/06/codeabilitazione-e-disabilitazione.html' title='[Code] Abilitazione e disabilitazione funzionalità a run time - senza GIT'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-8526199750895892738</id><published>2010-05-12T12:42:00.005+02:00</published><updated>2011-03-08T09:19:46.587+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>[Rails] paginate with will_paginate plugin</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abc.net.au/unleashed/images/book_pages_400.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 314px; height: 235px;" src="http://www.abc.net.au/unleashed/images/book_pages_400.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm using the &lt;a href="http://wiki.github.com/mislav/will_paginate/"&gt;will_paginate&lt;/a&gt; plugin for rails.&lt;br /&gt;Unluckily, my query aren't in the form of:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;MyModel.find(:all..)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;in this case the main change is simply replacing 'find' with 'paginate' as described in the site.&lt;br /&gt;I have a collection of MyModel object retrieved in a lot of different ways.&lt;br /&gt;My solution, based on what i can see &lt;a href="http://www.pathf.com/blogs/2008/06/how-to-use-will_paginate-with-non-activerecord-collectionarray/"&gt;here&lt;/a&gt; , is calling a method (outside the controller class):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def self.paginate(my_collection, params)&lt;br /&gt;current_page =&lt;br /&gt;if params[:page].nil?&lt;br /&gt; 1&lt;br /&gt;else&lt;br /&gt; params[:page].to_i&lt;br /&gt;end&lt;br /&gt;per_page = 10&lt;br /&gt;page_results = WillPaginate::Collection.create(current_page, per_page, my_collection.size) do |pager|&lt;br /&gt;  start = (current_page-1)*per_page&lt;br /&gt;  pager.replace(my_collection[start, per_page])&lt;br /&gt;end&lt;br /&gt;page_results&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and, in the view:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;%= will_paginate @page_results, :params =&gt; params %&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-8526199750895892738?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/8526199750895892738/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=8526199750895892738' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8526199750895892738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8526199750895892738'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2010/05/rails-paginate-with-willpaginate-plugin.html' title='[Rails] paginate with will_paginate plugin'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-7617723907874862551</id><published>2010-04-29T10:32:00.002+02:00</published><updated>2010-04-29T10:37:08.041+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>[Xp] la domanda sbagliata</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.istockphoto.com/file_thumbview_approve/2098349/2/istockphoto_2098349-indecision.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 266px; height: 266px;" src="http://www.istockphoto.com/file_thumbview_approve/2098349/2/istockphoto_2098349-indecision.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;E' successo ancora.&lt;br /&gt;La domanda sbagliata che uno sviluppatore fa al suo project manager: "ci sono priorità particolari tra queste funzionalità?"&lt;br /&gt;&lt;br /&gt;La risposta è: "no, parti pure da dove vuoi, tanto le devi fare tutte".&lt;br /&gt;&lt;br /&gt;Non è professionalmente corretto supporre che non ci siano priorità, la domanda giusta da porre è: "QUALI sono le priorità, qual è la prima funzionalità su cui inizio a lavorare?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-7617723907874862551?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/7617723907874862551/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=7617723907874862551' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7617723907874862551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7617723907874862551'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2010/04/xp-la-domanda-sbagliata.html' title='[Xp] la domanda sbagliata'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-4200746088076476248</id><published>2010-01-18T23:40:00.004+01:00</published><updated>2010-01-18T23:45:36.799+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>[Book] Agile coaching</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://merimery.files.wordpress.com/2008/03/cheers.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 350px; height: 350px;" src="http://merimery.files.wordpress.com/2008/03/cheers.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm reading "&lt;a href="http://pragprog.com/titles/sdcoach/agile-coaching"&gt;Agile Coaching&lt;/a&gt;"  ; until chapter 4 it's full of trivial suggestions. It looks like a priest when he recommends you to become more good for the near future.&lt;br /&gt;&lt;br /&gt;Now i find some interesting advice. Noone of them is new, but it's always useful remember them.&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Not Too Easy, Not Too Hard&lt;/span&gt;&lt;br /&gt;The secret to great teams is they need reachable but challenging goals.&lt;br /&gt;Everyone needs to be sufficiently challenged, neither bored nor anxious.&lt;br /&gt;This is the optimum work zone where people enjoy it the most.&lt;br /&gt;If work is too easy, developers will get bored and demotivated. &lt;/blockquote&gt;&lt;br /&gt;... and the solution...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Time for Innovation&lt;/span&gt; &lt;span style="font-style: italic;"&gt;We’ve met developers on Agile projects who were burned out by working&lt;/span&gt; &lt;span style="font-style: italic;"&gt;on a continuous stream of user stories.&lt;/span&gt; &lt;span style="font-style: italic;"&gt;If they don’t get time to explore new technology or experiment with&lt;/span&gt; &lt;span style="font-style: italic;"&gt;innovative product ideas, teams become demotivated. Make time in&lt;/span&gt; &lt;span style="font-style: italic;"&gt;iteration plans for them to explore new ideas.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;(like the Gold Card practice)&lt;br /&gt;&lt;br /&gt;And always remember to...&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Celebrate Success&lt;/span&gt;!!!&lt;br /&gt;Find ways to celebrate the success of every release. Having a team&lt;br /&gt;lunch or drinks celebrates success and increases team bonding.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-4200746088076476248?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/4200746088076476248/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=4200746088076476248' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4200746088076476248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4200746088076476248'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2010/01/book-agile-coaching.html' title='[Book] Agile coaching'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-3086862196888065329</id><published>2010-01-07T18:15:00.008+01:00</published><updated>2010-01-18T23:40:44.091+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>[Life] customer care</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.michelle-adams.com/wp-content/uploads//2009/12/dreamstime_2979123.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 377px; height: 250px;" src="http://www.michelle-adams.com/wp-content/uploads//2009/12/dreamstime_2979123.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have an example of an ugly customer care service.&lt;br /&gt;I'm trying to buy some books from bol.it . I don't know the exact reason but bol.it cannot withdrew money from my bank. I asked for some explainations and the answer was (in italian):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_zT27dV8plPs/S0YY4DxUTKI/AAAAAAAAAD0/tj4rUEjOclc/s1600-h/mail.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 111px;" src="http://1.bp.blogspot.com/_zT27dV8plPs/S0YY4DxUTKI/AAAAAAAAAD0/tj4rUEjOclc/s400/mail.jpg" alt="" id="BLOGGER_PHOTO_ID_5424050152578239650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;they store my credit card number&lt;br /&gt;&lt;/li&gt;&lt;li&gt;i cannot modify my credit card number&lt;/li&gt;&lt;li&gt;i need to make another order in order to modify my credit card number&lt;/li&gt;&lt;li&gt;i need to call them at a payment phone number ...&lt;/li&gt;&lt;li&gt;...to comunicate by voice another credit card number&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;i think that if you really want my money you need to cherish me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-3086862196888065329?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/3086862196888065329/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=3086862196888065329' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3086862196888065329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3086862196888065329'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2010/01/i-have-example-of-ugly-customer-care.html' title='[Life] customer care'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zT27dV8plPs/S0YY4DxUTKI/AAAAAAAAAD0/tj4rUEjOclc/s72-c/mail.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-5342824769537494286</id><published>2010-01-05T17:21:00.004+01:00</published><updated>2010-01-05T17:43:03.459+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>[Code] java quiz</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chris-lamb.co.uk/wp-content/2007/java-time.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 362px; height: 442px;" src="http://chris-lamb.co.uk/wp-content/2007/java-time.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;First&lt;/span&gt;&lt;br /&gt;Look at the following test code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@Test&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public void quiz1() throws Exception {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        assertEquals(9, 01 + 08);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;The result is:&lt;br /&gt;1) green bar&lt;br /&gt;2) red bar&lt;br /&gt;3) doesn't compile&lt;br /&gt;4) it throws an exception&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Second&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@Test&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public void quiz2() throws Exception {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Integer x = 1288;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; Integer y = 1288;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; assertTrue(x == y);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; int z = 1288;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; assertTrue(x == z);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;1) first assert red, second green&lt;br /&gt;2) green, red&lt;br /&gt;3) green, green&lt;br /&gt;4) red, red&lt;br /&gt;5) doesn't compile&lt;br /&gt;6) it throws an exception&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-5342824769537494286?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/5342824769537494286/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=5342824769537494286' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5342824769537494286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5342824769537494286'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2010/01/code-java-quiz.html' title='[Code] java quiz'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-6100968374398124543</id><published>2009-12-29T14:27:00.007+01:00</published><updated>2009-12-29T18:24:17.068+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>[Test] How to sort junit tests by execution time</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogs.theage.com.au/business/executivestyle/managementline/archives/syd-5aerlntueyg1b1urwbro_layout.jpeg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 252px; height: 230px;" src="http://blogs.theage.com.au/business/executivestyle/managementline/archives/syd-5aerlntueyg1b1urwbro_layout.jpeg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Today with my colleague Luca Pucacco i've searched  a method to detect which (junit) test are slow without any known or reasonable motivation. When you run a junit suite with eclipse you can see the execution time but you are not able to see an order.&lt;br /&gt;So:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;export Test run with the gui; let's call this file SuiteOutput.xml&lt;/li&gt;&lt;li&gt;Open a shell and write:&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;cat SuiteOutput.xml  | grep "&amp;lt;testsuite"  | sed 's/\(.*time="\)\([^"]*\)\(.*\)/\2\1\2\3/' | sort -rg &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;With &lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-size:85%;"&gt;cat SuiteOutput.xml  | grep "&amp;lt;testsuite"&lt;/span&gt;  you are simply extracting the interesting rows&lt;br /&gt;With&lt;span style="font-size:85%;"&gt; sed s/..../../&lt;/span&gt; we are going to substitute something. In details. Let's assume a row is in the form of:&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;testsuite name="xxxTest" time="10.0"&gt;&lt;br /&gt;The first group &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;(.*time="\) &lt;/span&gt;is the first part of the row ( &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;testsuite name="xxxTest" time=" )&lt;br /&gt;The second group &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;([^"]*\)&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; is all before the " character ( the 10.0 string)&lt;br /&gt;The last group is the rest ( "&gt;)&lt;br /&gt;&lt;br /&gt;The final row contains as the first information the execution time. The last operation is sorting these data by evaluating it like a number and not like a string.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt; &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-6100968374398124543?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/6100968374398124543/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=6100968374398124543' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6100968374398124543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6100968374398124543'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/12/test-how-to-sort-junit-tests-by.html' title='[Test] How to sort junit tests by execution time'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-9118959006047164400</id><published>2009-12-10T18:20:00.001+01:00</published><updated>2009-12-10T18:22:55.112+01:00</updated><title type='text'>[Quiz] what's the meaning of this symbol ?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_zT27dV8plPs/SyEuKrAVNMI/AAAAAAAAAC8/uyQZmVq3F8M/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 187px; height: 190px;" src="http://3.bp.blogspot.com/_zT27dV8plPs/SyEuKrAVNMI/AAAAAAAAAC8/uyQZmVq3F8M/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5413658987953730754" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-9118959006047164400?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/9118959006047164400/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=9118959006047164400' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/9118959006047164400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/9118959006047164400'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/12/quiz-whats-meaning-of-this-symbol.html' title='[Quiz] what&apos;s the meaning of this symbol ?'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zT27dV8plPs/SyEuKrAVNMI/AAAAAAAAAC8/uyQZmVq3F8M/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-513244309810895458</id><published>2009-12-10T17:54:00.002+01:00</published><updated>2009-12-10T17:59:41.172+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>[Life] productivity and overtime</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sleepzine.com/wp-content/uploads/2007/11/working_overtime.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 236px; height: 321px;" src="http://sleepzine.com/wp-content/uploads/2007/11/working_overtime.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;How to be professional. What's the meaning of professionalism.&lt;br /&gt;I cannot give a whole definition. I can say a clear example of fake professionalism: overtime.&lt;br /&gt;&lt;br /&gt;Most of the times, if you need to work on sunday or saturday, it means &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;you are not able to complete your work in a given time&lt;/span&gt;. The first thing to do is to acknowledge that this situation is the consequence of one or more failures.&lt;br /&gt;&lt;br /&gt;Instead of working 24/7 to reach some goal you should try the opposite strategy: reserve some free time to think about the process and why you need to work hard.&lt;br /&gt;&lt;br /&gt;I read this suggestion from this interesting article: &lt;a href="http://hbr.harvardbusiness.org/2009/10/making-time-off-predictable-and-required/ar/1"&gt;Making Time Off Predictable - and Required &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;People can show their energies only in presence of limits.&lt;br /&gt;I remember "&lt;a href="http://en.wikiquote.org/wiki/The_Legend_of_1900"&gt;The Legend of 1900&lt;/a&gt;" of Baricco:&lt;br /&gt;"That keyboard is infinite... and if that keyboard is infinite, then on that keyboard there is no music you can play. You're sitting on the wrong bench... That is God's piano" and the conclusion:&lt;br /&gt;"Take piano: keys begin, keys end. You know there are 88 of them. &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;Nobody can tell you any different. They are not infinite. You're infinite&lt;/span&gt;... And on those keys, the music that you can make... is infinite. I like that. That I can live by..."&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Inserisci link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;img src="http://www.blogger.com/img/blank.gif" alt="Inserisci link" class="gl_link" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-513244309810895458?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/513244309810895458/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=513244309810895458' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/513244309810895458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/513244309810895458'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/12/life-productivity-and-overtime.html' title='[Life] productivity and overtime'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-4824327658131687663</id><published>2009-12-09T15:27:00.006+01:00</published><updated>2009-12-09T16:17:24.899+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>[Code] subset duplication</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Subset_with_expansion.svg/399px-Subset_with_expansion.svg.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 202px; height: 210px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Subset_with_expansion.svg/399px-Subset_with_expansion.svg.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One of the step in test driven development is "refactoring your code".&lt;br /&gt;One of the main step of refactoring is the act of removing duplication.&lt;br /&gt;You can read from &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development#5._Refactor_code"&gt;wikipedia&lt;/a&gt;: "The concept of removing duplication is an important aspect of any software design".&lt;br /&gt;I think duplication is pretty difficult to identify; there are a LOT of different kind of duplications. Some of them are stated &lt;a href="http://blogs.agilefaqs.com/2009/10/21/levels-of-duplication/"&gt;here&lt;/a&gt;.&lt;br /&gt;Today i notice another kind of duplication, something i can call like 'subset duplication' where a function does a little less of another bigger function.&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;addTicket(id, value)&lt;/span&gt; and&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;addTicket(id, value, comment)&lt;/span&gt; and&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;addTicket(id, value, date)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I think it's better to have&lt;span style="color: rgb(255, 0, 0);"&gt; only one function &lt;/span&gt;without say the same thing in one thousand of little different modalities. I like expose the differences, not hide them.&lt;br /&gt;One solution could be addDefaultTicket() that return a ticket so you can customize with fluent interfaces: addDefaultTicket().withComment("xxx").&lt;br /&gt;I think there are plenty of other solutions, but the point is always the same: trying to find the best and unique solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-4824327658131687663?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/4824327658131687663/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=4824327658131687663' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4824327658131687663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4824327658131687663'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/12/code-subset-duplication.html' title='[Code] subset duplication'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-474321001007374345</id><published>2009-12-02T11:39:00.004+01:00</published><updated>2009-12-02T11:55:40.567+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>[Test] how to measure the execution time of Fitnesse tests</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2r2pau70KKc/SGzemd_eG0I/AAAAAAAAAJs/5NTBKVbwQ6k/s400/turtle_sketch.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 311px; height: 400px;" src="http://2.bp.blogspot.com/_2r2pau70KKc/SGzemd_eG0I/AAAAAAAAAJs/5NTBKVbwQ6k/s400/turtle_sketch.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We are using &lt;a href="http://fitnesse.org/"&gt;Fitnesse  &lt;/a&gt;as our current acceptance testing framework.&lt;br /&gt;1/3 of our tests are built upon a fixture that uses Selenium.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://seleniumhq.org/"&gt;Selenium&lt;/a&gt; is the worst test framework i never known. It's hard to write, hard to maintain, it's hard to read and, most of all, is SLOW, absolutely slow.&lt;br /&gt;&lt;br /&gt;It's a long time that i wish to know how much time our selenium tests needs to be run but fitnesse doesn't say this information.&lt;br /&gt;&lt;br /&gt;The solution is to call via http get the url with the instruction to run your suite and measure its execution time. Then i move all selenium tests in a dedicated suite.&lt;br /&gt;&lt;br /&gt;And here you can see:&lt;br /&gt;&lt;br /&gt;time wget http://localhost:8181/XXXProject.SeleniumSuite?suite&lt;br /&gt;&lt;br /&gt;real    &lt;span style="font-weight: bold;"&gt;6m&lt;/span&gt;56.227s (!)&lt;br /&gt;&lt;br /&gt;God save us&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-474321001007374345?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/474321001007374345/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=474321001007374345' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/474321001007374345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/474321001007374345'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/12/test-how-to-measure-execution-time-of.html' title='[Test] how to measure the execution time of Fitnesse tests'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2r2pau70KKc/SGzemd_eG0I/AAAAAAAAAJs/5NTBKVbwQ6k/s72-c/turtle_sketch.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-8937309986539213005</id><published>2009-12-01T14:29:00.003+01:00</published><updated>2009-12-02T12:04:07.448+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script'/><title type='text'>[Script] subversion diff ignoring white space</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ifdefined.com/images/bug_tracker_svn_diff.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 344px; height: 155px;" src="http://ifdefined.com/images/bug_tracker_svn_diff.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;Try it when you need to look differences in your code without noise due to formatting rules:&lt;/span&gt; &lt;span style="font-family:monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;&lt;code&gt;&lt;span style="font-size:100%;"&gt;svn diff -x "-u -w" (-r &lt;revision&gt;revisionNumber)&lt;br /&gt;&lt;br /&gt;&lt;/revision&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;and eventually : &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;patch -p0 -l &lt; (file name) &lt;diff file=""&gt;&lt;/diff&gt;&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;----&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Thanks to Marco Gulino&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-8937309986539213005?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/8937309986539213005/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=8937309986539213005' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8937309986539213005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8937309986539213005'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/12/script-subversion-diff-ignoring-white.html' title='[Script] subversion diff ignoring white space'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-7236437695780217685</id><published>2009-11-24T09:37:00.002+01:00</published><updated>2009-11-24T09:41:14.000+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>[Test] Parameterized tests</title><content type='html'>I never used a not-well-known functionality of junit 4. I mean: the Parameterized tests.&lt;br /&gt;Every time i extract a method called "verifyXXXwith(parameter)" and i create a lot of small test case.&lt;br /&gt;Reading this article: &lt;a href="http://www.blogger.com/I%20never%20used%20a%20not-well-known%20functionality%20of%20junit%204.%20I%20mean:%20the%20Parameterized%20tests.%20%20Every%20time%20i%20extract%20a%20method%20called%20%22verifyXXXwith%28parameter%29%22%20and%20i%20create%20a%20lot%20of%20small%20test%20case.%20Reading%20this%20article:%20http://www.testearly.com/2007/04/13/take-heed-of-mixing-junit-4s-parameterized-tests/%20i%20think%20my%20solution%20is%20the%20best.%20What%27s%20your%20feedback?"&gt;http://www.testearly.com/2007/04/13/take-heed-of-mixing-junit-4s-parameterized-tests/&lt;/a&gt; i think my solution is the best.&lt;br /&gt;What's your feedback?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-7236437695780217685?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/7236437695780217685/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=7236437695780217685' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7236437695780217685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7236437695780217685'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/11/test.html' title='[Test] Parameterized tests'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-3648492329232839725</id><published>2009-11-13T17:25:00.003+01:00</published><updated>2009-11-13T17:28:24.087+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='citazioni'/><title type='text'>[Citazioni da me stesso] spazzatura</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.sputnikdesignworks.com/clipart/people/wastebasket.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 260px; height: 261px;" src="http://www.sputnikdesignworks.com/clipart/people/wastebasket.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"Basta mettere un cestino e la spazzatura arriva"&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-3648492329232839725?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/3648492329232839725/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=3648492329232839725' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3648492329232839725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3648492329232839725'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/11/citazioni-da-me-stesso-spazzatura.html' title='[Citazioni da me stesso] spazzatura'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-2728771014185479349</id><published>2009-11-06T18:27:00.005+01:00</published><updated>2009-11-06T18:29:51.517+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>[Performance] Analyzing database performance</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://people.debian.org/%7Etille/debian-med/talks/img/postgresql.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 226px; height: 226px;" src="http://people.debian.org/%7Etille/debian-med/talks/img/postgresql.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ok, it's time to release your software product in a production environment !&lt;br /&gt;You need to analyze your database and collect some data, just to know what are the most problematic queries.&lt;br /&gt;I read this interesting article by &lt;a href="http://www.databasejournal.com/features/postgresql/article.php/3323561/Counting-Queries-PostgreSQL-SQL-Analysis.htm"&gt;Tom Copeland&lt;/a&gt;&lt;br /&gt;but it's pretty old.&lt;br /&gt;&lt;br /&gt;Let's follow these instructions:&lt;br /&gt;&lt;br /&gt;your dabatase should log all the queries executed. My db is postgreSQL 8.3, so:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo vim /etc/postgresql/8.3/main/postgresql.conf and edit:&lt;/li&gt;&lt;/ul&gt;log_statement = all&lt;br /&gt;syslog_facility = 'LOCAL0'&lt;br /&gt;syslog_ident = 'postgres'&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo /etc/init.d/postgresql-8.3 reload&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;cp /var/log/messages log.txt&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;(i start to clear my file with this: grep -v "CET DETAIL" log.txt &gt; log.txt)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;grep select log.txt | cut -d ' ' -f 13- | sort | uniq -c | sort -nr | less  (execute it without some pipe to understanding the meaning)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Now you know what are the most famous queries.&lt;br /&gt;My suggestion is to start from here, adding custom data in used tables and executing the first two or three queries found before.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-2728771014185479349?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/2728771014185479349/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=2728771014185479349' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2728771014185479349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2728771014185479349'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/11/ok-its-time-to-release-your-software.html' title='[Performance] Analyzing database performance'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-4354808136308417873</id><published>2009-11-04T16:27:00.004+01:00</published><updated>2009-11-04T16:43:28.032+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>[Test] The fifth wicket secret</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://images.craveonline.com/article_imgs/Image/shopping_list.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 324px; height: 215px;" src="http://images.craveonline.com/article_imgs/Image/shopping_list.jpg" alt="" border="0" /&gt;&lt;/a&gt;Some time ago my coworker Alessandro Novarini had explored a way to test ajax events inside wicket tests. Look &lt;a href="http://alenovarini.wordpress.com/2009/07/08/the-fourth-secret-about-wicket/"&gt;here&lt;/a&gt; !&lt;br /&gt;&lt;br /&gt;Now you can explore another secret.&lt;br /&gt;With this method you can see ALL the wicket paths you need to provide in your tests:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; public void printAllComponentPaths() {&lt;br /&gt;    Page p = tester.getLastRenderedPage();&lt;br /&gt;    p.visitChildren(new IVisitor() {&lt;br /&gt;&lt;br /&gt;       @Override&lt;br /&gt;       public Object component(Component component) {&lt;br /&gt;          System.out.println(component.getPath());&lt;br /&gt;          return null;&lt;br /&gt;       }&lt;br /&gt;    });&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-4354808136308417873?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/4354808136308417873/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=4354808136308417873' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4354808136308417873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4354808136308417873'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/11/test-fifth-wicket-secret.html' title='[Test] The fifth wicket secret'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-6528652999055295726</id><published>2009-10-26T09:28:00.003+01:00</published><updated>2009-11-04T15:36:22.943+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Public Speaking'/><title type='text'>[Public Speaking] a nice joke</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://z.about.com/d/mandarin/1/0/a/h/-/-/doctor.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 148px; height: 190px;" src="http://z.about.com/d/mandarin/1/0/a/h/-/-/doctor.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A man goes into a doctor's office and says "Doctor, doctor, it hurts when i raise my arm over my head" . The doctor replies, "Then don't raise your arm over your head!"&lt;br /&gt;&lt;br /&gt;It's a nice metaphor :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-6528652999055295726?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/6528652999055295726/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=6528652999055295726' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6528652999055295726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6528652999055295726'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/10/public-speaking-nice-joke.html' title='[Public Speaking] a nice joke'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-5096467361914616163</id><published>2009-10-21T12:55:00.006+02:00</published><updated>2009-11-04T15:33:41.983+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>[Xp] switch and pair programming</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.voidspace.org.uk/python/weblog/images/pairon.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 325px; height: 186px;" src="http://www.voidspace.org.uk/python/weblog/images/pairon.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The working day starts with a stand-up meeting.&lt;br /&gt;One of the key points is define the daily plan: who is working on what.&lt;br /&gt;&lt;br /&gt;Sometimes i hear: " today &lt;span style="font-weight: bold;"&gt;i don't want to switch pair&lt;/span&gt;, i want to continue to work with the same coworker "&lt;br /&gt;&lt;br /&gt;I think it's exactly the time when the switch is necessary.&lt;br /&gt;I think the pair is working in a comfortable area; he know that his solution is not the best, but it works for the current task.&lt;br /&gt;Probably he neither want to describe his problem nor to share his solution.&lt;br /&gt;&lt;br /&gt;The bells are ringing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-5096467361914616163?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/5096467361914616163/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=5096467361914616163' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5096467361914616163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5096467361914616163'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/10/xp-switch-and-pair-programming.html' title='[Xp] switch and pair programming'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-1241490551648823184</id><published>2009-10-21T09:18:00.002+02:00</published><updated>2009-11-04T15:36:40.647+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Future'/><title type='text'>[Future] electricity</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://grtu.net/data/images/Article_images/electricity22.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 238px; height: 170px;" src="http://grtu.net/data/images/Article_images/electricity22.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;when apple will invent the wireless electricity ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-1241490551648823184?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/1241490551648823184/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=1241490551648823184' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/1241490551648823184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/1241490551648823184'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/10/future-electricity.html' title='[Future] electricity'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-7124700076512352092</id><published>2009-10-07T23:09:00.004+02:00</published><updated>2009-11-04T16:12:48.531+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>[Music] una delle migliori musiche</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.zahradka-art.com/images/artwork/Luna.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 248px; height: 370px;" src="http://www.zahradka-art.com/images/artwork/Luna.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;L'ho ballata anche come se slow fox. Il testo è stupendo e il ritmo armonioso:&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=CPzagqJy7e8"&gt;&lt;br /&gt;http://www.youtube.com/watch?v=CPzagqJy7e8&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Luna tu&lt;br /&gt;Quanti sono i canti che risuonano&lt;br /&gt;Desideri che attraverso i secoli&lt;br /&gt;Han solcato il cielo per raggiungerti&lt;br /&gt;Porto per poeti che non scrivono&lt;br /&gt;E che il loro senno spesso perdono&lt;br /&gt;Tu accogli i sospiri di chi spasima&lt;br /&gt;E regali un sogno ad ogni anima&lt;br /&gt;Luna che mi guardi adesso ascoltami&lt;br /&gt;&lt;br /&gt;Luna tu&lt;br /&gt;Che conosci il tempo dell'eternitá&lt;br /&gt;E il sentiero stretto della veritá&lt;br /&gt;Fa piú luce dentro questo cuore mio&lt;br /&gt;Questo cuore d’uomo che non sa, non sa&lt;br /&gt;&lt;br /&gt;Che l’amore puó nascondere il dolore&lt;br /&gt;Come un fuoco ti puó bruciare l’anima&lt;br /&gt;&lt;br /&gt;Luna tu&lt;br /&gt;Tu rischiari il cielo e la sua immensitá&lt;br /&gt;E ci mostri solo la meta che vuoi&lt;br /&gt;Come poi facciamo quasi sempre noi&lt;br /&gt;Angeli di creta che non volano&lt;br /&gt;Anime di carta che s'incendiano&lt;br /&gt;Cuori come foglie che poi cadono&lt;br /&gt;Sogni fatti d’aria che svaniscono&lt;br /&gt;Figli della terra e figli tuoi, che sai&lt;br /&gt;&lt;br /&gt;Che l’amore puó nascondere il dolore&lt;br /&gt;Come un fuoco ti puó bruciare l’anima&lt;br /&gt;&lt;br /&gt;Ma e con l’amore che respira il nostro cuore&lt;br /&gt;E la forza che tutto muove e illumina! . . .&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-7124700076512352092?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/7124700076512352092/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=7124700076512352092' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7124700076512352092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7124700076512352092'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/10/music-una-delle-migliori-musiche.html' title='[Music] una delle migliori musiche'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-76411517543627411</id><published>2009-09-18T15:18:00.003+02:00</published><updated>2009-11-04T16:13:15.971+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>[Life] Idee geniali per nuovi progetti di business</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://quangkhoi.net/businesscenter/wp-content/uploads/2009/06/business-idea-business-magazine1.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 187px; height: 187px;" src="http://quangkhoi.net/businesscenter/wp-content/uploads/2009/06/business-idea-business-magazine1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ecco delle idee di progetti che vorrei vedere realizzate nel mondo. Se qualcuno ha intenzione di lavorarci mi faccia sapere :)&lt;br /&gt;Le idee sono free, nel caso diventiate ricchi avrete l'obbligo morale di offrirmi una birra :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Bid and prey&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tutti i nuovi sistemi di 'aste al ribasso' si basano sull'idea che l'utente tenta di indovinare il prezzo finale e si aggiudica il premio purchè la sua offerta sia la più bassa tra quelle fatte dagli altri utenti e l'unica. Ad esempio per un mac book un utente può offrire 89 centesimi, ma se quell'offerta è già stata fatta da un altro nessuno dei due può vincerla: bisogna provare un altro numero.&lt;br /&gt;&lt;br /&gt;Ciò che mi piacerebbe è un sistema dove compro quote di vittoria assicurate. Ad esempio per lo stesso mac book di sopra vorrei comprare l'1% di probabilità di vittoria. Tutti gli slot di probabilità sono in vendita, ma non in modo lineare: comprare l'1% di un premio il cui valore reale è 100 Euro potrebbe costare 1 Euro mentre comprare il 5% dovrebbe costare un po' di più di 5 Euro. Per invogliare l'utente che ha perso a giocare ancora, gli vengono regalate quote su altri prodotti gratuitamente.&lt;br /&gt;&lt;br /&gt;L'unico dubbio che ho riguarda il principio del gioco stesso: la gente che gioca al superenalotto lo fa perchè non conosce quante probabilità ha di vincere? E se tale probabilità fosse scritta su ogni biglietto?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Gruppi di Acquisto on line&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mi piacerebbe un sito dove mi collego e vedo cosa hanno intenzione di comprare i gruppi di acquisto vicini a dove abito. Ad esempio posso collegarmi e vedere che il gruppo di acquisto della mia zona ha in piano di acquistare da un allevatore di fiducia un gran numero di affettati. Vedo i prezzi e mi prenoto per la quantità che desidero.&lt;br /&gt;&lt;br /&gt;Tutto nasce dal desiderio di avere prodotti di qualità a prezzi modici grazie al concetto di filiera corta&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Dieta Guidata&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mi collego ad un sito di un supermercato, ad esempio Esselunga, e seleziono diete adeguate al mio profilo, eventualmente create direttamente da un dietologo esperto.&lt;br /&gt;La spesa mi arriva a casa con i prodotti selezionati dalla dieta, così che io non abbia tentazioni e sopratutto eviti la difficoltà di selezionare quantità precise.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;PanBigBrother&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vendere tessere che garantiscono l'accesso alla visione di webcam di altri utenti, sempre attive e fornite al momento dell'abbonamento. In pratica installi la tua webcam in casa, la tieni accesa quando e quanto vuoi. C'è un sito in cui navigare tra le varie utenze per scoprire dove si vuole scatenare la propria passione vojeour-istica.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;BuyFreeTime&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Noi occidentali manchiamo di tempo libero. Il sito prevede l'inserimento di richieste di commissioni da svolgere, con allegato il prezzo che si vuole pagare per averlo realizzato. Ad esempio: voglio comprare i biglietti del teatro ma non ho tempo nè voglia per farlo; dopo aver inserito l'annuncio si presenta un ragazzo che a fronte di un piccolo pagamento provvederà a fare la file, acquistare e riportarmi i biglietti. Ovviamente tutto è garantito da un sistema di feedback a-la ebay.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-76411517543627411?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/76411517543627411/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=76411517543627411' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/76411517543627411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/76411517543627411'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/09/life-idee-geniali-per-nuovi-progetti-di.html' title='[Life] Idee geniali per nuovi progetti di business'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-8920506790557320628</id><published>2009-09-15T17:43:00.004+02:00</published><updated>2009-11-04T15:37:05.650+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>[Metodo] i falsi miti del Customer On Site</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;img style="width: 281px; height: 209px;" src="http://www.ministrylive.org/wp-content/uploads/2009/05/anton_critic-400x298.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Nel tempo ho rivalutato l'importanza della pratica '&lt;a href="http://c2.com/xp/OnsiteCustomer.html"&gt;Customer on Site&lt;/a&gt;' così sponsorizzata dai metodi agili quale ad esempio eXtreme Programming.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Mantengo valida l'assunzione che la collaborazione deve essere costante e collaborativa; gli sviluppatori dovrebbero smettere di arguire e approfondire l'analisi facendo domande e scavando per soddisfare i veri bisogni del cliente, così come il cliente deve continuare a definire le priorità etc...&lt;br /&gt;&lt;br /&gt;Un'ottima opportunità sarebbe avere il cliente sempre disponibile. &lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;Ciò accade di rado&lt;/span&gt;, anche quando il customer è 'on site'. Spesso accade che bisogna rincorrerlo e farsi dare risposte mentre viaggia tra un meeting e l'altro. Questa modalità di ricevere risposte può sembrare agile ma porta con sè vari svantaggi: ogni scelta deve infatti essere meditata; non può essere frutto della fretta.&lt;br /&gt;&lt;br /&gt;Avendo un filo diretto di comunicazione, il cliente è stimolato a fare richieste di change request, a volte piccole ma non certo trascurabili (magari una mezz'ora di tempo); la pratica suggerirebbe di raccoglierle e considerarle in una opportuna fase di planning; ed ecco un altro problema: non sempre il planning è definito in un certo lasso temporale ben definito. Ciò che ho visto spesso succedere è che il planning viene fatto al termine di una funzionalità, quando lo sviluppatore chiede su cosa deve iniziare a lavorare.&lt;br /&gt;&lt;br /&gt;Riassumendo, &lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;il cliente non si abitua a destinare tempi ben definiti per il planning, per le demo, per l'analisi&lt;/span&gt;. Ritaglia questi tempi quando gli capita, e questo è un peccato per tutti.&lt;br /&gt;Secondo me il lavorare a distanza fissando tali periodi di tempo potrebbe essere una buona soluzione. Planning lunedì mattina, le demo giovedì pomeriggio e l'analisi il venerdì, ad esempio.&lt;br /&gt;&lt;br /&gt;E' certo possibile farlo anche lavorando dal cliente, ma entrano in gioco altre componenti: &lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;il cliente comincia a criticare le pratiche di sviluppo del team&lt;/span&gt; e vuole imporre una atmosfera di controllo. Comincia a questionare l'efficacia del pair programming, delle pause, degli orari di lavoro etc.. tutto questo per vari fini, che forse non è nemmeno interessante analizzare.&lt;br /&gt;&lt;br /&gt;Se non c'è un coach oppure il coach non riesce a 'difendere' il team si creano tensioni che sarebbe meglio evitare.&lt;br /&gt;&lt;br /&gt;Dalla mia esperienza preferisco mille volte non lavorare nella sede del cliente, pur mantenendo l'abitudine di comunicare spesso e bene.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-8920506790557320628?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/8920506790557320628/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=8920506790557320628' title='9 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8920506790557320628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8920506790557320628'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/09/metodo-i-falsi-miti-del-customer-on.html' title='[Metodo] i falsi miti del Customer On Site'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-6482611681855712828</id><published>2009-09-15T11:46:00.006+02:00</published><updated>2009-11-04T16:13:32.410+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Future'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>[Fantasia] alcune previsioni sul futuro</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://complessita.files.wordpress.com/2008/10/sfera20di20cristallo.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 199px; height: 281px;" src="http://complessita.files.wordpress.com/2008/10/sfera20di20cristallo.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Uno dei metodi di previsione del futuro è quello di portare, con un salto di fantasia, all'estremo certe tendenze visibili nel presente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Qual sarà la trasmissione TV più seguita fra qualche anno? &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il principio voyeuriestico verrà portato all'estremo: basterà comprare una tessera per diventare parte di una trasmissione globale. Con tale tessera, con varie forme di abbonamento, verranno fornite un paio di telecamere da piazzare in casa propria, o addosso. Grazie all'abbonamento si continuerà a mandare in streaming parte della propria vita (a orari prestabiliti o continuamente) e si avrà il diritto di guardare le altre telecamere degli altri utenti. La Tv selezionerà i top ten, o immagini varie, farà classifiche dei momenti più hot, o più imbarazzanti o più simpatici. A volte inviterà i protagonisti delle storie negli studios.&lt;br /&gt;E' come se tutti gli abbonati fossero in una casa alla Grande Fratello.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Qual è il futuro di internet?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mi pare che gli utenti da un primo grande entusiasmo in cui l'esplorazione del web era viva ed eccitante stiano passando ad un uso del mezzo più rilassato, più abituale. Da un punto di vista piu generale, si è passato da un paradigma delle amicizie 'da piazza' ad amicizie virtuali.&lt;br /&gt;Senza troppo slancio di fantasia immagino che si assestino non più di 10 siti navigati puntualmente e ritualmente; tali siti sproneranno alle conoscenze virtuali ed agli incontri reali, che torneranno ad essere frequenti, probabilmente con un forte accento sessuale in prima istanza. Si eviterà quindi la mancanza di novità dovuta alla frequentazione delle abituali amicizie senza però perdersi nella vacua virtualità.&lt;br /&gt;Spingendosi un po' oltre, si incontreranno persone nuove sempre più spesso, e gli incontri saranno numerosi ma rapidi; il momento diverrà eterno e l'attuale dissidio dovuto all'indossare una maschera ed essere sè stessi in momenti diversi verrà risolto diventando altro in ogni momento&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-6482611681855712828?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/6482611681855712828/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=6482611681855712828' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6482611681855712828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6482611681855712828'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/09/fantasia-alcune-previsioni-sul-futuro.html' title='[Fantasia] alcune previsioni sul futuro'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-5063435455761068639</id><published>2009-09-08T20:33:00.007+02:00</published><updated>2009-11-04T15:37:53.858+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Metrics'/><title type='text'>[Metriche] Le uniche metriche del codice che servono sono qui</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.buzzdetector.com/wp-content/uploads/2009/05/metre_rubant.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 303px; height: 160px;" src="http://www.buzzdetector.com/wp-content/uploads/2009/05/metre_rubant.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Molto si è detto e scritto circa quali metriche è opportuno considerare durante lo sviluppo di un progetto.&lt;br /&gt;&lt;br /&gt;Poichè le metriche servono esclusivamente a incoraggiare un comportamento, trascrivo qui quelle che piacciono a me, seguendo le quali si riuscirà a diventare un ottimo programmatore.&lt;br /&gt;Seguitemi:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; Minimizzare il numero di user stories lavorate in modalità Last In First Out&lt;/span&gt;&lt;br /&gt;Quando l'ultima user story descritta è sempre la più importante vuol dire che non c'è un vero e proprio planning e si è perso qualsiasi concetto di pianificazione e priorità: il vostro progetto sta andando a ramengo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; Profondità coverage&lt;/span&gt;&lt;br /&gt;Sapere che l' 80 % del codice è testato è una buona cosa. Eppure sapere che dalla stessa riga di codice ci passano più test in generale può voler dire che sono stati scritti non solo dei test unitari, ma anche dei cluster test o degli integration (o acceptance) test.&lt;br /&gt;Se due test di diversa natura passano dalla stessa riga di codice la profondità di coverage è 2, che è meglio di una profondità di 1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; Massimizzare la varietà di dati di test (suggerita dal mio collega Marco Gulino)&lt;/span&gt;&lt;br /&gt;Non siamo abituati a pensare alle boundary conditions. Un eventuale codice del tipo: if (i &lt; i ="=" i =" MAX_INT" i =" -1" style="font-weight: bold;"&gt;&gt; Monitorare il rapporto Errore di stima / Numero di framework usati&lt;br /&gt;&lt;br /&gt;L'errore di stima cresce a seconda del numero di tecnologie attraversate. Per completare la vostra user story dovete toccare solo maven, java, spring ? Oppure anche hibernate, fitnesse, wicket, selenium etc..? Calcolate un fattore correttivo adeguato!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; Duplicazione divergente &lt;/span&gt;&lt;br /&gt;Certo la duplicazione è un male: ogni modifica in un codice copiato va riportato paro paro da altre parti e tale processo è error-prone, ma alcuni eroi con un po' di lavorio con search&amp;amp;replace e espressioni regolari riescono senza dubbio a lavorare in questa modalità. Eppure se i pezzi di codice duplicato divergono si perde la capacità eccezionalmente umana di riconoscere ad occhio le differenze. Il tuo codice non solo è duplicato ma non è più nemmeno simmetrico!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; Il rapporto Numero di classi / Numero di metodi pubblici deve tendere a uno&lt;/span&gt;&lt;br /&gt;Una classe, una responsabilità, un solo metodo pubblico. E' facile identificare di quante responsabilità è caricato un oggetto: il piu delle volte basta contare il numero di metodi privati&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; Il tempo di  esecuzione test non deve degenerare all'aumentare del numero di test&lt;/span&gt;&lt;br /&gt;Per lo meno garantisci che rimanga costante al crescere del numero di test. 100 test ci mettono 100 secondi? Se 200 test ci mettono 200 secondi stai adottando una strategia  non peggiorativa.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&gt; Minimizzare il numero di user stories che tornano "in progress"&lt;/span&gt;&lt;br /&gt;Non mi ricordo chi l'ha detta, ma è di certo sintomo che gli AT non sono efficaci, e rilavorare funzionalità considerate finite è frustrante e puà essere dannoso se chi sistema i bachi non coincide con chi ci ha lavorato.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-5063435455761068639?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/5063435455761068639/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=5063435455761068639' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5063435455761068639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5063435455761068639'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/09/metriche-le-uniche-metriche-del-codice.html' title='[Metriche] Le uniche metriche del codice che servono sono qui'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-3732017365828471787</id><published>2009-07-23T17:28:00.003+02:00</published><updated>2009-11-04T16:13:50.222+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='citazioni'/><title type='text'>[Citazioni da me stesso] sulle scadenze</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.sirdrake.tv/wp-content/uploads/tempo%20sospeso%281%29.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 186px; height: 159px;" src="http://www.sirdrake.tv/wp-content/uploads/tempo%20sospeso%281%29.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"Sarà tutto disponibile entro ma non prima dei 5 minuti"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-3732017365828471787?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/3732017365828471787/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=3732017365828471787' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3732017365828471787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3732017365828471787'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/07/citazioni-da-me-stesso-sulle-scadenze.html' title='[Citazioni da me stesso] sulle scadenze'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-8376765996584686679</id><published>2009-07-22T17:52:00.003+02:00</published><updated>2009-11-04T16:13:59.510+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='citazioni'/><title type='text'>[Citazione] da fabiana</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.roma-gourmet.net/sito/wp-content/uploads/2008/09/broccolo_romanesco.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 208px; height: 200px;" src="http://www.roma-gourmet.net/sito/wp-content/uploads/2008/09/broccolo_romanesco.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"Se la gente mi giudicasse per i film che ho visto&lt;br /&gt;vivrei da sola in una palude deserta"&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;"E' come chiedere al cliente se preferisce la Nutella o i broccoli al vapore"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-8376765996584686679?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/8376765996584686679/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=8376765996584686679' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8376765996584686679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8376765996584686679'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/07/citazione-da-fabiana.html' title='[Citazione] da fabiana'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-6751494341365031732</id><published>2009-07-19T19:35:00.004+02:00</published><updated>2009-11-04T16:14:22.174+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>[Sogno] Racconto di un sogno: la bomba della vita</title><content type='html'>Il racconto di un sogno.&lt;br /&gt;&lt;img style="width: 240px; height: 160px;" src="http://emwyllie.files.wordpress.com/2009/04/dreaming-2.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Ero a Pavia a casa dei miei genitori, nella mia stanza, un week end assolato.&lt;br /&gt;D'un tratto vivo la tremenda esperienza di un &lt;span style="color: rgb(255, 0, 0);"&gt;terremoto&lt;/span&gt;, assai vivida nel mio sogno.&lt;br /&gt;Un rumore sordo seguito da una sensazione di lotta del condominio che stava cercando di non crollare su se stesso. Tutto ai piani inferiori si stava sgretolando e cedendo in una direzione. Fuori una luce molto piu luminosa del solito.&lt;br /&gt;Dopo una decina di secondi tutto è finito, il mio primo pensiero è per i miei genitori. Ci ritroviamo tutti nel corridoio, piangenti e ci abbracciamo per la paura e la gioia di ritrovarci vivi.&lt;br /&gt;&lt;br /&gt;Guardo fuori dalla finestra della mia camera e noto che dal terzo piano siamo all'altezza del primo, tutto sotto di noi è ceduto.&lt;br /&gt;Nella mia stanza per terra c'e' un piccione che maltratta un passerotto in pessimo stato che non riesce a volare. Per lo schifo con la paletta li lancio fuori dalla finestra, e noto che anche fuori riprende la lotta tra i due.&lt;br /&gt;Nell'istante in cui ho aperto la finestra entra un ragno grosso la metà di una mano. Con una ciabatta lo schiaccio e lo uccido, ma dal suo corpo morto si generano altri ragni piu piccoli che cominciano a camminare sulla finestra. Guardo quindi fuori e mi rendo conto di cosa è successo: è stata lanciata una&lt;span style="color: rgb(255, 0, 0);"&gt; bomba di vita&lt;/span&gt;.&lt;br /&gt;In pratica tutto intorno a me la vita era esplosa, la vegetazione aveva ritmi vertiginosi e nel breve la città sarebbe diventata una specie di giugla. Gli animali si generavano a una velocità pazzesca e la lotta per la vita e per le risorse si sarebbe fatta ardua.&lt;br /&gt;&lt;br /&gt;Dopo alcune ore capisco che non ha piu senso stare chiuso in casa e rifiutare la nuova realtà; convinto che sarei morto a breve, esco per strada pronto ad incontrare il mio futuro.&lt;br /&gt;&lt;br /&gt;Entro pochi istanti mentre camminavo per strada tante formiche volanti si posano sul mio corpo e lo proteggono. Non so qual è il motivo che le ha spinte, forse il calore del corpo, ma da quel momento si crea un rapporto simbiotico tra me e questi animali: loro mi difendono dalle minaccie e io li ospito.&lt;br /&gt;&lt;br /&gt;In quel momento capisco che era inutile avere paura della nuova realtà. Il sogno finisce.&lt;br /&gt;Chi me lo interpreta ? :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-6751494341365031732?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/6751494341365031732/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=6751494341365031732' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6751494341365031732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6751494341365031732'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/07/sogno-racconto-di-un-sogno-la-bomba.html' title='[Sogno] Racconto di un sogno: la bomba della vita'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-8596966489064450428</id><published>2009-07-16T11:30:00.003+02:00</published><updated>2009-11-04T16:16:54.292+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='citazioni'/><title type='text'>[Citazione] junior e senior</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ahmadyusrie.files.wordpress.com/2009/03/00_small_vs_big.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 199px; height: 227px;" src="http://ahmadyusrie.files.wordpress.com/2009/03/00_small_vs_big.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;2 junior non fanno 1 senior&lt;br /&gt;ma anche 2 senior non fanno 1 junior&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-8596966489064450428?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/8596966489064450428/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=8596966489064450428' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8596966489064450428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8596966489064450428'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/07/citazionejunior-e-senior.html' title='[Citazione] junior e senior'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-2671770804078949286</id><published>2009-07-08T17:57:00.002+02:00</published><updated>2009-07-08T17:59:20.701+02:00</updated><title type='text'>[Citazione] Andrea e la parmacotto</title><content type='html'>Andrea a pranzo:&lt;br /&gt;"Ho sempre sognato fare il sito per la Parmacotto, così potrei fare la user story 'prosciuttoCRUD'"&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;Note:&lt;br /&gt;CRUD = http://en.wikipedia.org/wiki/Create,_read,_update_and_delete&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-2671770804078949286?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/2671770804078949286/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=2671770804078949286' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2671770804078949286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2671770804078949286'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/07/citazione-andrea-e-la-parmacotto.html' title='[Citazione] Andrea e la parmacotto'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-4649009792724085606</id><published>2009-07-08T17:54:00.002+02:00</published><updated>2009-11-04T16:18:39.615+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='citazioni'/><title type='text'>[Citazione da me stesso] Tradimento</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artemarziale.org/Riservato/RR_Sostenitori/Cultura/Immagini/Psiche/Immag_Bruto.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 249px; height: 255px;" src="http://www.artemarziale.org/Riservato/RR_Sostenitori/Cultura/Immagini/Psiche/Immag_Bruto.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"...quando ho letto la mail ho pensato: 'anche tu, Giuda, figlio mio' "&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-4649009792724085606?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/4649009792724085606/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=4649009792724085606' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4649009792724085606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4649009792724085606'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/07/citazione-da-me-stesso-tradimento.html' title='[Citazione da me stesso] Tradimento'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-7371914516619150027</id><published>2009-06-29T16:53:00.003+02:00</published><updated>2009-11-04T16:17:48.474+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='citazioni'/><title type='text'>[Citazione da me stesso] Bachi</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.sbac.edu/%7Etpl/clipart/Animals%20and%20Insects/bug%20cartoon%2002.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 203px; height: 203px;" src="http://www.sbac.edu/%7Etpl/clipart/Animals%20and%20Insects/bug%20cartoon%2002.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Non ci sarebbero bachi senza gli utenti!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-7371914516619150027?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/7371914516619150027/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=7371914516619150027' title='4 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7371914516619150027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7371914516619150027'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/06/citazione-da-me-stesso-bachi.html' title='[Citazione da me stesso] Bachi'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-5684433944692470614</id><published>2009-06-22T15:36:00.005+02:00</published><updated>2009-11-04T15:38:36.230+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>[Test] Terzo (e ultimo) segreto di wicket</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://thumbs.dreamstime.com/thumb_14/1120051434906k8x.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 144px; height: 144px;" src="http://thumbs.dreamstime.com/thumb_14/1120051434906k8x.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;System.out.println(tester.getServletResponse().getDocument());&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-5684433944692470614?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/5684433944692470614/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=5684433944692470614' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5684433944692470614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5684433944692470614'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/06/test-terzo-e-ultimo-segreto-di-wicket.html' title='[Test] Terzo (e ultimo) segreto di wicket'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-1011572963000016256</id><published>2009-06-22T12:13:00.003+02:00</published><updated>2009-11-04T15:39:52.661+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>[Test] Secondo segreto di wicket</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://madeinfrance-asso.fr/Images/pitagora.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 219px; height: 238px;" src="http://madeinfrance-asso.fr/Images/pitagora.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Dopo il primo segreto, hai aperto le porte del secondo segreto per testare wicket:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-weight: normal; "&gt;DropDownChoice yourDropDown = (DropDownChoice) &lt;/span&gt;tester&lt;/span&gt;.&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;getComponentFromLastRenderedPage&lt;/span&gt;(wicketPath);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;assertEquals(expected, yourDropDown.getModelObject());&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-1011572963000016256?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/1011572963000016256/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=1011572963000016256' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/1011572963000016256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/1011572963000016256'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/06/test-secondo-segreto-di-wicket.html' title='[Test] Secondo segreto di wicket'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-1841130338661250141</id><published>2009-06-17T10:33:00.003+02:00</published><updated>2009-11-04T15:40:13.153+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>[Test] Primo segreto di wicket</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.lostechies.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chrismissal/arrow_5F00_59824380.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 204px; height: 161px;" src="http://www.lostechies.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chrismissal/arrow_5F00_59824380.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aziona il tuo wicket tester:&lt;br /&gt;tester.startPage(YourPage.class);&lt;br /&gt;&lt;br /&gt;e poi recupera dalla root la tipologia di ogni componente introdotta:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;tester.assertComponent("form", Form.class) -&gt; barra verde&lt;br /&gt;&lt;/li&gt;&lt;li&gt;tester.assertComponent("form:table", ...)  -&gt; barra verde&lt;/li&gt;&lt;li&gt;tester.assertComponent("form:table:rows", ...)  -&gt; barra verde&lt;/li&gt;&lt;li&gt;....  -&gt; barra verde&lt;/li&gt;&lt;li&gt;      tester.assertComponent("form:table:rows:1:cells:2:cell:select", DropDownChoice.class);  -&gt; barra verde&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-1841130338661250141?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/1841130338661250141/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=1841130338661250141' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/1841130338661250141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/1841130338661250141'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/06/test-primo-segreto-di-wicket.html' title='[Test] Primo segreto di wicket'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-8029270669821328252</id><published>2009-06-04T09:24:00.004+02:00</published><updated>2009-11-04T16:17:05.687+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='citazioni'/><title type='text'>[Citazione] una paziente al suo psicologo</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.guidagiuseppina.it/imgs/PSICOLOGIA.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 197px; height: 148px;" src="http://www.guidagiuseppina.it/imgs/PSICOLOGIA.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"La psicologia è come la crema anti rughe, puoi dire solo se non ha funzionato"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-8029270669821328252?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/8029270669821328252/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=8029270669821328252' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8029270669821328252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8029270669821328252'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/06/citazione-una-paziente-al-suo-psicologo.html' title='[Citazione] una paziente al suo psicologo'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-6620068531294641575</id><published>2009-06-01T12:13:00.003+02:00</published><updated>2009-11-04T16:17:26.906+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='citazioni'/><title type='text'>[Citazione da me stesso] Trasparenza</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://thinkones.com/images/wave.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 285px; height: 189px;" src="http://thinkones.com/images/wave.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"Andrea, non è che manco di trasparenza. Io sono trasparente come un lago cristallino increspato dalle onde"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-6620068531294641575?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/6620068531294641575/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=6620068531294641575' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6620068531294641575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6620068531294641575'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/06/citazione-da-me-stesso-trasparenza.html' title='[Citazione da me stesso] Trasparenza'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-3277959646135500810</id><published>2009-04-20T23:33:00.003+02:00</published><updated>2009-11-04T16:17:18.561+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>[XP] Principi di sviluppo di Tommaso Torti</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://canosaweb.gocity.it/img/news/z1.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 391px; height: 219px;" src="http://canosaweb.gocity.it/img/news/z1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In questi anni di lavoro come extreme programmer ho avuto modo di provare su pelle molti dei principi, valori e pratiche che si leggono su libri.&lt;br /&gt;&lt;br /&gt;Le ho sperimentate principalmente in due team, l'ex Xplayers team di Quinary e l'attuale team Orione di Sourcesense.&lt;br /&gt;Altre volte le ho affinate nei gruppi in cui mi sono trovato a fare mentoring, negli scambi epistolari con la mailing list di xp-it e nel xp-user group di Milano.&lt;br /&gt;&lt;br /&gt;Ho così coniato dei miei slogan; condivido con voi i principi vertuosi così come li ho interiorizzati.&lt;br /&gt;&lt;br /&gt;1) Assolutamente al primo punto e con ampia distanza da qualsiasi altro:&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;UNA SOLA PARENTESI APERTA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vuol dire: fai una e una sola cosa alla volta.&lt;br /&gt;Si concretizza nelle pratiche:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;frequenti commit, che vuol dire darsi la possibilità di sbagliare e fare revert senza pietà. Aimè sono pochissime le persone che fanno revert e che ignorano la potenza del fare un passo indietro per farne due aventi.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;distinguere bene quando si scrive codice da quando si rifattorizza.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;l'uso della TODO list, anch'esso rarissimo. Quando mi capita di finire la mia funzionalità prima di prenderne una nuova chiedo ai miei compagni di team se hanno tasks che posso completare delle loro user stories. Li vedo sempre impacciati nel darmi una risposta chiara e concisa.&lt;/li&gt;&lt;/ul&gt;Se si mantiene una sola parentesi aperta, tutto ciò che è extra va a finire su un pezzo di carta. Quali vantaggi? Ci si dà la possibilità di dare priorità, di alternare le attività secondo le energie del momento etc.&lt;br /&gt;&lt;br /&gt;2) &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;DARE ALMENO 3 SOLUZIONI AD OGNI PROBLEMA&lt;/span&gt;&lt;br /&gt;E' necessario ampliare lo spazio soluzione di ogni problema. Ciò che accade è che spesso si scelgono le soluzioni meno pulite perchè non si conoscono alternative. Se non si riescono a trovare alternative bisogna sforzarsi di farlo.&lt;br /&gt;Come? Chiedendo in mailing list, scoprendo &lt;span style="font-style: italic;"&gt;come altri hanno risolto lo stesso problema&lt;/span&gt;, come si risolve in letteratura, confrontandosi con colleghi piu esperti etc.&lt;br /&gt;L'applicazione di questa pratica è una grande accelerazione nella carriera che porta uno junior a diventare senior.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;IL CODICE DEVE ESSERE SIMMETRICO&lt;/span&gt;&lt;br /&gt;Cosa non va nel seguente codice?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if (aa instanceof Father) ....&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if (aa instanceof Mother) ....&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if aa == null ....&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if (aa instanceof Object) ....&lt;/span&gt;&lt;br /&gt;E' una chiara violazione del paradigma object oriented ma sopratutto stona da un punto di vista prettamente estetico. La precondizione di ogni refactoring è la sensibilità, e la simmetria è uno dei modi per aumentarla.&lt;br /&gt;Ho in mente l'immagine di tempio greco, dove le colonne sono di ugual numero a destra e a sinistra dell'entrata ed hanno stessa altezza. Il codice deve rispecchiare tale simmetria per essere elegante.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;IL PROBLEMA DEL TDD E' IL TERZO PASSO&lt;/span&gt;&lt;br /&gt;Non c'è niente da fare, il refactoring ad OGNI barra verde è difficilissimo dal punto di vista della disciplina. Si tende a scrivere altri test case, a rifattorizzare 'alla fine'. Quel che accade è che i refactoring sono sempre più grossi del necessario e si procede lentamente; inoltre non è raro lasciare debito tecnico.&lt;br /&gt;Quando lo si vede? Quando ad esempio per scrivere un nuovo test case duplico uno esistente, e magari mi sembra anche giusto!  Wrong!&lt;br /&gt;Non c'è soluzione precisa a questo errore, ci vuole solo grande disciplina.&lt;br /&gt;&lt;br /&gt;5) &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;COMBATTI LE BATTAGLIE GIUSTE (ABBANDONA TEMATICHE ESTETICHE )&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In un team ci sono sempre punti di vista differenti, ma bisogna scegliere la battaglia da combattere.&lt;br /&gt;Sopratutto vale la pena concentrarsi sugli argomenti davvero sostanziali. Un tipico esempio sono le battaglie per l'uso dei generics o per l'introduzione di getter e setter.&lt;br /&gt;Un altro esempio personale è la preferenza verso le stime in termini temporali rispetto alle stime con punti complessità. Ho le mie motivazioni, teoriche e pratiche, che mi portano a favorire una soluzione rispetto all'altra, ma reputo che non vale la pena combattere. A volte le persone hanno bisogno di sbagliare. Eppure il vero valore delle stime è rendersi conto del lavoro che c'è da fare, dei rischi associati, degli eventuali split etc., in fondo non è _così_ importante combattere questa battaglia (anche se so di essere nel giusto :) )&lt;br /&gt;&lt;br /&gt;Questo vuol dire scendere a compromessi, che è una qualità e non un difetto di un programmatore che lavora in team.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6) &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;NO SILVER BULLET&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mai adottare un atteggiamento del tipo: "non si fa così", o "si deve fare così".&lt;br /&gt;Tale fanatismo è facilmente presente negli agilisti, ed è il primo pensiero che mi viene quando nascono dei movimenti di pensiero tipo quelli per l'adozione della tecnica del pomodoro o della campagna anti-if.&lt;br /&gt;Non è così raro incontrare punti di vista assoluti, che ammazzano la libertà, il divertimento e sopratutto l'efficacia dello sviluppo in nome di principi ragionevoli.&lt;br /&gt;Esempi: "non ci devono essere new nel codice" , "non ci devono essere check sul null nel codice", "no warning nel progetto", "solo test con mock" , "sempre loggare questo e quest'altro", etc etc&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7) &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;TUTTO CHIUSO A FINE GIORNATA&lt;/span&gt;&lt;br /&gt;Per chiudere il cerchio, una variazione del punto 1. Una giornata non è che una singola parentesi all'interno dell'iterazione. Quindi: nessuna modifica non committata sulla macchina di sviluppo, il sistema di integrazione continua è verde con l'ultima versione rilasciata, il journal è stato scritto, il tracking è stato completato, le carte sono sulla lavagna etc etc.&lt;br /&gt;&lt;br /&gt;Ovviamente ci sono le dovute eccezioni e la capacità di non cadere nel fanatismo (punto 6) sono tante. L'importante è tendere all'eccellenza ed evitare di mettere sul tavolo troppi compromessi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-3277959646135500810?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/3277959646135500810/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=3277959646135500810' title='8 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3277959646135500810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3277959646135500810'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/04/xp-principi-di-sviluppo-di-tommaso.html' title='[XP] Principi di sviluppo di Tommaso Torti'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-8331464258939434563</id><published>2009-02-05T14:25:00.003+01:00</published><updated>2009-11-04T16:12:31.693+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script'/><title type='text'>[Script] verifica che nel tuo war non finiscano diverse versioni della stessa libreria!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.danirevi.it/wp-content/uploads/2008/03/bash-logo-small.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 193px; height: 174px;" src="http://www.danirevi.it/wp-content/uploads/2008/03/bash-logo-small.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;warfile=$1&lt;br /&gt;&lt;br /&gt;function strip_version_numbers() {&lt;br /&gt;  #  converte foo/bar-1.2.3.jar in foo/bar.jar&lt;br /&gt;  ruby -pe 'gsub($1, "") if $_ =~ /^.*(-[0-9.]+)(-bin)?.jar/'&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# check there are no duplicates entries in war&lt;br /&gt;if jar tf $warfile | strip_version_numbers | sort | uniq -c | sort -nr | head | grep '^   [2-9]'&lt;br /&gt;then&lt;br /&gt;  echo "duplicate entries found"&lt;br /&gt;  exit 1&lt;br /&gt;fi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-8331464258939434563?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/8331464258939434563/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=8331464258939434563' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8331464258939434563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8331464258939434563'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/02/script-verifica-che-nel-tuo-war-non.html' title='[Script] verifica che nel tuo war non finiscano diverse versioni della stessa libreria!'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-2044020167991800933</id><published>2009-02-05T01:30:00.003+01:00</published><updated>2009-02-05T01:43:26.497+01:00</updated><title type='text'>Buddismo, Ballo, Lavoro</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://obiettivomenonove.files.wordpress.com/2008/10/buddista.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 278px;" src="http://obiettivomenonove.files.wordpress.com/2008/10/buddista.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Cosa cerco nella gente che viene a fare i colloqui? La passione per il lavoro che faranno! E non è facile all'interno di un colloquio scovarla; si deve vedere l'occhio brillante e una leggera pazzia quando si tocca un argomento interessante per il candidato. Come si fa a lavorare senza passione? Bisogna ritrovare il senso della parola 'passione', anche dal punto di vista della sofferenza.&lt;br /&gt;&lt;br /&gt;Ogni lezione di ballo è pura &lt;span style="font-weight: bold;"&gt;passione&lt;/span&gt;, è un abbattimento di qualsiasi tipo di orgoglio, una presa di coscienza della propria incapacità ma anche una speranza di arrivare verso vette migliori, diminuendo i difetti e portando al massimo i pregi.&lt;br /&gt;Lo stesso messaggio arriva da tutti i miei maestri. &lt;span style="font-style: italic;"&gt;Recalcati, Ikeda, Vaccari&lt;/span&gt;, tutti tendono a bastonare, ad incoraggiare e moooolto raramente si complimentano. Il loro fine è portare al massimo le proprie capacità che sono estremamente maggiori di quello che la nostra mente pensa. I limiti che ci imponiamo sono enormi, agghiaccianti.&lt;br /&gt;&lt;br /&gt;Il messaggi che ci arriva dai maestri è che &lt;span style="color: rgb(255, 0, 0);"&gt;tutto è lotta e fatica, e passione, e competizione&lt;/span&gt;. Ma il messaggio che può apparire cattivo è invece una profonda sfida verso una vita ricca di soddisfazioni. Solo controcorrente ci si diverte a remare, solo vincendo una importante gara si è soddisfatti (ballo), o lottando contro una propria paura (buddismo), o consegnando software di qualità (lavoro).&lt;br /&gt;&lt;br /&gt;Recalcati non si limita a bastonarti: ho il corpo troppo debole per ballare: ho muscoli delle braccia e addominali atrofizzati, e questo genera tanti problemi di cui non riesco ad accorgermi.&lt;br /&gt;&lt;br /&gt;Ikeda ammonisce sulla oscurità della vita che in fondo è il non credere nelle proprie capacità, il 'non ce la farò mai', il 'non ci provo neanche', e il 'io ce l'ho messa tutta ma sono gli altri'.&lt;br /&gt;&lt;br /&gt;Vaccari puntualmente spinge affinchè le funzionalità siano sviluppate e mandate in produzione, senza seghe mentali inutili.&lt;br /&gt;&lt;br /&gt;Guardate ad esempio l'elenco di ciò che si è trattato nella odierna lezione di ballo :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;quando si va indietro le ginocchia piegano in avanti&lt;/li&gt;&lt;li&gt;l'effetto swing nel giro a destra&lt;/li&gt;&lt;li&gt;immaginare la pressione sulla schiena che spinge in diagonale dall'alto verso il basso mentre si va in avanti e dall'alto verso il basso sul petto mentre si va indietro&lt;/li&gt;&lt;li&gt;una sola anca è ammessa fuori partner in ogni momento&lt;/li&gt;&lt;li&gt;l'effetto di scatto nell'apertura del tango è data da un leggero slittamento del busto a destra prima dello 'strappo' a sinistra&lt;/li&gt;&lt;li&gt;la followy è in linea di ballo, girata di 180 tra la fine del primo passo e l'inizio del secondo&lt;/li&gt;&lt;li&gt;mettere una pressione mostruosa sull'alluce del piede sinistro, girato verso l'interno coscia, nei link del tango al fine di bloccare il movimento rotatorio&lt;/li&gt;&lt;li&gt;il conteggio del fleckerl nel valzer viennese è : 7 di giro destra, 8 di cambio, 1-2-3-4 di giri a sinitra verso il centro, 5, 1, 2 (incrocia indietro), 6, 1,2 (sempre avanti), 7,1,2 (incrociato dietro) 8 di check, indietro e riprendere con i giri&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Un elenco enorme, e se anche 1 solo punto fosse per sempre interiorizzato sarebbe un ENORME passo avanti!&lt;br /&gt;&lt;br /&gt;Lo studio, l'allenamento, la volontà e l'umiltà sono alla base di qualsiasi percorso. Ed &lt;span style="font-style: italic;"&gt;alla fine di ogni tappa bisogna sentirsi stanchi, a volte soddisfatti e a volte no, ed anche speranzosi.&lt;/span&gt;&lt;br /&gt;Cerco di farlo anche a lavoro. Per me la tappa è una commit nel repository, una consegna di un pezzo minimale di funzionalità, che tendo a fare ogni ora circa. C'è gente che non è focalizzata sul prossimo passo, rimette in discussione tutto e non combina niente. Ogni passo , come ogni istantanea di ballo, deve essere perfetta di per sè. La tecnica è alla base della bellezza.&lt;br /&gt;&lt;br /&gt;E in fondo tutto ciò che cerco è la &lt;span style="font-weight: bold;"&gt;bellezza&lt;/span&gt;. La bellezza di un ballo, che si perde se non c'è tecnica ma anche se non c'è eleganza. Ho visto coppie che ballano tecnicamente benino distruggere ogni immagine di sè per come trattano il partner o perchè ballano con la cicca in bocca. La bellezza della recitazione buddista, con il ritmo della voce, l'incenso, l'acqua, le candele, e quel senso estatito di contemplazione dell'universo attraverso un foglio di carta. E anche la bellezza del codice scritto, che sì deve essere pulito ma anche simmetrico come un tempio greco e si deve leggere come si legge una fiaba dei Grimm, sapendo che c'è un lieto fine :)&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Come fare a capire se si sta procedendo giustamente? &lt;/span&gt;&lt;br /&gt;Ogni tappa deve essere seguita da una sensazione positiva ma con una leggera insoddisfazione. Ogni ballo, anche il migliore, ha sempre almeno un passaggio che poteva essere svolto meglio. Ogni recitazione buddista deve avere un effetto benefico; che non vuol dire necessariamente essere felici; a volte vuol dire essere aspri, irati come un leone che sta per azzannare una preda, cioè la voglia di superare una paura.&lt;br /&gt;Ogni lavoro deve terminare con un po' di stanchezza, di soddisfazione per il codice scritto ma anche con una visione di qualcosa migliore.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;E se non si procede giustamente che si deve fare?&lt;/span&gt;&lt;br /&gt;Nel buddismo si dice che ogni pensiero, azione e parola genera una causa di un effetto che prima o poi si manifesterà. Questo è il karma. Attraverso la volontà di fare meglio, lo studio in 'ambiente protetto' (che è l'allenamento di ballo nella propria scuola ad esempio o la pratica dello studio nel lavoro o i meeting di gruppo nel buddismo), e lo sfidarsi nella realtà, vendendo cara la pelle :) Eppure tutto nasce dalla determinazione, cioè dal proprio io.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.teknonet.it/staff/daniele_leone.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 146px; height: 146px;" src="http://www.teknonet.it/staff/daniele_leone.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ed ecco giunti all'essenza: ogni problema è al 99.9 % legato alla volontà della persona. La paura nel ballo è molto chiara e non c'è bisogno di spiegarla. Forse è nel lavoro piu difficile vedere questo pattern. Ed ecco l'effetto 'gruppo di ascolto' che vedo così chiaro nella comunità agile, cioè la tendenza alla lamentela verso tutti: i clienti, i colleghi, la tecnologia, mai verso sè stessi.&lt;br /&gt;&lt;br /&gt;Tutto nasce da un attestato di incapacità e dalla voglia di migliorarsi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-2044020167991800933?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/2044020167991800933/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=2044020167991800933' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2044020167991800933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2044020167991800933'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/02/buddismo-ballo-lavoro.html' title='Buddismo, Ballo, Lavoro'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-6158002624887725992</id><published>2009-01-30T14:48:00.003+01:00</published><updated>2009-01-30T15:46:33.451+01:00</updated><title type='text'>[Agile day] Results day</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://site-images.ws/images/cust/294894/SUCCESSO.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 215px; height: 213px;" src="http://site-images.ws/images/cust/294894/SUCCESSO.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Negli ultimi 2 mesi sto lavorando in un team di agilisti, come Lorenzo Bolzani -neo-fondatore del gruppo Scala User Group di Milano-&lt;br /&gt;Daniele Della Fiore -esperto di usabilità e comunità 2.0- ed altri su un progetto il cui codice è scritto in modalità &lt;a href="http://domaindrivendesign.org/"&gt;Domain Driven Design&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cerchiamo di applicare i principi xp nel lavoro day-by-day, ovviamente incontrando difficoltà legate al planning, al codice, alla condivisione di informazioni.&lt;br /&gt;Proprio su quest'ultimo punto abbiamo avviato una ricca discussione circa la modalità di condivisione delle informazioni.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La pratica di scrittura del journal la sera prima di uscire era poco applicata; pochi scrivevano un summary della loro attività quotidiana e&lt;br /&gt;(ancora peggio) pochi le leggevano.&lt;br /&gt;Discutendo dei motivi è emersa l'esigenza di provare qualcosa di nuovo! Il wiki interno è come il codice, e per essere utile deve essere rifattorizzato,&lt;br /&gt;riveduto costantemente e aggiornato spesso.&lt;br /&gt;Abbiamo notato che le informazioni piu importanti sono le ultime in ordine temporale e spesso è utile scrivere tante piccole note durante la giornata,&lt;br /&gt;rispetto a un unico riassunto al termine, che spesso implica la perdita di tanti dettagli importanti.&lt;br /&gt;&lt;br /&gt;Il &lt;span style="font-weight: bold;"&gt;successo&lt;/span&gt; è stato l'attuazione di una proposta di uso di un &lt;a href="http://www.tumblr.com/"&gt;tumblr&lt;/a&gt; ; i post sono aumentati e globalmente c'è un flusso di informazioni di qualità.&lt;br /&gt;Ci sono anche critiche a questa nuova modalità: non tutte le informazioni devono stare lì, c'è il rischio di perderle.&lt;br /&gt;L'importante è provare e valutare dopo un po' come va!&lt;br /&gt;Il mercoledì pomeriggio siamo soliti fare formazione interna. L'andamento dello studio però non ci soddisfaceva; il primo passo è stato studiare&lt;br /&gt;argomenti piu legati al progetto, in modo da riusare nel breve la conoscenza acquisita. Ad esempio abbiamo approfondito &lt;a href="http://wicket.apache.org/"&gt;wicket&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Il secondo &lt;span style="font-weight: bold;"&gt;successo&lt;/span&gt; è stato provare uno studio a-la "etude" di Shore e Warden. Abbiamo quindi analizzato parti del nostro dominio, rivedendo il design&lt;br /&gt;costruito nel tempo. E' stato un evento importante, il cui effetto è stato l'aver acquisito maggiore conoscenza di logiche di dominio e l'aver rifattorizzato&lt;br /&gt;pesantemente la gestione del tempo e della formattazione del nostro progetto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-6158002624887725992?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/6158002624887725992/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=6158002624887725992' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6158002624887725992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6158002624887725992'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/01/agile-day-results-day.html' title='[Agile day] Results day'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-1311040758300386002</id><published>2009-01-16T18:18:00.004+01:00</published><updated>2009-01-16T18:22:01.188+01:00</updated><title type='text'>[Citazioni da me stesso] manager</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.easymock.org/img/easymock.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 301px; height: 57px;" src="http://www.easymock.org/img/easymock.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Io sono come Easy Mock, mando messaggi e verifico risultati&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-1311040758300386002?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/1311040758300386002/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=1311040758300386002' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/1311040758300386002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/1311040758300386002'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/01/citazioni-da-me-stesso-manager.html' title='[Citazioni da me stesso] manager'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-5536021796810874764</id><published>2009-01-09T15:42:00.001+01:00</published><updated>2009-01-09T15:44:19.926+01:00</updated><title type='text'>[Citazione da me stesso] definizione di test</title><content type='html'>I test sono un attestato di incapacità.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-5536021796810874764?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/5536021796810874764/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=5536021796810874764' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5536021796810874764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5536021796810874764'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2009/01/citazione-da-me-stesso-definizione-di.html' title='[Citazione da me stesso] definizione di test'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-2789279036212026541</id><published>2008-12-01T18:17:00.000+01:00</published><updated>2008-12-01T18:18:12.002+01:00</updated><title type='text'>[Citazioni da me stesso] revert</title><content type='html'>Non si reverta l'acqua col bambino&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-2789279036212026541?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/2789279036212026541/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=2789279036212026541' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2789279036212026541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2789279036212026541'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2008/12/citazioni-da-me-stesso-revert.html' title='[Citazioni da me stesso] revert'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-3797196846498064794</id><published>2008-11-03T15:34:00.002+01:00</published><updated>2008-11-03T15:54:16.615+01:00</updated><title type='text'>[Weblogic] how to redeploy from an ant file</title><content type='html'>&lt;ul&gt;&lt;li&gt;Includi weblogic.jar nel tuo progetto. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Personalizza il seguente target ant: &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;target name="Redeploy" depends="create.wars.or.ear.or.jars, send.to.server" description="Redeploys the application after sending an updated version of the application to the server"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;java classname="weblogic.Deployer"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &amp;lt;classpath refid="javac.class.path"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &amp;lt;arg line="-adminurl XX.XX.XX.XX:19000/console -user nomeUtente -password password -name nomeDelTuoServer -redeploy -targets nomeDelTuoCluster"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   &amp;lt;/arg&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       &amp;lt;/classpath&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;/java&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/target&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-3797196846498064794?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/3797196846498064794/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=3797196846498064794' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3797196846498064794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/3797196846498064794'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2008/11/weblogic-how-to-redeploy-from-ant-file.html' title='[Weblogic] how to redeploy from an ant file'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-7284654409188610047</id><published>2008-09-10T17:54:00.001+02:00</published><updated>2008-09-10T17:59:47.918+02:00</updated><title type='text'>[Agile] esperimento sulla precisione delle stime nei progetti agili</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bailhome.com/images/estimate.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 237px; height: 292px;" src="http://www.bailhome.com/images/estimate.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Fatto&lt;/span&gt;: All'inizio di ogni progetto il cliente chiede una data di consegna e i termini del contratto vengono decisi sopratutto sulla base delle stime fatte dagli sviluppatori.&lt;br /&gt;&lt;br /&gt;E' quindi importante stimare minimizzando gli errori. &lt;span style="font-style: italic;"&gt;Attualmente le tecniche di stima sono rozze e imprecise&lt;/span&gt;. Spesso si sottostima del 30% circa (dati calcolati su diversi team in diversi progetti).&lt;br /&gt;Nel libro 'Agile Estimating and Planning' di Mike Cohn ne vengono citate alcune: Expert Opinion, Estimating by Analogy, Disaggregation, Planning Poker. Inoltre i team agili usano due principali unità di misura: &lt;span style="font-weight: bold;"&gt;stima in tempo ideale&lt;/span&gt; (al netto di impegni lavorativi extra-progetto) e &lt;span style="font-weight: bold;"&gt;in punti complessità&lt;/span&gt;.&lt;br /&gt;Una mia ipotesi è che l'unità di misura usata influenza l'errore di stima con un fattore significativo. I punti complessità hanno molti vantaggi, ma dal punto di vista di minimizzare gli errori di stima in fase di analisi del progetto sono uno strumento assai impreciso.&lt;br /&gt;La teoria psicologica è che l'uomo riesce a stimare meglio considerando le relative complessità. L'esempio classico riguarda la stazaz di alcune razze di cani: è difficile indovinare il peso ma è facile dire che un san bernardo è 4 volte piu grande di un bulldog.&lt;br /&gt;Pur approvando intuitivamente tale ipotesi, penso che debba sempre essere verificata nel contesto applicato. Ad esempio quando faccio la spesa alla cassa 'indovino' la somma da pagare con un piccolissimo errore di stima, minore del 10% il piu delle volte. E nel mio processo non dico '1 kg di arancie costa 1.5 volte due etti di prosciutto crudo'. O ad esempio se devo indovinare il peso di una persona non penso a quanto è piu grossa o piu piccola rispetto a me.&lt;br /&gt;&lt;br /&gt;Ma alla fin della fiera penso che qualsiasi strumento si usi per stimare &lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;si debba uscire dalla mentalità 'artistica' per dare un carattere scientifico. Propongo il seguente esperimento&lt;/span&gt;:&lt;/span&gt; avendo dei dati oggettivi, due gruppi separati usano l'unità di misura assoluta ideale oppure i punti complessità. Si valutano alla fine gli errori. Alcune persone si sentono a loro agio usando una unità di misura o l'altra, probabilmente è meglio che i gruppi si formino volontariamente.&lt;br /&gt;&lt;br /&gt;Con questo esperimento oggettivo, dove i dati sono verificabili, penso si possano raggiungere conclusioni interessanti. Ad esempio potrei valutare la tecnica che un tempo ho usato, con particolare profitto, che prevede una suddivisione orizzontale, per layer tecnologici. Ogni user story attraversa diversi livelli tecnologici. Ad esempio:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;codifica del dominio applicativo in sorgenti java/ruby ...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;file di properties&lt;br /&gt;&lt;/li&gt;&lt;li&gt;database&lt;/li&gt;&lt;li&gt;chiamate a sistemi esterni&lt;/li&gt;&lt;li&gt;test di accettazione&lt;/li&gt;&lt;li&gt;deploy&lt;/li&gt;&lt;li&gt;aggiornare il processo di build etc.&lt;/li&gt;&lt;/ul&gt;La stima è una combinazione della complessità e del numero di layer tecnologici per la competenza dello sviluppatore in ognuno di questi.&lt;br /&gt;Ad esempio la prima carta avrà a che fare tipicamente con il setup dell'ambiente, con la creazione di script di build, un minimo di logica di dominio e un deploy sull'application server. Supponiamo di usare maven per la build, java per il dominio e jboss come application server. Poichè nulla è stato già implementato il costo sarà oggettivamente alto e fortemente dipendente dalla competenza in tutti e tre i layer.&lt;br /&gt;Una analoga carta fatta dopo la prima release partirà da una situazione stabile, ed è probabile che lo sviluppatore abbia approfondito la conoscenza in almeno uno dei layer. Tenendo traccia dei layer attraversati e della tabella di competenza dello sviluppatore penso che si possa raggiungere una precisione di stima davvero ragguardevole.&lt;br /&gt;&lt;br /&gt;Ovviamente senza un esperimento sono solamente fantasie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-7284654409188610047?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/7284654409188610047/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=7284654409188610047' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7284654409188610047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7284654409188610047'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2008/09/agile-esperimento-sulla-precisione.html' title='[Agile] esperimento sulla precisione delle stime nei progetti agili'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-4559715427094899667</id><published>2008-07-24T18:10:00.001+02:00</published><updated>2008-08-01T09:55:57.550+02:00</updated><title type='text'>[Shell] il primo script dalla command line di windows</title><content type='html'>Il bisogno era di andare dentro ogni progetto in una certa directory ed eseguire un comando&lt;br /&gt;&lt;br /&gt;for /D %G IN (tua_directory*) do cd %G &amp;amp; mio_comando&lt;br /&gt;&lt;br /&gt;Ad esempio:&lt;br /&gt;for /D %G IN (kernel*) do cd %G &amp;amp; svn st &amp;amp; cd ..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-4559715427094899667?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/4559715427094899667/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=4559715427094899667' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4559715427094899667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4559715427094899667'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2008/07/shell-il-primo-script-dalla-command.html' title='[Shell] il primo script dalla command line di windows'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-4542070721405217004</id><published>2008-07-11T16:56:00.000+02:00</published><updated>2008-07-11T17:01:45.613+02:00</updated><title type='text'>[Shell] find a file inside your yars</title><content type='html'>Il prossimo tema d'esame di tutti gli studenti di Matteo Vaccari :)&lt;br /&gt;&lt;br /&gt;for file in $(find . -iname \*.jar); do&lt;br /&gt;        if jar tf $file | grep "$1"; then&lt;br /&gt;                echo "Trovato! era in $file"&lt;br /&gt;        fi&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;Si legge da solo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-4542070721405217004?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/4542070721405217004/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=4542070721405217004' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4542070721405217004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/4542070721405217004'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2008/07/shell-find-file-inside-your-yars.html' title='[Shell] find a file inside your yars'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-8854206713860816564</id><published>2008-07-11T01:07:00.001+02:00</published><updated>2008-07-11T01:15:42.940+02:00</updated><title type='text'>[Agile] Ecco a voi la migliore metrica sulla PRODUTTIVITA</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.marxist.com/images/stories/capitalist-greed.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.marxist.com/images/stories/capitalist-greed.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sto cercando di riportare tutto al segno '-'.&lt;br /&gt;La differenza, il concetto di &lt;span style="font-weight: bold;"&gt;togliere&lt;/span&gt;. L'agilità porta con se un insieme di buone pratiche ma la vera novità è l'insieme di principi: ce lo siamo detti così tante volte.&lt;br /&gt;Aggiungiamo allora nel nostro elenco il principio di secchezza.&lt;br /&gt;Perchè bisogna togliere tutto il codice commentato, tutto il tempo usato per scrivere javadoc, per scrivere test il cui fine è quello di superare delle metriche. Ci siamo abituati ad avere tutto, togliamo ai nostri sviluppatori la gui, diamogli il mouse per 10 minuti al giorno, giusto per staccare la testa. Togliamo loro potenza di macchine, non regaliamogli ram, nè cpu. Scriveranno software leggero o periranno. Impareranno ad avere confidenza sul codice senza lanciare un application server in locale. Bisogna togliere il journal se non è utile come lo si scrive, togliere il pair se uno dei due dorme, togliere i test di accettazione se il cliente non li scrive o non contribuisce a scriverli.&lt;br /&gt;&lt;br /&gt;Manager di tutto il mondo alla ricerca della metrica perfetta sulla produttività, qui c'è la vostra risposta: &lt;span style="color: rgb(255, 0, 0);"&gt;obbligate i vostri sviluppatori assetati di risorse a scrivere file non piu grandi di 5K, vedrete magie&lt;/span&gt;. E non parlo solo di codice, ma anche di configurazione.&lt;br /&gt;&lt;br /&gt;E' solo in ristrettezze di risorse che si aguzza l'ingegno.&lt;br /&gt;&lt;br /&gt;Togliamo il tempo agli sviluppatori e chiediamo loro risultati se si distraggono con mail, giochi, messenger.&lt;br /&gt;Dobbiamo sentire la rabbia quando duplichiamo: cancelliamo dal nostro vocabolario frasi come: "basta copiare questa cosa" e trasformiamole in: "CHE PALLE, devo anche copiare questa cosa". Basta "spero di farcela entro oggi"! Basta interi, dobbiamo dare risposte booleane: sì. no.&lt;br /&gt;Quando il manager ci chiede se possiamo aggiungere user stories all'iterazione, quando dobbiamo decidere se prenderci il rischio di un nuovo progetto, quando dobbiamo scegliere se assumere o no una persona: SI o NO. Non c'è forse, non c'è magari.&lt;br /&gt;&lt;br /&gt;Togliamo framework che fanno cose 'GRATIS', anzi, togliamo la parola 'gratis'. Togliamo la sacra famiglia del fallimento hibernate, struts, spring.&lt;br /&gt;&lt;br /&gt;Sempre di piu aggiungiamo tecnologia per risolvere problemi, e ci inventiamo soluzioni barocche con generics, con annotations, con aspect oriented programming, con librerie di test con interfaccie fluenti. Siamo così alti sui trampolini della tecnologia che qualche settimana fa miei nuovi colleghi hanno dovuto fare uno spike su come si esegue una connessione jdbc pura in java per fare delle semplici query.&lt;br /&gt;Non ci serve nulla di piu di una manciata di concetti sul paradigma object oriented. Altro che easy mock per esplorare come gli oggetti possono parlarsi: carta e penna! Anzi, togliamo anche carta e penna, lasciamo solo il cervello.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-8854206713860816564?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/8854206713860816564/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=8854206713860816564' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8854206713860816564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/8854206713860816564'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2008/07/agile-ecco-voi-la-migliore-metrica.html' title='[Agile] Ecco a voi la migliore metrica sulla PRODUTTIVITA'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-5220873376755905322</id><published>2008-06-20T09:29:00.001+02:00</published><updated>2008-06-20T09:29:48.692+02:00</updated><title type='text'>[Mac] switch java virtual machine script</title><content type='html'>torti:~ tot$ cat switchjvm.sh&lt;br /&gt;ROOT=/System/Library/Frameworks/JavaVM.framework/Versions&lt;br /&gt;SOFTLINK=$ROOT/CurrentJDK&lt;br /&gt;TARGETA=$ROOT/1.5&lt;br /&gt;TARGETB=$ROOT/1.4&lt;br /&gt;TARGETC=$ROOT/1.6&lt;br /&gt;if [ `readlink "$SOFTLINK"` == $TARGETA ] ;then&lt;br /&gt;rm $SOFTLINK &amp;amp;&amp;amp; ln -vsf $TARGETB $SOFTLINK&lt;br /&gt;elif [ `readlink "$SOFTLINK"` == $TARGETB ] ;then&lt;br /&gt;rm $SOFTLINK &amp;amp;&amp;amp; ln -vsf $TARGETC $SOFTLINK&lt;br /&gt;else&lt;br /&gt;rm $SOFTLINK &amp;amp;&amp;amp; ln -vsf $TARGETA $SOFTLINK&lt;br /&gt;fi&lt;br /&gt;java -version&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-5220873376755905322?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/5220873376755905322/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=5220873376755905322' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5220873376755905322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/5220873376755905322'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2008/06/mac-switch-java-virtual-machine-script.html' title='[Mac] switch java virtual machine script'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-2847795833534088178</id><published>2007-06-25T21:01:00.001+02:00</published><updated>2008-07-11T01:06:15.611+02:00</updated><title type='text'>[Libri] citazione - arte e vita</title><content type='html'>La gente dice che bisogna separare la propria vita reale dalla propria arte, che bisogna proteggere la propria vita reale dalla propria vita letteraria. In questo modo si soffre di meno e si vede il mondo con più sobrietà. Ma io penso che sia un atteggiamento molto egoista. Mi piace quello che Flaubert diceva dei Greci.Se sei un vero artista, tutto quello che c'è nella tua vita fa parte della tua arte. L'arte è un monumento della vita. L'arte è il percorso astratto dell'esistenza quotidiana&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;-----&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;da 'Piccolo Dizionario cinese inglese per innamorati'&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-2847795833534088178?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/2847795833534088178/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=2847795833534088178' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2847795833534088178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2847795833534088178'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/06/libri-citazione-arte-e-vita.html' title='[Libri] citazione - arte e vita'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-2504419725083603927</id><published>2007-06-14T11:16:00.000+02:00</published><updated>2007-06-14T11:17:16.524+02:00</updated><title type='text'>[Libri] Recensione libro Release It! parte 5</title><content type='html'>Ho saltato alcuni paragrafi: load balancing e clustering .&lt;br /&gt;Altri consigli sparsi relativi alla sicurezza e al networking (uso&lt;br /&gt;di ip virtuale, eseguire l'applicazione non come utente root..)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Configurazioni&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mettere al sicuro le password definite nei file di&lt;br /&gt;configurazione. Mantenere i parametri di configurazione per l'ambiente di produzione in file a parte,&lt;br /&gt;preferibilmente non nella directory dove è installata l'applicazione. Questo perchè probabilmente&lt;br /&gt;quella directory viene sovrascritta ad ogni deploy, quindi è da evitare un nuovo editing di quei file&lt;br /&gt;ad ogni deploy. Analogamente le property comuni a tutte le installazioni dovrebbero finire nello stesso file.&lt;br /&gt;Usare nomi chiari anche per i parametri, ad esempio evitando hostname=XXX che è come scrivere integer=YYY&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Start up e shutdown&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mi viene in mente la fase di startup di un sistema linux che mostra un elenco di risorse inizializzate.&lt;br /&gt;L'idea è la stessa, è buona cosa avere un feedback sulla fase di inizializzazione delle risorse.&lt;br /&gt;Inoltre nella fase di shutdown, così come in un negozio si aspetta che i clienti presenti escano&lt;br /&gt;e non se ne fanno entrare di nuovi, l'applicazione dovrebbe smettere di accettare richieste e&lt;br /&gt;terminare quelle running, ovviamente prevedendo un timeout per evitare shutdown infiniti.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Administrative Interface&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Evitare gui, sopratutto in ambienti dove c'è una architettura applicativa orizzontale con più server.&lt;br /&gt;Meglio interfaccie a linea di comando così che si possa usare in uno script.&lt;br /&gt;&lt;br /&gt;Un altro succo del discorso:&lt;br /&gt;"&lt;span style="color: rgb(255, 0, 0);"&gt;you can choose not to deal with these&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;issues during development. If so, you will deal with them in production...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;time and time again. Dealing with these issues in development&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;does not necessarily cost much, in time or effort, and what it does cost&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;is far outweighed by the long-term cost of ignoring them&lt;/span&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-2504419725083603927?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/2504419725083603927/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=2504419725083603927' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2504419725083603927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2504419725083603927'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/06/libri-recensione-libro-release-it-parte_14.html' title='[Libri] Recensione libro Release It! parte 5'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-989892588967753770</id><published>2007-06-12T09:58:00.000+02:00</published><updated>2007-06-12T10:04:15.440+02:00</updated><title type='text'>[Libri] Recensione libro Release It! parte 4</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.forklift-attachments.co.uk/images/residual_capacity.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.forklift-attachments.co.uk/images/residual_capacity.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;Capacity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Spassoso racconto introduttivo di una esperienza. Secondo me l'autore ha usato ATG, prodotto commerciale&lt;br /&gt;per siti di commercio elettronico che ho usato anche io in un mio progetto. Nell'introduzione ho scoperto anche&lt;br /&gt;la CONWAY'S LAW ovvero la legge secondo cui il software rappresenta il modello comunicativo che intercorre&lt;br /&gt;tra i suoi sviluppatori. Giunge quindi alle&lt;br /&gt;&lt;br /&gt;Due definizioni:&lt;br /&gt;* &lt;span style="font-style: italic;"&gt;"Capacity is fundamentally a measure of how much revenue the system&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;can generate during a given period of time."&lt;/span&gt;&lt;br /&gt;*il massimo throughput che un sistema può sostenere per un certo carico mantenendo un tempo di risposta accettabile&lt;br /&gt;per ogni transazione.&lt;br /&gt;Si distingue dalla performance -la velocità di processamento di una singola transazione, misurata in isolamento&lt;br /&gt;o sotto carico- e dalla scalabilità  - il cambiamento di throughtput a seconda del carico -.&lt;br /&gt;Il più delle volte è possibile aumentare la capacità tramite opportune modifiche al design del software piuttosto&lt;br /&gt;che aumentando l'hardware.&lt;br /&gt;Come ?&lt;br /&gt;&lt;br /&gt;Identificando il collo di bottiglia, il VINCOLO che limita la capacità di tutto il sistema.&lt;br /&gt;Ci sono in gioco le 'driving variables' cioè agenti fuori dal nostro controllo, come il tempo, le richieste degli utenti etc&lt;br /&gt;che influenzano le 'following variables'. Queste possono essere misurate: uso della cpu, della memoria, della banda etc.&lt;br /&gt;Il 'constraint' è il limite rappresentato da una della 'following variables'.&lt;br /&gt;&lt;br /&gt;Segue un elenco di &lt;span style="font-weight: bold;"&gt;antipattern&lt;/span&gt;, introdotti con una breve descrizione, tutto buoni consigli che se non conosciuti&lt;br /&gt;non fanno suonare alcun campanello di allarme durante lo sviluppo.&lt;br /&gt;Brevemente:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;il male necessario: i &lt;span style="font-weight: bold;"&gt;db connection pool&lt;/span&gt;. L'ideale è avere un numero di thread pari al numero di risorse. Spesso infatti i thread vengono bloccati all'infinito in attesa della risorsa libera, in tal caso è da considerare il caso di un timeout. I Resource pool servono per eliminare il tempo di setup delle connessioni. Devono essere dimensionati.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; in caso di &lt;span style="font-weight: bold;"&gt;jsp&lt;/span&gt; , esse vengono compilate e vanno nella parte di memoria chiamata JVM permanent generation. Se però si disabilita il garbage collector per le classi ( - noclassgc) tale area di memoria può venire saturata.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;ajax&lt;/span&gt;: la risposta del servizio richiesto deve essere la più snella possibile; quindi meglio json di xml, evitare html and so on. Quando si usa ajax è facile che aumenti il numero di connessioni, in tal caso configurare il web server opportunamente ( parametri maxclient etc...)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;sql&lt;/span&gt;: evitare di scrivere query complesse a mano in un sistema che ha un orm ; non tanto perchè l'sql generato da un orm è perfetto ma per lo meno ha sempre la stessa struttura. Evitare join su colonne senza index e evitare di trovare con una query un singolo oggetto e ripetere la query ma usare l'sql per tornare collezioni! Carinissimo il test del DBA: se si mette a ridere guardando le nostre query non si va in produzione.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;db&lt;/span&gt;: valutare gli index, quando sono da mettere e se sono obsoleti, la partizione di tabelle&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;rmi&lt;/span&gt;: si afferma che è falsa l'idea secondo la quale c'è trasparenza tra chiamate locali e remote. Quando si effettuano chiamate remote meglio evitare di fare molte chiamate all'interno di una singola interazione.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;cookie&lt;/span&gt;: usarli solo per storare l'informazione circa l'identificazione dell'utente.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;...dopo l'elenco di &lt;span&gt;antipattern &lt;/span&gt;quello dei &lt;span style="font-weight: bold;"&gt;pattern&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Pool connection&lt;/span&gt;: da usare perchè elimina il tempo di set up di una connessione.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Uso accurato della &lt;span style="font-weight: bold;"&gt;cache&lt;/span&gt;: &lt;/li&gt;&lt;/ul&gt;- devono avere una dimensione massima di memoria allocabile altrimenti crescendo troppo fanno sì che il&lt;br /&gt;garbage collector sia sempre impegnato nella ricerca di memoria libera&lt;br /&gt;- misurare l'hit rate perchè se è molto basso non ha senso usare una cache&lt;br /&gt;- evitare di mettere in cache oggetti la cui generazione è molto rapida&lt;br /&gt;- usare le SoftReference per mantenere un riferimento agli oggetti per aiutare il garbage collector&lt;br /&gt;- ogni cache deve avere un meccanismo di rimozione oggetti quando i dati sorgente cambiano: ogni cache&lt;br /&gt;deve essere svuotata prima o poi&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;span style="font-weight: bold;"&gt;Precompute Content&lt;/span&gt;. Esempio delle categorie merceologiche di un sito di commercio elettronico, il cui elenco cambia di rado e che quindi non avrebbero bisogno di essere generate dinamicamente ad ogni page request. Meglio crere un meccanismo di generazione di frammenti html da includere, così come fa Slashdot. Se esistono politiche di personalizzazione dei contenuti per utente non ha senso.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;monitorare il &lt;span style="font-weight: bold;"&gt;garbage collector&lt;/span&gt; ( passando come argomento -verbosegc in java)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-989892588967753770?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/989892588967753770/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=989892588967753770' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/989892588967753770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/989892588967753770'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/06/libri-recensione-libro-release-it-parte_12.html' title='[Libri] Recensione libro Release It! parte 4'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-2597722733682784633</id><published>2007-06-07T16:06:00.001+02:00</published><updated>2008-07-10T18:43:01.047+02:00</updated><title type='text'>[Unix] comandi utili per generazione di metriche</title><content type='html'>Come esercizio ho provato a riscrivere uno script ruby usato per la generazione di metriche sul codice in script per la bash shell.&lt;br /&gt;&lt;br /&gt;Lo script prevedeva i seguenti macro passi:&lt;br /&gt;&lt;br /&gt;1) estrazioni di progetti da cvs&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cvs -d :pserver:anonymous:@blablabla checkout progetto&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;2) recuperare tutte le classi del codice applicativo, ecludendo quindi i test&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;find . -name "*.java" | grep -v "/test/"  &gt;  filelist.txt&lt;/span&gt;&lt;br /&gt;Nota l'uso di grep &lt;span style="font-weight: bold;"&gt;-v&lt;/span&gt; per ESCLUDERE dall'output tutti i file che stanno sotto una qualsiasi dir con nome 'test'&lt;br /&gt;&lt;br /&gt;3) su queste richiamare script di generazione metriche, quale, ad esempio, http://www.kclee.de/clemens/java/javancss/ :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;java -cp ~/javancss/ccl.jar:~/javancss/javancss.jar:~/javancss/jhbasic.jar -jar ~/javancss/javancss.jar&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;-all `cat filelist.txt` | grep "Average Function CCN:" | awk -F":" '{print $2}' | tr -d ' '  &gt;  ccn.txt&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Nota l'uso di awk per considerare solo il numerello al netto degli spazi (pipe con tr)&lt;br /&gt;&lt;br /&gt;4) altri script possono generare dell'xml , quindi per recuperare i dati, si può fare:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;cat risultatoMetriche.xml | grep ' \ &lt;&gt; '  &gt;  metricasottoesame.txt&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) Su questi risultati, definiti per ogni classe, eseguire operazioni come ad esempio delle medie:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;expr `awk 'BEGIN {sum=0} ; {sum = sum + $1} ; END {print sum }' metricasottoesame.txt` / `wc -l metricasottoesame.txt | awk '{print $1}'`&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-2597722733682784633?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/2597722733682784633/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=2597722733682784633' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2597722733682784633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/2597722733682784633'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/06/unix-comandi-utili-per-generazione-di.html' title='[Unix] comandi utili per generazione di metriche'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-6478559238320788729</id><published>2007-06-06T11:06:00.000+02:00</published><updated>2007-06-06T11:10:09.523+02:00</updated><title type='text'>[Libri] Recensione libro Release It! parte 3</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.logolalia.com/minimalistconcretepoetry/archives/clemente-padin-Stability.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.logolalia.com/minimalistconcretepoetry/archives/clemente-padin-Stability.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Stability Pattern&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Scopo di questi pattern non è prevenire che succedano eventi negativi, ma minimizzarne gli effetti.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use Timeout&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;L'uso di un timeout definisce un isolamento da una situazione erronea: non si permette ad un problema presente in un sottosistema&lt;br /&gt;di propagarsi nel proprio. Si applica sempre negli integration point.&lt;br /&gt;Il classico esempio riguarda il recupero di una connessione db da un pool, l'esecuzione di una query, trasformare&lt;br /&gt;il resultSet in oggetti e restituire la connessione. In tale ciclo ci possono essere diversi punti in cui si attende una risorsa.&lt;br /&gt;In tal caso può essere sensato inserire timeout in un oggetto che si occupa di far tutto questo , un QueryObject.&lt;br /&gt;Il rovescio della medaglia dell'uso di timeout è il rapido retry. Quindi meglio tornare un risultato (positivo, negativo o&lt;br /&gt;informare che la richiesta verrà esaudita) piuttosto che fornire una risposta lenta.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Circuit Breaker&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il pattern che mi ha colpito di più!  Si tratta di un componente che controlla la disponibilità di una risorsa e può&lt;br /&gt;assumere in ogni istante un solo stato tra:&lt;br /&gt;* CHIUSO - permette l'esecuzione di operazioni come sempre. Se l'esecuzione fallisce il circuit breaker lo rimembra. Dopo&lt;br /&gt;un certo numero di fallimenti, superata una soglia entra in stato&lt;br /&gt;* APERTO - tutte le chiamate falliscono immediatamente: non c'è quindi alcun tentativo di esecuzione reale. E' meglio&lt;br /&gt;distinguere il fallimento dovuto allo stato aperto del circuito dal fallimento dell'esecuzione avvenuto quando il circuito&lt;br /&gt;è chiuso. Dopo un certo lasso di tempo in cui ci si augura che la risorsa sia di nuovo up&amp;running entra in stato&lt;br /&gt;* SEMI APERTO - in cui esegue la prima operazione. Se ha successo, ridiventa chiuso, altrimenti ritorna ad essere aperto.&lt;br /&gt;Il circuit breaker può mantenere informazioni circa diversi tipi di fallimento. I cambiamenti di stato dovrebbero essere&lt;br /&gt;sempre loggati e lo stato corrente dovrebbe sempre essere visibile, riportato, misurato.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bulkheads&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Metafora dei compartimenti stagni di una nave. Se un servizio ha due clienti e uno dei clienti è in una situazione&lt;br /&gt;dannosa (si pensi ad un carico eccezionale di richieste) tutto il resto del sistema ne soffre. Ad esempio conviene&lt;br /&gt;sempre mantenere un pool di riserva per le richieste che provengono dall'amministratore del sistema.&lt;br /&gt;Qui il discorso si fa più fumoso. Il concetto rimane chiaro, ma non si intuisce bene come applicarlo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Steady State&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Minimizzare il numero di interventi sulla macchina di produzione: ognuno di essi è rischioso, dannoso.&lt;br /&gt;Così si è pensato quali sono i casi in cui si accede. Uno di questi è la necessità di fare pulizia di dati, quali i log o&lt;br /&gt;vecchi dati nel db. Quando infatti tali dati crescono sempre a dismisura, se non ci sono agenti di pulizia, prima o poi&lt;br /&gt;si generano problemi. Tale pulizia deve essere implmementata nella logica applicativa, altrimenti può essere effettuata&lt;br /&gt;da chi non sa che reazioni possono accadere (script creati da dba)&lt;br /&gt;Tipicamente si esegue la prima release consci del problema delegandolo al futuro, senza poi&lt;br /&gt;affrontarlo. Nel caso di log, prevedere rotazioni temporali e mantenerli in una macchina diversa da quella di produzione.&lt;br /&gt;Un altro caso è l'uso di cache, dove il numero di chiavi può essere infinito, e quindi è opportuno definire un limite.&lt;br /&gt;Serve inoltre una qualsiasi politica di invalidazione ad esempio time based o LRU etc..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Fail Fast&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se il sistema può determinare rapidamente se fallirà l'esecuzione di una operazione è opportuno fallisca&lt;br /&gt;rapidamente. Un esempio di violazione si ha quando un load balancer accetta una richiesta ma sa che al momento&lt;br /&gt;nessun server è attivo eppure la tiene in coda per un po' di tempo. La metafora è quella di un libro di cucina,&lt;br /&gt;dove la precondizione per la preparazione di una ricetta è che ci siano tutti gli ingredienti richiesti.&lt;br /&gt;Un esempio è quando si esegue la validazione dei campi di input dopo aver allocato una connessione: non&lt;br /&gt;si dovrebbe far lavoro inutilmente. Quando si fallisce subito è opportuno notificare al client che è avvenuta&lt;br /&gt;una system failure, ad esempio una risorsa non disponibile, distinguendola da una generica application failure.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Handshaking&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si tratta di implementare una comunicazione tra client e server. In alcuni protocolli di tipo application-level&lt;br /&gt;come l'http non supportano l'handshaking. Può essere utile implementarne una versione custom quando&lt;br /&gt;il costo legato alla necessità di eseguire una chiamata in più (quella per sapere lo stato) è minore di quello relativo&lt;br /&gt;all'effettuare una chiamata che non avrà successo.&lt;br /&gt;Ad esempio, via http, fornendo una pagina che pubblica lo stato del server. Se il cliente tramite questa comunicazione verifica&lt;br /&gt;che il server non può rispondere evita di fare altre richieste (health-check).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Test Harness&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(definizione: In software testing, a test harness or automated test framework is a collection of software and test data&lt;br /&gt;configured to test a program unit by running it under varying conditions and monitor its behavior and outputs.)&lt;br /&gt;I test di integrazione verificano il corretto funzionamento del sistema quando tutte le sue dipendenze funzionano correttamente.&lt;br /&gt;Inoltre essi testano casi d'errore coperti da specifiche.&lt;br /&gt;Si possono invece eseguire test di sistema che non verificano le specifiche, ad esempio impostando delle porte in modo&lt;br /&gt;che rispondano con diversi comportamenti:&lt;br /&gt;* una porta che accetta connessioni ma non risponde mai&lt;br /&gt;* una che accetta connessinoi e risponde valori a caso&lt;br /&gt;* accetta una connessione poi la chiude&lt;br /&gt;* risponde molto lentamente&lt;br /&gt;* risponde molto velocemente&lt;br /&gt;Differisce dal mock object in questo senso: i mock object simulano un comportamento che aderisce alle interfacce definite.&lt;br /&gt;Un test harnesses è eseguito su un diverso server e non si conforma alle interfacce; può provocare errori network, di protocollo&lt;br /&gt;o anche a application-level.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-6478559238320788729?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/6478559238320788729/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=6478559238320788729' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6478559238320788729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6478559238320788729'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/06/libri-recensione-libro-release-it-parte.html' title='[Libri] Recensione libro Release It! parte 3'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-6592825426651389647</id><published>2007-05-29T17:19:00.000+02:00</published><updated>2007-05-29T17:23:31.032+02:00</updated><title type='text'>[Libri] Recensione libro Release It! parte 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.webparade.co.uk/wp-content/uploads/2006/09/conigli.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.webparade.co.uk/wp-content/uploads/2006/09/conigli.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Thread bloccati&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Situazioni del genere, che accadono quando vari thread cercano di accedere concorrentemente ad una risorsa esterna,&lt;br /&gt;spesso sono difficili sia da testare che da valutare in fase di sviluppo. La soluzione è adottare un buon stile di&lt;br /&gt;programmazione, ad esempio usando librerie solide (in java 5 ad esempio la java.util.concurrent).&lt;br /&gt;Ci sono molte librerie disponibili; il consiglio è di dubitarne, scrivendo test il cui scopo è proprio quello&lt;br /&gt;di romperle.&lt;br /&gt;Un decisivo smell nel design è rappresentato da metodi sincronizzate negli oggetti di dominio.&lt;br /&gt;In tal caso è opportuno rivedere il design. Il primo effetto negativo è dato dal fatto che se l'applicazione&lt;br /&gt;gira su più server è inutile l'integrità dei dati su una sola istanza se l'altra può comunque modificare i dati.&lt;br /&gt;L'altro effetto è del tutto legato alle performance e alla possibilità di essere scalabili: thread che richiedono&lt;br /&gt;oggetti di dominio non dovrebbero mai bloccarsi vicendevolmente.&lt;br /&gt;Di nuovo viene citata l'esigenza di avere dei timeout (quindi basta chiamate java del tipo wait() ).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Davvero illuminante l'esempio di violazione di LSP nel caso in cui in java un metodo di una sottoclasse&lt;br /&gt;è definito sincronizzato mentre lo stesso metodo della superclasse o dell'interfaccia non lo è.&lt;br /&gt;E' una violazione perchè ogni proprietà valida per un oggetto di classe T deve essere valida (no side effect)&lt;br /&gt;su tutte le sottoclassi di T.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Self Denial Attack&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tipicamente quando il reparto marketing organizza una offerta speciale mandando mail con un link&lt;br /&gt;che punta alla pagina dell'offerta. Evitare in quei casi hard link ma far approdare a pagine intermedie.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Point-to-point communication&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La comunicazione di questo tipo funziona solo se si hanno uno o due application server che comunicano tra loro.&lt;br /&gt;Se tutte le istanze devono comunicare una con l'altra il numero totale di connessioni cresce come&lt;br /&gt;il quadrato del numero di istanze. In tal caso è opportuno usare altre forme di comunicazione.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Slow Response&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;E' da valutare quando notificare all'utente di 'riprovare più tardi' ; questo perchè per i siti&lt;br /&gt;la slow response si autoalimenta. Può essere causa di mancanza di memoria ma se si verifica la alimenta anche.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sla inversion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;SLA = Service-level agreement&lt;/span&gt; , contratti in cui si definiscono misurazioni relative ai servizi software&lt;br /&gt;consegnati da garantire. In caso di fallimento sono previste penalità.  Ad esempio la quantità di tempo&lt;br /&gt;in cui un sito può non essere up&amp;running oppure i tempi di risposta etc..&lt;br /&gt;Un servizio può essere di per sè adatto a rispettare lo SLA definito ma deve considerare la SLA dei&lt;br /&gt;servizi presso cui si interfaccia.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Unbounded Result Set&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bisogna pensare che ogni query può potenzialmente catturare milioni di record. Può essere controintuitivo questa&lt;br /&gt;affermazione in certe circostanze, eppure talvolta la popolazione dei record può essere effettuata&lt;br /&gt;da terze parti il cui comportamento può generare tali situazioni.E' quindi opportuno&lt;br /&gt;che il client definisca quanti risultati può accettare.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-6592825426651389647?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/6592825426651389647/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=6592825426651389647' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6592825426651389647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/6592825426651389647'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/05/libri-recensione-libro-release-it-parte_29.html' title='[Libri] Recensione libro Release It! parte 2'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-242623060436329080</id><published>2007-05-24T17:51:00.000+02:00</published><updated>2007-05-24T17:57:44.390+02:00</updated><title type='text'>[Libri] Recensione libro Release It! parte 1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.pragmaticprogrammer.com/images/mnee_medium.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.pragmaticprogrammer.com/images/mnee_medium.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La lettura è spassosa, leggera (c'è anche un accenno a Dungeons&amp;Dragons!)&lt;br /&gt;Affronta un tema che finora ho sempre sentito sottovalutato&lt;br /&gt;dal team in cui lavoro, ovvero i problemi di deploy / integrazione tra sistemi.&lt;br /&gt;Spesso infatti noto una grande attenzione alle problematiche di design, di test, di refactoring, di processo,&lt;br /&gt;di stima etc... ma su questo punto si sorvola.&lt;br /&gt;Ogni aspetto legato al deploy, quello architetturale, di security, di logging, di recovery plan etc.&lt;br /&gt;non verrà mai richiesto esplicitamente da un cliente. Un esempio classico è un sistema con un front end&lt;br /&gt;web-based di cui non si sa nulla circa il numero di connessioni che può gestire senza subire effetti collaterali.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parte 1: Stabilità&lt;/span&gt;&lt;br /&gt;Un carinissimo esempio catastrofico, causato da una eccezione Java non catturata.&lt;br /&gt;La morale è che i bachi esistono (pure laddove si usa tdd :)) e sono imprevedibili :&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;Bugs will happen&lt;/span&gt;. They cannot be eliminated, so they must be survived instead."&lt;br /&gt;I loro effetti possono essere ridimensionati con opportune tecniche&lt;br /&gt;o l'adozione di certi pattern: "&lt;span style="font-style: italic;"&gt;A better question to ask is, "How do we&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;prevent bugs in one system from affecting everything else?" [...]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;They cannot—must not—allow bugs to cause a chain of failures&lt;/span&gt;."&lt;br /&gt;&lt;br /&gt;Una classica obiezione circa l'implementare pattern di stabilità è l'eventuale costo. Il ragionamento&lt;br /&gt;usato per rispondere è ben formulato e conclude con una frase molto condivisibile:&lt;br /&gt;"Good stability does not necessarily cost a lot. [...]&lt;br /&gt;The amazing thing is that the highly stable design usually costs the&lt;br /&gt;same to implement as the unstable one."&lt;br /&gt;Segue della nomenclatura, forse la parte più interessante è la distinzione tra impulso - un evento intenso&lt;br /&gt;e puntuale - e stress - una forza appliccata al sistema che dura nel tempo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Problemi quando ci sono delle &lt;span style="font-weight: bold;"&gt;socket&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Dopo una rapida spiegazione del three way handshake si arriva al punto : problemi di grande latenza&lt;br /&gt;nella lettura/ scrittura di dati. Il messaggio è di impostare sempre un timeout differente da quello&lt;br /&gt;di default impostato dal sistema operativo che di solito è dell'ordine di minuti (per quanto riguarda la&lt;br /&gt;scrittura, per la lettura può essere indefinito). Attenzione alla &lt;span style="font-style: italic;"&gt;Socket.setSoTimeout()&lt;/span&gt; ; prima di usarla&lt;br /&gt;studiare bene cosa fa.&lt;br /&gt;&lt;br /&gt;Segue un esempio di un sistema che crollava sempre alla stessa ora, la cui causa si è scoperto essere il firewall.&lt;br /&gt;Ovvero se non c'è trasmissione di dati per molto tempo in una connessione di tipo TCP/IP il firewall&lt;br /&gt;considera gli end point morti, e per lui la connessione non esiste più. Chi legge dalla socket invece&lt;br /&gt;considera la connessione ancora attiva. La soluzione è stata nell'abilitare una funzione di Oracle&lt;br /&gt;chiamata 'dead connection detection' che esegue ping sui client per sapere se la connessione col db&lt;br /&gt;è attiva oppure no. Tale trasmissione di pacchetti ping permette al firewall di considerare la connessione&lt;br /&gt;TCP/IP attiva.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Reazioni a catena.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si parla di scalabilità orizzontale e verticale. Quella orizzontale indica l'aumento di capacità attraverso&lt;br /&gt;l'aggiunta di server (es: google e amazon), ovvero il concetto di ridondanza. Il difetto è nel sovraccarico&lt;br /&gt;che ogni server attivo deve gestire a fronte di ogni spegimento eccezionale di uno o più server.&lt;br /&gt;Il difetto nel codice che ha generato l'eccezione è presente in ogni singolo application server.&lt;br /&gt;Le reazioni a catena accadono il più delle volte quando ci sono dei thread bloccati; l'applicazione smette&lt;br /&gt;di rispondere e le richieste in ingresso vengono ridestribuite sui server aumentando la probabilità&lt;br /&gt;di fallimento. Un altra causa sono gli outofmemory.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Utenti&lt;/span&gt;&lt;br /&gt;:) Qui inizia il paragrafo con la frase "Users are a terrible thing" ; un consiglio è quello di&lt;br /&gt;evitare situazioni di outofmemory, spesso non catturate nei log (es: log4j), mettendo meno informazioni&lt;br /&gt;possibile in sessioni. Ad esempio il risultato di una query al fine della paginazione. Meglio rieseguire&lt;br /&gt;la ricerca ogni volta. In sessione dovrebbero essere salvati dati riutilizzabili.&lt;br /&gt;&lt;br /&gt;Mi ha fatto pensare in quali particolari casi può essere utile l'uso di un SoftReference ad un oggetto risorsa.&lt;br /&gt;L'idea è di mettere in sessione un &lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;SoftReference&lt;/span&gt; all'oggetto in questione al posto del riferimento all'oggetto&lt;br /&gt;diretto. Questo con il vantaggio di rendere disponibile al garbage collector in caso di bisogno l'area&lt;br /&gt;di memoria usata dalla risorsa. Ogni utente in tal modo usa sul server all'incirca la stessa quantità&lt;br /&gt;di memoria. Se però il garbage collector disalloca l'area di memoria referenziata bisogna gestire il caso&lt;br /&gt;in cui l'oggetto viene richiesto da qualche operazione.&lt;br /&gt;&lt;br /&gt;In un sistema di ecommerce una parte da testare con riguardo è quella relativa al 'checkout', all'acquisto&lt;br /&gt;di beni. E' un consiglio banale, la parte interessante è legata al fatto che spesso proprio quell'area&lt;br /&gt;è quella che esercita l'integrazione di un gran numero di sistemi (carte di credito, inventario..)&lt;br /&gt;Quindi astraendo la parte più fragile del sistema è quella dove devono collaborare più sottosistemi.&lt;br /&gt;Non conoscevo la definizione di &lt;span style="font-style: italic;"&gt;'conversion rate': la percentuale di visitatori di un sito che acquistano &lt;/span&gt;&lt;br /&gt;qualcosa. Se tale conversion rate è di solito del 2 % è opportuno eseguire test di carico di 3-4 volte tanto.&lt;br /&gt;&lt;br /&gt;Infine ci sono gli utenti pericolosi, e la mitica DDOS (distributed denial of service).&lt;bugs&gt;&lt;good stability="" does="" not="" necessarily="" cost="" a="" amazing="" thing="" is="" that="" highly="" stable="" design="" usually="" costs="" same="" to="" implement="" as="" the="" unstable=""&gt;&lt;/good&gt;&lt;/bugs&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-242623060436329080?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/242623060436329080/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=242623060436329080' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/242623060436329080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/242623060436329080'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/05/libri-recensione-libro-release-it-parte.html' title='[Libri] Recensione libro Release It! parte 1'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-7703451274466854484</id><published>2007-05-14T15:55:00.000+02:00</published><updated>2007-05-14T15:57:49.057+02:00</updated><title type='text'>[Metodo] convincere nell'adozione di TDD</title><content type='html'>Cito:&lt;br /&gt;&lt;br /&gt;&gt;Uncle Bob! They are asking the business side for "permission" to use an&lt;br /&gt;&gt;engineering Best Practice!&lt;br /&gt;&lt;br /&gt;Good catch!  No, it's not about convincing the customer to let you act&lt;br /&gt;like professionals.  &lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;The customer *wants* you to act like&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;professionals.  The customer is *paying* you to act like&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;professionals.  Professionals test their code.  Period.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I understand the fear that TDD will slow you down.  But it won't.&lt;br /&gt;Just today I taught a group of 16 programmers how to write C# using&lt;br /&gt;TDD.  These 16 people worked for three hours straight, getting a small&lt;br /&gt;software application working.  Not once in all those 48 man hours did&lt;br /&gt;any of them fire up a debugger.  And they got a *lot* of stuff done.&lt;br /&gt;At the end of the session they were all amazed at:&lt;br /&gt;&lt;br /&gt;1. How slowly it felt like they were going.&lt;br /&gt;2. How much they got done.&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;Robert C. Martin (Uncle Bob)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-7703451274466854484?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/7703451274466854484/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=7703451274466854484' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7703451274466854484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7703451274466854484'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/05/metodo-convincere-nelladozione-di-tdd.html' title='[Metodo] convincere nell&apos;adozione di TDD'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-30796153262889180</id><published>2007-05-14T14:43:00.000+02:00</published><updated>2007-05-14T14:50:43.279+02:00</updated><title type='text'>[Metodo] duplicazioni e astrazioni</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.businesstrainingworks.com/images/Course%20Outline/32-Creativity-and-Thinking.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.businesstrainingworks.com/images/Course%20Outline/32-Creativity-and-Thinking.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Carino un vecchio post sulla ml internazionale dove un tal Wojciech Biela&lt;br /&gt;espone questo problema:&lt;br /&gt;Ho un sistema dove certe informazioni (nome, cognome) provengono da A,&lt;br /&gt;altre (nome, sesso) da B, altre (sesso, eta) da C etc.. come rifattorizzo usando tdd?&lt;br /&gt;Si voleva evitare di creare gerarchie complesse.&lt;br /&gt;Al di là della soluzione, il problema era che non riusciva a eliminare la duplicazione&lt;br /&gt;con una soluzione efficace.&lt;br /&gt;Così Kent Beck risponde che in quei casi può essere utile mantenere la duplicazione&lt;br /&gt;per un po' di tempo, riflettendo continuamente sull'astrazione migliore da adottare.&lt;br /&gt;Cito questa frase:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;This process seems a little like science to me. If you don't have enough&lt;br /&gt;data for a good theory, you go get more data, you don't slave away on a&lt;br /&gt;theory that matches the data to date knowing that the next experiment will&lt;br /&gt;destroy your theory.&lt;br /&gt;Kent Beck&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-30796153262889180?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/30796153262889180/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=30796153262889180' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/30796153262889180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/30796153262889180'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/05/metodo-duplicazioni-e-astrazioni.html' title='[Metodo] duplicazioni e astrazioni'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-7826195753309797388</id><published>2007-05-11T10:49:00.000+02:00</published><updated>2007-05-11T10:50:53.905+02:00</updated><title type='text'>[Parole] asbesto</title><content type='html'>= amianto.&lt;br /&gt;&lt;br /&gt;Citando Piergiuliano Bossi:&lt;br /&gt;" Allora ci vogliono le mutande all'asbesto."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-7826195753309797388?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/7826195753309797388/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=7826195753309797388' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7826195753309797388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/7826195753309797388'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/05/parole-asbesto.html' title='[Parole] asbesto'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-117649544032237170</id><published>2007-04-13T22:13:00.000+02:00</published><updated>2007-04-13T22:17:21.883+02:00</updated><title type='text'>[Film] the dreamers</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://it.funonit.com/foto/gnocche/eva_green/eva_green_77.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://it.funonit.com/foto/gnocche/eva_green/eva_green_77.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Quando penso ad una parigina penso a Isabelle. Folle, artista, debole, magra, viziata, bellissima.&lt;br /&gt;Un tempo incontrai Isabelle; ma poi, come fà il protagonista del film, le strade si sono divise.&lt;br /&gt;L'arte sa essere truce e colpisce solo chi è sensibile alle dipendenze.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-117649544032237170?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/117649544032237170/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=117649544032237170' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/117649544032237170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/117649544032237170'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/04/film-dreamers.html' title='[Film] the dreamers'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-117615743647129395</id><published>2007-04-10T00:22:00.000+02:00</published><updated>2007-04-10T00:25:10.376+02:00</updated><title type='text'>[Life] film di fantascienza</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mymovies.it/filmclub/2006/08/026/locandina.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.mymovies.it/filmclub/2006/08/026/locandina.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ho visto " i figli degli uomini " , un film di fantascienza che fa riflettere sull'importanza della vita, della nascita, dei bambini.&lt;br /&gt;La morale è che nei bambini risiede la speranza di un futuro migliore.&lt;br /&gt;Lo consiglio.&lt;br /&gt;&lt;br /&gt;http://www.mymovies.it/dizionario/recensione.asp?id=44593&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-117615743647129395?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/117615743647129395/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=117615743647129395' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/117615743647129395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/117615743647129395'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/04/life-film-di-fantascienza.html' title='[Life] film di fantascienza'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-117569517965312225</id><published>2007-04-04T15:57:00.000+02:00</published><updated>2007-04-04T15:59:40.316+02:00</updated><title type='text'>[Parole] travet</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.albanesi.it/Veter/laverack.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.albanesi.it/Veter/laverack.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="descrizione"&gt;impiegato di basso livello e mal retribuito, che svolge in modo pateticamente scrupoloso il proprio monotono e ingrato lavoro &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-117569517965312225?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/117569517965312225/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=117569517965312225' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/117569517965312225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/117569517965312225'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/04/parole-travet.html' title='[Parole] travet'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-117132192695642330</id><published>2007-02-13T00:10:00.000+01:00</published><updated>2007-02-13T00:12:07.706+01:00</updated><title type='text'>[Ballo] appunti prima lezione</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.unl.edu/scarlet/v13n9/tango.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.unl.edu/scarlet/v13n9/tango.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;VALZER LENTO&lt;br /&gt;piano: partire di sinistro alla battuta 2 per fare il terzo passo, di sinistro, iniziando giro destro aperto.&lt;br /&gt;poi giro sinistro aperto. infine giro destro con spin.&lt;br /&gt;Tanti punti su cui migliorare:&lt;br /&gt;una volta a fianco della dama, mantenere il contatto del punto di equilibrio, senza abbassare la spalla, rivolto col petto verso di lei, abbassando l'anca per permetterle il passaggio. Testa a sinistra, spalle aperte, poi sfilare il sinistro&lt;br /&gt;che va quasi diritto.&lt;br /&gt;Mano sinistra aperta appoggiata in modo che la mano della dama sia aperta e stesa.&lt;br /&gt;Nello spin, chiudere alla prima metà. quinto passo da puntare indietro, col sesto disegni una circonferenza come fosse un compasso che fa perno sul destro. aspettare lei che viene in avanti senza spingerla o affrettare.&lt;br /&gt;&lt;br /&gt;TANGO&lt;br /&gt;piano: destro, avanti, chiudo. giro sinistro finito aperto, 8° passo a lato di destro, avanti sinistro e chiudo.&lt;br /&gt;subito medio corté.&lt;br /&gt;&lt;br /&gt;mano destra quasi in abbraccio, deve sentire il reggiseno, senza puntare con le dita all'interno della schiena.&lt;br /&gt;nel medio cortè il busto sta sempre fermo, cambia solo la posizione del peso. é aperto sulla sinitra. il gomito destro leggermente abbassato per comodità della dama.&lt;br /&gt;Attenzione che si può andare a ritmo di musica ma in modo stonato se la battuta è sul terzo passo e non sul primo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-117132192695642330?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/117132192695642330/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=117132192695642330' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/117132192695642330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/117132192695642330'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/02/ballo-appunti-prima-lezione.html' title='[Ballo] appunti prima lezione'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-117068379438213879</id><published>2007-02-05T14:54:00.000+01:00</published><updated>2007-02-05T14:56:34.756+01:00</updated><title type='text'>[Parole] scampolo</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dt-sport.com/img/catalog/CoolMax_scampolo_modre_fin.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.dt-sport.com/img/catalog/CoolMax_scampolo_modre_fin.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="descrizione"&gt;traccia, rimasuglio, avanzo&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-117068379438213879?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/117068379438213879/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=117068379438213879' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/117068379438213879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/117068379438213879'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/02/parole-scampolo.html' title='[Parole] scampolo'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116870055662636961</id><published>2007-01-13T16:00:00.001+01:00</published><updated>2008-07-10T18:45:27.139+02:00</updated><title type='text'>[Parole] leguleio</title><content type='html'>&lt;span class="descrizione"&gt;persona pedante, di mentalità ristretta&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116870055662636961?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116870055662636961/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116870055662636961' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116870055662636961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116870055662636961'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2007/01/parole-leguleio.html' title='[Parole] leguleio'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116600099400947659</id><published>2006-12-13T10:09:00.000+01:00</published><updated>2006-12-13T10:10:56.503+01:00</updated><title type='text'>[Citazione] nazista del codice</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.blender.pl/albums/album11/dna.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.blender.pl/albums/album11/dna.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"Adoro fare diagrammi quando mi aiutano a sterminare codice orrido. Sono un nazista del codice, voglio addirittura l'eugenetica per il codice accoppiato, manco deve nascere, il bastardo."&lt;br /&gt;&lt;br /&gt;Piergiuliano Bossi extremeprogramming-it@yahoogroups.com Wed 12/13/2006 5:45 AM&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116600099400947659?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116600099400947659/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116600099400947659' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116600099400947659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116600099400947659'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/12/citazione-nazista-del-codice_13.html' title='[Citazione] nazista del codice'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116596217733636699</id><published>2006-12-12T23:21:00.000+01:00</published><updated>2006-12-12T23:22:57.803+01:00</updated><title type='text'>[Parole] spam</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.koehntopp.de/uploads/20040203-spam.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://blog.koehntopp.de/uploads/20040203-spam.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The term was supposedly coined from a &lt;span style="font-weight: bold;"&gt;Monty Python&lt;/span&gt; comedy sketch in the early 1970s, in which every item on a restaurant menu contained SPAM, and there was nothing a customer could do to get a meal without it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116596217733636699?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116596217733636699/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116596217733636699' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116596217733636699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116596217733636699'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/12/parole-spam.html' title='[Parole] spam'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116410319600833729</id><published>2006-11-21T10:58:00.000+01:00</published><updated>2006-11-21T10:59:56.570+01:00</updated><title type='text'>[Fun] pubblicita ikea censurata</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.mtncompany.it/postcard/foto/4549cf904b71c.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://blog.mtncompany.it/postcard/foto/4549cf904b71c.jpg" alt="" border="0" /&gt;&lt;/a&gt;Queste sono pubblicità geniali.&lt;br /&gt;Interessanti.&lt;br /&gt;Simpatiche.&lt;br /&gt;Non volgari.&lt;br /&gt;Censurate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116410319600833729?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116410319600833729/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116410319600833729' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116410319600833729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116410319600833729'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/11/fun-pubblicita-ikea-censurata.html' title='[Fun] pubblicita ikea censurata'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116317536349285195</id><published>2006-11-10T17:12:00.000+01:00</published><updated>2006-11-10T17:16:04.616+01:00</updated><title type='text'>[Parole] surrettizio</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ariadne.iz.net/%7Eentigo/personal/artwork/hiding.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://ariadne.iz.net/%7Eentigo/personal/artwork/hiding.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="descrizione"&gt;che occulta intenzionalmente qualche particolare rilevante.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Questa jsp è volutamente surrettizia&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116317536349285195?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116317536349285195/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116317536349285195' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116317536349285195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116317536349285195'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/11/parole-surrettizio.html' title='[Parole] surrettizio'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116280367602984473</id><published>2006-11-06T09:59:00.000+01:00</published><updated>2006-11-06T10:01:27.786+01:00</updated><title type='text'>[Windows] auto completamento usando TAB da cmd</title><content type='html'>&lt;p&gt;If you are an experienced Unix user currently using             Windows, you likely miss the command completion feature of the             Unix command line interface. To enable this in Windows,             simply open up the registry and search for the string             &lt;code&gt;completionchar&lt;/code&gt;. For each instance of a key             with this name, change its value to &lt;code&gt;9&lt;/code&gt; (the             ASCII code of the &lt;code&gt;TAB&lt;/code&gt; key). Now you will be able to use             the &lt;code&gt;TAB&lt;/code&gt; key to complete filenames from the             Windows command line interface.&lt;/p&gt;&lt;span style="font-family: courier new;font-size:78%;" &gt; da http://www.diasparsoftware.com/tips-and-tricks.html&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116280367602984473?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116280367602984473/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116280367602984473' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116280367602984473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116280367602984473'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/11/windows-auto-completamento-usando-tab.html' title='[Windows] auto completamento usando TAB da cmd'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116213940787332967</id><published>2006-10-29T17:25:00.000+01:00</published><updated>2006-10-30T14:45:33.266+01:00</updated><title type='text'>[Life] tecniche di presentazione - parte 2</title><content type='html'>Gli &lt;em&gt;obiettivi&lt;/em&gt; sono , solitamente, i seguenti: informare, intrattenere, ovvero cambiare lo stato emotivo (come zelig), insegnare,&lt;br /&gt;motivare. La vendita e la persuasione sono l'insieme di tutti questi 4 obiettivi.&lt;br /&gt;&lt;br /&gt;La programmazione neurolinguistica parte dal presupposto che mente , corpo e linguaggio sono legati da corrispondenze biunivoche.&lt;br /&gt;Ciò significa, ad esempio, che migliorare il proprio stato fisico può portare a migliorare lo stato mentale e così via.&lt;br /&gt;Il linguaggio è quindi influenzato dallo stato emotivo ma può anche influenzare gli altri aspetti.&lt;br /&gt;Un esempio è quando durante un discorso si cambia frase, da "oggi tratterei questo argomento" a "oggi tratto questo argomento". Abbiamo provato a presentare un argomento senza parlare, per osservare la nostra gestualità.&lt;br /&gt;Personalmente ho trovato difficile gestire i miei gesti, ma ne ho preso coscienza: come muovo le mani, come guardo, come mi pongo, sono tutti aspetti che con un costante esercizio si possono controllare.&lt;br /&gt;&lt;br /&gt;A livello di contenuti abbiamo esplorato varie tecniche.&lt;br /&gt;La prima è focalizzata sull'uso di un linguaggio variopinto che possa colpire tutti i tipi di persone (&lt;strong&gt;VAK&lt;/strong&gt;).&lt;br /&gt;Ogni persona usa nel proprio linguaggio in prevalenza immagini , suoni o sensazioni.&lt;br /&gt;Le persone visive, ad esempio, "vedono" i concetti nella loro mente, hanno di solito una postura eretta, una&lt;br /&gt;parlata veloce (perchè le immagini da cui traggono il discorso sono più rapide della parola) e usano&lt;br /&gt;spesso parole del tipo: "è chiaro", "vedo bene questa situazione", "si illumina" etc&lt;br /&gt;Le persone auditive -come me- ragionano parlando. Ascoltano con attenzione il loro dialogo interno e ciò che viene loro detto; scelgono con cura ogni parola ed ogni espressione da usare. Parlano lentamente scandendo le parole e modulando tono e tempo di voce. Usano "sentimi", "mi suona bene", "i fatti parlano da sè".&lt;br /&gt;Le persone cinestesiche ragionano in base alle sensazioni che provano, amano il contatto e prestano grande attenzione alle caratteristiche fisiche. Hanno una gestualità lenta e una respirazione addominale (c'è molto contatto con la pancia). "Mi sfugge", "Momenti caldi", "Non riesco ad afferrarlo", "Sono sotto pressione", "immergersi in questa situazione"...&lt;br /&gt;&lt;br /&gt;In una presentazione vale quindi la pena di usare esempi che usano tutti i 3 tipi di linguaggio.&lt;br /&gt;&lt;br /&gt;L'altra tecnica legata all' efficacia di come presentare un contenuto riguarda i metaprogrammi.&lt;br /&gt;Un metaprogramma relativo all'obiettivo motivazionale è l' "&lt;em&gt;andare verso - allontanarsi da&lt;/em&gt;". Alcuni si focalizzano sul futuro e su obiettivi positivi, altri più su ciò che vogliono evitare, tendendo ad analizzare i problemi più che a prospettare risultati.&lt;br /&gt;Un ottimo metaprogramma per costruire metafore è quello del "&lt;em&gt;uguale/diverso&lt;/em&gt;" : alcuni si concentrano sugli aspetti che uniscono situazioni/individui, altri su ciò che li differenzia.&lt;br /&gt;"Visione generale o di dettaglio" : alcuni si annoiano di fronte a esposizioni ricche di dettagli, altri le amano.&lt;br /&gt;Utile, ad es. , dare una visione globale per rimandare i dettagli a documentazione o tempi dedicati.&lt;br /&gt;&lt;br /&gt;Metaprogramma relativo all'obiettivo di persuasione: si pensi all'acquisto di un vestito.&lt;br /&gt;Alcuni si convincono vedendolo, altri devono sentire che qualcuno fa un complimento, altri considerano la parola scritta (una rivista di moda)&lt;br /&gt;un'autorità convincente, infine altri devono provarlo, agendo fisicamente e provando su sè stessi.&lt;br /&gt;Il contratto degli italiani firmato da Berlusconi è un esempio di sinestesia: ha fatto vedere il contratto, l'ha letto, era una cosa scritta e ha fatto l'azione&lt;br /&gt;di firmarlo.&lt;br /&gt;&lt;br /&gt;Sempre nell'ambito della persuasione alcuni si basano sul numero di esempi di successo portati altri sul periodo di tempo (questa azienda è sul mercato da 35 anni).&lt;br /&gt;&lt;br /&gt;Gestione delle &lt;strong&gt;obiezioni&lt;/strong&gt;: abbiamo provato a giocare il ruolo di coloro che obiettano antipaticamente ad una presentazione, studiando le strategie adottate.&lt;br /&gt;Bisognerebbe capire il tipo di pubblico, iniziando a collezionare queste informazioni: è un pubblico che è venuto spontaneamente o mandato apposta? E' un&lt;br /&gt;pubblico attivo o passivo? Con un pubblico spontaneo l'oratore ha già un credito, mentre l'altro tipo di pubblico deve essere stuzzicato per prima cosa.&lt;br /&gt;Capito il tipo di pubblico si può usare la strategia del "&lt;strong&gt;setting&lt;/strong&gt;", informando, a inizio presentazione, come reagire: "in qualunque momento&lt;br /&gt;se avete domande fatemi sapere", "siccome le cose migliori sono alla fine fatemi finire" , "purtroppo non avremo tempo di rispondere alle domande" , "le domande solo alla fine"...Dopo aver eseguito setting chi lo viola è in torto: vale lo stesso per l'oratore. Di fatto non si può certo gestire il contenuto dell'obiezione, ma si può agire sul processo. Così, chi obietta quando era stato detto che non si può interrompere fino alla fine è già in torto, e lo si può gestire anche ignorandolo o con una semplice frase (pensavo di essere stato chiaro) per riprendere il controllo del processo.&lt;br /&gt;&lt;br /&gt;Concludendo, un grande speaker ha sempre in mente il suo obiettivo, sa stabilire un indicatore per sapere dove si trova nel raggiungimento dell'obiettivo ed è flessibile nella sua esposizione perchè adatta, sulla base del feedback, le sue strategie. Come fa? Conoscendo le varie possibilità a sua disposizione.&lt;br /&gt;&lt;br /&gt;Il primo giorno è dedicato al sapere: l'aspetto cognitivo. Quindi: cosa posso fare oltre a concentrarmi sui contenuti, esistono tecniche/emozioni etc..&lt;br /&gt;In secondo giorno è dedicato al saper fare, aggiungendo all'aspetto cognitivo quello fisico.&lt;br /&gt;Il terzo e ultimo è dedicato al saper essere , che ha a che fare con l'aspetto emotivo, ovvero alla relazione esistente tra emozioni e azioni.&lt;br /&gt;Una tesi è quella che sia possibile riaccedere ad uno "&lt;strong&gt;stato risorsa&lt;/strong&gt;" funzionale in qualsiasi momento, perchè la mente confonde tra uno stato mentale e la realtà. L'esercizio è il seguente: pensa ad una emozione che vuoi rivivere. Ad esempio: il relax. Ora rivedi le immagini/ suoni/ sensazioni/ tempo/ volume/ ritmo di qualcosa in cui si è vissuta quella emozione. A questo quadro si possono aggiungere particolari utili a potenziare quella emozione, eliminando invece i particolari che non aiutano. Infine si esegue un gesto (che so, incrociare le dita) per legare l'emozione.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Livelli di pensiero.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;La parte più difficile riguarda questo ultimo capitolo. Quando una presentazione ha come scopo quello di portare ad un cambiamento, la sua difficoltà è proporzionale al tipo di cambiamento. Si può voler cambiare, in ordine di difficoltà:&lt;br /&gt;- ambiente ( domande che ci si pone: Dove ? quando? )&lt;br /&gt;- comportamento (che cosa?)&lt;br /&gt;- capacità ( come ? )&lt;br /&gt;e le più difficili:&lt;br /&gt;- valori: ciò che considero giusto e buono ; convinzioni: come rendo concreti i valori (perchè?)&lt;br /&gt;Un esempio è il valore della sicurezza. Uno può convincersi che per essere sicuro si deve isolare; un altro si sente sicuro solo in mezzo alla folla.&lt;br /&gt;- identità ( chi? io sono...) per accedere a questo livello si deve sempre usare una metafora&lt;br /&gt;- livello spirituale (per chi? per che cosa?) cioè la relazione dell'io con l'universo. Un esempio di comunicazione che voleva attivare a questo livello era la pubblicità della telecom che mostrava gandhi in maxi schermo chiedendo: "che mondo sarebbe se...?"&lt;br /&gt;&lt;br /&gt;Dopo aver indicato questi punti la riflessione riguarda la congruenza. Se sono una società che richiede di cambiare la capacità di comunicare il messaggio non sarà mai recepito se il cambiamento non si riflette in cascata sui livelli inferiori, ad esempio evitando un ambiente di lavoro a cubicoli.&lt;br /&gt;Un utile esercizio è quello di identificare un obiettivo, percorrere a ritroso tutti i livelli , facendosi le domande indicate per poi attuare un percorso di riallineamento. Una volta catturata l'immagine corrispondente alla sfera spirituale, cosa cambia in tutti i livelli di pensiero a fronte di quella sensazione?&lt;br /&gt;&lt;br /&gt;Un aneddoto carino riguarda la madre di un bambino, malato di diabete, che parte alla volta della casa di Gandhi. Arrivata, dopo 2 giorni, chiede al maestro di dire a suo figlio di non mangiare zucchero, altrimenti morirà. Gandhi risponde di ritornare dopo 2 settimane. La donna torna a casa, dopo altri 2 giorni e ritorna dal maestro dopo le due settimane. Alchè Gandhi dice: "ragazzo, non mangiare più zucchero, altrimenti morirari". La donna lo ringrazia, volendo però sapere perchè le ha fatto attendere 2 settimane; non poteva farlo subito? Lui risponde: "due settimane fa anche a me piaceva lo zucchero". La 'morale' è che non sarebbe stato congruente nella sua affermazione, quindi neanche efficace.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Luca Baiguini - Il pubblico nelle tue mani&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116213940787332967?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116213940787332967/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116213940787332967' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116213940787332967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116213940787332967'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/10/life-tecniche-di-presentazione-parte-2.html' title='[Life] tecniche di presentazione - parte 2'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116169959783336867</id><published>2006-10-24T16:11:00.000+02:00</published><updated>2006-12-22T10:41:40.333+01:00</updated><title type='text'>[Unix] find e find content</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.atmitchell.com/images/finditGlass.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://www.atmitchell.com/images/finditGlass.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In aggiunta a quanto scritto su&lt;br /&gt;http://dmiessler.com/study/nix/commands/find/&lt;br /&gt;&lt;br /&gt;vorrei segnalare due script che stampano i nomi dei file che contengono l'argomento passato i file analizzando il contenuto:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;&lt;br /&gt;(questo è case insensitive:)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;$ cat findContent&lt;br /&gt;grep -H -i "$1" -r ./*&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;$ cat findContent2&lt;br /&gt;find . -name '*' | xargs grep -l $1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116169959783336867?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116169959783336867/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116169959783336867' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116169959783336867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116169959783336867'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/10/unix-find-e-find-content.html' title='[Unix] find e find content'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116144942837171075</id><published>2006-10-21T18:50:00.000+02:00</published><updated>2006-10-21T18:51:56.563+02:00</updated><title type='text'>[Life] tecniche di presentazione - parte 1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gapingvoid.com/powerpoint322.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 400px;" src="http://www.gapingvoid.com/powerpoint322.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Una caratteristica che accomuna la maggior parte delle persone che hanno dovuto presentare un argomento davanti ad un pubblico è stata l'enfasi sul &lt;span style="font-style: italic;"&gt;contenuto&lt;/span&gt;. Alcuni riferiscono l'inizio della presentazione come una fase tragica perchè scordano cosa dovevano dire. Quindi, riconcentrandosi su quanto preparato, hanno iniziato. &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;Quanto pesa il contenuto nella buona riuscita di una presentazione ?&lt;br /&gt;Il 7 %, secondo i risultati dell'&lt;a href="http://en.wikipedia.org/wiki/Albert_Mehrabian"&gt;esperimento di Mehrabian.&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;La buona riuscita è dovuta, in larga misura, all'aspetto paraverbale (voce, tono, pause – 38 %) e non verbale (gestualità, spazi – 55 %). &lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;Il corso ha esplorato diverse strategie che si possono adottare alternative al 'contenuto' per raggiungere l'obiettivo di una buona presentazione.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Non tutte le strategie sono sempre utili e vengono applicate con disinvoltura da ogni persona. L'importante è entrare in una ottica di sperimentazione: uscire dalla logica 'funziona, non funziona' per entrare in una logica 'quanto mi avvicina all'obiettivo e quanto mi allontata'.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Dopo una breve presentazione di ogni persona abbiamo già notato alcuni punti su cui intervenire:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;ansia da inizio&lt;/span&gt;: ci si posiziona, si attende qualche secondo prima di iniziare, senza correre, sopratutto senza parlare prima che la platea abbia visto chi ha di fronte (a meno che non sia voluto!)&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;centratura:&lt;/span&gt; un piccolo esperimento ci ha aiutato ad assumere una posizione eretta e sicura. Immaginarsi un pallino del colore preferito sulla sommità del capo. Concentrarsi. Un altro prova a spostarti: ci riesce facilmente! Se si sposta questo pallino sotto l'ombelico ci si trova in uno stato più eretto, meno facile da spostare. Vero! &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;conclusione&lt;/span&gt;: i momenti di maggiore attenzione in una presentazione sono: l'inizio, in cui solitamente viene dato un credito al presentatore. La fine, perchè la platea si desta dal torpore e ascolta le conclusioni. Per ravvivare l'attenzione alla fine bisogna far capire chiaramente quando si sta per concludere. E' sufficiente dire: “per concludere” .. &lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;Odioso dire che si sta concludendo  salvo poi non farlo: grave errore!&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;Ci sono anche altri picchi di  attenzione che possono essere ricreati con una operazione detta di  '&lt;span style="font-weight: bold;"&gt;rottura degli schemi&lt;/span&gt;': qualcosa di 'strano' ..una esperienza, un aneddoto, una pausa tragica, una domanda, un cambiamento di tono, uno spostamento da un'altra parte, un gesto non atteso... &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;motivazione: aiuta auto affermare che 'se sono io , qui, oggi, un motivo ci sarà'. Esempio: un signore ha indicato una bottiglia chiedendo: 'questo è la nostra migliore risorsa?' tutto il pubblico sta per dire: 'sì' poi risponde: 'no, sono loro', indicando omini stilizzati disegnati sulla lavagna.&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;gesti non gesti / parole non parole: i gesti sono utili nella comunicazione quando usati per rafforzare il contenuto . Esempi: allontanarci , muovendo away le mani, fare nostro, muovendo le mani verso il petto, decidere stringendo il pugno, noi-voi indicando ecc. Altri non sono funzionali. Anche parole come 'praticamente', 'cerchiamo' etc non sono funzionali. Odiosi gli 'eee' , 'mmm' .&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Altra presentazione con queste tecniche in mente. Ora notiamo cose positive e negative :  &lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;- non sono stata sufficientemente chiara : magari è vero; più che ammetterlo, correggersi.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;- non parlare coprendo la lavagna  &lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;+scrivere 'di lato' dalla lavagna, avendo cura di guardare il pubblico.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;+scrivere bene ;-)&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;+esperienza personale raccontata con tono diverso, meno mono – tono col resto della presentazione&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;-dopo vi spiego perchè&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;-come tutti sapete&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;-uso di 'ma' e 'però' del tipo: “siete molto in gamba MA dobbiamo chiedervi ...” meglio: “siete molto in gamba e abbiamo l'opportunità di ...”&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Abbiamo arricchito la presentazione con l'uso di alcune strategie. Ora non solo il contenuto è importante ma anche il processo.&lt;br /&gt;In particolare, il processo è diventato una competenza consapevole. Applicato sempre più spesso diventerà una competenza inconsapevole, dove spiccherà la nostra personalità senza bisogno di pensare esplicitamente a quali tecniche usare. &lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Esempio dell'auto: un bambino ha una incompetenza inconsapevole: non sa di non sapere guidare un'auto. Cresciuto, diventa una incompetenza consapevole: ok, si può migliorare, andare a scuola guida. Presa la patente, si è in una fase di competenza consapevole: P attaccato all'auto: so guidare ma penso agli aspetti della guida. Con la ripetizione, diventa una competenza inconsapevole: non devo più pensare esplicitamente ai passi da eseguire. Con lo svantaggio che non mi riosservo più: è facile fermare il processo di miglioramento. &lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Qual è la causa maggiore dell'abbandono quando si tenta di passare da una competenza inconsapevole a una consapevole? Il sovraccarico di informazioni! In questo momento solo la convinzione e la motivazione ci aiutano.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;Riassumendo: &lt;span style="font-style: italic;"&gt;in una presentazione contano il contenuto (cosa), il processo (come – da preparare e pensare al pari del contenuto) e: l'obiettivo&lt;/span&gt;!&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Nei momenti di difficoltà si può sempre tornare su uno di questi aspetti. Gli obiettivi piu comuni di una presentazione sono quelli di informare, intrattenere, motivare, insegnare.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Nella logica del raggiungimento dell'obiettivo entrano le classiche considerazioni, in questo contesto chiamate TOTE (test, operate, test, exit). Qual è la distanza tra la situazione attuale e l'obiettivo? Poi ciclo di applicazioni di strategie, raccolta feedback, metrica per capire se mi sono avvicinato o allontanato finchè non raggiungo. Meglio peggiorare che non andare avanti, per lo meno si ha feedback.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Tecnica utilissima: le &lt;span style="font-weight: bold;"&gt;ANCORE&lt;/span&gt;.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Una ancora è un fenomeno legato ad un altro semanticamente scorrelato. Esempio: una canzone che fa venire in mente una ragazza. Esempio d'uso: il venditore si posiziona a sx del palco imitando una persona triste e senza futuro, soverchiata dai suoi problemi finanziari. Poi su muove a dx, indicando una persona di successo. Tutto deve essere congruente. La persona felice ha una voce chiara, limpida, gesti ampi, aperti. Poi si posiziona in mezzo dicendo: volete essere così o così? indicando i due estremi. Le due posizioni sono ancore, che riportano alla mente ciò che si è settato in precedenza.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Le ancore vanno settate, ripresentandole un paio di volte, spiegando il significato del gesto con chiarezza. Fatto ciò bisogna avere fiducia nelle ancore settate e usarle, senza quindi ribadire il solito concetto. &lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Altro esempio: un venditore d'auto che chiede : quale marca era l'ultima auto che ha acquistato: A (mettendo le mani a destra) o B (mettendole a sx)? Dopo che ha risposto posiziona i depliant nel posto corrispondente all'auto acquistata nel passato.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Berlusconi che dice: 'c'è una italia libera ecc' avvicinando la mano verso il petto , 'e un'italia dei ladri...' allontanando l'altra mano verso il dietro.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Un informatico che presenta un prodotto. 2 lavagne a dx e sx. Inizia indicando un vantaggio, poi scrive gli svantaggi sull'altra lavagna, quindi, al termine, finisce di elencare i vantaggi. Poi afferma di aver presentato con imparzialità pregi/difetti del prodotto e di attendere la scelta del pubblico. Ha sfruttato i picchi di attenzione: inizio e fine con vantaggi e anche una ancora: alla fine lui parlava nei pressi della lavagna dei vantaggi, che erano l'ultima cosa guardata.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;La voce può essere una ancora: lenta e profonda quando si esprimono concetti, rapida quando si elencano informazioni o esempi.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-style: italic;"&gt;Nota sulle slide:&lt;/span&gt;  &lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Lo speaker non deve essere di supporto alle slide ma viceversa. L'attenzione deve essere concentrata sullo speaker, che farà vedere o una mappa del discorso o i dati a seconda del caso. Se il pubblico dedica l'attenzione alle slide, spegnerle.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;Anche l'ambiente deve risaltare, con la luce, lo speaker.  &lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116144942837171075?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116144942837171075/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116144942837171075' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116144942837171075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116144942837171075'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/10/life-tecniche-di-presentazione-parte-1_21.html' title='[Life] tecniche di presentazione - parte 1'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116120974031183513</id><published>2006-10-19T00:15:00.000+02:00</published><updated>2006-10-19T00:15:40.423+02:00</updated><title type='text'>[Poesia] passione, debolezza, forza di Tarkovskij</title><content type='html'>... che si avverino i loro desideri... che possano crederci,&lt;br /&gt;e che possano ridere delle loro passioni!&lt;br /&gt;Infatti, ciò che chiamiamo passione in realtà non è energia spirituale,&lt;br /&gt;ma solo attrito tra l'animo e il mondo esterno.&lt;br /&gt;E, soprattutto, che possano credere in se stessi,&lt;br /&gt;e che diventino indifesi come bambini:&lt;br /&gt;perché la debolezza è potenza,&lt;br /&gt;e la forza è niente.&lt;br /&gt;Quando l'uomo nasce è debole e duttile,&lt;br /&gt;quando muore è forte e rigido.&lt;br /&gt;Così come l'albero, mentre cresce, è tenero e flessibile,&lt;br /&gt;e quando è duro e secco, muore.&lt;br /&gt;Rigidità e forza sono compagni della morte;&lt;br /&gt;debolezza e flessibilità esprimono la freschezza dell'esistenza.&lt;br /&gt;Ciò che si è irrigidito non vincerà.&lt;br /&gt;&lt;i&gt;( Arsenij Tarkovskij )&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116120974031183513?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116120974031183513/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116120974031183513' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116120974031183513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116120974031183513'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/10/poesia-passione-debolezza-forza-di.html' title='[Poesia] passione, debolezza, forza di Tarkovskij'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116120969661979622</id><published>2006-10-19T00:13:00.000+02:00</published><updated>2006-10-19T00:16:00.703+02:00</updated><title type='text'>[Poesia] Amo gli occhi tuoi, amica mia di Tarkovskij</title><content type='html'>Amo gli occhi tuoi, amica mia,&lt;br /&gt;e i loro giochi.&lt;br /&gt;Splendidi di fiamme quando&lt;br /&gt;li alzi all'improvviso e,&lt;br /&gt;come fulmine celeste,&lt;br /&gt;guardi veloce tutt'intorno.&lt;br /&gt;Ma c'è un fascino più forte:&lt;br /&gt;gli occhi tuoi rivolti verso il basso,&lt;br /&gt;negli attimi che un bacio appassionato,&lt;br /&gt;e fra le ciglia semichiuse del desiderio,&lt;br /&gt;il fumo, il fosco fuoco...&lt;br /&gt;&lt;i&gt;( Arsenij Tarkovskij )&lt;br /&gt;(da Stalker di Andrej T. )&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116120969661979622?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116120969661979622/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116120969661979622' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116120969661979622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116120969661979622'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/10/poesia-amo-gli-occhi-tuoi-amica-mia-di.html' title='[Poesia] Amo gli occhi tuoi, amica mia di Tarkovskij'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116120324092773976</id><published>2006-10-18T22:21:00.000+02:00</published><updated>2006-10-18T22:29:11.960+02:00</updated><title type='text'>[Vita] Termopili e motivazione</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://news.softpedia.com/images/news2/Febra-tifoida-i-a-ajutat-pe-spartani-sa-castige-razboiul-cu-Grecia-2.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://news.softpedia.com/images/news2/Febra-tifoida-i-a-ajutat-pe-spartani-sa-castige-razboiul-cu-Grecia-2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ho riletto la storia delle Termopili &lt;span style="font-size:78%;"&gt;(http://it.wikipedia.org/wiki/Battaglia_delle_Termopili)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Greci motivati hanno combattuto per contrastare l'avanzata dei persiani. I numeri 'storici' sono sconvolgenti: 7000 contro oltre 5 milioni di persiani !&lt;br /&gt;La sconfitta è stata favorita da alcuni traditori.&lt;br /&gt;&lt;br /&gt;L'evento è indubbiamente  significativo per  dimostrare l'efficacia della motivazione.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116120324092773976?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116120324092773976/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116120324092773976' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116120324092773976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116120324092773976'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/10/vita-termopili-e-motivazione.html' title='[Vita] Termopili e motivazione'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-116120141282945974</id><published>2006-10-18T21:54:00.000+02:00</published><updated>2006-10-18T21:58:55.123+02:00</updated><title type='text'>[Parole] Bordone</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.racine.ra.it/lcalighieri/Giubileo/Pellegrino.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.racine.ra.it/lcalighieri/Giubileo/Pellegrino.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Robusto bastone                                  dalla punta metallica, aveva sulla parte superiore                                  una&lt;br /&gt;ripresa che serviva da appoggio per la mano                                  durante il cammino e sulla&lt;br /&gt;sommità un gancio cui                                  appendere la zucca con l’acqua per il viaggio                                  o la&lt;br /&gt;bisaccia, la punta metallica oltre che avere                                  una presa più solida sul&lt;br /&gt;terreno serviva anche                                  come strumento per difendersi dai briganti.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-116120141282945974?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/116120141282945974/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=116120141282945974' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116120141282945974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/116120141282945974'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/10/parole-bordone.html' title='[Parole] Bordone'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-115740380587408420</id><published>2006-09-04T22:58:00.000+02:00</published><updated>2006-09-04T23:03:31.516+02:00</updated><title type='text'>[Citazione] arte - da "repubblica"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://medias.lemonde.fr/mmpub/edt/ill/2005/03/14/hor_courbet_030728_165.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://medias.lemonde.fr/mmpub/edt/ill/2005/03/14/hor_courbet_030728_165.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Quel che riscatta il Diderot de La Religieuse, il Voltaire di Ecrasons l'Infame, Les Fleurs du Mal di Baudelaire o la raffigurazione del sesso femminile di Courbet con il titolo L'Origine du monde, è ancora una volta l'arte, semplicemente l'arte.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-115740380587408420?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/115740380587408420/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=115740380587408420' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115740380587408420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115740380587408420'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/09/citazione-arte-da-repubblica.html' title='[Citazione] arte - da &quot;repubblica&quot;'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-115506154334002635</id><published>2006-08-08T20:11:00.000+02:00</published><updated>2006-09-04T23:04:03.326+02:00</updated><title type='text'>[Poesia] Sicilia</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.spaghettitaliani.com/Articoli4/POMODORo%2005.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.spaghettitaliani.com/Articoli4/POMODORo%2005.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;China su foglio bianco&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;E' la mia vita. Elegante, ricca di dettagli, priva di una visione d'insieme. Un quadro incomprensibile, prono a molteplici interpretazioni.&lt;br /&gt;Tutte sbagliate: non esiste una chiave. Oppure, esiste! Ma non c'è una serratura da aprire.&lt;br /&gt;La metafora: sei tu.&lt;br /&gt;Che colori le mie labbra di un &lt;span style="color: rgb(255, 0, 0);"&gt;rosso vivido,vivo, lento e fondente&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;come il magma dell'Etna&lt;/span&gt;. La mia pelle diventa &lt;span style="font-weight: bold;"&gt;nera,&lt;/span&gt; attingendo dal colore della tua divisa.&lt;br /&gt;Dirai: "lo era già, pur con le chiaroscure trame che la matita può disegnare".&lt;br /&gt;Eppure tu trasformi le linee in una tinta. &lt;span style="color: rgb(102, 51, 0);"&gt;Cola il catrame&lt;/span&gt;. Dal collo scendendo lungo l'addome.&lt;br /&gt;Copre tutto.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 204, 0);"&gt;&lt;span style="color: rgb(255, 204, 51);"&gt;In cielo di giallo, ovvero: di pazzia&lt;/span&gt;. &lt;/span&gt;Allucinato, ora non sopporto più &lt;span style="color: rgb(51, 102, 255);"&gt;la pace dell'azzurro.&lt;/span&gt; Abbacinato, chiudo gli occhi.&lt;br /&gt;Ora due Soli buissimi coprono il cielo annerendo con luminosità TUTTO. I tuoi occhi.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Ogni oggetto visto con la nuova luce è più piccolo; più minuto.&lt;br /&gt;In sostanza: più misterioso.&lt;/span&gt;&lt;br /&gt;Sembra nascondere molto di più di ciò che le leggi della proporzione da secoli sanno spiegare.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Fuggo dal rosso. Mi è negato.&lt;/span&gt; Nessun fiore in questo nuovo mondo è diverso dal rosso. &lt;span style="color: rgb(255, 0, 0);"&gt;Tutto ciò che è nobile, desiderabile&lt;/span&gt; (con violenza perfino o con purissimo desiderio) &lt;span style="color: rgb(255, 0, 0);"&gt;lo è&lt;/span&gt;.&lt;br /&gt;E' il rosso dei pomodori che da piccola addentavi come una novella Eva, ebbra nell'assaggiare il frutto del suo peccato.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;La furia dei venti muove ogni luogo sfumandone i contorni .&lt;/span&gt; Vuoi forse ridisegnarli tu o semplicemente -desideri- confondermi ? Rido, perchè so che nessuna lente potrà mai proteggermi dalla polvere, dalla &lt;span style="color: rgb(204, 102, 0);"&gt;fuliggine di quell'immensa macchina che incessantemente crea quella fastidiosa Realtà&lt;/span&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;nella quale sto scrivendo - circondato da colori non miei - queste parole blu.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vorrei intingere l'inchiostro dal tuo cuore, o dal posto in cui le mie emozioni sono generate. &lt;span style="color: rgb(255, 0, 0);"&gt;Forse la lingua, così vorace e libera&lt;/span&gt;. Forse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-115506154334002635?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/115506154334002635/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=115506154334002635' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115506154334002635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115506154334002635'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/08/poesia-sicilia.html' title='[Poesia] Sicilia'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-115469241519657010</id><published>2006-08-04T13:51:00.000+02:00</published><updated>2006-08-04T13:56:42.630+02:00</updated><title type='text'>[Citazione] Motivation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.artlex.com/ArtLex/m/images/motivation_research.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.artlex.com/ArtLex/m/images/motivation_research.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Before examining activities or even goals, it is valuable to understand underlying motivation. Motivation leads to goals, which then lead to activities. Motivation acts like a general direction or theme to help guide us in deciding which goals are appropriate.&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;tratto da http://www.martinfowler.com/articles/itsNotJustStandingUp.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-115469241519657010?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/115469241519657010/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=115469241519657010' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115469241519657010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115469241519657010'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/08/citazione-motivation.html' title='[Citazione] Motivation'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-115453315626524751</id><published>2006-08-02T17:38:00.000+02:00</published><updated>2006-08-02T17:39:16.736+02:00</updated><title type='text'>[Parole] Edutainment</title><content type='html'>Edutainment è un termine nato recentemente negli Stati Uniti dalla fusione delle parole educational (educativo) ed entertainment (intrattenimento). Insegnare (comunicare) giocando, potremmo tradurlo un po' liberamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-115453315626524751?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/115453315626524751/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=115453315626524751' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115453315626524751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115453315626524751'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/08/parole-edutainment.html' title='[Parole] Edutainment'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-115382837477187636</id><published>2006-07-25T13:52:00.000+02:00</published><updated>2006-07-25T13:53:16.816+02:00</updated><title type='text'>[Software Engineers] the best</title><content type='html'>&lt;table str="" style="border-collapse: collapse; width: 48pt;" border="0" cellpadding="0" cellspacing="0" width="64"&gt;&lt;col style="width: 48pt;" width="64"&gt;  &lt;tbody&gt;&lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt; width: 48pt;" height="18" width="64"&gt;Beck&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Booch&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Fowler&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Jacobson&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Knuth&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Martin&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Parnas&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Ritchie&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Rumbaugh&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Thompson&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Wirth&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-115382837477187636?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/115382837477187636/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=115382837477187636' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115382837477187636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115382837477187636'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/07/software-engineers-best.html' title='[Software Engineers] the best'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-115280018566897197</id><published>2006-07-13T16:13:00.000+02:00</published><updated>2006-07-13T16:16:26.783+02:00</updated><title type='text'>[Web Designer] the best</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="www.akamarketing.com/images/template_diag.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="www.akamarketing.com/images/template_diag.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Zeldman&lt;/li&gt;&lt;li&gt;Tantek Celik&lt;/li&gt;&lt;li&gt;Molly Holzschlag&lt;/li&gt;&lt;li&gt;Jeff Veen&lt;/li&gt;&lt;li&gt;Dave Shea&lt;/li&gt;&lt;li&gt;Doug Bowman&lt;/li&gt;&lt;li&gt;Shaun Inman&lt;/li&gt;&lt;li&gt;Cameron Moll&lt;/li&gt;&lt;li&gt;Joshua Davis&lt;/li&gt;&lt;li&gt;Veerle Peiters&lt;/li&gt;&lt;li&gt;John Oxton&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-115280018566897197?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/115280018566897197/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=115280018566897197' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115280018566897197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/115280018566897197'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/07/web-designer-best.html' title='[Web Designer] the best'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-114974833090961132</id><published>2006-06-08T08:30:00.000+02:00</published><updated>2006-06-08T08:33:51.973+02:00</updated><title type='text'>[Citazioni da me stesso] vietare mai sempre</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://digilander.libero.it/animazioni/rimozione%20forzata.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://digilander.libero.it/animazioni/rimozione%20forzata.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Io nei rapporti vieterei le parole "sempre" e "mai".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;E anche la parola "vietare"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-114974833090961132?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/114974833090961132/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=114974833090961132' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/114974833090961132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/114974833090961132'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/06/citazioni-da-me-stesso-vietare-mai.html' title='[Citazioni da me stesso] vietare mai sempre'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-114856898732828784</id><published>2006-05-25T16:55:00.000+02:00</published><updated>2006-05-25T16:56:28.673+02:00</updated><title type='text'>[Parole] feticcio</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.nital.it/sguardi/38/gallery/ramazzotti/images/03_boycrow.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.nital.it/sguardi/38/gallery/ramazzotti/images/03_boycrow.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="descrizione"&gt;cosa o persona fatta oggetto di culto fanatico o di eccessiva stima da gruppi sociali, correnti religiose, artistiche &lt;span title="eccetera"&gt;ecc.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-114856898732828784?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/114856898732828784/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=114856898732828784' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/114856898732828784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/114856898732828784'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/05/parole-feticcio.html' title='[Parole] feticcio'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-114840833401670824</id><published>2006-05-23T20:16:00.000+02:00</published><updated>2006-05-23T20:18:54.240+02:00</updated><title type='text'>[Poesia] la fine è il soggetto</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://fantasyavatar.altervista.org/folletti/folletti_m_01.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://fantasyavatar.altervista.org/folletti/folletti_m_01.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vagano. Fuggono. Si nascondono sotto pieghe che non possono essere scoperte dall'ingenuo nè viste dal vigliacco.&lt;br /&gt;Sono come luci lampeggianti di una autoambulanza. Intermittenti. Sfottori. Cinici. Giocosi.&lt;br /&gt;Tutto fanno pur di prendere in giro la parola "voglio". E in loro c'è un sorriso.&lt;br /&gt;Malefico. Benefico. Ai più stolti: indefinibile. Perchè nascondendosi fanno emergere&lt;br /&gt;la crudezza della realtà. Che abbaglia, seria, sul suo trono.&lt;br /&gt;Eppure si muovono con rumore mentre si vestono di ombre. Con voce rauca tentano di suggerirsi l'un&lt;br /&gt;l'altro un "shhhh..".&lt;br /&gt;Qual è il mezzo per scovarvi, per divertirmi con voi ?&lt;br /&gt;Io non ne conosco altri oltre alla follia. Ma la follia è facile, rapida. Tutti l'hanno. Non si tratta&lt;br /&gt;d'altro che darle un volto. Vorrei trovare un altro modo. Non necessariamente più semplice.&lt;br /&gt;Sostanzialmente diverso. Non ho acutezza per udire i vostri suggerimenti nè saggezza per vedere&lt;br /&gt;le briciole che mi lasciate per strada. Altri son giunti a raccoglierle. Prima di me, più veloci. Più nuovi.&lt;br /&gt;&lt;br /&gt;Vi ritrovo chiari, numerosi, nudi, nella mia storia. Nel ricordo non avete luoghi dove celarvi. E in fondo vi ho scoperto così: piccoli. Le ombre ora vi danno forza, illusione. Potere. Ma non è sudore delle vostre mani. Quindi siate pure orgogliosi, altezzosi, stronzi. Io so chi siete. Siete nati nei cespugli del mio giardino, sui tabelloni di qualche gioco. Tra i palloni. Nell'attrito tra l'asfalto e la porta s'è formata una scintilla, un calore che ha iniziato la successione. Volate in cielo nei giorni d'estate. Ma non avete ali robuste: vi bagnate nel mare. Con sorriso innocente, fradici, starnutite.&lt;br /&gt;Vi sento ora, mentre scrivo queste parole. Siete attorno a me. Uno, il più impaziente, è appoggiato sulla spalla e spia le parole ancora fresche di inchiostro.&lt;br /&gt;Lascerò qui i miei fogli. Forse domani li avrete fatti sparire. Perché nei momenti delle grandi emozioni voi diventate amici. Mi curate. Mi cullate. Diventate ciò che vi rifiutate di essere: sogni.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-114840833401670824?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/114840833401670824/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=114840833401670824' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/114840833401670824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/114840833401670824'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/05/poesia-la-fine-il-soggetto.html' title='[Poesia] la fine è il soggetto'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13046644.post-114742709368418916</id><published>2006-05-12T11:44:00.000+02:00</published><updated>2006-05-12T11:44:53.833+02:00</updated><title type='text'>[Citazioni da me stesso] ditelo a vostra moglie 2..</title><content type='html'>Potrei darti tutto cio' che non mi chiedi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13046644-114742709368418916?l=tommasotorti.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tommasotorti.blogspot.com/feeds/114742709368418916/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13046644&amp;postID=114742709368418916' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/114742709368418916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13046644/posts/default/114742709368418916'/><link rel='alternate' type='text/html' href='http://tommasotorti.blogspot.com/2006/05/citazioni-da-me-stesso-ditelo-vostra.html' title='[Citazioni da me stesso] ditelo a vostra moglie 2..'/><author><name>Tommaso Torti</name><uri>http://www.blogger.com/profile/15626307910612748887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://3.bp.blogspot.com/_zT27dV8plPs/SMfv7TcYuCI/AAAAAAAAACI/OMQxTusnnrg/S220/ok.jpg'/></author><thr:total>0</thr:total></entry></feed>
