.NET
Nelle ultime settimane mi sono imbattuto in tre features di Visual C++ Express. Sono caratteristiche poco "appariscenti", sulle quali sarebbe sprecato fare marketing, ma che si sono rivelate particolarmente utili.
1. E' possibile aprire vecchi progetti per Visual C++ 6. La procedura di conversione è pressochè indolore. Naturalmente, a causa degli allineamenti agli standard C++, è possibile che il nuovo compilatore generi messaggi di avviso, indicando che vengono usati costrutti sintattici deprecati.
2. Durante l'apertura di un file, l'editor rileva automaticamente se la convenzione di terminazione linea è consistente e, in caso contrario, propone un allineamento con lo standard per Windows, Unix o Macintosh.
3. Per impostazione definita i file...
E' stato rilasciato NUnit 2.2.3, una nuova "iteration release", che include significative correzioni di bugs e nuove asserzioni. E' possibile leggere le release notes e scaricarlo a questo indirizzo. Sebbene sia stato compilato con Visual Studio 2003, funziona sul runtime di .NET 2.0. In realtà, anche con le versioni precedenti di NUnit, previa modifica del file di configurazione, non ho riscontrato problemi. La buona notizia è che, passando una semplice opzione a linea di comando, è ora possibile eseguire NUnit su una qualunque versione del framework disponibile sulla macchina. Altrimenti, per testare assembly creati con Visual Studio 2005, è sufficiente decommentare la sezione "startup" del file di configurazione "nunit-gui.exe.config". Happy testing! :)
Vediamo il seguente codice. Viene definito un
reference type (typeid = Person), con un metodo publico,
ReadMessage. Al suo interno viene utilizzato in tre modi diversi un
oggetto di tipo System::IO::StreamReader, classe che implementa
System::IDisposable.
public ref class Person{public: Person (String^ name, String^ surname) { } void ReadMessage (String^ path) { Stream^ stream = (Person::typeid)->Assembly->GetManifestResourceStream (path);#ifdef MANUAL_DETERMINISTIC_CLEANUP // I manually call the distructor. StreamReader^ reader = gcnew StreamReader (stream); Console::WriteLine (reader->ReadLine ()); delete reader;#endif#ifdef AUTOMATIC_CLEANUP // Garabace collector will call the dispose methods before finalizing the reader. StreamReader^ reader = gcnew StreamReader (stream); Console::WriteLine (reader->ReadLine ());#endif#ifdef AUTOMATIC_DETERMINISTIC_CLEANUP // The compiler automatic inserts a method call to dispose. // The reference type instance has value semantic in this context. StreamReader reader (stream); Console::WriteLine (reader.ReadLine ());#endif }};
Decompiliamo con Reflector e
vediamo come apparirebbe, nei diversi casi, il metodo
ReadMessage se fosse scritto in C#.
Nel primo caso reader è stato dichiarato come un handle, al
quale abbiamo è stato assegnato un oggetto allocato sul managed
heap tramite l'operatore gcnew
. Dopo essere stato utilizzato, l'oggetto viene "distrutto" con l'operatore
delete. Tale
operatore viene sostanzialmente ...
Ispirato e istruito dalla sessione di Andrea, spero di poter iniziare questa settimana questo piccolo progetto.
Si tratta innanzitutto di creare uno script per la creazione del database e poi codare il membership provider.
Appena lo comincio apro un nuovo workspace su GotDotNet!
Ho deciso di spostare il progetto su GotDotNet. Pubblicherò lì news (con feeds RSS!), nuove releases, etc.. Ci sono anche un forum e un bug tracker, che naturalmente potete utilizzare.
Ho già pubblicato le due "vecchie" releases (0.6 e 0.7.0) e i sorgenti sfruttando il sistema di source control (integrato tramite plugin in Visual Studio!).
Ora vorrei creare un installer (in bundle con l'Enterprise Library e il provider ADO.NET per Firebird). Devo soltanto trovare il tempo di leggere le licenze e realizzarlo.
Putroppo non sono ancora riuscito a fare una pagina di redirect sul vecchio sito perchè ho dimenticato la password... troverò un sistema per farlo (spero!).
Nome...
Condividendo le opinioni di Andrea in merito all'inclusione nei soli prodotti Team System degli strumenti per lo unit testing, volevo ora portare il ragionamento un po' oltre.
Per quale motivo tutte queste versioni di Visual Studio? Probabilmente ci avrete già pensato: perchè non rilasciare una piattaforma, che potremmo chiamare "Visual Studio Foundation", e poi tutti i plugin del caso, acquistabili separatamente e in ogni momento? Insomma un modello àla Eclipse o Netbeans...
Immaginate di avvicinarvi alla programmazione in ambiente Windows. Ad oggi, probabilmente su consiglio di qualche amico, compreresti uno dei prodotti express, diciamo C# Express. Se non avete mai fatto unit...
Se state usando Visual C++ 2005, vi sarete probabilmente accorti che l'ambiente non è ancora del tutto completo. Esistono alcune limitazioni nella gestione del progetto (file di risorsa, file di soluzione, etc.). Non so se queste rimarranno limitazioni del prodotto Express definitivo, ad ogni modo potete ovviare a questi problemi scrivendo manualmente il file di progetto e vcbuild.exe per compilarlo. Qui potete trovate lo schema XML:
http://msdn2.microsoft.com/library/y4sy8216(en-us,vs.80).aspx
Il designer è decisamente migliorato, tuttavia, a mio parere, genera un pessimo codice. Sarebbe stato importante, per lo meno, che separasse le implementazioni dei metodi (in particolare, del costruttore e dei delegati che gestiscono gli eventi) dalla...
Un'ottima introduzione (e dimostrazione) da parte di uno dei software architect che lo hanno ideato:
http://channel9.msdn.com/ShowPost.aspx?PostID=56397
42 minuti circa
Uso NUnit con discreta soddisfazione, ma mi chiedevo se qualcuno di voi abbia provato i due progetti open-source "concorrenti".
Non ho molto tempo attualmente per provarli, qualcuno che li ha già usati sa darmi un parere?
Ho effettuato qualche piccola modifica al pacchetto.
Grazie ad Alessandro Petrelli per le sue correzioni sullo script sql per la creazione del database
Northwind.
Dal changelog:
5th April 2005 - version 0.7.0 released
* License changed into LGPL * Cleaned up
"bin" and "obj" directories from some files which were used during the
initial development process
* Minor changes to "NorthwindForFirebird.sql" (thanks to
Alessandro Petrelli)
* Minor changes to "Readme.txt"
* Added "Changelog.txt" * Version changed
...
Come promesso, ecco una prima versione. Potete scaricare il file zip
contenente il progetto, comprendente sorgenti, binari e documentazione qui .
Linguaggio utilizzato: C#
Strumenti utilizzati: Visual Studio 2003, NUnit framework, String Resource Generator
Database utilizzato dalla test suite: Northwind for Firebird (realizzato da me, col solo scopo di
testare questo provider, sperando che a MS non dispiaccia).
ADO.NET provider per Firebird: versione 1.7, CVS head (non funziona con la RC2 per via di alcuni bug da me segnalati e corretti).
E' una versione preliminare (0.6), bisognerebbe testarla ancora un po'.
Per domande, consigli, bug reports, potete scrivermi direttamente attraverso
il mio blog.
Buone feste a...
Nuove modifiche sul server CVS per l'ADO.NET data provider del progetto FirebirdSql.
Il secondo dei bug segnalati è stato corretto. Anche un terzo, riguardante la gestione
dell'evento RowUpdated è stato fissato, sebbene necessiti di ulteriore testing.
Beh, è la prima volta che mi capita, devo dire che è una bella soddisfazione
scoprire, identificare un bug e vederlo corretto!
Tengo comunque a sottolineare che non si trattava di bug particolarmente
gravi, ma semplicemente di comportamenti che si discostavano da quelli
degl'altri ADO.NET provider.
Direi che il lavoro sull'Enterprise Library sta per
concludersi.
Tra le piccole soddisfazioni di questo lavoro, due micro-bug scoperti
nell'ADO.NET data provider, versione 1.7 RC2.
1) Quando il data adapter fallisce l'insert/update/delete su una
riga, viene settato dataRow.RowError solo se
dataAdapter.ContinueUpdateOnError è settato a true. (FbDataAdapter.cs,
linea 456)
2) dataReader.RecordsAffected ritorna -1 anzichè il numero di righe
effettivamente modificate da un insert/update/delete statement se eseguito prima
che il data reader stesso venga chiuso. (FbDataReader.cs, linea 43)
Il primo è già stato riconosciuto è corretto nel CVS, il secondo l'ho appena
comunicato sulla mailing list ufficiale.
UPDATE: Il commit sul server CVS di sourceforge non è ancora stato effettuato.
UPDATE:...
In questi giorni di vacanza mi sto dedicando alla
scrittura di un nuovo data provider per l'Enterprise Library, dedicato al database Firebird.
L'impresa si sta rivelando abbastanza semplice, sebbene io non possa, almeno
per il momento, ritenermi un esperto del .NET framework. La disponibilità dei
sorgenti aiuta naturalmente molto. Le implementazioni dei provider per DB2, SQLServer e Oracle
sono piuttosto simili in certi punti e spesso è bastato
riprendere direttamente il loro codice.
Al momento sto aggiungendo qualche test fixture e risolvendo alcuni problemi con la
gestione degli errori durante l'update del data set. Per riutilizzare le
classi base fornite per lo unit testing ho dovuto...
Ho indicato tra i link qualche strumento utile (e qualcuno irrinunciabile) per sviluppare applicazione sulla piattaforma .NET.
Tutti gratuiti o a prezzi ragionevoli...