<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Diego Lunadei - Tech Blog</title>
        <link>http://blogs.ugidotnet.org/dagrandesarounmvp/Default.aspx</link>
        <description>Sbagliare è umano, ma per incasinare veramente le cose ci vuole un computer... </description>
        <language>it-IT</language>
        <copyright>Diego Lunadei</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <image>
            <title>Diego Lunadei - Tech Blog</title>
            <url>http://blogs.ugidotnet.org/images/RSS2Image.gif</url>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>L’algoritmo di Berger scritto in Vb.Net</title>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2012/04/13/lalgoritmo-di-berger-scritto-in-vb.net.aspx</link>
            <description>L’algoritmo di Berger, ideato dallo scacchista austriaco Johann Berger , è un metodo procedurale per stilare un calendario (diviso in giornate) di un torneo sportivo svolto con il sistema del “girone all’italiana ” composto da un qualsiasi numero di concorrenti o squadre.&lt;br /&gt;&lt;br /&gt;

Ecco la traduzione in Vb.Net:&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
Private Function CreaCalendario(Squadre() As String) As String&lt;br /&gt;
 Dim buffer As String = ""&lt;br /&gt;
 Dim numero_squadre As Integer = Squadre.Length&lt;br /&gt;
 Dim giornate As Integer = numero_squadre - 1&lt;br /&gt;
 Dim casa(0) As String&lt;br /&gt;
 Dim trasferta(0) As String&lt;br /&gt;
 Array.Resize(casa, numero_squadre / 2)&lt;br /&gt;
 Array.Resize(trasferta, numero_squadre / 2)&lt;br /&gt;
 For i As Integer = 0 To (numero_squadre / 2) - 1&lt;br /&gt;
 casa(i) = Squadre(i)&lt;br /&gt;
 trasferta(i) = Squadre(numero_squadre - 1 - i)&lt;br /&gt;
 Next&lt;br /&gt;
 For i As Integer = 0 To giornate - 1&lt;br /&gt;
 buffer &amp;amp;= "Giornata " &amp;amp; i + 1 &amp;amp; "&lt;br /&gt;"&lt;br /&gt;
 If i Mod 2 = 0 Then&lt;br /&gt;
 For j As Integer = 0 To (numero_squadre / 2) - 1&lt;br /&gt;
 buffer &amp;amp;= j + 1 &amp;amp; " " &amp;amp; trasferta(j) &amp;amp; " - " &amp;amp; casa(j) &amp;amp; ""&lt;br /&gt;
 Next&lt;br /&gt;
 Else&lt;br /&gt;
 For j As Integer = 0 To (numero_squadre / 2) - 1&lt;br /&gt;
 buffer &amp;amp;= j + 1 &amp;amp; " " &amp;amp; casa(j) &amp;amp; " - " &amp;amp; trasferta(j) &amp;amp; ""&lt;br /&gt;
 Next&lt;br /&gt;
 End If&lt;br /&gt;
 Dim Pivot As String = casa(0)&lt;br /&gt;
 Dim Riporto As String = trasferta(trasferta.Length - 1)&lt;br /&gt;
 Array.ConstrainedCopy(trasferta, 0, trasferta, 1, trasferta.Length - 1)&lt;br /&gt;
 trasferta(0) = casa(1)&lt;br /&gt;
 Array.ConstrainedCopy(casa, 1, casa, 0, casa.Length - 1)&lt;br /&gt;
 casa(casa.Length - 1) = Riporto&lt;br /&gt;
 casa(0) = Pivot&lt;br /&gt;
 Next&lt;br /&gt;
 Return buffer&lt;br /&gt;
End Function&lt;/code&gt;&lt;img src="http://blogs.ugidotnet.org/dagrandesarounmvp/aggbug/100948.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Diego Lunadei</dc:creator>
            <guid>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2012/04/13/lalgoritmo-di-berger-scritto-in-vb.net.aspx</guid>
            <pubDate>Fri, 13 Apr 2012 19:54:11 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2012/04/13/lalgoritmo-di-berger-scritto-in-vb.net.aspx#feedback</comments>
            <slash:comments>2652</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dagrandesarounmvp/comments/commentRss/100948.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dagrandesarounmvp/services/trackbacks/100948.aspx</trackback:ping>
        </item>
        <item>
            <title>Luna Data Layer Code Generator for Vb.Net</title>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2012/03/15/luna-data-layer-code-generator-for-vb.net.aspx</link>
            <description>Luna è un generatore di codice automatico per agevolare e standardizzare la scrittura delle classi che si occupano del salvataggio dei dati di una applicazione.&lt;br /&gt;&lt;br /&gt;Il codice viene generato in linguaggio VB.Net (il codice in C# verrà implementato a breve) e può essere utilizzato sia in applicazioni Desktop che Web.&lt;br /&gt;&lt;br /&gt;

Tutto nasce dall' esigenza di scrivere in maniera ottimale e facilmente gestibile la parte più noiosa e ripetitiva di accesso ai dati, mantenendo uno standard facilmente comprensibile. &lt;br /&gt;&lt;br /&gt;Non si deve incorporare nessun oggetto nel proprio progetto, e tutto il codice generato è facilmente modificabile o customizzabile dallo sviluppatore.

&lt;a name="COME"&gt;&lt;h3&gt;&lt;img src="http://www.diegolunadei.it/luna/bullet.png" align="ABSMIDDLE" /&gt; COME FUNZIONA?&lt;/h3&gt;&lt;/a&gt;

Innanzitutto è necessario che la base dati dell'applicazione sia stata studiata e realizzata. Una volta fatto ciò, il database creato viene dato in input a Luna che si occuperà dell'effettiva creazione delle classi.&lt;br /&gt;&lt;br /&gt;

I componenti principali di Luna sono:

&lt;ul&gt;

&lt;li&gt;Struttura&lt;/li&gt;

&lt;li&gt;Interprete&lt;/li&gt;

&lt;li&gt;Convertitore&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;Struttura&lt;/h4&gt;

Luna ha una sua struttura proprietaria logica di tabelle, campi e relazioni con cui mappare in memoria un database esistente in un formato standardizzato.

&lt;h4&gt;Interprete&lt;/h4&gt;

E' presente un interprete specifico per ogni tipologia di base dati, quindi è virtualmente possibile supportare ogni tipo di base dati. L'interprete si occupa di collegarsi al database indicato, leggere la struttura di tabelle e relazioni e creare in memoria una struttura logica che lo ricalca 1 a 1 utilizzando le classi campo, tabella e relazione di Luna.

&lt;h4&gt;Convertitore&lt;/h4&gt;

Una volta che la struttura di database è stata slegata dall'origine dati fisica, il convertitore si occupa di creare il codice che serve per interfacciarsi completamente con la base dati.

&lt;a name="COME"&gt;&lt;h3&gt;&lt;img src="http://www.diegolunadei.it/luna/bullet.png" align="ABSMIDDLE" /&gt; SORGENTI SUPPORTATE&lt;/h3&gt;&lt;/a&gt;

Luna al momento supporta i database di tipo ACCESS (mdb e accdb) e SQL SERVER. Luna supporta inoltre un suo formato proprietario Luna Data Schema (*.lds). Ogni volta che si esegue una generazione di un qualsiasi progetto, nella cartella dei file generati da Luna e' presente il relativo file lds che permette di riaprire la struttura creata in maniera svincolata dal database originale.

&lt;a name="ESEMPIO"&gt;&lt;h3&gt;&lt;img src="http://www.diegolunadei.it/luna/bullet.png" align="ABSMIDDLE" /&gt; ESEMPIO PRATICO&lt;/h3&gt;&lt;/a&gt;

Luna crea il codice delle classi che rappresentano ogni tabella, il codice delle classi DAO che si occupano di interfacciare con il database gli oggetti logici e il codice SQL che potrebbe servire a replicare la struttura della base dati in un altro storage.&lt;br /&gt;&lt;br /&gt; 

Veniamo alla pratica. Dunque iniziamo da una semplice base dati di prova contenente le tabelle Clienti e Telefoni collegate tra loro e cosi strutturate:&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;img src="http://www.diegolunadei.it/luna/1.png" width="300" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;

&lt;b&gt;Step 1&lt;/b&gt;&lt;br /&gt;

In questa schermata è possibile selezionare l'origine dati su cui si andrà a lavorare. L'opzione Load View permette di utilizzare come sorgente per le classi non solo le tabelle ma anche le eventuali viste contenute all'interno del Database.&lt;br /&gt;&lt;br /&gt;

Nel nostro esempio dopo aver selezionato il tipo Database access e scelto il file, clicchiamo sul pulsante &lt;b&gt;"Load DB"&lt;/b&gt;; &lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;img src="http://www.diegolunadei.it/luna/2.png" width="300" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;

&lt;b&gt;Step 2&lt;/b&gt;&lt;br /&gt;

Nella schermata successiva ci verranno presentate tutte le tabelle [TABLE] o le eventuali viste [VIEW] che sono state trovate nella fonte dati selezionata.  Per selezionare le tabelle che vogliamo generare basta mettere un segno di spunta sulla relativa casella. &lt;br /&gt;Luna supporta la Pluralization, è sufficiente cambiare il nome della classe generata facendo doppio click sul relativo nodo nell'albero di destra. In questo esempio per la tabella Customers verrà generata la class Customer e cosi via. Selezioniamo tutto, cambiamo i nomi e clicchiamo sul pulsante &lt;b&gt;"Create Code"&lt;/b&gt;;&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;img src="http://www.diegolunadei.it/luna/3.png" width="300" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;



&lt;a name="COSAGENERA"&gt;&lt;b&gt;Cosa viene generato?&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;

Innanzitutto Luna genera tre classi base, &lt;b&gt;LunaBaseClass&lt;/b&gt; da cui ereditano tutte le altre classi create, &lt;b&gt;LunaBaseClassEntity&lt;/b&gt; da cui ereditano tutte le altre classi entity e &lt;b&gt;LunaBaseClassDAO&lt;/b&gt; da cui ereditano tutte le altre classi DAO. Inoltre viene creata una classe &lt;b&gt;LunaSearchParameter&lt;/b&gt; di cui vedremo in seguito il funzionamento.&lt;br /&gt;&lt;br /&gt;

Dopodiche viene creata per ogni tabella una classe entity, una classe partial e una classe di accesso ai dati (DAO)&lt;br /&gt;&lt;br /&gt;

&lt;b&gt;Classe Entity&lt;/b&gt;&lt;br /&gt;

La classe generata è un contenitore vuoto, che si integra con la relativa classe Partial e questo permette di accedere a tutti i metodi e le proprieta della classe Partial relativa, cosi organizzata:&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;

#Region "Logic Field"&lt;br /&gt;

(vuota)&lt;br /&gt;

#End Region&lt;br /&gt;

&lt;br /&gt;

#Region "Method"&lt;br /&gt;

(vuota)&lt;br /&gt;

#End Region&lt;br /&gt;

&lt;/code&gt;

&lt;br /&gt;

Viene poi creata una Classe Partial &lt;i&gt;Tabella&lt;/i&gt; che eredita da &lt;b&gt;LunaBaseClassEntity&lt;/b&gt; e che si integra con la relativa classe Entity, cosi organizzata:&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;

#Region "Author"&lt;br /&gt;

...&lt;br /&gt;

End Region &lt;br /&gt;

&lt;br /&gt;

#Region "Database Field Map"&lt;br /&gt;

(property con i campi della tabella gia pronti per la serializzazione opzionale)&lt;br /&gt;

End Region &lt;br /&gt;

&lt;br /&gt;

#Region "Method"&lt;br /&gt;

Read(Id) as &lt;i&gt;Tabella&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;

Save(&lt;i&gt;Tabella&lt;/i&gt;) as Integer (torna l'id inserito nel database)&lt;br /&gt;&lt;br /&gt;

SaveCascade(&lt;i&gt;Tabella&lt;/i&gt;) as Integer (torna l'id inserito nel database)&lt;br /&gt;&lt;br /&gt;

#End Region&lt;br /&gt;&lt;br /&gt;

#Region "Embedded Class"&lt;br /&gt;

(property o liste di oggetti relazionate a questa classe)&lt;br /&gt;

#End Region&lt;br /&gt;&lt;br /&gt;

&lt;/code&gt;

Viene infine creata una Classe &lt;i&gt;Tabella&lt;/i&gt;DAO che eredita da &lt;b&gt;LunaBaseClassDAO&lt;/b&gt; con i seguenti metodi:&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;

Read(Id) as &lt;i&gt;Tabella&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;

Save(&lt;i&gt;Tabella&lt;/i&gt;) as Integer (torna l'id inserito nel database)&lt;br /&gt;&lt;br /&gt;

SaveCascade(&lt;i&gt;Tabella&lt;/i&gt;) as Integer (torna l'id inserito nel database)&lt;br /&gt;&lt;br /&gt;

Delete(Id)&lt;br /&gt;&lt;br /&gt;

Delete(&lt;i&gt;Tabella&lt;/i&gt;)&lt;br /&gt;&lt;br /&gt;

GetAll()&lt;br /&gt;&lt;br /&gt;

Find()&lt;br /&gt;&lt;br /&gt;

ReadSerialize()&lt;br /&gt;&lt;br /&gt;

SaveSerialize()&lt;br /&gt;&lt;br /&gt;

&lt;/code&gt;



Nell'esempio specifico: 

&lt;ul&gt;

&lt;li&gt;Customer; mappatura della tabella Customers eredita da LunaBaseClassEntity

&lt;/li&gt;&lt;li&gt;Phone; mappatura della tabella Phones eredita da LunaBaseClassEntity

&lt;/li&gt;&lt;li&gt;CustomerGroup; mappatura della tabella CustomerGroups eredita da LunaBaseClassEntity

&lt;/li&gt;&lt;li&gt;CustomersDAO; metodi di lettura, salvataggio, ricerca, lista ed eliminazione della classe Customer eredita da LunaBaseClassDAO

&lt;/li&gt;&lt;li&gt;PhonesDAO; metodi di lettura, salvataggio, ricerca, lista ed eliminazione della classe Phone eredita da LunaBaseClassDAO

&lt;/li&gt;&lt;li&gt;CustomerGroupsDAO; metodi di lettura, salvataggio, ricerca, lista ed eliminazione della classe CustomerGroup eredita da LunaBaseClassDAO

&lt;/li&gt;&lt;/ul&gt; &lt;br /&gt;

&lt;center&gt;&lt;img src="http://www.diegolunadei.it/luna/DiagrammaClassi.png" width="300" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;





Analizziamo i vari metodi e proprietà generati:&lt;br /&gt;&lt;br /&gt;



&lt;b&gt;Classi entity&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;

Read(ID) - Questo metodo permette di leggere dal db un determinato oggetto in base al suo Id; all'interno viene istanziata la sua relativa classe DAO ed effettuate tutte le letture;&lt;br /&gt;

Save() - Questo metodo si occupa della persistenza dei dati, all'interno viene istanziata la relativa classe DAO che effettua il salvataggio. E' importante sapere che viene gestita l'effettiva modifica, infatti saranno effettuati solo i salvataggi degli oggetti nuovi o degli oggetti realmente modificati, per evitare un uso inutile del DB.&lt;br /&gt;

SaveCascade() - Questo metodo si occupa di salvare l'oggetto e tutti gli oggetti figli relativi;&lt;br /&gt;

&lt;br /&gt;

&lt;b&gt;Classi DAO&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;

Read, Save e SaveCascade, sono gli stessi della classe entity. In più oltre ai metodi di cancellazione (Delete) abbiamo i metodi Find e GetAll che si occupano delle ricerche e ritornano una List(of Tabella) tipizzata. &lt;br /&gt; Infine ci sono i metodi ReadSerialize e SaveSerialize che si occupano di leggere o scrivere su file una copia XML dell'oggetto che gli viene passato. &lt;br /&gt;&lt;br /&gt;



&lt;center&gt;&lt;img src="http://www.diegolunadei.it/luna/4.png" width="300" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;

&lt;a name="COMEUSARLO"&gt;&lt;b&gt;E ora che abbiamo il codice?&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;

Ora la cosa piu semplice è cliccare sul pulsante &lt;b&gt;Save&lt;/b&gt; e selezionare una cartella dove Luna salverà tutti i file che sono stati generati.&lt;br /&gt;

&lt;br /&gt;

Poi avviamo Visual Studio e creiamo un progetto di prova di tipo &lt;b&gt;Applicazione Windows Form&lt;/b&gt; e poi aggiungiamo nella stessa soluzione un progetto di tipo &lt;b&gt;Libreria di Classi&lt;/b&gt;. &lt;br /&gt;

Innanzitutto nel progetto &lt;b&gt;Windows Form&lt;/b&gt; aggiungiamo i riferimenti al progetto &lt;b&gt;Libreria di classi&lt;/b&gt;. Nel progetto &lt;b&gt;Libreria di classi&lt;/b&gt; clicchiamo su Aggiungi elemento esistente, selezioniamo tutti i file che sono stati salvati da Luna e il gioco è fatto. Oppure li trasciniamo direttamente dentro da Esplora Risorse con il drag and drop.&lt;br /&gt;&lt;br /&gt;

&lt;b&gt;IMPORTANTE!!! Scrivete tutti i vostri metodi logici o personali e le proprietà custom nelle classi Entity, in modo che se dovete rigenerare il Database con Luna, non perderete nulla del codice aggiunto.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;img src="http://www.diegolunadei.it/luna/5.png" width="300" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;

&lt;a name="CONNESSIONE"&gt;&lt;b&gt;Connessione al db&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;

La classe &lt;b&gt;LunaBaseClassDAO&lt;/b&gt; da cui ereditano tutte le classi DAO ha tre costruttori della New:

&lt;ul&gt;

&lt;li&gt;&lt;b&gt;New()&lt;/b&gt; da per scontato che ci sia una string di nome &lt;b&gt;ConnectionString&lt;/b&gt; nei settings del progetto con la relativa stringa di connessione e si occupa da sola di crearsi la connessione (comodo per le Web Application);

&lt;/li&gt;&lt;li&gt;&lt;b&gt;New(Connection)&lt;/b&gt; accetta in input un oggetto di tipo connection;

&lt;/li&gt;&lt;li&gt;&lt;b&gt;New(ConnectionString)&lt;/b&gt; accetta in input una ConnectionString, passando una stringa vuota la BaseClass non apre la connessione(utile per i soli metodi di serializzazione);



&lt;/li&gt;&lt;/ul&gt; La connessione è di tipo &lt;b&gt;Shared&lt;/b&gt; quindi se in una procedura dovete istanziare vari oggetti e non volete usare la connection string vi basterà usare una sola dichiarazione New in cui specificate la connessione, nelle altre non sara' necessario.&lt;br /&gt;&lt;br /&gt;

Ovviamente nelle applicazioni desktop o con Connessione permanente basterà commentare le chiamate nella New() della LunaBaseClassDAO e commentare la dichiarazione della connessione _Cn rendendola pubblica, e tutto continuerà a funzionare.&lt;br /&gt;&lt;br /&gt;

&lt;b&gt;Importante!&lt;/b&gt; Luna non si occupa di chiudere la connessione al Database. La funziona di chiusura viene inserita in ogni classe DAO ma non viene chiamata per lasciare allo sviluppatore la decisione su come gestire e quando chiudere la connessione.&lt;br /&gt;&lt;br /&gt;

&lt;a name="INSERIMENTO"&gt;&lt;b&gt;Save&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Per fare un inserimento nel nostro caso di un Cliente basterà scrivere:&lt;br /&gt;

&lt;br /&gt;

&lt;code&gt;



   Dim Cust As New Customer&lt;br /&gt;&lt;br /&gt;



	Cust.CustomerName = "Homer Simpson"&lt;br /&gt;

	Cust.Address = "Evergreen Terrace, 740"&lt;br /&gt;&lt;br /&gt;



	Dim IdInserted As Integer = Cust.Save&lt;br /&gt;

	If IdInserted = 0 Then MessageBox.Show("Error")&lt;br /&gt;&lt;br /&gt;



&lt;/code&gt;



oppure &lt;br /&gt;&lt;br /&gt;

&lt;code&gt;



   Dim Cust As New Customer&lt;br /&gt;&lt;br /&gt;



	Cust.CustomerName = "Homer Simpson"&lt;br /&gt;

	Cust.Address = "Evergreen Terrace, 740"&lt;br /&gt;&lt;br /&gt;

	

	Dim MgrCust as new CustomersDAO&lt;br /&gt;&lt;br /&gt;



	Dim IdInserted As Integer = MgrCust.Save(Cust)&lt;br /&gt;

	If IdInserted = 0 Then MessageBox.Show("Error")&lt;br /&gt;&lt;br /&gt;



&lt;/code&gt;

&lt;a name="INSERIMENTO"&gt;&lt;b&gt;SaveCascade&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Per fare un inserimento nel nostro caso di un Cliente con due telefoni basterà scrivere:&lt;br /&gt;

&lt;br /&gt;

&lt;code&gt;



   Dim Cust As New Customer&lt;br /&gt;&lt;br /&gt;



	Cust.CustomerName = "Homer Simpson"&lt;br /&gt;

	Cust.Address = "Evergreen Terrace, 740"&lt;br /&gt;&lt;br /&gt;



	Dim Phone1 As New Phone&lt;br /&gt;

	Phone1.PhoneNumber = "555.123"&lt;br /&gt;&lt;br /&gt;



	Cust.ListPhone.Add(Phone1)&lt;br /&gt;&lt;br /&gt;



	Dim Phone2 As New Phone&lt;br /&gt;

	Phone2.PhoneNumber = "555.456"&lt;br /&gt;&lt;br /&gt;



	Cust.ListPhone.Add(Phone2)&lt;br /&gt;&lt;br /&gt;



	Dim Group As New CustomerGroup&lt;br /&gt;

	Group.Read(2)&lt;br /&gt;&lt;br /&gt;



	Cust.CustomerGroup = Group&lt;br /&gt;&lt;br /&gt;



	Dim IdInserted As Integer = Cust.SaveCascade&lt;br /&gt;

	If IdInserted = 0 Then MessageBox.Show("Error")&lt;br /&gt;&lt;br /&gt;



&lt;/code&gt;



Tutti i metodi Save e SaveCascade ritornano l'Id appena inserito nel Database. Nell' esempio sopra il &lt;b&gt;SaveCascade&lt;/b&gt; si occupa di salvare il nuovo Customer e di salvare i relativi oggetti Phone.&lt;br /&gt;&lt;br /&gt;

&lt;a name="RICERCA"&gt;&lt;b&gt;Ricerca&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Per il cerca Luna crea in ogni classe DAO due metodi; &lt;br /&gt;&lt;br /&gt;il metodo &lt;b&gt;GetAll&lt;/b&gt; che torna una &lt;b&gt;List (Of &lt;i&gt;ClasseOggetto&lt;/i&gt;)&lt;/b&gt; di tutti gli oggetti di quella classe, a cui è possibile passare eventualmente un criterio di ricerca. &lt;br /&gt;&lt;br /&gt;Il metodo &lt;b&gt;Find&lt;/b&gt; invece ritorna una &lt;b&gt;List (Of &lt;i&gt;ClasseOggetto&lt;/i&gt;)&lt;/b&gt; in base a uno o più parametri di ricerca.&lt;br /&gt;&lt;br /&gt;Il metodo si aspetta un Array di parametri e combina la ricerca in base a tutti i parametri che vengono passati. &lt;br /&gt;I parametri sono oggetti di tipo &lt;b&gt;LunaSearchParameter&lt;/b&gt;, vediamo due semplici esempi:&lt;br /&gt;&lt;br /&gt;



&lt;b&gt;Cerchiamo tutti i telefoni di un determinato Customer&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;



'IMPOSTIAMO IL PARAMETRO&lt;br /&gt;

Dim Par as new LunaSearchParameter("CustomerID",1)&lt;br /&gt;&lt;br /&gt;



Dim Mgr as New TelefoniDAO()&lt;br /&gt;

Dim ListPhone as List (Of Phone) = Mgr.Find(Par)&lt;br /&gt;



&lt;/code&gt;

&lt;br /&gt;

&lt;b&gt;Cerchiamo tutti i telefoni di un determinato Customer che iniziano per 06&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;



'IMPOSTIAMO IL PRIMO PARAMETRO NEL COSTRUTTORE&lt;br /&gt;

Dim Par as new LunaSearchParameter()&lt;br /&gt;

Par.FieldName = "CustomerID"&lt;br /&gt;

Par.Value = 1&lt;br /&gt;&lt;br /&gt;

'IMPOSTIAMO IL SECONDO PARAMETRO IN MODO ESPLICITO&lt;br /&gt;

Dim Par2 as new LunaSearchParameter("PhoneNumber","06%","LIKE")&lt;br /&gt;&lt;br /&gt;



Dim Mgr as New TelefoniDAO()&lt;br /&gt;

Dim ListPhone as List (Of Phone) = Mgr.Find(Par,Par2)&lt;br /&gt;



&lt;/code&gt;



&lt;br /&gt;&lt;br /&gt;

&lt;a name="CLASSIFIGLIE"&gt;&lt;b&gt;Classi figlie&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

In ogni classe vengono creati gli accessi agli oggetti delle classi figlie. In ogni caso si tratta di caricamenti pigri, ossia che vengono effettuati solo se effettivamente richiamati.&lt;br /&gt;&lt;br /&gt;

In caso di relazioni tra le classi di tipo &lt;b&gt;1 a 1&lt;/b&gt; viene creato in ogni ClassePadre una property di tipo ClasseFiglio.&lt;br /&gt;&lt;br /&gt;

In caso di relazioni tra le classi di tipo &lt;b&gt;1 a N&lt;/b&gt; viene creata in ogni ClassePadre una List Of (ClasseFiglio).&lt;br /&gt;&lt;br /&gt;



Sia l'oggetto ClasseFiglio che la Lista di oggetti ClasseFiglio, sono caricati solo nel momento in cui realmente si accede ai metodi.&lt;br /&gt;&lt;br /&gt;

Questo è solo un semplice esempio, capire il funzionamento dei vari metodi creati è banale. &lt;b&gt;La cosa importante è che non è stato necessario scrivere una riga di codice&lt;/b&gt; per interfacciarsi con la base dati.&lt;br /&gt;&lt;br /&gt;



&lt;a name="NOVITA"&gt;&lt;h3&gt;&lt;img src="http://www.diegolunadei.it/luna/bullet.png" align="ABSMIDDLE" /&gt; IMPLEMENTAZIONI PROGRAMMATE&lt;/h3&gt;&lt;/a&gt;

In ordine di importanza:&lt;br /&gt;

&lt;ul&gt;

&lt;li&gt;Ambito e transazioni distribuite

&lt;/li&gt;&lt;li&gt;Le relazioni tra campi vengono lette solo da MS Access, sto scrivendo la parte che le rileva anche da MS Sql Server

&lt;/li&gt;&lt;li&gt;Interprete per DB SQL Compact 4

&lt;/li&gt;&lt;li&gt;Ampliare le informazioni mostrate sulle tabelle caricate dal Database

&lt;/li&gt;&lt;li&gt;Interprete per DB Oracle

&lt;/li&gt;&lt;li&gt;Interprete per DB Orient

&lt;/li&gt;&lt;/ul&gt;

&lt;a name="DOWNLOAD"&gt;&lt;h3&gt;&lt;img src="http://www.diegolunadei.it/luna/bullet.png" align="ABSMIDDLE" /&gt; DOWNLOAD&lt;/h3&gt;&lt;/a&gt;

Luna è opensource e liberamente scaricabile e utilizzabile:

&lt;br /&gt;&lt;br /&gt;

&lt;h3&gt;Codice Sorgente - &lt;a href="http://www.diegolunadei.it/luna/lunasource.rar"&gt;&lt;font color="RED"&gt;http://www.diegolunadei.it/luna/lunasource.rar&lt;/font&gt;&lt;/a&gt;&lt;/h3&gt;



&lt;h3&gt;Package Eseguibile - &lt;a href="http://www.diegolunadei.it/luna/luna.rar"&gt;&lt;font color="RED"&gt;http://www.diegolunadei.it/luna/luna.rar&lt;/font&gt;&lt;/a&gt;&lt;/h3&gt;



&lt;a name="CONCLUSIONI"&gt;&lt;h3&gt;&lt;img src="http://www.diegolunadei.it/luna/bullet.png" align="ABSMIDDLE" /&gt; CONCLUSIONI e RIFERIMENTI&lt;/h3&gt;&lt;/a&gt;

Mi sento di dire solo una cosa, non ho inventato nulla. Luna è semplicemente un tool gratuito che può aiutare lo sviluppatore nella stesura di codice ripetitivo per evitare errori e consentire una standardizzazione e pulizia del codice. &lt;br /&gt;Scrivere codice manutenibile e facile da gestire anche da altri non è una cosa semplice, specie in grandi gruppi di lavoro. Inoltre interfacciarsi con il database per le operazioni standard diventa un operazione banale.&lt;br /&gt;&lt;br /&gt;

Per ogni riferimento, domanda, suggerimento o insulto potete trovarmi qui: &lt;br /&gt;&lt;br /&gt;	

&lt;a href="http://www.diegolunadei.it"&gt;http://www.diegolunadei.it&lt;/a&gt; e qui &lt;a href="mailto:d.lunadei@gmail.com"&gt;d.lunadei@gmail.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Un ultima cosa, Luna è un progetto in continua evoluzione quindi prendete la documentazione di questo tutorial come indicativa del funzionamento generale perchè mantenerla aggiornata è un lavorone. Per vedere cosa effettivamente crea vi consiglio di scaricare il package ed eseguire una generazione. &lt;img src="http://blogs.ugidotnet.org/dagrandesarounmvp/aggbug/100866.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Diego Lunadei</dc:creator>
            <guid>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2012/03/15/luna-data-layer-code-generator-for-vb.net.aspx</guid>
            <pubDate>Thu, 15 Mar 2012 21:30:03 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2012/03/15/luna-data-layer-code-generator-for-vb.net.aspx#feedback</comments>
            <slash:comments>1663</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dagrandesarounmvp/comments/commentRss/100866.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dagrandesarounmvp/services/trackbacks/100866.aspx</trackback:ping>
        </item>
        <item>
            <title>Luna: Vb.Net Data Layer Code Generator 3.0.12.18</title>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/09/08/luna-vb.net-data-layer-code-generator-3.0.12.18.aspx</link>
            <description>&lt;img src="http://diegolunadei.files.wordpress.com/2011/09/logo2.png" /&gt;Altro rilascio per Luna, versione &lt;b&gt;3.0.12.18&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;

In questa versione una grande modifica permette ora di riaprire un progetto generato in precedenza. Luna serializza la struttura che ha caricato dal db e tutte le varie modifiche fatte ai nomi delle classi e permette di riaprirle ed eventualmente modificarle, senza connettersi di nuovo alla fonte dati originale.
&lt;br /&gt;&lt;br /&gt;
Indubbiamente una grossa comodità. In più un link diretto al canale twitter e al sito ufficiale.
&lt;br /&gt;&lt;br /&gt;
I path per il download sono sempre gli stessi.
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;EXE&lt;/b&gt; – http://www.diegolunadei.it/luna/luna.rar
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;SOURCE CODE&lt;/b&gt; – http://www.diegolunadei.it/luna/lunasource.rar
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;TUTORIAL con ESEMPIO&lt;/b&gt; – http://www.diegolunadei.it/luna&lt;img src="http://blogs.ugidotnet.org/dagrandesarounmvp/aggbug/100331.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Diego Lunadei</dc:creator>
            <guid>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/09/08/luna-vb.net-data-layer-code-generator-3.0.12.18.aspx</guid>
            <pubDate>Thu, 08 Sep 2011 13:46:01 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/09/08/luna-vb.net-data-layer-code-generator-3.0.12.18.aspx#feedback</comments>
            <slash:comments>2605</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dagrandesarounmvp/comments/commentRss/100331.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dagrandesarounmvp/services/trackbacks/100331.aspx</trackback:ping>
        </item>
        <item>
            <title>Luna: Vb.Net Data Layer Code Generator 3.0.9.19</title>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/04/22/luna-vb.net-data-layer-code-generator-3.0.9.19.aspx</link>
            <description>&lt;img src="http://www.diegolunadei.it/luna/DiagrammaClassi.png" width="400/" /&gt;&lt;br /&gt;&lt;br /&gt;

Innanzitutto voglio &lt;b&gt;RINGRAZIARE&lt;/b&gt; tutte le persone che mi scrivono commenti e suggerimenti per migliorare Luna!.&lt;br /&gt;&lt;br /&gt;

Purtroppo il tempo per svilupparlo e' molto meno di quello che sarebbe necessario per metterci tutto quello che serve, comunque lo sviluppo va avanti. &lt;br /&gt;&lt;br /&gt;

Ho rilasciato la versione &lt;b&gt;3.0.9.19&lt;/b&gt; con un bel po di fix e miglioramenti.&lt;br /&gt;&lt;br /&gt;

Nella prossima versione cercherò di includere il supporto alle relazioni di SQL Server (per ora vengono caricate solo da DB Access), il supporto a SQL Compact 4, il metodo di salvataggio in cascata SaveCascade, e il supporto a fonti dati diverse dalle Tabelle(stored procedure ad esempio o viste).
&lt;br /&gt;&lt;br /&gt;
Infine sono cambiati i path per il download:&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Codice Sorgente&lt;/b&gt; - &lt;a href="http://www.diegolunadei.it/luna/lunasource.rar"&gt;http://www.diegolunadei.it/luna/lunasource.rar&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Package Eseguibile&lt;/b&gt; - &lt;a href="http://www.diegolunadei.it/luna/luna.rar"&gt;http://www.diegolunadei.it/luna/luna.rar&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Tutorial con esempio&lt;/b&gt; - &lt;a href="http://www.diegolunadei.it/luna"&gt;http://www.diegolunadei.it/luna&lt;/a&gt;&lt;img src="http://blogs.ugidotnet.org/dagrandesarounmvp/aggbug/99983.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Diego Lunadei</dc:creator>
            <guid>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/04/22/luna-vb.net-data-layer-code-generator-3.0.9.19.aspx</guid>
            <pubDate>Fri, 22 Apr 2011 14:45:28 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/04/22/luna-vb.net-data-layer-code-generator-3.0.9.19.aspx#feedback</comments>
            <slash:comments>2623</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dagrandesarounmvp/comments/commentRss/99983.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dagrandesarounmvp/services/trackbacks/99983.aspx</trackback:ping>
        </item>
        <item>
            <title>Luna: Vb.Net Data Layer Code Generator 3.0.6.18</title>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/04/19/luna-vb.net-data-layer-code-generator-3.0.6.18.aspx</link>
            <description>&lt;img src="http://www.diegolunadei.it/luna/DiagrammaClassi.png" width="400/" /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;img src="http://www.diegolunadei.it/luna/3.png" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;

Ho pubblicato il rilascio 3.0.6.18 di Luna Data Layer Code Generator. In questa versione oltre a qualche novità di contorno la cosa più importante è che ora è supportata la &lt;b&gt;Pluralization&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;

In pratica ora è possibile specificare per ogni tabella il nome della classe che viene generata semplicemente sostituendola tramite l’interfaccia al nome di default che viene associato.&lt;br /&gt;&lt;br /&gt;

Ora sto lavorando al caricamento delle relazioni automatico da database MS SQL SERVER, mentre per DB Access è tutto gia funzionante. Per ogni relazione 1 a 1, 1 a N vengono generati all’interno della relativa classe padre gli oggetti o le liste figlie, con i relativi caricamenti.&lt;br /&gt;&lt;br /&gt;

Nella versione 3.0.7.46 inoltre sarà inserito un metodo di salvataggio in cascata che permetta di salvare l’intera struttura con relativi id collegati ecc ecc in modo da lavorare in memoria con una struttura logica e le strutture collegate senza preoccuparsi della persistenza, il metodo &lt;b&gt;WriteCascade&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;

Per il tutorial completo e l’esempio in questione potete andare all’indirizzo:&lt;br /&gt;&lt;br /&gt;

http://www.diegolunadei.it/luna/index.htm&lt;br /&gt;&lt;br /&gt;&lt;img src="http://blogs.ugidotnet.org/dagrandesarounmvp/aggbug/99966.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Diego Lunadei</dc:creator>
            <guid>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/04/19/luna-vb.net-data-layer-code-generator-3.0.6.18.aspx</guid>
            <pubDate>Tue, 19 Apr 2011 01:15:07 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/04/19/luna-vb.net-data-layer-code-generator-3.0.6.18.aspx#feedback</comments>
            <slash:comments>3049</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dagrandesarounmvp/comments/commentRss/99966.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dagrandesarounmvp/services/trackbacks/99966.aspx</trackback:ping>
        </item>
        <item>
            <title>Luna: Vb.Net Data Layer Code Generator 3.0.4.18</title>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/04/08/luna-vb.net-data-layer-code-generator-3.0.4.18.aspx</link>
            <description>Ho appena pubblicato online una release di &lt;b&gt;Luna&lt;/b&gt; sostanzialmente completa delle funzionalità principali.&lt;br /&gt;&lt;br /&gt;

Allego uno schema delle classi generate in un tipico esempio e uno screenshoot.&lt;br /&gt;&lt;br /&gt;

Ormai è diventato un progetto svago/laboratorio e la cosa di questa versione che mi ha più divertito è stata la creazione della funzione di ricerca parametrica. Ancora è da migliorare e manca qualcosina ma era venuto il momento di fare un nuovo rilascio perche rispetto alla precedente versione sono stati fatti grandi passi avanti.&lt;br /&gt;&lt;br /&gt;

Per il tutorial completo e l’esempio in questione potete andare all’indirizzo:&lt;br /&gt;&lt;br /&gt;

http://www.diegolunadei.it/luna/index.htm&lt;br /&gt;&lt;br /&gt;

Per scaricare la versione 3.0.4.18 di Luna invece potete andare sempre all’indirizzo:&lt;br /&gt;&lt;br /&gt;

http://www.diegolunadei.it/luna&lt;br /&gt;&lt;br /&gt;

&lt;img src="http://www.diegolunadei.it/luna/DiagrammaClassi.png" width="500" /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;img src="http://www.diegolunadei.it/luna/4.png" width="500" /&gt;&lt;img src="http://blogs.ugidotnet.org/dagrandesarounmvp/aggbug/99931.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Diego Lunadei</dc:creator>
            <guid>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/04/08/luna-vb.net-data-layer-code-generator-3.0.4.18.aspx</guid>
            <pubDate>Fri, 08 Apr 2011 02:49:47 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/04/08/luna-vb.net-data-layer-code-generator-3.0.4.18.aspx#feedback</comments>
            <slash:comments>2728</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dagrandesarounmvp/comments/commentRss/99931.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dagrandesarounmvp/services/trackbacks/99931.aspx</trackback:ping>
        </item>
        <item>
            <title>Luna: Vb.net code generator secondo rilascio e mini tutorial</title>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/03/29/luna-vb.net-code-generator-secondo-rilascio-e-mini-tutorial.aspx</link>
            <description>&lt;img src="http://www.diegolunadei.it/luna/3.png" width="450" /&gt;&lt;br /&gt;&lt;br /&gt;

Ho messo online il secondo rilascio di Luna, il generatore di codice che ho ideato io. Per scaricarlo il link è sempre lo stesso:&lt;br /&gt;&lt;br /&gt;

&lt;a href="http://www.diegolunadei.it/luna"&gt;http://www.diegolunadei.it/luna&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Per accedere al tutorial invece si deve andare qui:&lt;br /&gt;&lt;br /&gt;

&lt;a href="http://www.diegolunadei.it/luna/index.htm"&gt;http://www.diegolunadei.it/luna/index.htm&lt;/a&gt;&lt;img src="http://blogs.ugidotnet.org/dagrandesarounmvp/aggbug/99889.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Diego Lunadei</dc:creator>
            <guid>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/03/29/luna-vb.net-code-generator-secondo-rilascio-e-mini-tutorial.aspx</guid>
            <pubDate>Tue, 29 Mar 2011 14:46:34 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/03/29/luna-vb.net-code-generator-secondo-rilascio-e-mini-tutorial.aspx#feedback</comments>
            <slash:comments>2517</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dagrandesarounmvp/comments/commentRss/99889.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dagrandesarounmvp/services/trackbacks/99889.aspx</trackback:ping>
        </item>
        <item>
            <title>LUNA 3.0.1.19356</title>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/03/19/luna-3.0.1.19356.aspx</link>
            <description>&lt;center&gt;&lt;img src="http://diegolunadei.files.wordpress.com/2011/03/luna.png?w=614&amp;amp;h=256" width="400" /&gt;&lt;/center&gt;&lt;br /&gt;Era tanto che non postavo qualcosa sul blog... oggi torno a farlo perche ho pubblicato la prima versione di LUNA.
&lt;br /&gt;&lt;br /&gt;
LUNA è uin generatore di codice che ho scritto io, una recensione piu generica la trovate sul mio sito (http://www.diegolunadei.it).
&lt;br /&gt;&lt;br /&gt;
Di base è la prima versione pubblica... mancano ancora tante cose, e come spesso succede e' partito tutto piu per gioco che per usarlo veramente, anche se ora sinceramente lo uso davvero spesso. 
&lt;br /&gt;&lt;br /&gt;
Mancano ancora la generazione automatica della classi figlie in base alle foreign key ma diciamo che gia cosi mi da una grossa mano. 
&lt;br /&gt;&lt;br /&gt;
Ovviamente tutto e' migliorabile e va visto per quello che e'.. ci sono prodotti commerciali molto piu complessi con logiche anche completamente diverse (vedi ad esempio NHibernate che ha un approccio completamente differente).. Ma mi faceva piacere condividerlo con voi. 
&lt;br /&gt;&lt;br /&gt;
Trovate la descrizione dettagliata come detto sulla home del mio sito http://www.diegolunadei.it e potete scaricare l'exe da http://www.diegolunadei.it/luna&lt;img src="http://blogs.ugidotnet.org/dagrandesarounmvp/aggbug/99853.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Diego Lunadei</dc:creator>
            <guid>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/03/19/luna-3.0.1.19356.aspx</guid>
            <pubDate>Sat, 19 Mar 2011 14:16:59 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2011/03/19/luna-3.0.1.19356.aspx#feedback</comments>
            <slash:comments>1271</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dagrandesarounmvp/comments/commentRss/99853.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dagrandesarounmvp/services/trackbacks/99853.aspx</trackback:ping>
        </item>
        <item>
            <title>SmartBackUp</title>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2007/09/27/88577.aspx</link>
            <description>Era un po di tempo che non pubblicavo uno dei miei programmini di contorno lavoro... &lt;br /&gt;
&lt;br /&gt;
Non so voi ma una delle cose che odio di più è fare i backup, ci vuole tempo.. sono noiosi da morire e hai sempre paura che poi qualcosa ti manca.&lt;br /&gt;
&lt;br /&gt;
Ma purtroppo questo problema non l'ho risolto &lt;img alt="" src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/teeth_smile.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
Invece quello che credo sia consuetudine quando si lavora è avere una copia dei sorgenti su un hd portatile usb che ci portiamo sempre dietro (almeno per me è cosi).&lt;br /&gt;
&lt;br /&gt;
Tenere allineate le due cose diventa un po noioso e cosi ecco che in una mezzagiornata tranquilla nasce SmartBackUp.&lt;br /&gt;
&lt;br /&gt;
Il programma è semplicissimo, non serve nemmeno spiegarne il funzionamento.. comunque:&lt;br /&gt;
&lt;br /&gt;
Gli date un percorso di origine (presumibilmente i file sul vostro disco rigido) e un percorso di destinazione (le copie sul vostro hd portatile) e lui sincronizza il secondo ambiente in base al primo. Copia solo i file cambiati, crea le directory nuove ecc ecc..&lt;br /&gt;
&lt;br /&gt;
Ovviamente NON cancella mai nulla in nessun caso. Per accorgersi dei cambiamenti sui file si basa sulla data di ultima modifica.&lt;br /&gt;
&lt;br /&gt;
Io lo uso da un po e devo dire che e' comodo perche invece di preoccuparmi di cosa e dove ho cambiato la sera attacco il mio hd  portatile sul pc e avvio la procedura di backup, e ci pensa lui a copiare solo quello che effettivamente ho modificato. &lt;br /&gt;
&lt;br /&gt;
Es. &lt;br /&gt;
&lt;br /&gt;
sul mio disco rigido c'e' la cartella Lavoro che ho anche sul mio disco portatile .. percio basta che la prima volta seleziono origine e destinazione e in pochi minuti ho aggiornato l'hd portatile &lt;img alt="" src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/regular_smile.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
Da quando lo uso non ho mai notato malfunzionamenti ma se vi capitasse utilizzandolo di trovarne siete molto gentili se me lo segnalate. Ovviamente sono certo che ci sono mille e piu prodotti per fare questa operazione ma sono sempre convinto che nelle tante opzioni e nella maggiore flessibilita a volte si perde di rapidità d'uso e qui alla fine c'e' solo un pulsante. &lt;br /&gt;
&lt;br /&gt;
Se volete lo potete scaricare da qui &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.diegolunadei.it/download/SmartBackUp.zip"&gt;www.diegolunadei.it/download/SmartBackUp.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;img src="http://www.diegolunadei.it/download/smartbackup.jpg" alt="" /&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/dagrandesarounmvp/aggbug/88577.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Diego Lunadei</dc:creator>
            <guid>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2007/09/27/88577.aspx</guid>
            <pubDate>Thu, 27 Sep 2007 06:16:23 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2007/09/27/88577.aspx#feedback</comments>
            <slash:comments>2752</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dagrandesarounmvp/comments/commentRss/88577.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dagrandesarounmvp/services/trackbacks/88577.aspx</trackback:ping>
        </item>
        <item>
            <title>Password manager 1.2</title>
            <link>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2005/09/19/26629.aspx</link>
            <description>Dopo le recenti discussioni a riguardo e utilizzando gli utili consigli di Marcello, Igor e tutti gli altri ecco una nuova versione di questo programmino. &lt;BR&gt;&lt;BR&gt;

Le modifiche sono le seguenti:&lt;BR&gt;&lt;BR&gt;

- Non viene più salvata nessuna password master&lt;BR&gt;
- La password master (ora chiamata di decodifica) si inserisce nella form principale e decodifica on-fly le altre contenute nell'archivio. &lt;BR&gt;
- Per ogni nuova password inserita si sceglie con che chiave di decodica fare il salvataggio, niente vieta di usare chiavi di decodifica diverse a patto che ve le ricordiate :)&lt;BR&gt;
- Cliccando su una voce la password non viene più copiata automaticamente nella clipboard&lt;BR&gt;
- Cliccando con il tasto destro su una voce appare un menù contestuale che consente di copiare nella clipboard la login o la password
&lt;BR&gt;&lt;BR&gt;
Chiaramente se usate chiavi di decodifica diverse alcune password nella lista appariranno sbagliate e altre giuste :)
&lt;BR&gt;&lt;BR&gt;
Il link per scaricare il programma è sempre lo stesso:
&lt;BR&gt;&lt;BR&gt;
&lt;A HREF="http://www.diegolunadei.it/bin/pwdMan.zip"&gt;clicca qui&lt;/A&gt;
&lt;BR&gt;&lt;BR&gt;
P.S. Il programma alla partenza cancella il vecchio file bin ora non più necessario&lt;img src="http://blogs.ugidotnet.org/dagrandesarounmvp/aggbug/26629.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Diego Lunadei</dc:creator>
            <guid>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2005/09/19/26629.aspx</guid>
            <pubDate>Mon, 19 Sep 2005 12:00:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/dagrandesarounmvp/archive/2005/09/19/26629.aspx#feedback</comments>
            <slash:comments>2740</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dagrandesarounmvp/comments/commentRss/26629.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dagrandesarounmvp/services/trackbacks/26629.aspx</trackback:ping>
        </item>
    </channel>
</rss>