<?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>Mauro Dalfreddo</title>
	<atom:link href="http://www.maurodalfreddo.it/feed" rel="self" type="application/rss+xml" />
	<link>http://www.maurodalfreddo.it</link>
	<description>My work, my life... my Blog</description>
	<lastBuildDate>Wed, 04 May 2011 21:00:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Tamron 18-270</title>
		<link>http://www.maurodalfreddo.it/archives/561/tamron-18-270</link>
		<comments>http://www.maurodalfreddo.it/archives/561/tamron-18-270#comments</comments>
		<pubDate>Wed, 04 May 2011 21:00:38 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Fotografia]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=561</guid>
		<description><![CDATA[Ho acquistato da qualche giorno questo obiettivo per la mia Canon: versatile (grandangolare e zoom) e contenuto nelle dimensioni, molto buono per il rapporto qualità/prezzo. L&#8217;altro giorno a Padova ho effettuato qualche scatto senza pretese e i risultati sono sicuramente positivi. &#8230; <a href="http://www.maurodalfreddo.it/archives/561/tamron-18-270">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-562" title="Tamron 18-270" src="http://www.maurodalfreddo.it/wp-content/uploads/2011/05/tamron_18_270.jpg" alt="" width="450" height="310" />Ho acquistato da qualche giorno questo obiettivo per la mia Canon: versatile (grandangolare e zoom) e contenuto nelle dimensioni, molto buono per il rapporto qualità/prezzo. L&#8217;altro giorno a Padova ho effettuato qualche scatto senza pretese e i risultati sono sicuramente positivi. Lo userò senz&#8217;altro nel mio prossimo viaggio in Francia.</p>

<div class="ngg-galleryoverview" id="ngg-gallery-4-561">

	<!-- Slideshow link -->
	<div class="slideshowlink">
		<a class="slideshowlink" href="http://www.maurodalfreddo.it/nggallery/post/tamron-18-270/slideshow">
			[Mosta come Slideshow]		</a>
	</div>

	
	<!-- Thumbnails -->
		
	<div id="ngg-image-75" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.maurodalfreddo.it/wp-content/gallery/scatti/ado_welsh_terrier5.jpg" title=" " class="shutterset_set_4" >
								<img title="Ado - Welsh terrier" alt="Ado - Welsh terrier" src="http://www.maurodalfreddo.it/wp-content/gallery/scatti/thumbs/thumbs_ado_welsh_terrier5.jpg" width="200" height="133" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-76" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.maurodalfreddo.it/wp-content/gallery/scatti/ceri.jpg" title=" " class="shutterset_set_4" >
								<img title="Bancarella di ceri a Padova" alt="Bancarella di ceri a Padova" src="http://www.maurodalfreddo.it/wp-content/gallery/scatti/thumbs/thumbs_ceri.jpg" width="200" height="133" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-77" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.maurodalfreddo.it/wp-content/gallery/scatti/lampione.jpg" title=" " class="shutterset_set_4" >
								<img title="Lampione in piazza del Santo a Padova" alt="Lampione in piazza del Santo a Padova" src="http://www.maurodalfreddo.it/wp-content/gallery/scatti/thumbs/thumbs_lampione.jpg" width="100" height="150" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<div class="thanks_button_div" style="float: left; margin-right: 10px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(561, 'Hai già lasciato un &rdquo;Grazie&rdquo; per questo articolo')" value="Grazie, mi piace: 5"
                class="thanks_button thanks_custom_button "
                style="background-image:url(http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_black1long.png);width:180px; height:26px; font-family: Verdana, Arial, Sans-Serif; font-size: 12px; font-weight: normal;; color:#ffffff;"
                id="thanksButton_561_2" title="Clicca per ringraziare per questo articolo"/></div><div id="ajax_loader_561_2" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/561/tamron-18-270/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Workflow nella fotografia digitale</title>
		<link>http://www.maurodalfreddo.it/archives/537/workflow-fotografia-digitale</link>
		<comments>http://www.maurodalfreddo.it/archives/537/workflow-fotografia-digitale#comments</comments>
		<pubDate>Fri, 04 Feb 2011 12:30:52 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Fotografia]]></category>
		<category><![CDATA[Pensieri]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=537</guid>
		<description><![CDATA[La scelta di Adobe Bridge per semplificare il mio workflow nella fotografia digitale; lo sviluppo di uno script JSX per la sincronizzazione dei metadati tra files CR2 e JPG <a href="http://www.maurodalfreddo.it/archives/537/workflow-fotografia-digitale">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Mi sono avvicinato alla Fotografia da bambino; all&#8217;epoca utilizzavo una macchinetta a fuoco fisso con pellicola a caricatore&#8230;<br />
Poi quando mio padre mi regalò la sua vecchia reflex (una gloriosa Exacta) cominciai a controllare meglio ciò che fotografavo e come:<br />
non potendo confidare nell&#8217;esposimetro integrato rotto, e anche se mi affidavo all&#8217;istinto, ho cominciato a studiare la teoria<br />
dell&#8217;esposizione fotografica (Il manuale del giovane fotografo, George Haines); e le foto venivano abbastanza bene! </p>
<div id="attachment_542" class="wp-caption alignleft" style="width: 310px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2011/02/exacta.jpg"><img class="size-medium wp-image-542 " title="Reflex Exacta" src="http://www.maurodalfreddo.it/wp-content/uploads/2011/02/exacta-300x199.jpg" alt="Reflex Exacta" width="300" height="199" /></a><p class="wp-caption-text">La mia reflex Exacta Il manuale del giovane fotografo</p></div>
<p>Personalmente aborro il modo di fotografare oggi con le macchinette fotografiche digitali compatte, ovvero mirando a distanza col display lcd e lasciando l&#8217;apparecchio in modalità automatica: fotografando senza un controllo fine e senza impegno e cura nella composizione<br />
si avranno risultati mediocri e più o meno casuali.<br />
Dal mio punto di vista avvicinare l&#8217;occhio al mirino dell&#8217;apparecchio è il primo sforzo da compiere per affacciarsi ad un nuovo mondo&#8230;<br />
Da poco più di due anni sono il felice possessore di una Canon EOS 1000D, che per quando reflex entry-level, mi ha indotto a riscoprire a poco a poco la fotografia digitale; la passione mi ha coinvolto a tal punto che mesi fà ho acquistato e iniziato a leggere la serie di ottimi libri di tecnica fotografica di Michael Freeman e di fotoritocco avanzato con Photoshop. E la produzione di fotografie digitali è ovviamente aumentata a dismisura, confluendo nei dispositivi di storage e ovviamente i backup.</p>
<div id="attachment_543" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2011/02/canon1000d_menu.jpg"><img class="size-medium wp-image-543" title="Canon EOS 1000D" src="http://www.maurodalfreddo.it/wp-content/uploads/2011/02/canon1000d_menu-300x177.jpg" alt="Canon EOS 1000D" width="300" height="177" /></a><p class="wp-caption-text">Canon EOS 1000D</p></div>
<p>Penso che, se le foto non vengono visionate e catalogate in modo sistematico, rimangono solamente files nel PC.<br />
Per organizzare il materiale digitale si può sicuramente iniziare da un sistema semplice di memorizzazione in cartelle, ma questa modalità non è essere sicuramente efficente nel processo (workflow) di catalogazione, di scelta , di revisione, sviluppo e fotoritocco delle immagini: pensiamo al tempo da dover dedicare soprattutto in presenza di migliaia di files e di quanto poco ne abbiamo (in media) a disposizione&#8230; </p>
<p>Dopo molto leggere e documentarmi, tra vari software presenti sul mercato per la gestione dei contenuti multimediali (DAM, Digital Asset management: Lightroom,Extensis Portfolio,Expression Media ), ho scelto Adobe Bridge poichè corrispondeva alle mie esigenze tra le quali: </p>
<ul>
<li>non è invasivo, nel senso che non stravolge l&#8217;organizzazione preesistente dei file in cartelle, ma l&#8217;affianca con le funzionalità mancanti</li>
<li>gestisce i metadati, il rating e la classificazione delle foto in modo semplice ed intuitivo</li>
<li>ha delle maschere per sfogliare e revisionare velocemente</li>
<li>possiede delle funzioni molto potenti per creare collezioni di foto basate su raccolte dinamiche e preferiti</li>
<li>è espandibile: supporta un potente linguaggio a script (API e SDK).</li>
</ul>
<div id="attachment_545" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2011/02/bridge_collage.jpg"><img class="size-medium wp-image-545" title="Adobe Bridge" src="http://www.maurodalfreddo.it/wp-content/uploads/2011/02/bridge_collage-300x227.jpg" alt="Adobe Bridge" width="300" height="227" /></a><p class="wp-caption-text">Adobe Bridge</p></div>
<p>Il workflow nella fotografia digitale si può rissumere  in modo grossolano nelle seguenti fasi:<br />
1- fotografare (bene)<br />
2- scaricare le foto dalla scheda di memoria in una o più cartelle del disco, secondo il proprio schema preferito<br />
3- effettuare immediatamente il backup<br />
4- perdere un po&#8217; di tempo per categorizzare (taggare) le foto, attribuendole keywords specifiche (per facilitare la ricerca futura)<br />
5- visionare le foto, marcandole coi colori (rosso/verde) al fine di scartare quelle palesemente brutte e non utilizzabili e che dovrebbero essere poi cancellate<br />
6- revisionare le foto, attribuendo alle rimanenti il rating (1,2 o 3 stelle) valutandole in base a composizione, esposizione, fuoco e bellezza<br />
7- assegnare ad una collezione le foto identificate come le migliori<br />
8- fase di sviluppo e fotoritocco con il software specifico Photoshop, Camera Row, ecc.<br />
9- backup ulteriore<br />
Le fasi centrali (dalla 4 alla 7), che normalmente portano via molto tempo, sono completamente effettuabili in Bridge in modo assai semplice. </p>
<p>Nella mia Canon 1000D lascio impostata la qualità RAW+JPG, utilizzabile nella modalità creativa, perchè, indipendentemente dal fatto che le fotografie vengano bene o abbiamo qualcosa che non và, non voglio perdere la possibilità di svilupparle nuovamente dal negativo digitale (il formato RAW) o di &#8220;ritoccarle&#8221; alla massima qualità e definizione.<br />
I file RAW Canon hanno dal 2004 l&#8217;estensione CR2; anche se una piccola anteprima è immagazzinata nel file raw stesso, selezionando RAW+JPG vengono prodotti fisicamente 2 files, ovvero un file row CR2 e un&#8217;immagine JPG, la cui qualità è solitamente impostabile<br />
(tranne che in EOS 10D, 350D, 400D, 450D, 1000D). </p>
<p>Avere sempre anche il file JPG è comodo nel caso in cui non sia necessaria la fase di sviluppo o fotoritocco, ma avere due files da catalogare e valutare è abbastanza scomodo, proprio se voglio minimizzare le operazioni e i tempi di tali fasi. </p>
<p>Ho quindi utilizzato le potenzialità offerte da Adobe Bridge per creare una funzionalità che mi permettesse, dopo aver categorizzato i file JPG, di riportare keywords, rating e labels anche sui relativi files CR2; tutto sommato lo scripting jsx di Bridge (o meglio della suite CS) è javascript object oriented, che si interfaccia alle API messe a disposizione dai prodotti Adobe. </p>
<div id="attachment_549" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2011/02/MDExtensionScript.jpg"><img class="size-full wp-image-549" title="MDExtensionScript" src="http://www.maurodalfreddo.it/wp-content/uploads/2011/02/MDExtensionScript.jpg" alt="" width="500" height="400" /></a><p class="wp-caption-text">Menu delle estensioni da me scritte</p></div>
<p>Per ogni immagine selezionata viene verificato se nella stessa cartella è presente il corrispondente file raw CR2, e nel caso i metadati vengono aggiornati con quelli presenti nell&#8217;immagine JPG. Alla modifica viene creato o modificato il file XMP dei metadati: è questa la strategia di Adobe, cioè affiancare un file XML contenente tutte le informazioni aggiuntive necessarie, scelta a mio avviso felice,<br />
poichè mi consentirà di esporarle facilmente verso altri software o anche in un database, in caso di una futura migrazione. </p>
<p>Download script: <a href="http://www.maurodalfreddo.it/wp-content/uploads/2011/02/MDExtensionBridgeScript_v1.zip">MDExtensionBridgeScript_v1</a> </p>
<p>Lo script deve essere installato nell&#8217;apposita cartella &#8220;Startup Scripts&#8221; (cfr. readme.txt) e dalla prima attivazione crea il menu Scripts con le voci della figura sopra.</p>
<p><strong>Riferimenti</strong> </p>
<p><a href="http://www.canon.it/for_home/product_finder/cameras/digital_slr/EOS_1000D/" target="_blank">Canon EOS 1000D</a> </p>
<p><a href="http://cpn.canon-europe.com/content/education/infobank/image_compression/how_to_set_raw_jpeg.do" target="_blank">Canon impostazioni RAW+JPG</a> </p>
<p><a href="http://en.wikipedia.org/wiki/Digital_asset_management">http://en.wikipedia.org/wiki/Digital_asset_management</a> DAM &#8211; Digital Asset Management</p>
<p><a href="http://www.adobe.com/devnet/bridge.html">http://www.adobe.com/devnet/bridge.html</a>   Bridge Developer Center  &#8211; CS5/CS4 SDK + Reference, <a href="http://www.adobe.com/products/creativesuite/pdfs/bridge_javascript_ref.pdf" target="_blank">Bridge CS2 Scripting Reference</a></p>
<p><a href="http://www.creativescripting.net/BridgeScripts/barredrock.html">http://www.creativescripting.net/BridgeScripts/barredrock.html</a>  &#8211; Barred Rock Scripts</p>
<p><a href="http://lclevy.free.fr/cr2/">http://lclevy.free.fr/cr2/</a>     Understanding What is stored in a Canon RAW .CR2 file, How and Why</p>
<p>Photoshop® CS4 After the Shoot &#8211; Mark Fitzgerald (<a href="http://www.amazon.com/Photoshop-After-Shoot-Mark-Fitzgerald/dp/0470389869" target="_blank">Amazon.com</a>)</p>
<p>100 e un consiglio per il fotografo, L&#8217;esposizione fotografica, L&#8217;illuminazione nella fotografia digitale, L&#8217;occhio del fotografo &#8211; la composizione in fotografia, Natura e paesaggi &#8211; <a href="http://www.michaelfreemanphoto.com/" target="_blank">Michael Freeman</a> (<a href="http://www.logosedizioni.it/logosbooks.php?bid=2141" target="_blank">Ed. Logos</a>)</p>
<p><a href="http://www.juzaphoto.com">www.juzaphoto.com</a> Juza Nature Photography</p>
<div class="thanks_button_div" style="float: left; margin-right: 10px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(537, 'Hai già lasciato un &rdquo;Grazie&rdquo; per questo articolo')" value="Grazie, mi piace: 0"
                class="thanks_button thanks_custom_button "
                style="background-image:url(http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_black1long.png);width:180px; height:26px; font-family: Verdana, Arial, Sans-Serif; font-size: 12px; font-weight: normal;; color:#ffffff;"
                id="thanksButton_537_1" title="Clicca per ringraziare per questo articolo"/></div><div id="ajax_loader_537_1" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/537/workflow-fotografia-digitale/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Piccoli grandi cambiamenti</title>
		<link>http://www.maurodalfreddo.it/archives/523/piccoli-grandi-cambiamenti</link>
		<comments>http://www.maurodalfreddo.it/archives/523/piccoli-grandi-cambiamenti#comments</comments>
		<pubDate>Fri, 07 Jan 2011 22:16:34 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Pensieri]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=523</guid>
		<description><![CDATA[Ho finalmente aggiornato il tema del sito grazie a NextGEN Gallery <a href="http://www.maurodalfreddo.it/archives/523/piccoli-grandi-cambiamenti">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Era ora di cambiare&#8230; dopo ben 5 anni ho cambiato il tema del mio sito; ho sostituito il tema integrato col plugin &#8220;Dynamic Header&#8221; che avevo sviluppato personalmente nel 2006, partendo da uno tema standard wordpress e dall&#8217;ottimo plugin <a href="http://nextgen-gallery.com/" target="_blank">NextGEN Gallery</a>, che già utilizzo e utilizzerò massivamente in futuro per pubblicare le fotografie da me scattate&#8230;</p>

<a href='http://www.maurodalfreddo.it/archives/523/piccoli-grandi-cambiamenti/screenshot' title='screenshot'><img width="150" height="150" src="http://www.maurodalfreddo.it/wp-content/uploads/2011/01/screenshot-150x150.png" class="attachment-thumbnail" alt="screenshot" title="screenshot" /></a>
<a href='http://www.maurodalfreddo.it/archives/523/piccoli-grandi-cambiamenti/screenshot-2' title='screenshot'><img width="150" height="150" src="http://www.maurodalfreddo.it/wp-content/uploads/2011/01/screenshot-150x150.gif" class="attachment-thumbnail" alt="screenshot" title="screenshot" /></a>

<p>Ho poi securizzato il form di contatto utilizzando il plugin <a href="http://wordpress.org/extend/plugins/si-contact-form/" target="_blank">Fast Secure Contact Form</a>.</p>
<p>Ancora qualche piccola limatura&#8230; ma lo stile del sito oramai è delineato: uno stile più pulito, un pagina più lineare e semplice da leggere.</p>
<div class="thanks_button_div" style="float: left; margin-right: 10px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(523, 'Hai già lasciato un &rdquo;Grazie&rdquo; per questo articolo')" value="Grazie, mi piace: 1"
                class="thanks_button thanks_custom_button "
                style="background-image:url(http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_black1long.png);width:180px; height:26px; font-family: Verdana, Arial, Sans-Serif; font-size: 12px; font-weight: normal;; color:#ffffff;"
                id="thanksButton_523_1" title="Clicca per ringraziare per questo articolo"/></div><div id="ajax_loader_523_1" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/523/piccoli-grandi-cambiamenti/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Stephen J.Cannel 1941 &#8211; 2010</title>
		<link>http://www.maurodalfreddo.it/archives/442/stephen-j-cannel-1941-2010</link>
		<comments>http://www.maurodalfreddo.it/archives/442/stephen-j-cannel-1941-2010#comments</comments>
		<pubDate>Tue, 12 Oct 2010 21:17:11 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Pensieri]]></category>
		<category><![CDATA[Ralph Supermaxieroe]]></category>
		<category><![CDATA[The Greatest American Hero]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=442</guid>
		<description><![CDATA[Stephen J.Cannel continuerà a vivere nelle menti e nei cuori dei lettori e degli spettatori intrattenuti dai suoi telefilm. <a href="http://www.maurodalfreddo.it/archives/442/stephen-j-cannel-1941-2010">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="mceTemp">
<dt class="wp-caption-dt"> </dt>
</div>
<p>L&#8217;ho appreso stasera con tristezza, ma è accaduto una decina di giorni fà, il 1 ottobre 2010: se ne và un&#8217;altro mito degli anni &#8217;80, Stephen J. Cannell. E&#8217; morto a Pasadena (California) il 1 ottobre scorso a causa di complicazioni legate al melanoma, il sessantanovenne sceneggiatore e produttore di dozzine di serie TV tra cui A-Team, Riptide e Ralph Supermaxierore (The Greatest American Hero; proprio quest&#8217;anno ci aveva lasciato anche Robert Culp, l&#8217;attore co-protagonista)<br />
 </p>
<p><a href="http://www.maurodalfreddo.it/wp-content/uploads/2010/10/stephenjchannell.jpg" target="_blank"><img style="padding: 5px;" title="Stephen J. Cannell" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/10/stephenjchannell-189x300.jpg" border="0" alt="" width="189" height="300" align="left" /></a></p>
<dt class="wp-caption-dt"> Su Facebook il suo Team ha subito annunciato:  </dt>
<p><em> With profound sadness, we have to announce that our dear friend and colleague,  Stephen Cannell, has lost a brave fight against cancer.<br />
 He passed away at his home last night.<br />
 He will be missed beyond measure by the Cannell Team and all of us who had the privilege<br />
 and the plain good luck to know and work with him.<br />
 Through the legacy of his body of work, with which he was able to entertain and enrich the lives of millions of viewers and thousands of readers,<br />
 he will always be with us, living on in our hearts and minds,  with fond memories forever.</em><br />
   </p>
<p>Mi ha fatto riflettere un commento di una fan (che poi è anche riportato sull&#8217;home page del sito TGAH):<em> He truly is the Greatest American Hero</em>.<br />
 </p>
<p><strong>Alcuni riferimenti</strong> <br />
 <a href="http://www.facebook.com/StephenCannell" target="_blank">http://www.facebook.com/StephenCannell</a><br />
 <a href="http://www.cannell.com/television-tvList.php" target="_blank">http://www.cannell.com/television-tvList.php</a><br />
 <a href="http://www.the-greatest-american-hero.com/" target="_blank">http://www.the-greatest-american-hero.com/</a></p>
<div class="thanks_button_div" style="float: left; margin-right: 10px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(442, 'Hai già lasciato un &rdquo;Grazie&rdquo; per questo articolo')" value="Grazie, mi piace: 0"
                class="thanks_button thanks_custom_button "
                style="background-image:url(http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_black1long.png);width:180px; height:26px; font-family: Verdana, Arial, Sans-Serif; font-size: 12px; font-weight: normal;; color:#ffffff;"
                id="thanksButton_442_1" title="Clicca per ringraziare per questo articolo"/></div><div id="ajax_loader_442_1" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/442/stephen-j-cannel-1941-2010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grazie Google</title>
		<link>http://www.maurodalfreddo.it/archives/406/grazie-google</link>
		<comments>http://www.maurodalfreddo.it/archives/406/grazie-google#comments</comments>
		<pubDate>Wed, 22 Sep 2010 20:42:24 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Hack]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=406</guid>
		<description><![CDATA[Ho recuperato alcuni contenuti del sito persi, grazie alla cache delle pagine dei motori di ricerca. <a href="http://www.maurodalfreddo.it/archives/406/grazie-google">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Come sono riuscito a ripristinare il mio sito da una situazione catastrofica</em></p>
<div id="attachment_408" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-408" title="Altopiano di Asiago 2010" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/montagna500b.jpg" alt="" width="500" height="361" /><p class="wp-caption-text">Altopiano di Asiago 2010</p></div>
<p>Ho trascorso le ferie di fine agosto in montagna. Tornando, una decina di giorni fà, ho ricevuto una newsletter dal fornitore dell&#8217;hosting nella quale veniva fatto riferimento ad alcuni disagi subiti da alcuni utenti a causa del crash del database.</p>
<p>Rimanendo un po&#8217; perplesso, ma giusto per curiosità, ho aperto col browser il mio sito, trascurato per molte settimane. </p>
<p>Ho sgranato gli occhi leggendo su una pagina semi-bianca il titolo  &#8220;<em>jhjhlooddwwd: Solo un altro sito WordPress</em>&#8221; !</p>
<p><strong>Orrore e tragedia</strong>! Pochi istanti e la conferma dei tecnici dell&#8217;Hosting provider<br />
e ho capito che il database del mio sito era uno di quelli sfortunati, cioè si era in pratico &#8220;fumato&#8221; a causa di un grave errore hardware del server, ma soprattutto che i dati non potevano essere ripristinati!</p>
<p>Chi predica bene razzola male: non avevo impostato backup periodici, e l&#8217;ultimo backup che avevo fatto manualmente al DB era purtroppo abbastanza vecchio da non contenere alcuni ultimi post! Accidentaccio&#8230; il contenuto di qualche articolo, a mio avviso, era veramente interessante ed era un peccato che fosse stato perso così.</p>
<p>Per fortuna che alcune idee buone vengono al momento giusto: grazie alla cache delle pagine nei motori di ricerca e<br />
grazie anche alla latenza con la quale i crawlers effettuano la scansione dei siti, sono riuscito fortunosamente a recuperare e salvare tutti i contenuti persi.<br />
Se la velocità di scansione fosse stata più elevata, anche per esempio settimanale, avrei recuperato solo parzialmente le informazioni: non tutti i mali vengono per nuocere quindi!</p>
<p>Grazie allora a</p>
<p> <a href="http://www.google.it" target="_blank">Google</a>,  <a href="http://www.bing.com/" target="_blank">Bing</a> e  <a href="http://www.gigablast.com/" target="_blank">Gigablast</a></p>
<p>non lo conoscevo, ma ho utilizzato anche Gigablast, The &#8220;Green&#8221; Search Engine, la cui server farm viene alimentata al 90% dall&#8217;energia pulita del vento.<br />
Poi, per non affidarmi esclusivamente a backup manuali, ho creato opportuni script per il backup:<br />
Il database non è accedibile direttamente, ma solo via Web da MySqlAdmin e accedendo precedentemente da CPanel:<br />
certamente sono precauzioni legate alla sicurezza, ma impediscono l&#8217;implementazione di un automatismo semplice.</p>
<p>Utilizzando Wget in 3 passi, si riesce a scaricare un backup gzippato del DB, simulando le stesse azioni che farebbe un utente reale.</p>
<p>Di seguito riporto il contenuto dello script backup.sh:</p>
<pre><span style="color: #008000;">-- cpanel url
cpurl=https://cp.tophost.it/
cpusr=user1
cppwd=pass1</span></pre>
<pre><span style="color: #008000;">-- mysqladmin url
dburl=$cpurl/mysql/
dbusr=database_user
dbpwd=database_pass</span></pre>
<pre><span style="color: #008000;">-- file location
d=$(dirname $0)
bkfile="backup.sql-$(date +%F).gz"
bkurl="$dburl/export.php?export_type=server&amp;db_select%5B%5D=database_user&amp;what=s
ql&amp;header_comment=&amp;sql_compat=NONE&amp;sql_structure=structure&amp;sql_auto_increment=1&amp;
use_backquotes=1&amp;sql_data=data&amp;showcolumns=yes&amp;extended_ins=yes&amp;max_query_size=5
0000&amp;hexforbinary=yes&amp;sql_type=insert&amp;latex_caption=yes&amp;latex_structure=structur
e&amp;latex_structure_caption=Struttura+della+tabella+__TABLE__&amp;latex_structure_cont
inued_caption=Struttura+della+tabella+__TABLE__+%28continua%29&amp;latex_structure_l
abel=tab%3A__TABLE__-structure&amp;latex_data=data&amp;latex_showcolumns=yes&amp;latex_data_
caption=Contenuto+della+tabella+__TABLE__&amp;latex_data_continued_caption=Contenuto
+della+tabella+__TABLE__+%28continua%29&amp;latex_data_label=tab%3A__TABLE__-data&amp;la
tex_replace_null=%5Ctextit%7BNULL%7D&amp;csv_data=csv_data&amp;export_separator=%3B&amp;encl
osed=%22&amp;escaped=%5C&amp;add_character=%5Cr%5Cn&amp;csv_replace_null=NULL&amp;excel_data=exc
el_data&amp;excel_replace_null=NULL&amp;excel_edition=win&amp;htmlexcel_data=htmlexcel_data&amp;
htmlexcel_replace_null=NULL&amp;htmlword_structure=structure&amp;htmlword_data=data&amp;html
word_replace_null=NULL&amp;pdf_data=pdf_data&amp;pdf_report_title=&amp;xml_data=xml_data&amp;asf
ile=sendit&amp;filename_template=__SERVER__&amp;remember_template=on&amp;compression=gzip"</span><span style="color: #008000;"> </span></pre>
<pre><span style="color: #008000;">/usr/bin/wget  --save-cookies=c --keep-session-cookies --http-user=$cpusr --http
-passwd=$cppwd -O $d/u1 -q $cpurl
/usr/bin/wget  --save-cookies=c1 --load-cookies=c --keep-session-cookies --http-
user=$dbusr --http-passwd=$dbpwd -O $d/u2 -q $dburl
/usr/bin/wget  --save-cookies=c2 --load-cookies=c1 --keep-session-cookies --http
-user=$dbusr --http-passwd=$dbpwd -O $d/$bkfile -q $bkurl</span></pre>
<p> <br />
Per quanto riguarda la copia del filesystem ho utilizzato Lftp.</p>
<pre><span style="color: #008000;">echo "open ftp://$login:$password@$desthost" &gt; $tmpfile
echo "mirror -ec / $d/MIRROR/" &gt;&gt; $tmpfile
echo "exit" &gt;&gt; $tmpfile</span></pre>
<pre><span style="color: #008000;">/usr/bin/lftp -f  $tmpfile</span></pre>
<p> </p>
<div id="attachment_413" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-413" title="Pomeriggio d'agosto sull'Altopiano" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/sereno500.jpg" alt="" width="500" height="369" /><p class="wp-caption-text">Pomeriggio d&#39;agosto sull&#39;Altopiano</p></div>
<p>In questi giorni sto finendo di ri-caricare i contenuti persi. Ora, con i backup periodici schedulati e funzionanti, mi sento più tranquillo e sereno.</p>
<h2>Riferimenti</h2>
<p>- lftp: <a href="http://lftp.yar.ru/">http://lftp.yar.ru/</a></p>
<p>- Cpanel: <a href="http://www.cpanel.net/">http://www.cpanel.net/</a></p>
<p>- MysqlAdmin: <a href="http://sourceforge.net/projects/mysql-admin/">http://sourceforge.net/projects/mysql-admin/</a></p>
<p>- Altopiano di Asiago: <a href="http://www.asiago7comuni.to/it/home.htm">http://www.asiago7comuni.to/it/home.htm</a></p>
<div class="thanks_button_div" style="float: left; margin-right: 10px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(406, 'Hai già lasciato un &rdquo;Grazie&rdquo; per questo articolo')" value="Grazie, mi piace: 0"
                class="thanks_button thanks_custom_button "
                style="background-image:url(http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_black1long.png);width:180px; height:26px; font-family: Verdana, Arial, Sans-Serif; font-size: 12px; font-weight: normal;; color:#ffffff;"
                id="thanksButton_406_1" title="Clicca per ringraziare per questo articolo"/></div><div id="ajax_loader_406_1" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/406/grazie-google/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enrico Ruggeri</title>
		<link>http://www.maurodalfreddo.it/archives/99/enrico-ruggeri</link>
		<comments>http://www.maurodalfreddo.it/archives/99/enrico-ruggeri#comments</comments>
		<pubDate>Thu, 24 Jun 2010 13:18:59 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Musica]]></category>
		<category><![CDATA[Pensieri]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=99</guid>
		<description><![CDATA[Abbiamo assistito ad uno stupendo concerto del grande Enrico e della sua band <a href="http://www.maurodalfreddo.it/archives/99/enrico-ruggeri">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Un grande ed emozionante primo concerto del tour estivo 2010 di Enrico Ruggeri</em></p>
<p><em> </em></p>
<div id="attachment_334" class="wp-caption alignnone" style="width: 510px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/ruggeri2m.jpg"><img class="size-full wp-image-334" title="Enrico Ruggeri - La Ruota Tour 2010" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/ruggeri2p.jpg" alt="" width="500" height="287" /></a><p class="wp-caption-text">Enrico Ruggeri - La Ruota Tour 2010</p></div>
<p>La Ruota Tour 2010 </p>
<p class="wp-caption-dt">E’ cominciato venerdì 18 giugno scorso a Cologna Veneta il tour estivo di Enrico Ruggeri. Ero presente anch’io. E’da tanti anni che non assistevo ad un suo concerto, dal lontano ‘92: quello fù un concerto del “Peter Pan Tour” tenuto al Supercinema di Padova.  Oggi come allora ho goduto di un concerto perfetto ed <em>a misura d’uomo</em>, ovvero dall’atmosfera coinvolgente, con acustica perfetta (non scadente come negli stadi o negli infernali palasport), e senza l’affollamento caratteristico dei mega-concertoni, dovuto sicuramente anche al carattere elitario della sua musica e quindi ad un pubblico relativamente selettivo…</p>
<p>Ed è proprio a questo tipo di eventi che puoi portare anche la famiglia; oltre a Romy c’era anche Sebastiano: il suo primo concerto. Ho potuto trasmetteregli un po’ di passione per Enrico, per il Rock melodico e per la musica suonata in generale… Sicuramente un’esperienza forte, che rimmarrà impressa nei ricordi. </p>
<p>Un concerto incredibile, grandioso, straordinario… lo show veramente emozionante. E’ musica da ascoltare e da cantare nel migliore dei modi, quindi comodi e da seduti, ma non è mancata l’occasione per poter saltare e scatenarsi davanti al palco nel finale, alle parole di Enrico <em>“..ed ora scatenate l’inferno!”</em>; insomma un modo per accontentare un po’ tutti, anche quel popolo “punk” che lo segue dagli esordi….</p>
<div id="attachment_335" class="wp-caption alignnone" style="width: 510px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/ruggeri3.jpg"><img class="size-full wp-image-335" title="Enrico Ruggeri e Luigi Schiavone" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/ruggeri3.jpg" alt="" width="500" height="333" /></a><p class="wp-caption-text">Enrico Ruggeri e Luigi Schiavone</p></div>
<p>Il “La Ruota Tour 2010″ oltre a proporre i nuovi brani dell’ultimo album, ripercorre gran parte dei brani storici, alcuni dei quali scelti direttamente dal pubblico invitato sul palco con il meccanismo di una ruota virtuale dove sono riportati moltissimi titoli delle sue canzoni: il concerto è iniziato con <em>Vivi</em> e seguendo un po’ la sceletta e lasciando un po’ di spazio all’improvvisazione e al caso si è giunti al termine con<em> La notte delle fate</em> e la celeberrima <em>Contessa</em>.  Enrico si è dato un gran da fare ed ha cantato per più di due ore ininterrotamente e con lui la sua band. Gli amici musicisti con cui suona Enrico sono sempre rimasti gli stessi fin dai tempi dei Decibel, tra i quali il mitico <a href="http://www.luigischiavone.com/" target="_blank">Luigi Schiavone</a> alla chitarra ed il grande <a href="http://www.fabriziopalermo.it/" target="_blank">Fabrizio Palermo</a> al basso.  </p>
<div id="attachment_332" class="wp-caption alignnone" style="width: 510px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/ruggeri1.jpg"><img class="size-full wp-image-332" title="Io ed Enrico" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/ruggeri1.jpg" alt="" width="500" height="382" /></a><p class="wp-caption-text">Io ed Enrico</p></div>
<p>Ho beccato Rrouge nel backstage appena prima del concerto: indossavo la gloriosa maglietta del Peter Pan Tour del &#8217;92</p>
<div><strong> </strong></div>
<div><strong>Link utili</strong></div>
<div>
<div><a href="http://www.enricoruggeri.info/" target="_blank">http://www.enricoruggeri.info/</a> Sito ufficiale di Enrico Ruggeri</div>
<div><a href="http://www.nuovoswing.com/" target="_blank">http://www.nuovoswing.com/</a> Nuovo Swing, web-zine dedicata ad Enrico Ruggeri</div>
<div><a href="http://www.youtube.com/watch?v=7QY9IKURVNM" target="_blank">http://www.youtube.com/watch?v=7QY9IKURVNM</a>  You Tube, alcuni momenti del concerto di Cologna Veneta</div>
</div>
<div class="thanks_button_div" style="float: left; margin-right: 10px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(99, 'Hai già lasciato un &rdquo;Grazie&rdquo; per questo articolo')" value="Grazie, mi piace: 0"
                class="thanks_button thanks_custom_button "
                style="background-image:url(http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_black1long.png);width:180px; height:26px; font-family: Verdana, Arial, Sans-Serif; font-size: 12px; font-weight: normal;; color:#ffffff;"
                id="thanksButton_99_1" title="Clicca per ringraziare per questo articolo"/></div><div id="ajax_loader_99_1" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/99/enrico-ruggeri/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eseguire Stored Procedures in una funzione UDF (SQL Server)</title>
		<link>http://www.maurodalfreddo.it/archives/97/eseguire-stored-procedures-in-una-funzione-udf-sql-server</link>
		<comments>http://www.maurodalfreddo.it/archives/97/eseguire-stored-procedures-in-una-funzione-udf-sql-server#comments</comments>
		<pubDate>Wed, 28 Apr 2010 13:18:07 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Hack]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=97</guid>
		<description><![CDATA[E’possibile eseguire stored procedures in functions UDF con Microsoft SQL SERVER attraverso un workaround. Analisi della problematica e codifica di una .NET external function che permette l’esecuzione di dynamic SQL. (SQL Server: How to execute Stored procedures into a UDF function) <a href="http://www.maurodalfreddo.it/archives/97/eseguire-stored-procedures-in-una-funzione-udf-sql-server">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Un workaround per eseguire stored procedures in functions UDF con Microsoft SQL SERVER. Analizziamo la problematica e scriviamo una .NET external function che permette l’esecuzione di dynamic SQL. </em> </p>
<h2><span style="color: #000000;">Introduzione</span></h2>
<p>Ultimamente mi sono scontrato con la problematica di eseguire una stored procedure da una funzione SQL UDF (<a href="http://www.google.it/search?hl=it&amp;rlz=1G1GGLQ_ITIT252&amp;q=How+to+execute+Stored+procedures+into+a+UDF+function&amp;meta=&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=" target="_blank">google</a>: <em>How to execute Stored procedures into a UDF function</em>).<br />
L’esecuzione di codice INSERT/UPDATE/DELETE/STORED PROCEDURE che alterano il contesto esterno alla funzione non è possibile <a href="http://msdn.microsoft.com/en-us/library/ms191320(SQL.90).aspx" target="_blank">by design</a>; è possibile solo apportare modifiche a variabili locali definite nella funzione. Infatti appena tentiamo di alterare il contesto del database otteniamo uno dei seguenti messaggi di errore, rispettivamente se stiamo utilizzando comandi TSQL INSERT/UPDATE/DELETE, chiamando STORED PROCEDURE o cercando di eseguire SQL dinamico:  </p>
<p><span style="color: #ff0000;">Invalid use of side-effecting or time-dependent operator in ‘INSERT’ within a function.</span>  </p>
<p><span style="color: #ff0000;">Only functions and extended stored procedures can be executed from within a function.</span>  </p>
<p><span style="color: #ff0000;">Invalid use of side-effecting or time-dependent operator in ‘EXECUTE STRING’ within a function.</span>  </p>
<p>L’utilizzo delle funzioni SQL è utilizzato per leggere e applicare una certa logica ai dati letti, ma non a trasformarli o modificarli. E’difficile pensare che leggendo dei dati da una tabella con una SELECT questi vengano modificati sotto il naso.<br />
Se ci dovessero essere logiche più complesse, come l’utilizzo di tabelle di appoggio temporanee, certo è preferibile e doveroso racchiudere il codice in una stored procedure.  </p>
<p>Questo in linea di principio e come best practice. </p>
<h2><span style="color: #000000;">Caching con una funzione SQL</span></h2>
<p>Un caso che ho dovuto affrontare era quello dell’ottimizzazione delle performance di una serie di applicazioni. Queste, accedendo al DB, ed utilizzando gli strumenti offerti TSQL, utilizzavano tutte, in più punti e ripetutamente una certa funzione, che, accedendo a dati esterni al DB con protocollo TCP/IP, risultava particolarmente lenta a rispondere. </p>
<p>Da qui l’idea di implementare un <em><strong>meccanismo di caching</strong></em> nella funzione stessa; non era assolutamente pensabile cambiare la logica<br />
applicativa modificando il codice e le modalità di interfacciamento al DB. L’operazione doveva essere completamente trasparente per le applicazioni!  </p>
<p>L’algoritmo di caching può essere banalmente il seguente:  </p>
<pre>IF (prima volta)
 BEGIN
  recupera i dati online
  memorizzali nella cache
 ELSE
  recupera i dati dalla cache
 END</pre>
<p>Includere tale logica in una funzione SQL è semplice…<br />
Peccato che il significato di <em>memorizzare i dati</em> è quello di utilizzare un’istruzione del tipo INSERT/UPDATE/ST.PROCEDURE e che quindi modifica il contesto esterno alla funzione.  </p>
<p>Nel seguito espongo la soluzione di <strong>come eseguire una stored procedure in una funzione</strong>, descrivendo i passi utili a creare una logica di caching sopra descritta.  </p>
<p>Immaginiamo di avere una funzionalità di basso livello (my_very_slow_function) che, dopo essersi connessa con un tal sistema autorizzativo, restituisca i ruoli associati ad un utente.<br />
Vogliamo utilizzare questa funzionalità in una funzione di più alto livello (my_function) che incapsuli la logica (quindi una funzione wrapper)  </p>
<pre>CREATE FUNCTION [dbo].my_very_slow_function(@login nvarchar(50))
RETURNS TABLE
AS
RETURN
(  
 SELECT 'Administrator' as Role,0 as Type UNION
 SELECT 'Contributor', 0 UNION   
 SELECT 'Public role', 0 UNION   
 SELECT @login, 1
)</pre>
<pre>SELECT type,role FROM [dbo].my_very_slow_function('DOMAIN\testuser') ORDER BY type,role
<em>type role</em>
<span style="color: #0000ff;">0    Administrator
0    Contributor
0    Public role
1    DOMAIN\testuser</span></pre>
<pre>CREATE FUNCTION [dbo].[my_function](@login nvarchar(50))
RETURNS
@roles TABLE (role varchar(400), type int)
AS
BEGIN
 INSERT INTO @roles (role,type)
  SELECT role,type FROM my_very_slow_function(@login)
  RETURN
END</pre>
<pre>SELECT type,role FROM [dbo].my_function('DOMAIN\testuser') ORDER BY type,role</pre>
<p>Vogliamo quindi inserire nella funzione wrapper my_function la logica di caching. Creiamo la tabella per la cache e modifichiamo opportunamente la funzione.  </p>
<pre>
<pre>CREATE TABLE dbo.MYCACHE (
login VARCHAR(50) NOT NULL,
role VARCHAR(400) NOT NULL,
type INT NOT NULL,
ts datetime DEFAULT getdate(),
PRIMARY KEY (login,role)
)</pre>
<pre>GO</pre>
<pre>ALTER FUNCTION [dbo].[my_function](@login nvarchar(50))
RETURNS
@roles TABLE (role varchar(400), type int)
AS
BEGIN
 INSERT INTO @roles (role,type)
  SELECT role,type FROM dbo.MYCACHE
  WHERE login = @login
 IF @@ROWCOUNT = 0
 BEGIN  
  INSERT INTO [dbo].MYCACHE (login,role,type)
   SELECT @login,role,type FROM my_very_slow_function(@login)
  INSERT INTO @roles (role,type)
   SELECT role,type FROM dbo.MYCACHE
   WHERE login = @login
 END  
  RETURN
END</pre>
</pre>
<p>Se tentiamo di modificare la funzione in tal senso otteniamo il seguente errore:  </p>
<pre><span style="color: #ff0000;">Msg 443, Level 16, State 15, Procedure my_function, Line 11
Invalid use of side-effecting or time-dependent operator in 'INSERT' within a function.</span></pre>
<p>Cerchiamo di seguire un’altra strada: eseguire nella funzione una stored procedure contenente la logica del caching.  </p>
<pre>CREATE PROCEDURE [dbo].MYCACHEINSERT 
 @login VARCHAR(50) 
AS
BEGIN
 INSERT INTO [dbo].MYCACHE (login,role,type)
  select @login,role,type
  FROM dbo.my_very_slow_function(@login) 
END
GO

ALTER FUNCTION [dbo].[my_function](@login nvarchar(50))
RETURNS
@roles TABLE (role varchar(400), type int)
AS
BEGIN
 DECLARE @sql NVARCHAR(400)

 INSERT INTO @roles (role,type)
  SELECT role,type FROM dbo.MYCACHE
  WHERE login = @login
 IF @@ROWCOUNT = 0
 BEGIN  
  exec dbo.MYCACHEINSERT @login

  INSERT INTO @roles (role,type)
   SELECT role,type FROM dbo.MYCACHE
   WHERE login = @login
 END  
  RETURN
END
GO</pre>
<p>Questa volta la creazione/aggiornamento non hanno problemi ma si presenta un errore in fase di esecuzione  </p>
<pre>SELECT type,role FROM [dbo].my_function('DOMAIN\testuser') ORDER BY type,role</pre>
<pre><span style="color: #ff0000;">Msg 557, Level 16, State 2, Line 1
Only functions and extended stored procedures can be executed from within a function.</span></pre>
<p>Possiamo anche provare a modificare la funzione per farle eseguire codice SQL dinamico, e questa volta otteniamo un errore in fase di modifica.  </p>
<pre>ALTER FUNCTION [dbo].[my_function](@login nvarchar(50))
RETURNS
@roles TABLE (role varchar(400), type int)
AS
BEGIN
 DECLARE @sql NVARCHAR(400)

 INSERT INTO @roles (role,type)
  SELECT role,type FROM dbo.MYCACHE
  WHERE login = @login
 IF @@ROWCOUNT = 0
 BEGIN  
  SELECT @sql = 'exec dbo.MYCACHEINSERT '''+@login+''''
  exec(@sql)

  INSERT INTO @roles (role,type)
   SELECT role,type FROM dbo.MYCACHE
   WHERE login = @login
 END  
  RETURN
END</pre>
<pre><span style="color: #ff0000;">Msg 443, Level 16, State 14, Procedure my_function, Line 14
Invalid use of side-effecting or time-dependent operator in 'EXECUTE STRING' within a function.</span></pre>
<p>La spiegazione nella difformità di comportamento dal precedente tentativo sta nel fatto che si può usare EXEC giusto per chiamare Extended Stored Procedures, ovvero le stored procedures scritte in C e compilate. Per definizione non si può cambiare lo stato del Database da dentro la funzione UDF, e così non si può costruire SQL dinamico ed eseguirlo con la stored procedure estesa “sp_executesql” (EXEC).  </p>
<p>Documentandomi in Internet ho trovato un modo per eseguire uno statement SQL di aggiornamento/inserimento usando la funzione OPENQUERY e un LINKED SERVER che si autoreferenzia:  </p>
<pre>SELECT count(*) FROM OPENQUERY(LINKED SERVER,'INSERT INTO ....')</pre>
<p>Peccato che la stringa di testo deve essere una costante, e non è possibile sostituirla con variabili e/o espressioni.  </p>
<h2><span style="color: #000000;">La via programmatica</span></h2>
<p>L’unico modo by design per risolvere il problema è quello di scrivere un’extended stored procedure in C, correndo il rischio che questa non funzioni più nelle prossime versioni di SQL Server, visto che la scrittura di questo tipo di procedures è deprecata. Scrivendo una external stored procedure in C# (.NET) non si risolve il problema, visto che non viene marcata come “extended” da SQL Server e che quindi non è possibile usarla dentro una funzione UDF.  </p>
<p>Anche scrivendo una funzione external in C# ed eseguendo un’operazione INSERT, ottenendo la connessione dal contesto con  </p>
<pre><span style="color: #008000;">SqlConnection conn = new SqlConnection("context connection= true");</span></pre>
<p>otterremmo gli errori iniziali per i quali non è possibile modificare il contesto del DB. L’unico modo alla fine è quello di scrivere una funzione esterna C# ed istanziare una nuova connessione, ma sempre allo stesso database. In tal modo si inganna SQL Server, che non può più riconoscere l’eventuale modifica al contesto esterno.  </p>
<p>Ora apriamo Visual Studio e creiamo un nuovo progetto SQL Server “MYUDF” in C#. Nelle proprietà del progetto ricodiamoci di impostare l’opzione “Sign the assembly”.  </p>
<p>Poi aggiungiamo un nuovo file al progetto dti tipo Funzione UDF:  </p>
<pre><span style="color: #008000;">using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction(Name = "ExecuteSQL", </span></pre>
<pre><span style="color: #008000;">     DataAccess = DataAccessKind.Read, IsDeterministic = false)]</span></pre>
<pre><span style="color: #008000;">    public static int ExecuteSQL(SqlString sql, SqlString connstr)
    {
        using (SqlConnection conn = new SqlConnection(connstr.Value))
        {
            int res=0;
            try
            {                            
                conn.Open();               
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = sql.Value;               
                res = (int)cmd.ExecuteNonQuery();               
            }
            catch (Exception ex)
            {               
                throw;
            }
            finally {                               
                conn.Close();               
            }
            return res;
        }

    }
}</span></pre>
<p>   </p>
<p>La funzione riceve dall’input due parametri: la stringa contenente il codice SQL e quella per la connessione ad un DB. I controlli per la sicurezza e la gestione dell’errore è stata volutamente trascurata per semplificare la lettura. Al build del progetto verrà prodotto l’assembly MYUDF.dll, che dovrà essere copiato sul database server in una certa cartella, diciamo C:\TEMP. Creiamo e carichiamo l’assembly nel DB con il comando TSQL “CREATE ASSEMBLY”:  </p>
<p>L’istruzione CREATE ASSEMBLY MYUDF può fallire e produrre i seguenti messaggi d’errore:  </p>
<p>A) <span style="color: #ff0000;">Msg 10327, Level 14, State 1, Line 1 </span>  </p>
<p><span style="color: #ff0000;">CREATE ASSEMBLY for assembly ‘MYUDF’ failed because assembly ‘MYUDF’ is not authorized for PERMISSION_SET = UNSAFE.  The assembly is authorized when either of the following is true: the database owner (DBO) has UNSAFE ASSEMBLY permission and the database has the TRUSTWORTHY database property on; or the assembly is signed with a certificate or an asymmetric key that has a corresponding login with UNSAFE ASSEMBLY permission.</span>  </p>
<pre>ALTER DATABASE MYDB set trustworthy on;</pre>
<p>B) <span style="color: #ff0000;">Msg 0, Level 20, State 0, Line 0 </span>  </p>
<p><span style="color: #ff0000;">Errore grave durante l’esecuzione del comando corrente. Annullare i risultati eventuali.</span>  </p>
<p>Questo è un BUG noto (almeno per SQL2005), basta eseguire il seguente comando: <em>exec sp_changedbowner ‘&lt;username of the db attacher, ‘sa’, or any windows authenticated login&gt;’</em>  </p>
<p><em> </em>   </p>
<pre>EXEC sp_changedbowner 'sa'

CREATE ASSEMBLY MYUDF
AUTHORIZATION [dbo] FROM 'C:\TEMP\MYUDF.dll' WITH PERMISSION_SET = UNSAFE;

CREATE FUNCTION [dbo].[ExecuteSQL](@sql [nvarchar](4000),@conn [nvarchar](200))
RETURNS int
AS EXTERNAL NAME MYUDF.[UserDefinedFunctions].ExecuteSQL</pre>
<pre>GRANT EXECUTE ON [dbo].[ExecuteSQL] TO [public]</pre>
<p>Abbiamo appena creato la funzione UDF .NET, ed ora ci prepariamo a testarla:  </p>
<pre>select [dbo].[ExecuteSQL]('exec dbo.MYCACHEINSERT ''WORKGROUP\user1''','Data Source=MYSERVER;Initial Catalog=MYDB;Integrated Security=False;user id=dbu;password=dbu;')

<span style="color: #ff0000;">Msg 6522, Level 16, State 1, Line 1
A .NET Framework error occurred during execution of user defined routine or aggregate 'ExecuteSQL':
System.Data.SqlClient.SqlException: EXECUTE permission denied on object 'MYCACHEINSERT', database 'MYDB', schema 'dbo'.</span></pre>
<pre>GRANT EXECUTE ON [dbo].MYCACHEINSERT TO [dbu]</pre>
<p>Ora che abbiamo dato i permessi “rieseguiamo” la funzione, che “magicamente” ritorna i risultati attesi. Infatti nella tabella ci sono 4 righe. Bisogna far notare che è stato creata una login specifica “dbu” per inserire i dati nella tabella di cache e solo per quello scopo. Poi integriamo la chiamata ad ExecuteSQL in my_function.  </p>
<pre>SELECT * FROM dbo.MYCACHE
<span style="color: #0000ff;"><em>login           role            type ts</em>
WORKGROUP\user1 Administrator   0    2010-04-25 12:08:13.513
WORKGROUP\user1 Contributor     0    2010-04-25 12:08:13.513
WORKGROUP\user1 Public role     0    2010-04-25 12:08:13.513
WORKGROUP\user1 WORKGROUP\user1 1    2010-04-25 12:08:13.513</span>
SELECT count(*) FROM dbo.MYCACHE
<span style="color: #0000ff;">4</span>

ALTER FUNCTION [dbo].[my_function](@login nvarchar(50))
RETURNS
@roles TABLE (role varchar(400), type int)
AS
BEGIN
 DECLARE @sql NVARCHAR(400)
 DECLARE @conn NVARCHAR(200)
 DECLARE @count INT

 INSERT INTO @roles (role,type)
  SELECT role,type FROM dbo.MYCACHE
  WHERE login = @login
 IF @@ROWCOUNT = 0
 BEGIN  
  SELECT @sql = 'exec dbo.MYCACHEINSERT '''+@login+'''',
   @conn = 'Data Source=MYSERVER;Initial Catalog=MYDB;Integrated Security=False;user id=dbu;password=dbu;'
  SELECT @count = [dbo].[ExecuteSQL] (@sql,@conn)

  INSERT INTO @roles (role,type)
   SELECT role,type FROM dbo.MYCACHE
   WHERE login = @login
 END  
  RETURN
END

SELECT type,role FROM [dbo].my_function('DOMAIN\testuser') ORDER BY type,role
<em>type role</em>
<span style="color: #0000ff;">0    Administrator
0    Contributor
0    Public role
1    DOMAIN\testuser
</span>
SELECT count(*) FROM dbo.MYCACHE
<span style="color: #0000ff;">8</span></pre>
<div><span style="color: #0000ff;"><span style="color: #000000;">Verifica effettuata e possiamo affermare che… il gioco è fatto! A questo punto abbiamo terminato di implementare il caching che ci prefiggevamo. Infatti le chiamate successive alla prima sono molto più veloci nell’esecuzione. Ora la funzione wrapper my_function può essere utilizzata in altri contesti, in altre funzioni o stored procedures.</span></span></div>
<p><span style="color: #0000ff;"> </span> </p>
<p><span style="color: #0000ff;"> </span> </p>
<p><span style="color: #0000ff;"> </span>  </p>
<div><span style="color: #0000ff;"><span style="color: #000000;">Per esempio:</span>  </span></div>
<div><span style="color: #0000ff;"> </span></div>
<div><span style="color: #0000ff;"> </span></div>
<div><span style="color: #0000ff;"> </span></div>
<div><span style="color: #0000ff;"></span></div>
<p><span style="color: #0000ff;"></p>
<pre><span style="color: #000000;">CREATE FUNCTION [dbo].[my_function2](@login nvarchar(50),@param1 varchar(50))
RETURNS TABLE
AS
RETURN
( 
 SELECT count(*) as N, @param1 as M FROM [dbo].my_function(@login)  
)
SELECT * FROM [dbo].[my_function2]('DOMAIN\test2','param')
<span style="color: #0000ff;"><em>N M</em>
4 param</span></span></pre>
<h2><span style="color: #000000;"> </span></h2>
<h2><span style="color: #000000;">Continuando a sperimentare</span></h2>
<p><span style="color: #000000;">Di seguito espongo una problematica che ho incontrato nell’utilizzare la tecnica sopra esposta in una stored procedure che utilizza un oggetto non locale quale una tabella temporanea (ricordo che è comunque una TABLE nel tempdb). Con simili oggetti si verrebbe a creare una transazione distribuita, ma SQL Server, capendo che la connessione istanziata dal codice .NET, individua un conflitto di sessioni. E da qui il messaggio di errore di cui sotto.</span></p>
<pre><span style="color: #000000;">CREATE PROCEDURE [dbo].[my_procedure]  
 @login varchar(50),
 @param1 varchar(50)
AS
BEGIN 
 SET NOCOUNT ON;
 SELECT count(*) as N, @param1 as M FROM [dbo].my_function(@login)  
END
exec [dbo].[my_procedure] 'DOMAIN\test2','param'
<span style="color: #0000ff;">N M
4 param
</span></span></pre>
<pre><span style="color: #000000;">ALTER PROCEDURE [dbo].[my_procedure]  
 @login varchar(50),
 @param1 varchar(50)
AS
BEGIN 
 SET NOCOUNT ON;
 SELECT count(*) as N, @param1 as M INTO #temp FROM [dbo].my_function(@login)  
 SELECT * FROm #temp
END
GO
exec [dbo].[my_procedure] 'DOMAIN\test5','param'</span></pre>
<p>   </p>
<pre><span style="color: #ff0000;">Msg 6522, Level 16, State 1, Procedure my_procedure, Line 7
A .NET Framework error occurred during execution of user defined routine or aggregate 'ExecuteSQL':
System.Data.SqlClient.SqlException: Transaction context in use by another session.</span></pre>
<p><span style="color: #000000;">La soluzione è più semplice del previsto: poichè SQL Server tenta implicitamente di costruire una transazione distribuita, il workaround è quello di inibire a priori tale possibilità attraverso il parametro opzionale <strong>Enlist</strong> nella connectionstring. E infatti, dopo la modifica della stringa di connessione, l’esecuzione funziona come ci si aspetta, ritornando i valori aspettati.</span></p>
<pre><span style="color: #000000;">ALTER FUNCTION [dbo].[my_function](@login nvarchar(50))
RETURNS
@roles TABLE (role varchar(400), type int)
AS
BEGIN
 DECLARE @sql NVARCHAR(400)
 DECLARE @conn NVARCHAR(200)
 DECLARE @count INT

 INSERT INTO @roles (role,type)
  SELECT role,type FROM dbo.MYCACHE
  WHERE login = @login
 IF @@ROWCOUNT = 0
 BEGIN  
  SELECT @sql = 'exec dbo.MYCACHEINSERT '''+@login+'''',
   @conn = 'Data Source=MYSERVER;Initial Catalog=MYDB;Integrated Security=False;user id=dbu;password=dbu;Enlist=no'
  SELECT @count = [dbo].[ExecuteSQL] (@sql,@conn)

  INSERT INTO @roles (role,type)
   SELECT role,type FROM dbo.MYCACHE
   WHERE login = @login
 END  
  RETURN
END

exec [dbo].[my_procedure] 'DOMAIN\test7','param'</span></pre>
<pre><span style="color: #0000ff;"><em>N M</em>
4 param </span></pre>
<pre><strong> </strong></pre>
<h2><span style="color: #000000;">Conclusioni</span></h2>
<p><span style="color: #000000;">L’utilizzo di stored procedures in funzioni è inibito in SQL Server by design, ma creando una external UDF in C#.NET è possibile aggirare l’ostacolo. E’stato presentato il codice e un esempio di come implementare il caching per una funzione “lenta”. </span><span style="color: #000000;"> </span> </p>
<p><span style="color: #000000;">  </span>  </p>
<p></span></p>
<div class="thanks_button_div" style="float: left; margin-right: 10px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(97, 'Hai già lasciato un &rdquo;Grazie&rdquo; per questo articolo')" value="Grazie, mi piace: 2"
                class="thanks_button thanks_custom_button "
                style="background-image:url(http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_black1long.png);width:180px; height:26px; font-family: Verdana, Arial, Sans-Serif; font-size: 12px; font-weight: normal;; color:#ffffff;"
                id="thanksButton_97_1" title="Clicca per ringraziare per questo articolo"/></div><div id="ajax_loader_97_1" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/97/eseguire-stored-procedures-in-una-funzione-udf-sql-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I Toto di nuovo in tour nell’estate 2010!</title>
		<link>http://www.maurodalfreddo.it/archives/95/i-toto-di-nuovo-in-tour-nell%e2%80%99estate-2010</link>
		<comments>http://www.maurodalfreddo.it/archives/95/i-toto-di-nuovo-in-tour-nell%e2%80%99estate-2010#comments</comments>
		<pubDate>Fri, 23 Apr 2010 13:17:15 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Musica]]></category>
		<category><![CDATA[Pensieri]]></category>
		<category><![CDATA[Toto]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=95</guid>
		<description><![CDATA[Finalmente l'annuncio di un nuovo Tour della band dopo lo scioglimento del 2008 <a href="http://www.maurodalfreddo.it/archives/95/i-toto-di-nuovo-in-tour-nell%e2%80%99estate-2010">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>I Toto si preparano per il nuovo tour estivo europeo.</em></p>
<p>A fine febbraio (27 Feb 2010) sul sito ufficiale dei TOTO è comparso il tanto atteso annuncio della réunion del gruppo californiano per un breve tour europeo.<br />
I membri storici del gruppo si stanno ritrovando per organizzare un breve tour estivo in Europa per onorare Mike Porcaro, che sta convivendo con una grave malattia neurologica, la sclerosi laterale amiotrofica o ALS, che in precedenza veniva denominata “Morbo di Lou Gehrig”.<br />
La band includerà David Paich, Steve Lukather, Steve Porcaro, Simon Phillips, Joseph Williams e il bassista Nathan East come special guest.<br />
Il tour partirà in luglio dalla Germania e toccherà Austria, Olanda, Svizzera, Danimarca e Finlandia, ma il <a href="http://www.toto99.com/tourdates/calendar/list.php" target="_blank">programma</a> è tutt’ora in fase di evoluzione e definizione.</p>
<div id="attachment_342" class="wp-caption alignnone" style="width: 369px"><img class="size-full wp-image-342  " title="Steve Luckather e Mike Porcaro nel 2005" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/toto_mannheim5.jpg" alt="" width="359" height="450" /><p class="wp-caption-text">Steve Luckather e Mike Porcaro nel 2005</p></div>
<p>E’ da due anni che attendo questa notizia, da quando appresi nell’estate del 2008 che <a href="http://www.stevelukather.net/NewsView.aspx?id=758" target="_blank">Steve Lukather</a> aveva annunciato lo scioglimento della band:</p>
<p><strong><em><span style="color: #008000;">An official announcement from Toto</span></em></strong></p>
<p><em><span style="color: #008000;">After a 31 year career, the current line up of Toto (Steve Lukather, David Paich, Mike Porcaro, Simon Phillips, Bobby Kimball and Greg Phillinganes) have decided to go their separate ways and begin new chapters in their lives. </span></em></p>
<p><em><span style="color: #008000;">The band’s final CD “Falling In Between” and subsequent tours around the world have been extremely successful and well received and we have probably been more active than ever in the band’s lifespan. </span></em></p>
<p><em><span style="color: #008000;">We managed to capture the last tour on a wonderful DVD (”Falling In Between Live”) of which we are tremendously proud, and we all feel the time is right to disband and finish on a high. </span></em></p>
<p><em><span style="color: #008000;">If it were not for our loyal fans who have stuck with us through all of the ups and downs we would not have been able to have continued for as long as we did. We would like to thank all our fans all over the world who have continued to support us and we will all be very busy with our own individual projects so we hope to see many of you in the future. </span></em></p>
<p><em><span style="color: #008000;">Toto, July 15th 2008</span> </em></p>
<p>Steve Lukather in <a href="http://www.stevelukather.net/Article.aspx?id=55" target="_blank">un articolo </a> sul suo sito spiega poi i motivi:</p>
<p><em><span style="color: #008000;">I would like to make a formal annoucement as I have been barraged by e-mails and speculations on various websites. The fact is yes I have left Toto. <strong>There is no more Toto</strong>. I told the guys before the last leg of our tour.</span></em></p>
<p>Me li ricordo bene quei momenti, quando appresi la notizia; per un attimo rimasi sconvolto, come paralizzato: si era sciolto il gruppo, che aveva creato e suonato la musica che mi accompagna nella vita fin dall’88 (infatti è da quando vidi ed ascoltai il video di “Pamela” che cominciai ad interessarmi della produzione musicale dei Toto).<br />
La tristezza, che mi aveva pervaso, si dissolse pian piano (e scomparì del tutto solo lo scorso febbraio 2010) dopo che capii le ragioni che spinsero Steve Lukather a prendere questa decisione.</p>
<p>Le motivazioni furono molteplici e sinteticamente queste:<br />
- i vincoli contrattuali con al casa discografica erano decaduti<br />
- la voglia di cambiare, di affrontare nuovi progetti (Il titolo del suo singolo “<em>Ever Changing Times</em>” parla chiaro)<br />
- la diversa visione del futuro e di come gestire il business, rispetto agli altri membri (es. Bobby Kimball)<br />
- ma soprattutto il fatto che David Hungate, Jeff Porcaro (mancato nel 1992), David Paich, Mike Porcaro, ovvero tutti gli altri membri fondatori della band ad uno ad uno, avevano lasciato (per motivi diversi) il gruppo; per cui Steve risultava l’unico membro fondatore nella formazione del 2008… e che quindi non si riconosceva più nel gruppo, anche se composto da ottimi elementi.</p>
<div id="attachment_343" class="wp-caption alignnone" style="width: 410px"><img class="size-full wp-image-343 " title="I Toto negli anni '80" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/toto_old.jpg" alt="" width="400" height="261" /><p class="wp-caption-text">I Toto negli anni &#39;80 I Toto in concerto</p></div>
<p><em><span style="color: #008000;">[Steve Luckather] This was NOT the high school band of brothers that we started in the 70’s. We had a magic thing and the same sense of humour and the same views on life. Somehow that was lost. </span></em></p>
<p>Mi ricorda molto quando ho iniziato a suonare alla fine degli anni ‘80 in una band di amici in parrocchia, nei garages, sui primi piccoli palchi … la magia della musica, le speranze e le emozioni di quei momenti… forse è anche per questo che tengo tanto ai Toto e alla loro musica. <br />
Ma questa è un’altra storia… e dei <em>Local Heroes</em> e dei <em>Prae Testo</em> scriverò in un altro momento.</p>
<p>Spero che questo breve tour estivo in qualche modo risaldi i rapporti tra i membri dei Toto e in qualche modo li faccia ritornare a quei momenti magici di un tempo… per un’unione più duratura…<br />
La speranza è anche quella di rivederli qui in Italia; l’ultima volta è successo a Padova nell’estate del 2003, nel tour del 25^anniversario: è stato proprio uno spettacolo fantastico!</p>
<div id="attachment_341" class="wp-caption alignnone" style="width: 460px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/toto_100-0006_IMGb.jpg"><img class="size-full wp-image-341" title="Toto, Padova 2003" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/toto_100-0006_IMGb.jpg" alt="" width="450" height="290" /></a><p class="wp-caption-text">Toto, Padova 2003</p></div>
<p>Per chi non lo sà, il nome della band, “<em>Toto</em>” venne proposto da Jeff Porcaro negli anni ‘70, quasi per scherzo, ma poi, quando David Hungate, fece notare che in latino la parola toto significa “<em>totale</em>“, “<em>che comprende tutto</em>“, venne ritenuto il nome ideale per identificare il repertorio musicale della band che nella sua carriera avrebbe abbracciato a 360 gradi tutti i generi musicali.</p>
<h2>Riferimenti</h2>
<p><strong>www.toto99.com</strong>  </p>
<p><a href="http://www.toto99.com/tourdates/calendar/list.php">http://www.toto99.com/tourdates/calendar/list.php</a></p>
<p><strong>www.stevelukather.net</strong></p>
<p><a href="http://www.stevelukather.net/NewsView.aspx?id=758">http://www.stevelukather.net/NewsView.aspx?id=758</a></p>
<p><a href="http://www.stevelukather.net/Article.aspx?id=55">http://www.stevelukather.net/Article.aspx?id=55</a></p>
<div class="thanks_button_div" style="float: left; margin-right: 10px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(95, 'Hai già lasciato un &rdquo;Grazie&rdquo; per questo articolo')" value="Grazie, mi piace: 0"
                class="thanks_button thanks_custom_button "
                style="background-image:url(http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_black1long.png);width:180px; height:26px; font-family: Verdana, Arial, Sans-Serif; font-size: 12px; font-weight: normal;; color:#ffffff;"
                id="thanksButton_95_1" title="Clicca per ringraziare per questo articolo"/></div><div id="ajax_loader_95_1" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/95/i-toto-di-nuovo-in-tour-nell%e2%80%99estate-2010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ciao Bill</title>
		<link>http://www.maurodalfreddo.it/archives/93/ciao-bill</link>
		<comments>http://www.maurodalfreddo.it/archives/93/ciao-bill#comments</comments>
		<pubDate>Thu, 25 Mar 2010 13:16:40 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Pensieri]]></category>
		<category><![CDATA[Ralph Supermaxieroe]]></category>
		<category><![CDATA[The Greatest American Hero]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=93</guid>
		<description><![CDATA[Ricordando Robert Culp, spentosi a 79 anni a Los Angeles. <a href="http://www.maurodalfreddo.it/archives/93/ciao-bill">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ieri 24 marzo 2010 a Los Angeles, è morto Robert Culp, l’agente Bill Maxwell del ben noto telefilm “Ralph Supermaxieroe”.<br />
L’attore americano aveva 79 anni ed è deceduto per un trauma cranico riportato dopo una brutta caduta nella sua casa di Hollywood.</p>
<div id="attachment_330" class="wp-caption alignnone" style="width: 310px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/robert_culp.jpg"><img class="size-medium wp-image-330 " title="Robert Culp" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/robert_culp-300x300.jpg" alt="" width="300" height="300" /></a><p class="wp-caption-text">Robert Culp</p></div>
<p><em>Attore atletico, aggressivo e allo stesso tempo simpatico, non ha avuto troppa fortuna nel cinema<br />
(dove esordì interpretando lo stolido fidanzato di Jane Fonda in Una domenica a New York).<br />
In tv invece ha lavorato moltissimo, passando dalle parti di intrepido eroe (Il ritorno delle spie accanto a Bill Cosby negli anni 60)  a quelle di co-eroe, appesantito dall’età e dalle frustrazioni (l’anziano agente Bill Maxwell in Ralph Supermaxieroe).<br />
Anche in ruoli decisamente antipatici, s’è rivelato incisivo. Per ben due volte è stato un avversario del tenente Colombo (tracotante, ma destinato inevitabilmente alla sconfitta).<br />
Nel 1994 ha interpretato il presidente degli Stati Uniti nel thriller “Il rapporto Pelican” con Denzel Washington e Julia Roberts.</em></p>
<p>La sua interpretazione in TGAH mi ha lasciato ed insegnato molto; mi ha colpito molto il carattere coriaceo, l’humor e la tenacia… per me è stato forse<br />
lui più super-eroe del collega in calzamaglia…</p>
<p>Ciao Bob.</p>
<p><strong>Alcuni riferimenti:<br />
</strong></p>
<p><a href="http://it.wikipedia.org/wiki/Robert_Culp">http://it.wikipedia.org/wiki/Robert_Culp</a></p>
<p><a href="http://www.robertculponline.com/bio.html">http://www.robertculponline.com/bio.html</a></p>
<div class="thanks_button_div" style="float: left; margin-right: 10px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(93, 'Hai già lasciato un &rdquo;Grazie&rdquo; per questo articolo')" value="Grazie, mi piace: 0"
                class="thanks_button thanks_custom_button "
                style="background-image:url(http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_black1long.png);width:180px; height:26px; font-family: Verdana, Arial, Sans-Serif; font-size: 12px; font-weight: normal;; color:#ffffff;"
                id="thanksButton_93_1" title="Clicca per ringraziare per questo articolo"/></div><div id="ajax_loader_93_1" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/93/ciao-bill/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ralph è stato (s)congelato !?</title>
		<link>http://www.maurodalfreddo.it/archives/91/ralph-e-stato-scongelato</link>
		<comments>http://www.maurodalfreddo.it/archives/91/ralph-e-stato-scongelato#comments</comments>
		<pubDate>Sat, 28 Nov 2009 13:15:45 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Pensieri]]></category>
		<category><![CDATA[Ralph Supermaxieroe]]></category>
		<category><![CDATA[The Greatest American Hero]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=91</guid>
		<description><![CDATA[Ci sono delle conferme sullo stop del film remake della famosa serie TV Ralph Supermaxieroe (The Greatest American Hero), ma anche numerosi segnali positivi per i fan <a href="http://www.maurodalfreddo.it/archives/91/ralph-e-stato-scongelato">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Ci sono delle conferme sullo stop del film remake della famosa serie TV Ralph Supermaxieroe, ma anche numerosi segnali positivi per i fan…</em></p>
<p><em> </em></p>
<div id="attachment_319" class="wp-caption alignnone" style="width: 385px"><img class="size-full wp-image-319 " title="Il simbolo di The Greatest American Hero" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/gah-symbol.jpg" alt="" width="375" height="345" /><p class="wp-caption-text">Il simbolo di The Greatest American Hero</p></div>
<p>Come era facile intuire il remake del film The Greatest American Hero, l’inizio della cui produzione era stato pianificato per il luglio 2008, è stato “temporaneamente congelato” per motivi meramente finanziari. Il progetto doveva proprio essere a buon punto: dopo il copione ed il regista, sembra che l’attore protagonista fosse stato già individuato in Eric Christian Olsen…</p>
<div id="attachment_329" class="wp-caption alignnone" style="width: 310px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/olsen_fillion.jpg"><img class="size-full wp-image-329" title="Eric Christian Olsen e Nathan Fillion" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/olsen_fillion.jpg" alt="" width="300" height="250" /></a><p class="wp-caption-text">Eric Christian Olsen e Nathan Fillion</p></div>
<p>Nell’aprile 2009 Clint Morris raccontò su <a href="http://www.moviehole.net/200918628-exclusive-olsen-was-greatest-american-hero" target="_blank">MovieHole</a> che, durante un’intervista con <a href="http://www.mymovies.it/biografia/?a=55564" target="_blank"><strong>Eric Christian Olsen</strong></a> in merito al suo ruolo nel film <a href="http://www.mymovies.it/dizionario/recensione.asp?id=57760" target="_blank">“Fired Up”</a> , l’attore gli rivelò di essere stato contattato per interpretare il ruolo cinematografico di Ralph Hinkley nel nuovo film GAH.<br />
Sfortunatamente, i finanziamenti per il remake andarono a monte prima che l’attore potesse provare il leggendario costume rosso…</p>
<p><span style="color: #008000;">“Sono stato scritturato per il film”, raccontò Olsen, quando Morris suggerì che sarebbe stato perfetto per la parte.<br />
“Vi partecipai giusto dopo Fired Up… ‘Questo è il nostro ragazzo’ dissero, ma non ebbero sufficenti finanziamenti. Si, fui scritturato, ma poichè il budget era così enorme, non poterono ottenere tutti i soldi…<br />
“Era realmente una sceneggiatura divertente, su un eroe riluttante che entra in scena con le gambe all’aria, e c’erano davvero molte scene fantastiche…<br />
“Ebbi una vampata quando seppi che dovevo lavorare con tutte queste persone. Poi ricevemmo una telefonata, proprio mentre ci stavamo accordando, per dirci che non c’erano i finanziamenti…<br />
“…Ora non sono più impegnato nel cast.<br />
“No, non ho mai ottenuto quella parte, ho potuto solo leggere il contratto, e non ho provato nessun costume!”</span></p>
<p><span style="color: #008000;">Olsen, che sta iniziando a girare il nuovo film di Jennifer Lopez ”Plan B” è sicuro che impersonerà prima o poi un supereroe, anche se non sarà Ralph Hinkley:<br />
“Vedremo cosa accadrà; intanto ci sono un paio di cose che ho quasi terminato”.</span></p>
<p>Il fatto che le cose, anche se lentamente, si stiano muovendo dopo questo stop è dimostrata dal candidarsi spontaneo e pubblico di alcuni attori al ruolo chiave del remake di Ralph Supermaxieroe.</p>
<p>In un’intervista su MTV News del 28 ottobre 2009, ovvero proprio un mese fà, <a href="http://www.mymovies.it/filmografia/?a=60410" target="_blank"><strong>Nathan Fillion</strong></a>, protagionista della serie televisiva <a href="http://it.wikipedia.org/wiki/Firefly_(serie_televisiva)" target="_blank">Firefly</a> (film di fantascienza, del 2002) ed attore protagonista anche nella recente serie <a href="http://www.mymovies.it/dizionario/recensione.asp?id=60519" target="_blank">Castle</a> (2009), si candida nel ruolo del The Greatest American Hero, parlando del desiderio di apparire nel remake della vecchia serie tv.</p>
<p><span style="color: #008000;">Fillon dice: “Penso che GAH sia maturo per un ritorno. Lo so che sono canadese, ma penso che quella potrebbe essere la mia parte”.</span></p>
<p><span style="color: #008000;">Non è la prima volta che Fillion cita il ruolo; in precedenza disse a </span><a href="http://www.ifc.com/news/2009/10/nathan-fillion.php?page=2" target="_blank"><strong><span style="color: #008000;">IFC.com</span></strong></a><span style="color: #008000;"> che il remake di GAH è sempre stato il suo sogno nel cassetto;<br />
inoltre ha anche qualche idea su come le nuove tecnologie potrebbero arricchire una nuova versione:<br />
“Utilizzando la tecnologia che abbiamo oggi a disposizione per gli effetti,<br />
e pur mantenendo la stessa idea e la stessa storia,<br />
il costume potrebbe dare il potere di cambiare e a trasformarsi in quello che è necessario: potrebbe diventare un armatura, una muta subaquea…</span></p>
<p><span style="color: #008000;">In realtà conobbi William Katt e Robert Culp sul set di Castle; sono amici del padre di un nostro produttore esecutivo. E abbiamo lo stesso stunt coordinator di The Greatest American Hero, così ogni volta che ho visto William Katt cadere volando, so che è stato il nostro buon ragazzo </span><a href="http://en.wikipedia.org/wiki/Dennis_Madalone" target="_blank"><span style="color: #008000;">Dennis [Madalone]</span></a><span style="color: #008000;">…</span></p>
<p><span style="color: #008000;">Ho appena terminato di guardare la collezione dei DVD di GAH e ho pensato che abbia avuto davvero una grande regia, e ripenso al tipo di incongruenze e piccole imprecisioni: per esempio il nome del personaggio principale cambiò un paio di volte.<br />
Sembra che GHA abbia sofferto lo stesso tipo di bistrattamento che subì Firefly nei vari episodi (episodi mostrati fuori ordine, mai per più di 2 settimane consecutive, e la serie interrotta per vari motivi)</span></p>
<p><span style="color: #008000;">A Firefly fu garantita la possibilità di sfumare con una fine vaga e “ricomparire” con l’eccellente film Serenity. Ma per GAH non c’e’ stata questa fortuna…</span></p>
<p><em>♫ Flying away on a wing and a prayer, ♪ Who could it be? ♫ Believe it or not, it’s just…Nathan Fillion</em></p>
<p>Certo Fillon è fisionomicamente differente da William Katt e dalla bionditudine di Olsen, ma non è detto che nel remake si debbano conservare completamente tutti gli aspetti e le caratteristiche del personaggio Ralph, che tutti conosciamo; forse avrebbe più senso creare una certa rottura con la serie televisiva, reinventando parzialmente i personaggi o la trama, giusto per creare novità ed interesse, ma soprattutto per evitare l’effetto <em>brutta copia</em>, evitando così di rovinare il bel ricordo dei fan.</p>
<div id="attachment_331" class="wp-caption alignnone" style="width: 310px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/robert-culp-maxwell.jpg"><img class="size-full wp-image-331" title="Il grande Bill Maxwell (Robert Culp)" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/robert-culp-maxwell.jpg" alt="" width="300" height="297" /></a><p class="wp-caption-text">Il grande Bill Maxwell (Robert Culp)</p></div>
<p>Rimane comunque una domanda: chi interpretarà il <strong>Bill Maxwell</strong> del grande Robert Culp? Senza l’uomo giusto, il remake non otterrebbe sicuramente il successo…</p>
<div id="attachment_316" class="wp-caption alignnone" style="width: 410px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/gah_webseries.jpg"><img class="size-full wp-image-316" title="TGAH Web series" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/gah_webseries.jpg" alt="" width="400" height="160" /></a><p class="wp-caption-text">TGAH Web series</p></div>
<p>Dopo una lunga attesa  (il clip di intro era effettivamente accattivante), ecco è venuta alla luce a fine luglio 2009  la <strong>Serie Web di The Greatest American Hero</strong>, e gli episodi (i cosiddetti Webisodes), finora 6 della durata di poco più di 5 minuti, sono visibili su <a href="http://www.staytunedtv.net/showvideo.php?sid=18" target="_blank"><strong>StayTunedTV.net</strong></a>, un sito ideato per connettere autori, registi, sceneggiatori ed attori e a promuovere il loro lavoro. </p>
<p>Questi episodi sono filmati semiseri, sicuramente irriverenti, nei quali gli alieni affiancano ai due nostri eroi (Allen Rueckert, Don Stark) una nuova eroina bionda (Brittany Ross) dal costume rosso… In realtà Ralph aveva dovuto cedere il costume già nel 1986 a Holly Hathaway la <a href="http://www.superheroeslives.com/originals/the_greatest_american_heroine_(1986).htm" target="_blank">Greatest American Heroine</a>  in uno spinoff della serie mai mandato in onda da NBC.</p>
<p>Possono piacere o no, ma sicuramente fanno sorridere….</p>
<div id="attachment_315" class="wp-caption alignnone" style="width: 570px"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/gah_comicbooks800b.jpg"><img class="size-full wp-image-315 " title="I tre Comic books pubblicati" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/gah_comicbooks800b.jpg" alt="" width="560" height="420" /></a><p class="wp-caption-text">I tre Comic books pubblicati</p></div>
<p>Sul fronte <strong>ComicBooks</strong> sono stati pubblicati quest’anno i 3 fumetti promessi, anche se con qualche ritardo rispetto alle date schedulate. Dopo qualche ricerca, sono riuscito a procurarmi delle copie su ebay direttamente da William Katt (alias <a href="http://myworld.ebay.it/catastrophic_comics2/" target="_blank">catastrofic_comics2</a> ), debitamente dedicate e autografate da lui (Ralph) stesso!! E per una strana coincidenza me le sono incredibilmente viste recapitare proprio il giorno del mio compleanno: proprio un bellissimo regalo!</p>
<p>La storia  descritta in questi primi tre numeri è assolutamente ispirata alle prime due puntate della serie TV (ritroviam le teste rasate, il compagno di Bill morto e resuscitato dagli alieni, l’astronave, il costrume, il primo volo…) raccontata in chiave moderna nel presente (tecnologia cellulare, moderni pc portatili, il nuovo presidente USA Obama…).  Alcune eccezionali battute di Maxwell, in slang americano, sono proprio nel suo stile!</p>
<p>Bisogna leggere i fumetti ovviamente con spirito critico, e non credendo di ritrovare la copia cartacea della serie TV. Tutto sommato, alla fine è una cosa bella e simpatica…</p>
<p><img class="alignnone size-full wp-image-340" title="tgah_ship" src="http://www.maurodalfreddo.it/wp-content/uploads/2010/09/tgah_ship.jpg" alt="" width="300" height="239" /></p>
<p>Quindi possiamo dire che ci sono,  seppur tristi conferme dello stop del progetto, ma anche numerosi segnali che qualcosa si sta muovendo …</p>
<p>Bisogna crederci! Insomma… <em>Believe It Or Not</em> …</p>
<p><strong>Alcuni riferimenti</strong></p>
<p><a href="http://www.moviehole.net/200918628-exclusive-olsen-was-greatest-american-hero">http://www.moviehole.net/200918628-exclusive-olsen-was-greatest-american-hero</a></p>
<p><a href="http://www.imdb.com/news/ni1136032/">http://www.imdb.com/news/ni1136032/</a></p>
<p><a href="http://www.comicbookmovie.com/fansites/rorschachsrants/news/?a=11366">http://www.comicbookmovie.com/fansites/rorschachsrants/news/?a=11366</a></p>
<p><a href="http://www.reelzchannel.com/movie-news/4916/nathan-fillion-wants-to-be-the-greatest-american-hero">http://www.reelzchannel.com/movie-news/4916/nathan-fillion-wants-to-be-the-greatest-american-hero</a></p>
<p><a href="http://en.wikipedia.org/wiki/The_Greatest_American_Hero">http://en.wikipedia.org/wiki/The_Greatest_American_Hero</a></p>
<p><a href="http://www.superheroeslives.com/originals/the_greatest_american_heroine_(1986).htm">http://www.superheroeslives.com/originals/the_greatest_american_heroine_(1986).htm</a></p>
<div class="thanks_button_div" style="float: left; margin-right: 10px;"><div style="float: left; display: inline;"><input type="button" onclick="thankYouButtonClick(91, 'Hai già lasciato un &rdquo;Grazie&rdquo; per questo articolo')" value="Grazie, mi piace: 0"
                class="thanks_button thanks_custom_button "
                style="background-image:url(http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/thanks_compact_black1long.png);width:180px; height:26px; font-family: Verdana, Arial, Sans-Serif; font-size: 12px; font-weight: normal;; color:#ffffff;"
                id="thanksButton_91_1" title="Clicca per ringraziare per questo articolo"/></div><div id="ajax_loader_91_1" style="display:inline;visibility: hidden;"><img alt="ajax loader" src="http://www.maurodalfreddo.it/wp-content/plugins/thanks-you-counter-button/images/ajax-loader.gif" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/91/ralph-e-stato-scongelato/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

