Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

MCAD

Post specifici sulla preparazione alla certificazione MCAD: materiale, codice C#, commenti
Da oggi sono ufficialmente l'MCP #3502269!!

Ieri sera, con molta sorpresa, ho ricevuto il mio Welcome Kit per essere diventato MCP!  Sono molto contento, ho subito infilato la mia wallet card nel portafoglio e, giusto per fare il figo, la farò vedere a chiunque mi passi sotto il naso! So che molti di voi magari essere MCP non è nulla, però per me è fonte di soddisfazione. In attesa, quando le acque si saranno calmate, di ricominciare a studiare per sostenere gli altri esami. Continuo a ricevere tutt'oggi molti commenti sui miei post relativi ad MCAD scritti durante il periodo di preparazione. Volevo ringraziare pubblicamente, senza...

posted @ sabato 26 novembre 2005 13:25 | Feedback (3) | Filed Under [ MCAD ]

MCAD: la grande saga, to be continued?

Dopo avervi annoiato con ben 49 post relativi a MCAD, dopo aver superato l'esame 70-316, adesso per me è tempo di ricominciare daccapo. No, no, state tranquilli, non ho intenzione di ripartire con [MCAD.1]  (ma quasi quasi...), quanto piuttosto quello di considerare il prossimo esame da fare, e quindi di ricominciare a studiare. Dato che punto a MCAD, le strade possibili sono fondamentalmente tre. In ordine di preferenza personale crescente, ecco gli esami che sto valutando. Designing and Implementing Databases with Microsoft SQL Server™ 2000 Enterprise Edition (70-229) - Di certo non mi metto a studiare...

posted @ lunedì 24 ottobre 2005 12:49 | Feedback (3) | Filed Under [ MCAD ]

[MCAD.49] Il giorno del fatidico esame 70-316

Dopo quasi 50 post effettivi sul mio blog per la preparazione all'esame 70-316, questa mattina, finalmente, sono andato alla Global Knowledge Network, qui a Milano, per sostenere finalmente l'esame. Dovevo essere già sul posto alle 8:30, mezz'ora prima dell'esame. La pioggia ha rallentato la mia andatura, ma alla fin fine sono arrivato puntuale. Entro, do la carta d'identità, firmo un foglio. Mi accompagnano davanti al PC, dove mi aspetta un software intitolato qualcosa tipo "Developing and Implementing Windows-based Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET". Un consiglio: le tizie non sanno nulla del software, non sanno spiegare cosa fa...

posted @ giovedì 20 ottobre 2005 13:39 | Feedback (22) | Filed Under [ MCAD ]

[MCAD.48] Velocemente, come creare un Control personalizzato

Come ho già avuto modo di dire precedentemente, ci sono diversi argomenti che ho tralasciato nella mia serie di articoli dedicati a MCAD. Uno di questi, la creazione di Windows Control, lo considero piuttosto importante (e, come al solito, piuttosto divertente), per cui ne parleremo oggi in modo magari un po' superficiale, ma più che sufficiente per superare l'esame 70-316. IntroduzioneInnanzitutto, cominciamo col dire che creare un controllo significa in altre parole implementare una classe che erediti da System.Windows.Forms.UserControl. Se utilizziamo l'editor Visual Studio .NET, possiamo cominciare un progetto Windows Control Library. L'editor ci propone in progettazione il classico Form Designer,...

posted @ mercoledì 19 ottobre 2005 14:22 | Feedback (0) | Filed Under [ MCAD ]

[MCAD.47] Data-Binding: in mezzo fra Control e sorgente dati

Usare il data-binding può veramente togliere gran parte del lavoro di scrittura del codice. In questi giorni lo sto esplorando ben bene, e devo dire che, sebbene ci siano molti modi diversi e sicuramente più ottimizzati per realizzare WF che prelevino i dati da un database, è veramente divertente e piacevole vedere cosa si può fare in così poco tempo. Si è sul serio molto più produttivi. Non mi interessa parlare di DataSource, DataMember ed affini. In parte l'ho già fatto nel mio post precedente , in parte vorrei invece approfondire...

posted @ venerdì 7 ottobre 2005 14:22 | Feedback (4) | Filed Under [ MCAD ]

[MCAD.46] Velocemente, il data-binding

Faccio sempre una brutta faccia quando sento parlare di data-binding.In ambiente Visual Basic 6 ed affini, il data-binding è un metodo che permette di "collegare" bidirezionalmente un controllo ad una sorgente dati come, tipicamente, un database. Questo collegamento era completamente trasparente per l'utente: era sufficiente posizionare un controllo Data sul form o, più recentemente, un ADODC e impostare qualche proprietà del controllo ed il gioco era fatto. Troppi automatismi rendono il vita facile, è vero, ma tolgono allo stesso tempo controllo lasciando poco spazio al programmatore per intervenire nel processo che, di fatto, era gestito dal runtime di VB. In...

posted @ mercoledì 5 ottobre 2005 16:35 | Feedback (1) | Filed Under [ MCAD ]

[MCAD.45] Reindirizzare un assembly da una oldVersion ad una newVersion

Ecco lo scenario: il vostro collega ha sviluppato in C# un assembly molto carino. L'assembly si chiama GetBirthday.dll e dispone di un solo metodo statico, GetNearestBirthday(). L'assembly è strong-named. Il nostro collega l'ha installato nella nostra GAC con un piccolo installer fatto da lui. Il metodo GetNearestBirthday ritorna una string contenente il compleanno più vicino nel tempo fra quelli presenti in un database SQL Server (qualsiasi riferimento all'applicazione Age è puramente casuale). L'assembly installato in questo momento è alla versione 1.0.0.0: noi lo abbiamo usato nella nostra applicazione Age, e gira a meraviglia. Clicco un pulsante, e in una TextBox mi viene detto che il prossimo...

posted @ martedì 4 ottobre 2005 14:01 | Feedback (3) | Filed Under [ MCAD ]

[MCAD.44] Quello che secondo me ho trascurato nel mio MCAD

Questo è il post relativo a MCAD N°44, oggi è il 4 ottobre, il primo post è stato scritto il 4 luglio. Dev'essere il destino che ogni tanto fa questi giochini!! Oggi, quando uscirò dall'uffico, andrò nella prima ricevitoria a giocare i numeri 4 e 44, ambo secco. Chi lo sa, magari vinco qualcosa!!! Tornando seri: ritengo di aver parlato della maggior parte degli argomenti inerenti l'esame 70-316. La data dell'esame si sta avvicinando....

posted @ martedì 4 ottobre 2005 12:17 | Feedback (3) | Filed Under [ MCAD ]

[MCAD.43] La sicurezza basata sull'utente di Windows

Nei post [MCAD.31] e [MCAD.33] abbiamo visto come lavorare con .NET avendo a che fare con la CAS (Code Access Security ), ovvero come assegnare o revocare dei permessi in base all'origine e all' "affidabilità" del codice che sta per essere eseguito. In base all'URL di provenienza, a seconda che l'assembly venga eseguito dalle directory locali del proprio PC oppure dalla Intranet, il runtime .NET assegna un permission sets piuttosto che un altro. Abbiamo visto come usare caspol.exe ...

posted @ lunedì 3 ottobre 2005 13:41 | Feedback (0) | Filed Under [ MCAD ]

[MCAD.42] Lo sapevate che...alcune piccole chicche...

La classe SqlCommand dispone del metodo Prepare per ottimizzarne l'esecuzione?E che prima di chiamarlo dobbiamo settare i data-type di tutti i parametri, soprattutto la proprietà Size per tutti quei parametri che hanno una lunghezza variabile? Esiste la keywork checked che serve a controllare gli overflow nelle espressioni? Esiste la keyword using che serve (anche) ad iniziare blocchi di codice al termine dei quali viene fatta automaticamente la Dispose dell'oggetto indicato al momento della sua dichiarazione? Lo strumento più corretto per distribuire un assembly nella GAC di un cliente non è gacutil, ma Windows Installer! Perchè? Perchè gacutil non incrementa il reference counter dell'assembly: gacutil va usato solo in ambiente...

posted @ giovedì 29 settembre 2005 12:55 | Feedback (9) | Filed Under [ MCAD ]

[MCAD.41] Conclusione dell'argomento Setup Project e varianti

Negli ultimi post abbiamo divagato, ma mi è piaciuto veramente far vedere a me e agli altri cosa sono riuscito a combinare con il Setup Project di VS.NET. Credo che siano state un po' OT rispetto al percorso richiesto dalla certificazione MCAD, però è sempre comodo sapere qualcosa in più, piuttosto che qualcosa in meno. Con il post di oggi chiudiamo il discorso dedicato alla creazione dei setup, vedendo un attimo quali formati di files possiamo generare, che differenze ci sono, come possiamo distribuirli e così via. IntroduzioneInnanzitutto, ho riaperto la solution che abbiamo avuto tra le mani fino a ieri. Clicchiamo...

posted @ mercoledì 28 settembre 2005 13:59 | Feedback (2) | Filed Under [ MCAD ]

[MCAD.40] Customizzare al 100% il nostro setup

Se le custom dialog preconfezionate non ci soddisfano, se le launch conditions dovrebbero essere un po' più complesse, se abbiamo la necessità di creare un qualcosa che non è possibile creare con le caratteristiche base di Windows Installer, possiamo coprire questo gap semplicemente sfruttando come si deve il nostro amico framework. Creando una nuova Class Library e creando una classe che eredita da  System.Configuration.Install.Installer possiamo piegare ai nostri scopi e fare tutto quello che vogliamo. La cosa magari non è semplicissima, ma per me è stato talmente tanto divertente ed appagante che voglio raccontare quello che ho fatto. Creare una Class Library ed...

posted @ martedì 27 settembre 2005 14:13 | Feedback (20) | Filed Under [ MCAD ]

[MCAD.39] Scrivere nel registro durante il nostro setup

Nel mio ultimo post [MCAD.38] abbiamo parlato delle Launch Conditions. Come ho detto, si tratta di condizioni che devono essere soddisfatte affinchè il setup possa procedere regolarmente. Concettualmente, possiamo attivare una Launch Condition secondo 3 modalità: il valore di una chiave nel registry, la presenza di un file sul FS dell'utente finale e la presenza di un componente COM installato tramite MSI. Queste 3 modalità attivano o meno la condition, che fa apparire un messaggio all'utente comunicandogli l'impossibilità di installare l'applicazione. Opzionalmente, possiamo indicare anche un URL, che l'utente può visitare per avere maggiori informazioni. Le possibilità offerte dal Setup Project di...

posted @ lunedì 26 settembre 2005 15:47 | Feedback (2) | Filed Under [ MCAD ]

[MCAD.38] Migliorare il setup con qualche dettaglio in più

Nel post precedente abbiamo visto brevemente come creare un setup (semplice semplice) per fare il deploy della nostra applicazione. Con "semplice semplice" intendo dire che facciamo la copia dei files inclusi nel progetto sul PC dell'utente finale, senza fare nulla di particolare. Abbiamo visto che le dipendenze non sono più così importanti come nell'era DLL/OCX pre .NET. Gli assembly devono/possono essere copiati nella directory dell'applicazione stessa, oppure installati nella GAC se vogliamo che siano condivise fra più di una applicazione. Facciamo questa operazione aggiungendo banalmente i files nel nodo Application Folder. Nel folder User's Desktop e in User's Programs Menu mettiamo...

posted @ venerdì 23 settembre 2005 16:16 | Feedback (4) | Filed Under [ MCAD ]

[MCAD.37] Proviamo a fare il setup dalla nostra applicazione Age ?

Nei (numerosi) post precedenti, abbiamo creato pian pianino un'applicazione Age, giusto per verificare passo passo tutte le classi/componenti/funzionalità che ho voluto trattare per prepararmi all'esame. La mia applicazione sul mio PC è funzionante, e mi diverte anche usarla - ho provato ad usarla adesso, e grazie alla stored procedure che abbiamo creato qua, mi dice che il prossimo compleanno è quello di mio papà! Quello che voglio fare è creare un setup per rendere distribuibile l'applicazione anche in giro, magari per mettere il download sul mio sito o...

posted @ venerdì 23 settembre 2005 13:43 | Feedback (9) | Filed Under [ MCAD ]

[MCAD.36] ADO.NET - Ottimizzare il caricamento in un DataSet, con alcuni test

Guardate un po' queste linee di codice in C# (che chiameremo CodiceSemplice ): daLettura = new System.Data.SqlClient.SqlDataAdapter("SELECT * FROM TabellaGigante", cnnLocale);DataSet ds = new DataSet();DataTable dt = new DataTable();ds.Tables.Add(dt);this.txtInizio.Text = DateTime.Now.ToString();cnnLocale.Open();daLettura.Fill(ds);cnnLocale.Close();this.txtFine.Text = DateTime.Now.ToString();TimeSpan ts = Convert.ToDateTime(this.txtFine.Text).Subtract(Convert.ToDateTime(this.txtInizio.Text));string msg = String.Format("Per caricare una tabella di {0} records ci ho messo {1} minuti!", ds.Tables[0].Rows.Count.ToString(), ts.ToString());this.textBox1.Text = msg; Ho scritto una piccola applicazione Windows Forms per testare per bene il caricamento di un DataSet da un sorgente dati come SQL Server. Ho letto infatti alcune cose interessanti sulla property EnforceConstraints del DataSet e sui metodi BeginLoadData e EndLoadData della classe DataTable. Ho voluto provare come si comportano, e ho ottenuto qualche risultato. Eseguiamo il codice, quanto tempo ci metto? Il codice sopra dichiara un SqlDataAdapter, un DataSet e una DataTable. In breve, popolo un DataSet con una sola DataTable usando...

posted @ giovedì 22 settembre 2005 10:15 | Feedback (9) | Filed Under [ MCAD ]

[MCAD.35] Creare assembly in codice nativo con ngen.exe

Abbiamo parlato di caspol.exe, di sn.exe e di gacutil.exe. Un altro tool incluso in .NET è ngen.exe. Quest'ultimo permette di compilare un assembly in codice nativo, allo scopo di (poterne) migliorarne le performance durante la sua esecuzione. Normalmente, come ben sappiamo, tutte le volte che generiamo un assembly con .NET, il file EXE o la DLL sono scritti in IL (intermediate language), il quale viene a sua volta tradotto in codice x86 tramite il meccanismo di compilazione JIT (just-in-time). Quando un assembly viene eseguito, quindi, il framework deve intervenire, per compilarlo e finalmente eseguirlo. Ovviamente, le prestazioni potrebbero risentirne, dato...

posted @ mercoledì 21 settembre 2005 13:10 | Feedback (5) | Filed Under [ MCAD ]

[MCAD.34] Global Assembly Cache, gacutil.exe e dintorni

Più di una volta avrete sentito della famigerata Global Assembly Cache, per gli amici GAC. Di cosa si tratta? La GAC è una sorta di raccoglitore di tutti gli assembly che noi vogliamo condividere tra più di un'applicazione. Lo scopo della GAC è proprio questo: se noi sviluppiamo un assembly DLL contenente classi che noi vogliamo utilizzare in diverse applicazioni .NET, possiamo semplicemente installare questo assembly nella GAC e il gioco è fatto. Per poter installare un assembly nella GAC, occorre innanzittutto firmarlo con uno strong name ...

posted @ martedì 20 settembre 2005 16:08 | Feedback (5) | Filed Under [ MCAD ]

[MCAD.33] Un ultimo sguardo a caspol.exe e alle policy di sicurezza

Dopo aver parlato, poco tempo fa, di caspol.exe e di come .NET implementa alcune logiche di sicurezza, voglio descrivere un attimo una cosa che mi ha fatto perdere parecchio tempo per evidente ignoranza della questione. Ovvero (può sembrare banale), come revocare permessi ad un'applicazione. Lasciatemi descrivere lo scenario in cui voglio ambientare la mia spiegazione. Supponiamo di prendere la nostra applicazione ReadRegistry che abbiamo creato a suo tempo e di farla girare da una qualsiasi directory del nostro PC. Abbiamo detto che trattandosi di un EXE eseguito da un disco locale, questo assembly gira nella My_Computer_Zone. In questo caso, quindi, l'assembly...

posted @ lunedì 19 settembre 2005 12:17 | Feedback (6) | Filed Under [ MCAD ]

[MCAD.32] Strong Names, sn.exe e miglioramento della sicurezza

Dopo aver visto caspol.exe nel post [MCAD.31] di ieri, ho trovato utile passare direttamente a vedere gli strong names e la relativa l'utility sn.exe. Questa volta ho utilizzato come spunto questo articolo su codeproject.com , che spiega a cosa servono gli strong names, come si fa a firmare (sign) un assemby con uno strong name e quali scopi pratici ha. A cosa serve uno strong name? Versioning e AuthenticationLo risposta è già nel titolo di questo paragrafo. Uno strong name è un meccanismo tramite il quale vengono firmati gli assembly....

posted @ giovedì 15 settembre 2005 13:00 | Feedback (7) | Filed Under [ MCAD ]

[MCAD.31] Code Access Security, qualche concetto e come usare caspol.exe

Nel post di ieri ho fatto una breve panoramica sulle utility della command-line di .NET. Preso dal panico dalla mia ignoranza in fatto di security, e spinto anche dal fatto che ho incontrato diverse domande sull'utility caspol.exe, ho deciso di cominciare da quest'ultima. Ho sfogliato e stampato le pagine su MSDN dedicate a questo tool , e ho letto un articolo su www.15seconds.com che illustra in breve come funziona il nuovo modello di security implementato da .NET. In cosa consiste? Come funziona la nuova security...

posted @ mercoledì 14 settembre 2005 12:42 | Feedback (7) | Filed Under [ MCAD ]

[MCAD.30] .NET Framework Tools

Innanzitutto tranquilizzo tutti quanti su una cosa: il mio IMHO ha ripreso a funzionare. L'ho semplicemente reinstallato e adesso posso nuovamente usare il Code Snippet Editor e posso selezionare le categorie, elementi dell'IDE che venerdì pomeriggio mi avevano abbandonato. Ringrazio Andrea per avermi contattato per aiutarmi a risolvere il problema: ho provato a rispondergli, ma l'euforia pre-Ligabue ha fatto passare IMHO in secondo piano. Torniamo a noi. Lorenzo ha (come al solito) ragione: una certa parte dell'esame 70-316 che mi sto preparando ad affrontare prende in considerazione le utility .NET dalla command-line. Utility che permettono di lavorare sulla GAC, sulle impostazioni di...

posted @ martedì 13 settembre 2005 11:28 | Feedback (4) | Filed Under [ MCAD ]

[MCAD.29] Ci saranno domande sull'IDE di VS.NET?

Facendo qualche test con i software Boson, mi è capitata qualche domanda relativa all'IDE di Visual Studio: come configurare la tal opzione, come attivare questo o quell'altro, a che serve la finestra Locals, e così via. Non ho proprio la più pallida idea se poi all'esame ci saranno domande di questo tipo, ma io mi sono fatto un giro comunque dentro l'IDE e un po' su MSDN, per vedere di trovare pagine Web dedicate a questo argomento. In questo post quindi non scriverò codice C#, ma farò una rapida carrellata sull'ambiente di programmazione Visual Studio .NET. Debugging in Visual Basic .NETHo trovato...

posted @ venerdì 9 settembre 2005 12:39 | Feedback (2) | Filed Under [ MCAD ]

[MCAD.28] Creare un SqlCommand per eseguire una sp con parametri di output

Nel post [MCAD.26] abbiamo visto come creare un SqlCommand per eseguire operazioni sul nostro database. Nel caso specifico, in quel post il SqlCommand è stato definito per eseguire una INSERT INTO (per aggiungere records alla tabella ListBirthdays) e una TRUNCATE TABLE (per svuotare la tabella ListBirthdays prima di popolarla). Ieri sera mi sono divertito a guardare meglio il SqlCommand, soprattutto nell'ottica di richiamare una stored-procedure che ritorni al chiamante uno o più parametri di output ...

posted @ lunedì 5 settembre 2005 17:01 | Feedback (1) | Filed Under [ MCAD ]

[MCAD.27] Le classi Debug e Trace

L'argomento ADO.NET porta via un sacco di tempo e spazio, per questo motivo preferisco aprire una piccola parentesi sulle classi Debug e Trace. A cosa servono? Dove vengono utilizzate? Cominciamo con la prima: la classe Debug permette di inserire linee di codice per visualizzare (più avanti vedremo meglio nel dettaglio cosa si intende) alcune informazioni che possono essere utili per debuggare la nostra applicazione. La prima cosa da sapere è che tutte le linee di codice che utilizzano la classe Debug vengono semplicemente ignorate quando compiliamo la nostra applicazione in modalità Release. Mi spiego meglio, perchè credo che sia una cosa che...

posted @ lunedì 5 settembre 2005 12:52 | Feedback (3) | Filed Under [ MCAD ]

[MCAD.26] Nuovi miglioramenti del codice sulla gestione di ADO.NET

A seguito del mio ultimo post di ieri, ho ricevuto diversi comment di Andrea e Lorenzo che mi hanno spinto a rivedere e ad ottimizzare il codice C# scritto, appunto, in quel post. Motivo scatenante: l'utilizzo della classe SqlCommandBuilder. Come ho detto ieri, questa classe serve per facilitare e a velocizzare la creazione dei 3 Command necessari a ADO.NET per fare le sue operazioni sul database (i Command sono InsertCommand, DeleteCommand e UpdateCommand). Tranne in rarissimi casi, però, fretta e bene non vanno mai bene, ed effettivamente provando a visualizzare la CommandText dei 3 SqlCommand si vede che il codice SQL...

posted @ martedì 30 agosto 2005 13:02 | Feedback (5) | Filed Under [ MCAD ]

[MCAD.25] Esportazione su database: SqlConnection, SqlDataAdapter e SqlCommand

Riassunto delle ultime puntateNel post [MCAD.23] abbiamo visto i primi rudimenti di SqlConnection e SqlCommand all'interno della form frmConnection creata appositamente. In quel post ho scritto del codice per aprire una connessione verso SQL Server e due tipi diversi di SqlCommand (per eseguire una SELECT e per eseguire una stored-procedure). Lo scopo era quello di creare una tabella ListBirthdays sul server, pronta ad accogliere tutti i dati che inseriamo all'interno della nostra applicazione, ovvero tutte le istanze di Age, inteso come persone con le relative date di compleanno. Nel post [MCAD.24] ho inserito nel codice qualche miglioramento che mi è stato consigliato da cui mi ha...

posted @ lunedì 29 agosto 2005 14:13 | Feedback (5) | Filed Under [ MCAD ]

[MCAD.24] Alcuni miglioramenti del codice

Nel post [MCAD.23] ho scritto alcune linee di codice relative a ADO.NET che hanno ricevuto qualche comment. Ho deciso quindi di riportare i consigli e i miglioramenti di Igor e di Daniele. Questi cambiamenti hanno a che fare sia con ADO.NET, sia con la buona programmazione C#, per cui ritengo questo post una sorta di add-on, un extra che chi vuole può saltare. Dunque, vediamo un po' di cosa si è parlato. Enum SupportedTypeDBCominciamo con le cose più semplici. La mia applicazione Age gestisce un file app.config che inizialmente era scritto in questo modo:       <add key="TypeDB" value="SQLSERVER" />      <add key="DBConnection" value="Persist Security Info=True;Integrated Security=SSPI;database=age;server=SPOCK;Connect Timeout=30"/> La key DBConnection non ci interessa: è semplicemente...

posted @ venerdì 26 agosto 2005 15:37 | Feedback (2) | Filed Under [ MCAD ]

[MCAD.23] SqlConnection e SqlCommand: primi passi con ADO.NET

Nel post precedente, abbiamo creato un nuovo Windows Form per regalare alla nostra applicazione qualche funzionalità in più in materia di database, per esplorare per bene quello che ci offre ADO.NET. Il form è quello riportato qui sotto, tutti i dettagli sulla sua implementazione sono nel post [MCAD.22]. Quello che voglio fare oggi è la stessa cosa che ho anticipato la volta scorsa. Appena l'utente clicca sul pulsante Ok, vuol dire che desidera da questo momento utilizzare la nuova stringa di connessione specificata nella TextBox. Prima di farlo, però, vorrei controllare che 1) la connessione funzioni realmente e 2) esista la tabella...

posted @ giovedì 25 agosto 2005 18:27 | Feedback (23) | Filed Under [ MCAD ]

[MCAD.22] Un nuovo Windows Form per lavorare con i database, pronti con ADO.NET

Nel mio ultimo (ormai lontano) post relativo ad MCAD, avevo scritto delle funzioni in grado di leggere e scrivere files XML usando i metodi messi a disposizione dalla classe DataSet. Usando ReadXML e WriteXML, siamo riusciti a salvare su disco l'elenco dei nostri compleanni, così da non dover tutte le volte popolare la ListBox che abbiamo messo sulla Windows Form principale della nostra applicazione. Queste funzionalità hanno reso l'utilizzo della nostra piccola applicazione un po' più semplice ed intelligente. Riprendiamo il discorso preparandoci ad affrontare al meglio le insidie di ADO.NET! Ecco l'interfaccia di Age come si presenta fino ad oggi....

posted @ mercoledì 24 agosto 2005 16:17 | Feedback (6) | Filed Under [ MCAD ]

[MCAD.21] Completiamo le operazioni di caricamento, salvataggio e di importazione su file XML

Eccomi, direttamente dal mio giardino, pronto per andare avanti e riprendere un attimo il discorso che avevamo lasciato in sospeso mercoledì scorso. Nel mio ultimo post avevamo visto come salvare in un file XML i compleanni che abbiamo inserito nella ListBox, ovvero: abbiamo aggiunto qualche voce al nostro MainMenu per prevedere le funzioni di caricamento, di salvataggio e di importazione dei nostri files XML abbiamo visto la creazione e l'utilizzo della function dichiarata così:private DataTable getSaveTable(bool WithData) abbiamo visto l'utilizzo di SaveFileDialog che consente all'utente di scegliere...

posted @ martedì 2 agosto 2005 19:10 | Feedback (2) | Filed Under [ MCAD ]

[MCAD.20] Espandiamo il MainMenu per far posto alle nuove features di oggi

Se ci ricordiamo bene, la UI della nostra applicazione Age è piuttosta semplice e spartano. Nel post [MCAD.15] avevamo implementato le funzioni di stampa e lo screenshot mostra il MainMenu aperto. Le funzioni disponibili fino a questo momento sono le seguenti: Imposta Pagina (handler mnuPageSetup_Click) Anteprima di Stampa (handler mnuPrintPreview_Click) Stampa (handler mnuPrint_Click) Esci (handler mnuExit_Click) Vi rimando al post [MCAD.15] per tutti i dettagli sull'implementazione degli handler elencati sopra. Quello che vogliamo fare oggi è integrare nuove voci al componente MainMenu per far posto alle nuove features che implementeremo. Qui sotto riporto uno screenshot dell'applicazione. Abbiamo aggiunto le...

posted @ mercoledì 27 luglio 2005 14:03 | Feedback (3) | Filed Under [ MCAD ]

[MCAD.19] Salvare e leggere i nostri compleanni in files XML con ADO.NET

Ok, dopo il preambolo di prima, dove abbiamo illustrato in po' di semplice teoria che sta dietro ad ADO.NET, passiamo finalmente a fare qualcosa di concreto nella nostra applicazione Age. In pratica, vogliamo dare all'utente la possibilità di salvare la lista dei compleanni e successivamente di ricaricarla . In condizioni normali dovremmo utilizzare un qualsiasi database. Questa volta vorrei adottare un approccio diverso e più interessante: invece di usare un database di Access o di SQL Server, salveremo le informazioni in files XML generati direttamente senza grossi problemi da ADO.NET. Come ho detto nel post precedente, vogliamo utilizzare la modalità disconnessa di...

posted @ martedì 26 luglio 2005 18:51 | Feedback (6) | Filed Under [ MCAD ]

[MCAD.18] Salvare i dati in XML e primi passi con ADO.NET

Ricominciamo subito con un argomento piuttosto tosto: ADO.NET. ADO.NET è accessibile da .NET attraverso il namespace System.Data. Ogni qualvolta vorremo utilizzare funzioni proprie di ADO.NET, sarà bene quindi scrivere nel codice: using System.Data; ADO.NET ci permette di gestire database SQL Server, Oracle, Access e così via. Ci permette di creare database, tabelle, campi, foreign-key, primary-key, constraint tutto in memoria, attuando così quello che viene definito da Microsoft come accesso ai dati disconnesso. Cosa significa? In breve: Apro la connessione verso il database Carico una parte dei dati in memoria Chiudo la connessione verso il database (liberando le ...

posted @ martedì 26 luglio 2005 15:39 | Feedback (4) | Filed Under [ MCAD ]

[MCAD.17] Punto della situazione e qualche miglioramento, per la serie...ciliegine sulla torta!

Ok, questo è l'appuntamento n.17 per la serie dei miei post relativi alla certificazione MCAD (ecco qua l'elenco completo dei post sotto la categoria [MCAD]). Con la scusa e la motivazione di creare un'applicazione Age, pian piano stiamo sviscerando tutti gli aspetti che bisogna conoscere per approdare alla certificazione MCAD. C'è stata qualche nuova iscrizione su UGIdotNET, per cui mi permetto di fare un attimo il punto della situazione: dove siamo partiti, cosa abbiamo fatto e cosa dobbiamo ancora fare. Bene, cominciamo. Innanzitutto, ricordiamoci che come scaletta abbiamo sfruttato...

posted @ martedì 26 luglio 2005 12:11 | Feedback (9) | Filed Under [ MCAD ]

[MCAD.16] Implementare le caratteristiche di Accesso Facilitato

Traduzione letterale per "Implement accessibility features", tratto direttamente dalla Study Guide di Lorenzo. Cosa significa? Beh, fate una prova: prendete un'applicazione che avete scritto voi, trovate l'icona del file EXE e selezionatela. No, non fate doppio-click, selezionatela e basta! Adesso bendatevi gli occhi, per bene, cercate il tasto Invio/Enter sulla tastiera e premetelo: se la vostra applicazione funziona correttamente, l'avete appena aperta. Fin qua è facile, no? Ora, provate ad usarla senza vedere un accidenti. Molte persone, compreso (una volta) il buon vecchio nonno Costantino, vivono quotidianamente così. Come ve la cavate voi??? Maluccio, non è vero? Possiamo migliorare le...

posted @ giovedì 21 luglio 2005 17:15 | Feedback (3) | Filed Under [ MCAD ]

[MCAD.15] PageSetupDialog e PrintDialog, più controllo sulle funzioni di stampa

Oh, che bello, la nostra applicazione (che però non vi ho ancora fatto vedere!! ) produce la nostra stampa, che mostra l'elenco di tutti i compleanni che abbiamo inserito nella ListBox. Se abbiamo scritto il codice correttamente, quando clicchiamo sul button btnPrint appare l'anteprima di stampa, con l'header, il footer e il contenuto nella parte centrale del report. Non solo, usando l'attribute Logo che ho creato, posso mettere anche una bella immagine in alto a destra. Spero di poter mettere on-line il codice durante il weekend. Comunque sia, io personalmente non sono ancora soddisfatto. Perchè? Un'applicazione che si rispetti innanzitutto ha un bel...

posted @ giovedì 21 luglio 2005 13:18 | Feedback (4) | Filed Under [ MCAD ]

[MCAD.14] Completare la stampa con una bella anteprima

Ok, dopo qualche giorno di pausa, riprendiamo un po' con la nostra guida ad MCAD. Nel mio ultimo post di venerdì scorso, abbiamo visto come utilizzare la classe PrintDocument per stampare quello che vogliamo. Il succo sta nel creare un oggetto PrintDocument e gestire l'evento PrintPage della classe con un handler adatto, come abbiamo fatto qui: prnDoc.PrintPage += new PrintPageEventHandler(this.printBirthday); Quindi, abbiamo creato una function printBirthday(); e usando GDI+ abbiamo scritto tutto quello che vogliamo sul PrintDocument. Questo metodo, sebbene funzioni alla perfezione, ha un grosso difetto: non produce un'anteprima di stampa, ma indirizza l'output direttamente alla stampante predefinita del sistema. Questo può anche andar...

posted @ martedì 19 luglio 2005 13:05 | Feedback (2) | Filed Under [ MCAD ]

[MCAD.13] Far stampare la nostra applicazione...senza anteprima!

Ho in mente parecchie idee carine sull'applicazione che sta fungendo da base di studio per MCAD. Prima di passare a cose più serie, o comunque a cose che bene o male ho già visto, (come ADO.NET o XML) ho preferito questa volta vedere qualcosa che non ho mai preso in considerazione: la stampa ...

posted @ venerdì 15 luglio 2005 16:46 | Feedback (2) | Filed Under [ MCAD ]

[MCAD.12] Completamento della localizzazione della nostra applicazione

Nel mio post precedente dedicato a MCAD abbiamo visto come tradurre la nostra applicazione in più lingue. Giocando con le property Localizable e Language delle WF, possiamo tradurre direttamente a design-time Text dei Button, dei GroupBox, degli Headers, delle WF stesse e così via. Tutto il (succulento) codice è incluso nella InitializeComponent() della WF, che invece di creare i controls impostandone le proprietà, in pratica le va a leggere direttamente dai files di risorsa generati automaticamente dall'IDE di VS. Adesso quello che rimane da fare è localizzare tutta la parte che invece è inclusa nel codice, ovvero tutto quello che viene comunicato allo...

posted @ mercoledì 13 luglio 2005 17:37 | Feedback (7) | Filed Under [ MCAD ]

[MCAD.11] Localizzazione di un'applicazione e resources files

Nel sorgente che ho pubblicato, tutta l'applicazione è in lingua inglese. Su questo non c'è molto dire: quando abbiamo progetto la Windows Form (WF), abbiamo scritto le Label, i Button e i vari MessageBox in questa lingua. Se diamo un'occhiata alla function private void InitializeComponent(), vedremo che la property Text dei control è stata impostata sulla stringa esatta, così come compare a run-time. Ad esempio, ecco il codice che inizializza il btnCancel sulla WF. // // btnCancel// this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));this.btnCancel.CausesValidation = false;this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;this.btnCancel.Location = new System.Drawing.Point(264, 312);this.btnCancel.Name = "btnCancel";this.btnCancel.Size = new System.Drawing.Size(56, 23);this.btnCancel.TabIndex = 4;this.btnCancel.Text = "Cancel";this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); Drin, drin! Squilla il telefono: è il signor Mario Rossi, che trova molto utile il nostro programma, però lo vorrebbe in lingua italiana, perchè lui l'inglese non...

posted @ martedì 12 luglio 2005 13:01 | Feedback (4) | Filed Under [ MCAD ]

[MCAD.10] Finalmente un'applicazione completa, da estendere con la Study Guide

La Study Guide che sto usando come scaletta presenta molti aspetti del framework che vanno imparati e vanno saputi per approdare a MCAD. I concetti espressi sono diversi, e vanno da ADO.NET, alla localizzazione delle applicazioni, dalla validazione dell'utente, a come debuggare correttamente il codice usando le classi relative al Debug e al Trace. Ieri pomeriggio, che era una domenica fredda e piovosa, mi sono messo lì con il mio Visual Studio 2003 a casa ed ho creato l'applicazione di base che mette realmente in piedi i concetti espressi fino a questo momento. L'applicazione ha le seguenti caratteristiche (uno screenshot è qua) usa...

posted @ lunedì 11 luglio 2005 18:49 | Feedback (7) | Filed Under [ MCAD ]

[MCAD.9] OOP e separazione tra la UI e la logica delle applicazioni

Oggi è sabato, sicuramente ci sono meno persone che seguono il blog di UGIdotNET. Per questo motivo volevo un attimo riassumere quello che ho fatto finora e fare delle riflessioni. Abbiamo creato una piccola applicazione .NET tramite Windows Forms che dice l'età di una persona dato il suo anno di nascita Sono stati usati l'evento Validating e il controllo ErrorProvider per controllare che l'utente abbia inserito nella TextBox un valore valido E' stato visto l'utilizzo della Property CausesValidation sui controlli per evitare la validazione sui pulsanti che non...

posted @ sabato 9 luglio 2005 18:46 | Feedback (4) | Filed Under [ MCAD ]

[MCAD.8] Completare l'evento Validating con il controllo ErrorProvider ed altre chicce

Nel post precedente abbiamo realizzato una piccola applicazione che ci dice quanti anni abbiamo. Ho usato l'evento Validating della TextBox per controllare che l'input dell'utente sia valido (in realtà l'ho fatto in modo orrendo, come giustamente Marco ho sottolineato). In questo post vado avanti con il discorso: usiamo il controllo ErrorProvider per segnalare all'utente l'errore miglioriamo la validazione con la classe Convert diamo una prima occhiata al blocco Try...Catch Nel codice di ieri, se la validazione falliva, il codice prevedeva un semplice e.Cancel = true ; senza dare alcuna comunicazione all'utente. Semplicemente il focus...

posted @ venerdì 8 luglio 2005 14:23 | Feedback (16) | Filed Under [ MCAD ]

[MCAD.7] Domande, risposte esatte e sbagliate...Mah!

Ieri pomeriggio e questa mattina ho pubblicato dei post con alcune domande pescate a caso dai test che ho acquistato personalmente dal sito www.boson.com. Senza pensarci troppo. Giustamente Lorenzo mi ha fatto notare che con una certa probabilità la licenza non prevede che uno acquisti le domande, e poi le possa pubblicare dove vuole, tra l'altro in un blog pubblico come questo. Appena letto il comment di Lorenzo, ho provveduto a rendere disabilitati i post.Questo è il motivo per cui in questo momento non sono più raggiungibili. Ho provveduto a contattare www.boson.com tramite qualche loro indirizzo di posta, ma non ho ancora...

posted @ giovedì 7 luglio 2005 17:11 | Feedback (5) | Filed Under [ MCAD ]

[MCAD.6] Un evento tra tutti gli altri: il Validating della TextBox

Pierre in un suo post di qualche giorno fa, ha detto (testuali parole): "Si inizia spiegando i concetti base, quelli che spesso crediamo di avere chiari ma poi scopriamo che abbiamo delle falle ". Lui si riferiva a ben altro, ma sono convinto anche io di quello che ha detto. E' quello che ho voluto fare con il mio post dell'altra volta, cominciando a parlare di eventi. Se volete approfondire, ho trovato questa pagina su MSDN. Oggi andiamo avanti. Dunque, un altro argomento che Lorenzo ha trattato nella sua Study Guide è l'evento Validating delle TextBox. Secondo Lorenzo...the best way to...

posted @ giovedì 7 luglio 2005 17:00 | Feedback (8) | Filed Under [ MCAD ]

[MCAD.5 bis] Risposte alle domande che io ho sbagliato

Questo post, sebbene sia normalmente visibile, non contiene il vero post originario. In questo post avevo scritto pubblicamente alcune domande tratte dal software Boson per la preparazione alla certificazione MCAD. Ovviamente, questo non è lecito, per cui ho rimosso il contenuto, che è stato sostituito da questo, giusto per avvisare che il post [MCAD.5] è sempre esistito, ma semplicemente disabilitato. Maggiori dettaglio e spiegazioni sulla questione nel post [MCAD.7]

posted @ giovedì 7 luglio 2005 13:19 | Feedback (4) | Filed Under [ MCAD ]

[MCAD.5] Qualche domanda, che io ho sbagliato, dai test

Qui sotto riporto le prime 4 domande dai test che ho acquistato da www.boson.com per l'esame 70-316, scelte a caso, fra quelle che io ho sbagliato in questi giorni. Non dico ancora le risposte esatte, le commenterò in un post domani o dopodomani. Provateci voi! How do you deploy a .NET application?A) .NET application do not require an installerB) Using the Package and Deployment WizardC) by toggling the package option in the Build dialogD) Using a setup and deployment project What method of the ContextMenu, MainMenu and MenuItem classes can you use to merge MenuItem objects from one menu with the current menu?A)...

posted @ mercoledì 6 luglio 2005 17:25 | Feedback (10) | Filed Under [ MCAD ]

[MCAD.4] Organizzazione dei contenuti con DotNetNuke

Grazie all'interessamento di Andrea Dottor, è stato attivato in via sperimentale un portale con DotNetNuke, che potete trovare all'indirizzo: http://dnn.tanadellavolpe.net Nonostante il nome un po' bizzarro, l'idea mi sembra bella e ringrazio pubblicamente Andrea per aver dedicato parte del suo tempo a questa iniziativa. L'obiettivo che ci siamo prefissi io e gli altri collaboratori con cui sono in contatto è quello di accentrare su UGIdotNET il più possibile: blog per scrivere articoli e post di approfondimento sugli esami, forum per chiarimenti e domande. Purtroppo non sapevo dove poter raccogliere il codice sorgente, per cui la piattaforma DotNetNuke è l'ideale. I contenuti non sono moltissimi, per ora, ma confido...

posted @ mercoledì 6 luglio 2005 14:40 | Feedback (5) | Filed Under [ MCAD ]

[MCAD.3] Creare, implementare e gestire gli eventi

Uno dei punti della Study Guide di Lorenzo parla di come creare e gestire gli eventi delle Windows Forms di .NET. Parto dal presupposto che sappiate cosa sia il framework, come funzioni l'IDE di Visual Studio e conosciate almeno le basi di C# o VB.NET per programmare. Gestire un evento significa scrivere una function che faccia un qualcosa quando quell'evento accade. Per esempio, un button può essere cliccato, una Windows Form (WF) può essere ridimensionata o ridotta ad icona, una combobox può essere "aperta" (passatemi il...

posted @ mercoledì 6 luglio 2005 12:29 | Feedback (6) | Filed Under [ MCAD ]

[MCAD.2] Materiale, risorse on-line ed organizzazione

Prima di cominciare a parlare di C#, di classi, oggetti ed eventi, è bene fare un bel punto della situazione e parlare un attimo di quello che userò (useremo) per preparare l'esame. Dunque, se avete un po' di tempo libero ogni giorno vi consiglio caldamente di stampare, stampare, stampare . A me piace...

posted @ martedì 5 luglio 2005 12:19 | Feedback (4) | Filed Under [ MCAD ]

[MCAD.1] In preparazione per la certificazione MCAD

Mi piacerebbe sfruttare il mio blog per creare una sorta di diario della preparazione alla certificazione MCAD (Application Developer). L'idea è quella di utilizzare il blog per riassumere tutte le nozioni e le informazioni che ruotano attorno a MCAD e di approfondire i temi presi di mira dagli esami, costruendo così una sorta di step-by-step al conseguimento della certificazione. Mi rendo conto che potrebbe essere un'impresa importante e titanica, però mi ispira. E come tutte le cose che mi ispirano, mi vien voglia di metterla in pratica. :-) Gli obiettivi che in questo momento mi propongo sono: - presentare il materiale che...

posted @ lunedì 4 luglio 2005 17:40 | Feedback (9) | Filed Under [ MCAD ]

Powered by:
Powered By Subtext Powered By ASP.NET