March 2007 - Posts
I primi di maggio andrò alla MEDC di Las Vegas dove, fra le altre, si terranno sessioni su Windows Mobile 6.0, .NET CF 3.5 (dovrebbe allinearsi come versione a Orcas).
Le novità sull'SDK per WM 6.0 sono molte ma non stravolgenti; ben più corposo il tema .NET CF 3.5 dove sembra sarà disponibile una versione ridotta di WPF e di WCF.
Se vi interessa l'argomento potremmo inserire nello spazio riservato alle sessioni Bonus una sessione sul nuovo SDK e sui nuovi device. Se l'argomento interessa possiamo anche valutare di sostituire una macro-sessione del terzo giorno con una sessione più approfondita su Windows Embeddeb CE 6.0 e i relativi SDK.
Il nostro obiettivo è quello di fornire contenuti il più possibile aderenti alle vostre esigenze: per farci sapere il tuo parere scrivete direttamente a me all'indirizzo Roberto@DevLeap.it.
Articolo da me pubblicato su week.it del 6/3/2007
Mesi caldi per lo sviluppatore mobile. Fra pochi giorni dovrebbe uscire una prima versione del Windows Mobile 6.0 Sdk, a maggio è previsto il rilascio di Windows Embedded Ce 6.0, mentre il 12 febbraio è stato rilasciato un altro componente della famiglia destinato a chi sviluppa sui minuscoli dispositivi embedded basati su Arm7/Arm9, con o senza Mmu, che da tempo conosciamo con il nome di Spot.
Il framework richiede pochi Kilobyte di Ram (256Kb il minimo richiesto) e un processore “ridicolo” in confronto anche ai dispositivi Windows Ce. Il framework è affiancato da un Sdk che s’installa su Visual Studio 2005 per estendere lo sviluppo di applicazioni C# (per ora Vb.Net non è compreso) anche al mondo Spot. Le librerie a disposizione sono in versione 2.0 e comprendono la classica mscorlib, la System.dll e una serie di liberie Microsoft.Spot che s’installano sotto x:\Program Files\Microsoft .NET Micro Framework\v2.03036\Assemblies. Le librerie comprendono Graphics, Hardware, Native, Net e TinyCore (Tiny Clr era il nome precedente del Micro Framework).
Si possono scrivere device driver direttamente in C# utilizzando le interfacce standard SPI, I2C, GPIO e USART. Interessante è l’estendibilità degli emulatori che consentono di testare e debuggare il codice senza device reali aggiungendo, per esempio, periferiche simulate (sensori o “servi” per esempio).
L’Sdk comprende una serie di sample e un help che, come ormai accade per quasi tutti i prodotti, s’integra con la documentazione di Visual Studio. Ultima nota: il sistema embedded Micro Framework non è real-time.
Altre info
- Un esempio di codice per il classico Hello World usando le librerie Microsoft.Spot è visibile all’indirizzo:
http://blogs.devleap.com/rob/archive/2007/02/22/net-micro-framework-2-0.aspx
Articolo da me pubblicato su week.it del 27/2/2007.
Windows Embedded Ce 6.0 sta per arrivare sul mercato (si parla di maggio) e come ogni nuova versione porta numerosi miglioramenti sia dal punto di vista infrastrutturale che negli strumenti di sviluppo.
La prima novità per lo sviluppatore mobile riguarda il sistema operativo stesso: come accadde nel passaggio da Windows Nt 3.51 a Nt 4.0 (1996) anche nel passaggio da Windows Ce 5.0 alla nuova 6.0 è stato abbandonato il modello “client-server” nelle chiamate fra processi Gui e Api native. Nella nuova versione queste Api girano in kernel mode.
Il motivo di questa radicale modifica però è leggermente diverso da quanto accadde sul fratello maggiore: sicuramente si eliminano le chiamate Lpc (Local Procedure Call) fra Gui e Api sottostanti, processo importante per ridurre il context switch, che però non era così pesante su Windows Ce sin dalla prima versione.
Il vero motivo è eliminare le limitazioni ben conosciute a chi sviluppa in ambiente mobile: il numero totale dei processi è limitato a 32 e lo spazio d’indirizzamento per ciascuno di essi è limitato a 32 MB. Con Windows Ce 6.0 si arriva al limite teorico di 32.768 processi, ognuno con uno spazio di indirizzamento di 2 GB.
Sempre per gli sviluppatori, è in arrivo (sin dal primo di marzo come preview) il nuovo Device Emulator 2.0 che sostituisce il precedente e si integra all’interno di Visual Studio 2005. Dispone di numerosi form factor aggiunti, con cui è possibile configurare il livello di batteria per testare le applicazioni sensibili alla gestione dell’alimentazione.
Il Device Emulator consente d’impostare tre profili d’emulazione: SpeakerPhone, Headset e Carkit per testare le applicazioni in base alle normali configurazioni dei device end-user, che possono appunto essere dotati di cuffie, kit per auto oppure lavorare in modo tradizionale.
Per quanto riguarda il test delle comunicazioni via Gsm, è stato prevista la possibilità d’effettuare chiamate simulate in uscita e in entrata, chiamate su numeri che simulano la “non risposta”, il riaggancio immediato e la linea occupata. FakeGps, ultimo componente del nuovo Device Emulator, consente invece di ricevere dati sulla posizione Gps sotto forma di messaggi Nmea per testare le applicazioni che fanno uso di dispositivi di localizzazione.
La buona notizia è che il .Net Compact Framework resta in versione 2.0 Sp1 e sarà preinstallato su tutti gli emulatori e i device con a bordo Windows Ce 6.0.
Altre info:
http://blogs.devleap.com/rob/archive/2007/03/10/windows-mobile-6-sdk-download.aspx
In questi giorni sono veramente incasinato: un progetto software in partenza, DevCon 2007, la nostra conferenza annuale e la formazione personale. Questo per dire che negli ultimi giorni sono stato un po' assente dal blog. Trovo stasera il tempo di rimettere insieme qualche informazione e screenshot di Orcas CTP di Marzo che uso da qualche giorno. Purtroppo ho cancellato la vecchia macchina virtuale con la January CTP che aveva alcun funzionalità non presenti (perchè non allineate come versione) in quest'ultima CTP: soprattutto in ambiente mobile non abbiamo un versione di .NET CF 3.5 allineata a questa versione di Visual Studio 9.
Le informazioni sono in ordine sparso in base a quanto ho affrontato in questi giorni.
N.B. Le immagini sono leggermente tagliate a destra, ma il loro contenuto è importante solo per la parte visibile.
Team System Application Diagram e Service
Il WebServiceEndpoint è diventato .NETWebServiceEndpoint. A discapito del nome e all'integrazione di alcuni strumenti della versione 9 rispetto a WCF, non consente di creare Endpoint verso servizi WCF. Un collegamento come il seguente crea sempre una Web Reference classica nel progetto consumer del servizio:

In questo caso infatti il client Windows si ritrova una directory Web Reference con all'interno la classica Web Reference con tanto di reference.cs.
Questo accade anche se nei progetti (visualizzandoli nella solution di VS) non esiste più il comando Add Web Reference. Ha preso il suo posto Add Service Reference che consente di creare appunto una reference verso servizi WCF e verso i classici .asmx di .NET 2.0. Il namespace per default è ServiceReference così come il folder nel progetto.
Anche nel caso di "aggancio" con ASMX, lato cliente viene usato WCF tramite un basicHttpBinding o un customBinding.
Il menù Configure Service Reference che dovrebbe essere una sorta di UI helper per la gestione del .config del consumer non è ancora stato implementato in questa CTP.
Refactoring di servizi WCF
Facendo qualche prova capita frequentemente di dover eseguire operazioni di Refactoring: occhio che se fare refactoring dell'interfaccia di un servizio WCF e della classe, la configurazione ABC nel config non viene aggiornata.
Compilazione
Per default il primo progetto creato con Visual Studio 9.0 è ancora legato al runtime .NET versione 2.x. Per legare il progetto al runtime .NET 3.5 si può inserire nel .config (web.config o app.confg) la seguente configurazione del compilatori:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5"/>
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" compilerOptions="/optioninfer+">
<providerOption name="CompilerVersion" value="v3.5"/>
</compiler>
</compilers>
</system.codedom>
Unit Test
Dal menù di creazione di uno Unit Test su un metodo è possibile creare un nuovo test su un assembly al posto del classico codice sorgente. Valgono le regole attuali per i membri private accessibili tramite il PrivateAccessor autogenerabile.
Test List diventa Test List Editor e consente, come adesso, di organizzare i test in raggruppamenti per una più semplice identificazione e esecuzione a comando o su una Build.
E' possible eseguire Unit Test su progetti mobile (Smart Device Project). Nell'immagine seguente mostro la directory dei tool per il device e le relative dll.

La creazione di uno Unit Test (con Add Assembly citato prima) è la seguente:

Il progetto mobile risultante è un Device Project a tutti gli effetti (che potrebbe essere anche fatto girare sul desktop come tutti i progetti mobile con qualche workaround...a tal proposito si vedano i miei post sul sito http://thinkmobile.it). Il framework di esecuzione del test è referenziato (ovviamente) nel progetto test:

Il frameowrk di test per smart device è un subset degli strumenti disponibili nell'edizione Tester di VSTS. Queste le funzionalità non supportate:
- Web tests and the Microsoft.VisualStudio.TestTools.WebTesting API
- Generic tests
- Load tests and the Microsoft.VisualStudio.TestTools.LoadTesting API
- ASP.NET unit tests and Microsoft.VisualStudio.TestTools.UnitTesting.Web API
- C++ test projects
- C++ unit tests
- Data driven unit tests
- Obtaining code coverage data in unit tests
- Creating a performance session
- Web services unit tests
- Working with controllers, agents, and rigs
- The following Team System testing tools are implemented differently for smart devices:
- Smart device specific C# and Visual Basic test projects
- A version of the Test Host adapter that runs on the device
- Extra Test Run Configuration settings for smart devices
- Must attach manually to debug smart device unit tests. For information about manually attaching to process, see How to: Debug while Running a Test in an ASP.NET Solution
- Different method of Test Deployment
- Device specific port of the Microsoft.VisualStudio.TestTools.UnitTesting API with the following classes removed:
- DataSourceElement
- DataSourceElementCollection
- TestConfiguration
- TestConfigurationSection
- WebServiceHelper
Performance Session
Nelle proprietà di una Performance Session è possibile indicare i counter del Performance Monitor da collezionare durante la fase di analisi: questo consente di effettuare analisi più accurate da un unico strumento di analisi. Si può anche decidere di eseguire una Performance Session senza collezionare i dati semplicemente agendo dal menù contestuale (senza dover entrare nelle proprietà)
Durante una sessione di performance si può attivare il Runtime Control che consente di definire vari "mark" per effettuare analisi su porzioni della sessione. I vari mark vengono poi riepilogati nel report al termine della sessione.
E' stata modificata l'interfaccia per l'analisi dei .vps (Performance Session Data) per consentire l'impostazione di query sui dati, filtri sui vari elementi da analizzare: è possibile ad esempio visualizzare solo i dati di una certa function oppure con un certo valore. Il tutto si effettua dall'interfaccia di visualizzazione seguente:

Le query create e i dati relativi possono essere salvati in un file .vsps ed è possibile salvare e ricaricare la definizione delle query tramite file .vspf.
L'analisi dei dati comprende anche ETW, Marks e i processi entrati in causa.
Un nuovo strumenti di analisi consente di visualizzare i "Code Metrics" per capire se il codice di un progetto/solution è complesso da manutenere, il livello di coupling, la profondità gerarchica delle classi e l'ormai famoso indice di Cyclomatic Complexity (già presente nel Code Analysis della versione attuale in forma testuale). Ecco il nuovo strumento su un mio progetto di Test:

ASP.NET
Un nuovo progetto ASP.NET usa i compilatori della versione 3.5: nel web config infatti otteniamo da subito:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5"/>
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" compilerOptions="/optioninfer+">
<providerOption name="CompilerVersion" value="v3.5"/>
</compiler>
</compilers>
</system.codedom>
L'editor delle pagine e in generale dei sorgenti web fornisce Intellisense su Javascript e sulle AJAX. Ecco un esempio su Javascript

Le AJAX Extension comunque vanno installate.
Ho un solo grosso problema: sabato cerco di capire...il designer dei Workflow che dovrebbe avere le nuove dialog per le Rule non si apre :-(
Per il resto, giusto come considerazione, ho montato tutto su una macchina virtuale assegnando 1.360 MB di RAM...e devo dire che viaggia benone, considerando che purtroppo la macchina virtuale è su un disco esterno che non è veloce quanto il mio disco interno. In una settimana, un solo crash dell'ambiente senza perdere niente. Ottimo direi.
Per la parte mobile, purtroppo il .NET CF 3.5 che era presente nella CTP di Gennaio non c'è più. Sabato, dopo la creazione di uno snapshot :-) spero di avere il tempo di provare a montare la parte mobile della CTP di gennaio sopra la CTP di Marzo...speriamo bene :-)
A DevCon 2007 abbiamo sessioni su Orcas e su .NET 3.5
Rilasciato ieri il nuovo Service Pack per il .NET CF versione 2.0.
Per adesso è in versione redistributable; solitamente dopo qualche giorno esce anche la versione Developer che aggancia la nuova versione a VS 2005.
Il download a partire da http://www.microsoft.com/downloads/details.aspx?FamilyID=aea55f2f-07b5-4a8c-8a44-b4e1b196d5c0&displaylang=en.
L'elenco delle fix pubblicate dal team è il seguente :
- Setup install/uninstall fails silently when the MSI is launched from Control Panel-Programs and Features on Vista
- Finalizers fail on RTF objects because COM bindings are already disposed
- VS crashes on trying to attach without setting the Attach Enabled Registry Key
- Thread.Join() fails with ERROR_INVALID_HANDLE on CE 6.0 platform
- Potential memory corruption caused by circular reference
- JIT assertion failure when non-existent COM port is addressed
- TypeLoadException using generics with NETCF 2.0
- IrDA is broken on Windows CE 5.0 devices
- NetCFRPM and MDBG cannot target headless devices
- SerialPort: Data corruption occurs if DataReceived event is used to receive Unicode characters sent across serial ports
- SerialPort: Cannot open a COM port beyond COM9
- SerialPort: GetPortNames() does not return serial port names beyond COM9
- SerialPort: Data corruption occurs if DataReceived event is used to receive Unicode characters sent across serial ports
- NETCF deadlocks on exit if native callback delegate has been called on native thread
- VS 2005 RTM attempts to deploy NETCFv2.wce5.ARMV4I.cab/System_SR_ENU.cab instead of NETCFv2.wm.ARMV4I.cab/System_SR_ENU_wm.cab on Windows Mobile 6 platforms
- XmlSerializerializationWriter: When GetSpecifiedMember returns false serialization is halted resulting in loss of data
- Access violation marshaling a class with a string field
- Stepping out from a Breakpoint after Func eval causes breakpoint to remain at same place and then VS 2005 hangs
- COM: Access violation in N->M byref marshaling
- Native exception in marshalling code when using Interlocked.Exchange
- Access violation in StubPolicyAlloc (eestub\policy.cpp
- SerialPort.Open thows IOException on CE 6.0 devices
- Type.GetDefaultMembers() doesn't return base type's default members
- Installing multiple locales of same MSI results in multiple instances of NetCF showing up in Add Remove Programs
- VS 2005 attempts to deploy System_SR_ENU.cab instead of System_SR_ENU_wm.cab on Windows Mobile 6 platforms
- Debugger does not correctly handle new native threads entering through COM
- NETCFRPM parses connection string improperly when device uses ipv6
- V2 SP2: HttpWebRequest: HTTPS request fails when TLS_RSA_WITH_3DES_EDE_CBC_SHA cipher is used
- Debugger may AV if breakpoints active before F5
- WebBrowser's NavigatingEventArgs does not allow to cancel navigation
- XmlSerializer fails to deserialize enum's with spaces
E' uscito un aggiornamento per i Books Online di SQLCE 3.1.
Da una prima occhiata sembra solamente che non ci siano aggiunte alla documentazione: sono stati corretti tutti i riferimenti a SQL Everywhere che era il nome in codice del prodotto durante lo sviluppo interno.
Una ulteriore stranezza è però il nome attuale "SQL Server 2005 Compact Edition Books Online". Il prodtto aveva infatti perso la "clausola" Server 2005, ma ormai siamo abituati in ambiente mobile ad avere 5/6 nomi per ogni prodotto :-)
Il download da quì : http://www.microsoft.com/downloads/details.aspx?familyid=E6BC81E8-175B-46EA-86A0-C9DACAA84C85&mg_id=10111&displaylang=en
Stavolta è uscito per davvero. Dopo l'errore di pubblicazione di un paio di settimane fa, ecco gli SDK Standard e Professional per Windows Mobile 6.0.
La nuova nomenclatura prevede
- una versione Standard che fa rifermento a quanto conosciuto come SmartPhone
- una versione Classic che fa riferimento al Pocket PC classico
- una versione Professional che fa riferimento al Pocket PC Phone Edition
Le lavorate su entrambe le piattaforme (Pocket e SmartPhone) occorre scaricare entrambe le versioni dell'SDK. Contrariamente a quanto si può pensare infatti, Professional non si riferisce alla versione completa, ma appunto alla versione dell'SDK per Pocket PC Phone Edition.
Se si lavora con Vista serve Windows Mobile Device Center, con XP invece Active Sync 4.5. In entrambi i casi .NET CF 2.0 SP1 e Visual Studio 2005 SP1.
Il download inizia da quì: http://www.microsoft.com/downloads/details.aspx?FamilyID=06111A3A-A651-4745-88EF-3D48091A390B&displaylang=en
Articolo pubblicato su week.it del 7 febbraio 2007
SqlCe nasce nel ’98 in versione 1.0. CE sta per Compact Edition o semplicemente per la piattaforma su cui gira, Windows CE appunto. La seconda versione, alla fine del ’99, (chiamato SqlCE 2.0 in tutte le librerie fisiche client e server) prese il nome di Sql Server 2000 Compact Edition oppure SQL Server for Windows CE 2000.
La terza release esce nel novembre 2005 e tanto per complicare le cose il nome varia da SqlCE 3.0 a Sql 2005 Mobile Edition o anche Sql Server 2005 Mobile Edition. Per gli addetti ai lavori è comunque sempre stato SqlCe 3.0 e, dopo sette anni, ne è stato rivisto l’engine e il query processor che ora si basa su meccanismi euristici (a partire dalle statistiche), come nel fratello maggiore Sql Server. Inoltre, consente l’accesso a più connessioni (aperte da più processi o da più thread) aprendo scenari di replica asincrona durante l’uso del database stesso.
Il prodotto può essere distribuito solo su piattaforma Windows CE (e le varie varianti Windows Mobile) e su Tablet Pc, ma non su Pc tradizionali se non affiancato da Visual Studio 2005. In pratica, si può usare su un desktop ai fini di sviluppo e test, ma non in produzione.
Nel gennaio 2006 si iniziò a parlare anche di Sql Everywhere: in pratica Sql Ce senza la limitazione dell’uso solo su Windows Ce (Windows Mobile 5.0 è basato su Windows Ce 5.0), sul Tablet Pc e sulla macchina di sviluppo con Visual Studio. Quindi Sql Everywhere avrebbe avuto la licenza per girare ovunque (teoricamente anche su un server...ove però chiaramente ricopre solo un ruolo marginale :-))
Il nuovo (in realtà mica tanto) prodotto doveva essere appunto Sql Everywhere e girare anche su un normale pc.
Se siete arrivati fin qui senza mal di testa, dimenticate l’ultima parte su SQL Everywhere perché il nuovo SqlCe ritorna al vecchio nome e si chiama Sql Compact Edition versione 3.1 e gira su Windows Ce, Xp Tablet Edition, Xp e Vista. In altre parole può essere distribuito anche su desktop e piattaforme Windows 32. All’interno di Visual Studio, pèrò, trovate le reference alla versione fisica 3.0. La 3.1 si deve considerare quindi come un service pack per questa versione.
Per il futuro sembra che una versione 3.5 verrà rilasciata insieme a Orcas (nome in codice della prossima versione di Visual Studio) e avrà un nuovo motore di replica dei dati che va oltre l’attuale Rda e Merge Replication e che funzionerà solo sulla 3.5 (ma la 3.1 e la 3.5 potranno girare insieme).
In Orcas inoltre dovrebbe esserci anche un subset di quanto troviamo in .Net 3.0, almeno per la parte Windows Communication Foundation e Windows Presentation Foundation e non ultimo una versione ridotta di LinQ.