Month: February 2011

Windows Phone 7 : preupdate in vista di “NoDo”

In questa settimana, la Microsoft ha eseguito l’aggiornamento dei dispositivi con Windows Phone 7 con un preupdate in vista di “NoDo”.

Io posseggo un LG Optimus 7 (noto anche come LGE900) e purtroppo sino a stasera, collegandomi in Wi-Fi, non ricevevo alcuna notifica di un aggiornamento disponibile. A questo punto ho pensato di collegare il dispositivo al PC per capire se almeno attraverso Zune, veniva rilevata la presenza dell’aggiornamento previsto. Bingo !!

Zune mi segnala la presenza di una nuova versione, la 7.0.7008.0 in luogo della 7.0.7004.0 presente sul mio dispositivo e mi chiede se avviare l’operazione che può durare sino a circa 25 minuti. Non disperate….almeno nel mio caso è durato non più di 10 minuti !

Complessivamente le fasi sono 10 ma le prime 6 sono rapidissime e tra di esse è previsto il download del pacchetto di aggiornamento ed il riavvio del dispositivo.

Passiamo direttamente alla fase 7, in cui viene eseguito un backup dei dati….

5531.update1_111E23DB

…successivamente si passa alla fase di aggiornamento vero e proprio….

5126.update2_5421A45B

…seguita da un riavvio del dispositivo….

7571.update3_32C72021

…e finalmente…l’aggiornamento è completato !

5557.update4_2C38C1F3

Ed ecco il terminale aggiornato.

1526.DSC_0046_4FF70AEF

Windows Embedded CE 6.0 R3 QFEs : Gennaio 2011

Sono stati rilasciati i QFEs di Gennaio 2011 per Windows Embedded CE 6.0 R3 e sono scaricabili al seguente indirizzo :

Windows Embedded CE 6.0 Monthly Update January 2011

Riporto di seguito i principali fix, come descritto nel file allegato al download :

Component:  Cellcore

Component:  CDROM

  • 110112_KB2437113 – This update addresses an issue with CDROM detection and an error that occurs when ejecting CD.

Component:  COMM

  • 110112_KB2484550 – This update addresses an issue with L2TP connection failure through NAT Gateway.

Component:  DirectX

Component:  FSDMGR

  • 110118_KB2482648 – After a suspend-resume operation, any storage volume whose partition type is Microsoft Installable File System (MSIFS) gets remounted as a different volume name. Explorer window to that storage volume gets closed and is inaccessible.

Component:  GDIEX

  • 110125_KB2490604 – This update addresses an issue with possible build breaks.

Component:  Internet Explorer

Component:  RDP

  • 110125_KB2487075 – An error may occur in RDP session if Smart Card redirector is enabled.

Component:  UDFS

wceTip #1 : Conoscere i valori di tutte le environment variables

Il sistema di build di un’immagine di Windows CE 6.0 si basa su una serie di tool (tipicamente file batch) che eseguono delle azioni sulla base di un insieme di environment variables settate automaticamente quando aggiungiamo i catalog items, BSP drivers e quant’altro oppure che possiamo settare manualmente.

Per conoscerle tutte con i relativi valori, è possibile utilizzare il comando set aprendo il prompt del Platform Builder (in VS2005) alla voce di menu :

Build –> Open Release Directory in Build Window

Di seguito uno screenshot …

7762.wce_set_cmd_14E8C845

.netTip #1 : Debugging delle properties in Visual Studio

A partire da Visual Studio 2008 è possibile abilitare e disabilitare il debugging all’interno di una property quando utilizziamo il comando di Step Into. In questo modo, possiamo decidere se debuggare step by step le istruzioni che costituiscono le get e set di una property.

L’opzione è disponibile nel seguente menu :

Tools –> Options –> Debugging –> General

alla voce “Step over properties and operators (Managed only)” (io utilizzo sempre la versione inglese di un qualsiasi ambiente di sviluppo).

8308.debug_prop_0BF54C36

Di default essa è attiva e ciò vuol dire che durante il debug non saremo in grado di debuggare le singole istruzioni che costituiscono il corpo di una property.

Un approfondimento sulla keyword “params”

Introduzione

In C#, attraverso la keyword params, è possibile specificare un numero variabile di argomenti per un metodo. Una possibilità sicuramente utile, quando vogliamo fornire una certa flessibilità a coloro che lo utilizzeranno. Ma come è gestito dal compilatore e dal CLR l’utilizzo di params ?

Il codice IL generato dal compilatore

Consideriamo il seguente codice, nel quale è definito un semplice metodo che esegue una somma di una serie di valori interi passati attraverso un array :

static int Add(params int[] array)
{
    int sum = 0;
    if (array != null)
    {
        for (int index = 0; index < array.Length; index++)
        {
            sum += array[index];
        }
    }
    return sum;
}

Ciò che osserviamo è l’utilizzo della keyowrd params prima della dichiarazione del parametro.

La tipica modalità con cui chiamiamo un metodo con questa firma è la seguente :

int[] array = new int[] { 1, 2, 3, 4, 5 };
int sum = Add(array);

oppure con una sola istruzione :

int sum = Add(new int[] { 1, 2, 3, 4, 5 });

Ciò che facciamo è definire un array di interi previsto dal metodo Add() e lo passiamo come parametro a quest’ultimo.

Ebbene, attraverso l’utilizzo di params, possiamo evitare di definire un array e passare direttamente l’elenco dei valori dei quali vogliamo eseguirne la somma.

int sum = Add(1, 2, 3, 4, 5);

Che cosa accade dietro le quinte che permette questo tipo di notazione ?

Banalmente, il compilatore genera del codice che alloca l’array e lo passa al metodo !

4503.params_60EE7B57

Nella figura precedente, ho evidenziato in rosso la parte di codice IL generata dal compilatore che non fa altro che creare un array con l’elenco dei valori da noi specificati ed invocare il metodo Add().

Nessun argomento ? La differenza di performance …

Detto ciò, consideriamo le due seguenti particolari invocazioni del metodo Add() :

Add();
Add(null);

Non è stato definita alcuna serie di valori sui quali eseguire la somma ma le due soluzioni sono nettamente diverse. Se la prima soluzione sembra essere stilisticamente la migliore, è la seconda che invece garantisce le migliori performance. Infatti, nel primo caso, il compilatore genera del codice IL che alloca un array di dimensione 0 mentre nel secondo caso ciò non accade.

2625.params2_6C7412C9

Possiamo rendercene conto anche eseguendo il debug e constatando che, nel primo caso, l’esecuzione supera il controllo array != null ma non riesce ad entrare nel ciclo for in quanto l’array ha dimensione 0.

6644.params3_7E703089

Nel secondo caso, il parametro array è null per cui il check suddetto non è superato.

1108.params4_077CBC0B

Conclusioni

In definitiva, l’uso di params non è la migliore delle soluzioni per le seguenti motivazioni :

  • viene sempre allocato un array sull’heap;
  • vengono eseguite le operazioni di inizializzazione dell’array;
  • essendo stata allocata memoria heap…c’è sempre il Garbage Collector in gioco;

In molti casi è sempre preferibile definire più overload dello stesso metodo con uno o più parametri e lasciare come ultima possibilità allo sviluppatore l’uso dell’overload con params.

Un esempio noto è il metodo String.Format della BCL che ha i seguenti overload :

  • string String.Format(string format, object arg0);
  • string String.Format(string format, object arg0, object arg1);
  • string String.Format(string format, object arg0, object arg1, object arg2);
  • string String.Format(string format, params object[] args);

In questo modo, lo sviluppatore utilizzerà sempre i primi tre overload fino ad un massimo di 3 parametri. Se necessita di passare un quarto parametro, verrà utilizzato l’ultimo overload con params.

L’individuazione del giusto overload da invocare viene eseguita ovviamente dal compilatore che, in primo luogo verifica se esiste un metodo che non ha params  e che riesce a matchare il numero di parametri passati. Se ciò non dovesse portare ad un risultato, allora il compilatore cerca il match con un metodo che ha una dichiarazione con params.

Windows Phone 7 : aggiornamento rimandato a Marzo ?

7462.windows-phone-7-update_2BDD1D5E

La data del 7 Febbraio, per la quale si era parlato dell’aggiornamento denominato “NoDo”per Windows Phone 7, è ormai passata….e l’aggiornamento non si è visto.

Ufficialmente, Microsoft non ha mai specificato una data precisa per il rilascio ma adesso alcuni rumors indicano come l’8 Marzo la data fatidica.

Sicuramente la marcia di avvicinamento è iniziata con l’aggiornamento al software Zune, necessario per eseguire l’update di Windows Phone 7, e con il rilascio della nuova versione dell’ SDK per gli sviluppatori che contiene anche la funzionalità di copia-incolla.

Sicuramente ne sapremo di più durante il Mobile World Congress che si terrà a Barcellona dal 14 al 17 Febbraio. Potrete seguire online la keynote di Steve Ballmer.

8203.mwlkeynotemicrosoft_42A9E118

Non ci resta che aspettare fiduciosi !