<?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"
	>

<channel>
	<title>MarcoDuff's Blog</title>
	<atom:link href="http://www.marcoduff.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marcoduff.com</link>
	<description>...::: e se ti piace questo blog batti le mani *clap clap* :::...</description>
	<pubDate>Mon, 27 Apr 2009 13:56:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
			<item>
		<title>The Roman Pillow Fight IV</title>
		<link>http://www.marcoduff.com/2009/04/27/the-roman-pillow-fight-iv/</link>
		<comments>http://www.marcoduff.com/2009/04/27/the-roman-pillow-fight-iv/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 13:56:39 +0000</pubDate>
		<dc:creator>MarcoDuff</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.marcoduff.com/?p=183</guid>
		<description><![CDATA[
The Roman Pillow Fight, quarta edizione, domenica 26 Aprile 2009, Piazza Santa Maria in Trastevere ore 17:45, io c&#8217;ero&#8230; a breve le foto su Facebook e Flickr!!!
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a rel="lightbox" href="http://romanpillowfight.files.wordpress.com/2008/03/flyer2009_small.jpg?w=480&#038;h=640"><img class="aligncenter" src="http://romanpillowfight.files.wordpress.com/2008/03/flyer2009_small.jpg?w=480&#038;h=640" alt="The Roman Pillow Fight" width="400" /></a></p>
<p><a href="http://romanpillowfight.wordpress.com/">The Roman Pillow Fight</a>, quarta edizione, domenica 26 Aprile 2009, Piazza Santa Maria in Trastevere ore 17:45, io c&#8217;ero&#8230; a breve le foto su Facebook e Flickr!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcoduff.com/2009/04/27/the-roman-pillow-fight-iv/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lumart su Radio Kiss Kiss</title>
		<link>http://www.marcoduff.com/2009/01/19/lumart-su-radio-kiss-kiss/</link>
		<comments>http://www.marcoduff.com/2009/01/19/lumart-su-radio-kiss-kiss/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 12:38:47 +0000</pubDate>
		<dc:creator>MarcoDuff</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[Lumart]]></category>

		<guid isPermaLink="false">http://www.marcoduff.com/?p=162</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a rel="lightbox" href="http://www.e-ngine.it/imgs/LumartKissKiss.gif"><img class="aligncenter" src="http://www.e-ngine.it/imgs/LumartKissKiss.gif" alt="Lumart su Radio Kiss Kiss" width="400" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcoduff.com/2009/01/19/lumart-su-radio-kiss-kiss/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Notecard configurazione LSL</title>
		<link>http://www.marcoduff.com/2009/01/12/notecard-configurazione-lsl/</link>
		<comments>http://www.marcoduff.com/2009/01/12/notecard-configurazione-lsl/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 10:31:50 +0000</pubDate>
		<dc:creator>MarcoDuff</dc:creator>
		
		<category><![CDATA[Lezioni LSL]]></category>

		<category><![CDATA[Scripting LSL]]></category>

		<guid isPermaLink="false">http://www.marcoduff.com/?p=159</guid>
		<description><![CDATA[Uno dei primi problemi che affronta uno scripter LSL non esperto (ma anche uno esperto!) è quello di creare un file di testo esterno allo script, dove salvare i valori iniziali di una variabile.
Questa operazione è estremamente utile per aumentare la modularità di uno script e per attuare delle modifiche senza dover modificare e ricompilare [...]]]></description>
			<content:encoded><![CDATA[<p>Uno dei primi problemi che affronta uno scripter LSL non esperto (ma anche uno esperto!) è quello di creare un file di testo esterno allo script, dove salvare i valori iniziali di una variabile.<br />
Questa operazione è estremamente utile per aumentare la modularità di uno script e per attuare delle modifiche senza dover modificare e ricompilare il codice.</p>
<p>In script aventi una complessità medio-alta, la tecnica di salvare informazioni in un file di testo esterno è estremamente diffusa.</p>
<p>Il presente articolo si prefigge l&#8217;obiettivo di semplificare e rendere automatica una operazione di questo tipo. Lo script prevede una fase di impostazione delle variabile ed una fase di validazione delle stesse.</p>
<p>Inizio con il postare il codice completo del template per poi discutere le parti essenziali con un esempio.</p>
<pre>// ReadConfiguration
//
// Il seguente template viene usato per leggere un file di configurazione.
// Il file di configurazione può essere formattato nel seguente modo:
// <var>        Singola variabile
// <var>=<val>    Variabile <var> che deve essere inizializzata con il valore in <val>
// # line        Linea di commento
//
// @version 1.0
// @author MarcoDuff Palen (http://www.marcoduff.com/)

// Variabili
string configNotecard;
integer line;
key requestId;

// Legge i singoli comandi di configurazione.
//
// @param var    Nome della variabile letta (sempre totalmente maiuscola).
// @param val    Valore della variabile associata o una stringa vuota in caso di nessuna inizializzazione.
readConfig(string var, string val) {
}

// Valida la configurazione.
//
// @return    Restituisce TRUE se la configurazione è valida, FALSE altrimenti.
integer validateConfig() {
    return TRUE;
}

// Stato di inizializzazione.
default {
    state_entry() {
        configNotecard = llGetScriptName()+".config";
        line = 0;
        requestId = llGetNotecardLine(configNotecard,line);
    }

    state_exit() {
        line = -1;
        requestId = NULL_KEY;
    }

    dataserver(key request_id, string data) {
        if(requestId==request_id) {
            if(data!=EOF) {
                data = llStringTrim(data,STRING_TRIM);
                if(llSubStringIndex(data,"#")!=0&#038;&#038;llStringLength(data)>0) {
                    list dataList = llParseString2List(data,["="],[]);
                    string var = llToUpper(llStringTrim(llList2String(dataList,0),STRING_TRIM));
                    string val = "";
                    if(llGetListLength(dataList)==2) val = llStringTrim(llList2String(dataList,1),STRING_TRIM);
                    readConfig(var,val);
                }
                line++;
                requestId = llGetNotecardLine(configNotecard,line);
            }
            else {
                integer validate = validateConfig();
                if(validate == TRUE) state ConfigOkState;
                else state ConfigErrorState;
            }
        }
    }
}

// Stato se la configurazione è andata a buon fine.
state ConfigOkState {
    changed(integer change) {
        if(change &#038; CHANGED_INVENTORY) llResetScript();
    }
}

// Stato se la configurazione è errata.
state ConfigErrorState {
    changed(integer change) {
        if(change &#038; CHANGED_INVENTORY) llResetScript();
    }
}</pre>
<p>Lo script non fa altro che cercare il file di testo nel contents dell&#8217;oggetto chiamato come lo script e con estenzione .config, leggere tutte le righe del file ignorando le linee vuote e le linee che iniziano con il carattere #, validare le variabili lette e portarsi nello stato <i>ConfigOkState</i> se tutto è andato a buon fine o nello stato <i>ConfigErrorState</i> in caso di errori.</p>
<p>Questo significa che lo stato di default della nostra applicazione diventa <i>ConfigOkState</i>. Le uniche righe di codice da modificare nel template sono, infatti, l&#8217;inserimeto delle variabili utili al problema, il contenuto delle due funzioni <i>readConfig</i> e <i>validateConfig</i> e gli stati <i>ConfigOkState</i> e <i>ConfigErrorState</i>.</p>
<p>Facciamo un esempio che spiega il funzionamento del template.</p>
<p>Supponiamo di voler creare un oggetto che visualizzi un testo sopra di esso. Il testo ed il colore dell&#8217;oggetto devono essere specificati in un file di testo esterno allo script. Il testo deve sempre specificato, mentre il colore, se non specificato, deve essere nero.</p>
<p>Il modo più semplice per lavorare con questo template è creare prima il file di testo di configurazione. Suppunendo di voler visualizzare il testo &#8220;Prova riuscita!!!&#8221; di colore blu, il file di testo risulta essere il seguente:</p>
<pre># Questa è una prova di configurazione dello script ReadConfiguration

# Text indica il testo da visualizzare
text = Prova riuscita!!!

# Color è opzionale, fai i tentativi commentando o impostando la variabile!
color = <0.0,0.0,1.0></pre>
<p>Notate il massiccio uso di commenti (righe che iniziano con il carattere #) che verranno ignorati, insieme alle righe vuote, dallo script.</p>
<p>Come possiamo notare dal file di testo, per soddisfare questo problema abbiamo sicuramente bisogno di due variabili: la prima di tipo string per salvare il testo da visualizzare, la seconda di tipo vector per il colore.<br />
Questo significa che al template bisogna aggiungere in testa il seguente codice:</p>
<pre>string text;
vector color;</pre>
<p>l&#8217;impostazione di queste due variabili viene fatto all&#8217;interno della funzione <i>readConfig</i>. Questa funzione, infatti, riceve in input due variabili chiamate <i>var</i> e <i>val</i> che contengono rispettivamente la parte sinistra e quella destra rispetto al simbolo = di ogni riga letta nel file di configurazione (se non è presente il simbolo = allora viene valorizzata solo la variabile <i>var</i>). La variabile <i>var</i> ha la particolarità di essere sempre in maiuscolo, mentre la variabile <i>val</i> mantiene i caratteri originali.</p>
<p>Per fare un esempio, quando lo script leggerà la riga &#8220;text = Prova riuscita!!!&#8221; richiamerà la funzione <i>readConfig</i> passando per <i>var</i> il valore &#8220;TEXT&#8221; mentre per <i>val</i> il valore &#8220;Prova riuscita!!!&#8221;.</p>
<p>Detto questo, modifichiamo l&#8217;interno della funzione <i>readConfig</i> per impostare le nostre variabili text e color in questo modo:</p>
<pre>readConfig(string var, string val) {
    if(var=="TEXT") text = val;
    else if(var=="COLOR") color = (vector)val;
    else llOwnerSay("[WARNING] Variabile "+var+" alla linea "+(string)(line+1)+" non prevista.");
}</pre>
<p>in questo modo quando verranno letti i due valori dal file di testo, questi verranno opportunamente impostati nelle variabili. Notate che in questa particolare implementazione, se viene letto un comando non previsto viene dato un warning all&#8217;owner dello script che ha un utile feedback (pensate a quante volte avete perso tempo inutile per un semplice errore di battitura come scrivere &#8220;calor&#8221; invece di &#8220;color&#8221; o simili&#8230; mettere feedback di questo tipo è sempre molto utile e assolutamente consigliato). Notate anche come ho utilizzato la variabile line che indica la linea corrente di lettura del file (p.s.: ho dovuto incrementarla di 1 visto che la prima riga di un file di testo parte da 0!).</p>
<p>Se vogliamo inserire una validazione o vogliamo mettere dei valori di default per una variabile, dobbiamo modificare il contenuto della funzione <i>validateConfig</i> (se non vogliamo farlo, ci basta lasciare il return TRUE;). Nel nostro esempio dobbiamo controllare che il testo sia stato inserito, visto che lo consideriamo obbligatorio, mentre dobbiamo controllare che se il colore non è stato inserito dobbiamo impostarlo a Nero. La modifica da attuare è la seguente:</p>
<pre>integer validateConfig() {
    if(color == ZERO_VECTOR) color = <0.0,0.0,0.0>;

    if(llStringLength(text)==0) llOwnerSay("[ERROR] Non hai impostato la variabile TEXT");
    else return TRUE;

    return FALSE;
}</pre>
<p>se noto che la variabile color non è stata impostato, lo imposta io a nero. Se noto che la variabile text non è stata impostata stampo un messaggio di errore. Notare che la funzione restituisce TRUE esclusivamente nel caso in cui la variabile text viene impostata, in tutti gli altri casi restituisce FALSE. Il risultato della funzione TRUE o FALSE impone il passaggio di stato rispettivamente a <i>ConfigOkState</i> a <i>ConfigErrorState</i>.</p>
<p>A questo punto non ci resta che riempire lo stato <i>ConfigOkState</i> con il codice che avremmo scritto nello stato default di un normale script ma supponendo che le variabili a noi utili siano già state impostate, mentre lo stato <i>ConfigErrorState</i> con eventuali messaggi di errore. Ad esempio:</p>
<pre>state ConfigOkState {
    state_entry() {
        llSetText(text,color,1.0);
    }

    changed(integer change) {
        if(change &#038; CHANGED_INVENTORY) llResetScript();
    }
}

state ConfigErrorState {
    state_entry() {
        llOwnerSay("Errore di configurazione nel file "+configNotecard);
    }
    changed(integer change) {
        if(change &#038; CHANGED_INVENTORY) llResetScript();
    }
}</pre>
<p>Notate che tutti e due gli stati gestiscono l&#8217;evento changed in modo da captare eventuali modifiche del file di configurazione e resettarsi in automatico (ovviamente se non si vuole questa estenzione basta cancellare l&#8217;evento!).</p>
<p>Per chiarezza posto il codice completo dell&#8217;esempio:</p>
<pre>// ReadConfiguration
//
// Il seguente template viene usato per leggere un file di configurazione.
// Il file di configurazione può essere formattato nel seguente modo:
// <var>        Singola variabile
// <var>=<val>    Variabile <var> che deve essere inizializzata con il valore in <val>
// # line        Linea di commento
//
// @version 1.0
// @author MarcoDuff Palen (http://www.marcoduff.com/)

// QUI INSERISCO LE VARIABILI DA RIEMPIRE TRAMITE IL FILE DI CONFIGURAZIONE
string text;
vector color;

// Variabili
string configNotecard;
integer line;
key requestId;

// Legge i singoli comandi di configurazione.
//
// @param var        Nome della variabile letta (sempre totalmente maiuscola).
// @param val        Valore della variabile associata o una stringa vuota in caso di nessuna inizializzazione.
readConfig(string var, string val) {
    // QUI INSERISCO I SETTAGGI DELLE VARIABILI
    llOwnerSay("[INFO] Reading "+var+" = "+val+" on line "+(string)(line+1));
    if(var=="TEXT") text = val;
    else if(var=="COLOR") color = (vector)val;
    else llOwnerSay("[WARNING] Variabile "+var+" alla linea "+(string)(line+1)+" non prevista.");
}

// Valida la configurazione.
//
// @return            Restituisce TRUE se la configurazione è valida, FALSE altrimenti.
integer validateConfig() {
    // QUI INSERISCO L'EVENTUALE VALIDAZIONE DELLE VARIABILI

    // Il colore non è una variabile richiesta, se non viene impostata la imposto a nero
    if(color == ZERO_VECTOR) color = <0.0,0.0,0.0>;

    // Il testo è una variabile fondamentale, mando un messaggio di errore
    if(llStringLength(text)==0) llOwnerSay("Non hai impostato la variabile TEXT");
    else return TRUE;

    return FALSE;
}

// Funzione per la visualizzazione dell'output.
//
// @param message    Messaggio da visualizzare.
// @param color        Colore di visualizzazione.
showOutput(string message, vector color) {
    llSetText(message,color,1.0);
}

// Stato di inizializzazione.
default {
    state_entry() {
        configNotecard = llGetScriptName()+".config";
        showOutput("Reading "+configNotecard,<0.0,1.0,0.0>);
        line = 0;
        requestId = llGetNotecardLine(configNotecard,line);
    }

    state_exit() {
        line = -1;
        requestId = NULL_KEY;
        showOutput("",ZERO_VECTOR);
    }

    dataserver(key request_id, string data) {
        if(requestId==request_id) {
            if(data!=EOF) {
                data = llStringTrim(data,STRING_TRIM);
                if(llSubStringIndex(data,"#")!=0&#038;&#038;llStringLength(data)>0) {
                    list dataList = llParseString2List(data,["="],[]);
                    string var = llToUpper(llStringTrim(llList2String(dataList,0),STRING_TRIM));
                    string val = "";
                    if(llGetListLength(dataList)==2) val = llStringTrim(llList2String(dataList,1),STRING_TRIM);
                    readConfig(var,val);
                }
                line++;
                requestId = llGetNotecardLine(configNotecard,line);
            }
            else {
                integer validate = validateConfig();
                if(validate == TRUE) state ConfigOkState;
                else state ConfigErrorState;
            }
        }
    }
}

// Stato se la configurazione è andata a buon fine.
state ConfigOkState {
    state_entry() {
        // SE TUTTO E' ANDATO BENE VISUALIZZO IL TESTO SULL'OGGETTO CON I PARAMETRI DEL FILE DI CONFIGURAZIONE
        llSetText(text,color,1.0);
    }

    changed(integer change) {
        if(change &#038; CHANGED_INVENTORY) llResetScript();
    }
}

// Stato se la configurazione è errata.
state ConfigErrorState {
    state_entry() {
        // SE TUTTO E' ANDATO MALE VISUALIZZO UN ERRORE
        llOwnerSay("Errore di configurazione nel file "+configNotecard);
    }
    changed(integer change) {
        if(change &#038; CHANGED_INVENTORY) llResetScript();
    }
}</pre>
<p>Buono Scripting LSL a tutti!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcoduff.com/2009/01/12/notecard-configurazione-lsl/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mimotto Fan Club</title>
		<link>http://www.marcoduff.com/2008/12/23/mimotto-fan-club/</link>
		<comments>http://www.marcoduff.com/2008/12/23/mimotto-fan-club/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 23:19:09 +0000</pubDate>
		<dc:creator>MarcoDuff</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[Mimotto]]></category>

		<guid isPermaLink="false">http://www.marcoduff.com/?p=154</guid>
		<description><![CDATA[
Ciao a tutti!
Mi presento, mi chiamo Mimotto e sono nato dalla scatola di Taboo XXL il 2 dicembre 2008!!!
I miei fan hanno deciso di immortalarmi nelle situazioni più normali della mia vita!
Se avete delle situazioni da suggerirmi o volete contribuire ad arricchire il mio book fotografico, collegatevi alla mia pagina su Facebook!!!
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a rel="lightbox" href="http://photos-a.ak.fbcdn.net/photos-ak-snc1/v1835/244/104/45545176804/n45545176804_1612256_7380.jpg"><img class="aligncenter" src="http://photos-a.ak.fbcdn.net/photos-ak-snc1/v1835/244/104/45545176804/n45545176804_1612256_7380.jpg" alt="Il Mimotto" width="400" /></a></p>
<p style="text-align: left;">Ciao a tutti!</p>
<p style="text-align: left;">Mi presento, mi chiamo <a href="http://www.facebook.com/pages/Mimotto/45545176804" target="_blank">Mimotto</a> e sono nato dalla scatola di Taboo XXL il 2 dicembre 2008!!!</p>
<p style="text-align: left;">I miei fan hanno deciso di immortalarmi nelle situazioni più normali della mia vita!</p>
<p style="text-align: left;">Se avete delle situazioni da suggerirmi o volete contribuire ad arricchire il mio book fotografico, <a href="http://www.facebook.com/pages/Mimotto/45545176804" target="_blank">collegatevi alla mia pagina su Facebook</a>!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcoduff.com/2008/12/23/mimotto-fan-club/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Video di Natale per CBM Italia Onlus</title>
		<link>http://www.marcoduff.com/2008/12/19/video-di-natale-per-cbm-italia-onlus/</link>
		<comments>http://www.marcoduff.com/2008/12/19/video-di-natale-per-cbm-italia-onlus/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 13:10:48 +0000</pubDate>
		<dc:creator>MarcoDuff</dc:creator>
		
		<category><![CDATA[Second Life]]></category>

		<category><![CDATA[Video]]></category>

		<category><![CDATA[cbm]]></category>

		<guid isPermaLink="false">http://www.marcoduff.com/?p=120</guid>
		<description><![CDATA[
Video di Natale girato alla Land del Forum per CBM Italia Onlus dal grande Yash!
Io sono quello al minuto 2:57!
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/6ZC5icB4vLs&amp;hl=it&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/6ZC5icB4vLs&amp;hl=it&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Video di Natale girato alla <a href="http://slurl.com/secondlife/Beech/30/130/30" target="_blank">Land del Forum</a> per <a href="http://www.cbmitalia.org/" target="_blank">CBM Italia Onlus</a> dal grande <a href="http://www.secondlifeitalia.com/community/profile.php?mode=viewprofile&amp;u=9434" target="_blank">Yash</a>!</p>
<p>Io sono quello al minuto 2:57!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcoduff.com/2008/12/19/video-di-natale-per-cbm-italia-onlus/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Installare PHP5 su Apache Server</title>
		<link>http://www.marcoduff.com/2008/12/12/installare-php5-su-apache-server/</link>
		<comments>http://www.marcoduff.com/2008/12/12/installare-php5-su-apache-server/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 18:51:58 +0000</pubDate>
		<dc:creator>MarcoDuff</dc:creator>
		
		<category><![CDATA[Informatica]]></category>

		<category><![CDATA[Apache]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.marcoduff.com/?p=116</guid>
		<description><![CDATA[
Nello scorso articolo ci siamo occupati dell&#8217;installazione del Web Server Apache sul nostro sistema. Adesso vogliamo potenziarlo installando PHP5.
Prima di scaricare PHP serve una premessa. Esiste più di un modo per installare PHP sul nostro sistema, questo dipende molto dai nostri scopi. Per metterlo in accoppiata al server web Apache il modo più performante e [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="PHP5" rel="lightbox" href="http://static.php.net/www.php.net/images/php.gif"><img class="aligncenter" src="http://static.php.net/www.php.net/images/php.gif" alt="PHP5" /></a></p>
<p>Nello scorso articolo ci siamo occupati dell&#8217;installazione del Web Server Apache sul nostro sistema. Adesso vogliamo potenziarlo installando PHP5.</p>
<p>Prima di scaricare PHP serve una premessa. Esiste più di un modo per installare PHP sul nostro sistema, questo dipende molto dai nostri scopi. Per metterlo in accoppiata al server web Apache il modo più performante e sicuro di effettuare l&#8217;installazione è di inserirlo come modulo di Apache2.2.</p>
<p>Andiamo sul sito <a href="http://www.php.net/" target="_blank">php.net</a> e scarichiamo l&#8217;ultima versione. Attenzione a non scegliere la versione Installer ma la versione Zip Package che ci consente di installarlo come modulo. Al momento della mia installazione la versione di PHP è la 5.2.8.</p>
<p>Scaricato il file, scompattiamo il tutto nella cartella modules/php5 di Apache (in poche parole, nel mio sistema, la cartella di php risiede in &#8220;C:\Programmi\Apache2.2\modules\php5&#8243;). Ovviamente potete installarlo in qualsiasi altro percorso, ma attenzione a non installarlo in percorsi che contengono spazi!</p>
<p>Cerchiamo il file php.ini-recommended e facciamone una copia chiamandola php.ini (questo è il file di configurazione di php, lo modificheremo dopo).</p>
<p>Fatto questo dobbiamo configurare il nostro web server Apache per fargli riconoscere PHP. Andiamo quindi ad editare il solito file httpd.conf.</p>
<p>Subito dopo la direttiva DocumentRoot inseriamo la seguente riga:</p>
<pre>PHPIniDir  "C:/Programmi/Apache2.2/modules/php5"</pre>
<p>che indica ad Apache dove cercare il file php.ini</p>
<p>Cerchiamo la sezione dove vengono caricati i moduli (ovvero dove vi sono i &#8220;LoadModules) ed inseriamo alla fine</p>
<pre>LoadModule php5_module "C:/Programmi/Apache2.2/modules/php5/php5apache2_2.dll"</pre>
<p>che non è altro che la libreria di php5 per il web servere Apache 2.2.x</p>
<p>L&#8217;ultima direttiva va inserita all&#8217;interno del blocco &lt;IfModule mime_module&gt; dove vi sono le direttive AddType ed è</p>
<pre>AddType application/x-httpd-php .php</pre>
<p>che dice al server come trattare i file con estensione php.</p>
<p>Fatto questo, per testare se tutto è andato bene bisogna riavviare il server Apache tramite il tool Apache Service Monitor e creare all&#8217;interno della nostra DocumentRoot (ovvero la cartella htdocs) un file che chiameremo phpinfo.php con all&#8217;interno il seguente testo</p>
<pre>&lt;?php phpinfo(); ?&gt;</pre>
<p>questa non è altro che la chiamata alla funzione php phpinfo() che visualizza l&#8217;attuale configurazione contenuta nel file php.ini. Per visualizzarlo ci basta puntare con il nostro browser all&#8217;indirizzo <a href="http://localhost/phpinfo.php" target="_blank">http://localhost/phpinfo.php</a></p>
<p>Per ottimizzare PHP fatevi un giro sul file php.ini ed adattatelo alle vostre esigenze. Ad esempio, io per riuscire a fare un debug puntuale del mio codice ho cambiato la seguente direttiva</p>
<pre>display_errors = On</pre>
<p>in modo di visualizzare a video gli errori del mio codice.</p>
<p>Adesso che abbiamo PHP installato nel nostro sistema, non ci resta che iniziare a programmare il nostro sito web dinamico!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcoduff.com/2008/12/12/installare-php5-su-apache-server/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Installare Apache HTTP Server su Windows</title>
		<link>http://www.marcoduff.com/2008/12/12/installare-apache-http-server-su-windows/</link>
		<comments>http://www.marcoduff.com/2008/12/12/installare-apache-http-server-su-windows/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 16:28:14 +0000</pubDate>
		<dc:creator>MarcoDuff</dc:creator>
		
		<category><![CDATA[Informatica]]></category>

		<category><![CDATA[Apache]]></category>

		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://www.marcoduff.com/?p=104</guid>
		<description><![CDATA[
Internet può essere inteso come una rete di computer connessi tra di loro. Alcuni di questi cercano dei servizi mentre altri li offrono.
Quando navighiamo per la rete con il nostro browser preferito andiamo alla ricerca di quei particolari server che offrono servizi. Ad esempio, Google non è altro che un server che offre un servizio [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a rel="lightbox" href="http://www.marcoduff.com/blog/wp-content/uploads/apache_pb22.gif"><img class="border" src="http://www.marcoduff.com/blog/wp-content/uploads/apache_pb22.gif" alt="Apache HTTP Server" /></a></p>
<p>Internet può essere inteso come una rete di computer connessi tra di loro. Alcuni di questi cercano dei servizi mentre altri li offrono.</p>
<p>Quando navighiamo per la rete con il nostro browser preferito andiamo alla ricerca di quei particolari server che offrono servizi. Ad esempio, Google non è altro che un server che offre un servizio di ricerca.</p>
<p>La maggior parte degli utenti conosce solo metà di Internet, quella di chi cerca servizi, ma perché non mettersi per una volta dall’altra parte, essere noi dei server! Quello che faremo in questo articolo sarà proprio installare il Web Server Apache sul nostro computer per scoprire l’affascinante mondo di chi offre un servizio su Internet.</p>
<p>Avere un server web installato sulla propria macchina porta parecchi vantaggi per uno sviluppatore web, primo fra tutti poter testare i propri prodotti in locale, off-line e, soprattutto, impostando manualmente tutti i parametri di sicurezza e tutte le opzioni di debug.</p>
<p>Per prima cosa ci serve ovviamente il Server Web Apache, che si può scaricare gratuitamente dal sito <a href="http://httpd.apache.org/" target="_blank">httpd.apache.org</a>. Per l’installazione descritta in questo articolo sto usando il “Win32 Binary without crypto (no mod_ssl) (MSI Installer)” versione 2.2.10, ovvero la versione per windows senza il protocollo SSL.</p>
<p>Appena effettuato il download, facciamo doppio click sull’eseguibile per fare partire l’installazione.<br />
Dopo aver accettato la licenza vi viene chiesto il nome del dominio, il nome del server, l’email dell’amministratore e il tipo di installazione (Servizio di Windows su porta 80 o Solo per l’utente corrente su porta 8080).</p>
<p>Se avete comprato un dominio (ovvero quello che volgarmente può essere chiamato un indirizzo internet) e quindi dovete agganciarvi a DNS esterni allora dovete inserire quello, altrimenti potete pure mettere un nome di fantasia. Discorso analogo per il nome del server. Nel mio caso, uso il nome di fantasia “marcoduff.com” per il nome del dominio e “local.marcoduff.com” per il nome della macchina. Inserite la vostra email e selezionate l’installazione come servizio di windows sulla porta 80 (porta di default per tutti i web server). In questo modo, il nostro web server apache partirà in automatico ad ogni avvio di windows (per disabilitare in futuro questa opzione, basta togliere il check di avvio nei servizi di windows dal Pannello di Controllo -&gt; Strumenti di Amministrazione -&gt; Servizi). Andando avanti, selezioniamo l’installazione Personalizzata e cambiamo il percorso di installazione da quello di default</p>
<pre>C:/Programmi/Apache Software Foundation/Apache2.2/</pre>
<p>a</p>
<pre>C:/Programmi/Apache2.2/</pre>
<p>tutto questo per non avere problemi in futuro (sempre meglio non avere spazi nei percorsi!)! Nel giro di pochissimi secondi avremo il nostro Web Server installato!</p>
<p>La prima cosa che dovreste notare è una nuova icona  nel System Tray di windows che non è altro che l’Apache Service Monitor. Se tutto è andato a buon fine, aprendolo, vedrete il server Apache con un simbolo verde accanto a simboleggiare che il server è in funzione. Questo tool ci permette di arrestare e riavviare in modo semplice il server, operazione che dovremo fare quando passeremo alla configurazione.</p>
<p>Per vedere il nostro server in funzione basta dirigersi all’indirizzo <a href="http://localhost/" target="_blank">http://localhost/</a> (o <a href="http://localhost:8080/" target="_blank">http://localhost:8080/</a> se non lo abbiamo installato come servizio di windows) per vedere la pagina “It works!”.</p>
<p>Ma cosa è e dove si trova questa pagina “It works!”? Andiamo ad indagare dentro la cartella di installazione di Apache. La cartella htdocs rappresenta l’accesso a tutti i file del nostro server (in gergo tecnico quella è la nostra Document Root), infatti li troveremo il file index.html che contiene proprio il nostro testo “It works!”. Provate a modificare quel file e a vedere i risultati in <a href="http://localhost/" target="_blank">http://localhost/</a>.</p>
<p>Personalmente preferisco tenere la DocumentRoot in un posto diverso e facilmente accessibile a tutti gli utenti di Windows. In particolare, quello che voglio fare è spostare la DocumentRoot in D:\htdocs. Per fare questo dobbiamo cambiare due voci nel file di configurazione del server.</p>
<p>Il file di configurazione del server si chiama httpd.conf ed è situato nella cartella conf. Aprendo il file notiamo subito che questo è estremamente leggibile grazie ai tantissimi commenti inseriti (i commenti iniziano con il carattere #). Scorrendo in basso troviamo tutte le opzioni inserite durante l’installazione (nome del dominio, nome del server, email dell’amministratore, porta di ascolto del server) e le due righe che ci interessano:</p>
<pre>DocumentRoot "C:/Programmi/Apache2.2/htdocs"</pre>
<p>e</p>
<pre>&lt;Directory "C:/Programmi/Apache2.2/htdocs"&gt;</pre>
<p>La prima indica dove si trova la DocumentRoot, la seconda indica le opzioni da adottare per la cartella specificata. Ci basta cambiare il percorso di tutte e due in “D:/htdocs” e abbiamo cambiato la DocumentRoot!</p>
<p>Fate attenzione agli slash di divisione delle cartelle che sono come negli ambienti Unix, quindi usate questo  ‘/’ simbolo e non questo ‘\’!!!</p>
<p>Ovviamente prima di visualizzare le modifiche bisogna riavviare il server tramite il tool Apache Service Monitor.</p>
<p>Solo a livello di test proviamo a riavviare il server senza spostare la cartella htdocs nella nuova posizione. Appena proviamo a riavviare ci risulta, ovviamente, un errore visualizzato anche nel Monitor da un pallino rosso accanto al server!</p>
<p>Che cosa sarà successo??? Da buoni sistemisti, andiamo a visionare il file di log degli errori che è situato in logs/error.log (possiamo cambiare la posizione dei file di log modificando, nemmeno a dirlo, la voce ErrorLog nel file di configurazione del server). Ci dovrebbe risultare una riga simile a questa:</p>
<pre>Syntax error on line 177 of C:/Programmi/Apache2.2/conf/httpd.conf:
DocumentRoot must be a directory</pre>
<p>Dove ovviamente ci dice che la DocumentRoot deve essere una cartella esistente nel nostro sistema. Spostiamo correttamente la cartella htdocs in D:, proviamo a riavviare il server e tutto andrà per il verso giusto!</p>
<p>Ma adesso che avete il vostro Web Server e dopo che lo avrete riempito con il vostro sito o con i vostri contenuti come fate a farlo vedere agli altri???</p>
<p>Nulla di più semplice! Vi basta conoscere l’indirizzo IP del vostro computer (Start -&gt; Esegui… -&gt; cmd -&gt; ipcongif) e leggere la riga (ad esempio)</p>
<pre>Indirizzo IP. . . . . . . . . . . . . : 123.123.123.123</pre>
<p>E dire ai vostri amici (o a voi stessi) su internet di visionarlo all’indirizzo http://123.123.123.123/ nulla di più semplice!</p>
<p>Buon divertimento con il Vostro primo pezzo di Internet!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcoduff.com/2008/12/12/installare-apache-http-server-su-windows/feed/</wfw:commentRss>
		</item>
		<item>
		<title>30 x PiGreco</title>
		<link>http://www.marcoduff.com/2008/12/03/30-x-pigreco/</link>
		<comments>http://www.marcoduff.com/2008/12/03/30-x-pigreco/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 11:13:49 +0000</pubDate>
		<dc:creator>MarcoDuff</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[Divertente]]></category>

		<guid isPermaLink="false">http://www.marcoduff.com/?p=90</guid>
		<description><![CDATA[Il nostro caro amico Ernesto è arrivato alla vecchiaia&#8230; 30 anni! Una festa a sorpresa è il minimo che possiamo fare, ma cosa organizzare?
Il Giorno Prima
Ore 18:43 - Daniela mi chiama, prima domanda: &#8220;Ernesto è in casa?&#8221; &#8220;No&#8221; &#8220;Perfetto, sto passando da casa tua, esci che vediamo cosa fare per il suo compleanno!&#8221;
Ore 18:50 - [...]]]></description>
			<content:encoded><![CDATA[<p>Il nostro caro amico Ernesto è arrivato alla vecchiaia&#8230; 30 anni! Una festa a sorpresa è il minimo che possiamo fare, ma cosa organizzare?</p>
<p><strong>Il Giorno Prima</strong></p>
<p>Ore 18:43 - Daniela mi chiama, prima domanda: &#8220;Ernesto è in casa?&#8221; &#8220;No&#8221; &#8220;Perfetto, sto passando da casa tua, esci che vediamo cosa fare per il suo compleanno!&#8221;</p>
<p>Ore 18:50 - Daniela arriva a casa mia, usciamo e andiamo a fare un aperitivo. Decidiamo di organizzare una festa a sorpresa in una vineria vicino casa, prenotiamo il locale per le 21 e andiamo ad ordinare la torta. Il mio compito sarà di confondere Ernesto facendogli credere di andare alla solita partita del DrWhy per poi portarlo al locale.</p>
<p>In un gruppo normale e con un festeggiato normale avremmo potuto fermarci li&#8230; ma essendo un gruppo diabolico con un festeggiato con il nick PiGreco non potevamo cadere nella banalità! Quindi&#8230;</p>
<p><strong>Il Pomeriggio del Compleanno</strong></p>
<p>Ore 16:00 - Insieme a Francesca e Daniele, decidiamo di complicare leggermente il tutto con una caccia al tesoro ad enigmi dove il passo finale è condurlo proprio al luogo della festa! Nella mia testa i passi da seguire sono i seguenti: Francesca si occupa della prima parte dell&#8217;enigma, deve condurre Ernesto alla pagina tom.html del mio sito, io della parte finale, ovvero condurlo al locale. Per fargli trovare il primo biglietto la scelta è semplice: esco prima da lavoro, sistemo tutti i bigliettini, verso le 20 usciamo per andare a cenare nel locale del DrWhy, io esco per ultimo da casa posizionando il primo bigliettino all&#8217;uscio della porta con una torcia puntata contro! Mentre siamo in macchina, con la banale scusa di essermi dimenticato il cellulare, torno indietro e chiedo il favore ad Ernesto di andarmelo a prendere. E li inizia tutto&#8230;</p>
<p>Ore 16:55 - Invio della Mail finta a tutto il gruppo del DrWhy: appuntamento alle 20:30 direttamente al locale.</p>
<p>Ore 17:30 - Ultimo briefing per l&#8217;organizzazione della caccia al tesoro, tutto è pronto&#8230; dopo &#8220;Pigreco la Biscia&#8221;, ecco la spiegazione completa di tutti i passi de &#8220;Pigreco Cacciatore&#8221;.</p>
<p><strong>Pigreco Cacciatore - Teoria</strong></p>
<p>Verso le 20 i tre abitanti della casa (Io, Vincenzo ed Ernesto) dobbiamo uscire di casa per dirigerci verso il locale del DrWhy come preventivato. A metà tragitto, con la banale scusa di essermi dimenticato il cellulare, torno indietro&#8230; poco prima di arrivare a casa Vincenzo fingerà una telefonata ed io chiederò ad Ernesto di salire lui a prendermelo visto che Vincenzo è al telefono ed io intanto faccio manovra con la macchina. Il tutto deve essere fatto in una atmosfera del tipo &#8220;si intelligentone, visto che ti aspetti la festa a sorpresa, ci siamo fatti un giro per dare tempo a tutti di salire a casa nostra e farti la banalissima SORPRESA al tuo ingresso&#8221;&#8230; ma ovviamente essendo bastardi dentro non è cosi!</p>
<p>Mentre noi andiamo via in macchina di nascosto, Ernesto salirà a casa e troverà la casa buia con una torcia che punta sul biglietto scritto da Francesca.</p>
<p>Il testo del biglietto è il seguente:</p>
<blockquote><p>Per poterti degnamente festeggiare<br />
un bell&#8217;enigma abbiamo ideato<br />
presto sù, ti devi affrettare:<br />
da tutti quanti sei desiderato.</p>
<p>Per sapere la pagina da digitare<br />
scopri la parola che abbiamo celato;<br />
non è difficile, devi solo contare<br />
e sappiamo tutti che sei portato.</p>
<p>Per cominciare il tuo cammino guidato<br />
pensa al civico dove i Danieli puoi trovare<br />
dividilo per le dita di una mano e il risultato<br />
sottrailo all&#8217;età che il 02/12/2013 potrai vantare.</p>
<p>Il secondo enigma che ti si para davanti<br />
lo scioglierai se prendi la fine del tuo cellulare<br />
e dividi per il doppio, della tua casa, gli abitanti;<br />
segna il numero e non ti scoraggiare.</p>
<p>L&#8217;ultima infine la puoi scovare dentro<br />
il primo primo palindromo che le 2 cifre superi;<br />
attento, però, a togliergli quella al centro<br />
che non serve a niente tra gli altri due numeri.</p>
<p>Ora che hai affrontato tutte le prove da superare,<br />
da bravo italiano avrai capito il nesso;<br />
prova ad andare su www.marcoduff.com e a digitare<br />
la parola che ti porterà al successo.</p>
<p>Buon divertimento caro amico Ernesto;</p>
<p>ti aspettiamo per mangiare: sii lesto!</p></blockquote>
<div>in poche parole sono tre indovinelli che portano rispettivamente ai numeri 18, 13, 11 che tramite una semplice conversione portano alla parola TOM, quindi alla pagina <a href="http://www.marcoduff.com/tom.html" target="_blank">www.marcoduff.com/tom.html</a> (pagina che potete ancora visionare)!</div>
<div>La pagina è composta da un video che augura buon compleanno ad Ernesto e da due banner del Bacardi. Dall&#8217;indizio del Bacardi, Ernesto deve capire di cercare all&#8217;interno della latta della bottiglia del Bacardi che custodiamo gelosamente a casa. All&#8217;interno della stessa trova una parte di un Post-It strappato. Qui dovrebbe capire che deve cercare l&#8217;altra metà del post-it per completare il percorso! L&#8217;indizio sta nel codice sorgente dell&#8217;html della pagina tom.html:</div>
<pre>&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;Happy Bigthday PiGreco&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;!-- Bravo PiGreco ma non è finita qui, per trovarci devi lavare la camicia bianca! --&gt;
	&lt;table width="100%" height="100%"&gt;
		&lt;tr&gt;
			&lt;td align="center" valign="middle"&gt;
				&lt;img src="http://www.gringomundo.com/images/bacardi_logo.jpg" height="344" /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/UeypOvsY91Q&amp;hl=it&amp;fs=1&amp;autoplay=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/UeypOvsY91Q&amp;hl=it&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;img src="http://www.gringomundo.com/images/bacardi_logo.jpg" height="344" /&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Ovvero &#8220;<span class="comment">Bravo PiGreco ma non è finita qui, per trovarci devi lavare la camicia bianca!&#8221;!!!</span></p>
<p>Ovviamente una persona normale va subito a cercare nella lavatrice&#8230; dove trova il seguente biglietto:</p>
<blockquote><p>Sbagliato! Ho detto BIANCA!!!</p></blockquote>
<p>Qui dovrebbe capire, anche grazie ad un discorso avuto un paio di giorni fa, di cercare la candeggina&#8230; infatti attaccato alla bottiglia della candeggina ci sta un preservativo con il seguente post-it allegato:</p>
<blockquote><p>Non hai bisogno di indizi per sapere dove usarlo!!! Giusto???</p></blockquote>
<p>Infatti, esattamente sotto le coperte del suo letto, trova una bustina con dentro il mio cellulare spento e, finalmente, l&#8217;altra metà del post-it! Unendo le due parti si compone il messaggio:</p>
<blockquote><p>Per avere l’accesso manda un sms con scritto “MINCHIONE SI’” al numero **********</p></blockquote>
<p>(ovviamente il numero di cellulare qui nel blog l&#8217;ho coperto da *, nel biglietto originale c&#8217;era il numero di cellulare di Daniele). Mandando correttamente il messaggio a quel numero gli arriverà una risposta, sempre via SMS, con il PIN del mio cellulare (questa mossa serviva anche a noi che lo aspettavamo nel locale per capire a che punto dello scherzo era arrivato).</p>
<p>Accendendo il mio cellulare ed inserendo il PIN arrivato via sms doveva capire (grazie all&#8217;indizio TOM) di accedere al tom tom dove avevo precedentemente impostato il percorso a piedi da casa mia al locale.</p>
<p>Secondo una nostra stima, nel giro di 30 minuti il buon Ernesto sarebbe risuscito a risolvere l&#8217;enigma, ma&#8230;</p>
<p><strong>La Preparazione</strong></p>
<p>Ore 17:43 - Esco dall&#8217;ufficio, arrivo a casa e posiziono un paio di biglietti (Bacardi, candeggina e lavatrice), preparo la torcia in una posizione comoda, in modo di riuscire facilmente ad accenderla un attimo prima di uscire.</p>
<p>Ore 18:32 - Arriva l&#8217;email di Francesca con il testo del primo biglietto, lo copio su un foglio di carta&#8230; ma mentre sto scrivendo subito il primo imprevisto: arriva a casa Ernesto che si avvicina pericolosamente verso la mia stanza&#8230; sposto il blocco notes dove stavo scrivendo e chiudo subito la mail. Tutto fila liscio. Riesco a finire la scrittura. Adesso tutti i biglietti sono pronti&#8230; manca solo il posizionamento del cellulare sotto le coperte del letto di Ernesto. Secondo imprevisto: Ernesto ha mal di testa e decide di coricarsi un poco sul letto che diventa per me inaccessibile!</p>
<p>Ore 19:20 - Terzo imprevisto: mi chiama Daniele dicendo che non ha avuto tempo di comprare il bigliettino di auguri. Mi chiede se posso andare io. Penso&#8230; &#8220;Adesso chiedo ad Ernesto di andarsi a fare la doccia, cosi mentre si doccia ho il tempo di comprare il bigliettino e nascondere il cellulare sul suo letto&#8221;&#8230; &#8220;Ernè, devi farti la doccia?&#8221; (quarto imprevisto) &#8220;No, puoi andare a fartela tu!&#8221;. Penso&#8230; &#8220;Ma vaffanculo!&#8221;. Mi infilo sotto l&#8217;inaspettata doccia, mi sistemo per benino, mi vesto e scendo di casa dicendo &#8220;Ernè, scendo un attimo&#8221; e lui &#8220;Dove vai?&#8221; penso&#8230; &#8220;Ma 4 chili di cazzi tuoi no, eh!&#8221;</p>
<p>Ore 19:52 - Scendendo di casa incontro Vincenzo davanti al portone, gli spiego la sorpresa ed il suo ruolo (la finta telefonata quando siamo in macchina) ma inaspettato arriva il quinto imprevisto: Vincenzo ha la febbre e non se la sente di uscire! La parte iniziale del piano è stravolta&#8230; intanto si sta facendo tardi visto che dovevamo uscire alle 20! Vado alla cartoleria ma la trovo chiusa, pazienza, niente biglietto! Torno a casa, Ernesto è ancora mezzo addormentato sul letto, Vincenzo conferma che non viene, ha quasi 38 di febbre! Ok, mi metto a pensare a come risolvere il problema&#8230; con Vincenzo restiamo che lui resta a casa, sarà lui a posizionare comodamente il cellulare ed il biglietto iniziale, poi si deve chiudere in camera. Restiamo lo chiameremo mentre siamo in macchina insistendo per farlo venire, lui dirà di si, torneremo indietro e farò salire Ernesto con una scusa per dare inizio agli indizi.</p>
<p>Ore 20:20 - Ernesto, finalmente, si alza viene in cucina e trova a me e Vincenzo che complottiamo (la cosa è anche voluta&#8230; vogliamo far credere ad Ernesto che gli stiamo organizzando qualche cosa e che quando salirà a casa si ritroverà la banale scena degli amici che gli urlano SORPRESA). Ernesto dice &#8220;Ma non dobbiamo andare al DrWhy?&#8221; ed io &#8220;Minkia già le otto e mezza sono!!! Muoviamoci che è tardi&#8221;&#8230; inizia un piccolo teatrino con Vincenzo del tipo &#8220;Amunì, ca vieni che è il compleanno di Ernesto!&#8221;! Scendiamo io ed Ernesto e andiamo a prendere la macchina!</p>
<p>Sono le 20:40 e La Caccia al Tesoro inizia&#8230;</p>
<p><strong>Pigreco Cacciatore - Pratica</strong></p>
<p>Mentre siamo in macchina Ernesto si prende una sigaretta ma non ha l&#8217;accendino (particolare utile per dopo) ed inizio con delle battutine del tipo &#8220;Peccato, Vincenzo ci teneva a venire&#8221;, &#8220;Magari voleva soltanto mangiare qualche cosa di semplice a casa&#8230; in effetti potremmo aspettarlo&#8221;, il tutto per far dire direttamente ad Ernesto la frase &#8220;Ma che fa lo chiamo?&#8221;&#8230; cosa che non avviene, ma in compenso Ernesto inventa il sesto imprevisto: &#8220;Ma che fa, lo chiamo Sergio e gli dico di venire al DrWhy?&#8221;&#8230; Microsecondo di panico, Sergio è uno degli invitati alla festa a sorpresa, ma avrà il sangue freddo di stare al gioco? Mi fido e rispondo &#8220;Ca certo! Chiamalo!&#8221; Mentre Ernesto parla capisco che Sergio sta al gioco tanto da farsi dire la via del locale &#8220;via Appia 1253&#8243;&#8230; Li mi viene il colpo di genio &#8220;In effetti non so a che altezza sta il 1253, metto il navigatore&#8230;. Minkia, l&#8217;ho dimenticato a casa, ho cambiato giubbotto e l&#8217;ho lasciato nella tasca&#8230; fai una cosa, chiama a Vincenzo e chiedigli se lo vede&#8221;! Ernesto chiama, Vincenzo conferma che il cellulare sta nella tasca del giubbotto e torniamo indietro&#8230; mentre torniamo Ernesto dice &#8220;Vabbè possiamo usare il mio cellulare come navigatore&#8221; ed io &#8220;Vabbè, se mi chiama Alessandra&#8221; ed intanto penso &#8220;Ma 40 chili di cazzi tuoi no, eh!&#8221;&#8230; Arrivando sotto casa dico ad Ernesto &#8220;Che fa me lo prendi tu cosi che ti prendi pure l&#8217;accendino?&#8221; e finalmente Ernesto collabora con un &#8220;Va bene!&#8221;. Scende, apre il portone, chiude ed io vado a posare la macchina! Settimo imprevisto: mi sono dimenticato la fotocamera a casa! Quindi resto a guardarmi la scena dalla finestra a debita distanza&#8230; dalla mia visuale riesco a vedere esclusivamente la porta del bagno chiusa e il tubo del Bacardi. Il mio pensiero è quello di recuperare la fotocamera in quei pochi minuti che Ernesto impiegherà per andare a vedere il numero civico dei Danieli. Ore 21:10 Ernesto apre la porta del bagno! Capisco che in qualche modo è riuscito a recuperare il numero civico&#8230; quindi mi rassegno e raggiungo gli altri al locale. Alle 21:30 ancora nessun segnale, noi stiamo morendo di fame ed inizia a piovigginare, decido di tornare a casa per vedere che cosa è successo. Salgo solo un attimo, prendo la fotocamera e vado subito via&#8230; contro tutte le previsioni era riuscito a trovare facilmente la Candeggina ma ha avuto problemi con il Bacardi!!! Finalmente alle 21:42 arriva il messaggio &#8220;minchione si&#8221; e subito dopo, non ricevendo risposta, &#8220;MINCHIONE SI&#8221;&#8230; noi inviamo il mio PIN&#8230; passano circa altri 40 minuti e finalmente vediamo avvicinarsi una sagoma in lontananza con la camminata strana&#8230; Finalmente possiamo mangiare!</p>
<p>Auguri PiGreco!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcoduff.com/2008/12/03/30-x-pigreco/feed/</wfw:commentRss>
		</item>
		<item>
		<title>cbm Italia Onlus</title>
		<link>http://www.marcoduff.com/2008/10/08/cbm-italia-onlus/</link>
		<comments>http://www.marcoduff.com/2008/10/08/cbm-italia-onlus/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 10:42:42 +0000</pubDate>
		<dc:creator>MarcoDuff</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[cbm]]></category>

		<guid isPermaLink="false">http://www.marcoduff.com/?p=84</guid>
		<description><![CDATA[
Chi è cbm Italia Onlus?
Ogni cinque secondi nel mondo una persona diventa cieca, ogni minuto questo tragico destino tocca a un bambino. Non solo, il 90% delle persone non vedenti si trova nei paesi in via di sviluppo, quindi ha ancora meno opportunità di accedere alle cure mediche. Eppure l’80% delle forme di cecità potrebbero [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a rel="lightbox" href="http://farm4.static.flickr.com/3171/2912589383_894d5cbcdf_o.jpg"><img class="border" src="http://farm4.static.flickr.com/3171/2912589383_894d5cbcdf_o.jpg" alt="cbm Italia Onlus" width="400" /></a></p>
<p style="text-align: left;"><span class="postbody"><span style="font-size: 18px; line-height: normal;"><span style="font-weight: bold;">Chi è <span style="color: darkred;">cbm Italia Onlus</span>?</span></span></span></p>
<p style="text-align: left;"><span class="postbody">Ogni cinque secondi nel mondo una persona diventa cieca, ogni minuto questo tragico destino tocca a un bambino. Non solo, il 90% delle persone non vedenti si trova nei paesi in via di sviluppo, quindi ha ancora meno opportunità di accedere alle cure mediche. Eppure l’80% delle forme di cecità potrebbero essere prevenute o curate.</span></p>
<p style="text-align: left;"><span class="postbody">Questo è l’impegno quotidiano di <span style="color: darkred;"><span style="font-weight: bold;">cbm Italia Onlus</span></span>, l’associazione di riferimento per la prevenzione di cecità e patologie visive nei Paesi in Via di Sviluppo. <span style="color: darkred;"><span style="font-weight: bold;">cbm Italia</span></span> fa parte del network cbm International, la più grande ONG a livello mondiale per la lotta alla cecità e alla disabilità, che cura le persone residenti nei PVS praticando interventi sanitari medico-oculistici - forma il personale locale, adegua le strutture sanitarie, fa opera di prevenzione somministrando medicinali e informando la popolazione, garantisce il diritto a educazione e formazione per i disabili.</span></p>
<p style="text-align: left;"><span class="postbody"><span style="font-size: 18px; line-height: normal;"><span style="font-weight: bold;">Come mai cbm ha un articolo in <span style="color: darkred;">questo Blog</span>?</span></span></span></p>
<p style="text-align: left;">Ho deciso di collaborare con la WDT di Alice Mastroianni per far conoscere questo progetto, occupandomi attualmente del Gruppo di Facebook creato apposta.</p>
<p style="text-align: left;">Per avere maggiori informazioni sull&#8217;iniziativa potete visualizzare il gruppo Facebook <a href="http://www.facebook.com/group.php?gid=38346558658" target="_blank">Second Life Italia x CBM Italia Onlus</a>.</p>
<p style="text-align: left;">Se avete un account facebook potete collaborare con noi diffondendo l&#8217;iniziativa aggiungendo i vostri contatti facebook <a href="http://www.facebook.com/groups/edit.php?members&amp;gid=38346558658" target="_blank">cliccando qui</a>.</p>
<p style="text-align: left;">Grazie mille per il tuo aiuto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcoduff.com/2008/10/08/cbm-italia-onlus/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Indecisione.</title>
		<link>http://www.marcoduff.com/2008/09/08/indecisione/</link>
		<comments>http://www.marcoduff.com/2008/09/08/indecisione/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 10:59:36 +0000</pubDate>
		<dc:creator>MarcoDuff</dc:creator>
		
		<category><![CDATA[Second Life]]></category>

		<guid isPermaLink="false">http://www.marcoduff.com/?p=83</guid>
		<description><![CDATA[
Indeciso fino alla fine se rispondere o tacere. Molti mi consiglierebbero di tacere, sopratutto i miei nemici. Ma il punto è capire chi sono questi nemici&#8230; perché il non lo so.
Allora li esamino ad uno ad uno&#8230; a partire dalla più importante Alice.
Ovviamente non sei la più importante, ma ti piace pensare di esserlo (il [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a title="Lupo o agnello?" rel="lightbox" href="http://avapa.files.wordpress.com/2008/04/lupoagnello1.jpg"><img class="border" src="http://avapa.files.wordpress.com/2008/04/lupoagnello1.jpg" alt="" width="350" height="316" /></a></p>
<p style="text-align: left;">Indeciso fino alla fine se rispondere o tacere. Molti mi consiglierebbero di tacere, sopratutto i miei nemici. Ma il punto è capire chi sono questi nemici&#8230; perché il non lo so.</p>
<p style="text-align: left;">Allora li esamino ad uno ad uno&#8230; a partire dalla più importante Alice.</p>
<p style="text-align: left;">Ovviamente non sei la più importante, ma ti piace pensare di esserlo (il grassetto ovviamente non sei tu, ma adoro il tuo egocentrismo che ti fa accaparrare tutto l&#8217;accaparrabile). Ma si, sei una mia amica. Perchè con te c&#8217;è sempre stato un rapporto di odio e odio, ma di quello che mi ha sempre portato a dire &#8220;Io Alice devo conoscerla di persona&#8221;, ed ho molti testimoni che possono confermare questa mia frase. Abbiamo avuto tantissimi battibecchi in passato e ne avremo almeno altri duemila in futuro, sei testarda da morire, ma anche se è molto duro farlo, con te si può parlare.</p>
<p style="text-align: left;">E con te ho finito! Quindi non cercare altri riferimenti alla tua persona dopo questa riga perché sono finiti, volendo puoi anche chiudere la pagina.</p>
<p style="text-align: left;">Tornando seri&#8230;</p>
<p style="text-align: left;">Sumichan non so chi sia, ma le sue parole, come quelle di Castalia, sono sempre state le lette con un grande sorriso. Penso sia positivo!</p>
<p style="text-align: left;">Helm è un amico anche in RL. Continuo a non capire i suoi riferimenti alla cricca di intoccabili, che continua ad essere una sterile polemica. Helm, è cosi che la penso e credo di averla detta in tutte le salse. Tra gli intoccabili, o presunti tali, vi sono (parlando di ex-mod) MarcoDuff, Annett, Alice, Enea e tra gli utenti Publio, Esecutore, Darko? Tutti questi hanno ricevuto almeno un richiamo nella loro carriera e più di uno un ban. i continuo a domandare&#8230; chi sono questi privilegiati? Se X fa 1 a Y ed Y, per risposta, fa 100 a X&#8230; mi dispiace, è Y che avrà le conseguenze peggiori. Si, è brutto a dirsi&#8230; ma mica sei autorizzato a sparare in testa ad un ladro che ti ruba casa, no? In ogni caso, continuo a dire&#8230; lasciate correrre&#8230; chi se ne frega! Provate a chiarire tra di voi&#8230; è Second Life! Spetta a noi residenti renderla migliore della nostra First Life!</p>
<p style="text-align: left;">Sonia. Questa è stata una sorpresa&#8230; visto che non mi aspettavo quel tipo di post. Faccio subito una premessa sulla parte iniziale, non so perché l&#8217;hai scritta, probabilmente per errore ma sinceramente non l&#8217;ho capita. Io non ho apportato alcuna censura al commento. Nessun commento viene censurato, esiste una moderazione per il semplice fatto che essendo il mio blog voglio che scrivano al suo interno soltanto persone che conosco, il filtro sta sull&#8217;autore, assolutamente non sul contenuto. Sonia, non mi sono mai vantato di essere un lupo, figuriamoci! E&#8217; stata una etichetta che mi è stata associata e alla quale sono rimasto molto affezionato. No, non sono un animale nobile e nemmeno una faina, non mi interessa il pettegolezzo e non sono mai stato il primo ad attaccare. Le mie sono sempre state delle risposte ragionate, magari in ritardo, ma mai fatte con cattiveria. Conosco mille persone disposte a dimostrare esattamente il contrario di quello che ho affermato e ne conosco altrettante mille capaci di confermarlo&#8230; lascio a questi duecento individui la briga di giudicarmi, cosa che ovviamente non faranno perché sono tre o quattro di quelli non mi ignorano come è giusto che sia!</p>
<p style="text-align: left;">Angelica *umpf*. Altra persona che vorrei conoscere per capire se sei vera oppure ti diverti ad impersonare un personaggio. Inizio chiedendoti scusa. Ti chiedo scusa perché probabilmente mi sono espresso male nel mio post. Il tuo commento, infatti, devo ignorarlo&#8230; perché rispondi a frasi non rivolte a te in modo nemmeno esatto. Penso che tutto sia da ricondurre alla mancata comprensione del post. Tanto per fare degli esempi: la citazione &#8220;E’ una guerra e bisogna combattere&#8221; che fai è ovviamente una frase ironica, non esiste nessuna guarra! Implica il fatto che non ti ho mai visto come una nemica, al massimo come una ingenua, come tu stessa confermi di essere in più di un pm che mi hai inviato in passato. Inoltre ho parlato del ban a te e basta! Dove ho affermato che non andavano presi altri provvedimenti verso altre persone? Dove ho detto che non parli mai per te stessa? Penso che lo fai! Inoltre non ho nessun preconcetto nei tuoi confronti&#8230; la tua voglia di polemizzare contro la moderazione è risaputa come da tua stessa affermazione (PM), ma capisco anche che lo fai per difendere &#8220;a modo tuo&#8221; la community (che IMHO è il modo peggiore per difenderla). Ultima precisazione&#8230; non ho nessun problema a dire che la bannata è Angelica Lean, ma scherziamo??? Anche questo era un riferimento ad una frase urlata sui bannati che mi ha fatto ridere! E poi c&#8217;è veramente qualcuno che non ha capito che eri tu???</p>
<p style="text-align: left;">Sul legittimo disprezzo avrei da ridire&#8230; perché non ho capito. O meglio, il disprezzo alla fine ci può stare, pazienza, avrò sbagliato qualche cosa&#8230; il legittimo può essere discutibile. Ma quello su cui non si discute è ovviamente il regolamento. Capisco che un navigatore con un quoziente intellettivo pari a 1 ci stia meno di un micro secondo a scoprire la mia professione, ma che un amministratore di un forum, che è andato via da un altro forum per questo stesso motivo, nel suo forum si vanti ricevendo anche complimenti da altri utenti di aver fatto un regolamento che tuteli la sfera personale degli iscritti, e che poi si permetta di scrivere la mia professione violando le stesse regole scritte da lui, mi lascia quantomeno perplesso. Ma tranquilla, faccio io il primo passo. Voglio collaborare! Autorizzo ufficialmente l&#8217;amministratore a scrivere la mia professione sul suo forum! Perché è di questo che parlavo&#8230; collaborare e mi dispiace aver ricevuto una chiusura da parte tua. Dicevo che avere alternative sarebbe bello e stimolante. Chi se ne frega di chi ha più utenti! Tutti sappiamo che il numero del forum è falsato&#8230; e allora? Chi ha detto che sono migliori le community con 1000 iscritti postanti rispetto ad una con 1000000 iscritti con 100 postanti? Penso che community sia un luogo dove ti senti a tuo agio. Io nel mio forum sto a mio agio. Nel tuo ovviamente no, tanto che non sono iscritto. Ma non lo prendere come un attacco! Parliamoci chiaro, su 276 post quanti parlano di Second Life (visto che più della metà stanno in aree private)? Per una volta ascoltate il consiglio del vostro moderatore Darko, basta parlare del forum (sul serio&#8230; il tuo sembra il Forum del Forum!)! Inizia a mettere contenuti e togli quella stupida regola &#8220;vietato insultare la moderatrice da siti esterni&#8221;!!! Ma daiiiii!!! E poi chiamavi la mia censura??? Metti un paio di contenuti in quel forum, pulisci il db e stai certa che al primo topic interessante sugli script avrai un nuovo utente iscritto (perchè é cosi che mi farai sentire a mio agio e attirerai utenti attivi&#8230; altrimenti attiri utenti con rancore odio o come lo chiami tu, legittimo disprezzo!).</p>
<p style="text-align: left;">Piccola precisazione per non perdere amicizie! Non ho mai identificato come nemico Tayra e Sonia&#8230; con Tayra continuiamo a sentirci in modo più o meno regolare per piacevoli brevi chiacchierate su script. Magari abbiamo avuto discussioni in passato (anche se adesso non le focalizzo), ma penso si siano risolte nel migliore dei modi! Darko è un caso a parte anche se non lo reputo un nemico. Sfortunatamente con lui non riesco a spiegarmi in modo corretto, sopratutto utilizzando mezzi come PM chat e compagnia bella. Per questo motivo ho dato a Darko il mio numero di cellulare, cosa che non avrei sicuramente dato ad un nemico o ad una persona con cui voglio chiudere un rapporto. Inoltre lui mi ha pure regalato la sua collezione 2007 in SL! Detto questo&#8230; mi sono rimasti veramente pochi nemici&#8230; appena ho i nomi li posto!</p>
<p style="text-align: left;">Dulcis in fundo&#8230; un rapporto va curato&#8230; ma che significa curare? Perché alcune volte ho come l&#8217;impressione che serva un manuale, un insieme di regole da seguire, in modo preciso, senza mai sbagliare altrimeti cadi! Caschi giù e di nuovo tutto da capo&#8230; ma sempre più fragile.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcoduff.com/2008/09/08/indecisione/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
