<?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-5244778450511333940</id><updated>2011-07-30T16:05:13.962+02:00</updated><category term='ruby'/><category term='continuous integration'/><category term='swing'/><category term='ebay'/><category term='sony'/><category term='picasa web'/><category term='spring mvc'/><category term='tecnologia'/><category term='cowon a3'/><category term='ebook'/><category term='grails'/><category term='prs-505'/><category term='griffon'/><category term='liferay'/><category term='at work'/><category term='parrot rki8400'/><category term='wicket'/><category term='nokia n80'/><category term='shell'/><category term='web 2.0'/><category term='rails'/><category term='spam'/><category term='puppy linux'/><category term='manning'/><category term='sql dialect'/><category term='hibernate'/><category term='me'/><category term='geotagging'/><category term='java'/><category term='clarion FB289RBT'/><category term='humour'/><category term='video capovolto'/><category term='jface'/><category term='web framework'/><category term='javaday'/><category term='stripes'/><category term='beankeeper'/><category term='swt'/><category term='google documenti'/><category term='rcp'/><category term='click'/><category term='architetture sw'/><category term='ui'/><category term='blogger'/><category term='meedio'/><category term='sql'/><category term='groovy'/><category term='flickr'/><category term='rai'/><category term='promemoria'/><category term='ffdshow'/><category term='syntax highlighter'/><title type='text'>Pietro Bonanno does blogs</title><subtitle type='html'>Tecnofilo, tecnocrate, tecnomane</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-796173336351096011</id><published>2010-01-29T11:45:00.001+01:00</published><updated>2010-01-29T11:45:10.262+01:00</updated><title type='text'>Adoro lo spam/3</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { border: solid 2px #000000; }.flickr-yourcomment { }.flickr-frame { text-align: left; padding: 3px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt;	&lt;a href="http://www.flickr.com/photos/pietrobonanno/4312927091/" title="photo sharing"&gt;&lt;img src="http://farm5.static.flickr.com/4007/4312927091_8ebba26773.jpg" class="flickr-photo" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;span class="flickr-caption"&gt;&lt;a href="http://www.flickr.com/photos/pietrobonanno/4312927091/"&gt;Adoro lo spam/3&lt;/a&gt;, inserito originariamente da &lt;a href="http://www.flickr.com/people/pietrobonanno/"&gt;Pietro Bonanno&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;				&lt;p class="flickr-yourcomment"&gt;	Cosa vorranno da me?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-796173336351096011?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/796173336351096011/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=796173336351096011&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/796173336351096011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/796173336351096011'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2010/01/adoro-lo-spam3.html' title='Adoro lo spam/3'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm5.static.flickr.com/4007/4312927091_8ebba26773_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-7284120366008967063</id><published>2009-11-26T14:24:00.000+01:00</published><updated>2009-11-26T14:24:13.149+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='prs-505'/><title type='text'>Broken</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_vVsX37Ma7G4/Sw6A8dD5BUI/AAAAAAAAAQo/Mjd4C7M6SaU/s1600/broken-prs-505.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_vVsX37Ma7G4/Sw6A8dD5BUI/AAAAAAAAAQo/Mjd4C7M6SaU/s400/broken-prs-505.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Inequivocabilmente rotto.&lt;br /&gt;Addio, compagno di lunghe letture.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-7284120366008967063?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/7284120366008967063/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=7284120366008967063&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/7284120366008967063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/7284120366008967063'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2009/11/broken.html' title='Broken'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vVsX37Ma7G4/Sw6A8dD5BUI/AAAAAAAAAQo/Mjd4C7M6SaU/s72-c/broken-prs-505.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-6232843894341203068</id><published>2009-11-16T12:09:00.005+01:00</published><updated>2009-11-16T12:55:52.525+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot rki8400'/><category scheme='http://www.blogger.com/atom/ns#' term='clarion FB289RBT'/><title type='text'>Il tecnofilo era inquieto...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vVsX37Ma7G4/SwE82HlN57I/AAAAAAAAAQg/T__-U431qA0/s1600/autoradio-rki8400.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 250px; height: 250px;" src="http://1.bp.blogspot.com/_vVsX37Ma7G4/SwE82HlN57I/AAAAAAAAAQg/T__-U431qA0/s400/autoradio-rki8400.jpg" alt="" id="BLOGGER_PHOTO_ID_5404667928267057074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;...per mancanza di nuovi gingilli. Così, per il proprio compleanno, ha chiesto alla propria moglie rassegnata di regalargli questo gioiello (almeno sulla carta) di tecnologia: il &lt;a href="http://www.parrot.com/it/prodotti/kitsvivavoce/parrot-rki8400"&gt;Parrot RKi 8400&lt;/a&gt;.&lt;br /&gt;Lo ha trovato mentre si informava sulle caratteristiche del &lt;a href="http://www.clarion.com/it/it/products/2008/audio/source_unit/1din/FB289RBT/it-it-product-pf_1172389226967.html"&gt;Clarion FB289RBT&lt;/a&gt;, rivelatosi invece una clamorosa occasione mancata da parte  di Clarion.&lt;br /&gt;Entrambi sono delle autoradio prive di lettore CD, e dedicate unicamente all'uso tramite SD card o USB, che è quello che cercavo. Altra priorità era la funzionalità vivavoce, che entrambi supportano, con il Parrot che chiaramente svetta per la quantità di funzioni.&lt;br /&gt;Quello che mi ha deluso del Clarion però è:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Un solo ingresso di tipo SD, e neanche SDHC! Supporta al massimo le schede da 2 GB. Assolutamente ridicolo, fra qualche mese sarà pure difficile trovarle sul mercato.&lt;/li&gt;&lt;li&gt;Non può scorrere all'interno di un brano, si può solo saltare da un brano all'altro&lt;/li&gt;&lt;li&gt;Se arriva una chiamata in vivavoce, interrompe il brano e, alla fine, lo fa ripartire dall'inizio.&lt;/li&gt;&lt;li&gt;Apparentemente, il firmware non è aggiornabile&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Sono tutti difetti che in un dispositivo prevalentemente software, come questo, dovrebbero essere assenti &lt;span style="font-style: italic;"&gt;by design&lt;/span&gt;. I 2 GB di limite, poi sono veramente ingiustificati.&lt;br /&gt;&lt;br /&gt;Il Parrot RKi 8400 invece ha 4 ingressi: SD, USB, iPod/iPhone (qualsiasi modello di iPod!), e AUX esterno (&lt;span style="font-style: italic;"&gt;retrò&lt;/span&gt;, ma a qualcuno potrebbe servire). Il manuale dice esplicitamente che le schede SD/SDHC possono avere &lt;span style="font-style: italic;"&gt;qualsiasi&lt;/span&gt; dimensione.&lt;br /&gt;Prende le copertine se presenti nella cartella, permette (dai!!) di scorrere il brano, e la Parrot rilascia periodicamente nuove versioni del firmware.&lt;br /&gt;Pare, a onor del vero, che soffra anche di vari bug, ma mi è arrivato solo oggi e devo verificare.&lt;br /&gt;&lt;br /&gt;Acquistato a € 278,95, spedizione inclusa, presso i gentilissimi venditori del sito &lt;a href="http://www.oikka.it"&gt;http://www.oikka.it&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Spero anche di potere scrivere una recensione, appena l'avrò spremuto un pò.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-6232843894341203068?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/6232843894341203068/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=6232843894341203068&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/6232843894341203068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/6232843894341203068'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2009/11/il-tecnofilo-era-inquieto.html' title='Il tecnofilo era inquieto...'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vVsX37Ma7G4/SwE82HlN57I/AAAAAAAAAQg/T__-U431qA0/s72-c/autoradio-rki8400.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-472640221205458769</id><published>2009-05-13T17:43:00.005+02:00</published><updated>2009-05-20T11:29:20.122+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaday'/><category scheme='http://www.blogger.com/atom/ns#' term='web framework'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='griffon'/><title type='text'>Javaday 2009</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vVsX37Ma7G4/SgrtadAnqUI/AAAAAAAAAOw/nyTC494lWcI/s1600-h/JavaDay-logo.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 268px; height: 86px;" src="http://1.bp.blogspot.com/_vVsX37Ma7G4/SgrtadAnqUI/AAAAAAAAAOw/nyTC494lWcI/s400/JavaDay-logo.gif" alt="" id="BLOGGER_PHOTO_ID_5335337747293382978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Venerdì 8 ho fatto una presentazione al &lt;a href="http://www.javaday.it/"&gt;JavaDay&lt;/a&gt; &lt;a href="http://www.sputnix.it/Linux_Meeting2009.html"&gt;svolto&lt;/a&gt; a Palermo, parlando di &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;, &lt;a href="http://grails.org/"&gt;Grails&lt;/a&gt; e, un pelino, di &lt;a href="http://griffon.codehaus.org/"&gt;Griffon&lt;/a&gt;.&lt;br /&gt;Per l'occasione ho realizzato da zero una semplice piattaforma di blog con Grails. In &lt;span style="font-style: italic;"&gt;mezz'ora&lt;/span&gt; (naturalmente avevo già le idee chiare e un pò di codice pronto).&lt;br /&gt;E posso assicurare che non sono affatto un guru, né Groovy né Grails.&lt;br /&gt;Il codice è disponibile &lt;a href="http://svn2.xp-dev.com/svn/pbonanno-public/javaday2009"&gt;qui&lt;/a&gt;, come repository Subversion.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update del 20/05/2009&lt;/span&gt;: Includo anche le slide, create con &lt;a href="http://docs.google.com"&gt;Google Documents&lt;/a&gt;. Assolutamente superflue però mi piaceva usare la funzione di pubblicazione :)...&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;iframe src='http://docs.google.com/EmbedSlideshow?docid=af3xcdfvg4p_117dss9wqq8' frameborder='0' width='410' height='342'&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-472640221205458769?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/472640221205458769/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=472640221205458769&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/472640221205458769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/472640221205458769'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2009/05/javaday-2009.html' title='Javaday 2009'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vVsX37Ma7G4/SgrtadAnqUI/AAAAAAAAAOw/nyTC494lWcI/s72-c/JavaDay-logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-8751419235286896203</id><published>2009-05-07T15:39:00.003+02:00</published><updated>2009-05-07T15:59:17.932+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Un lettore di feed in un riga di codice</title><content type='html'>Ok, l'esperienza utente sarà carente ma è notevole comunque:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprinter"&gt;new XmlSlurper().parse('http://www.corriere.it/rss/ultimora.xml').channel.item.each {println "${it.pubDate}: ${it.title}"}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Se poi uno ha bisogno di fare una ricerca all'interno dei titoli:&lt;br /&gt;&lt;pre class="prettyprinter"&gt;&lt;br /&gt;new XmlSlurper().parse('http://www.corriere.it/rss/ultimora.xml').channel.item.findAll({it.title =~ 'napolitano'}).each {println "${it.pubDate}: ${it.title}"}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; è veramente sensazionale.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-8751419235286896203?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/8751419235286896203/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=8751419235286896203&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/8751419235286896203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/8751419235286896203'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2009/05/un-lettore-di-feed-in-un-riga-di-codice.html' title='Un lettore di feed in un riga di codice'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-2949113163541516380</id><published>2009-04-08T17:52:00.003+02:00</published><updated>2009-04-08T18:12:27.938+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='architetture sw'/><category scheme='http://www.blogger.com/atom/ns#' term='beankeeper'/><title type='text'>Perchè Hibernate scrive nel mio DB?</title><content type='html'>Ora, farsi una domanda del genere denota una certa confusione sugli strumenti che si stanno usando, ma questo bel &lt;a href="http://blog.xebia.com/2009/04/06/why-did-hibernate-update-my-database/"&gt;post&lt;/a&gt; dice ben altro: Hibernate gestisce ottimamente la persistenza automatica dei propri dati, però ci sono dei casi in cui la scrittura avviene inaspettatamente. Per esempio il punto 2 dell'articolo, ovvero quando si esegue una query (in &lt;a href="http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html"&gt;HQL&lt;/a&gt; chiaramente). In tal caso, se Hibernate si rende conto che la query coinvolge tabelle le cui modifiche sono ancora in cache, la scarica, ovvero la scrive.&lt;br /&gt;E' ovvio, ma sono di quelle cose che diventano ovvie solo dopo esserci passato (e io lo fui).&lt;br /&gt;Un concetto sottinteso che mi sento di ribadire è: Hibernate è una bestia, chi si lamenta perchè tenta di utilizzarlo in una rubrica telefonica dovrebbe capire che sta solo subendo gli svantaggi senza fruirne i vantaggi.&lt;br /&gt;Gli &lt;a href="http://it.wikipedia.org/wiki/Object-relational_mapping"&gt;ORM&lt;/a&gt; cominciano a diventare vantaggiosi quando il dominio raggiunge il centinaio di entità, giusto per dare un'idea.&lt;br /&gt;&lt;br /&gt;Per problematiche più piccole, io mi sono trovato bene con &lt;a href="http://beankeeper.netmind.hu/index.php"&gt;BeanKeeper&lt;/a&gt;, ma ce ne sono altri (che non conosco).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-2949113163541516380?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/2949113163541516380/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=2949113163541516380&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/2949113163541516380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/2949113163541516380'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2009/04/perche-hibernate-scrive-nel-mio-db.html' title='Perchè Hibernate scrive nel mio DB?'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-7665912306477114058</id><published>2009-01-21T09:53:00.007+01:00</published><updated>2010-01-29T11:55:29.003+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humour'/><category scheme='http://www.blogger.com/atom/ns#' term='rai'/><title type='text'>E quanto sarà stato fatturato al cliente?</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_vVsX37Ma7G4/SXbioBH_MbI/AAAAAAAAANc/9sBz19AwzBg/s1600-h/sitorai.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5293667589145178546" src="http://4.bp.blogspot.com/_vVsX37Ma7G4/SXbioBH_MbI/AAAAAAAAANc/9sBz19AwzBg/s400/sitorai.jpg" style="cursor: pointer; display: block; height: 233px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;Questo é quanto appare aprendo il &lt;a href="http://www.abbonamenti.rai.it/Ordinari/ModalitaPagamento.aspx"&gt;sito&lt;/a&gt; Rai per il rinnovo del Canone TV. Chi non mastica ASPX, sappia che BANKPASS non è più un metodo consentito di pagamento del Canone.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;update del 11/02/2009&lt;/span&gt;: l'errore è ancora lì, in bella vista. Nessuno di Rai, BANKPASS, o dei sistemisti/sviluppatori ha dato un'occhiata a questa pagina da almeno 20 giorni. E' assurdo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;update del 01/04/2009&lt;/span&gt;: nulla di nuovo sotto il sole. E non è un pesce d'aprile.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;update del 13/05/2009&lt;/span&gt;: indovinate?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;update del 29/01/2010&lt;/span&gt;: Toh! Hanno sistemato un pò la pagina e tolto l'insignificante dimenticanza. Vedete che serve, pagare il canone?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-7665912306477114058?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/7665912306477114058/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=7665912306477114058&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/7665912306477114058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/7665912306477114058'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2009/01/e-quanto-sar-stato-fatturato-al-cliente.html' title='E quanto sarà stato fatturato al cliente?'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vVsX37Ma7G4/SXbioBH_MbI/AAAAAAAAANc/9sBz19AwzBg/s72-c/sitorai.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-7173920882238689364</id><published>2008-12-11T12:52:00.002+01:00</published><updated>2008-12-11T12:56:14.958+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='architetture sw'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Java è morto, viva Java</title><content type='html'>C'era una volta il C++. Un linguaggio complesso, nato in un periodo in cui la OOP era in gran parte materia accademica. Il C++ (in gran parte) ha consentito di traghettare il mondo professionale dall'approccio procedurale a quello ad oggetti. Con il tempo, e con l'accumulo dei casi d'uso, il C++ è diventato sempre più ingombrante. La sua sintassi è troppo ricca di costrutti legati ad una visione a basso livello del sistema operativo, ma se devo implementare un sistema informativo e non una libreria grafica, non voglio preoccuparmi di tenere a bada allocazioni, indirizzi di memoria, buffer di file.&lt;br /&gt;Così (banalizzando molto...) nacquero gli ambienti RAD, come Visual Basic e Delphi, che portarono anche importanti evoluzioni nei linguaggi. Soprattutto Delphi (derivato dal Turbo Pascal, ok) creò forse il primo vero ambiente di sviluppo per applicazioni commerciali con una visione moderna e &lt;i&gt;ricca&lt;/i&gt; delle esperienze accumulate negli anni.&lt;br /&gt;Da lì poi si passò a Java (da cui Microsoft si ispirò per il C#) che ripulì ancora di più la sintassi creando il primo vero linguaggio ad oggetti puro (non strettamente accademico).&lt;br /&gt;&lt;br /&gt;Il C++ però non è affatto sparito, anzi. Se ci si basa sulle richieste di lavoro, il C++ arranca ma è ancora &lt;a title="tra i primi 10" href="http://www.computerweekly.com/Articles/2007/09/11/226631/sslcomputer-weekly-it-salary-survey-finance-boom-drives-it-job.htm" id="p:vt"&gt;tra i primi 10&lt;/a&gt;. Questo perchè, in ogni caso, il C++ è ancora la crosta immediatamente successiva alle API di basso livello di quasi tutti i sistemi operativi. Fornisce le spalle solide su cui appoggiarsi con altri strumenti più adatti alle esigenze degli utenti finali.&lt;br /&gt;Mi ha meravigliato scoprire quanto &lt;a title="Python" href="http://python.org/" id="w8nd"&gt;Python&lt;/a&gt; leghi bene al C++. Un linguaggio semplice, interpretato, in simbiosi con un mostro della sintassi. XBMC, un frontend per mediacenter che mi ha quasi fatto dimenticare Meedio, è scritto in C++, ma &lt;a title="si appoggia" href="http://xbmc.org/development/addons/" id="ry_b"&gt;si appoggia&lt;/a&gt; a Python per i plugin. Un'idea semplice ed efficace, che permette a chi vuole contribuire di lavorare con un editor di testo e qualche nozione di programmazione non troppo sofisticata.&lt;br /&gt;&lt;br /&gt;Dove voglio arrivare con tutto questo pippone? A me sembra che anche per Java sia arrivato il momento di diventare una solida spalla. Esistono ormai centinaia di piattaforme software scritte in Java e molte sono diventate ormai imprenscindibili per realizzare applicazioni data-oriented. &lt;a title="Spring" href="http://www.springframework.org/" id="z5_8"&gt;Spring&lt;/a&gt; e &lt;a title="Hibernate" href="http://hibernate.org/" id="f1q0"&gt;Hibernate&lt;/a&gt; sono i casi più eclatanti.&lt;br /&gt;Ma forse Java è diventato anche lui troppo "a basso livello" per le applicazioni moderne. Ormai quasi ogni specifica funzionale può essere soddisfatta assemblando mattoncini già esistenti. Un esempio è XML, che per anni è stato un surrogato a Java per questi scopi. Si assemblavano mattoni utilizzando XML. Però la relativa semplicità di XML ha fatto sì che assemblare mattoni sia diventato &lt;a title="più difficile" href="http://en.wikipedia.org/wiki/Inner-Platform_Effect" id="s35c"&gt;più difficile&lt;/a&gt; che scriverne di nuovi.&lt;br /&gt;Io ho la sensazione (molto a naso, non sono un guru o un analista di mercato), che i tempi siano maturi perchè &lt;a title="Groovy" href="http://groovy.codehaus.org/" id="c:df"&gt;Groovy&lt;/a&gt; possa diventare il linguaggio della prossima generazione di applicazioni, almeno nell'ambito dei sistemi a prevalenza open source e multipiattaforma. La semplicità di Groovy unita all'efficienza (computazionale) di Java. &lt;a title="Grails" href="http://grails.org/" id="xanj"&gt;Grails&lt;/a&gt; ne è l'esempio più riuscito.&lt;br /&gt;Chi ha pensato a &lt;a title="JavaFX" href="http://javafx.com/" id="ror."&gt;JavaFX&lt;/a&gt;, lasci perdere. Su quel terreno Java prenderà batoste dolorose.&lt;br /&gt;Da parte mia, per l'anno nuovo mi sono prefisso di convertire a Groovy il più possibile delle mie attività (vincoli aziendali permettendo). Un primo passo potrebbe essere la &lt;a title="scrittura dei test case" href="http://www.ibm.com/developerworks/java/library/j-pg11094/" id="d6f0"&gt;scrittura dei test case&lt;/a&gt; di applicazioni Java, che mi permetterebbe di valutare senza rischi le sue caratteristiche di performance. Un secondo passo potrebbe essere, giusto un esempio, una portlet in Groovy.&lt;br /&gt;Se poi ci fosse qualcosa di disponibile per Eclipse RCP, non sarebbe &lt;a href="http://pietrobonanno.blogspot.com/2008/11/un-tuffo-in-un-quintalata-di-framework.html"&gt;male&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-7173920882238689364?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/7173920882238689364/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=7173920882238689364&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/7173920882238689364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/7173920882238689364'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/12/java-morto-viva-java.html' title='Java è morto, viva Java'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-1714922147798778010</id><published>2008-11-10T17:08:00.002+01:00</published><updated>2008-11-10T17:13:17.490+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rcp'/><category scheme='http://www.blogger.com/atom/ns#' term='jface'/><category scheme='http://www.blogger.com/atom/ns#' term='swing'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='architetture sw'/><category scheme='http://www.blogger.com/atom/ns#' term='swt'/><title type='text'>Un tuffo in un'altra quintalata di framework</title><content type='html'>Ho avuto la felice idea di approfondire il tema delle applicazioni &lt;i&gt;client&lt;/i&gt; (sì, proprio quelle che non richiedono un browser per girare) su Java, perchè voglio scrivere una semplice applicazione per uso personale. Nonostante le mie competenze attuali si siano spostate sui sistemi backend, ho da sempre una passione per le interfacce utente e la loro usabilità.&lt;img style="margin: 1em 0pt 0pt 1em; float: right;" src="http://docs.google.com/File?id=af3xcdfvg4p_107shtm9bhd_b" width="201" height="150" /&gt;&lt;div&gt;Da studente realizzavo qualche semplice applicazione usando &lt;a id="vy52" href="http://it.wikipedia.org/wiki/Delphi" title="Delphi"&gt;Delphi&lt;/a&gt; di Borland, e oggi mi viene un pò da sorridere leggendo di discussioni su come realizzare &lt;i&gt;bind&lt;/i&gt;, &lt;i&gt;action&lt;/i&gt;, &lt;i&gt;riusabilità delle interfacce&lt;/i&gt;, roba che già 10 anni fa Delphi gestiva in maniera egregia.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ormai uso Java e mi trovo bene, ma la ricerca di un framework per applicazioni client non è tanto diversa che per le applicazioni web. Si trovano decine di alternative, se ne scartano altrettante per manifesto abbandono del creatore, e quelle che rimangono fanno tante cose benino, ma poche benone.&lt;br /&gt;Uno dei miei punti fermi è stata la produttività: posso anche rinunciare all'editor visuale, ma il tool che cerco non si perdere in inizializzazioni inutili, o paginate XML nel tentativo di essere sempre &lt;i&gt;sufficientemente  &lt;/i&gt;generico. Ormai i pattern tipici delle interfacce utente sono assodati, al limite il lavoro in più dovrebbe essere legato a particolari esigenze.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Intanto ho dovuto affrontare la scelta ideologica tra &lt;a id="ca_q" href="http://it.wikipedia.org/wiki/Swing_%28Java%29" title="Swing"&gt;Swing&lt;/a&gt; e &lt;a id="dc6g" href="http://it.wikipedia.org/wiki/Standard_Widget_Toolkit" title="SWT"&gt;SWT&lt;/a&gt;: il primo è il framework storico di Sun, da qualche anno rinnovato dall'introduzione di &lt;a id="hnf5" href="https://appframework.dev.java.net/" title="Swing Application Framework"&gt;Swing Application Framework&lt;/a&gt;, che completa la creazione di interfacce con un modello MVC. Il suo punto di forza è sicuramente &lt;a id="s0wz" href="http://www.netbeans.org/" title="Netbeans"&gt;Netbeans&lt;/a&gt;, con &lt;a id="ak3y" href="http://www.netbeans.org/features/java/swing.html" title="Matisse"&gt;Matisse&lt;/a&gt;, un editor visuale che spacca. La sua debolezza (ma per molti è un punto di forza) è il fatto di essere renderizzato in maniera indipendente dal sistema ospite. Io la considero una debolezza perché è più pesante, ma sopratutto perchè risulta &lt;i&gt;alieno&lt;/i&gt; nel sistema ospite, anche se &lt;a id="bmyc" href="http://www.jgoodies.com/" title="JGoodies"&gt;JGoodies&lt;/a&gt; ha dimostrato che non è necessariamente così.&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 1em 0pt 0pt 1em; float: right;" src="http://docs.google.com/File?id=af3xcdfvg4p_109ghx8bsft_b" width="178" height="163" /&gt;&lt;/div&gt;&lt;div&gt;&lt;a id="mo7n" href="http://www.eclipse.org/swt" title="SWT"&gt;SWT&lt;/a&gt;  è invece la libreria su cui è basato Eclipse. E' Java, ma è un wrap sulle API native del sistema ospite per cui, da un certo momento in poi, il rendering è affidato al sistema operativo, e la resa grafica è esattamente quella nativa. Ne beneficiano anche le performance, basta &lt;a title="confrontarne" href="http://www.javalobby.org/java/forums/t65168.html" id="oetd"&gt;confrontarne&lt;/a&gt; lo stack delle chiamate con uno Swing.&lt;/div&gt;&lt;div&gt;C'è da dire che però SWT è molto meno usato di Swing, e questo si riflette nella qualità e quantità di codice. Swing ha, oltre al citato Netbeans/Matisse, anche &lt;a id="veli" href="http://spring-rich-c.sourceforge.net/" title="Spring RCP"&gt;Spring RCP&lt;/a&gt;, un'altra delle perle di Spring Framework, che però mi pare stia languendo. Bene, una scelta in meno :-)&lt;/div&gt;&lt;div&gt;Poi ci sarebbe &lt;a id="kqof" href="http://groovy.codehaus.org/Swing+Builder" title="Groovy SwingBuilder"&gt;Groovy SwingBuilder&lt;/a&gt;, un'aggeggino molto interessante, oppure &lt;a id="kbvz" href="http://groovy.codehaus.org/Griffon" title="Griffon"&gt;Griffon&lt;/a&gt; che promette molto bene ma è ancora alla versione 0.0.1(!!).&lt;/div&gt;&lt;div&gt;Sul lato SWT c'è &lt;a id="ibjb" href="http://groovy.codehaus.org/GroovySWT" title="Groovy SWTBuilder"&gt;Groovy SWTBuilder&lt;/a&gt; ma caliamo un velo pietoso, e &lt;a id="htuk" href="http://wiki.eclipse.org/index.php/JFace" title="JFace"&gt;JFace&lt;/a&gt;. Basta.&lt;/div&gt;&lt;div&gt;JFace non è un vero e proprio framework, ma più che altro una serie di helper class per sveltire i lavori ripetitivi con SWT. Inoltre ha &lt;a id="u903" href="http://wiki.eclipse.org/index.php/JFace_Data_Binding" title="JFace Databinding"&gt;JFace Databinding&lt;/a&gt;, per legare in maniera bidirezionale modelli e UI, che sembra fatto molto bene.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tutti gli indizi portano a scegliere razionalmente Swing. Così ho scelto JFace/SWT :-)&lt;/div&gt;&lt;div&gt;I miei primi esperimenti non mi stanno deludendo, anche se la mancanza di un editor visuale si fa sentire. Però c'è &lt;a id="vo4t" href="http://www.miglayout.com/" title="MigLayout"&gt;MigLayout&lt;/a&gt;, e la sensazione è che forse un tool visuale fa più danni che altro. Basta dare un'occhiata al codice generato da Matisse (non per la qualità, ma per la quantità).&lt;/div&gt;&lt;div&gt;All'inizio si risparmia molto tempo, a lungo andare il codice diventa un papocchio.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;img id="y3_s" style="margin: 1em 0pt 0pt 1em; width: 160px; height: 78.9427px; float: right;" src="http://docs.google.com/File?id=af3xcdfvg4p_110ddgd86qg_b" /&gt;Non è finita: per chi ha voglia di emozioni forti ci sono &lt;a title="Netbeans Platform" href="http://platform.netbeans.org/" id="j5ex"&gt;Netbeans Platform&lt;/a&gt; e &lt;a title="Eclipse RCP" href="http://www.eclipse.org/rcp/" id="a92q"&gt;Eclipse RCP&lt;/a&gt;. In pratica si prendono gli scheletri base dei due ambienti (concepiti alla base per essere contenitori generici di plugin di vario tipo, per capirci l'intero Java IDE di Eclipse è un grosso insieme di plugin) e si arricchiscono con i vari plugin forniti assieme per creare software di qualsiasi livello (non certo i gestionali per la pizzeria, comunque). Entrambi gli ambienti &lt;a title="snocciolano" href="http://platform.netbeans.org/screenshots.html" id="kzsh"&gt;snocciolano&lt;/a&gt; &lt;a title="esempi" href="http://www.eclipse.org/community/rcpos.php" id="nu.b"&gt;esempi&lt;/a&gt; di tutto rispetto.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dietro i già molti prodotti che ho citato ne ho visto almeno altrettanti, alcuni interessanti (&lt;a title="Java Builders" href="http://code.google.com/p/javabuilders/" id="j:7q"&gt;Java Builders&lt;/a&gt;, &lt;a title="UFace" href="http://code.google.com/p/uface/" id="vi2."&gt;UFace&lt;/a&gt;) alcuni decaduti.&lt;/div&gt;&lt;div&gt;Non voglio fare il classico reazionario informatico (ah! il Clipper...ah! il Commodore 64...ah! l'Assembler), ma un pò mi manca il buon vecchio Delphi...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-1714922147798778010?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/1714922147798778010/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=1714922147798778010&amp;isPopup=true' title='8 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/1714922147798778010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/1714922147798778010'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/11/un-tuffo-in-un-quintalata-di-framework.html' title='Un tuffo in un&amp;#39;altra quintalata di framework'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-3721245449899058110</id><published>2008-11-10T14:34:00.002+01:00</published><updated>2008-11-10T14:37:45.620+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cowon a3'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Il tecnofilo colpisce ancora</title><content type='html'>Approfittando di un viaggio negli Stati Uniti di un mio amico, ho preso il lettore dei lettori: il &lt;a title="Cowon A3" href="http://www.cowonglobal.com/product_wide/product_A3_feature.php" id="wpzh"&gt;Cowon A3&lt;/a&gt; con 60 GB di disco.&lt;br /&gt;&lt;div id="elbl" style="padding: 1em 0pt; text-align: center;"&gt;&lt;img src="http://docs.google.com/File?id=af3xcdfvg4p_106hk7p26dd_b" width="458" height="344" /&gt;&lt;/div&gt;Grazie al cambio Euro/Dollaro la spesa complessiva è stata di € 270. Non mi dilungo sulle caratteristiche, dato che in giro si &lt;a title="trovano" href="http://www.google.it/search?q=cowon+a3+review" id="jz.g"&gt;trovano&lt;/a&gt; recensioni a iosa. Sottolineo solo alcuni punti:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Il display lascia senza fiato&lt;/li&gt;&lt;li&gt;Anche l'audio&lt;/li&gt;&lt;li&gt;Anche la dotazione di cavi (non c'è collegamento che non sia contemplato da uno dei cavi inclusi)&lt;/li&gt;&lt;li&gt;Il software è ridicolmente spartano&lt;/li&gt;&lt;li&gt;La ricarica via USB è una chimera (e il caricabatterie è troppo ciccione per un dispositivo &lt;i&gt;portable&lt;/i&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Però l'USB Host è una figata&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/5244778450511333940-3721245449899058110?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/3721245449899058110/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=3721245449899058110&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/3721245449899058110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/3721245449899058110'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/11/il-tecnofilo-colpisce-ancora.html' title='Il tecnofilo colpisce ancora'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-9061846034204793778</id><published>2008-09-19T09:31:00.002+02:00</published><updated>2008-09-19T09:34:58.537+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humour'/><category scheme='http://www.blogger.com/atom/ns#' term='spam'/><title type='text'>Adoro lo spam</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { border: solid 2px #000000; }.flickr-yourcomment { }.flickr-frame { text-align: left; padding: 3px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/pietrobonanno/2867575238/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3067/2867575238_05218b9cc4.jpg" class="flickr-photo" alt="" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;span class="flickr-caption"&gt;&lt;a href="http://www.flickr.com/photos/pietrobonanno/2867575238/"&gt;Adoro lo spam&lt;/a&gt;, inserito originariamente da &lt;a href="http://www.flickr.com/people/pietrobonanno/"&gt;Pietro Bonanno&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;    &lt;p class="flickr-yourcomment"&gt; Alcuni, perlomeno :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-9061846034204793778?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/9061846034204793778/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=9061846034204793778&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/9061846034204793778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/9061846034204793778'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/09/adoro-lo-spam.html' title='Adoro lo spam'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3067/2867575238_05218b9cc4_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-3768314667945808427</id><published>2008-09-01T22:58:00.001+02:00</published><updated>2008-09-01T23:02:14.304+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='spring mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='architetture sw'/><category scheme='http://www.blogger.com/atom/ns#' term='beankeeper'/><title type='text'>BeanKeeper, si diceva...</title><content type='html'>&lt;div id="dddh"&gt;           Con questo triste tentativo di riagganciarmi a quanto scritto 3 mesi fa, parlo un pò di BeanKeeper. Si trova poco in rete, e mi spiace. Questa libreria è semplice, razionale, con qualche chicca non facilmente ottenibile con le librerie più blasonate.  Faccio qualche esempio: BK gestisce in maniera &lt;i id="s5_."&gt;assolutamente&lt;/i&gt; trasparente il versioning del modello, ma anche dei dati (&lt;a title="historical data" href="http://netmind.hu/persistence/doc/beankeeper_8.html#SEC41" id="fm8-"&gt;historical data&lt;/a&gt;). Ciò vuol dire che BK tiene traccia delle modifiche al modello (es. aggiunta o rimozione di property), ma anche delle modifiche ai dati. Come spiega la documentazione, le operazioni non avvengono mai sovrascrivendo dati esistenti, bensì aggiungendo i nuovi dati assieme ai vecchi. Con una banale sintassi, è possibile poi interrogare il DB nello stato in cui si trovava ad una certa data e ora nel passato. Niente male, anche se, &lt;i id="n1v1"&gt;pare&lt;/i&gt;, è un meccanismo non disattivabile e quindi sarebbe una ridondanza, dove non richiesto.    Poi, gestisce nativamente cluster di webserver con la stessa applicazione che accede ad uno stesso DB:  &lt;div id="r8d:" style="padding: 1em 0pt; text-align: center;"&gt;&lt;a id="pnzu" href="http://docs.google.com/File?id=af3xcdfvg4p_103cf65z3n6_b" target="_blank"&gt;&lt;img id="pnzu0" style="width: 595px; height: 362px;" src="http://docs.google.com/File?id=af3xcdfvg4p_103cf65z3n6_b" /&gt;&lt;/a&gt;&lt;/div&gt; L'oggetto &lt;a title="Store" href="http://netmind.hu/persistence/apidoc/hu/netmind/persistence/Store.html" id="x3d."&gt;Store&lt;/a&gt; che si occupa della persistenza, in un Web server, gira in un thread separato quindi è esso stesso un servizio raggiungibile dagli altri Store del cluster. Il più vecchio viene assunto a coordinatore del gruppo e &lt;a title="gestisce" href="http://netmind.hu/persistence/doc/beankeeper_10.html#SEC46" id="fr3m"&gt;gestisce&lt;/a&gt; transazioni e lock degli oggetti. Ancora una volta non serve nessun intervento da parte dello sviluppatore.  In realtà c'è un piccolo effetto indesiderato: ogni volta che si fa un deploy della web application, si deve intercettare il servizio Store e chiuderlo. Chi usa Spring, può approfittare del ContextLoaderListener, necessario a inizializzare Spring MVC.  Io ho definito una classe derivata, e ridefinito il metodo public void contextDestroyed(ServletContextEvent event):    &lt;pre id="twua" class="prettyprint"&gt;    public void contextDestroyed(ServletContextEvent event) {&lt;br /&gt;&lt;br /&gt;       super.contextDestroyed(event);&lt;br /&gt;&lt;br /&gt;       XmlWebApplicationContext context = (XmlWebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(servletContext);&lt;br /&gt;&lt;br /&gt;       context.refresh();&lt;br /&gt;&lt;br /&gt;       // A questo punto si recupera lo Store dal proprio context di Spring&lt;br /&gt;      Store store = ...&lt;br /&gt;&lt;br /&gt;       store.close();&lt;br /&gt;   }&lt;/pre&gt; L'utilizzo di tutti i giorni è veramente banale: qualsiasi JavaBean può essere salvato su DB con la semplice istruzione  &lt;div id="lj:b0" align="center"&gt;&lt;span style="font-family: Courier New;font-family:Courier New;" id="ruph" &gt;store.save(theBean);&lt;/span&gt; &lt;/div&gt; non serve altro. BK si collega al DB, crea le tabelle se non esistono (tra cui un discreto numero di tabelle di supporto), e inserisce i dati.  Se il vostro bean contiene una legame 1-M con un altro bean (per esempio una proprietà di tipo List), BK si occupa della persistenza anche di questa (e di tutti i bean contenuti). Al caricamento, la lista verrà gestità come una LazyList, un'implementazione di List che carica gli oggetti a lotti di 30, solo se fisicamente richiesti.  Tanta semplicità ha i suoi lati oscuri:  &lt;ul id="dl9-1"&gt;&lt;li id="dl9-2"&gt;le operazioni di lettura e scrittura in genere coinvolgono più operazioni (dettagliatamente descritte nella documentazione), necessarie a mantenere tutta una serie di metadati&lt;/li&gt;&lt;li id="dl9-3"&gt;molte funzionalità non sono configurabili (es. il lazy loading, il clustering, ...)&lt;/li&gt;&lt;li id="yd2t"&gt;i caricamenti dei bean soffrono del problema &lt;i id="hhum"&gt;N+1 SELECT&lt;/i&gt;: se una classe A ha una relazione 1-M con una classe B, il caricamento di un'istanza della classe A comporta 1 SELECT per essa più N SELECT per le N istanze di classe B (totale N+1 SELECT). Se si carica poi una lista di K istanze di classe A, il numero di query diventa K*(N+1) il che diventa rapidamente ingestibile. Hibernate, per esempio, permette di gestire il problema attraverso &lt;u id="h8du"&gt;&lt;i id="h8du0"&gt;outer join&lt;/i&gt;&lt;/u&gt; (un solo gigantesco caricamento). Purtroppo BK non offre alternative...&lt;/li&gt;&lt;li id="dp7l"&gt;il supporto è ottimo, ma la comunità è inesistente. La mailing list conta una decina di post al mese. Di conseguenza l'uso in software critici ne viene scoraggiato e qualche baco di tanto in tanto affiora. &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;Io l'ho usato in un progetto non particolarmente complesso, con piccole esigenze di persistenza. In queste condizioni BK si sta comportando ottimamente, risparmiandomi ore di lavoro senza nessuna reale contropartita. Per progetti Web non vitali e per software client gestionali medio-piccoli è l'ideale. Lo stesso autore &lt;a title="Robert Brautigam" href="mailto:robert.brautigam@netmind.hu" id="hq1m"&gt;Robert Brautigam&lt;/a&gt; ne incoraggia l'uso in problematiche semplici, mentre non lo reputa adatto a progetti complessi. Tanto di cappello alla sua onestà intellettuale. &lt;div id="dddh1"&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-3768314667945808427?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/3768314667945808427/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=3768314667945808427&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/3768314667945808427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/3768314667945808427'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/09/con-questo-triste-tentativo-di.html' title='BeanKeeper, si diceva...'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-3650603566707837055</id><published>2008-09-01T16:11:00.004+02:00</published><updated>2008-09-01T16:16:47.895+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='google documenti'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Prova di invio da Google Documenti</title><content type='html'>Questo post è scritto su &lt;a title="Google Documenti" href="http://docs.google.com/" id="p:bj"&gt;Google Documenti&lt;/a&gt; e poi postato attraverso la funzione Pubblica.  E' abbastanza semplice: dalla pagina di scrittura del documento, si preme su &lt;b id="j8od"&gt;Condividi&lt;/b&gt;&amp;gt;&lt;b id="j8od0"&gt;Pubblica come pagina web...&lt;/b&gt;  Qui, la prima volta che si usa il servizio, bisogna specificare la posizione del proprio blog (sia hosted che sul proprio spazio) e le credenziali di accesso.  Le volte successive, basta tornare su&lt;b id="zm_j"&gt; Condividi&lt;/b&gt;&amp;gt;&lt;b id="zm_j0"&gt;Pubblica come pagina web...&lt;/b&gt; e premere su &lt;b id="lcvj"&gt;Pubblica sul blog&lt;/b&gt;.  Se poi servisse una modifica a livello più basso, ad esempio per modificare il CSS, basta andare sul menù &lt;b id="r3g4"&gt;Modifica&lt;/b&gt;&amp;gt;&lt;b id="r3g40"&gt;Modifica HTML&lt;/b&gt;. In questo modo posso abilitare i CSS per i frammenti di codice che pubblico:    &lt;pre id="r3g41" class="prettyprint"&gt;&amp;lt;prova&amp;gt;&lt;br /&gt;&amp;lt;di&amp;gt;&lt;br /&gt;&amp;lt;formattazione&amp;gt;&lt;br /&gt;   &amp;lt;XML/&amp;gt;&lt;br /&gt;&amp;lt;/formattazione&amp;gt;&lt;br /&gt;&amp;lt;/di&amp;gt;&lt;br /&gt;&amp;lt;/prova&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;   Questo potrebbe consentirmi di togliermi dai piedi l'editor di Blogger, scomodo e (almeno mi sembra) bacato.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;: Qualche ritocco da Blogger serve cmq, a livello di formattazione del testo (molto poco) e di inserimento delle etichette, ma direi che l'esperimento è riuscito :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-3650603566707837055?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/3650603566707837055/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=3650603566707837055&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/3650603566707837055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/3650603566707837055'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/09/questo-post-scritto-su-google-documenti.html' title='Prova di invio da Google Documenti'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-5254534310954992773</id><published>2008-05-30T12:46:00.016+02:00</published><updated>2008-05-30T16:02:08.480+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='at work'/><category scheme='http://www.blogger.com/atom/ns#' term='spring mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='liferay'/><category scheme='http://www.blogger.com/atom/ns#' term='web framework'/><category scheme='http://www.blogger.com/atom/ns#' term='architetture sw'/><category scheme='http://www.blogger.com/atom/ns#' term='beankeeper'/><title type='text'>Prêt-à-portlét</title><content type='html'>Il progetto su cui sto lavorando adesso prevede un portale B2B da cui un fornitore può offrire dei microservizi ad altre, fornendogli i relativi moduli per la configurazione e l'inserimento dei dati necessari al servizio stesso.&lt;br /&gt;Dopo un giro tra le alternative ho optato per &lt;a href="http://www.liferay.com/"&gt;Liferay&lt;/a&gt;, un prodotto che conoscevo ma che non immaginavo fosse arrivato al livello a cui è.&lt;br /&gt;Probabilmente è anche sovrabbondante per gli scopi del progetto, però supporta lo standard &lt;a href="http://en.wikipedia.org/wiki/JSR_168"&gt;JSR-168&lt;/a&gt;, che consente di scrivere portlet indipendenti dal portale in cui vengono pubblicati.&lt;br /&gt;Per chiarire meglio, un portale JSR-168 consente di ospitare nelle proprie pagine delle portlet, ovvero delle porzioni di pagina Web autonome che implementano un servizio (news, quotazioni di borsa, ma anche un blog, un wiki o un forum).&lt;br /&gt;Un esempio di portlet è &lt;a href="http://developers.sun.com/portalserver/reference/techart/jsr168/portlets.gif"&gt;questo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Scelta la tecnologia e il portale, mi mancava ancora il framework per implementare le portlet. Liferay ha un proprio approccio, ma lo trovo pesante e di certo non orientato a produrre portlet indipendenti dal portale.&lt;br /&gt;&lt;br /&gt;Così ho scelto &lt;a href="http://opensource.atlassian.com/confluence/spring/display/JSR168/Home"&gt;Spring MVC Portlet&lt;/a&gt;. Non conoscevo Spring MVC, ma conosco Spring. Spring è Il Framework. E' l'infrastruttura più leggera ed elastica  che abbia mai provato. Migliora in maniera drastica la produttività e la qualità del codice pur rimanendo leggero e discreto.  E' come Alfred per Bruce Wayne :).&lt;br /&gt;&lt;br /&gt;Spring MVC Portlet è stata l'ennesima conferma. Dopo una configurazione iniziale non banale, ma &lt;i&gt;logica&lt;/i&gt;, scrivere portlet è stata un'esperienza gratificante.&lt;br /&gt;Spring MVC Portlet è organizzato come Spring MVC e ne riutilizza delle parti:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_vVsX37Ma7G4/SD_yhd7oxcI/AAAAAAAAAH8/gYSXhJI1-Jk/s1600-h/mvc.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_vVsX37Ma7G4/SD_yhd7oxcI/AAAAAAAAAH8/gYSXhJI1-Jk/s320/mvc.png" alt="" id="BLOGGER_PHOTO_ID_5206146351047951810" border="0" /&gt;&lt;/a&gt;L'immagine è tratta dalla &lt;a href="http://static.springframework.org/spring/docs/2.0.1/reference/mvc.html"&gt;documentazione&lt;/a&gt; di Spring MVC, ma per grandi linee  descrive bene anche Spring MVC Portlet.&lt;br /&gt;Il gestore di tutto è il &lt;i&gt;Front Controller&lt;/i&gt; (chiamato &lt;i&gt;DispatcherPortlet&lt;/i&gt; nel framework) che riceve le richieste e le smista ai &lt;i&gt;Controller&lt;/i&gt; o alle &lt;i&gt;View&lt;/i&gt;.&lt;br /&gt;Le regole di smistamento sono gestite in maniera limpida attraverso la configurazione XML.&lt;br /&gt;Uno dei problemi è stato interagire con Liferay. E' vero che esiste lo standard, ma tanti servizi, come la gestione degli utenti, la fase di autenticazione, ecc sono lasciate ai vendor. Così ho seguito lo Spring-pensiero: ho implementato una interfaccia &lt;b&gt;PortalSupport&lt;/b&gt; con le varie richieste di servizio al portale, e poi una sua implementazione &lt;b&gt;LiferaySupport&lt;/b&gt;, che è definita nel context della portlet:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;bean id=&amp;quot;portalSupport&amp;quot; class=&amp;quot;example.theportlet.portal.liferay.LiferayPortalSupport&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In questo modo, una classe che deve interagire con il portale dichiara una proprietà di tipo &lt;b&gt;PortalSupport&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;private PortalSupport portalSupport;&lt;br /&gt;&lt;br /&gt;public PortalSupport getPortalSupport() {&lt;br /&gt;return portalSupport;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setPortalSupport(PortalSupport portalSupport) {&lt;br /&gt;this.portalSupport = portalSupport;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;e dal context posso iniettare la particolare implementazione dove serve:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;bean id=&amp;quot;baseControllerTemplate&amp;quot; abstract=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;property name=&amp;quot;portalSupport&amp;quot; ref=&amp;quot;portalSupport&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Semplice, elegante, chiaro. Che è anche l'essenza di Spring.&lt;br /&gt;&lt;br /&gt;Infine mi sono occupato della persistenza. Nei tipi di servizi da realizzare, il dominio dei dati è molto semplice, non più di 5-6 entità, con le classiche associazioni &lt;i&gt;una a molti&lt;/i&gt;, &lt;i&gt;uno a uno&lt;/i&gt;, ecc.&lt;br /&gt;Non mi andava di usare Hibernate, francamente troppo complesso per un problema del genere, ma neanche SQL puro con tutti i suoi problemi di dialetti, script di DDL ecc.&lt;br /&gt;Così, cercando, ho trovato &lt;a href="http://netmind.hu/persistence/"&gt;Beankeeper&lt;/a&gt;. Signori, che ne dite di una libreria a cui basta dire:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;store = new Store("org.hsqldb.jdbcDriver","jdbc:hsqldb:file:testdb");&lt;br /&gt;&lt;br /&gt;Person person = new Person();&lt;br /&gt;person.setFirstName(firstName);&lt;br /&gt;person.setLastName(lastName);&lt;br /&gt;store.save(person);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;per salvare su DB il bean Person? Nota bene, non c'è codice nascosto né operazioni a priori. Si prende un DB vuoto, si prende il primo bean che passa, lo si passa a BeanKeeper e lui crea le tabelle analizzando il bean e lo salva. Punto. Stop.&lt;br /&gt;Supporta automaticamente relazioni, ereditarietà, caricamento lazy, e ha un semplice linguaggio OQL.&lt;br /&gt;&lt;br /&gt;Non è tutto rose e fiori, ma ne scriverò in un post a parte.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-5254534310954992773?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/5254534310954992773/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=5254534310954992773&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/5254534310954992773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/5254534310954992773'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/05/prt-portlt.html' title='Prêt-à-portlét'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vVsX37Ma7G4/SD_yhd7oxcI/AAAAAAAAAH8/gYSXhJI1-Jk/s72-c/mvc.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-4065177071539887</id><published>2008-05-23T18:47:00.004+02:00</published><updated>2008-05-23T19:08:50.475+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='geotagging'/><category scheme='http://www.blogger.com/atom/ns#' term='flickr'/><category scheme='http://www.blogger.com/atom/ns#' term='picasa web'/><category scheme='http://www.blogger.com/atom/ns#' term='nokia n80'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Geotagging di una nuvola</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { border: solid 2px #000000; }.flickr-yourcomment { }.flickr-frame { text-align: left; padding: 3px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/pietrobonanno/2507617189/" title="photo sharing"&gt;&lt;img style="width: 380px; height: 287px;" src="http://farm4.static.flickr.com/3211/2507617189_d60cf13657.jpg" class="flickr-photo" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="flickr-caption"&gt;&lt;a href="http://www.flickr.com/photos/pietrobonanno/2507617189/"&gt;Geotagging di una nuvola&lt;/a&gt;, inserito originariamente da &lt;a href="http://www.flickr.com/people/pietrobonanno/"&gt;Pietro Bonanno&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;    &lt;p class="flickr-yourcomment"&gt; &lt;/p&gt;&lt;br /&gt;Questa nuvola è stata &lt;a href="http://en.wikipedia.org/wiki/Geotagging"&gt;geotaggata&lt;/a&gt; utilizzando &lt;a href="http://www.nokia.com/betalabs/locationtagger"&gt;Nokia Location Tagger&lt;/a&gt; con il mio Nokia &lt;a href="http://www.nokia.it/A4191288"&gt;N80&lt;/a&gt; e un ricevitore GPS Bluetooth accoppiato.&lt;br /&gt;L'utilizzo è abbastanza semplice. Si installa il programmino, si esegue e si lascia girare in background. Ogni foto scattata con il normale software della fotocamera verrà completato con le indicazioni di georeferenziazione. Attenzione, non funziona con la fotocamera secondaria.&lt;br /&gt;&lt;br /&gt;Purtroppo su Flickr qualcosa sembra non funzionare: le coordinate vengono arrotondate a &lt;span style="font-style: italic;"&gt;38°0' 00" N, 13°0' 00" E&lt;/span&gt;. Basta &lt;a href="http://www.flickr.com/photos/pietrobonanno/2507617189/meta/"&gt;vedere&lt;/a&gt; la pagina dei metadati per accorgersi che in realtà sono &lt;span style="font-style: italic;"&gt;38° 9' 27" N, 13° 18' 56" E&lt;/span&gt;, per cui l'immagine da Palermo va a finire ad Alcamo!&lt;br /&gt;&lt;br /&gt;Nei forum si &lt;a href="http://www.flickr.com/help/forum/64915/?search=nokia+geotagging"&gt;sostiene&lt;/a&gt; che ciò sia dovuto al software di upload Nokia Online Share. Non so neanche cosa sia, io ho usato il normale form di upload di Flickr.&lt;br /&gt;&lt;br /&gt;L'assistenza mi ha dato l'improbabile risposta che il problema sia dovuto ad errori nelle mappe, fornite da terzi. E' abbastanza assurdo perchè si vede benissimo l'errore di troncamento.&lt;br /&gt;&lt;br /&gt;Infine, la stessa foto su Picasa Web è georeferenziata &lt;a href="http://picasaweb.google.co.uk/piebonanno/PietroBonannoDoesBlogs/photo?authkey=AMX17cv4UcY#5202409087435049138"&gt;correttamente&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-4065177071539887?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/4065177071539887/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=4065177071539887&amp;isPopup=true' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4065177071539887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4065177071539887'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/05/geotagging-di-una-nuvola.html' title='Geotagging di una nuvola'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3211/2507617189_d60cf13657_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-4514811986516963582</id><published>2008-04-11T14:18:00.008+02:00</published><updated>2008-04-11T16:59:57.429+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sony'/><category scheme='http://www.blogger.com/atom/ns#' term='ebook'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><category scheme='http://www.blogger.com/atom/ns#' term='prs-505'/><title type='text'>Eccolo!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vVsX37Ma7G4/R_9Xc7TfkTI/AAAAAAAAAGk/5I7SaH-9fOY/s1600-h/11042008082.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_vVsX37Ma7G4/R_9Xc7TfkTI/AAAAAAAAAGk/5I7SaH-9fOY/s320/11042008082.jpg" alt="" id="BLOGGER_PHOTO_ID_5187961450221506866" border="0" /&gt;&lt;/a&gt;Eccolo qua, la tentazione è stata troppo forte... il cambio Euro-Dollaro ha fatto il resto.&lt;br /&gt;&lt;br /&gt;Acquistato a $ 280 + $ 40 di spedizione (UPS, impeccabili) su &lt;a href="http://www.bhphotovideo.com/"&gt;B&amp;amp;H Photo&lt;/a&gt;, al cambio sono poco più di € 200, esattamente il mio punto di rottura per cedere all'acquisto.&lt;br /&gt;&lt;br /&gt;E' come me l'aspettavo, un prodotto funzionale, comodo ma non ancora allo stato dell'arte.&lt;br /&gt;&lt;br /&gt;Il problema è sopratutto nella tecnologia &lt;a href="http://it.wikipedia.org/wiki/E-ink"&gt;E-ink&lt;/a&gt;, ancora troppo giovane. Il contrasto è perfetto e sembra di leggere una vera pagina cartacea, ma i tempi di refresh sono nell'ordine del secondo.&lt;br /&gt;&lt;br /&gt;Questo non rende difficoltosa la lettura, ma le modalità d'interazione. Non ho la certezza, ma da sviluppatore posso pensare che un tempo di refresh così lungo abbia creato non pochi problemi a chi ha concepito l'interfaccia utente. Infatti mancano funzioni come la ricerca testuale (né dei titoli, né all'interno del testo), o segnali visivi di feedback quando premi i vari pulsanti. Invece hanno utilizzato una fila di 10 pulsanti per selezionare l'elemento corrispondente in una lista.&lt;br /&gt;&lt;br /&gt;Una soluzione che è un buon compromesso, comoda e intuitiva.&lt;br /&gt;&lt;br /&gt;I pulsanti per scorrere le pagine sono sia a destra che a sinistra, quindi è facile leggere un libro nelle più svariate posizioni (con un libro cartaceo servirebbero tutte e due le mani :-) ).&lt;br /&gt;&lt;br /&gt;Uso &lt;a href="http://libprs500.kovidgoyal.net/"&gt;libprs500&lt;/a&gt; come applicazione per caricare e  catalogare gli ebook, non ho neanche provato a usare quello fornito da Sony. Questo software è open source, immediato e ricco di funzioni (tra cui l'utilissima conversione nei vari formati per ebook). Indispensabile.&lt;br /&gt;&lt;br /&gt;Il problema più grave è il supporto ai PDF. Per dare un'idea, questa è la resa di una pagina in PDF al &lt;i&gt;massimo ingrandimento&lt;/i&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vVsX37Ma7G4/R_9cZLTfkUI/AAAAAAAAAGs/HZuGHGKM6co/s1600-h/11042008083.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_vVsX37Ma7G4/R_9cZLTfkUI/AAAAAAAAAGs/HZuGHGKM6co/s320/11042008083.jpg" alt="" id="BLOGGER_PHOTO_ID_5187966883355136322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Questo è invece un ebook in formato &lt;a href="http://wiki.mobileread.com/wiki/BBeB"&gt;LRS&lt;/a&gt; (un formato proprietario Sony), al &lt;i&gt;minimo ingrandimento&lt;/i&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vVsX37Ma7G4/R_9dbLTfkVI/AAAAAAAAAG0/9a_FQIIbjBw/s1600-h/11042008085.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_vVsX37Ma7G4/R_9dbLTfkVI/AAAAAAAAAG0/9a_FQIIbjBw/s320/11042008085.jpg" alt="" id="BLOGGER_PHOTO_ID_5187968017226502482" border="0" /&gt;&lt;/a&gt;Il problema dei PDF è &lt;a href="http://www.cnet.com/8301-13512_1-9799560-23.html"&gt;noto&lt;/a&gt;, ed esiste anche qualche &lt;a href="http://www.cnet.com/8601-13512_1-9799560.html?communityId=2023&amp;amp;targetCommunityId=2023&amp;amp;messageId=283299#283299"&gt;soluzione&lt;/a&gt; (che non ho ancora provato).&lt;br /&gt;&lt;br /&gt;In ogni caso per € 200 è senza dubbi un buon acquisto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-4514811986516963582?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/4514811986516963582/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=4514811986516963582&amp;isPopup=true' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4514811986516963582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4514811986516963582'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/04/eccolo.html' title='Eccolo!'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vVsX37Ma7G4/R_9Xc7TfkTI/AAAAAAAAAGk/5I7SaH-9fOY/s72-c/11042008082.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-454978617975180973</id><published>2008-04-08T17:27:00.006+02:00</published><updated>2008-04-11T17:01:33.428+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humour'/><title type='text'>Perchè il mio tavolo di Google cerca il Internet del contatto?</title><content type='html'>Ora, capisco che i traduttori automatici sono un modo semplice ed economico per attirare qualche lettore nel proprio sito. La traduzione è quella che è, ma anche il proprio sito è quello che è.&lt;br /&gt;&lt;br /&gt;Ma perché farlo in un &lt;a href="http://blog.taragana.com/index.php/it/"&gt;blog&lt;/a&gt; che parla di programmazione??&lt;br /&gt;&lt;br /&gt;Magari perchè &lt;a href="http://www.taragana.com/products/translator-plugin-pro"&gt;vendo&lt;/a&gt; un software di traduzione automatica? Spero di farmi pubblicità con traduzioni del genere?&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Hai cercato Master-Master replica (bi-direzionale di replica master-slave), per MySQL? Io sono me stesso e trovare una posizione in cui ho bisogno di avere questa replica a sostenere il carico sul mio blog e siti.&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;Openfire (assistente di Jabber/XMPP) per difetto si lega su orificio 8080 che inoltre è usato da Tomcat. Ciò induce Tomcat a venire a mancare quando il openfire è iniziato prima di esso. (orificio?? NdPB)&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;La comunicazione fra i Java applei È stata un soggetto interessante dai giorni in anticipo di Java. Ci sono parecchi sensi esoterici comunicare come usando il Javascript come ponticello. Tuttavia esamineremo il metodo attendibile più semplice e della comunicazione del intra-applet.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Usi un codice categoria con i metodi statici degli incastonatori e dei degasatori per passare i dati intorno.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;Avete saputo che persino l'adobe Photoshop funziona in Linux usando il vino?&lt;br /&gt;Il vino può eliminare il vostro dolore di espansione da Windows (a Linux).&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-454978617975180973?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/454978617975180973/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=454978617975180973&amp;isPopup=true' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/454978617975180973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/454978617975180973'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/04/perch-il-mio-tavolo-di-google-cerca-il.html' title='Perchè il mio tavolo di Google cerca il Internet del contatto?'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-4246179724794938059</id><published>2008-03-28T12:48:00.004+01:00</published><updated>2008-03-28T13:41:58.777+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sony'/><category scheme='http://www.blogger.com/atom/ns#' term='ebay'/><category scheme='http://www.blogger.com/atom/ns#' term='ebook'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><category scheme='http://www.blogger.com/atom/ns#' term='prs-505'/><title type='text'>Ma sanno leggere?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_vVsX37Ma7G4/R-zk2nXmhaI/AAAAAAAAAGc/Tc97l2d0VSA/s1600-h/sony-prs-505-digital-book-reader.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_vVsX37Ma7G4/R-zk2nXmhaI/AAAAAAAAAGc/Tc97l2d0VSA/s320/sony-prs-505-digital-book-reader.jpg" alt="" id="BLOGGER_PHOTO_ID_5182768898128643490" border="0" height="184" width="194" /&gt;&lt;/a&gt;&lt;br /&gt;Ho intenzione di acquistare un EBook Reader Sony &lt;a href="http://en.wikipedia.org/wiki/PRS-505"&gt;PRS-505&lt;/a&gt;, un aggeggino che sembra ben riuscito, a leggere i giudizi un pò ovunque.&lt;br /&gt;&lt;br /&gt;Purtroppo pare che non sia commercializzato fuori USA, così ho fatto la solita incursione su EBay.&lt;br /&gt;&lt;br /&gt;Ora, esiste una logica per cui io dovrei acquistare su EBay a prezzi &lt;a href="http://search.ebay.com/search/search.dll?from=R40&amp;amp;_trksid=m37&amp;amp;satitle=prs-505&amp;amp;category0="&gt;più alti&lt;/a&gt; che nel &lt;a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10551&amp;amp;storeId=10151&amp;amp;langId=-1&amp;amp;productId=8198552921665245739"&gt;sito&lt;/a&gt; Sony? NB: ci sono dei pezzi a 270$ venduti da un certo &lt;i&gt;hypatiaway&lt;/i&gt;, ma gli ho scritto e non ha risposto. Non rischio 300$ così...&lt;br /&gt;&lt;br /&gt;Capisco il desiderio di averne uno da chi non abita negli USA, ma &lt;a href="http://www.bhphotovideo.com/c/product/524807-REG/Sony_PRS505LC_PRS_505_Reader_Digital_Book.html"&gt;l'alternativa&lt;/a&gt; c'è eccome...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-4246179724794938059?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/4246179724794938059/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=4246179724794938059&amp;isPopup=true' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4246179724794938059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4246179724794938059'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/03/ma-sanno-leggere.html' title='Ma sanno leggere?'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vVsX37Ma7G4/R-zk2nXmhaI/AAAAAAAAAGc/Tc97l2d0VSA/s72-c/sony-prs-505-digital-book-reader.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-8589124950875624200</id><published>2008-03-07T12:16:00.006+01:00</published><updated>2008-05-30T16:03:55.167+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax highlighter'/><title type='text'>Evidenziazione della sintassi su Blogger</title><content type='html'>Mi sono finalmente deciso a configurare Blogger per visualizzare blocchi di codice formattato. Ho utilizzato &lt;a href="http://code.google.com/p/syntaxhighlighter/"&gt;SyntaxHighlighter&lt;/a&gt;, un ottimo tool javascript che agisce tramite CSS.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ho seguito le &lt;a href="http://morten.lyhr.dk/2007/12/how-to-get-syntax-highlighting-in.html"&gt;istruzioni&lt;/a&gt; sul blog &lt;a href="http://morten.lyhr.dk/"&gt;Morten Lyhr&lt;/a&gt; e tutto ha funzionato egregiamente. L'unico piccolo problema è individuare lo spazio web dove sistemare gli script da utilizzare poi nei post.&lt;br /&gt;&lt;br /&gt;Lui ha preferito utilizzare le directory SVN di &lt;a href="http://code.google.com/"&gt;Google Code&lt;/a&gt;.&lt;br /&gt;Io trovo più naturale utilizzare invece lo spazio dedicato a &lt;a href="http://pages.google.com/"&gt;Google Pages&lt;/a&gt;. Con una semplice interfaccia Web si caricano sullo spazio i vari script e si includono poi nel template in maniera diretta (per es. &lt;span style="font-family:courier new;"&gt;http://piebonanno.googlepages.com/shCore.js&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Per festeggiare, ho riconvertito il mio &lt;a href="http://pietrobonanno.blogspot.com/2007/10/sql-indipendente-dal-dialetto-con.html"&gt;post&lt;/a&gt; su Hibernate e dialetti SQL. Il risultato non è ancora ottimale, ma è già un passo avanti.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;update 30/05/2008&lt;/b&gt;: Ho sostituito SyntaxHighlighter con &lt;a href="http://code.google.com/p/google-code-prettify/"&gt;Prettify&lt;/a&gt;, mi piace di più.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-8589124950875624200?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/8589124950875624200/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=8589124950875624200&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/8589124950875624200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/8589124950875624200'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/03/evidenziazione-della-sintassi-su.html' title='Evidenziazione della sintassi su Blogger'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-6728499342687354678</id><published>2008-03-06T15:19:00.004+01:00</published><updated>2008-03-07T12:32:27.327+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humour'/><title type='text'>...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vVsX37Ma7G4/R8__L4Q5Q7I/AAAAAAAAAGU/N9UVS59YZ80/s1600-h/The_Apologetic_Coder.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_vVsX37Ma7G4/R8__L4Q5Q7I/AAAAAAAAAGU/N9UVS59YZ80/s320/The_Apologetic_Coder.png" alt="" id="BLOGGER_PHOTO_ID_5174635076418880434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Non ce la faccio. Non ci riesco. &lt;a href="http://thedailywtf.com/Comments/The_Apologetic_Coder.aspx"&gt;Svengo&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-6728499342687354678?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/6728499342687354678/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=6728499342687354678&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/6728499342687354678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/6728499342687354678'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/03/blog-post.html' title='...'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vVsX37Ma7G4/R8__L4Q5Q7I/AAAAAAAAAGU/N9UVS59YZ80/s72-c/The_Apologetic_Coder.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-2801471728789801853</id><published>2008-01-10T11:38:00.001+01:00</published><updated>2008-01-10T11:49:17.250+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humour'/><category scheme='http://www.blogger.com/atom/ns#' term='at work'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Bibliografia essenziale</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { border: solid 2px #000000; }.flickr-yourcomment { }.flickr-frame { text-align: left; padding: 3px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/pietrobonanno/2182153435/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2201/2182153435_130e815ff7.jpg" class="flickr-photo" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="flickr-caption"&gt;&lt;a href="http://www.flickr.com/photos/pietrobonanno/2182153435/"&gt;Bibliografia essenziale&lt;/a&gt;, inserito originariamente da &lt;a href="http://www.flickr.com/people/pietrobonanno/"&gt;Pietro Bonanno&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;    &lt;p class="flickr-yourcomment"&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-2801471728789801853?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/2801471728789801853/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=2801471728789801853&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/2801471728789801853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/2801471728789801853'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/01/bibliografia-essenziale.html' title='Bibliografia essenziale'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2201/2182153435_130e815ff7_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-8693053433026940297</id><published>2008-01-08T18:13:00.000+01:00</published><updated>2008-01-08T18:31:59.672+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='at work'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Post autoreferenziale</title><content type='html'>Con una notevole faccia tosta, dopo un'assenza di settimane da questo blog, pubblico il mio &lt;a href="http://piebonanno.googlepages.com/CV.pdf"&gt;Curriculum Vitae&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Essendo questo (almeno nelle intenzioni) un blog tecnico che riguarda la mia professione, mi sembrava una mancanza non da poco.&lt;br /&gt;Spero anche di scrivere qualcosa, in particolare sulla pratica del &lt;a href="http://martinfowler.com/articles/continuousIntegration.html"&gt;&lt;span style="font-style: italic;"&gt;continuous integration&lt;/span&gt;&lt;/a&gt; che vorrei mettere in piedi anche per piccoli progetti (team da 2-4 persone).&lt;br /&gt;Intanto sto assemblando i vari tool che aiutano nel processo: in breve, &lt;a href="http://maven.apache.org/"&gt;Maven 2&lt;/a&gt;, un server &lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt;, &lt;a href="http://maven.apache.org/continuum/"&gt;Continuum&lt;/a&gt; e, almeno per i test, un &lt;a href="http://jmailsrv.sourceforge.net/"&gt;semplice&lt;/a&gt; SMTP server. Mi pare non serva altro, a parte i framework di test.&lt;br /&gt;Anzi se qualcuno volesse chiaccherarne (anche in privato), ne sarei lieto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-8693053433026940297?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/8693053433026940297/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=8693053433026940297&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/8693053433026940297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/8693053433026940297'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2008/01/post-autoreferenziale.html' title='Post autoreferenziale'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-7497347364725623561</id><published>2007-12-10T14:21:00.001+01:00</published><updated>2007-12-10T14:29:43.258+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='at work'/><category scheme='http://www.blogger.com/atom/ns#' term='manning'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Adesso é Natale</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { border: solid 2px #000000; }.flickr-yourcomment { }.flickr-frame { text-align: left; padding: 3px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/pietrobonanno/2100653722/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2323/2100653722_86e92c7778.jpg" class="flickr-photo" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="flickr-caption"&gt;&lt;a href="http://www.flickr.com/photos/pietrobonanno/2100653722/"&gt;Adesso é Natale&lt;/a&gt;, inserito originariamente da &lt;a href="http://www.flickr.com/people/pietrobonanno/"&gt;Pietro Bonanno&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;    &lt;p class="flickr-yourcomment"&gt; Oggi è una bella giornata: abbiamo ricevuto il libro ordinato nientepopodimeno che il 30/01/2007, direttamente dal sito &lt;a href="http://www.manning.com"&gt;Manning&lt;/a&gt;.&lt;br /&gt;Per la nostra esperienza, mai più: ho scritto diverse volte all'assistenza e non ho mai ricevuto risposta. Credo sia giunto a destinazione con una tecnica simile alla &lt;a href="http://www.youtube.com/watch?v=qKAInP_tmHk"&gt;consegna della posta GMail&lt;/a&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/5244778450511333940-7497347364725623561?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/7497347364725623561/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=7497347364725623561&amp;isPopup=true' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/7497347364725623561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/7497347364725623561'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/12/adesso-natale.html' title='Adesso é Natale'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2323/2100653722_86e92c7778_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-5798775625982359684</id><published>2007-11-26T21:04:00.001+01:00</published><updated>2007-11-26T21:09:14.518+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humour'/><category scheme='http://www.blogger.com/atom/ns#' term='at work'/><category scheme='http://www.blogger.com/atom/ns#' term='me'/><title type='text'>Work-trash-pop art</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { border: solid 2px #000000; }.flickr-yourcomment { }.flickr-frame { text-align: left; padding: 3px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt; &lt;a href="http://www.flickr.com/photos/pietrobonanno/2066737326/" title="photo sharing"&gt;&lt;img style="width: 396px; height: 354px;" src="http://farm3.static.flickr.com/2399/2066737326_1e12c59b5a.jpg" class="flickr-photo" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="flickr-caption"&gt;&lt;a href="http://www.flickr.com/photos/pietrobonanno/2066737326/"&gt;Work-trash-pop art&lt;/a&gt;, inserito originariamente da &lt;a href="http://www.flickr.com/people/pietrobonanno/"&gt;Pietro Bonanno&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;    &lt;p class="flickr-yourcomment"&gt; L'altro giorno rovesciai per errore il cestino dei rifiuti. Il tutto mi sembrò assumere un disegno, una certa perfezione. Come se avessi completato un quadro aggiungendo l'ultimo ritocco, così ho deciso di immortalarlo.&lt;br /&gt;Nessun animale è stato maltrattato durante le riprese.&lt;/p&gt;&lt;br /&gt;PS: Per i curiosi, l'immagine su Flickr è zeppa di note...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-5798775625982359684?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/5798775625982359684/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=5798775625982359684&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/5798775625982359684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/5798775625982359684'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/11/work-trash-pop-art.html' title='Work-trash-pop art'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2399/2066737326_1e12c59b5a_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-6998848233126113770</id><published>2007-11-13T10:17:00.000+01:00</published><updated>2007-11-13T10:28:00.100+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='promemoria'/><category scheme='http://www.blogger.com/atom/ns#' term='ffdshow'/><category scheme='http://www.blogger.com/atom/ns#' term='video capovolto'/><title type='text'>Strano ma vero</title><content type='html'>Se vi capite di aprire un video e vederlo capovolto, non girate il monitor, né guardatelo a testa in giù. Semplicemente scaricate l'ultima versione di &lt;a href="http://ffdshow-tryout.sourceforge.net"&gt;ffdshow&lt;/a&gt; e fategli gestire i formati DivX (&lt;span style="font-family: courier new;"&gt;Video configuration&lt;/span&gt;&gt;&lt;span style="font-family: courier new;"&gt;Codecs&lt;/span&gt;&gt;alle voci DivX il valore va cambiato in &lt;span style="font-family: courier new;"&gt;libavcodec&lt;/span&gt;).&lt;br /&gt;Se vi funziona, accettatelo per fede come ho fatto io.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-6998848233126113770?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/6998848233126113770/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=6998848233126113770&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/6998848233126113770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/6998848233126113770'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/11/strano-ma-vero.html' title='Strano ma vero'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-9010208525490868639</id><published>2007-11-08T20:58:00.000+01:00</published><updated>2007-11-09T14:28:24.877+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='web framework'/><category scheme='http://www.blogger.com/atom/ns#' term='stripes'/><category scheme='http://www.blogger.com/atom/ns#' term='click'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='architetture sw'/><title type='text'>Alla ricerca del Santo Graal - Reprise</title><content type='html'>Riprendo un argomento che mi interessa molto, e su cui sto facendo un bel pò di ricerche. Chiunque usi Java per realizzare applicazioni web vi dirà che attualmente non esiste Lo Strumento. Esistono decine (sul serio) di framework, e anche filtrando per stabilità, supporto e dimensioni della comunità ne rimangono almeno una decina: &lt;a href="http://struts.apache.org/"&gt;Struts&lt;/a&gt;, &lt;a href="http://struts.apache.org/2.0.11/"&gt;Struts 2&lt;/a&gt; (che è molto diverso), &lt;a href="http://mc4j.org/confluence/display/stripes/Home"&gt;Stripes&lt;/a&gt;, &lt;a href="http://rifers.org"&gt;RIFE&lt;/a&gt;, &lt;a href="http://click.sourceforge.net"&gt;Click&lt;/a&gt;, &lt;a href="http://tapestry.apache.org"&gt;Tapestry&lt;/a&gt;, &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;Echo2&lt;/a&gt;, &lt;a href="http://www.thinwire.com/"&gt;Thinwire&lt;/a&gt;, &lt;a href="http://grails.codehaus.org/"&gt;Grails&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt;, &lt;a href="http://www.zkoss.org/"&gt;ZK&lt;/a&gt;, &lt;a href="http://www.opensymphony.com/sitemesh/"&gt;Sitemesh&lt;/a&gt;, &lt;a href="http://cocoon.apache.org"&gt;Cocoon&lt;/a&gt;, &lt;a href="http://java.sun.com/javaee/javaserverfaces/"&gt;JSF&lt;/a&gt; e sicuramente ne sto dimenticando qualche altro.&lt;br /&gt;&lt;br /&gt;Leggendo un pò, ho capito che esistono principalmente due modelli: il classico, celebre, inossidabile MVC (o Model 2) detto anche Action Oriented e il Page Oriented/Component Oriented.&lt;br /&gt;Il &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=47344#241709"&gt;commento&lt;/a&gt; a una domanda postata su TheServerSide è una dei migliori e più precisi riassunti che abbia letto su questo argomento.&lt;br /&gt;&lt;br /&gt;Io paragono il modello MVC a un approccio procedurale del problema: si individuano i flussi dei dati e si realizzano, nei controller, i metodi che li eseguono. Magari poi il modello, i controller eccetera sono realizzati col paradigma OO, però il flusso dell'applicazione è governato dalle action, ovvero da procedure in senso lato.&lt;br /&gt;Il modello Page/Component Oriented invece lo paragono ad un approccio ad oggetti: ogni pagina web è un'oggetto, ha dei metodi ed è essa stessa a governare l'applicazione in base ai metodi invocati (attraverso l'URL).&lt;br /&gt;E la differenza, a mio parere, è analoga a quella tra i due paradigmi di programmazione: il modello MVC (procedurale) è immediato da capire e da imparare, si comporta bene quando l'applicazione è governata da flussi di dati (per esempio l'acquisto di un e-ticket), ma mostra i suoi limiti all'aumentare della complessità del problema. Ad un certo punto diventa ingovernabile.&lt;br /&gt;Il modello Page Oriented, come l'OOP, invece è arduo da governare, richiede una revisione dei processi mentali con cui immaginiamo la soluzione a un problema, però paga sul lungo periodo. Supponiamo di avere un'applicazione ricca di dati, annidati, con diversi casi particolari in base alle configurazioni di questi. Il modello Page Oriented è sicuramente il migliore perchè è un &lt;a href="http://it.wikipedia.org/wiki/Divide_et_impera_%28informatica%29"&gt;&lt;span style="font-style: italic;"&gt;divide and conquere&lt;/span&gt;&lt;/a&gt; più efficace.&lt;br /&gt;Ho scelto essenzialmente quattro framework che applicano questi due modelli:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Grails e Stripes sono action framework&lt;/li&gt;&lt;li&gt;Click e Wicket sono Page/Component Oriented&lt;/li&gt;&lt;/ul&gt;Gli altri non li esclusi perchè siano peggiori, tutt'altro. RIFE, Tapestry, Thinwire, sono anche migliori.&lt;br /&gt;Ma io sono pigro :-)&lt;br /&gt;Di conseguenza voglio strumenti agili, immediati per le cose immediate e capaci in ogni caso di reggere l'aumento di complessità in maniera lineare. RIFE, per esempio, è strepitoso ma date un'occhiata all'&lt;a href="http://rifers.org/blogs/gbevin/2006/3/16/comparing_web_frameworks_rife"&gt;esempio&lt;/a&gt; del blog. Ad un certo punto non si capisce più nulla, anche se la sensazione è che l'autore abbia sbagliato approccio educativo.&lt;br /&gt;&lt;br /&gt;Grails e Stripes sono invece degli ottimi esempi di comunicazione: c'è un approccio graduale alle caratteristiche, molti esempi, molti approfondimenti ben scritti. La sensazione che si ha è che le cose funzionino bene perchè l'idea alla base è semplice e pratica.&lt;br /&gt;&lt;br /&gt;Di Click &lt;a href="http://pietrobonanno.blogspot.com/2007/08/alla-ricerca-del-santo-graal.html"&gt;avevo parlato male&lt;/a&gt;, ma faccio pubblica ammenda. Utilizzando HTML puro e Velocity, la produttività è enorme. Si può buttare giù un'applicazione mentre ancora si sta imparando il framework.&lt;br /&gt;Il sito è stracolmo di esempi, ben fatti, la documentazione è limpida.&lt;br /&gt;&lt;br /&gt;Wicket alle prime stranisce. Sembra quasi che gli autori chiedano un atto di fede a chi vuole iniziare, lasciandolo completamente in balìa del framework. Non rimane che andarsi a guardare gli esempi.&lt;br /&gt;Ma dopo un pò si capisce che il pargolo promette bene. L'approccio è il più puro che abbia mai visto, non una traccia di logica nella presentazione, non una traccia di presentazione nella logica.&lt;br /&gt;Però è facile mettere in piedi la prima applicazione. Non facile quanto Click, ma &lt;span style="font-style: italic;"&gt;abbastanza&lt;/span&gt; facile.&lt;br /&gt;Andando avanti, si trovano esempi in abbondanza (&lt;a href="http://wicketstuff.org/confluence/display/STUFFWIKI/Wiki"&gt;qui&lt;/a&gt; c'è un bel pò di roba). L'unico difetto è la necessità di dovere associare una classe Java a una pagina Web per qualsiasi cosa, fosse pure un semplice messaggio di notifica.&lt;br /&gt;&lt;br /&gt;E' stupido ribadirlo, ma non c'è e non può esserci &lt;span style="font-style: italic;"&gt;il&lt;/span&gt; framework web Java. La scelta dipende innanzitutto dal problema da affrontare, e conseguente scelta dell'approccio (action/component). All'interno dei due possibili, ci sono diverse soluzioni e, per esempio, non opterei Click per una webmail Ajax-based, così come non userei Wicket per il portale dell'agenzia di viaggi.&lt;br /&gt;Grails copre molte esigenze, ma se esiste già del codice Java da usare o se si prevede di interfacciarlo con altre applicazioni in Java, diventa un problema. E' possibile sicuramente, ma si perdono molti dei vantaggi nell'usare Groovy.&lt;br /&gt;Stripes invece sarebbe più adatto, ma se non si hanno questi vincoli è meno "divertente".&lt;br /&gt;&lt;br /&gt;Spero comunque che questo post aiuti perlomeno a sfoltire la rosa di scelte. In ogni caso, la discussione è aperta :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-9010208525490868639?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/9010208525490868639/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=9010208525490868639&amp;isPopup=true' title='6 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/9010208525490868639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/9010208525490868639'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/11/alla-ricerca-del-santo-graal-reprise.html' title='Alla ricerca del Santo Graal - Reprise'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-810832749718726014</id><published>2007-11-07T21:08:00.000+01:00</published><updated>2007-11-09T14:29:40.191+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nokia n80'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Altro che coltellino svizzero</title><content type='html'>Come ho scritto in un altro &lt;a href="http://pietrobonanno.blogspot.com/2007/10/nokia-n80-vs-puppy-linux-il-segno-dei.html"&gt;post&lt;/a&gt;, sono assolutamente soddisfatto del mio Nokia N80, a parte il problemi delle prestazioni che tarpa di fatto un prodotto quasi perfetto nel rapporto qualità/prezzo.&lt;br /&gt;&lt;br /&gt;Dopo un salutare aggiornamento del software, con l'installazione della versione Internet Edition (in breve, l'ultimo aggiornamento ufficiale di Nokia trasforma i normali N80 in N80 Internet Edition, che gestiscono un pò meglio VOIP e poco altro), ho risistemato i software installati e da installare.&lt;br /&gt;Spippolando un pò in rete sono giunto infine a una configurazione di cui sono fiero, e che quindi sfoggio qui :-) :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vVsX37Ma7G4/RzLsbGsHweI/AAAAAAAAADw/IJJOxjTd0wE/s1600-h/Screenshot0001.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 207px; height: 245px;" src="http://4.bp.blogspot.com/_vVsX37Ma7G4/RzLsbGsHweI/AAAAAAAAADw/IJJOxjTd0wE/s320/Screenshot0001.jpg" alt="" id="BLOGGER_PHOTO_ID_5130422875924709858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ho installato:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Il tema &lt;a href="http://gallery.mobile9.com/f/83904/"&gt;Field Of Colours&lt;/a&gt;, freeware, bellissimo&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mtvoid.com/calcium/"&gt;Calcium&lt;/a&gt;, freeware, una semplice calcolatrice che ha proprio il vantaggio di essere semplice&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.symbian-freak.com/news/006/04/Screenshot_3rd.htm"&gt;Screenshot 2&lt;/a&gt;, freeware, per prendere lo screenshot di cui sopra&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mobifunsoft.com/MrLock.html"&gt;Mr Lock&lt;/a&gt;, freeware, il blocco tastiera automatico che ho sempre &lt;span style="font-style: italic;"&gt;bramato&lt;/span&gt;. Blocca i tasti dopo una certa pausa con varie opzioni per le eccezioni (per esempio, non si attiva se c'è una certa applicazione in esecuzione, o se non si è nello schermo di standby). Imperdibile.&lt;/li&gt;&lt;li&gt;&lt;a href="http://europe.nokia.com/A4195015"&gt;WLan Wizard&lt;/a&gt;, freeware, da Nokia per il &lt;a href="http://it.wikipedia.org/wiki/Wardriving"&gt;wardriving&lt;/a&gt; estremo :-D&lt;/li&gt;&lt;li&gt;&lt;a href="http://gmail.google.com/"&gt;GMail&lt;/a&gt;, freeware, chi non ha al giorno d'oggi un account GMail? :-)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.panoman.net/"&gt;Panoman&lt;/a&gt;, shareware, indispensabile per chi vive in Sicilia :-) . Consente di creare panoramiche perfette ruotando la fotocamera attorno a sè stessi. Costa $5,95, un prezzo ridicolo, e ancora più ridicolo se consideriamo il cambio sull'Euro. Alcuni esempi dei risultati nel loro &lt;a href="http://www.panoman.net/blog.htm"&gt;photoblog&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sbsh.net/products/papyrus_symb/"&gt;Papyrus&lt;/a&gt;, shareware, qui il discorso è un pò articolato. Sul Symbian non ho ancora trovato un calendario con gestione degli eventi lontamente paragonabile a quello sul mio &lt;a href="http://euro.palm.com/it/it/products/tungsten-t3/index.html"&gt;Tungsten T3&lt;/a&gt; che ho ormai venduto. Non ho un'esigenza estrema di gestire eventi, appuntamenti, ma tendo a dimenticare così ho preso l'abitudine di segnarmi le scadenze burocratiche, le revisioni delle auto, i compleanni, le ricorrenze ecc.&lt;br /&gt;Il calendario fornito da Nokia è molto limitato. Tanto per dirne una, non considera i compleanni segnati sulla Rubrica...&lt;br /&gt;I PIM, ahimé a pagamento, che ho trovato per il Symbian sono Papyrus, &lt;a href="http://www.pockettorch.net/soft/aquacalendar%20-%20s60/aquacalendar%20-%20s60.hthttp://www.blogger.com/img/gl.link.gifml"&gt;Aqua Calendar&lt;/a&gt; e &lt;a href="http://nokia-n71-software.epocware.com/Handy_Calendar.html"&gt;Handy Calendar&lt;/a&gt;. Mentre i primi due permettono di sincronizzare l'agenda con i compleanni della Rubrica, quest'ultimo non lo fa quindi lo escludo a priori (costa anche $39,95, non ne capisco la ragione). Aqua Calendar è strapieno di funzioni ma è confuso e lento, così alla fine ho scelto Papyrus. Entrambi costano $19,95, al &lt;a href="http://www.oanda.com/convert/classic"&gt;cambio&lt;/a&gt; €13,63.&lt;/li&gt;&lt;/ul&gt;Un suggerimento finale per chi, come me, usa Ubuntu e dispone del Bluetooth sul PC: trasferire file col cavetto non è cosa semplice. Se collegate il cavo USB e selezionate "Archivio di massa" (cioè il normale storage via USB), viene montato il disco ma non si riesce ad aprire. Non ho trovato soluzioni rapide, così mi affido al Bluetooth. Per installare un'applicazione scaricata sul PC, basta selezionare il file &lt;span style="font-style: italic;"&gt;.sis&lt;/span&gt;, o &lt;span style="font-style: italic;"&gt;.sisx&lt;/span&gt;, e spedirlo al cellulare tramite &lt;a href="http://www.gnome.org/projects/nautilus/"&gt;Nautilus&lt;/a&gt; (occorre installare il pacchetto gnome-bluetooth e poi &lt;span style="font-family:courier new;"&gt;tasto destro&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;Invia a&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;OBEX push&lt;/span&gt;). Il cellulare lo riceve come messaggio con allegato e basta selezionarlo per avviare l'installazione.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-810832749718726014?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/810832749718726014/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=810832749718726014&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/810832749718726014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/810832749718726014'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/11/altro-che-coltellino-svizzero.html' title='Altro che coltellino svizzero'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vVsX37Ma7G4/RzLsbGsHweI/AAAAAAAAADw/IJJOxjTd0wE/s72-c/Screenshot0001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-428696474634341330</id><published>2007-10-31T23:05:00.000+01:00</published><updated>2007-11-01T00:17:42.195+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nokia n80'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><category scheme='http://www.blogger.com/atom/ns#' term='puppy linux'/><title type='text'>Nokia N80 vs Puppy Linux, il segno dei tempi</title><content type='html'>Sul mio PC portatile, un &lt;a href="http://it.computers.toshiba-europe.com/Contents/Toshiba_it/IT/Others/Brochures/IT_PDF/ToshibaPLSatellite2450_401.pdf"&gt;Toshiba 2450-401&lt;/a&gt; vecchio di 5 anni, ho installato &lt;a href="http://www.puppylinux.org"&gt;Puppy Linux&lt;/a&gt;.&lt;br /&gt;E' una distro Linux leggera nella maniera più intelligente. Carica solo lo stretto indispensabile all'avvio, gira tutta in RAM, gestisce periferiche e configurazioni varie attraverso piccoli, semplici e intelligenti tool. Su questo portatile funziona tutto, compresa la scheda Wifi su slot PCMCIA configurata esclusivamente attraverso un tool visuale.&lt;br /&gt;Puppy Linux mi ha permesso di utilizzare il portatile anche per una semplice occhiata alla posta, cosa che con Windows Xp o con Ubuntu non avrei potuto fare.&lt;br /&gt;Ho anche un cellulare &lt;a href="http://www.nokia.it/A4191288"&gt;Nokia N80&lt;/a&gt;. Un cellulare strepitoso, un coltellino svizzero con cui, per esempio, posso accedere attraverso &lt;a href="http://it.wikipedia.org/wiki/Universal_Plug_and_Play"&gt;UPNP&lt;/a&gt; allo streaming di &lt;a href="http://www.orb.com"&gt;Orb&lt;/a&gt; dei contenuti del mio HTPC.&lt;br /&gt;C'è GMail, c'è l'upload delle foto su Flickr, c'è &lt;a href="http://sourceforge.net/projects/symvnc/"&gt;VNC&lt;/a&gt;.&lt;br /&gt;Però è leeeento.&lt;br /&gt;La fotocamera è il modulo che ne risente di più (è in pratica impossibile utilizzare il flash, pena foto mosse e ritardate rispetto all'inquadratura), ma ne risente anche la Galleria, la Rubrica, lo switch tra fotocamera e videocamera.&lt;br /&gt;Così mi è venuta la curiosità e ho fatto la prova:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-3fac4e4a5a9110fd" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v8.nonxt6.googlevideo.com/videoplayback?id%3D3fac4e4a5a9110fd%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331340784%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D573E0C624B60E8EE9C0DBB4297E58E762BBDDDD7.58248169232EEEAB799351BD94EBE7969A75A5A0%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D3fac4e4a5a9110fd%26offsetms%3D5000%26itag%3Dw160%26sigh%3DrEgE5ojp1SYhtMfIhG-iDZsPgKk&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v8.nonxt6.googlevideo.com/videoplayback?id%3D3fac4e4a5a9110fd%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331340784%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D573E0C624B60E8EE9C0DBB4297E58E762BBDDDD7.58248169232EEEAB799351BD94EBE7969A75A5A0%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D3fac4e4a5a9110fd%26offsetms%3D5000%26itag%3Dw160%26sigh%3DrEgE5ojp1SYhtMfIhG-iDZsPgKk&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;Il PC si avvia mezzo secondo prima del cellulare. Magari fra qualche anno i PC non avranno virus e i cellulari sì, i PC non riceveranno spam e l'archivio SMS ne sarà pieno.&lt;br /&gt;Adoro il mio N80, ma non capisco perchè, nei requisiti necessari per l'usabilità, alla Nokia non abbiano pensato alle prestazioni.&lt;br /&gt;O forse ci hanno pensato, ma ciò avrebbe comportato dell'hardware che avrebbe lievitato il costo, e di conseguenza la competitività.&lt;br /&gt;Facendo ciò, hanno tolto appetibilità a un dispositivo che poteva essere (e in parte lo è) uno dei migliori e meglio bilanciati nel suo mercato.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;: per il test mi sono comportato in modo che risultasse il più oggettivo possibile; avvio il PC e lo tengo fermo sulla schermata di &lt;a href="http://it.wikipedia.org/wiki/GRUB"&gt;GRUB&lt;/a&gt; (il software che permette di scegliere quale sistema operativo avviare), quindi accendo il cellulare un attimo prima per compensare il ritardo "meccanico" del pulsante.&lt;br /&gt;Ad un certo punto premo Invio sul PC, ciò perchè Puppy cerca di acquisire un indirizzo IP tramite il &lt;a href="http://it.wikipedia.org/wiki/DHCP"&gt;DHCP&lt;/a&gt; server della mia rete Wifi. Per saltare questa fase (che non riguarda la velocità del sistema, è puramente un tempo di attesa) occorre appunto premere Invio.&lt;br /&gt;Se si guarda il video, la schermata di Puppy appare un attimo prima della comparsa della schermata del Nokia (che, volendo infierire, si vede benissimo costruirsi sullo schermo a blocchi).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-428696474634341330?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=3fac4e4a5a9110fd&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/428696474634341330/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=428696474634341330&amp;isPopup=true' title='4 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/428696474634341330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/428696474634341330'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/10/nokia-n80-vs-puppy-linux-il-segno-dei.html' title='Nokia N80 vs Puppy Linux, il segno dei tempi'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-418568299005592786</id><published>2007-10-19T19:30:00.015+02:00</published><updated>2008-05-30T16:06:54.689+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='sql dialect'/><title type='text'>SQL indipendente dal dialetto con Hibernate</title><content type='html'>L'esigenza che avevamo era di potere scrivere delle classi Java per interrogazioni SQL, mantenendo comunque una certa indipendenza dal server utilizzato. Le ricerche su Google non hanno dato frutti, il che mi sembra strano, dato che mi sembra un'esigenza diffusa.&lt;br /&gt;Comunque, mi è venuto in mente che &lt;a href="http://hibernate.org/"&gt;Hibernate&lt;/a&gt; poteva avere delle funzionalità del genere. Le interrogazioni in &lt;a href="http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html"&gt;HQL&lt;/a&gt; o tramite &lt;a href="http://www.hibernate.org/hib_docs/reference/en/html/querycriteria.html"&gt;Criteria&lt;/a&gt; alla fine vengono tradotti in SQL adattabile praticamente a ogni server DB sul mercato.&lt;br /&gt;Il dubbio poteva essere se, trovando le classi che generavano il codice SQL, queste non fossero accoppiate con altre classi Hibernate (per esempio con la sessione), rendendole inutilizzabili.&lt;br /&gt;Siamo stati fortunati: nel package &lt;span style="font-style: italic;"&gt;org.hibernate.sql&lt;/span&gt;, esiste un insieme di classi per svariati processi di generazione di SQL guidati da una opportuna istanza della classe Dialect.&lt;br /&gt;Quindi, basta usare i package &lt;span style="font-style: italic;"&gt;org.hibernate.sql&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;org.hibernate.dialect&lt;/span&gt; per scrivere SQL indipendente dal dialetto. I due package sono semplici, poco strutturati e si possono importare facilmente in un progetto Java qualsiasi. C'è comunque da includere le librerie &lt;span style="font-weight: bold;"&gt;hibernate-3-x.x.jar&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;commons-logging-x.x.jar&lt;/span&gt; (e naturalmente log4j, ma già lo usate &lt;span style="font-style: italic;"&gt;vero&lt;/span&gt;? :-) ), che pesano alcuni Mb.&lt;br /&gt;Purtroppo non sono tutte rose e fiori. Queste classi sono puramente &lt;span style="font-style: italic;"&gt;utility&lt;/span&gt;, concepite per essere utilizzate all'interno delle procedure di conversione delle interrogazioni di Hibernate, non per vivere di vita propria.&lt;br /&gt;Sono mal documentate, poco coerenti, alcune parti sembrano messe e mai utilizzate e la procedura di scrittura di una query è per nulla strutturata.&lt;br /&gt;Però quando si vuole scrivere una query che potrebbe girare su server DB diversi, possono venire utili.&lt;br /&gt;&lt;br /&gt;Spippolando un pò, ho capito che le classi utili sono essenzialmente due:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;org.hibernate.sql.SimpleSelect&lt;/span&gt;, utile se si vuole fare una query senza join, su una sola tabella. In questo caso è più difficile incontrare differenze tra i dialetti, e infatti la sola cosa che viene gestita è la clausola FOR UPDATE per mettere un lock sulle righe.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;org.hibernate.sql.QuerySelect&lt;/span&gt;, qui è possibile fare di tutto. Come scrivevo prima, la gestione è raffazzonata, non propriamente object-oriented. E' una classe &lt;span style="font-style: italic;"&gt;da battaglia&lt;/span&gt;, scritta per risolvere un problema specifico, tuttavia può essere utile.&lt;/li&gt;&lt;/ul&gt;A titolo di esempio, ho provato a creare una query con una &lt;a href="http://en.wikipedia.org/wiki/Join_%28SQL%29"&gt;&lt;span style="font-weight: bold;"&gt;inner join&lt;/span&gt;&lt;/a&gt; e una &lt;a href="http://en.wikipedia.org/wiki/Join_%28SQL%29"&gt;&lt;span style="font-weight: bold;"&gt;outer join&lt;/span&gt;&lt;/a&gt;, facendola generare con i dialetti MySql e Oracle. Non ho scelto a caso, perchè con Oracle le outer join &lt;a href="http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_103a.htm#2066379"&gt;hanno una sintassi&lt;/a&gt; che più proprietaria non si può :-)&lt;br /&gt;&lt;br /&gt;Supponiamo di avere un metodo del genere:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;  public static QuerySelect buildASelectExample(Dialect dialect) {&lt;br /&gt;  QuerySelect theQueryThing = new QuerySelect(dialect);     &lt;br /&gt;  SelectFragment selectFragment = new SelectFragment();&lt;br /&gt;  String[] columns = {"id", "firstname||' '||lastname", "address||', '||state"};&lt;br /&gt;  String[] aliases = {"id", "name", "address"};&lt;br /&gt;  selectFragment.addColumns("p", columns, aliases);&lt;br /&gt;  selectFragment.addColumn("o", "plant");&lt;br /&gt;  JoinFragment joinFragment = dialect.createOuterJoinFragment();&lt;br /&gt;&lt;br /&gt;  String[] fks1 = {"user_fk"};&lt;br /&gt;  String[] pks1 = {"id"};&lt;br /&gt;  String[] fks2 = {"office_fk"};&lt;br /&gt;  String[] pks2 = {"id"};&lt;br /&gt;  theQueryThing.addSelectFragmentString(selectFragment.toFragmentString());&lt;br /&gt;  theQueryThing.prependWhereConditions(" p.age between 18 and 35 ");&lt;br /&gt;  theQueryThing.getJoinFragment().addJoin("person",&lt;br /&gt;              "p", fks2, pks2, JoinFragment.INNER_JOIN);&lt;br /&gt;  theQueryThing.getJoinFragment().addJoin("person",&lt;br /&gt;              "p", fks1, pks1, JoinFragment.LEFT_OUTER_JOIN, " x = y");&lt;br /&gt;  theQueryThing.getJoinFragment().addCondition(" id = ? ");&lt;br /&gt;&lt;br /&gt;  return theQueryThing;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Invocando il metodo passando come dialect un'istanza di org.hibernate.dialect.MySQLDialect, questo è il risultato:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint" &gt;select p.id as id, p.firstname||' '||lastname as name, &lt;br /&gt;  p.address||', '||state as address, &lt;br /&gt;  o.plant as plant from person p on office_fk=p.id &lt;br /&gt;  left outer join person p on user_fk=p.id &lt;br /&gt;  and  x = y &lt;br /&gt;  where  id = ? and (p.age between 18 and 35)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Utilizzando invece il dialetto org.hibernate.dialect.OracleDialect:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;select p.id as id, p.firstname||' '||lastname as name, &lt;br /&gt;   p.address||', '||state as address, &lt;br /&gt;   o.plant as plant from person p, person p &lt;br /&gt;   where office_fk=p.id &lt;br /&gt;   and user_fk=p.id(+) and  x (+)= y &lt;br /&gt;   and  id = ? and (p.age between 18 and 35)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;C'è da dire che un uso ancora più proficuo può essere quello delle &lt;a href="http://it.wikipedia.org/wiki/Data_Definition_Language"&gt;DDL&lt;/a&gt;, dove effettivamente i server si differenziano un pò di più, sopratutto sui tipi. Per questo è meglio invece vedere direttamente la classe &lt;span style="font-style: italic;"&gt;org.hibernate.dialect.Dialect&lt;/span&gt;, con tutte le sue specializzazioni.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-418568299005592786?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/418568299005592786/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=418568299005592786&amp;isPopup=true' title='4 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/418568299005592786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/418568299005592786'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/10/sql-indipendente-dal-dialetto-con.html' title='SQL indipendente dal dialetto con Hibernate'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-1760606749440614162</id><published>2007-10-09T14:05:00.000+02:00</published><updated>2007-10-09T14:08:08.998+02:00</updated><title type='text'>Castomer cher</title><content type='html'>Diciamoci la verità: quanti sono in Italia che, gestendo un'assistenza clienti, si sarebbero posti un &lt;a href="http://www.carsonified.com/web-apps/how-to-deal-with-abusive-customers"&gt;dubbio del genere&lt;/a&gt;, e quanti avrebbero risposto &lt;a href="http://microisvjournal.wordpress.com/2007/02/16/how-to-deal-with-abusive-customers/"&gt;così&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-1760606749440614162?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/1760606749440614162/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=1760606749440614162&amp;isPopup=true' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/1760606749440614162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/1760606749440614162'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/10/castomer-cher.html' title='Castomer cher'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-4893240133736347531</id><published>2007-10-09T12:00:00.000+02:00</published><updated>2007-10-09T13:33:52.714+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Programmazione 0.2?</title><content type='html'>Mi sono imbattuto in questo interessante &lt;a href="http://radar.oreilly.com/archives/2007/01/programming_20.html"&gt;articolo&lt;/a&gt; di &lt;a href="http://radar.oreilly.com/tim"&gt;Tim O'Reilly&lt;/a&gt; a proposito di una lista di cambiamenti dalla programmazione 1.0 alla 2.0, che rispecchia volutamente quella Web 1.0 -&gt; Web 2.0:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vVsX37Ma7G4/RwtZ5yAgueI/AAAAAAAAADo/IyjTFPxhgCo/s1600-h/Schermata-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_vVsX37Ma7G4/RwtZ5yAgueI/AAAAAAAAADo/IyjTFPxhgCo/s320/Schermata-1.png" alt="" id="BLOGGER_PHOTO_ID_5119284250648033762" border="0" /&gt;&lt;/a&gt;La lista proviene, manco a dirlo, da un gruppo di appassionati di Ruby:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vVsX37Ma7G4/RwtZ5iAgudI/AAAAAAAAADg/POCBIkhfbiU/s1600-h/programming2.0-thumb.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_vVsX37Ma7G4/RwtZ5iAgudI/AAAAAAAAADg/POCBIkhfbiU/s320/programming2.0-thumb.png" alt="" id="BLOGGER_PHOTO_ID_5119284246353066450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Molto interessanti i commenti, tra cui concordo con questo:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;"&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;&lt;span style="font-family:lucida grande;"&gt;I suspect that the author of the list is relatively new to programming and is consequently commenting only on changes from recent practices. For instance, there is an emerging rejection of the massive class libraries used with Java (among others) because they’re too big for most people to have a handle on. But such excessive libraries are only a recent phenomenon. I believe that much of what is happening now is simply a retreat from excessive complication, something that happens periodically in the programming world. I personally am thrilled that many “new” practices resemble those that my colleagues and I used in the 1970s and that today would be termed “agile”. And “modular” has been considered good programming practice since the 1950s. Perhaps the shift he describes would be better characterized as from Programming 2.0 back to Programming 1.0.&lt;/span&gt;&lt;/span&gt;"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Chiunque si occupi di programmazione da un pò di anni ha la stessa sensazione, credo.&lt;br /&gt;Qui non sta succedendo niente di nuovo.&lt;br /&gt;Java e le sue quintalate di framework hanno generato il classico e tutto sommato prevedibile rigetto e il ritorno nostalgico alla buona vecchia programmazione fatta di creatività piuttosto che assemblaggio di roba precotta.&lt;br /&gt;&lt;br /&gt;L'innovazione però c'è, secondo me: sono cambiate le piattaforme, e in maniera radicale anche. Non si lavora più sull'applicazione client chiusa nel proprio mondo, e si tende piuttosto a contribuire a una nuvola di microapplicazioni web collaborative.&lt;br /&gt;&lt;br /&gt;Mi immagino il desktop fra qualche anno sempre più dominato dal browser e il web come una sorta di sistema operativo diffuso su cui risiederanno gran parte delle proprie applicazioni.&lt;br /&gt;&lt;br /&gt;Da tutto ciò mi chiedo se è possibile, allo stato attuale, pensare ad una azienda le cui applicazioni siano &lt;span style="font-weight: bold;"&gt;tutte&lt;/span&gt; residenti sul web (nella intranet o nei vari servizi presenti su Internet).&lt;br /&gt;Già &lt;a href="http://www.google.com/a/"&gt;Google Apps&lt;/a&gt; fornisce un servizio del genere, con Google Documents, Mail, Chat, e Calendar, e una home page aziendale. Altri servizi che mi vengono in mente potrebbero essere il timesheet, la gestione della contabilità, gli strumenti di sviluppo, ecc.&lt;br /&gt;&lt;br /&gt;Se poi tutte queste applicazioni fossero &lt;span style="font-style: italic;"&gt;web 2.0&lt;/span&gt;, integrabili, provviste di feed (nell'ipotesi che ci sia qualcosa per cui abbia senso fornire un feed), allora comincio a vederci un senso :-)&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-4893240133736347531?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/4893240133736347531/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=4893240133736347531&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4893240133736347531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4893240133736347531'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/10/programmazione-02.html' title='Programmazione 0.2?'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vVsX37Ma7G4/RwtZ5yAgueI/AAAAAAAAADo/IyjTFPxhgCo/s72-c/Schermata-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-1407276661980000900</id><published>2007-10-07T21:29:00.000+02:00</published><updated>2007-10-08T13:37:43.981+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meedio'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Il miio meediacenter con Meedio - Prima parte</title><content type='html'>Mi stupisce, per quanto abbia cercato, di non aver trovato articoli su &lt;a href="http://it.wikipedia.org/wiki/Media_center"&gt;HTPC&lt;/a&gt; realizzati con &lt;a href="http://www.meedios.com/"&gt;Meedio&lt;/a&gt; nella sua ultima (in tutti i sensi) versione.&lt;br /&gt;&lt;br /&gt;Descrivo dunque cosa ho fatto io, senza troppi patemi e senza troppi approfondimenti sul genere. In realtà non sono un patito di home theater, dolby surround, HDTV ecc. Volevo semplicemente un sistema per:&lt;ol style="text-align: left;"&gt;&lt;li&gt;memorizzare in maniera ragionevolmente sicura i miei video (vacanze/feste, ma anche film e serie TV)&lt;/li&gt;&lt;li&gt;trovarli e vederli in maniera semplice, per non farli cadere nel dimenticatoio&lt;/li&gt;&lt;/ol&gt;Ho evidenziato questi due punti perchè, nonostante sembrino dei non-problemi, è stato veramente difficile risolverli nell'ambito di un sistema casalingo, economico e non troppo complesso (vedi anche l'&lt;a href="http://www.apogeonline.com/webzine/2003/12/11/01/200312110101"&gt;ottimo articolo&lt;/a&gt; di &lt;a href="http://www.attivissimo.net/"&gt;Paolo Attivissimo&lt;/a&gt;).&lt;br /&gt;La soluzione che ho scelto, e che ritengo un buon compromesso, è di tenere i file su hard disk, ridondato con il &lt;a href="http://it.wikipedia.org/wiki/RAID"&gt;RAID&lt;/a&gt; che consente il protocollo &lt;a href="http://it.wikipedia.org/wiki/Serial_ATA"&gt;SATA&lt;/a&gt;. L'unico costo "in più" è il secondo hard disk, ma con i prezzi attuali...&lt;br /&gt;&lt;br /&gt;Non mi interessa tuttora la funzionalità di &lt;a href="http://it.wikipedia.org/wiki/Personal_Video_Recorder"&gt;PVR&lt;/a&gt;, a meno che non faccia l'abbonamento a Sky. Non è nelle mie priorità in ogni caso.&lt;br /&gt;&lt;br /&gt;La possibilità  più economica sarebbe un box USB con funzionalità di mediaplayer, però ci si ritrova comunque con uno strumento limitato sia nelle funzionalità che nei formati supportati. Idem per quei lettori da tavolo da collegare tramite WiFi al proprio PC (per es. &lt;a href="http://www.netgear.it/prodotti/prodotti.php?prod=EVA8000"&gt;questo&lt;/a&gt; della NetGear).&lt;br /&gt;Per un pò avevo buttato un occhio al MacMini, ma non ho letto bene di &lt;a href="http://en.wikipedia.org/wiki/Frontrow"&gt;Front Row&lt;/a&gt; (il media center software di Apple) e non ha l'uscita TV analogica.&lt;br /&gt;&lt;br /&gt;Così ho provato ad assemblarmi un HTPC, senza spendere troppo e tenendo in mente la facilità d'uso (wife proof).&lt;br /&gt;Quindi utilizzo esclusivamente da telecomando, e software semplice e completo.&lt;br /&gt;Il risultato non è ancora definitivo, ma non è neanche malaccio:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vVsX37Ma7G4/Rwnx3iAgucI/AAAAAAAAADY/tfEwNCRrCvU/s1600-h/meedio1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_vVsX37Ma7G4/Rwnx3iAgucI/AAAAAAAAADY/tfEwNCRrCvU/s320/meedio1.png" alt="" id="BLOGGER_PHOTO_ID_5118888387807328706" border="0" /&gt;&lt;/a&gt;L'hardware è il più micragnoso che abbia trovato: processore AMD Athlon 3800+, mobo Asus &lt;a href="http://www.asus.it/products.aspx?l1=3&amp;amp;l2=101&amp;amp;l3=296&amp;amp;l4=0&amp;amp;model=1138&amp;amp;modelmenu=1"&gt;M2NPV-VM&lt;/a&gt; (non vi fate ingannare, l'ho scelta perchè ha tutto integrato, compresa l'uscita TV analogica e digitale), un disco SATA da 160Gb e 1 Gb di RAM.&lt;br /&gt;Sul case ho investito di più. Se c'è una cosa su cui non risparmiare, negli HTPC, è la silenziosità. Non sono ancora al &lt;a href="http://www.pcsilenzioso.it/forum/forumdisplay.php?f=41"&gt;silenzio nero&lt;/a&gt;, ma posso vedere un film senza il sottofondo aeroportuale dei classici case.&lt;br /&gt;Ho scelto un &lt;a href="http://www.thermaltake.com/product/Chassis/desktop/bach/vb8000bns.asp"&gt;Thermaltake Bach&lt;/a&gt;, esteticamente gradevole e molto spazioso, in cui ho montato un alimentatore Zalman da 300W trovato usato su EBay.&lt;br /&gt;I due si difendono bene, però il Thermaltake ha due ventole di ricircolo posteriori che sono la fonte primaria di rumore. Appena ho un pò di tempo vedrò come risolvere.&lt;br /&gt;&lt;br /&gt;E siamo infine arrivati a Meedio: quello che si vede nello screenshot è la schermata principale, con i menù tipici di un media center come si deve.&lt;br /&gt;Il PC lo amministro attraverso UltraVNC, soluzione che mi è sembrata più efficiente e versatile del remote desktop di Windows.&lt;br /&gt;Sullo stesso PC ho installato anche un server FTP (&lt;a href="http://filezilla-project.org/"&gt;Filezilla Server&lt;/a&gt;), &lt;a href="http://www.orb.com/"&gt;Orb&lt;/a&gt;, che consente di mandare in streaming su extranet i propri contenuti audio e video (dico extranet perchè, essendo server &lt;a href="http://it.wikipedia.org/wiki/Universal_Plug_and_Play"&gt;UPNP&lt;/a&gt;, Orb è in grado di sfruttare la banda maggiore nel caso si acceda da rete locale).&lt;br /&gt;&lt;br /&gt;Meedio, una volta prodotto commerciale, &lt;a href="http://www.meedio.com/"&gt;fu acquistato&lt;/a&gt; da Yahoo, che ne fece un prodotto chiuso e orientato alla fruizione dei propri contenuti online. Se proprio interessa, si chiama &lt;a href="http://sites.mobile.yahoo.com/go/tv/index"&gt;Yahoo! Go TV&lt;/a&gt;.&lt;br /&gt;Ma Meedio è molto di più. E' un sistema estremamente modulare che, grazie a una comunità viva e attiva ancora oggi, vanta &lt;a href="http://www.meedios.com/OpenMAID/"&gt;376 plugin&lt;/a&gt; di varia natura disponibili.&lt;br /&gt;&lt;br /&gt;Subito dopo la vendita a Yahoo, Meedio fu reso liberamente scaricabile e nel frattempo nacque l'idea di &lt;a href="http://www.meedios.com/forum/index.php?c=4"&gt;MeediOS&lt;/a&gt;, una versione completamente riscritta e open source di Meedio.&lt;br /&gt;Purtroppo lo sviluppo di MeediOS va a rilento, ma sullo stesso sito è possibile scaricare Meedio e tutti i suoi plugin.&lt;br /&gt;Questa estate è stata pubblicata inoltre &lt;a href="http://www.threeminutes.dreamhosters.com/meedios/Meedio-Ultimate_0.9e_alpha.exe"&gt;una versione &lt;span style="font-style: italic;"&gt;bundle&lt;/span&gt;&lt;/a&gt; di Meedio con gli innumerevoli plugin (solo quelli più gettonati, che sono almeno una trentina) già inclusi e preconfigurati.&lt;br /&gt;&lt;br /&gt;Installando questo, si ottiene un media center che dà la polvere (tranne forse sul PVR, che non ho mai provato) a tutti i vari &lt;a href="http://www.microsoft.com/windowsxp/mediacenter/default.mspx"&gt;Windows Media Center&lt;/a&gt;, &lt;a href="http://www.team-mediaportal.com/"&gt;Mediaportal&lt;/a&gt;, &lt;a href="http://www.8dim.com/products/"&gt;TVedia&lt;/a&gt;, &lt;a href="http://www.gbpvr.com/"&gt;GBPVR&lt;/a&gt;, &lt;a href="http://www.xlobby.com/"&gt;xLobby&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Nella prossima parte si vedrà anche il perchè.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-1407276661980000900?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/1407276661980000900/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=1407276661980000900&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/1407276661980000900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/1407276661980000900'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/10/il-miio-meediacenter-con-meedio-prima.html' title='Il miio meediacenter con Meedio - Prima parte'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vVsX37Ma7G4/Rwnx3iAgucI/AAAAAAAAADY/tfEwNCRrCvU/s72-c/meedio1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-336175003330417597</id><published>2007-10-04T15:54:00.000+02:00</published><updated>2007-10-11T10:40:05.151+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='web framework'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'>Rails Rumble? Pfui</title><content type='html'>Leggo oggi su &lt;a href="http://feeds.blogo.it/%7Er/downloadblog/it/%7E3/164073697/applicazioni-web-in-rails-in-48-ore-ecco-i-vincitori"&gt;downloadblog&lt;/a&gt; che si è conclusa la competizione &lt;a href="http://railsrumble.com/"&gt;Rails Rumble&lt;/a&gt; 2007, che consiste nella sfida tra un centinaio di team di sviluppo per creare un'applicazione web funzionante in 48 ore con &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Casca a fagiolo :-)&lt;br /&gt;&lt;br /&gt;Ieri, un pò per scopo didattico un pò per goliardia, ho realizzato un'applicazione web per caricare e in seguito visualizzare i risultati di una votazione (nel nostro caso il pretesto è l'elezione della RSU aziendale).&lt;br /&gt;Bene, l'ho realizzata con &lt;a href="http://grails.org/"&gt;Grails&lt;/a&gt; in 5 ore. Avete letto bene, 5 ore.&lt;br /&gt;Sono partito da zero assoluto, generando il progetto con &lt;span style="font-family:courier new;"&gt;grails create-app&lt;/span&gt;, e &lt;span style="font-style: italic;"&gt;non avendo mai scritto una sola riga in &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; nè Grails&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Ho fatto generare le pagine CRUD delle mie entità (Sede e Candidato), ho ritoccato le pagine generate per rimuovere elementi indesiderati (tipo l'id), ho aggiunto un tocco di Ajax affinchè nell'elenco dei candidati fosse possibile&lt;br /&gt;incrementare/decrementare il voto a ciascuno (anche di Ajax è la prima volta che faccio uso), ho aggiunto una pagina con i risultati presentati graficamente alla meno peggio e infine ho aggiunto l'autenticazione per modificare i dati (che è possibile solo per lo Scrutatore).&lt;br /&gt;&lt;br /&gt;Chiaramente ho lasciato il layout di default, nonchè le varie pagine di edit. Ma il tutto è un'applicazione vera e utilizzabile, che lavora su un DB &lt;a href="http://hsqldb.org/"&gt;Hypersonic&lt;/a&gt; attraverso &lt;a href="http://hibernate.org/"&gt;Hibernate&lt;/a&gt;. L'infrastruttura è gestita da &lt;a href="http://springframework.org/"&gt;Spring&lt;/a&gt; e la presentazione da &lt;a href="http://www.opensymphony.com/sitemesh/"&gt;Sitemesh&lt;/a&gt;. Grazie a Grails non li ho nemmeno sfiorati.&lt;br /&gt;&lt;br /&gt;Per la cronaca &lt;a href="http://tastyplanner.com/"&gt;Tasty Planner&lt;/a&gt; è l'applicazione che ha vinto la competizione. Non è male, sia graficamente che concettualmente. Il team mi pare fosse di almeno 3 persone. Per cui tre risorse per otto ore al giorno per due giorni fanno 48 ore uomo.&lt;br /&gt;Oltretutto mi sbaglierò ma la tag cloud sulla homepage &lt;a href="http://tastyplanner.com/recipes/search?tag=SouthPacific"&gt;non funziona&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Grails rulez? No, non lo penso affatto. Rails ormai è strumento consolidato e strapieno di plugin e soluzioni pronte da usare.&lt;br /&gt;&lt;br /&gt;Ma Java non si muove più a passo di elefante.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vVsX37Ma7G4/RwT1oSAguaI/AAAAAAAAACw/CWGveKCqHwk/s1600-h/Schermata-2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 269px; height: 217px;" src="http://4.bp.blogspot.com/_vVsX37Ma7G4/RwT1oSAguaI/AAAAAAAAACw/CWGveKCqHwk/s320/Schermata-2.png" alt="" id="BLOGGER_PHOTO_ID_5117485148977281442" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vVsX37Ma7G4/RwT1eiAguZI/AAAAAAAAACo/FLcxluoagao/s1600-h/Schermata-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 269px; height: 218px;" src="http://1.bp.blogspot.com/_vVsX37Ma7G4/RwT1eiAguZI/AAAAAAAAACo/FLcxluoagao/s320/Schermata-1.png" alt="" id="BLOGGER_PHOTO_ID_5117484981473556882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;PS: Per i fan di Ruby, il titolo è puramente ironico.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 102);font-size:100%;" &gt;11/09/2007 - Update: La tag cloud di Tasty Planner adesso funziona&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-336175003330417597?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/336175003330417597/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=336175003330417597&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/336175003330417597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/336175003330417597'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/10/rails-rumble-pfui.html' title='Rails Rumble? Pfui'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vVsX37Ma7G4/RwT1oSAguaI/AAAAAAAAACw/CWGveKCqHwk/s72-c/Schermata-2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-4428658482851623165</id><published>2007-09-27T11:42:00.000+02:00</published><updated>2007-09-28T10:11:40.617+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='web framework'/><title type='text'>Yeah, baby, yeah!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_vVsX37Ma7G4/RvuE3SAguYI/AAAAAAAAACg/URC8dEZji_4/s1600-h/Austin-Powers-Posters.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_vVsX37Ma7G4/RvuE3SAguYI/AAAAAAAAACg/URC8dEZji_4/s320/Austin-Powers-Posters.jpg" alt="" id="BLOGGER_PHOTO_ID_5114827887070984578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ieri sera ci sono riuscito. Ho fatto funzionare il mio primo progetto Wicket.&lt;br /&gt;Sembra quasi una esclamazione da principiante, ma non è davvero facile partire con questo aggeggio. Inoltre mi sono intestardito a lavorare da subito con la 1.3.0 beta3, che ha alcune modifiche radicali:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Il gestore di tutto non è più una servlet ma è un filtro. Rimane comunque la retrocompatibilità&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Le Commons Logging vengono sostituite da un nuovo gestore di logger, SLF4J&lt;/li&gt;&lt;/ul&gt;Un ottimo aiuto è stato il &lt;a href="http://www.jroller.com/jsight/entry/wicket_howdee_to_you_world"&gt;post&lt;/a&gt; di &lt;a href="http://www.jroller.com/jsight/"&gt;Jess Sightler&lt;/a&gt;, praticamente nei miei stessi guai.&lt;br /&gt;&lt;br /&gt;Ad un certo punto mi sono ritrovato anch'io con l'errore di Tomcat:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;26-set-2007 18.13.22 org.apache.catalina.core.StandardContext start&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;GRAVE: Context [/wickettest] startup failed due to previous errors&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;26-set-2007 18.18.32 org.apache.catalina.startup.HostConfig checkResources&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INFO: Undeploying context [/wickettest]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Stesso problema suo...&lt;br /&gt;Dal suo post, ho dedotto che il problema riguarda una qualche libreria mancante. Dopo qualche tentativo ho capito che mi mancavano le librerie base di SLF4J, le ho aggiunte al mio project.xml e...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;INFO: Deploying web application archive wickettest.war&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;log4j:WARN No appenders could be found for logger (org.apache.wicket.protocol.http.pagestore.FileChannelPool).&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;log4j:WARN Please initialize the log4j system properly.&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;********************************************************************&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;*** WARNING: Wicket is running in DEVELOPMENT mode.              ***&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;***                               ^^^^^^^^^^^                    ***&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;*** Do NOT deploy to your live server(s) without changing this.  ***&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;*** See Application#getConfigurationType() for more information. ***&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;********************************************************************&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mai Warning fu più benvenuto. :-)&lt;br /&gt;In realtà il sistema gira correttamente e l'avviso riguarda la modalità di esecuzione di Wicket. In &lt;span style="font-style: italic;"&gt;Development mode&lt;/span&gt;, Wicket intercetta le modifiche alle pagine in maniera dinamica, a scapito delle performance.&lt;br /&gt;&lt;br /&gt;Nei commenti del post, alcuni membri della comunità Wicket sono intervenuti, in verità un pò aggressivi, fornendo comunque un buon &lt;a href="http://svn.apache.org/repos/asf/wicket/trunk/README"&gt;riferimento&lt;/a&gt; per una configurazione iniziale della 1.3.&lt;br /&gt;&lt;br /&gt;Adesso ho quindi una base iniziale per proseguire lo studio di questo giocattolo, che gestisco con Maven 1.&lt;br /&gt;Per chi fosse interessato, &lt;a href="http://piebonanno.googlepages.com/wickettest.zip"&gt;qui&lt;/a&gt; c'è uno zip con il progetto. Tenete presente che con &lt;span style="font-family:courier new;"&gt;maven eclipse&lt;/span&gt; vengono generati il &lt;span style="font-family:courier new;"&gt;.classpath&lt;/span&gt; e il &lt;span style="font-family:courier new;"&gt;.project&lt;/span&gt; per l'importazione dentro Eclipse, e con &lt;span style="font-family:courier new;"&gt;maven war&lt;/span&gt; viene generato il WAR da portare su Tomcat. Il progetto è molto embrionale, sia chiaro.&lt;br /&gt;&lt;a rel="nofollow" href="http://www.jroller.com/page/jsight/"&gt;&lt;b&gt;&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-4428658482851623165?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/4428658482851623165/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=4428658482851623165&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4428658482851623165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4428658482851623165'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/09/yeah-baby-yeah.html' title='Yeah, baby, yeah!'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vVsX37Ma7G4/RvuE3SAguYI/AAAAAAAAACg/URC8dEZji_4/s72-c/Austin-Powers-Posters.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-6686229800252407103</id><published>2007-09-25T15:58:00.000+02:00</published><updated>2007-09-25T21:56:29.967+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><category scheme='http://www.blogger.com/atom/ns#' term='web framework'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><title type='text'>Wicket mumbling</title><content type='html'>Da qualche giorno sto studiando &lt;a href="http://wicket.apache.org/"&gt;Wicket&lt;/a&gt;, perchè mi farebbe comodo (e forse mi servirà a tutti gli effetti) un web framework &lt;a href="http://www.javalobby.org/java/forums/t70272.html?start=0"&gt;a componenti&lt;/a&gt; (o component oriented).&lt;br /&gt;&lt;br /&gt;Component oriented significa in soldoni che la pagina si ottiene aggregando blocchi ottenuti lato server attraverso il framework stesso. Un pò come si realizza un software con Delphi o Visual Basic, solo che su Internet è tutto più difficile :-)&lt;br /&gt;Un approccio del genere è utile quando la pagina web è dinamica anche nella struttura e/o i suoi componenti hanno una complessità per cui è utile impacchettarli e rituilizzarli dove servono.&lt;br /&gt;&lt;br /&gt;L'ho preferito a &lt;a href="http://click.sourceforge.net/"&gt;Click&lt;/a&gt; e &lt;a href="http://www.thinwire.com/"&gt;ThinWire&lt;/a&gt;, perchè Click mi è sembrato portatore sano di cattive pratiche: in teoria si potrebbero scrivere pagine JSP, con blocchi Velocity e classi Java a miscelare il tutto. Sodoma e Gomorra... :-D&lt;br /&gt;ThinWire mi sembra invece orientato ad applicazioni web definitivamente client, basta vedere le &lt;a href="http://www.thinwire.com/?n=Explore.Explore"&gt;demo&lt;/a&gt; sul sito...&lt;br /&gt;&lt;br /&gt;Wicket impone una scelta radicale. Mai più logica sulla pagina web, un banale foreach, un &lt;%=%&gt; sbarazzino, nulla...&lt;br /&gt;Su questo possiamo essere tutti d'accordo senza troppa fatica, separazione di logica da presentazione pura e dura. Mi proccupa di più invece che ogni singolo intervento di manutenzione richieda la disponibilità di un ambiente Java, compilatore incluso.&lt;br /&gt;Potrebbe anche essere positivo, uno stimolo a curare ogni rilascio nei minimi dettagli, e forse alla lunga questo approccio purista darà i suoi frutti anche in termini di organizzazione del lavoro.&lt;br /&gt;&lt;br /&gt;Però, cari amici di Wicket, una mano datela anche voi :-)&lt;br /&gt;Su sito non c'è un articolo introduttivo, la &lt;a href="http://cwiki.apache.org/WICKET/reference-library.html"&gt;documentazione&lt;/a&gt; è un wiki molto poco strutturato e non rimane che &lt;a href="http://www.google.it/search?q=wicket+tutorial"&gt;cercare&lt;/a&gt; articoli in giro o scaricare gli esempi(*).&lt;br /&gt;&lt;br /&gt;L'impostazione di default è quantomeno curiosa: la pagina HTML dovrebbe stare nello stesso package della classe che la mappa sul lato server.&lt;br /&gt;Cioè se io realizzo una Login.html, dovrei salvarla nel package com.acme.businessenterpriseapplication assieme alla corrispondente Login.java.&lt;br /&gt;&lt;br /&gt;E' vero che questo comportamento è &lt;a href="http://cwiki.apache.org/WICKET/control-where-html-files-are-loaded-from.html"&gt;configurabile&lt;/a&gt; ma, a parte il fatto che la configurazione cambia con la versione di Wicket, perchè non permettere di default (magari con un parametro nella servlet) di scegliere la posizione in cui tenere le pagine?&lt;br /&gt;&lt;br /&gt;Non che stia bocciando Wicket, tutt'altro. Leggendo in giro viene fuori una notevole robustezza delle idee che ci stanno dietro, ma perchè non fornire un bel paragrafo Introduction in cui mettere da subito un codice minimale funzionante?&lt;br /&gt;&lt;br /&gt;Sembra quasi un test d'ingresso... :-D&lt;br /&gt;&lt;br /&gt;(*) Mi sono espresso male, non che manchino le informazioni. Io però non ho trovato il classico articolo di startup che spieghi, magari superficialmente, come mettere in piedi la prima semplice applicazione. C'è &lt;a href="http://wicket.apache.org/quickstart.html"&gt;qualcosa&lt;/a&gt;, ma legato a Maven 2, ma io uso Maven 1 e poi non è obbligatorio usare Maven con Wicket.&lt;br /&gt;Può darsi che abbia cercato male io, ma anche questo è indice di non perfetta organizzazione del sito. Io mi aspetto (e in genere è così) che nei primissimi link della homepage ci sia quello al classico articolo di Hello World.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-6686229800252407103?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/6686229800252407103/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=6686229800252407103&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/6686229800252407103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/6686229800252407103'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/09/wicket-mumbling.html' title='Wicket mumbling'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-4142618185311664544</id><published>2007-09-05T11:29:00.000+02:00</published><updated>2007-09-05T11:36:27.525+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humour'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Umorismo involontario a RGS</title><content type='html'>Stamattina a &lt;a href="http://www.rgs.fm/"&gt;Radio Giornale di Sicilia&lt;/a&gt;: "Incursione di hacker cinesi nei sistemi inglesi. Il ministero della Difesa non si pronuncia. Il giallo si infittisce."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-4142618185311664544?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/4142618185311664544/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=4142618185311664544&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4142618185311664544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/4142618185311664544'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/09/umorismo-involontario-rgs.html' title='Umorismo involontario a RGS'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-2778850613875843880</id><published>2007-08-30T13:23:00.000+02:00</published><updated>2007-08-30T14:02:51.664+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='promemoria'/><category scheme='http://www.blogger.com/atom/ns#' term='me'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Promemoria: monitorare un log da remoto su Unix/Linux</title><content type='html'>Il seguente comando:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;tail -f &lt;path&gt;&lt;path&gt;/path/del/log/blablabla.log&lt;/path&gt;&lt;/path&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;permette di visualizzare su console l'ultima porzione di un log, aggiornandola di continuo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-2778850613875843880?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/2778850613875843880/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=2778850613875843880&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/2778850613875843880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/2778850613875843880'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/08/promemoria-monitorare-un-log-da-remoto.html' title='Promemoria: monitorare un log da remoto su Unix/Linux'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-705272902015471823</id><published>2007-08-20T14:39:00.000+02:00</published><updated>2007-09-03T17:10:18.700+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='web framework'/><category scheme='http://www.blogger.com/atom/ns#' term='stripes'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'>Alla ricerca del Santo Graal...</title><content type='html'>In questo periodo guardo con sempre più interesse a Grails. Tutto è cominciato quando ho deciso di approfondire le mie conoscenze sui web framework di tipo fronted per Java.&lt;br /&gt;Da lì è partita sul serio la ricerca del Santo Graal. Quando cominci a cercare un framework per Java, sai quando cominci ma non sai quando finisci. E soprattutto con cosa finisci.&lt;br /&gt;&lt;br /&gt;La mia esperienza attuale è limitata al lato backend dei framework. Ho usato con &lt;span style="font-style: italic;"&gt;estrema&lt;/span&gt; soddisfazione &lt;a href="http://andromda.org/"&gt;Andromda&lt;/a&gt; e &lt;a href="http://springframework.org/"&gt;Spring&lt;/a&gt;, e &lt;a href="http://hibernate.org/"&gt;Hibernate&lt;/a&gt; per l'accesso ai dati.&lt;br /&gt;Anche queste scelte non sono state facili, ma in un certo senso è stato + immediato. Primo, perchè Spring e Hibernate sono standard de facto (e quasi quasi anche per diritto :-) ). Secondo, perchè dovevo cominciare a lavorare su un progetto e mi sono fidato subito del mio istinto.&lt;br /&gt;Per Andromda è stato un caso, uno di quei casi che ti cambiano la vita :-)&lt;br /&gt;Andromda è fenomenale, ha permesso la scrittura e gestione di un framework che supera le 150 entità, persistenti e non, con servizi di tipo J2EE, interfacciamento ai webservice.&lt;br /&gt;&lt;br /&gt;Con i framework frontend la cosa è più difficile: ce ne sono una &lt;a href="http://www.java-source.net/open-source/web-frameworks"&gt;pletora&lt;/a&gt;, tutti validi e non c'è una reale direzione della comunità Java. Escludendo naturalmente Struts, che credo abbia fatto il suo tempo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://click.sourceforge.net/"&gt;Click&lt;/a&gt;, &lt;a href="http://www.nextapp.com/platform/echo2/echo/"&gt;Echo2&lt;/a&gt;, &lt;a href="http://www.thinwire.com/"&gt;ThinWire&lt;/a&gt;: tutti ottimi prodotti, ma orientati ad applicazioni &lt;a href="http://www.techweb.com/encyclopedia/defineterm.jhtml?term=richclient"&gt;rich client&lt;/a&gt; piuttosto che generici siti/portali&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt;: uuhhmm le RPC mi danno garanzia di scalabilità?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.openlaszlo.org/"&gt;OpenLaszlo&lt;/a&gt;: è un discorso a parte... ci giochiccherei volentieri, ma il tempo disponibile non me lo consente :P&lt;/li&gt;&lt;li&gt;&lt;a href="http://tapestry.apache.org/"&gt;Tapestry&lt;/a&gt;, &lt;a href="http://wicket.apache.org/"&gt;Wicket&lt;/a&gt;(*): interessanti, l'idea di avere pagine HTML prive di elementi dinamici (il comportamento dinamico si ottiene con opportuni id nei tag HTML)  dovrebbe ridurre le interferenze  con i grafici.&lt;br /&gt;Di Tapestry però ho letto di complessità di configurazione e questo va contro la mia idea di buona progettazione. Un buon framework dovrebbe rendere semplici le cose semplici, e non troppo difficili le cose complesse. Per questo ho escluso Struts a priori.&lt;br /&gt;Il rischio è l'effetto "&lt;a href="http://worsethanfailure.com/Articles/The_Inner-Platform_Effect.aspx"&gt;Inner-Platform&lt;/a&gt;": con lo scopo di rendere estremamente flessibile un componente di un sistema, lo si rende "un sistema dentro il sistema", complesso quanto il problema che si vuole risolvere.&lt;br /&gt;Il che a mio parere è blasfemo.&lt;/li&gt;&lt;li&gt;&lt;a href="http://stripes.mc4j.org/"&gt;Stripes&lt;/a&gt;, &lt;a href="http://www.zkoss.org/"&gt;ZK&lt;/a&gt;, &lt;a href="http://struts.apache.org/2.x/"&gt;Struts2&lt;/a&gt;, &lt;a href="http://rifers.org/"&gt;RIFE&lt;/a&gt;: andiamo già meglio (di RIFE non sono sicuro), c'è già una discreta applicazione dei principi di &lt;a href="http://softwareengineering.vazexqi.com/files/pattern.html"&gt;convention over configuration&lt;/a&gt;. Escluso Struts2 su cui non ho ben capito l'effettiva validità (e la home page che scimmiotta il Web 2.0 senza riuscirci), mi sono orientato su Stripes che mi pare abbia una comunità più ampia di RIFE e ZK. Una comunità più ampia significa bug risolti in fretta, disponibilità di articoli, faq, soluzioni a problemi complessi, tutti aspetti da tenere presente per applicazioni di produzione.&lt;/li&gt;&lt;/ul&gt;Stripes è quindi il prodotto che mi permetterebbe un approccio più moderno, ma abbastanza conservativo da non rischiare di cacciarmi nei pasticci.&lt;br /&gt;Mi riferisco a portali web tipici, senza particolari richieste di interazione con l'utente. In applicazioni più tipicamente client, guardo con curiosità a ThinWire.&lt;br /&gt;Ma tutto quello che è elencato (meno del 50% di tutto quello che in realtà &lt;a href="http://www.java-source.net/open-source/web-frameworks"&gt;si trova&lt;/a&gt;) non è affatto da scartare. L'ideale è che ogni esigenza venisse risolta con lo strumento più opportuno. In realtà si fa riferimento a quei 2-3 strumenti affermati ognuno per una certa tipologia di prodotto.&lt;br /&gt;&lt;br /&gt;Attualmente io mi orienterei così:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Portale più o meno complesso, con poca logica applicativa e tipicamente web (per es. il classico sito di ecommerce): Stripes/Struts2/RIFE&lt;/li&gt;&lt;li&gt;Portale complesso, molto orientato ai dati (in realtà una trasposizione web delle applicazioni client, per es., la gestione di un magazzino): ThinWire/Click&lt;/li&gt;&lt;li&gt;Portale semplice, con logica tipicamente web anche abbastanza complessa (per es., gestione di un calendario online, o uno storage remoto con upload/download): Rails/Grails&lt;/li&gt;&lt;/ul&gt;Mi fermo qui. Ho vomitato tutto il mio giro mentale che mi ha portato a scoprire questi due progetti e ad intrappolarmi in un bivio: è vero quanto ho scritto alla fine? Rails/Grails sono veramente aggeggini con cui trastullarsi, o possono tranquillamente prendere il posto dei blasonati Stripes e Struts 2?&lt;br /&gt;&lt;br /&gt;(*) Ricordavo male: di Wicket non mi aveva lasciato perplesso la complessità di configurazione (effettivamente Wicket è semplice), semmai la sua natura Java-centrica. Non so quanto mi convinca un portale che richieda, per ogni manutenzione, l'intervento su codice Java, con relativa compilazione, deploy ecc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5244778450511333940-705272902015471823?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/705272902015471823/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=705272902015471823&amp;isPopup=true' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/705272902015471823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/705272902015471823'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/08/alla-ricerca-del-santo-graal.html' title='Alla ricerca del Santo Graal...'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5244778450511333940.post-3079387344391717215</id><published>2007-08-11T12:37:00.000+02:00</published><updated>2007-08-18T21:02:43.686+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='me'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='architetture sw'/><title type='text'>The Big Bang</title><content type='html'>&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:lucida grande;"&gt;Bene, anch'io nella blogosfera. Mi presento: sono un ingegnere informatico, dipendente di una società di IT nella sede di Palermo.&lt;br /&gt;&lt;br /&gt;E' un pò strano scrivere il tuo primo post. Sembra di salire su un palco dove un pubblico che non ti conosce ascolta per un attimo ciò che stai per dire. Poichè sullo stesso palco ci sono migliaia di altre persone che già parlano, è probabile che nessuno di accorga di te, ma ti senti lo stesso tutti gli occhi addosso...&lt;br /&gt;&lt;br /&gt;Questo blog servirà più a me che ad altri. Raccoglierò le mie idee, pubblicherò link e relativo breve commento, e spero anche di potere chiaccherare con chi condivide la mia passione informatica.&lt;br /&gt;&lt;br /&gt;Sono attratto soprattutto dalle architetture software e dalla usabilità delle interfacce utente, non necessariamente in ambito informatico.&lt;br /&gt;&lt;br /&gt;E per chiudere con qualcosa di spassoso e attinente, metto un link alla &lt;a href="http://homepage.mac.com/bradster/iarchitect/"&gt;Interface Hall of Shame&lt;/a&gt;, una "irriverente" collezione (vecchiotta, per la verità) di ciofeche nelle UI. Scommettiamo che c'è tuttora qualche esempio nelle applicazioni più recenti?&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/5244778450511333940-3079387344391717215?l=pietrobonanno.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pietrobonanno.blogspot.com/feeds/3079387344391717215/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5244778450511333940&amp;postID=3079387344391717215&amp;isPopup=true' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/3079387344391717215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5244778450511333940/posts/default/3079387344391717215'/><link rel='alternate' type='text/html' href='http://pietrobonanno.blogspot.com/2007/08/big-bang.html' title='The Big Bang'/><author><name>Pietro Bonanno</name><uri>http://www.blogger.com/profile/18160565687386809995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
