martedì 21 settembre 2010

Da Windows Mobile ad Android

Android droid Questo è il primo articolo di una serie dedicata agli sviluppatori Windows Mobile che hanno intenzione di capire come effettuare il porting di una applicazione esistente o di creare una nuova applicazione per la piattaforma Android. Sto studiando queste cose per puro interesse personale e nel tempo libero: ho pensato che sarebbe stato interessante condividere le cose e i problemi che ho affrontato (e che affronterò), dal punto di vista di uno sviluppatore Windows Mobile. Così ho deciso di pianificare questa serie, che si svilupperà in futuro come tutorial focalizzati sulle minime cose da sapere per poter sviluppare con Android.

Iniziamo con un articolo introduttivo alla piattaforma, alle sue caratteristiche e alle cose che sono richieste per poter iniziare a sviluppare.

 

Requisiti Hardware e Software


Hardware

Per tutte le questioni pratiche, l’unica scelta da fare è quella di decidere se utilizzare un PC (Windows/Linux) oppure un Mac, con almeno 3GB di spazio libero su disco e 2GB di RAM. Opzionalmente, un dispositivo Android può tornare utile per testing/debug (ma tutto può essere fatto utilizzando il solo emulatore software).

 

Software

 

Android Market

Per pubblicare le proprie applicazioni sull’Android Market, è sufficiente registrarsi e pagare una sola volta una piccola quota di iscrizione all’indirizzo http://www.android.com/market/. A differenza degli store Microsoft e Apple, non c’è alcun processo di revisione da parte di Google e la distribuzione delle applicazioni tramite il Market non è esclusiva: è quindi possibile decidere di pubblicare le proprie applicazioni anche tramite altri canali. Inoltre, l’Android Market rende disponibile un meccanismo di licenza integrato e personalizzabile che permette di gestire in modo centralizzato e uniforme le proprie politiche di licenza: tramite questo servizio, le applicazioni possono interrogare l’Android Market a run-time e ottenere lo stato di licenza per l’utente corrente, modificando di conseguenza le opzioni/caratteristiche disponibili a seconda dei casi.

 

Spunti interessanti

 

Sviluppo nativo, .NET e Java

Le applicazioni per Windows Mobile possono essere scritte in C/C++ oppure, con .NET Compact Framework, in VB.NET/C#. Per scrivere applicazioni per Android, oltre ad imparare i suoi framework e diventare abili con Eclipse, bisogna conoscere Java. Se siete dei programmatori C#, a parte qualche piccola differenza sintattica e alcuni costrutti differenti, siete già in grado di leggere e scrivere programmi in Java proficuamente; se conoscete C/C++ o altri linguaggi, imparare Java non dovrebbe essere troppo difficile. Per quelli che non lo conoscono:

  • è un linguaggio orientato agli oggetti (a parte i tipi di dati primitivi, tutte le altre cose in Java sono oggetti);
  • è fortemente tipizzato (i tipi di tutti gli elementi devono essere pre-definiti e le conversioni di tipo seguono delle regole precise e limitate);
  • ha un meccanismo di gestione automatica della memoria: Java gestisce l’allocazione/de-allocazione della memoria ogni qualvolta si creano oggetti. I programmi non hanno accesso diretto alla memoria. Il garbage collector cancella automaticamente gli oggetti per i quali non esistono più puntatori/riferimenti validi e attivi. Tuttavia questo non significa che lo sviluppatore non debba interessarsi alle problematiche della memoria: memory leaks e risorse limitate sono sempre da tenere in conto;
  • è una piattaforma indipendente: un programma Java, in genere, non accede direttamente alle risorse di un sistema ma utilizza una Java Virtual Machine (JVM) come astrazione sull’hardware;
  • è un linguaggio interpretato e compilato: i sorgenti Java vengono convertiti in byte-code, il quale non dipende dalla specifica piattaforma hardware. Il byte-code sarà quindi interpretato (e/o compilato usando tecniche JIT) dalla Java Virtual machine (JVM). Nello specifico, Android utilizza una implementazione realizzata da Google della JVM: la Dalvik VM.

E’ anche possibile (a partire da Android 1.5) sviluppare applicazioni native C/C++ utilizzando l’ Android Native Development Kit (NDK).

 

Memoria ottimizzata, gestione dei processi e servizi

Come Java e .NET, Android utilizza il suo motore run-time e la virtual machine (Dalvik VM) per gestire la memoria delle applicazioni. Differentemente dagli altri, però, il run-time Android gestisce anche il ciclo di vita dei processi: assicura la reattività delle applicazioni bloccando e terminando altri processi attivi ogniqualvolta lo ritenga necessario, al fine di liberare risorse per le applicazioni a priorità più elevata in un certo momento.

In aggiunta, Android supporta applicazioni e servizi progettati per essere eseguiti in maniera invisibile e in background: i servizi permettono di realizzare componenti applicativi che monitorano ed eseguono azioni in maniera automatica e non supervisionata dagli utenti. L’esecuzione in background permette alle applicazioni di diventare event-driven e di supportare, ad esempio, aggiornamenti automatici, prioritizzare/filtrare chiamate e messaggi, etc.

 

Ambiente di sviluppo

Programmare in Java con Eclipse è molto intuitivo; Eclipse fornisce un ricco e completo ambiente di sviluppo, praticamente equivalente a Visual Studio, che include opzioni di debug avanzate (nell’emulatore o direttamente su un dispositivo fisico), aiuti/suggerimenti contestuali, auto-completamento del codice (in modo simile all’IntelliSense di Visual Studio) e molto altro. Quando il codice Java compila senza errori, il plug-in Android Developer Tools svolge in automatico tutte le procedure per creare il package applicativo, pronto e conforme per essere installato su un dispositivo, incluso il fondamentale file AndroidManifest.xml.

E’ comunque possibile sviluppare applicazioni Android senza Eclipse e il plug-in Android Developer Tools, ma in questo caso si richiede una conoscenza approfondita dell’SDK Android e dei suoi strumenti a linea di comando.

 

Interfacce grafiche (GUI)

L’interfaccia utente per un’applicazione Android può essere creata in due modi:

  • in via programmatica: usando codice Java per creare e posizionare ogni elemento dell’interfaccia (in maniera simile a come sono realizzare le interfacce utente per Windows Mobile)
  • in maniera dichiarativa: creando file XML che definiscono l’interfaccia (in maniera simile ai file XAML di WPF/Silverlight)

L’approccio dichiarativo è sempre da preferire. Un primo ovvio vantaggio è la relativa semplicità nell’apportare modifiche all’interfaccia, senza dover modificare il codice sorgente. Consiste in un insieme di tag XML specifici per le interfacce Android che possono essere utilizzati per parametrizzare e collegare insieme i numerosi componenti grafici (widget). Ogni widget nell’interfaccia utente è una View e, tipicamente, le schermate delle applicazioni sono realizzate come alberi e sotto-alberi di View.

Eclipse aiuta a creare le interface utente tramite un editor grafico drag-and-drop integrato, simile alla vista Form Design/XAML di Visual Studio. Ci sono anche altri strumenti di sviluppo che permettono di analizzare/modificare a run-time, direttamente nell’emulatore o su un dispositivo fisico, le interfacce utente ed esiste, inoltre, uno strumento open-source che può aiutare a progettarle graficamente: DroidDraw.

 

Android, grafica e giochi

Anche se Java è il linguaggio principale per lo sviluppo su Android, Google si è resa conto della necessità di avere un sistema combinato Java/C per poter permettere alla sua piattaforma di aver successo anche nel campo dei videogiochi: così hanno rilasciato il Native Development Kit (NDK) a partire da Android 1.5. Google ha capito la necessità di supportare lo sviluppo in C per assicurarsi il porting su Android del grande numero di giochi sviluppati nativamente per altre piattaforme, come iPhone. Lo stesso vale anche per i giochi per PC o console (che esistono da qualche decennio e sono spesso scritti in C/C++): potenzialmente, usando un “semplice” compilatore C per ARM, è ora possibile portare migliaia di giochi esistenti su Android con relativo poco sforzo. In più, Android fornisce ricche librerie grafiche 2D e 3D (con OpenGL), per aiutare gli sviluppatori a sfruttare al massimo, e in modo semplice, il potente hardware che equipaggia i dispositivi mobili oggigiorno. Android offre anche estese librerie per gestire immagini, video e audio, inclusi i formati JPG, PNG, MPEG4, H.264, MP3, AAC.

 

Accesso facilitato all’hardware

In Windows Mobile l’hardware è accessibile tramite applicazioni native C/C++ oppure con wrapper che sfruttano la modalità P/Invoke per chiamare funzioni native da applicazioni .NET Compact Framework. Android, invece, include librerie ed API per semplificare le interazioni con l’hardware: questo permette di evitare la realizzazione di applicazioni differenti a seconda dei dispositivi su cui devono essere eseguite, garantendo che il software funzionerà in maniera pressoché identica su ogni dispositivo che supporta la medesima versione di Android.

L’SDK di Android include, tra le altre cose, anche API per l’hardware di localizzazione (come il GPS e la tecnologia di Google per la localizzazione tramite rete cellulare), la fotocamera, l’audio, la rete, il Wi-Fi, il Bluetooth, gli accelerometri, il touch-screen e il power management.

 

Personalizzazione: tutte le applicazioni sono create uguali!

Quante volte, come sviluppatore Windows Mobile, avete desiderato di cambiare l’aspetto della schermata principale, creare una versione alternativa del gestore della rubrica o dei messaggi, o interagire a basso livello con i contatti, le chiamate, i messaggi? Quanto tempo e codice ci avete messo per ottenere un risultato soddisfacente? Con Android, dimenticate la fatica. Il sistema è stato progettato in modo tale da non differenziare tra le applicazioni native e quelle sviluppate da terze parti. Questo permette agli utenti e agli sviluppatori di poter cambiare l’aspetto e le funzionalità dei propri dispositivi sostituendo qualunque applicazione nativa con un’altra di prodotta da terzi, la quale ha accesso completo alle medesime funzionalità hardware e gli stessi dati.

 

Comunicazione tra applicazioni e database SQLite

Non c’è praticamente equivalente in Windows Mobile (anche se è possibile realizzare la cosa, ma per raggiungere gli stessi risultati ci sono molte difficoltà). Android include tre tecniche per trasferire dati e informazioni tra applicazioni e utilizzarli ovunque: intenzioni (Intents), notifiche (Notifications) e fornitori di contenuti (Content Providers).

· Gli Intents forniscono un meccanismo per scambiare messaggi internamente ad un’applicazione o tra applicazioni differenti. Usando le intenzioni, è possibile trasmettere a tutto il sistema la richiesta di effettuare un’operazione (es. comporre un numero, mandare un SMS, modificare un contatto della rubrica) e, se ci sono applicazioni registrate per gestire tale richiesta, queste saranno automaticamente avviate per soddisfarla.

· Le Notifications sono il mezzo standard attraverso il quale è possibile avvisare gli utenti: usando le API, ad esempio, si possono attivare la vibrazione, emettere suoni, controllare le icone della barra di stato, far lampeggiare il LED del telefono.

· Infine si possono usare i Content Providers per permettere ad altre applicazioni di accedere ai dati interni di una applicazione. Ad esempio, Android memorizza tutti i dati delle applicazioni native (messaggi, rubrica, lista chiamate, etc.) in database interni che vengono resi disponibili alle altre applicazioni tramite appositi Content Providers, in maniera tale da permettere ad altri di leggere e modificare i dati.

Per ogni applicazione, poi, Android fornisce un database relazionale, leggero ed integrato: SQLite. Come utenti Windows Mobile, probabilmente sarete abituati ai database SQL CE. Sono potenti, ma nulla in confronto a SQLite per prestazioni e occupazione delle risorse. Le vostre applicazioni possono avvantaggiarsi di questo database relazionale per memorizzare dati in maniera sicura ed efficiente. Per default, ogni database di ogni applicazione è isolato dagli altri (Sandbox): questo significa che il suo contenuto è accessibile solo all’applicazione che l’ha creato. Tuttavia, tramite il meccanismo dei Content Providers, è possibile decidere di renderlo disponibile a terzi in maniera semplice e controllata.

 

Prossimamente

Sto attualmente lavorando, nel tempo libero, su due progetti in ambito Windows Mobile. Ho iniziato a pianificare e ad analizzare le cose per effettuare il porting di uno dei due applicativi su Android e la mia idea è quella di utilizzare l’applicativo come oggetto dei prossimi futuri articoli. Ecco alcuni degli argomenti:

  • Uno sguardo ad Eclipse
  • Come create/debuggare/eseguire un progetto Android
  • Creare l’interfaccia utente
  • Accedere e controllare l’hardware
  • Localizzazione
  • Package e distribuzione

Se siete interessati a qualcosa in particolare o se avete commenti/domande, fatemi sapere!

sabato 11 settembre 2010

Aggiornamento su Embedded Sparks Summer 2010

Anche per questa edizione del concorso non ho avuto abbastanza tempo libero durante l’estate per sviluppare il dispositivo. Ho solamente iniziato a provare e implementare alcuni moduli software a livello prototipale, in modo da poter convalidare l’architettura progettata e per verificare se le prestazioni dello Spark Kit fossero sufficienti a supportare la mia idea. Sfortunatamente l’hardware non mi è parso abbastanza potente per gestire contemporaneamente la decodifica DVB-T (tramite un ricevitore esterno USB della Avermedia) e grafica WPF avanzata, così ho deciso di interrompere lo sviluppo.

Qui ci sono alcune foto che ho scattato durante l’assemblaggio del dispositivo:

Ora il concorso è entrato nella sua fase finale e i tre finalisti sono stati annunciati questa settimana. Buona fortuna a tutti!

Nuove certificazioni Microsoft

A marzo avevo annunciato il mio obiettivo di studiare in primavera per ottenere nuove certificazioni Microsoft. A fine aprile ho avuto l’opportunità di sostenere la versione beta dell’esame .NET Framework 4, Windows Applications development. Nell’ultima settimana di giugno, mi è stato comunicato il fatto di averlo passato! E, nella stessa settimana, ho passato anche l’esame Microsoft Windows Embedded Standard 7 for Developers. Ora, insieme alle certificazioni Windows CE 6.0 e Windows Mobile 6.5, sono un “completo” Microsoft Certified Technology Specialist nel campo embedded.

mercoledì 30 giugno 2010

Windows Embedded Compact 7 (CE 7)

Non è una notizia fresca, ma voglio solamente condividere con voi il fatto che Microsoft, agli inizi di giugno, ha annunciato ufficialmente la prossima versione di Windows Embedded CE, ora chiamato Windows Embedded Compact 7, e ne ha reso disponibile una technology preview. Se interessati, ulteriori informazioni sono disponibili sul sito Microsoft Windows Embedded CE. Un dispositivo equipaggiato con Compact 7 è già stato mostrato al Computex 2010, potete vederlo in questo video:

Sto iniziando in questi giorni a giocare un po’ con  la nuova piattaforma di sviluppo, quindi aspettatevi prossimamente articoli e aggiornamenti.

martedì 29 giugno 2010

EWF in Windows Embedded Standard 7

Durante lo sviluppo di una shell personalizzata per un progetto, ho incontrato uno strano comportamento abilitando/disabilitando la protezione EWF. Per lo sviluppo, ho creato un’immagine Windows Embedded Standard 7 thin client usando IBW, includendo la protezione EWF e utilizzando tutte le impostazioni default. Ha funzionato tutto fino a quando non ho iniziato a giocare con la protezione del disco. Secondo la documentazione MSDN, EWF può essere controllato tramite lo strumento EWF Manager (EWFMGR) da console (con diritti di Amministratore) o programmaticamente usando le API EWF.

Nella shell personalizzata che stavo sviluppando, avevo la necessità di controllare lo stato EWF a seguito di alcune procedure interne: in alcuni casi la protezione doveva venire abilitata ed in altri essere disabilitata. Non si sono verificati particolari problemi abilitando la protezione (sia tramite console e sia programmaticamente), mentre la cosa strana è capitata durante la disattivazione.

Mi aspettavo che la protezione potesse essere disabilitata allo stesso modo di come viene abilitata, semplicemente invocando il comando ewfmgr –disable da console o usando la funzione EwfMgrDisable, seguiti da un riavvio del dispositivo. Ma non era così. Dopo il riavvio, la protezione EWF era ancora abilitata. Inizialmente pensavo di non aver configurato correttamente la protezione EWF, installando l’immagine tramite IBW, così ho creato un answer file con ICE, configurato EWF con i parametri default e reinstallato nuovamente l’immagine. Di nuovo, nessun cambiamento: la protezione, una volta abilitata, non si poteva più disabilitare. Come risolvere il problema?

Dopo molti tentativi e tanta frustrazione, ho trovato la soluzione cercando dentro gli esempi d’uso delle API EWF (non ho trovato riferimenti alla cosa nella documentazione MSDN): un commento alla funzione EwfMgrDisable dichiara chiaramente che quando l’EWF è configurato in modalità RAM REG (default in Windows Embedded Standard 7), è necessario eseguire un’operazione di commit in seguito alla richiesta di disattivazione. Mentre quando EWF è configurato in modalità RAM, la sola operazione di disattivazione è sufficiente. In aggiunta, è possibile ottenere gli stessi risultati usando il comando ewfmgr –commitanddisable [–live] (con l’opzione –live non è necessario il riavvio del dispositivo) o, tramite le API, con la funzione EwfMgrCommitAndDisableLive.

Spero che questa piccola aggiunta alla documentazione MSDN vi possa far risparmiare tempo e problemi utilizzando EWF in Windows Embedded Standard 7.

venerdì 25 giugno 2010

Problemi di compatibilità tra answer files in Windows Embedded Standard 7 CTP/RC ed RTM

Questa mattina, durante la creazione di una immagine Windows Embedded Standard 7 per un progetto, la mia collega ed io abbiamo incontrato un subdolo ed inaspettato problema. In ufficio abbiamo alcune macchine di sviluppo equipaggiate con differenti versioni di Windows Embedded Studio 7 (che abbiamo installato per test appena rese disponibili da Microsoft, nei mesi scorsi – CTP, RC ed RTM). Abbiamo iniziato a migrare tutte le macchine alla versione RTM, e così ora abbiamo un certo numero di progetti creati con le versioni CTP ed RC (quando il prodotto era ancora chiamato Windows Embedded Standard 2011) e altri con la RTM. Non avevamo mai provato ad usare un answer file di una versione pre-release con la RTM finale, fino ad oggi. E sfortunatamente non ci sono buone notizie: ci sono volute un po’ di ore per risolvere un problema relativo a DISM durante la fase di installazione dell’immagine (i log di IBW riportavano solo un errore riguardo ad un file INF, senza informazioni aggiuntive).

La cosa era strana perché abbiamo creato due answer files praticamente identici (a parte le protezioni EWF e FBWF), uno con ICE RTM e l’altro con ICE CTP, che abbiamo installato sullo stesso dispositivo senza problemi. Quindi abbiamo dovuto apportare alcune modifiche ad entrambi i file ed abbiamo usato ICE RTM: con il file creato con ICE CTP, ci è stato segnalato un problema con la cartella della Distribution Share (e questo è ovvio, perché il prodotto ha cambiato il suo nome e la cartella di installazione da \Programmi\Windows Embedded Standard 2011 a \Programmi\Windows Embedded Standard 7), ma dopo aver sistemato la giusta DS, non risultavano più errori di validazione. Abbiamo quindi pensato che tutto fosse a posto e pronto per una nuova installazione. Ma non era vero! Durante l’installazione dell’answer file CTP aggiornato con la RTM, si è verificato il problema con DISM; mentre usando l’altro file, tutto ha funzionato perfettamente. Abbiamo cercato di risolvere il problema modificando i valori aggiornati, pensando di aver usato qualche valore errato, ma niente è cambiato. Alla fine abbiamo ricreato da zero l’answer file della CTP usando ICE RTM e, magicamente, tutto ha funzionato.

Quindi sembra che esistano alcuni problemi di compatibilità tra gli answer file creati con Windows Embedded Standard 7 CTP/RC ed RTM. Per evitare problemi con answer file creati con strumenti pre-release (magari avete ricevuto un evaluation kit promozionale), vi consigliamo di ricreare i vostri progetti usando la versione RTM.

mercoledì 23 giugno 2010

Novità sul concorso Embedded Spark

Finalmente ieri notte sono stati annunciati i vincitori della prima fase del concorso Embedded Sparks 2010 Summer Challenge: sono rimasto decisamente contento di scoprire che la mia proposta, eMMEC, è nuovamente tra di essi! Tornate nelle prossime settimane per aggiornamenti sugli sviluppi del prototipo (spero, questa volta, di avere abbastanza tempo libero in questo periodo per poter arrivare al termine della seconda fase).

sabato 12 giugno 2010

Nuovo concorso: embeddedSPARK 2010 SUMMER Challenge

Per il primo anno una nuova sfida si svolge durante l’estate, inizia quando l’originale embeddedSPARK Challenge finisce (Microsoft ha annunciato l’embeddedSPARK SUMMER Challenge alla fine di aprile, durante l’evento ESC Silicon-Valley), e termina con i finalisti a presentare sul palco all’ESC di Boston, a settembre.

Per quelli che non conoscono l’iniziativa Microsoft EmbeddedSpark, è una collezione di software Windows Embedded per hobbisti che consiste in versioni complete di strumenti di sviluppo Microsoft e una scheda SPARK-embedded di uno dei partner hardware di Microsoft. Di solito, la partecipazione al programma consiste nell’ottenere l’hardware e il software al solo costo della scheda.

Tra le molte iniziative (blog, documentazione, lezioni, forum della community, ecc.) Microsoft organizza anche un concorso per hobbisti embedded e fornisce un kit embeddedSpark gratuitamente a tutti quelli che superano la prima selezione del concorso.

Il concorso è basato sulle abilità dei partecipanti e la fortuna non gioca alcun ruolo  nella determinazione dei vincitori. L’obiettivo infatti è quello di fornire un forum per gli sviluppatori Windows Embedded e permettere loro di diffondere le loro abilità/conoscenze, costruire la community Windows Embedded e pubblicizzare il programma embeddedSpark.

Il nuovo concorso estivo è basato su Windows Embedded Standard 7, mentre l’originale embeddedSPARK Challenge (ora rinominato in embeddedSPARK WINTER Challenge) è basato su Windows Embedded CE. 

Non essendo stato in grado di continuare l’edizione invernale, ad inizio anno, ora ho deciso di provare a partecipare all’edizione estiva con una nuova proposta. Basato sulla eMMEC logonuova piattaforma Microsoft Embedded, il concorso rappresenta lo scenario ideale per consolidare le mie conoscenze e imparare cose nuove in vista dell’esame di certificazione Microsoft.

Il tema per la prima edizione è "Media Explosion". La mia idea è un’evoluzione del dispositivo presentato l’anno scorso, che prova a superare e risolvere molte delle limitazione e dei problemi di usabilità riscontrati nello sviluppo del prototipo per la mia tesi di laurea. Informazioni aggiuntive e dettagli, si hanno sulla pagina ufficiale della proposta: eMMEC.

Tra una decina di giorni saranno annunciati i vincitori del primo round…

venerdì 11 giugno 2010

Nuova comunità embedded

L’obiettivo primario del programma embeddedSPARK è quello di fornire un ambiente agli sviluppatori, di differenti regioni e con differenti conoscenze, per interagire, imparare e sfruttare le opportunità offerte da Windows Embedded. Vorrei condividere con voi il sito www.embedded101.com, che ho scoperto questa mattina mentre leggevo alcuni post nel forum ufficiale di embeddedSPARK. Il sito è stato creato per supportare una comunità online dedicata a Windows Embedded, per fornire un luogo agli sviluppatori in cui condividere esperienze, imparare, scambiare idee e suggerimenti ed evolvere come un gruppo. www.embedded101.com è completamente indipendente da Microsoft ed è organizzato per essere una comunità tecnica che possa aiutare gli sviluppatori a scoprire le tecnologie Windows Embedded. Attualmente il sito consiste delle seguenti sezioni:

  • Blogs
  • Forum
  • Articoli
  • Progetti

Se interessati, vi suggerisco di contribuire ai contenuti e invitare altre persone a diventare membri della community, con l’obiettivo di condividere conoscenza e imparare insieme le tecnologie Windows Embedded.

giovedì 29 aprile 2010

Congratulazioni, Marco!

Sono felice di annunciare che ieri il mio amico e collega Marco ha vinto il primo premio nel concorso Microsoft Embedded Sparks 2010. La soluzione proposta, inviata a Microsoft in gennaio, dovrebbe rappresentare il sogno di ogni chitarrista: la possibilità di provare tutti gli effetti, solitamente disponibili come pedaliere dal costo di 100-200$ ciascuna, ad un prezzo accessibile. Il suo progetto “Guitar Multi Effect" è stato progettato per emulare digitalmente tutti gli effetti, risparmiando soldi e permettendo ad un musicista di portarseli tutti in giro comodamente. La proposta di Marco, inoltre, offre una “modalità karaoke” che accompagna il chitarrista con tracce audio registrate in precedenza. Se al dispositivo si collega uno schermo sensibile al tocco (opzionale), esso permette anche di visualizzare video-lezioni o di scaricare dal web nuovi effetti.

Per informazioni e dettagli visitate il sito del concorso, il blog di Marco o guardate il video ufficiale:

domenica 21 marzo 2010

Concorso Embedded ed esami di certificazione Microsoft

Alcune settimane fa avevo annunciato che avrei scritto alcuni post a proposito del lavoro per il concorso Microsoft Embedded Sparks 2010. Purtroppo, a causa del poco tempo libero nell’ultimo periodo e per alcune problematiche hardware/software nella preparazione del prototipo, ho dovuto interrompere lo sviluppo. Sarà magari per il prossimo anno…

Nel frattempo, ho anche studiato per dare due esami di certificazione Microsoft. Ho dato il primo a metà dicembre: era la versione beta dell’esame Windows Mobile 6.5 - Application Developer. Ho ricevuto comunicazione del fatto di averlo passato appena dieci giorni fa. E lo scorso mercoledì ho dato e passato l’esame Windows Embedded CE 6.0 - Development. Adesso sono un Microsoft Certified Technology Specialist nel campo embedded… ma questo è solo l’inizio: ho già iniziato a studiare per un nuovo esame embedded, Windows Embedded Standard 7 for Developers (precedentemente noto come Windows Embedded Standard 2011), che darò appena sarà disponibile (probabilmente per metà giugno).

domenica 14 febbraio 2010

Ambiente di sviluppo virtualizzato in singola workstation

A lavoro e a casa ho a disposizione solo una macchina di lavoro e in genere ho la necessità di utilizzare versioni differenti degli ambienti e degli strumenti di sviluppo. Per esempio, per generare immagini di Windows CE 6.0, uno ha bisogno di Visual Studio 2005, Windows CE 6.0 Platform Builder, i vari service pack, gli aggiornamenti di compatibilità con Windows Vista/Windows 7 (se non viene più usato Windows XP), aggiornamenti mensili di Windows CE. Se uno ha a disposizione una macchina pulita, con solo i software elencati precedentemente, non ci dovrebbero essere problemi. Tutto dovrebbe funzionare bene, il debug remoto sui dispositivi funziona, la generazione delle immagini si dovrebbe completare con successo (a parte i normali errori di generazione e configurazioni errate, ma che in alcun modo dipendono dalla configurazione del sistema e dai software installati).

Ma cosa succede se si avesse la necessità di sviluppare anche applicazioni .NET Compact Framework 3.5 per Windows Phones? Sulla macchina di sviluppo bisogna installare Visual Studio 2008 e i vari SDK e strumenti per Windows Mobile. Naturalmente si vorrebbe anche che tutto il software precedentemente installato continuasse a funzionare come prima: questo è il problema. Raggiungere questo obiettivo non è una cosa facile. Visual Studio 2008 aggiorna infatti alcuni componenti di sistema che vengono usati da Visual Studio 2005 e da Platform Builder per lo sviluppo con Windows CE, e questo potrebbe causare alcune problematiche nel debug remoto di dispositivi Windows Mobile/Windows CE. Non che non sia possibile far convivere i due ambienti, ma bisogna prestare particolarmente attenzione all’ordine di installazione dei vari applicativi, degli aggiornamenti, degli strumenti. A lungo andare, qualcosa andrà storto e, per esempio, non sarà magari più possibile generare immagini Windows CE oppure effettuare debug remoto di un dispositivo.

Se poi avete anche bisogno di usare database SQL Server, di cui alcuni in versione 2005 e altri 2008, l’unica cosa da fare è installare entrambi sulla propria macchina. So che il problema non esisterebbe se i database 2005 potessero essere aggiornati alla versione 2008 (ma alcuni clienti non permettono di fare questa cosa) oppure se avessi altre macchine/server di sviluppo su cui installarli separatamente. Cercando sul web, nei forum, sui blog, molte persone dicono che le due versioni possono convivere tranquillamente, senza problemi. Io ho provato a installarli entrambi e per le necessità che ho per lavoro (Management Studio, Query Analyzer, backup database, accesso remoto ai database) le cose funzionano. Tuttavia molte persone in rete segnalano problemi con Management Studio, Integration Services e Analysis Services, ma di questo non posso dire molto, non avendo esperienza in merito.

Stufo di questi (e molti altri) problemi di compatibilità nel lavoro quotidiano, durante le vacanze natalizie ho iniziato a sperimentare un ambiente di sviluppo virtualizzato sulla mia workstation di casa. Dopo un mese di uso quotidiano, ho quindi deciso di adottare la stessa configurazione di sviluppo a lavoro.

In alcuni prossimi post vi darò una panoramica dei miei esperimenti di virtualizzazione, con i problemi che ho avuto e le soluzioni che ho trovato.

Per chi non conoscesse la virtualizzazione, segue una breve introduzione. Per maggiori informazioni, iniziate dando un’occhiata alle voci disponibili su Wikipedia (http://it.wikipedia.org/wiki/Virtualizzazione e http://en.wikipedia.org/wiki/virtualization).

 

Cos’è la virtualizzazione?

Il termine “virtualizzazione” fu coniato negli anni ‘60 del secolo scorso, facendo riferimento ad una macchina virtuale: ovvero, in generale, l’astrazione di una risorsa informatica. Questo include sia il far apparire una singola risorsa fisica come una moltitudine di risorse logiche (come server, sistemi operativi, applicativi, dispositivi) e sia il far apparire risorse fisiche multiple come se fossero un’unica risorsa logica (come server o dispositivi di memorizzazione). La creazione e la gestione di macchine virtuali è stata chiamata “virtualizzazione di piattaforma” o, recentemente, “virtualizzazione server”.

La virtualizzazione di piattaforma è ottenuta su una specifica piattaforma hardware da un programma di controllo (host), che crea un computer simulato, una macchina virtuale, per il suo software ospitato (guest). Il software guest non si limita alle singole applicazioni utenti: molti host permettono l’esecuzione di sistemi operativi completi. Il software ospitato viene eseguito come se stesse girando direttamente sull’hardware fisico, ma con alcune limitazioni. L’accesso alle risorse fisiche (rete, schermo, tastiera, dischi, dispositivi USB, ecc.) in genere viene gestito con un livello più limitato rispetto al processore e alla memoria. Spesso i software ospitati potrebbero avere delle limitazioni nell’accedere a particolari periferiche o potrebbero solo aver accesso ad un insieme ristretto delle effettive funzionalità del dispositivo fisico. Il tutto dipende dalle politiche di accesso all’hardware implementate dal software di virtualizzazione.

Esistono vari software di virtualizzazione, commerciali, gratuiti e alcuni anche open-source, disponibili per i principali sistemi operativi. Per citarne alcuni, senza un particolare ordine preferenziale:

  • VMWare Workstation
  • Microsoft VirtualPC
  • VMWare Server
  • Sun VirtualBox
  • Microsoft Hyper-V
  • QEMU
  • Microsoft Virtual Server
  • Parallels for Desktop
  • Parallels Workstation

Per altri software e maggiori informazioni: http://en.wikipedia.org/wiki/Comparison_of_platform_virtual_machines

 

Usi della virtualizzazione

La virtualizzazione può essere usata in vari contesti e modalità. Principalmente può essere utile per:

  • Server consolidation (unificazione di sistemi poco/sotto usati in un unico server fisico; unificazione di vecchi sistemi)
  • Testing (test QA; test di portabilità; nuovi sistemi operativi)
  • Navigazione web sicura (siti pericolosi; ricerche; download; script automatici; validazione; test sicurezza; ecc.)
  • Supporto tecnico (software e sistemi operativi dei clienti in macchine virtuali; ricreazione dell’ambiente dei clienti in maniera virtuale)
  • Prove software (test di caratteristiche e compatibilità; simulazione di scalabilità; catture-schermo; snapshot delle VM per ri-uso futuro)
  • Corsi (nessun problema di configurazione tra insegnanti e studenti; macchine per pratica/studio)
  • Demo (nuove VM per ogni demo garantiscono esperienze riproducibili)
  • Load balancing (cluster di VM piuttosto che nodi hardware)
  • Grid computing (Cloud computing)
  • Sviluppo software (gli sviluppatori usano una o più VM con tutte le risorse sulla propria macchina locale)

Negli  ultimi anni la virtualizzazione ha iniziato a prendere sempre più posto nelle strategie di organizzazione e nell’utilizzo nel mondo IT. Alcuni degli scenari precedenti sono correntemente utilizzati, mentre altri si stanno appena affacciando sul mondo della virtualizzazione. Di sicuro la virtualizzazione nell’IT crescerà sempre più in futuro, perchè i benefici che ne derivano sono molteplici.

L’ultimo punto della precedente lista rappresenta il punto di partenza dei miei esperimenti. In uno dei prossimi post vedremo la mia interpretazione di quest’uso della virtualizzazione.

giovedì 4 febbraio 2010

Windows Embedded Standard 2011

Windows Embedded Standard 2011 è la prossima versione di Windows Embedded Standard 2009 e sarà basata su Windows 7. La Release Candidate di Standard-2011 sarà presto disponibile. Per iniziare a conoscere questa nuova piattaforma, grazie ad un accordo con il Microsoft Windows Embedded Team, Beppe Platania (Beps Engineering CEO) ha iniziato a pubblicare sul suo blog una traduzione italiana degli articoli del Windows Embedded Blog riguardanti il prodotto.

Gli articoli saranno pubblicati su base settimanale e il primo è stato pubblicato appena qualche giorno fa. Se siete interessati, date un’occhiata al blog di Beppe!

sabato 16 gennaio 2010

Nuovo anno… nuovo concorso

AR-DressUp Era più o meno lo stesso periodo, l’anno scorso, quando fui avvisato che l’idea proposta, Home Communication Concentrator, era stata scelta come una dei 50 vincitori a livello mondiale nella prima fase del concorso Sparks Your Imagination 2009 di Microsoft (potete leggere di questo nel mio post precedente). Partecipare l’anno scorso è stato molto interessante, così ho deciso di prendere parte anche all’edizione di quest’anno, EmbeddedSpark 2010 Challenge.

Ieri sera, dopo un’impaziente attesa, sono stati finalmente annunciati i vincitori 2010 della prima fase, e sono stato molto contento nel scoprire che la mia proposta è nuovamente tra uno di essi!

Il tema del concorso dell’anno scorso era la Casa digitale del futuro. Quest’anno, invece, è Divertimento & Giochi. Durante le vacanze di Natale, mi sono venute un paio di idee e una di queste, ispirata due anni fa da mia sorella, è diventata quella proposta: AR-DressUp. Ulteriori informazioni sono disponibili nel documento inviato al concorso, potete trovarlo qui: AR-DressUP Contest Entry.

Nelle prossime settimane aggiornerò il blog con post riguardanti lo sviluppo del prototipo, rimanete sintonizzati!

 

Per quelli che non conoscono l’iniziativa Microsoft EmbeddedSpark, è una collezione di software Windows Embedded per hobbisti che consiste in:

  • Una versione completa di Windows Embedded CE 6.0 R2
  • Una versione completa di Visual Studio 2005 Professional

  • Una scheda SPARK-embedded di uno dei sette partner hardware di Microsoft

Di solito, partecipare al programma significa che è possibile ottenere l’hardware e il software al solo costo della scheda.

Tra le molte iniziative (blog, documentazione, lezioni, hands-on labs, forum della community, etc.) Microsoft organizza anche un concorso per hobbisti embedded e fornisce un kit EmbeddedSpark gratuitamente a tutti quelli che superano la prima selezione del concorso.

Il concorso è basato sulle abilità dei partecipanti e la fortuna non gioca alcun ruolo  nella determinazione dei vincitori. L’obiettivo infatti è quello di fornire un forum per gli sviluppatori Windows Embedded CE e permettere loro di diffondere le loro abilità/conoscenze, costruire la community Windows Embedded e pubblicizzare il programma SPARK Your Imagination / EmbeddedSpark.