Roberto Brunetti Mobile Blog

Bridging the Mobility Gap !

Recent Posts

Tags

Community

Email Notifications

.NET Blogs

Archives

October 2005 - Posts

SQLCE/Mobile Base Table Cursor

Mi scuso con tutti, ma in questi giorni siamo tutti presissimi nella preparazione di DevCon 2005: ho veramente poco tempo per inserire info tecniche e rispondere nei forum.

Oggi, però, fra le prove che sto facendo con la versione finale di SQL 2005 mobile scaricata venerdì notte, ho avuto il piacere di verificare come il nuovo motore (il Query Processor è stato completamente riscritto rispetto alla versione 2.0) sia un buon 30% più veloce sul database di un cliente che ha 100.000 record (sono quasi 1Gb di database .SDF). E' più veloce sia sulle query tradizionali "SELECT xx", in update (in 23% nel mio caso).

In un database di questo tipo conviene comunque eseguire Seek al posto di Select che sfruttano direttamente i Base Table Cursor con indice, che è più veloce rispetto al SqlCeDataReader (che resta il modo più veloce di eseguire Select), che a sua volta è più veloce rispetto al nuovo SqlCeResultSet (che però offre possibilità di binding e update). Da 5 a 7 volte più lento è l'utilizzo di una DataTable che oltretutto fa double buffering dei dati arrivando al limite dei 32 Mb per processo offerti dalla piattaforma (sempre con questo DB di riferimento).

Ecco un esempio: il codice è molto semplice e personalmente lo uso ovunque si pensi ad una dimensione "consistente". Unico problema: basandosi sul Base Table Cursor non si possono ovviamente fare Join.

cmd.CommandType = CommandType.TableDirect;
cmd.CommandText = "tabMagazzino";
cmd.IndexName = "PK_tabMagazzino"  //Assunzione: L’indice contiene una sola colonna [int] Leggo il record con IdMovimento (PK) 5000 - 5500.

object[] start = new object[1];
object[] end   = new object[1];
start[0] = 5000; // array di parametri start     
end[0]   = 5500; // array parametri end 

cmd.SetRange(DbRangeOptions.Default, start, end);

SqlCeDataReader rdr = cmd.ExecuteReader();            
rdr.Seek(DbSeekOptions.FirstEqual, 5000);

while (rdr.Read()
// Lettura tradizionale 
ActiveSync 4.0 Throubleshoot

Finalmente !!!

Un po' di info ufficiali sui problemi relativi a ActiveSync 4.0 su connessioni USB, sincronizzazioni fra device e desktop.

Link: http://www.microsoft.com/windowsmobile/help/activesync/default.mspx

 

Posted: 10-29-2005 11:41 by Roberto Brunetti | with no comments
Filed under:
Autovelox per TomTom 3/5

Viste le due richieste che mi sono arrivate, questo il programmino che si monta su Tom Tom (occhio a scaricare la versione corretta in base alla versione di Tom Tom) che segnala (con voce e simboli) gli autovelox. http://checkpoint.oabsoftware.nl/index.php?MainURL=body-download.htm

Lo uso da mesi e devo dire che ci prende parecchio: gli autovelox disponibili sono quelli fissi, i tollgate camera, le telecamere sui semafori e le section camera autostradali. Gli autovelox sono indicati come normali POI (Point of Interest) di Tom Tom, ma grazie al softwarino si ottengono le indicazioni vocali. Inoltre l'interfaccia consente di sincronizzare prima di una partenza i POI aggiornati e segnalare eventuali autovelox trovati per strada e non presenti. Alla prossima sincronizzazione con il loro server vengono uploadati i nuovi POI.

In attesa del servizio diretto da Tom Tom in Italia, credo sia una buona soluzione. Vi consiglio di leggere attentamente il manuale per configurarlo in modo corretto: ad esempio i file audio di segnalazione vanno scaricati a parte (in inglese...ma volendo potete rifarveli in italiano) e associati a ogni POI da segnalare. 

Il tutto comprende anche alberghi, ristoranti, campeggi etc...ma credo sia la parte meno interessante :-)

Posted: 10-25-2005 14:04 by Roberto Brunetti | with no comments
Filed under:
Resco Mobile Internet Toolkit V 2.0

Rilasciato il popolare tool per creare interfacce utenti su Windows Mobile: http://www.resco.net/developer/press/releases/2005-10-12.htm

Dell Axim X50/X50V Upgrade to Windows Mobile 5.0
Dell ha rilasciato l'upgrade: per gli interessati: http://blogs.devleap.com/rob/default.aspx
Posted: 10-17-2005 18:51 by Roberto Brunetti | with no comments
Filed under:
HTC Profet

Riporto as is:

  • built-in FM Radio
  • built-in Wi-Fi (unknown whether also 802.11g or only 802.11b)
  • powered by Windows Mobile 5.0
  • processor: 416 MHz
  • display: QVGA (240x320 pixels), 65k colors
  • camera: 2 megapixel with Flash
  • form factor: Similar size as Magician but Slimmer.
  • cellular networks support: EDGE, GPRS, GSM
  • ROM and RAM: still no information available
  • Posted: 10-17-2005 18:42 by Roberto Brunetti | with no comments
    Filed under:
    Avalon (WPF) su Windows CE 5.0

    Ecco una video preview (in inglese): mms://wm.microsoft.com/ms/msnse/0510/25408/3M_eLearning_MBR.wmv

     

    .NET CF 2.0 e Threading

    Articolo da me pubblicato su week.it del 25/9.

    La versione 2.0 del .NET Compact Framework aggiunge funzionalità che possiamo definire mancanti nella versione attuale.
    Nella versione attuale è possibile creare solo thread foreground, mettere un thread in sleep, definire la priorità di un thread. Alcune classi implementano il modello classico modello Begin/End: ad esempio è possibile invocare un web service in modo asincrono utilizzando BeginInvoke e EndInvoke. Mancano all’appello la possibilitò di fare Abort e Join, così come la possibilità di dare un nome univoco al thread.
    La versione 2.0 del .NET Compact Framework (attualmente in Beta2) consente di definire thread in Background tramite la proprietà lettura/scrittura IsBackground. Come per il framework desktop, i thread in background vengono abortiti dal Common Language Runtime alla chiusura dell’applicazione. Per default i thread sono comunque Foreground.
    E’ possibile richiedere l’abort di un thread tramite il metodo Abort() e intercettare l’eccezione di tipo ThreadAbortException evitando di definirsi variabili esterne da interrogare per capire se dobbiamo fermare l’esecuzione di un thread.
    Nella versione 1.0 si utilizzavano gli AutoResetEvent per “aspettare” la fine del lavoro di un thread utilizzando il metodo Set() all’interno del thread e il metodo WaitOne(). Anche se questa tecnica è efficiente ci costringe a definire un AutoResetEvent per ogni thread da monitorare. Nella versione 2.0 non occorre definire nessun AutoResetEvent in quanto disponibile il metodo Join().
    Molte di queste tecniche sono disponibili attualmente con OpenNETCF, famosa libreria shared source disponbile su www.opennetcf.org ad oggi in versione 1.3, che mette a disposizione la classe ThreadEx nel namespace OpenNETCF.Threading.
    Un'altra limitazione della versione 1.0 del .NET Compact Framework è rappresentata dal meccanismo Control.Invoke. Come sappiamo non si può aggiornare un controllo dell’interfaccia utente da un thread diverso dal proprietario (thread che lo ha creato), quindi si ricorre al metodo Invoke della classe Control per far aggiornare al thread “originale” le proprietà del controllo. Nella versione 1.0 non è possibile passare parametri al metodo invoke, quindi occorre ricorrere ad una o più variabili esterne per contenere i valori delle proprietà da aggiornare.
    Nella versione 2.0, innanzi tutto, otteniamo un’eccezione  (NotSupportedException) invece di un crash dell’applicazione se per sbaglio aggiorniamo un controllo da un thread separato, e inoltre, è possibile tramite un delegate passare direttamente parametri al metodo Invoke.  Si può invocare anche in modo asincrono il metodo Invoke tramite BeginInvoke e EndInvoke evitando di attendere, nei casi desiderati, l’aggiornamento del controllo.
    Ovviamente è possibile utilizzare le nuove caratteristiche del linguaggio C# 2.0 nei contesti citati in questo articolo. Ad esempio è possibile usare un metodo anonimo così come un delegate generico per aggiornare diversi tipi di controllo sul Control.Invoke.

    Mobile Dev Upgrade to 2.0

    Oggi giornata di pubblicazione schede corsi :-)

    Nuovo corso DevLeap della serie Core (Advanced). E' un corso avanzato che affronta le novità del .NET Compact Framework 2.0, SQL 2005 Mobile, le classi per l'utilizzo di MSMQ in scenari mobile. Tratta argomenti quali multithreading e nuove caratteristiche per gestione della memoria, la JIT compilation e l'utilizzo di classi Windows Mobile 5.0.

    E' adatto a coloro che utliizzano dalla versione 1.0 e che vogliono approfondire lo sviluppo in ambiente mobile con .NET 2.0, SQL 2005 Mobile, MSMQ. Tutti gli argomenti, come sempre, sono completamente personalizzabili in base alle esigenze del cliente. La scheda tecnica del corso è disponibile sul nostro sito: http://www.devleap.com/document.aspx?id=3784. Il corso si affianca il corso Intro e il corso Core sullo sviluppo mobile con la versione 2.0 del .NET Compact Framework .

    Mobile Dev in .NET 2.0 Core

    Nuovo corso DevLeap della serie Core (Advanced): è la rivisitazione del corso Mobile Dev in .NET Core in versione .NET Compact Framework 2.0 e SQL 2005 Mobile. E' un corso avanzato che affronta le problematiche di sviluppo in ambienti con risorse limitate dove spesso 500 KB di RAM sono importantissimi. E' adatto a coloro che vogliono approfondire lo sviluppo in ambiente mobile con .NET 2.0 e SQL 2005 Mobile. Tutti gli argomenti, come sempre, sono completamente personalizzabili in base alle esigenze del cliente. La scheda tecnica del corso è disponibile sul nostro sito: http://www.devleap.com/document.aspx?id=3783. Il corso si affianca il corso Intro sullo sviluppo mobile con la versione 2.0 del .NET Compact Framework. Non è necessario seguire il corso sulla 1.0 per partecipare a questo corso. A breve pubblicheremo la scheda del corso Mobile Development Upgrade to .NET 2.0 Core: si tratta di un corso avanzato di upgrade dalla versione 1.0 alla versione 2.0.

    Mobile Dev in .NET 2.0

    Nuovo corso DevLeap: è la rivisitazione del corso Mobile Dev in .NET rivisto in versione .NET Compact Framework 2.0 e SQL 2005 Mobile. E' un corso introduttivo ma che da subito indirizza i partecipanti verso il corretto utilizzo delle tecnologie. E' adatto a coloro che vogliono iniziare a svilluppare in ambiente mobile con .NET 2.0. Tutti gli argomenti, come sempre, sono completamente personalizzabili in base alle esigenze del cliente. La scheda tecnica del corso è disponibile sul nostro sito: http://www.devleap.com/document.aspx?id=3782. Il corso si affianca ai due corsi Intro e Core sullo sviluppo mobile con la versione 1.0 del .NET Compact Framework. Non è necessario seguire il corso sulla 1.0 per partecipare a questo corso. A breve pubblicheremo la scheda del corso Mobile Development in .NET 2.0 Core: si tratta di un corso avanzato sullo sviluppo mobile con .NET 2.0 che scende nei dettagli del CLR, Multithreading, SQL 2005 Mobile, Performance, MSMQ.

    Qualche dettaglio:
    Il corso affronta problematiche e analizza le tecnologie di sviluppo in ambiente mobile lato client e lato server con .NET 2.0.
    Nella scaletta presentata (completamente personalizzabile) si parte dalla panoramica dei dispositivi sul mercato per metterne in luce caratteristiche e differenze e per chiarire ogni dubbio sulle sovrapposizioni fra tecnologie. Windows CE 3.x/4.x, Pocket PC 2000/2002/2003/5.0, SmartPhone 2002/2003(5.0, Tablet PC e Smart Display verranno correttamente inquadrati nelle loro rispettive funzioni.
    Segue l’importante analisi dei modelli applicativi, fondamentale per capire le diverse possibilità di sviluppo di un’applicazione online, offline, web-based o smart client. Vedremo contestualmente vari scenari applicativi e soluzioni di connettività.
    Scenderemo poi sulla piattaforma .NET Compact Framework per poi analizzare Windows Form, Controlli e Custom Control. Dopo una introduzione alla gestione degli errori, vedremo XML e le classi relative del .NET Compact Framework per poi dedicarci al supporto dei Web Service.
    Grande spazio viene dedicato all’accesso alle informazioni con ADO.NET e SQL 2005 Mobile. Quest’ultimo apre una serie di considerazioni sulle strategie di sincronizzazione dei dati e sulle modalità di lavoro offline.
    Si possono sviluppare soluzioni smart client per SmartPhone 2003 con le stesse metodologie affrontate per lo sviluppo su Pocket PC, pur con qualche limitazione. Vedremo quindi le differenze fra i due ambienti.
    Prima di dare uno sguardo al futuro di queste tecnologie in continua evoluzione, analizzeremo una serie di Tips&Tricks per la costruzione di applicazioni efficienti in un ambiente profondamente diverso da quello Desktop e Server.
    Statistiche sulla Beta2 di .NET CF

    Ho trovato queste info direttamente sul blog di Mike Zyntel. Sono i numeri che accompagnano la Beta2.

    Bugs opened, reviewed and fixed or closed : 11,831

    Test executables run in final test pass: 546,940

    Test cases run in final test pass: 3,548,056

    Devices used in final test pass: 94

    Global versions tested: CHS, CHT, ESP, FRA, ITA, JPN, KOR, PTB, USA

    Apps tested for app compat: 326

    Performance scenarous tested: 230

    Windows Mobile 5.0 Managed API

    Articolo week.it del 26/6/2005

    Windows Mobile 5.0 presenta varie novità che consentono di far interagire il codice con l’utente.
    Sicuramente la più importante è il fatto che molte funzionalità utili nello sviluppo end-user sono esposte da Api Managed, in altre parole classi .Net accessibili senza P/Invoke o componenti di terze parti dal .Net Compact Framework. Le classi sono raggruppate nel namespace Microsoft. WindowsMobile e sono accessibili sia dal .Net Compact Framework 2.0 attualmente in Beta2 che dalla versione 1.0.

    Telefonia
    Microsoft.WindowsMobile.Telephony è una classe singola che espone il metodo Talk per iniziare una chiamata verso il numero di telefono specificato nel primo parametro. Il secondo parametro booleano serve per richiedere o meno conferma dell’operazione all’utente.

    Intercettazione messaggi - Microsoft.WindowsMobile.Pocket
    Outlook.MessageInterceptor consente di instanziare oggetti di tipo MessageInterceptor che vengono notificati all’arrivo di un messaggio (sms o mail). Per filtrare i tipi di messaggio - per contenuto del body, per mittente e per subject - occorre impostare la proprietà MessageCondition. All’arrivo di un messaggio verrà invocato l’evento specificato. In alternativa possiamo abilitare la notifica verso un’applicazione eseguibile (indicata nel metodo EnableApplicationLauncher) che verrà avviata all’arrivo del messaggio specifico. Cosa che evita di dover tenere l’applicazione in esecuzione.
    Outlook Mobile

    Fino a oggi era possibile lavorare con il modello a oggetti di Pocket Outlook solo con chiamate P/Invoke o tramite componenti di terze parti. Con il .Net Compact Framework 2.0 è possibile accedere a Pocket Outlook anche via Com Interop semplificando molto lo sviluppo di codice. Windows Mobile 5.0 fa un ulteriore passo in avanti esponendo questa Api sotto forma di classi managed quindi accessibili senza nessuno strato d’interoperabilità. Il namespace di riferimento è Microsoft.Wi ndowsMobile.
    PocketOutlook che contiene classi specifiche per ogni entità presente in Outlook Mobile.
    La prima operazione da effettuare è aprire una OutlookSession che consente di utilizzare le classi EmailAccount e SmsAc count per lavorare con le due classiche tipologie di messaggi. Tramite la classe EmaiMessag, per esempio, si possono poi inviare messaggi. Esistono classi Recipient, Task e Appointment così come le relative collection TaskCollection, ContactCollection e AppointmentCollection.

    Contatti e immagini
    Tramite la classe ChooseContactDialog è possibile aprire l’elenco dei contatti e ottenere come valore di ritorno il contatto selezionato dall’utente. Tramite la classe ChoosePictureDialog è possibile aprire una maschera di scelta delle immagini presenti sul device (o scheda): il valore di ritorno sarà il nome del file selezionato. La classe CameraPictureDialog consente invece d’interagire con la telecamera del device e ottenere l’immagine fotografata in tempo reale.
    Nel namespace Microsoft.W indowsMobile.

    Status
    Si trovano classi utilissime per accedere alle proprietà e lo stato del sistema: si possono ottenere informazioni su: orientamento dello schermo, carica della batteria, connettività disponibile, connessione alla rete elettrica, stato di sincronizzazione via ActiveSync. Come si può notare sempre più funzionalità native vengono esposte sotto forma di classi managed completando il panorama di funzionalità creato con Windows Mobile 2003 e il .Net Compact Framework 1.0.

    .NET Compact Framework 2.0

    Articolo pubblicato su week.it del 5/7/2005.

    La prossima versione del .NET Compact Framework introduce nuove funzionalità sotto forma di classi supportate e migliora le performance in molte aree funzionali già presenti nella versione attuale.

    Per quanto riguarda le caratteristiche generali citiamo la possibilità di fare Unload di Application Domain, la possibilità di usare Friend Assembly in C#, la migliorata gestione dei thread con BeginInvoke e EndInvoke per chiamate asincrone.

    System.Xml supporta XmlSerializer per la serializzazione delle classi, ricerche Xpath su documenti XML e l’utilizzo di XSD (XML Schema Definition) associati a documenti XML, con conseguente possibilità di validazione.

    Finalmente il DataSet espone il metodo GetChanges, ben noto agli sviluppatori desktop, per creare un nuovo DataSet con le sole modifiche effuttuate alle tabelle contenute in esso. Questo consente di inviare solo i dati modificati verso Web Service che provvederanno all’aggiornamento effettivo del database riducendo notevolmente il carico sulla rete. Ad oggi tale metodo non esiste, anche se è possibile riscrivere il suo funzionamento: a tale scopo si veda l’articolo http://blogs.devleap.com/rob/archive/2004/11/10/2003.aspx.

    Per quanto riguarda la sicurezza, il nuovo framework supporta NTLM , IPV6, certificati X.509 e le classi per la crittografia.

    Un’altra carattetistica attesa soprattutto da tutti coloro che avevano iniziato lo sviluppo per Windows CE in eMbedded C++ o eMbedded Visual Basic, è la possibilità di invocare oggetti COM. COM Interop consente ad esempio di lavorare con le API esposte da Pocket Outlook (Pocke Outlook Object Model: POOM) e altri oggetti nativi. Le chiamate possono essere effettuate in early-binding o late-binding (IDispatch). Inoltre è possibile seguire il marshaling di tipi grazie all’implementazione di nuovi metodi della classe Marshal, compresi i tipi OLE Authomation. Si può usare l’ormai famoso Tlbimp.exe (Type Library Import Tool)  oppure il classico Add Reference da Visual Studio .NET 2003 per generare lo “strato di interoperabilità” necessario. Non è comunque supportato il Single-Threaded Apartment Model.

    Come nella tradizione .NET è possibile agire sui file di configurazione dell’applicazione (applicazione.exe.config) per forzare le applicazioni scritte per la versione 1.0 a girare con il runtime del framework versione 2.0 senza dover ricompilare il tutto. Anche se ovviamente l’applicazione non sfrutta le nuove funzionalità offerte, si può avvantaggiare delle maggiori performance offerte dalla nuova versione.

    Le performance sono notevolmente migliorate (anche nell’attuale versione beta) nella JIT-Compilation, nell’accesso ai dati su SQL Server for Windows CE, nella chiamata a web service e nella gestione della memoria tramite il Garbage Collector.

    Il nuovo framework consente di compilare e debuggare le applicazioni senza utilizzare Visual Studio .NET e senza impazzire. L’SDK del Compact Framework .NET 2.0 è incluso nell’SDK della versione del Framework .NET 2.0.

     

    AAA. Cercasi 173 persone per Mobility in Microsoft

    Che il mobile rappresenti un'oppurtunità per il futuro lo sapevamo, altrimenti non avremmo aperto questo sito dedicato.

    Se vi interessa fare il salto in MS Redmond e dintorni date un occhio alle persone che cercano per assunzione:

    http://members.microsoft.com/careers/search/results.aspx?FromCP=Y&JobCategoryCodeID=&JobLocationCodeID=&JobProductCodeID=11077,11074,11080,11075,11073,11076,11049,11050&JobTitleCodeID=&Divisions=&TargetLevels=&Keywords=&JobCode=&ManagerAlias=&Interval=10

    More Posts Next page »