aprile 2005 Blog Posts
DeflateStream e GZipStream sono due classi presenti nel nuovo namespace System.IO.Compression il cui scopo è quello di comprimere/decomprimere streams.L'interfaccia delle due classi è simile e condividono lo stesso algoritmo di compressione, GZip aggiunge un CRC per verificare l'integrita' dei dati e, volendo, puo' essere esteso affiche' usi altri formati di conversione. Qui descriverò solo DeflateStream.Ecco un esempio di come comprimere un file:
private static void Compress(string sourceFile, string outputFile){ using (FileStream fs = new FileStream(sourceFile, FileMode.Open)) { using (MemoryStream ms = new MemoryStream()) { using (DeflateStream ds = new DeflateStream(ms, CompressionMode.Compress)) { byte[] data = new byte[fs.Length - 1]; fs.Read(data, 0, data.Length); ds.Write(data,...
Potevo non parlarne? :-)Una classe sotto vari punti di vista molto "familiare" disponibile anche come componente nella toolbox di Visual Studio 2005 all'interno del gruppo "Components".Chi si occupa di comunicazioni seriali troverà tutto il necessario nella classe System.IO.Ports.SerialPort, il fatto che sia stato creato un namespace Ports mi fa ipotizzare che in futuro avremo altri tipi di porte apparire in questo namespace, anche se, senza dubbio, ciò accadrà dopo il rilascio del frameworks 2.0.Cito solo alcuni dettagli interessanti:
La classe espone un metodo statico GetPortNames() che ritorna un array di stringhe con i nomi delle porte seriali disponibili nella forma "COMx".
La...
Scenario:Assembly MyLib contiene due tipi: public A e internal B (Friend in VB).Assembly MyExe che utilizza MyLib.Immaginiamo ora di avere necessità di accedere da MyExe anche al tipo B (ad esempio perchè vogliamo sottoporlo a Unit Testing) quali soluzioni abbiamo a disposizione?, ovviamente quella di rendere publico B il che però potrebbe, in svariati casi, essere qualcosa che vogliamo evitare.Al momento una parziale soluzione ci viene data dall'attributo StrongNameIdentityPermission grazie al quale possiamo essere "sicuri" che solo una determinata assembly (in questo caso MyExe) possa utilizzare il tipo B malgrado la sua interfaccia sia publicamente visibile, ovvero, se MyExe ha uno...
Il prompt dei comandi di Visual Studio 2005 Beta2 contiene un riferimento ad un file vsvarsall.bat inesistente, sostituitelo con:%comspec% /k ""C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat""e tutto riprenderà magicamente a funzionare...
Ho dato una veloce occhiata all' add-on di Refactoring per VB2005, direi che mette a disposizione quasi tutte le opzioni presenti in C# a parte "Extract Interface" (oppure sono io che sono cecato...) anche se lo fa in maniera molto più "appariscente" (forse troppo per i miei gusti...) rispetto quanto disponibile per C#.Oltre a questo però VBRefactor va oltre, offrendo degli hints il cui scopo è quello di rendere più pulito il codice, ad esempio offre la possibita di sostituire un valore numerico con una costante oppure di splittare una formula nella forma variabile=formula.Se volete un introduzione veloce ad alcune...
Ecco qua la novita' che avevo preannunciato (anche se le solite malelingue insinuavano volessi fare il “prezioso” la verita' e' che il tutto era sotto NDA, ma non ho resistito...)Nel tentativo di dare risposta alle innumerevoli richieste di avere Refactoring anche in VB2005, Microsoft ha stretto un accordo con DeveloperExpress la quale fornira' free o charge, una versione ridotta del loro tool “Refactor Pro”.Potete scaricarlo quiIl tool ha ancora qualche piccolo bug, potete comunque scaricare gli ultimi aggiornamenti anche da qui, sebbene il main support sara' gestito da DeveloperExpress e' possibile segnalare eventuali bugs anche su LadyBug, il tool sara'...
Ricordate la famosa macchina criptomeccanica Enigma usata dai tedeschi nella seconda guerra mondiale? Ecco un emulatore molto carino in C#, se siete appassionati all'argomento non perdetevi la storia di Enigma e le sue evoluzioni.
WiX e' un tool (disponibile sia da riga di comando che come Add-In per Visual Studio) che permette di realizzare pacchetti di setup partendo da un file Xml.Non ho ancora avuto modo di testarlo a fondo, ma a prima vista sembra interessante...Lo trovate qui mentre qui trovate un articolo che descrive anche l'Add-in per Visual Studio.
Nel tentativo di semplificare il tracing delle applicazioni .NET, nel framework 2.0 è stata introdotta la classe TraceSource (in System.Diagnostics) la quale affianca l'ormai nota classe Trace.Grazie a TraceSource effettuare il tracing di una applicazione vuol dire scrivere del codice tipo:
Trace.AutoFlush=true;TraceSource ts = new TraceSource("MySource");TextWriterTraceListener tw = new TextWriterTraceListener("c:\\log.txt","log");tw.TraceOutputOptions=TraceOptions.DateTime | TraceOptions.ProcessId; ts.Listeners.Add(tw); ts.Switch.Level = SourceLevels.Error | SourceLevels.ActivityTracing;ts.TraceInformation("Trace demo...");ts.TraceEvent(TraceEventType.Start, 0,"Logging started");ts.TraceData(TraceEventType.Information,99,new Person());ts.TraceEvent(TraceEventType.Error, 1, "Error 1");ts.TraceEvent(TraceEventType.Information, 2, " Some infos..:");ts.TraceEvent(TraceEventType.Stop, 3,"Logging ended");
Il codice, dopo avere creato un istanza di TraceSource identificata come "MySource" aggiunge alla collezione Listeners della stessa un TextWriterTraceListener il quale si occuperà di scrivere effettivamente le informazioni che vorremo loggare specificando...
Il namespace System.Diagnostics del framework 2.0 espone una nuova classe StopWatch molto utile quando dobbiamo fare misurazioni di intervalli di tempo, finalmente per misurare un determinato intervallo di tempo basterà scrivere:
Dim watch As Stopwatch = Stopwatch.StartNew...Dim interval As TimeSpan = watch.Elapsed
Ottenendo un TimeSpan che possiamo analizzare a piacere.La classe StopWatch, basata su Timers ad alta risoluzione espone i metodi Start,Stop e Reset attraverso i quali possiamo resettare il nostro cronometro.Volendo effettuare misurazioni in ticks o millisecondi è possibile usare i metodi ElapsedTicks ed ElapsedMilliseconds.
E' disponibile sul sito Microsoft questa utility che oltre a permettere di:
Effettuare il back e restore del contento della vostra chiavetta USB creando dei named sets
Creare delle chiavette Autorun (eventualmente installando il .NET Framework)
Aggiungere devices alla vostra rete WI-FI semplicemente inserendo la chiavetta USB.
L'utility funziona solo su Windows XP ed ha qualche issues (descritto nel file doc installato col programma) ad esempio non riconosce le chiavette che vengono identificate come FIXED_DISK anziche' REMOVABLE_DEVICE.
Un dettaglio interessante e' che all'interno del path di installazione dell'applicazione trovate una dll chiamata CopyFilesDialog.dll la quale contiene dei metodi interessanti per copiare una directory da...
Jay Roxe PM di Visual Basic (quelli di voi che hanno partecipato al workshop Whidbey Reloaded senz'altro se lo ricordano) ha appena annunciato l'apertura di VBRun, una sottoarea del VB Development Center dedicata a chi usa VB6 e che magari sta iniziando a valutare VB.NET.Il sito e' appena stato aperto e Jay e' interessato ai vostri pareri su come rendere VBRun ancora piu' ricco e utile per chi usa Visual Basic (VB6 o .NET) come linguaggio di programmazione preferito.
Ogni applicazione ha un set di informazioni che è comodo vengano rese "configurabili" esternamente, ad esempio la classica stringa di connessione ad un database o il set di items da visualizzare in una determinata area del nostro programma.Di fronte ad una necessità di questo tipo la risposta è: Usare il file .config e la relativa classe ConfigurationSettings la quale ci permette di accedere agevolmente a tale informazioni.Quando le informazioni vanno oltre però la classica configurazione "Nome=Valore" le cose si complicano leggermente, ad esempio mi sono trovato a dovere memorizzare una serie di items che verranno successivamente mappati su istanze di...