Month: June 2011

Per gli sviluppatori WP7….è arrivato il Mango !

1234.Mango-windows-phone-7_7DCF1A33

 

Sul blog ufficiale di Windows Phone 7 è stata finalmente data la notizia che tutti gli sviluppatori attendevano con ansia….è arrivato il Mango !

E’ stata infatti rilasciata la ROM in Beta della nuova versione di Windows Phone (ormai imminente 7.1) ovviamente solo per coloro che sono iscritti al Marketplace. Finalmente, sarà possibile testare le nuove funzionalità non solo sull’emulatore fornito con i tools (anch’essi in Beta) ma anche sul device fisico che ovviamente va aggiornato.

Si raccomanda di fare molta attenzione alla procedura di aggiornamento del firmware; si corre il rischio di rendere il proprio dispositivo inutilizzabile se qualcosa va storto. E’ importante eseguire una copia di backup di tutti i dati.

Tutti i dettagli li trovate qui.

XElement.Descendants() versus XElement.Elements()

Le classi XDocument e XElement forniscono due metodi che, a prima vista, sembrano dover fornire un risultato molto simile ma nei fatti così non è. I metodi in questione sono :

  • Descendants() : ritorna tutti i “discendenti” del document root/elemento oppure quelli con uno specifico nome (se passato come parametro);
  • Elements() : ritorna i “figli” diretti del document root/elemento oppure quelli con uno specifico nome (se passato come parametro);

Consideriamo la seguente stringa XML :

string xmls = @"
    <root>
        <node>
            <id>1</id>
        </node>
        <node>
            <id>2</id>
        </node>
        <node>
            <id>3</id>
            <innernode>
                <id>3.1</id>
            </innernode>
            <innernode>
                <id>3.2</id>
            </innernode>
        </node>
        <node>
            <id>4</id>
        </node>
    </root>";

ed il seguente frammento di codice che utilizza la classe XDocument.

XDocument xdoc = XDocument.Parse(xmls);

XElement[] app1 = xdoc.Root.Descendants().ToArray<XElement>();
XElement[] app2 = xdoc.Root.Elements().ToArray<XElement>();

In entrambi i casi facciamo ritornare un array con i nodi individuati dai due metodi.

Di seguito uno screenshot del loro contenuto

6646.XDocument_1_445068F5

Con il metodo Descendants() vengono recuperati tutti i discendenti a qualsiasi livello e quindi per esempio, considerando il nodo più complesso, anche il nodo con id = 3 (posizione 4 nell’array) ma successivamente tutti i suoi discendenti a tutti i livelli (dalla posizione 5 alla posizione 9 nell’array).

1538.XDocument_2_037E6CC6

Viceversa, con il metodo Elements() otteniamo solo i figli diretti del nodo root del documento. Per poter ricavare i loro corrispondenti ulteriori nodi figli, dovremo necessariamente eseguire un’ulteriore interrogazione su ciascuno di essi.

Nokia Developer Site : compare Windows Phone 7.1 !

0675.nokia_wp7_6496BBF0

A seguito dell’accordo raggiunto da Microsoft e Nokia nei mesi passati e nell’attesa di vedere sul mercato i primi terminali Nokia con Windows Phone 7.1 (codename “Mango”), la casa finlandese ha già aggiornato il proprio sito dedicato agli sviluppatori : Nokia Developer.

Oltre alle sezioni dedicate allo sviluppo con Qt, Java e le Web Apps, è stata aggiunta la sezione dedicata a Windows Phone 7.1 con una serie di link relativi ad una panoramica generale sul sistema operativo di casa Microsoft, ai tools di sviluppo, alla documentazione ed alla community.

1018.nokia_wp7_2_620D8A32

I fan della Nokia, se non l’avessero già fatto, possono iniziare da subito a realizzare applicazioni per i nuovi terminali !

Introduzione al .Net Micro Framework

Sono disponibili le slide e la demo della sessione “Introduzione a .Net Micro Framework”tenuta da Mirco Vanini al community meeting di XeDotNet tenuto il 10 Giugno 2011.

Mirco ha anche anticipato la nascita della nuova community italiana TinyCLR, completamente dedicata al mondo del .Net Micro Framework, alla quale spero di poter dare anche io il mio piccolo contributo, così come per il DotNetCampania.

2273.tinyclrit_213B4C5E

Diventare programmatori di Windows Phone 7

Posto questi due interessantissimi link relativi ad un’esperienza di vita di uno sviluppatore e che può tornare utile a tutti coloro che volessero intraprendere la medesima strada. Io avevo iniziato a pensarci ma dopo aver capito che le cose sono praticamente “impossibili”….sto pensando di desistere…vedremo.

Diventare programmatori di Windows Phone 7 – Burocrazia e ITIN – Parte 1

Diventare programmatori di Windows Phone 7 – Burocrazia e ITIN – Parte 2

Devexpress.com : Webinars gratuiti su WP7 tra Giugno e Luglio

Sul sito Devexpress.com, tra Giugno e Luglio ci sarà una serie di Webinars su Windows Phone 7 presentati da Chris Williams che è un XNA MVP. Di seguito vi riporto l’elenco delle sessioni che sono tutte alle ore 19.00 ed il link alla pagina per registrarvi.

16 Giugno

Deeper Dive Into XNA on Windows Phone

This webinar covers using the phone specific features in more depth with XNA. Topics covered include touch input and gestures, the accelerometer, accessing the camera and more.

7 Luglio

Building a pathfinding system using waypoints with XNA on WP7

This webinar builds on the previous webinar (#4) to provide a degree of artificial intelligence for the creatures in your game by creating a system of waypoints they can use to navigate the terrain on your map.

23 Giugno

Deeper Dive Into Silverlight on Windows Phone

This webinar covers using the phone specific features in more depth with Silverlight. Topics covered include touch input and gestures, the accelerometer, accessing the camera and more.

14 Luglio

Using the Push Notifications Service in your apps or games

This webinar explains the Microsoft Push Notification Service and how to use it to create Tile, Toast and Raw (in-app) updates.

30 Giugno

Building a Scrolling Tile Engine with XNA on Windows Phone

This webinar shows basic techniques for creating games that use a scrolling tiled map. Displaying sprites (2D graphics) is also covered.

21 Luglio

Making Money From Free Apps with the Microsoft Ad SDK

This webinar covers the concepts behind ad supported software and includes setting up an account in Microsoft PubCenter, setting up applications and ad units in Pubcenter, and finally using the Ad SDK to show ads in your apps and games.

Template SketchFlow per Windows Phone 7

Sul sito CodePlex al seguente link, è disponibile un nuovissimo template SketchFlow per la realizzazione di applicazioni per Windows Phone 7. Questo template non può, però, essere utilizzato con l’Expression Blend 4 fornito con Visual Studio 2010 Express per Windows Phone 7ma può essere utilizzato solo dopo aver installato Expressione Blend 4 con SketchFlow (attraverso Expression Studio 4 Ultimate oppure Visual Studio 2010 Ultimate). Sono ovviamente necessari anche i developer tools per Windows Phone 7.

3755.wp7_sketchflow_426A8215 4370.wp7_sketchflow2_1E81AABB

8836.wp7_sketchflow3_6A6D0B67 0564.wp7_sketchflow4_1AB3E01E

2185.wp7_sketchflow5_3192B19A

DebuggerDisplayAttribute : object inspection durante il debug

Durante una sessione di debug, Visual Studio ci offre la possibilità di ispezionare lo stato di un oggetto visualizzando i valori che assumono i campi e le proprietà dell’oggetto stesso. Quando una classe è molto complessa, però, è tedioso analizzarne singolarmente tutti i membri per valutare se lo stato dell’oggetto è coerente con le nostre attese. Visual Studio ci offre una feature che possiamo sfruttare per ovviare a questo inconveniente.

Comportamento base Object.ToString()

Consideriamo una banalissima classe Person …

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

… ed un’applicazione che istanzia un oggetto di questa classe e lo utilizza in qualche modo.

static void Main(string[] args)
{
    Person person = new Person() { FirstName = "Paolo", LastName = "Patierno" };
    ...
    ...
    ...
    Console.ReadLine();
}

Se eseguiamo l’applicazione in modalità debug e ci posizioniamo con il puntatore del mouse sull’oggetto person, Visual Studio visualizzerà la seguente informazione.

0508.dd_1_5DC33464

Esso rappresenta il nome della classe (nella forma <Namespace>.<Class>) di cui l’oggetto ne è un’istanza. Come si riesce ad ottenere questo comportamento ?

Ebbene, Visual Studio non fa nient’altro che eseguire il metodo ToString(), che come sappiamo fa parte della classe Object che è base di tutte le altre classi. Se una classe, non esegue l’override di questo metodo, il suo comportamento base è quello di visualizzare il nome della classe stessa.

Override del metodo ToString()

E’ possibile quindi sfruttare questa potenzialità eseguendo l’override del metodo ToString()nella classe Person per far visualizzare in debugging una sorta di summary informativo dello stato dell’oggetto.

public override string ToString()
{
    return String.Format("FirstName = {0}, LastName = {1}", this.FirstName, this.LastName);
}

Eseguendo nuovamente l’applicazione, l’output sulla variabile person sarà il seguente.

3683.dd_2_5C126890

In questo modo, abbiamo sott’occhio lo stato complessivo dell’oggetto (o almeno le informazioni che più ci interessano).

L’attributo DebuggerDisplay

Dal .Net Framework 3.5 è stato introdotto l’attributo DebuggerDisplayAttribute (nel namespace System.Diagnostics) da applicare ad una classe, che ci permette di ottenere il medesimo risultato senza la necessità di eseguire l’override del metodo ToString().

[DebuggerDisplay("FirstName = {FirstName}, LastName = {LastName}")]
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Esso prevede una stringa in ingresso che definisce la formattazione delle informazioni che vogliamo visualizzare (in maniera del tutto simile al String.Format() utilizzato precedentemente all’interno del metodo ToString()). Attraverso una sintassi del tipo{identificatore} è possibile accedere ad un campo, proprietà o addirittura un metodo della classe stessa.

Nel nostro caso, il risultato sarà del tutto analogo al precedente

2337.dd_2_507CAB51

Se avessimo addirittura un metodo che esegue una computazione e ritorna un valore, Visual Studio lo eseguirebbe in fase di debug visualizzandoci il risultato.

[DebuggerDisplay("FirstName = {FirstName}, LastName = {LastName}, Computation = {SomeMethod()}")]
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public override string ToString()
    {
        return String.Format("FirstName = {0}, LastName = {1}", this.FirstName, this.LastName);
    }

    public int SomeMethod()
    {
        int result;
        ...
        ...
        return result;
    }
}

Ottenendo il seguente risultato

0844.dd_3_020818E7