70-480 – Programming in HTML5 with JavaScript and CSS3

Ciao a tutti,
oggi sono riuscito con successo a dare l’esame 70-480 Programming in HTML5 with JavaScript and CSS3 che mi permette effettuare l’upgrade della mia attuale MCPD Web Application vs MCSD Web Application.

L’esame non è particolarmente complesso, serve una buona conoscenza della semantica HTML 5, quando e come usarla, una valida conoscenza della DOM (Document Object Model) e l’uso di Javascript, Prototype e ovviamente JQuery e Query Selectors.

Come materiale di riferimento io ho optato per seguire il Jump Start offerto di Miscrosoft, qui il link:
http://channel9.msdn.com/posts/Developing-Windows-Store-Apps-with-HTML5-Jump-Start-01a-Designing-a-Windows-8-App-Part-1.

Maurizio

Microsoft Build 2012 Channel

Ciao a tutti,
per chi ancora non lo sa 🙂 sono disponibili tutte le sessioni dell’evento Microsoft più importante dell’anno Build 2012 a questo indirizzo:
Build 2012

Moltissimi contenuti per lo sviluppo delle nostra App per Windows 8, disponibili gratuitamente ….

Maurizio

Framework.NET 4.5 to Support Zip File Manipulation Out of the Box

Ciao,

giusto in questi giorni durante la fase di realizzazione di un App per Windows 8, mi sono imbattuto nell’utilizzo di una delle novità del Framework 4.5, haimè poco pubblicizzate, ma che ritengo di notevole interesse, costituita dalla possibilità di manipolare archivi compressi con l’algoritmo Zip classico.

Stiamo parlando di un’aggiunta al già esistente namespace System.IO.Compression che ora viene incontro all’esigenza della gestione di archivi compressi.

Dopo questa prima sperimentazione posso assolutamente dire che questo nuovo namespace è un pò spartano, ma comunque un buon supporto se non abbiamo esigenze particolari, se invece abbiamo la necessità di usare funzionalità avanzate SharpZipLib e DotNetZip rimangono le library di riferimento. 🙂

Ad ampliare System.IO.Compression.dll ora abbiamo a disposizione il namespace System.IO.Compression.FileSystem.dll dove mettiamo in evidenza le classi:

System.IO.Compression.FileSystem.ZipFile
System.IO.Compression.FileSystem.ZipArchive

Partiamo con la classe ZipFile dove troviamo 2 metodi principali:
– CreateFromDirectory
– ExtractToDirectory

I due metodi ci permettono di zippare/upzippare un archivio in una determinata destinazione, vedi esempio qui sotto:

ZipFile.CreateFromDirectory("", "", CompressionLevel.Optimal, true)
ZipFile.ExtractToDirectory("", "")

Il nuovo namespace mette a disposizione due classi chiamate ZipArchive e ZipArchiveEntry, le quali rappresentano, rispettivamente, un archivio Zip e una entry, cioè un singolo elemento dello Zip/Archivio.

La classe ZipFile, vista in precedenza, espone un metodo Open che restituisce un’istanza di ZipArchive.
E’ quindi possibile leggere il contenuto dell’archivio eseguendo una semplice interazione della collezione Entries che risulta essere una ReadOnlyCollection vedi esempio:


using(ZipArchive zip = ZipFile.Open("", ZipArchiveMode.Read))
{
foreach(var item in zip.Entries)
{
Console.WriteLine("FileName: {0} ", item.FullName)
}
}

Ecco le proprietà della classe ZipArchiveEntry:
– FullName (che identifica il path completo del file)
– CompressedLength (dimensione in bytes da compresso)
– Length (la dimensione originaria del file)
– Name (nome senza il path)
– LastWriteTime (data/ora dell’ultima modifica)

Creazione di un Archivio compresso:

using(ZipArchive zip = ZipFile.Open("", ZipArchiveMode.Create))
{
zip.CreateEntry("", CompressionLevel.Optimal)
}

Modificare un archivio Zip esistente aggiungendo o rimuovendo file:

using(ZipArchive zip = ZipFile.Open("", ZipArchiveMode.Update))
{
zip.CreateEntry("", CompressionLevel.Fastest)
ZipArchiveEntry zipEntry = zip.GetEntry("")
zipEntry.Delete()
}

Vista la semplicità di utilizzo non mi soffermerei troppo sulle varie implementazioni mostrate, ma aggiugeree qualche considerazione:
– La classe ZipArchive implementa l’interfaccia IDisposable quindi è consigliato l’utilizzo nel blocco using.
– Durante la creazione di un archivio compresso i file elencati verranno aggiunti allo Zip solo quando il blocco using sarà finalizzato.
– Nella fase di Update di un archivio compresso, le modifiche saranno applicate solo quanto il blocco using sarà finalizzato.

Bene, credo di avervi raccontato tutta la mia esperienza sull’argomento, come accennato prima, il nuovo utilissimo namespace è ancora un pò spartano viste le poche funzionalità a disposizione, ma è comunque un inizio è un buon supporto nell’attesa di una sua estensione nelle prossime versioni del Framework.

Maurizio 🙂

Single && Double – come utilizzare il .NaN????

Ciao a tutti,
Oggi parleremo delle strutture Single && Double, visto le richieste avute in questo periodo da parte di amici e colleghi …
Le strutture Single e Double contengono al suo interno delle proprietà chiamate:
PositiveInfinity
NegativeInfinity
NaN
utilizzate dal .NET Framework per rappresentare questi stessi valori.

Questi valori corrispondono a sequenze di bit, specifiche dello standard IEEE. IEEE Standard
Tuttavia, questi schemi di bit non sono univoci, quindi non è raccomandato utilizzare questi campi per le operazioni di confronto.
Prendiamo per esempio, che la variabile d è un NaN. (ricordo che un NaN si può diciamo “generare” sommando un PositivoInfinito su un NegativoInfinito).
Il controllo comparativo:

 d == Double.NaN 

restituisce false se lo schema di bit di d non corrisponde esattamente con quella di Double.NaN.
Per conoscere lo “status” di un particolare numero, è raccomandato l’utilizzo dei metodi statici messi a disposizione dal .NET Framework:

 Double.IsNaN (d)

Maurizio