Posts
103
Comments
238
Trackbacks
4
Dialogo con la redazione per la pubblicazione di un articolo su UgiDotNet

Background: http://blogs.ugidotnet.org/simone%20busoli/archive/2006/01/18/33224.aspx e relativi feedback.

Pubblico il breve scambio di email con la redazione:

  • Mio messaggio alla redazione con articolo allegato
Ho scritto un breve tutorial per utilizzare NVelocity con ASP.NET. Inizialmente l’ho pubblicato sul mio blog, poi mi è stato suggerito di pubblicarlo come articolo, quindi ve lo invio.

Simone Busoli

Articolo allegato:

NVelocity ed ASP.NET  
Simone Busoli

NVelocity

NVelocity è il porting .NET di un template engine per java (Velocity).

Con NVelocity è possibile fare una grande quantità di cose, ma quello per cui ho iniziato ad usarlo è la necessità di effettuare il merging di messaggi email per la gestione di un sistema di newsletter.

Email Merging

Quando si invia una newsletter, è più professionale avere ogni email personalizzata in base al destinatario, pur avendo tutte le email un modello comune, ed evitando ovviamente di dover personalizzare tutti i messaggi _più o meno manualmente_.

Ad esempio potrebbe essere carino inserire in testa al messaggio un saluto contenente nome e cognome del destinatario, e ancora più spesso è necessario inserire un link con una query string personalizzata che rimandi alla pagina di modifica delle opzioni di sottoscrizione...

Tutorial

NVelocity consente di fare tutto questo, ma manca enormemente di esempi e documentazione, perciò ho deciso di scrivere un breve tutorial per utilizzarlo velocemente.

Quello che vogliamo fare è scrivere una classe che può essere utilizzata da qualsiasi altra classe (ad esempio una pagina aspx) per generare un documento (ad esempio il testo di una email) sulla base di un modello.

  • Innanzitutto scarichiamo NVelocity.
  • Quindi aggiungiamo al progetto di visual studio in cui si trova la classe che utilizza NVelocity un riferimento a NVelocity.dll, che si trova nella directory "build" del archivio appena scaricato.
  • Dopodichè creiamo un semplice template, utilizzando un linguaggio chiamato VTL (Velocity Template Language) [niente paura, per quello che dobbiamo fare non c'è bisogno di nessuna precedente conoscenza], che è il modello che vorremo in output. Supponiamo di voler personalizzare il messaggio email inserendo un saluto contenente nome e cognome del destinatario, anche se ovviamente è possibile inserire qualsiasi altro tipo di informazione.
    L'unica cosa che è necessario sapere qui su VTL è che le variabili si indicano con $nomevariabile, nient'altro.

Ecco il nostro template:

Ciao $firstName $surname,

ecco una email di prova creata e personalizzata con NVelocity!

Possiamo scriverlo con Notepad, e poi lo salviamo ad esempio in una cartella chiamata "templates" presente nella root del nostro progetto web come miotemplate.vm.

  • Ora scriviamo la nostra classe:
using System;
using System.IO;
using System.Web;
using NVelocity;
using NVelocity.App;
using NVelocity.Exception;
using NVelocity.Runtime;

namespace MioProgetto
{
    public class NVelocityTemplateEngine
    {
        static NVelocityTemplateEngine()
        {
            // IMPORTANTE: specificare la directory del file system in cui si trovano i file template
            // Ad esempio, supponiamo di metterli in una cartella chiamata "templates" nella root del progetto web
            Velocity.SetProperty( RuntimeConstants_Fields.FILE_RESOURCE_LOADER_PATH, 
                                  HttpContext.Current.Server.MapPath("~/templates"));
                                    
            // Se non specifichiamo altre proprietà a runtime, NVelocity utilizzerà quelle di default
            
            // Inizializziamo NVelocity
            Velocity.Init();
        }

        public static string Process(string nome, string cognome)
        {
            // Creiamo un oggetto VelocityContext, simile in qualche modo ad HttpContext
            // Serve per contenere gli oggetti di cui fare il merging nel template
            VelocityContext context = new VelocityContext();
            
            StringWriter writer = new StringWriter();

            // Inseriamo i nostri dati in context
            context.Put("firstName", nome);
            context.Put("surname", cognome);
            
            try
            {
                Template template = Velocity.GetTemplate("miotemplate.vm");

                template.Merge(context, writer);                
            }
            catch (ResourceNotFoundException)
            {
                // il template non è stato trovato
            } 
            catch (ParseErrorException)
            {
                // errore durante il merging del template
            }

            return writer.GetStringBuilder().ToString();
        }
    }
}
  • Infine, per utilizzarlo, è sufficiente passare al metodo Process i dati che vogliamo siano inseriti nella stringa di output:
string output = NVelocityTemplateEngine.Process("Simone", "Busoli");

Nella stringa output otterremo quindi:

Ciao Simone Busoli,

ecco una email di prova creata e personalizzata con NVelocity!

Conclusioni

Nvelocity è un template engine molto interessante, anche se la community non è per niente attiva. Per questo motivo CasteProject, che lo utilizza nel suo MonoRail, ha fatto un fork del progetto e lo utilizza, assieme alle WebForms ASP.NET, come view engine.

Tuttavia, piochè l'ultima release di NVelocity risale all'ottobre del 2003 ed utilizzando NVelocity Log4Net come logger interno, ci si ritrova con una dipendenza ad una versione molto datata di Log4Net. Per cui, se si utilizza Log4Net nella propria applicazione, è facile ritrovarsi con delle incompatibilità di versione.

La seccatura è che per risolvere questro problema è purtroppo necessario ricompilare NVelocity utilizzando la stessa versione di Log4Net che si utilizza nel proprio progetto. Infatti la versione attualmente disponibile di Log4Net utilizza addirittura una sintassi diversa per il logging, e non è retrocompatibile con la versione con cui NVelocity è stato compilato. Quindi, oltre a ricompilare NVelocity, è necessario apportare alcune modifiche alle classi che utilizzano Log4Net.
Niente paura comunque, è un lavoro di 5 minuti... e Visual Studio aiuta nel compito indicando tutti gli errori di compilazione.

  • Risposta di Lorenzo Barbieri (erronea, era indirizzata alla redazione)
Ragazzi come siete messi? secondo me necessita di qualche miglioria, a partire dal titolo... ma può essere interessante... che ne pensate?
--
Lorenzo Barbieri
MVP Windows - Virtual Machines, MCT, MCSD.NET, MCDBA
IT: http://www.geniodelmale.info
EN: http://www.lorenzobarbieri.info
  • Risposta (esatta) di Lorenzo Barbieri
Ciao simone scusa, ma ho mandato a te la mail prevista per redazione... :(
Confermo quello che ho scritto... visto che ti avevo suggerito di mandarcelo...
Il titolo è da cambiare, qualcosa del tipo "Usare NVelocity per create template" o qualcosa del genere, e ti farò avere gli altri feedback...
 
Dammi il tempo di leggerlo bene e di accettare i feedback degli altri...
Scusa per la figuraccia...
--
Lorenzo Barbieri
MVP Windows - Virtual Machines, MCT, MCSD.NET, MCDBA
IT: http://www.geniodelmale.info
EN: http://www.lorenzobarbieri.info
  • I feedback all'articolo di Lorenzo Barbieri
Allora... ecco i miei feedback... in attesa degli eventuali feedback degli altri che ti girerò:
 
- Cambierei il titolo con qualcosa di più esplicativo
 
- Con NVelocity è possibile fare una grande quantità di cose, ma quello per cui ho iniziato ad usarlo è la necessità di effettuare il merging di messaggi email per la gestione di un sistema di newsletter.
 
Questa frase è un po' generica. Io metterei almeno due o tre delle cose che è in grado di fare.
Ti chiedo inoltre di usare il noi e non l'io per l'articolo.
 
- Tutorial

NVelocity consente di fare tutto questo, ma manca enormemente di esempi e documentazione, perciò ho deciso di scrivere un breve tutorial per utilizzarlo velocemente.
 
Cambierei questo titolo di paragrafo, e toglierei quella frase. Andava bene per il blog, ma non serve nell'articolo.
 
- Quello che vogliamo fare è scrivere una classe
 
metterei:
 
Scopo dell'articolo è di scrivere una classe per...
 
- Innanzitutto scarichiamo NVelocity.
 
metterei "Per cominciare bisogna scaricare NVelocity al link: ..."
 
- Quindi aggiungiamo al progetto di visual studio in cui si trova la classe che utilizza NVelocity 
 
Metterei Visual Studio in maiuscolo. Al posto di mettere "in cui si trova la classe che..." metterei "a cui vogliamo aggiungere la classe per usare NVelocity..." o qualcosa del genere.
 
- utilizzando un linguaggio chiamato VTL
 
metterei un link alle specifiche del linguaggio
 
- [niente paura, per quello che dobbiamo fare non c'è bisogno di nessuna precedente conoscenza],
cercherei di mettere questa frase in una forma più "seria"
 
- L'unica cosa che è necessario sapere qui su VTL è che le variabili si indicano con $nomevariabile, nient'altro.
anche questa frase cercherei di metterla in una forma più "seria"
 
- Il blocco di codice lo sostituirei con due o tre punti in cui citi le cose principali, mostrando le righe corrispondenti,  allegando poi uno zip con il progetto completo.
 
- Conclusioni
 
Ci sono alcuni errori di battitura...
NVelocity con la V maiuscola. A CastLeProject manca una L...  Poichè e non piochè...
 
Volevo capire... Il fork di CastleProject è più completo e usa già l'ultima versione di log4net?
Puoi allegare al progetto la versione corretta? E' legale per la licenza?
 
In base a queste cose vediamo un po' se è il caso di cambiare la fine...
 
 
 
So che sono tanti feedback, vorrei discuterli con te, spero che tu voglia affrontarli come stimoli per migliorare, ma credo veramente che possa venire fuori un bell'articolo... ;-)
 
Ci serve poi una biografia da mettere qui: http://www.ugidotnet.com/partners/whoweare.aspx e un file di testo contenente delle keyword relative all'articolo.
 
Ciao, Lorenzo
 
--
Lorenzo Barbieri
MVP Windows - Virtual Machines, MCT, MCSD.NET, MCDBA
IT: http://www.geniodelmale.info
EN: http://www.lorenzobarbieri.info
  • La mia risposta
Mi dispiace, ma credo proprio che non ci siamo. Innanzitutto voglio chiarire che non sto assolutamente difendendo il mio articolo, che senza dubbio poteva essere scritto meglio.

  Tuttavia:

  1. Se scrivo un articolo è per fare un piacere a chi lo legge, perché possa riuscire a fare la stessa cosa in un tempo inferiore a quello che ci ho messo io; di conseguenza:

                                                         i.       Il titolo descrive esaurientemente quello di cui parla l’articolo;

                                                           ii.      Non vedo la necessità di spiegare cosa fa NVelocity oltre a quello specificato nell’articolo; nel caso chi legge fosse interessato può tranquillamente visitare il sito di NVelocity e trovare informazioni sicuramente più chiare ed esaustive di quelle che posso fornire io;

                                                           iii.      Il linguaggio è quello più immediato possibile, non sto scrivendo una KB di Microsoft;

                                                           iv.      Non deve essere un trattato sull’argomento, ma due righe rapide da capire e provare immediatamente.

2.       Ho smesso di ricevere correzioni sul mio italiano parecchio tempo fa, tant’è che ho alle spalle una modesta quantità di scritti tra tesine, ricerche, presentazioni, una tesi in ingegneria et similia che mai mi hanno procurato problemi da questo punto di vista.  

3.       Non sono pagato per fare quello che sto facendo, di conseguenza credo sarebbe apprezzabile un po’ più di tolleranza e soprattutto riconoscenza, magari non Vostra, ma quantomeno considerare quella che avrebbe potuto provare chi avrebbe letto l’articolo, e che in questo modo evidentemente non lo leggerà. Del resto non mi sarei disturbato a scrivere un articolo se su Google si trovasse qualcosa di interessante digitando “NVelocity ASP.NET”.  

Voglio poi fare una breve divagazione relativa al blog. Mi è successo di ricevere feedback spiacevoli da parte di chi probabilmente sta leggendo questo messaggio, ed in particolare ad un post in cui, avendo tradotto una guida ad un componente molto utilizzato, pensavo di fare un piacere a chi avesse qualche difficoltà con il dialetto d’oltremanica.

Mi piacerebbe che ci si potesse astenere da questi commenti poiché il blog è personale, e indipendentemente dalle opinioni individuali, penso ognuno possa scrivere quello che vuole purché relativo al contesto in cui il blog stesso si trova. Del resto credo che anche i commenti dovrebbero essere inerenti al contesto del blog, ed in fondo nessuno è costretto a leggere dei post che non vuole leggere, e nemmeno dovrebbe lamentarsi perché scarica i post da una connessione lenta ed i post più lunghi gli intasano la connessione.  

Non ho interesse a pubblicare un articolo in presenza di questa a mio parere ingiustificata intransigenza. Detto questo vi porgo  

Distinti saluti.  

Cordialmente, Simone Busoli.
  • Risposta dalla redazione (Marco Barzaghi)
L'articolo credo stia bene dove è stato pubblicato poichè non è questo lo spirito di chi ci vuole offrire la sua collaborazione. Grazie per avercelo inviato ma non possiamo pubblicarlo perchè non idoneo agli standard delle nostre pubblicazioni.

M.rkino

--
Marco Barzaghi - [MVP - MCP]
http://mvp.support.microsoft.com - http://italy.mvps.org UGIDotNet - User Group Italiano .NET, http://www.ugidotnet.org Read my WebLog: http://blogs.ugidotnet.org/markino
  • Mia risposta alla redazione
Io direi piuttosto che non è questo lo spirito di chi dovrebbe accettare delle collaborazioni.
Non voglio assolutamente fare della polemica sterile, e mi scuso se dalla mia precedente email il tono poteva far pensare tutt'altro, ma credo che chi ha dato i suoi feedback al mio articolo e chi parla dello standard delle pubblicazioni di UgiDotNet dovrebbe innanzitutto assicurarsi che tutti i suggerimenti in merito ad eventuali correzioni da portare all'articolo che vi ho inviato siano già state applicate alle passate pubblicazioni di UgiDotNet, cosa che a mio parere è tutt'altro che vera. Da qui la mia reazione ai feedback di Lorenzo Barbieri.

Distinti saluti, Simone Busoli.
  • Risposta di Andrea Saltarello
Simone, mi "intrometto" in questa discussione poichè gradirei fare chiarezza (senza polemica alcuna) in merito ad alcune tue affermazioni. Innanzitutto, concordo sulla natura "indipendente" del blog. Il blog è una area liberamente a disposizione di ogni socio UGIdotNET: ciò significa che
*chiunque* è *ovviamente* autorizzato a farne l'uso che preferisce, rimandando al (nonchè "sperando nel") buon senso di ognuno di noi. In questo contento, però, il termine "chiunque" si rivolge tanto a chi sul blog scrive, quanto a chi commenta. Ergo, mi spiace che tu ritenga di aver ricevuto commenti sgradevoli, ma questo è "normale" in uno scenario dove vige la libertà d'espressione. Leggendo tra i commenti di questo post:
http://blogs.ugidotnet.org/pape/archive/2005/12/28/iPodNano_plays_videos.aspx
Ne troverai uno nel quale mi viene attribuito l'epiteto di "pezzente": per quanto non possa certo dire di esserne felice, non ne ho effettuato la "moderazione" poichè non "volgarmente offensivo" e perchè accetto anche il parere di "efssdfs". Ulteriore precisazione: lo staff UGIdotNET *non* usa il blog come strumento ufficiale di comunicazione, quindi i commenti ricevuti ai tuoi post da uno dei suoi membri vanno intesi come personali, e non espressione della Associazione (salvo ove precisato in forma *esplicita*).

Vorrei inoltre soffermarmi su alcune tue affermazioni, citandole e
commentandole:

>Il linguaggio è quello più immediato possibile, non sto scrivendo una
>KB di Microsoft;
Parzialmente inesatto: i contenuti tecnici pubblicati sul sito UGIdotNET (nonchè di ASPItalia, per rimanere in ambito italiano) appaiono nella documentazione tecnica di Visual Studio 2005: ergo, tra i risultati di una ricerca effettuata mediante la funzione di "help on line". Pensiamo che questa sia una occasione "importante" per offrire agli autori dei suddetti contenuti un livello di visibilità difficilmente ottenibile con altre forme di pubblicazione. Da qualche settimana ciò non avviene poichè stiamo ultimando la firma degli accordi legali. Considerato che:
- in qualità di rappresentate legale della Associazione sono civilmente e penalmente responsabile "di e per" quei contenuti
- far apparire in VS2005 contenuti di livello e qualità non paragonabile a quelli cui gli utenti sono avvezzi non è certo una buona "pubblicità" nè per l'autore, nè per l'Associazione tutta
- l'Associazione è no-profit e basata su attività volontaria degli associati Potrai capire che riteniamo (o "ritengo", se preferisci, visto che sono il responsabile ultimo) preferibile non fare brutte figure, oltretutto... "a gratis". Abbiamo provato a codificare le nostre idee inerenti le regole sulla quali basare i contenuti pubblicabili sul sito nella "famigerata"
pagina "Collaborare":
http://www.ugidotnet.org/partners/collaboration.aspx
E, fortunatamente, posso contare sul contributo: fattivo, esemplare e
*gratuito* di persone come: Aldo, Lorenzo, Marco, Pierre (in rigoroso ordine
alfabetico) che leggono *da anni* *ogni* contributo cercando di contribuire a renderlo conforme allo stile UGIdotNET. Colgo quindi l'occasione per ringraziarli nuovamente per quanto facciano per l'Associazione.

>Non deve essere un trattato sull'argomento, ma due righe rapide da
>capire e provare immediatamente.
Piccola precisazione: nel gergo UGIdotNET, un contenuto che rispetti questa tua definizione si chiama "tip" e non "articolo"

>Ho smesso di ricevere correzioni sul mio italiano parecchio tempo fa,
>tant'è che ho alle spalle una modesta quantità di scritti tra tesine,
>ricerche, presentazioni, una tesi in ingegneria et similia che mai mi
>hanno procurato problemi da questo punto di vista.
Anche io ho *qualche* scritto alle spalle, sia in lingua italiana sia in lingua inglese. Ciò nonostante, non dubito del fatto che *anche* questa mia mail contenga degli strafalcioni, e se qualcuno dovesse farmeli notare "penso" (e sottolineo "penso", perchè di certo non posso esserne sicuro) che sarei feice di poter migliorare la qualità della mia scrittura. Per fare un altro esempio, "penso" che ci siano strafalcioni anche nella tesi (che, per la precisione, non ho letto) di Lorenzo, e penso che se ne fosse stato conscio prima della pubblicazione sarebbe stato ben felice di rimuoverli per arrivare ad un risultato migliore. In poche parole, un consiglio non è necessariamente una critica :-)

>Non sono pagato per fare quello che sto facendo, di conseguenza credo
>sarebbe apprezzabile un po' più di tolleranza e soprattutto
>riconoscenza,
Nemmeno "io". Nemmeno "noi", che da oltre 4 anni dedichiamo gratuitamente intere giornate alla Associazione. Sviluppo del sito, revisione dei contenuti, pubblicazione di news, organizzazione ed erogazione di workshop, e molte altre cose. Tutto gratuitamente, senza *alcun* ritorno. Secondo te chi paga (tanto per fare un esempio) i domini DNS di ugidotnet (ugidotnet com net org it e ugiwinfx com net org it)? Vuoi il sugegrimento del pubblico? PRoviamo a guardare l'estratto conto della carta di credito
*personale* di Andrea...

>Voglio poi fare una breve divagazione relativa al blog. Mi è successo
>di ricevere feedback spiacevoli da parte di chi probabilmente sta
>leggendo questo messaggio,
(omissis)
>Mi piacerebbe che ci si potesse astenere da questi commenti poiché il
>blog è personale, e indipendentemente dalle opinioni individuali, penso
>ognuno possa scrivere quello che vuole purché relativo al contesto in
>cui il blog stesso si trova.
Come già scritto precedentemente in questo messaggio, IMVHO la libertà dell'autore del blog ha lo stesso valore di quella di chi commenta i post, quindi non posso concordare con questa affermazione nella sua totalità

>Non ho interesse a pubblicare un articolo in presenza di questa a mio
>parere ingiustificata intransigenza. Detto questo vi porgo
A questo punto, purtroppo, nemmeno noi. E ribadisco: "purtroppo".

In ogni caso, ove fosse di tuo interesse potremmo approfondire questa
discussione sul forum o, ancora meglio, durante il workshop (o nella cena
successiva): sarò retrogrado e romantico, ma guardarsi negli occhi quando si
parla è tutt'altra cosa :-)

Cordialmente,
Andrea
  • Mia risposta aa Andrea Saltarello
Innanzitutto ti ringrazio per la tua “intromissione”. Ti rispondo quotando alcune tue frasi:

>>Non deve essere un trattato sull'argomento, ma due righe rapide da capire e

>>provare immediatamente.

>Piccola precisazione: nel gergo UGIdotNET, un contenuto che rispetti questa

>tua definizione si chiama "tip" e non "articolo"

Non ho mai detto che quello che ho scritto non potesse essere una tip invece che un articolo.

>>Ho smesso di ricevere correzioni sul mio italiano parecchio tempo

>>fa, tant'è che ho alle spalle una modesta quantità di scritti tra tesine,

>>ricerche, presentazioni, una tesi in ingegneria et similia che mai mi hanno

>>procurato problemi da questo punto di vista.

>Anche io ho *qualche* scritto alle spalle, sia in lingua italiana sia in

>lingua inglese. Ciò nonostante, non dubito del fatto che *anche* questa mia

>mail contenga degli strafalcioni, e se qualcuno dovesse farmeli notare

>"penso" (e sottolineo "penso", perchè di certo non posso esserne sicuro) che

>sarei felice di poter migliorare la qualità della mia scrittura. Per fare un

>altro esempio, "penso" che ci siano strafalcioni anche nella tesi (che, per

>la precisione, non ho letto) di Lorenzo, e penso che se ne fosse stato

>conscio prima della pubblicazione sarebbe stato ben felice di rimuoverli per

>arrivare ad un risultato migliore. In poche parole, un consiglio non è

>necessariamente una critica :-)

È ovvio che ogni cosa può essere migliorata, come pure è ovvio che in qualsiasi scritto ci possano essere degli errori, ma credo anche che il tipo di correzioni che ho ricevuto siano abbastanza fuori luogo, quantomeno per quanto riguarda la forma.

>>Non sono pagato per fare quello che sto facendo, di conseguenza

>>credo sarebbe apprezzabile un po' più di tolleranza e soprattutto

>>riconoscenza,

>Nemmeno "io". Nemmeno "noi", che da oltre 4 anni dedichiamo gratuitamente

>intere giornate alla Associazione. Sviluppo del sito, revisione dei

>contenuti, pubblicazione di news, organizzazione ed erogazione di workshop,

>e molte altre cose. Tutto gratuitamente, senza *alcun* ritorno. Secondo te

>chi paga (tanto per fare un esempio) i domini DNS di ugidotnet (ugidotnet

>com net org it e ugiwinfx com net org it)? Vuoi il sugegrimento del

>pubblico? PRoviamo a guardare l'estratto conto della carta di credito

>*personale* di Andrea...

Infatti non credo che nel momento in cui qualcuno di “voi” avesse intenzione di pubblicare qualcosa riceverebbe una revisione così marcata.

Inoltre il fatto che “voi” collaboriate gratuitamente ad un’associazione che per sua natura ha visibilità internazionale non significa che altri non facciano lo stesso ma in altre forme.

>>Voglio poi fare una breve divagazione relativa al blog. Mi è successo di

>>ricevere feedback spiacevoli da parte di chi probabilmente sta leggendo

>>questo messaggio,

>(omissis)

>>Mi piacerebbe che ci si potesse astenere da questi commenti poiché il blog

>>è

>>personale, e indipendentemente dalle opinioni individuali, penso ognuno

>>possa scrivere quello che vuole purché relativo al contesto in cui il blog

>>stesso si trova.

>Come già scritto precedentemente in questo messaggio, IMVHO la libertà

>dell'autore del blog ha lo stesso valore di quella di chi commenta i post,

>quindi non posso concordare con questa affermazione nella sua totalità

Senza dubbio vero, ma allora qualcuno dovrebbe aver bene presente questo concetto ed accettare sia la libertà di chi scrive, sia quella di chi commenta, e non solo la seconda, altrimenti diventa un po’ troppo comodo a mio parere.

>>Non ho interesse a pubblicare un articolo in presenza di questa a mio

>>parere

>>ingiustificata intransigenza. Detto questo vi porgo

>A questo punto, purtroppo, nemmeno noi. E ribadisco: "purtroppo".

>In ogni caso, ove fosse di tuo interesse potremmo approfondire questa

>discussione sul forum o, ancora meglio, durante il workshop (o nella cena

>successiva): sarò retrogrado e romantico, ma guardarsi negli occhi quando si

>parla è tutt'altra cosa :-)

Purtroppo credo che non sarà possibile parlarne di persona, ma se dovesse succedere sul forum sarei ben lieto di approfondire la conversazione.

>Cordialmente,

>Andrea

Ti ringrazio. Simone
posted on giovedì 19 gennaio 2006 16:18 Print
News

Scopri CS2, il mio progetto universitario per l'indicizzazione e la ricerca di codice sorgente personale costruito su Lucene.Net.

Windows Developer Power Tools

Potete trovare il mio progetto BusyBoxDotNet nel libro Windows Developer Power Tools, pubblicato da O'Reilly, per il quale ho scritto l'intero capito dedicato.

Sono stato nominato dVP 2008, un riconoscimento per l'apporto fornito alla comunità del progetto db4o.