<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fabio Falcinelli &#187; Photography</title>
	<atom:link href="http://www.fabiofalcinelli.it/category/photography/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fabiofalcinelli.it</link>
	<description>A mix of code and photos...</description>
	<lastBuildDate>Sat, 29 May 2010 12:16:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>JNI su HP-UX, le dimensioni dello stack contano</title>
		<link>http://www.fabiofalcinelli.it/2010/03/jni-su-hp-ux-le-dimensioni-dello-stack-contano/</link>
		<comments>http://www.fabiofalcinelli.it/2010/03/jni-su-hp-ux-le-dimensioni-dello-stack-contano/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 18:39:00 +0000</pubDate>
		<dc:creator>Fabio</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Stuff]]></category>
		<category><![CDATA[BoKS]]></category>
		<category><![CDATA[HP-UX]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JNI]]></category>
		<category><![CDATA[pthread]]></category>
		<category><![CDATA[Stacksize]]></category>
		<category><![CDATA[tusc]]></category>

		<guid isPermaLink="false">http://www.fabiofalcinelli.it/?p=355</guid>
		<description><![CDATA[Arrugginito forse un po&#8217;, quando si passa tanto tempo a fare altro ci si dimentica di avere anche uno spazio web dove annotare quei piccoli successi che potrebbero tornare utili ad altri, ma anche a te semmai te ne dovessi dimenticare :) Il problema di fondo era che la chiamata JNI_CreateJavaVM produceva il segnale SIGABRT [...]]]></description>
			<content:encoded><![CDATA[<p>Arrugginito forse un po&#8217;, quando si passa tanto tempo a fare altro ci si dimentica di avere anche uno spazio web dove annotare quei piccoli successi che potrebbero tornare utili ad altri, ma anche a te semmai te ne dovessi dimenticare :)</p>
<p>Il problema di fondo era che la chiamata JNI_CreateJavaVM produceva il segnale SIGABRT quando invocato all&#8217;interno di un altro framework, nello specifico stavo utilizzando l&#8217;SDK BoKS.</p>
<p>La porzione di codice interessata, a parte dovuti accorgimenti, era del tutto coerente con quanto riportato da HP al link</p>
<p><a href="http://www.docs.hp.com/en/JAVAPROGUIDE/JNI_java2.html" target="_blank">http://www.docs.hp.com/en/JAVAPROGUIDE/JNI_java2.html</a></p>
<p>Provando ad utilizzare i parametri di inizializzazione della VM più svariati non si è cavato un ragno dal buco, seguendo comunque le linee guida riportate qui <a href="http://www.docs.hp.com/en/JAVAPROGUIDE/JNI_java2.html#primordial ">http://www.docs.hp.com/en/JAVAPROGUIDE/JNI_java2.html#primordial</a>, si è ipotizzato da subito un problema con lo stacksize su HP-UX, su Solaris, infatti, non erano stati riscontrati problemi di sorta.</p>
<p>Una sessione con <strong>tusc</strong> ha confermato quanto supposto:</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#6 kwakeup(PTH_CONDVAR_OBJECT, 0x60000000000ea400, WAKEUP_ONE, 0x9fffffff7f63cb50) = 0</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 ksleep(PTH_CONDVAR_OBJECT, 0x60000000000ea400, 0x60000000000d75b8, NULL) = 0</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#6 gettimeofday(0x9fffffff7f63cb30, NULL) ........ = 0</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 write(1, 0x9fffffffef4c0400, 43) .............. = 43</span><br />
E r r o r &nbsp; o c c u r r e d &nbsp; d u r i n g &nbsp; i n i t i a l i z a<br />
t i o n &nbsp; o f &nbsp; V M \n<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 write(1, 0x60000000001683a0, 28) .............. = 28</span><br />
j a v a . l a n g . S t a c k O v e r f l o <span style="color: #c20cb9; font-weight: bold;">w</span> E r r o r<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 write(1, 0xc000000015cf08b8, 1) ............... = 1</span><br />
\n<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 unlink(&quot;/var/tmp/hsperfdata_boksa/19196&quot;) ..... = 0</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 sigaction(SIGILL, 0x9fffffffef7c6740, NULL) ... = 0</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 sigprocmask(SIG_UNBLOCK, NULL, 0x9fffffffef4c0b80) = 0</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 sigaction(SIGABRT, NULL, 0x9fffffffef4c0ba0) .. = 0</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 getpid() ...................................... = 19196 (19194)</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 &nbsp; Received signal 6, SIGABRT, in kill(), [0x9fffffffef76bfd0]</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">19196</span><span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">#2 &nbsp; &nbsp; Siginfo: sent by pid 19196 (uid 600), si_errno: 0</span></div></div>
<p>La soluzione?</p>
<p>Un semplice export della variabile <strong>PTHREAD_DEFAULT_STACK_SIZE</strong> a <strong>524288</strong>.</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PTHREAD_DEFAULT_STACK_SIZE</span>=<span style="color: #000000;">524288</span></div></div>
<p>Si sarebbe anche potuta usare la chiamata pthread_default_stacksize_np(), ma poiché la parte di codice che crea i thread non è personalizzabile in quel dato SDK, l&#8217;export della variabile d&#8217;ambiente è stata l&#8217;unica soluzione attuabile.</p>
<p>Alla prossima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiofalcinelli.it/2010/03/jni-su-hp-ux-le-dimensioni-dello-stack-contano/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iSync con Samsung SGH-E250</title>
		<link>http://www.fabiofalcinelli.it/2009/07/isync-con-samsung-sgh-e250/</link>
		<comments>http://www.fabiofalcinelli.it/2009/07/isync-con-samsung-sgh-e250/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 19:59:25 +0000</pubDate>
		<dc:creator>Fabio</dc:creator>
				<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Nature]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iSync]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[Rosa]]></category>
		<category><![CDATA[Samsung]]></category>
		<category><![CDATA[SGH-E250]]></category>

		<guid isPermaLink="false">http://www.fabiofalcinelli.it/?p=323</guid>
		<description><![CDATA[La cosa bella di un Mac è che presenta una rosa di software pronta all&#8217;uso. La cosa brutta è che non essendo software OpenSource spesso non è possibile personalizzare al meglio le funzionalità che più ci occorrono. iSync è un&#8217;applicazione veramente ben fatta, mi ha dato subito soddisfazione con il mio vecchio Nokia 6600 per [...]]]></description>
			<content:encoded><![CDATA[<p>La cosa bella di un Mac è che presenta una <strong>rosa</strong> di software pronta all&#8217;uso. La cosa brutta è che non essendo software OpenSource spesso non è possibile personalizzare al meglio le funzionalità che più ci occorrono.</p>
<p>iSync è un&#8217;applicazione veramente ben fatta, mi ha dato subito soddisfazione con il mio vecchio Nokia 6600 per il quale, installando un agent sul cellulare stesso, tutto è andato alla grande. Con il Samsung SGH-E250, invece, il risultato era sempre lo stesso: dispositivo non supportato.</p>
<p>Con un po&#8217; di ricerche con Google, però, ho visto che telefoni come il Samsung D900, che è molto simile nell&#8217;aspetto e nelle specifiche al mio, funzionano alacremente.</p>
<p>Sono andato dunque dentro la cartella di iSync ( <em>/Applications/iSync.app/</em> ) a cercare qualcosa ed ho trovato appunto i driver del D900 dentro la cartella</p>
<p>/Applications/iSync.app/Contents/PlugIns/ApplePhoneConduit.syncdevice/Contents/PlugIns/Samsung-D900.phoneplugin</p>
<p>e mi son detto che magari come per le stampanti il mio telefono potrebbe funzionare con un driver di un altro molto simile a lui&#8230; E di fatti ha funzionato!</p>
<p>In sostanza mi sono limitato a copiare la cartella in</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/Applications/iSync.app/Contents/PlugIns/ApplePhoneConduit.syncdevice/Contents/PlugIns/Samsung-E250.phoneplugin</div></div>
<p>All&#8217;interno della cartella ho sostituito tutte le occorrenze di &#8220;D900&#8243; con &#8220;E250&#8243; nei seguenti file</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/Applications/iSync.app/Contents/PlugIns/ApplePhoneConduit.syncdevice/Contents/PlugIns/Samsung-E250.phoneplugin/Contents/Info.plist<br />
/Applications/iSync.app/Contents/PlugIns/ApplePhoneConduit.syncdevice/Contents/PlugIns/Samsung-E250.phoneplugin/Contents/Resources/MetaClasses.plist</div></div>
<p>ed infine ho rinominato il file (situato nella cartella /Applications/iSync.app/Contents/PlugIns/ApplePhoneConduit.syncdevice/Contents/PlugIns/Samsung-E250.phoneplugin/Contents/Resources/) <strong>com.samsung.D900.tiff</strong> in <strong>com.samsung.E250.tiff</strong>.</p>
<p>Certo, l&#8217;icona non è proprio la stessa però ci si avvicina molto ed è sempre meglio di niente :)</p>
<p>Avviando iSync la sincronizzazione è andata a buon fine, numeri di cellulare, indirizzi e-mail e compleanni sono stati caricati correttamente, solo le immagini personali non sono state caricate, ma direi che è accettabile anche questo :)</p>
<p>Il driver, ottenuto come sopra, per il Samsung SGH-E250 lo potete scaricare dal mio sito a <a title="Samsung E250 phone plugin" href="http://www.fabiofalcinelli.it/files/Samsung-E250.phoneplugin.tar.gz" target="_blank">questo link</a>, ricordate però che non è ufficiale e che l&#8217;utilizzo è a vostro rischio e pericolo ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiofalcinelli.it/2009/07/isync-con-samsung-sgh-e250/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Perla</title>
		<link>http://www.fabiofalcinelli.it/2009/07/perla/</link>
		<comments>http://www.fabiofalcinelli.it/2009/07/perla/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 19:46:32 +0000</pubDate>
		<dc:creator>Fabio</dc:creator>
				<category><![CDATA[Landscapes]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://www.fabiofalcinelli.it/?p=316</guid>
		<description><![CDATA[Spesso le cose belle sono ad un passo da noi e non ce ne accorgiamo perché tendiamo a vederle con occhi abitudinari. Ma basta un piccolo cambiamento per notare la bellezza che prima ci aveva lasciati indifferenti. Che perla di saggezza eh? :) Mi riferisco anche alla foto, che mi lascia abbastanza soddisfatto. Devo dire [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Spesso le cose belle sono ad un passo da noi e non ce ne accorgiamo perché tendiamo a vederle con occhi abitudinari. Ma basta un piccolo cambiamento per notare la bellezza che prima ci aveva lasciati indifferenti.</p></blockquote>
<p>Che perla di saggezza eh? :)</p>
<p>Mi riferisco anche alla foto, che mi lascia abbastanza soddisfatto. Devo dire che da quando guardo anche attraverso le lenti della mia reflex mi accorgo sempre più di quanto ci siano cose notevoli attorno a me che sfuggono allo sguardo della vita di tutti i giorni.</p>
<p>A tal proposito, diversi giorni fa su<a title="Quante belle cose ci stiamo perdendo?" href="http://www.facebook.com/video/video.php?v=1116506606593&amp;ref=mf" target="_blank"> facebook</a> ho letto queste righe che mi hanno molto colpito</p>
<blockquote><p>Un violinista nella metropolitana. Una storia vera. Un uomo si mise a sedere in una stazione della metro a Washington DC ed iniziò a suonare il violino; era un freddo mattino di gennaio. Suonò sei pezzi di Bach per circa 45 minuti. Durante questo tempo, poiché era l&#8217;ora di punta, era stato calcolato che migliaia di persone sarebbero passate per la stazione, molte delle quali sulla strada per andare al lavoro. Passarono 3 minuti ed un uomo di mezza età notò che c&#8217;era un musicista che suonava. Rallentò il passo e si fermò per alcuni secondi e poi si affrettò per non essere in ritardo sulla tabella di marcia. Alcuni minuti dopo, il violinista ricevette il primo dollaro di mancia: una donna tirò il denaro nella cassettina e senza neanche fermarsi continuò a camminare. Pochi minuti dopo, qualcuno si appoggiò al muro per ascoltarlo, ma l&#8217;uomo guardò l&#8217;orologio e ricominciò a camminare. Quello che prestò maggior attenzione fu un bambino di 3 anni. Sua madre lo tirava, ma il ragazzino si fermò a guardare il violinista. Finalmente la madre lo tirò con decisione ed il bambino continuò a camminare girando la testa tutto il tempo. Questo comportamento fu ripetuto da diversi altri bambini. Tutti i genitori, senza eccezione, li forzarono a muoversi. Nei 45 minuti in cui il musicista suonò, solo 6 persone si fermarono e rimasero un momento. Circa 20 gli diedero dei soldi, ma continuarono a camminare normalmente. Raccolse 32 dollari. Quando finì di suonare e tornò il silenzio, nessuno se ne accorse. Nessuno applaudì, ne&#8217; ci fu alcun riconoscimento. Nessuno lo sapeva ma il violinista era Joshua Bell, uno dei più grandi musicisti al mondo. Suonò uno dei pezzi più complessi mai scritti, con un violino del valore di 3,5 milioni di dollari. Due giorni prima che suonasse nella metro, Joshua Bell fece il tutto esaurito al teatro di Boston e i posti costavano una media di 100 dollari. Questa è una storia vera. L&#8217;esecuzione di Joshua Bell in incognito nella stazione della metro fu organizzata dal quotidiano Washington Post come parte di un esperimento sociale sulla percezione, il gusto e le priorità delle persone. La domanda era: &#8220;In un ambiente comune ad un&#8217;ora inappropriata: percepiamo la bellezza? Ci fermiamo ad apprezzarla? Riconosciamo il talento in un contesto inaspettato?&#8221;. Ecco una domanda su cui riflettere: &#8220;Se non abbiamo un momento per fermarci ed ascoltare uno dei migliori musicisti al mondo suonare la miglior musica mai scritta, quante altre cose ci stiamo perdendo?&#8221;</p></blockquote>
<p>Non è poi un pensiero così banale allora ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiofalcinelli.it/2009/07/perla/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Se Boulez incontra Büchner + Schubert</title>
		<link>http://www.fabiofalcinelli.it/2009/06/se-boulez-incontra-buchner-schubert/</link>
		<comments>http://www.fabiofalcinelli.it/2009/06/se-boulez-incontra-buchner-schubert/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 20:05:09 +0000</pubDate>
		<dc:creator>Fabio</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Boulez]]></category>
		<category><![CDATA[Büchner]]></category>
		<category><![CDATA[Conservatorio]]></category>
		<category><![CDATA[Quartetto]]></category>
		<category><![CDATA[Santa Cecilia]]></category>
		<category><![CDATA[Schubert]]></category>

		<guid isPermaLink="false">http://www.fabiofalcinelli.it/?p=302</guid>
		<description><![CDATA[Uno spettacolo veramente originale e interessante. Il programma: FRANZ SCHUBERT momento musicale op.94 n. 3 per archi Se Boulez incontra Büchner (versione da concerto) partitura per voce recitante e clarinetto dal Woyzeck di G. Büchner OLIVIER MESSIAEN Abîme des oiseaux PIERRE BOULEZ Domaines FRANZ SCHUBERT dal Quartetto in re min. La morte e la fanciulla, [...]]]></description>
			<content:encoded><![CDATA[<p>Uno spettacolo veramente originale e interessante. <a title="Programma Boulez Buchner" href="http://www.osmb.fr/S.EGIDIO/Conservatorio%20Roma2.pdf" target="_blank">Il programma</a>:</p>
<blockquote><p><strong>FRANZ SCHUBERT</strong><br />
momento musicale op.94 n. 3 per archi</p>
<p>Se <strong>Boulez</strong> incontra <strong>Büchner</strong><br />
(versione da concerto)<br />
<em> partitura per voce recitante e clarinetto dal <strong>Woyzeck</strong> di <strong>G. Büchner</strong></em><br />
<strong> OLIVIER MESSIAEN</strong> <em>Abîme des oiseaux</em><br />
<strong> PIERRE BOULEZ</strong> <em>Domaines</em></p>
<p><strong>FRANZ SCHUBERT</strong><br />
dal Quartetto in re min. <em>La morte e la fanciulla</em>,<br />
II mov. <em>Andante con moto</em></p>
<p><strong>Farfuri Nuredini, Martina Mariti</strong> | violini<br />
<strong> Darena Petrova, Mirjana Djokic</strong> | viole<br />
<strong> Mehdi Baba Ameur</strong> | violoncello<br />
(classe di Quartetto di Giulia Tafuri)</p>
<p><strong>Gaetano Russo</strong> | clarinetto<br />
<strong> Enzo Salomone</strong> | voce recitante</p></blockquote>
<p>Ho un po&#8217; approfittato del concerto del quartetto per fare delle foto. Il risultato non è malissimo, ma neanche perfetto. Di strada ne ho da fare, ma credo che piano piano qualcosa di positivo lo perseguo.</p>
<p>Intanto ho imparato diverse cose, per esempio credo sia meglio una foto non troppo sottoesposta ad una leggermente sovraesposta, dipende ovviamente da cosa si vuole fare, ma in linea generale mi sembra sia così.</p>
<p>E mi sono anche divertito a fare un po&#8217; di <em>zooming</em>, so che magari può sembrare banale, ma sono i miei primi tentativi e mi danno quel non so che di soddisfazione :)</p>
<p>Le foto che ho scattato, quelle che non sono venute troppo mosse dato il tempo di esposizione usato, le potete trovare sulla <a title="Concerto Quartetto 23/06/2009" href="http://www.flickr.com/photos/fabiofalcinelli/sets/72157620352350545/" target="_blank">mia gallery flickr</a>.</p>
<p>Per concludere, lo spettacolo è stato davvero un evento a cui vale la pena di partecipare e partecipare nuovamente :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiofalcinelli.it/2009/06/se-boulez-incontra-buchner-schubert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Restyle!</title>
		<link>http://www.fabiofalcinelli.it/2009/06/restyle/</link>
		<comments>http://www.fabiofalcinelli.it/2009/06/restyle/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 13:28:41 +0000</pubDate>
		<dc:creator>Fabio</dc:creator>
				<category><![CDATA[Nature]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Canon]]></category>
		<category><![CDATA[EOS]]></category>
		<category><![CDATA[Flower]]></category>

		<guid isPermaLink="false">http://www.fabiofalcinelli.it/?p=245</guid>
		<description><![CDATA[Da pochi giorni ho acquistato la reflex entry level della Canon, la EOS 1000D. Che dire, mi sto appassionando veramente alla fotografia, e sto iniziando a prenderci la mano, così ho deciso di dare una riorganizzata a questo spazio web. Grazie alla fantastica gallery creata da Chris Wallace, questo sito ha cambiato completamente aspetto! Mi [...]]]></description>
			<content:encoded><![CDATA[<p>Da pochi giorni ho acquistato la reflex entry level della Canon, la EOS 1000D.</p>
<p>Che dire, mi sto appassionando veramente alla fotografia, e sto iniziando a prenderci la mano, così ho deciso di dare una riorganizzata a questo spazio web.</p>
<p>Grazie alla fantastica <a title="Gallery, a free WoedPress Theme" href="http://www.chris-wallace.com/2009/05/04/gallery-wordpress-theme/" target="_blank">gallery</a> creata da <a title="Designer &amp; Developer" href="http://www.chris-wallace.com" target="_blank">Chris Wallace</a>, questo sito ha cambiato completamente aspetto! Mi sono limitato a fare delle semplici modifiche per automatizzare il processo di creazione delle thumbnail e delle immagini dentro ai post, ho aggiunto e modificato alcuni dettagli al css in modo da adattarlo ai miei gusti ed ho aggiunto anche lightbox&#8230; Insomma, il risultato è quello che vedete e non mi dispiace affatto :)</p>
<p>L&#8217;idea è di integrare la fotografia con quello che di tanto in tanto scrivo qui. Sentitevi liberi di lasciare commenti di qualunque tipo, sulle mie scarse capacità fotografiche (per ora ;) )  sulla qualità dei post, ogni critica, se costruttiva, è la benvenuta.</p>
<p>Le foto che mancano, verranno pian piano&#8230; Ho bisogno di tempo per sperimentare e imparare bene ad usare una reflex :)</p>
<p>Buona navigazione!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiofalcinelli.it/2009/06/restyle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xorg 1.6 &#8211; Ctrl + alt + backspace</title>
		<link>http://www.fabiofalcinelli.it/2009/06/xorg-16-ctrl-alt-backspace/</link>
		<comments>http://www.fabiofalcinelli.it/2009/06/xorg-16-ctrl-alt-backspace/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 10:23:07 +0000</pubDate>
		<dc:creator>Fabio</dc:creator>
				<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Stuff]]></category>
		<category><![CDATA[Archlinux]]></category>
		<category><![CDATA[HAL]]></category>
		<category><![CDATA[Xorg]]></category>

		<guid isPermaLink="false">http://www.fabiofalcinelli.it/?p=234</guid>
		<description><![CDATA[Una delle feature introdotte nella versione 1.6 di Xorg è la disabilitazione di default della combinazione ctrl+alt+backspace. Sulle mailing list è possibile leggere molto a riguardo, sul fatto che &#8220;normalmente&#8221; un riavvio del server X non dovrebbe essere necessario e su quanto, per un nuovo utente, possa essere semplice digitare accidentalmente la combinazione e ritrovarsi [...]]]></description>
			<content:encoded><![CDATA[<p>Una delle<em> feature </em>introdotte nella versione 1.6 di Xorg è la disabilitazione di default della combinazione <em>ctrl+alt+backspace</em>.</p>
<p>Sulle mailing list è possibile leggere molto a riguardo, sul fatto che &#8220;normalmente&#8221; un riavvio del server X non dovrebbe essere necessario e su quanto, per un nuovo utente, possa essere semplice digitare accidentalmente la combinazione e ritrovarsi con il lavoro perso e una bella schermata di login senza sapere perché.</p>
<p>In effetti le ragioni sono plausibili, ma per alcuni il &#8220;normalmente&#8221;, significa aver necessità di riavviare X senza dover eseguire il kill del processo da un terminale: in passato mi sono capitate delle situazioni in cui X si è  completamente congelato e con un <em>ctrl+alt+backspace</em> si è ripristinato il tutto senza dover riavviare l&#8217;intero sistema. Avendo l&#8217;opzione disabilitata, se il terminale (<em>ctrl+alt+f1&#8230;f6</em>)<em> </em>non risponde ai comandi allora non resta che il reset. Nel mio caso, ho preferito riabilitare l&#8217;opzione, aggiungendo al file <em>xorg.conf </em>(solitamente in <em>/etc/X11</em>) l&#8217;opzione &#8220;<em>DontZap</em>&#8221; ed impostandola a &#8220;<em>false</em>&#8220;. In proposito, riporto la sezione del mio file di configurazione:</p>
<div class="codecolorer-container xorg_conf twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xorg_conf codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">Section</span> <span style="color: #0000ff;">&quot;ServerFlags&quot;</span><br />
<span style="color: #adadad; font-style: italic;"># &nbsp; Option &quot;AllowMouseOpenFail&quot; &nbsp;&quot;true&quot;</span><br />
<span style="color: #adadad; font-style: italic;"># &nbsp; &nbsp; &nbsp;Option &quot;AutoAddDevices&quot; &quot;False&quot;</span><br />
&nbsp;<span style="color: #990000;">Option</span> &nbsp;<span style="color: #0000ff;">&quot;DontZap&quot;</span> <span style="color: #0000ff;">&quot;False&quot;</span><br />
<span style="color: #b1b100;">EndSection</span></div></div>
<p>In successivi aggiornamenti, è stata introdotta anche su HAL una disabilitazione della combinazione. Per riattivarla è sufficiente aggiungere questa entry</p>
<div class="codecolorer-container xml twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;merge</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;input.xkb.options&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;string&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
terminate:ctrl_alt_bksp<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/merge<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></div>
<p>all&#8217;interno del file <em>/etc/hal/fdi/policy/10-keymap.fdi</em></p>
<p>In caso il file non fosse presente, copiarlo da <em>/usr/share/hal/fdi/policy/10osvendor</em></p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>hal<span style="color: #000000; font-weight: bold;">/</span>fdi<span style="color: #000000; font-weight: bold;">/</span>policy<span style="color: #000000; font-weight: bold;">/</span>10osvendor<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">10</span>-keymap.fdi \<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>hal<span style="color: #000000; font-weight: bold;">/</span>fdi<span style="color: #000000; font-weight: bold;">/</span>policy<span style="color: #000000; font-weight: bold;">/</span></div></div>
<p>E modificarlo aggiungendo la entry di cui sopra.</p>
<p>Riporto di seguito il mio file keymap che funziona correttamente utilizzando <em>entrance</em> come login manager:</p>
<div class="codecolorer-container xml twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;deviceinfo</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;0.2&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;device<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;info.capabilities&quot;</span> <span style="color: #000066;">contains</span>=<span style="color: #ff0000;">&quot;input.keymap&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;append</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;info.callouts.add&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;strlist&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>hal-setup-keymap<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/append<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/match<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;info.capabilities&quot;</span> <span style="color: #000066;">contains</span>=<span style="color: #ff0000;">&quot;input.keys&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;merge</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;input.xkb.rules&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;string&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>base<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/merge<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- If we're using Linux, we use evdev by default (falling back to</span><br />
<span style="color: #808080; font-style: italic;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; keyboard otherwise). --&gt;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;merge</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;input.xkb.model&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;string&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>keyboard<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/merge<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/match<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;match</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;/org/freedesktop/Hal/devices/computer:system.kernel.name&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">string</span>=<span style="color: #ff0000;">&quot;Linux&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;merge</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;input.xkb.model&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;string&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>evdev<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/merge<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/match<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;merge</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;input.xkb.layout&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;string&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>it<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/merge<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;merge</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;input.xkb.variant&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;string&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;merge</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;input.xkb.options&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;string&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>terminate:ctrl_alt_bksp<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/merge<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/device<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/deviceinfo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></div>
<p>Infine, se non si sta usando l&#8217;integrazione Xorg/HAL occorrerà aggiungere una opzione nel file <em>/etc/X11/xorg.conf</em> all&#8217;interno della sezione keyboard</p>
<div class="codecolorer-container xorg_conf twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xorg_conf codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #990000;">Option</span> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;XkbOptions&quot;</span> <span style="color: #0000ff;">&quot;terminate:ctrl_alt_bksp&quot;</span></div></div>
<p>Al solito, spero che a qualcuno sia utile ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiofalcinelli.it/2009/06/xorg-16-ctrl-alt-backspace/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Shutdown HSQLDB</title>
		<link>http://www.fabiofalcinelli.it/2009/05/shutdown-hsqldb/</link>
		<comments>http://www.fabiofalcinelli.it/2009/05/shutdown-hsqldb/#comments</comments>
		<pubDate>Sat, 23 May 2009 09:35:43 +0000</pubDate>
		<dc:creator>Fabio</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Landscapes]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Calabria]]></category>
		<category><![CDATA[Fiumefreddo Bruzio]]></category>
		<category><![CDATA[HSQLDB]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Tramonto]]></category>

		<guid isPermaLink="false">http://www.fabiofalcinelli.it/?p=221</guid>
		<description><![CDATA[Ultimamente sto usando Hypersonic SQL DB in un software che sto scrivendo. Il driver utilizzato è &#8220;embedded&#8221; ovvero non è presente un server in attesa di ricevere comandi SQL, ma il database è un file gestito direttamente dal driver di hypersonic. Con questo tipo di accesso però, avevo notato perdite di dati sul database, non [...]]]></description>
			<content:encoded><![CDATA[<p>Ultimamente sto usando Hypersonic SQL DB in un software che sto scrivendo. Il driver utilizzato è &#8220;<em>embedded</em>&#8221; ovvero non è presente un server in attesa di ricevere comandi SQL, ma il database è un file gestito direttamente dal driver di hypersonic.</p>
<p>Con questo tipo di accesso però, avevo notato perdite di dati sul database, non tutto infatti diventava persistente e, certo di non aver scritto codice errato, iniziavo a pensare di non capirci più nulla.</p>
<p>Il fatto è che, a differenza di quanto ero solito fare con altri RDBMS, non è sufficiente chiudere una connessione con</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">connection.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></div></div>
<p>al termine dell&#8217;esecuzione del programma, il driver effettua caching delle tabelle per ottimizzare gli accessi al file system e non tutte le modifiche vengono scritte sul file.</p>
<p>È necessario fornire al driver l&#8217;istruzione di &#8220;SHUTDOWN&#8221; di modo che tutti i dati eventualmente ancora in cache vengano correttamente resi persistenti:</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003399;">Statement</span> shutdown <span style="color: #339933;">=</span> connection.<span style="color: #006633;">createStatement</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SHUTDOWN&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
shutdown.<span style="color: #006633;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
shutdown.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
connection.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Esiste inoltre, una funzione di shutdown che effettua anche una riorganizzazione del database ed una compressione dei dati. Essendo un&#8217;operazione lenta è bene non usarla troppo di frequente, il criterio d&#8217;uso è lo stesso di &#8220;SHUTDOWN&#8221;, &#8220;SHUTDOWN COMPACT&#8221;.</p>
<p>Alla prossima :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiofalcinelli.it/2009/05/shutdown-hsqldb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Last.fm will last&#8230;</title>
		<link>http://www.fabiofalcinelli.it/2009/04/lastfm-will-last/</link>
		<comments>http://www.fabiofalcinelli.it/2009/04/lastfm-will-last/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 20:58:04 +0000</pubDate>
		<dc:creator>Fabio</dc:creator>
				<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Stuff]]></category>
		<category><![CDATA[Last.fm]]></category>
		<category><![CDATA[Radio Rock]]></category>
		<category><![CDATA[Streaming]]></category>

		<guid isPermaLink="false">http://www.fabiofalcinelli.it/?p=193</guid>
		<description><![CDATA[Last.fm è un social network musicale che offre anche musica in streaming gratuitamente, o meglio offriva gratuitamente. Il titolo vuole essere più un gioco di parole dal mio punto di vista che altro. Infatti, ho appena ricevuto da last.fm una mail che riporta: &#8220;Your free trial to Last.fm Radio is about to end. If you&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>Last.fm è un social network musicale che offre anche musica in streaming gratuitamente, o meglio offriva gratuitamente.</p>
<p>Il titolo vuole essere più un gioco di parole dal mio punto di vista che altro. Infatti, ho appena ricevuto da last.fm una mail che riporta:</p>
<blockquote><p><em>&#8220;Your free trial to Last.fm Radio is about to end. If you&#8217;re enjoying it, why not<br />
subscribe for only 3.00/month and continue listening to non-stop personalised<br />
radio.</em></p>
<p><em><a href="http://www.last.fm/subscribe" target="_blank">http://www.last.fm/subscribe</a></em></p>
<p><em>Best Regards,<br />
The Last.fm Team&#8221;</em></p></blockquote>
<p>Ovvero, non avrò più la possibilità di ascoltare la radio organizzata per genere gratuitamente. Ora se è vero che 3 euro al mese non sono una cifra esorbitante (neanche trascurabile visto che un server semidedicato ne costa 5) è anche vero che questa presa di posizione non vale per tutti i paesi del mondo: germania, regno unito e stati uniti continueranno a usufruire del servizio gratuitamente, poiché il bacino di utenza di questi stati garantisce proventi sufficienti dalla pubblicità. Ragionevole, ma un po&#8217; ingiusto.</p>
<p>Al momento sto considerando se sottoscrivere questo abbonamento per continuare ad ascoltare la buona musica casuale che passa o se accantonarla del tutto. L&#8217;aspetto di &#8220;social network&#8221; del servizio non mi interessa più di tanto.</p>
<p>Vuoi vedere che non torno ad ascoltare la radio fm in casa come faccio in macchina?</p>
<p>La stazione sarebbe sicuramente <a title="Radio Rock 106.6" href="http://www.radiorockroma.it" target="_blank">Radio Rock</a> ;) Tanto più che trasmettono anche in streaming :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiofalcinelli.it/2009/04/lastfm-will-last/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle 10g &#8211; Upsert</title>
		<link>http://www.fabiofalcinelli.it/2009/01/oracle-10g-upsert/</link>
		<comments>http://www.fabiofalcinelli.it/2009/01/oracle-10g-upsert/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 12:03:07 +0000</pubDate>
		<dc:creator>Fabio</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Nature]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://fabiofalcinelli.netsons.org/?p=17</guid>
		<description><![CDATA[Recentemente mi è capitato di dover eseguire una insert or update, anche detta upsert, su Oracle 10g. Su MySQL ero solito usare la forma &#8220;INSERT &#8230; ON DUPLICATE KEY UPDATE &#8230;&#8221; che funziona piuttosto bene, ma che non era supportata dal database che stavo utilizzando. La versione 10g di Oracle, però, supporta l&#8217;operazione &#8220;MERGE&#8221;, entrata [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente mi è capitato di dover eseguire una <strong>insert or update</strong>, anche detta <strong>upsert</strong>, su Oracle 10g. Su MySQL ero solito usare la forma &#8220;INSERT &#8230; ON DUPLICATE KEY UPDATE &#8230;&#8221; che funziona piuttosto bene, ma che non era supportata dal database che stavo utilizzando.</p>
<p>La versione 10g di Oracle, però, supporta l&#8217;operazione &#8220;MERGE&#8221;, entrata a far parte dello standard SQL nel 2003, e si è rivelata molto comoda utilizzandola tramite JDBC.</p>
<p>Supponiamo di dover memorizzare in una tabella l&#8217;ultima pagina visitata da un utente in un dato giorno, possiamo utilizzare il seguente prepared statement java:</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003399;">PreparedStatement</span> pstmt <span style="color: #339933;">=</span> conn.<span style="color: #006633;">prepareStatement</span><span style="color: #009900;">&#40;</span><br />
<span style="color: #0000ff;">&quot;MERGE INTO last_page_table dst &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;USING ( &quot;</span><span style="color: #339933;">+</span><br />
<span style="color: #0000ff;">&quot;SELECT <span style="color: #000099; font-weight: bold;">\'</span>&quot;</span><span style="color: #339933;">+</span>username<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\'</span> USER_ID, &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;TO_DATE(<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> java.<span style="color: #006633;">sql</span>.<span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">currentTimeMillis</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\'</span>YYYY-MM-DD') &nbsp;DATE_FIELD, &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\'</span>&quot;</span><span style="color: #339933;">+</span>lastPage<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\'</span> LAST_PAGE &quot;</span><span style="color: #339933;">+</span><br />
<span style="color: #0000ff;">&quot;FROM DUAL) src &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;ON (dst.USER_ID = src.USER_ID AND &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;dst.DATE_FIELD = src.DATE_FIELD) &quot;</span><span style="color: #339933;">+</span><br />
<span style="color: #0000ff;">&quot;WHEN MATCHED THEN &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;UPDATE SET dst.LAST_PAGE = src.LAST_PAGE &quot;</span><span style="color: #339933;">+</span><br />
<span style="color: #0000ff;">&quot;WHEN NOT MATCHED THEN &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;INSERT (dst.USER_ID, &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;dst.DATE_FIELD, &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;dst.LAST_PAGE) &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; <span style="color: #0000ff;">&quot;VALUES (src.USER_ID, &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;src.DATE_FIELD, &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;src.LAST_PAGE)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>In sostanza, l&#8217;operazione &#8220;MERGE&#8221; funziona tra tabelle, prende i valori di una e li inserisce o aggiorna nell&#8217;altra in base al matching della condizione nella clausola &#8220;ON&#8221;.<br />
Tuttavia, la necessità non era di utilizzare valori preesistenti di una tabella ed inserirli o aggiornarli nell&#8217;altra, ma l&#8217;effettivo popolamento della tabella. Esigenza risolta appoggiandosi alla tabella &#8220;DUAL&#8221;.<br />
Ovviamente, invece di inserire direttamente nella stringa i valori necessari, si poteva utilizzare anche il &#8216;?&#8217; e chiamare poi le funzioni della classe PreparedStatement.</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003399;">PreparedStatement</span> pstmt <span style="color: #339933;">=</span> conn.<span style="color: #006633;">prepareStatement</span><span style="color: #009900;">&#40;</span><br />
<span style="color: #0000ff;">&quot;MERGE INTO last_page_table dst &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;USING ( &quot;</span><span style="color: #339933;">+</span><br />
<span style="color: #0000ff;">&quot;SELECT ? USER_ID, ? &nbsp;DATE_FIELD, ? LAST_PAGE &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;FROM DUAL) src &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;ON (dst.USER_ID = src.USER_ID AND &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;dst.DATE_FIELD = src.DATE_FIELD) &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;WHEN MATCHED THEN &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;UPDATE SET dst.LAST_PAGE = src.LAST_PAGE &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp;<span style="color: #0000ff;">&quot;WHEN NOT MATCHED THEN &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;INSERT (dst.USER_ID, &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">&quot;dst.DATE_FIELD, &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">&quot;dst.LAST_PAGE) &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;VALUES (src.USER_ID, &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">&quot;src.DATE_FIELD, &quot;</span><span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">&quot;src.LAST_PAGE)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Se non vi sono particolari necessità in termini di performance, sicurezza, flessibilità, in genere preferisco inserire tutto direttamente nella stringa in modo da poterla scrivere facilmente su un file di log prima di inviarla al driver:</p>
<div class="codecolorer-container java twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003399;">String</span> sqlMerge <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;MERGE INTO ...&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #003399;">PreparedStatement</span> pstmt <span style="color: #339933;">=</span> conn.<span style="color: #006633;">prepareStatement</span><span style="color: #009900;">&#40;</span>sqlMerge<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
logger.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Executing &quot;</span><span style="color: #339933;">+</span>sqlMerge<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
pstmt.<span style="color: #006633;">executeUpdate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiofalcinelli.it/2009/01/oracle-10g-upsert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello world!</title>
		<link>http://www.fabiofalcinelli.it/2009/01/hello-world/</link>
		<comments>http://www.fabiofalcinelli.it/2009/01/hello-world/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 18:01:08 +0000</pubDate>
		<dc:creator>Fabio</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://fabiofalcinelli.netsons.org/?p=1</guid>
		<description><![CDATA[Perché non iniziare col più classico dei messaggi anche qui? Mi ricordo il mio primo programma, come quello di quasi tutti penso, il classico &#8220;hello world!&#8221; in ogni parte del mondo si inizia così: int main&#40;void&#41; &#123; printf&#40;&#34;Hello world!\n&#34;&#41;; return 0; &#125; a seconda del linguaggio con cui si inizia ovviamente&#8230; Per me fu il [...]]]></description>
			<content:encoded><![CDATA[<p>Perché non iniziare col più classico dei messaggi anche qui? Mi ricordo il mio primo programma, come quello di quasi tutti penso, il classico &#8220;hello world!&#8221; in ogni parte del mondo si inizia così:</p>
<div class="codecolorer-container c twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello world!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>a seconda del linguaggio con cui si inizia ovviamente&#8230; Per me fu il Pascal, ma il C fu il linguaggio che mi appassionò di più.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fabiofalcinelli.it/2009/01/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
