Dopo una (molto) lunga attesa, oggi ho finalmente ricevuto il primo VERO device WIndows Embedded Handheld 8.1.

WP_20141127_13_57_44_Pro

Si tratta di un Bluebird BM180 nella versioneBarcode Reader e MSR Reader ma non ha connettivita’ 3G.

Ovviamente e’ equipaggiato con WiFi, Bluetooth, NFC etc.

Attualmente lo sto caricando e configurando. Nei prossimi giorni pubblichero’ una prova completa utilizzando alcune applicazioni enterprise che ho sviluppato.

Per adesso posso solo confermare che: ESISTE!

In questi giorni ho partecipato ad un evento in cui dovevo parlare di sviluppo su WP8.1 in alcune sessioni.

Ovviamente contavo di utilizzare la funzione Project my video finalmente disponibile per tutti I device WP8.1.

Avevo fatto I miei opportuni test nei giorni scorsi, poi pero’ arrivato qui all’evento ho iniziato a fare le prove per la sessione accorgendomi che la prioezione non funzionava.

image

Dopo aver fatto tutte le prove di disinstallazione dei driver, del dispositivo dall’hub device e stampanti e disinstallazione e reinstallazioine del tool di proiezione video senza ottenere risultati mi sono messo a pensare se avevo installato qualcosa che poteva andare in conflitto con questa modalita’.

Mi sono ricordato che avevo installato l’utility Nokia Recovery Tool per flashare un device Lumia 820 ed ho iniziato a pensare che la causa poteva essere quella.

Andando a spulciare ho verificato che il tool di recovery installa un pacchetto di driver personalizzati che vanno a sovrapporsi sui normali driver dei dispositivi per permettere di accedere a basso livello al device.

Procedendo quindi alla disinstallazione del recovery tool e di tutti I pacchetti annessi, nonche’ nuova cancellazione dei driver e rimozione dei device e nuova reinstallazione del tool di proiezione video ho finalmente ottenuto il risultato sperato.

Quindi attenzione se dovete utilizzare quel tool!

Tagged with:  

Fare parte di una community tecnologica (nel mio caso 3) può essere davvero impegnativo, ma al tempo stesso molto molto appagante.

Seguo molto assiduamente gli eventi che tutte le community italiane (sopratutto del mondo .NET) organizzano e quando è possibile cerco di parteciparvi di persona.

Questo sopratutto perchè credo che a parte il contenuto strettamente tecnico che si può erogare in una sessione (che per altro può tranquillamente essere vista via web) il vero valore stia nelle persone, nel poterle conoscere, il loro valore, le loro passioni. le loro idee.

In questo ovviamente c’è anche la possibilità di togliersi il dubbio su un certo problema che abbiamo incontrato e che non riusciamo a risolvere, o addirittura mettere le basi per collaborazioni di lavoro.

Insomma quello che comunemente viane chiamato fare Networking.

A questo proposito negli ultimi giorni di febbraio si sono svolti presso la sede Microsoft di Milano I CommunityDays 2014 che quest’anno hanno davvero battuto ogni record!

Infatti la prima novità era l’estensione dell’evento su 3 giornate in cui le prime due seguivano uno schema “classico” di tracce multiple con sessioni su tutto l’arco della giornata per coprire tutto lo spettro tecnologico del mondo Microsoft.

La terza giornata, definita °fabbrichetta edition° (cit.) poneva làaccento sulle problematiche da affrontare oggi per avviare una nuova azienda o startup.

Lo sforzo organizzativo per Daniele ed Andrea è stato improbo, ma credo che I risultati abbiano ampiamente ripagato gli sforzi.

Praticamente tutte le community italiane erano coinvolte in un modo o nell’altro nell’evento; o nelle sessioni, o nelle operazioni di checkin e nel controllo delle sale.

Da parte mia ho avuto il piacere di erogare due sessioni insieme all’amico e collega Marco Minerva, la prima dal titolo “Interagire con device esterni” e la seconda “Sviluppare applicazioni con Azure Mobile Services”.

Durante la prima sessione fra l’altro abbiamo anche mostrato come interfacciare il Drone AR.Parrot con WIndows Phone e WIndows 8, a tale riguardo ho realizzato un piccolo video che mostra la demo relativa.

Drone FlyWithMe.mp4 from Marco Dal Pino on Vimeo.

Sono tornato a casa davvero caricato da questo evento e non posso che ringraziare tutti coloro che lo hanno organizzato e vi hanno partecipato per aver reso indimenticabili quei tre giorni.

Tagged with:  

Quest’anno farò parte dello staff speaker dell’evento Microsoft Embedded Conference 2014, che si terrà il prossimo 15 Febbraio a Napoli.

mec_w

Organizzato dalle vulcaniche menti dei ragazzi di DotNetCampania ed in particolare da Paolo Patierno, questo evento è alla sua seconda edizione; ho avuto la fortuna di assistere alla prima edizione lo scorso anno e posso garantirvi che ne vale la pena.

Insieme a me si alterneranno sul palco altri speaker molto importanti per la scena Embedded italiana e mondiale, eccoli in rigoroso ordine alfabetico:

Clemente Giorio

Lorenzo Maiorfi

Valter Minute

Paolo Patierno

Beppe Platania

Gianni Rosa Gallina

Mirco Vanini

Avremo anche una Guest star davvero importante, direttamente dagli stati uniti dove vive e lavora Samuel Phung.

Spero di vedervi di persona il prossimo 15 Febbraio, a presto!

Dopo molta attesa finalmente è disponibile il Windows Embedded 8 Handheld SDK ed è possibile scaricarlo ed installarlo da qui. mobile1green

Vorrei però fare un poco di ordine su cosa effettivamente è questo SDK e quale ruolo riveste nel mercato.

Windows Embedded 8 Handheld fa parte della famiglia di prodotti Embedded proposti da Microsoft, in particolare la versione Handheld esista già da alcuni anni e di fatto è il prodotto precedentemente conosciuto come Windows Mobile che Microsoft offriva sugli smartphone dell’epoca. Tuttora distribuito con I terminali industriali delle principali aziende del settore (Symbol-Motorola, Honeywell, Intermec, Datalogic ecc).

 

La versione 8 di Handheld invece da un taglio con il passato e il nuovo sistema abbandonerà Windows Mobile (basato sul kernel Windows CE) e passerà invece a Windows Phone 8.

Questo cambio di direzione punta verso l’allineamento e l’unificazione delle piattaforme anche nel mondo embedded.

Questo nuovo Sistema operativo dovrebbe vedere la luce nel prossimo anno (le ultime notizie ufficiali parlano della prima metà del 2014), ed èmobile2green[7] lecito attendersi tempistiche vicine al rilascio della vNext di Windows Phone (comunemente noto come Windows Blue).

Ma quali saranno le caratterisctiche peculiari?

  1. Prima di tutto la presenze sui device di nuovi sensori e interfacce, quali I lettori di codici a barre, lettori di carte magnetiche, il supporto per la connessione di dispositivi HID (via BLuetooth e USB)
  2. La possibilità di impostare il cosiddetto “Kiosk mode”, ovvero poter impostare una applicazione come unica o principale ed inibire l’accesso ad alcune o tutte le altre funzionalità del sistema operativo dalla interfaccia utente. In questo modo potremo “blindare” l’utilizzo del device alle sole funzionalità cui è programmato (tipicamente operazioni di data retrieve e collection, logistica, distribuzione, retail e hospitality).
  3. Distribuire applicazioni sui device senza passare dallo store (possibilità già nota come pubblicazione Enterprise delle applicazioni)
  4. Gestione remota dei device tramite Windows Intune o sistemi di gestione dei dispositivi di terze parti

mobilepackcyan

Installazione

Ma cosa otteniamo installando questo SDK?

iniziamo mobile2blue lo scaricamento del pacchetto di installazione (circa 460 MB).

L’installazione si conclude rapidamente se già è presente un ambiente di sviluppo per Windows Phone 8 (sia esso su VS2012 o VS2013).

La prima traccia evidente dell’installazione image la notiamo appena creiamo o apriamo un progetto Windows Phone 8 e notiamo nella lista degli emulatori a disposizione alcune nuove voci. Tutte evidenziate dal nome “WE8H Emulator” seguito dalla relativa misura dello schermo emulato.

Interessante notare fra gli altri una nuova misura corrispondente alle nuove risoluzioni 1080p disponibile a partire dall’aggiornamento GDR3 di Windows Phone (per I dispositivi Full HD come il Nokia Lumia 1520) a tale proposito potete dare una occhiata a questo interessante post sulla gestione di risoluzioni multiple nei nuovi device.

Da un primo test effettuato con una piccola applicazione di prova, ho tuttavia verificato che utilizzando tale emulatore non possiamo correttamente testare le nostre applicazioni come sui nuovi device Full HD, infatti lo scale factor ritornato dalla relativa API è 150, mentre la risoluzione fotografica di scatto è 7152×5364 esattamente I valori che vengono ritornati anche dall’emulatore 720p. Ecco lo snippet che ho utilizzato.

image

Sull’argomento credo che cercherò di approfondire in seguito.

La documentazione dell’SDK (disponibile a questo link)  copre I due namespace Windows.Device.PointOfService e Microsoft.Embedded.Devices.Enumeration aggiunti dall’SDK e un esempio per emulare il lettore di codici a barre all’interno dell’emulatore.

In pratica adesso è possibile utilizzare le API Point of Service già disponibili in Windows 8.1 anche su WP, ovviamente considerando di sviluppare per I device WE8H.

WP_20130916_08_23_11_Pro

Qualche tempo fa, un amico che lavorava su un grosso progetto WP8, mi chiese se conoscevo un modo di determinare quando il jack della cuffia venisse inserito o disinserito dal device, visto che all’apparenza non c’erano API specifiche che espletassero a questa funzione.

Anche io non conoscevo la risposta e nemmeno le mie ricerche su internet sortirono esito positivo.

Una idea che mi venne in mente fu quella di utilizzare le API della radio FM per misurare la potenza del segnale, poichè l’auricolare viene sfruttata come antenna per la sintonizzazioine della radio, pensai che la presenza dello spinotto nel device avrebbe fatto aumentare il livello del segnale ricevuto.

Feci qualche esperimento con FMRadio.Instance.SignalStrength misurando il cambiamento del SignalStrength inserendo o togliento una auricolare.

Questo approccio però presentava dei problemi, infatti sui device Windows Phone 8 di prima generazione (quelli per intenderci fino all’aggiornamento GDR1) non avevamo accesso alle API della radio FM ed il semplice istanziamento generava una eccezione.

Ho quindi condotto le mie prove con dei device WP7, ma anche lì le variazioni nel segnale non erano tali da determinare nettamente ed inequivocabilmente la presenza o meno dell’auricolare.

Ho condotto delle prove analoghe su device WP8 con GDR2, ma I risultati sono stati gli stessi.

Capito che questo approccio non era risolutivo ho cercato nelle API di WP8 ed ho trovato che fra quel relative al VOIP esisteva una interessante classe AudioRoutingManager.

Di per sé l’utilizzo di questa API è quello di indirizzare l’audio di comunicazioni VOIP ad endpoint diversi dall’altoparlante del telefono.

Tuttavia la classe implementa un evento AudioEndPointChanged che permette di conoscere l’attuale endpoint audio del device o se c’è stato un cambiamento dallo stato precedente, I valori riportati sono esposti da un enumeratore AudioRoutingEndpoint con I seguenti membri:

Membro

Descrizione

Default L’endpoint di default, il vivavoce
Earpiece Una auricolare
Speakerphone Il vivavoce (dall’altoparlante)
Bluetooth Un dispositivo Bluetooth
WiredHeadset Una cuffia con cavo
WiredHeadsetSpeakerOnly Cuffia cablata solo per Out, l’IN dal microfono predefinito
BluetoothWithNoiseAndEchoCancellation Disp. Bluetooth con cancellazione eco e rumori

 

Voilà! registrandosi all’evento è possibile essere “avvisati” quando lo stato cambia e di conseguenza sapere se il famoso jack è inserito o meno.

In realtà possiamo sapere anche molto di più, come visto nella tabella precedente, dipenderà quindi dalle nostre necessità nel gestire tutti I casi o solo quelli di nostro interesse.

Vediamo allora un po’ di codice tratto dall’esempio che troverete linkato alla fine del post.

Per prima cosa dobbiamo aggiungere una capability al WMAppManifest, ed in particolare la ID_CAP_VOIP.

Poi vediamo come registrare l’evento con il nostro handler:

1: AudioRoutingManager.GetDefault().AudioEndpointChanged += MainPage_AudioEndpointChanged;

 

Poi vediamo come gestire I vari casi nel nostro metodo:

   1:  public void MainPage_AudioEndpointChanged(AudioRoutingManager sender, object args)
   2:  {
   3:     var AudioEndPoint = sender.GetAudioEndpoint();
   4:     switch (AudioEndPoint)
   5:     {
   6:         case AudioRoutingEndpoint.Default:
   7:             {
   8:                 txtActual = "Default";
   9:                 break;
  10:             }
  11:         case AudioRoutingEndpoint.Earpiece:
  12:             {
  13:                 txtActual = "Earpiece";
  14:                 break;
  15:             }
  16:         case AudioRoutingEndpoint.Speakerphone:
  17:             {
  18:                 txtActual = "Speakerphone";
  19:                 break;
  20:             }
  21:         case AudioRoutingEndpoint.Bluetooth:
  22:             {
  23:                 txtActual = "Bluetooth";
  24:                 break;
  25:             }
  26:         case AudioRoutingEndpoint.WiredHeadset:
  27:             {
  28:                 txtActual = "WiredHeadset";
  29:                 break;
  30:             }
  31:         case AudioRoutingEndpoint.WiredHeadsetSpeakerOnly:
  32:             {
  33:                 txtActual = "WiredHeadsetSpeakerOnly";
  34:                 break;
  35:             }
  36:         case AudioRoutingEndpoint.BluetoothWithNoiseAndEchoCancellation:
  37:             {
  38:                 txtActual = "BluetoothWithNoiseAndEchoCancellation";
  39:                 break;
  40:             }
  41:         default:
  42:             throw new ArgumentOutOfRangeException();
  43:     }
  44:  }

 

Nel mio caso come potete vedere ho gestito tutti I casi possibili per poter verificare tutte le casistiche possibili all’interno della applicazione.

Una volta lanciata la applicazione è sufficiente inserire una auricolare o disinserirla per vedere un messaggio corrispondente indicante lo stato attuale.

wp_ss_20130915_0003

ATTENZIONE: ho effettuato test su device GDR1 e GDR2, benchè l’applicazione giri correttamente su tutti I device, su GDR1 NON vedrete cambiare I valori visualizzati.

Non ho idea del perchè non funzioni, visto che le API del VOIP sono implementate e funzionanti fin dall’uscita di WP8.

Ovviamente quanto detto si applica SOLO a device WP8.

Potete trovare I sorgenti dell’applicazione di esempio a questo link.

Tagged with:  

NDC

Negli ultimi mesi devo dire che il mio impegno all’interno delle Community italiane mi ha dato delle belle soddisfazioni, infatti ho avuto la possibilità di partecipare in qualità di speaker o di semplice spettatore ad eventi che hanno espresso dei livelli molto alti per contenuti, organizzazione e livello complessivo.

Mi riferisco ai ComunityDays di Milano e Catania, a DotNetCampus, a Codemotion o recentissimo Better Embedded.

Senza contare I numerosissimi eventi delle singole community con cui ho maggiori rapporti tipo DotNetToscana, DotNetLombardia, DomusDotNet, DotNetCampania, DotNetLiguria che mese dopo mese continuano ad organizzare eventi, erogare contenuti, sessioni, blog post.

Oltre a questo ho avuto il piacere di ricevere nello scorso mese di marzo il riconoscimento da parte di Nokia del titolo di Nokia Developer Champion e più recentemente anche quello di Nokia developer Champion del mese di Giugno 2013; cosa posso chiedere di più? Occhiolino

Tagged with:  

Vista l’onda di uscita dei nuovi prodotti Windows Embedded avremo presto parecchi eventi per conoscere I nuovi prodotti, intanto volevo segnalarvi due eventi che si svolgeranno nei prossimi mesi in cui sarà già possibile vederne un assaggio.

DotNetCampus il 13 Aprile presso Università Roma Tre

.NET Campus 2013

 

Better Embedded l’8 e 9 Luglio a Firenze

Better Embedded 2013

In queste due conferenze presenterò alcune sessioni riguardo Windows Embedded Handeld e le Applicazioni Enterprise.

A partire da oggi sono disponibili le prime incarnazioni di Windows 8 per il mondo embedded.

Le versioni rilasciate oggi sono:

Windows Embedded 8 Standard: permette di creare delle versioni personalizzate del sistema operativo inserendo solo le funzionalità necessarie per le vostre applicazioni o il vostro business.

Windows Embedded Pro: è una versione full di Windows 8 ma con una speciale versione di licenza che permette di preparare I device preinstallati senza che necessitino fasi di installazione o configurazione iniziale.

Sul blog di windows embedded è disponibile una intervista a Kevin Dallas (General Manager di Windows Embedded) che parla delle nuove opportunità offerte dalla piattaforma.

Sotto trovate un link diretto all’intervista.

Ci siamo! Parte Codemotion 2013, oggi e domani con i workshop, mentre venerdì e sabato si succederanno decine e decine di sessioni sui più disparati aspetti della programmazione, del mondo IT, del gioco o semplicemente dell’essere e vivere da geek.

Sono particolarmente emozionato perchè anche io sarò presente come speaker insieme agli amici Massimo e Nicolò con una sessione che metterà a confronto Kinect con la piattaforma Intel Perceptual SDK. Il confronto si svolgerà proprio giocando alla morra cinese sfruttando la piattaforma di cloud Azure e la tecnologia SignalR per amministrare e gestire la partita.

Vedremo e confronteremo le caratteristiche delle due piattaforme e come abbiamo implementato l’ambiente di gioco fino a giungere allo SCONTRO FINALE! Winking smile

Vi aspettiamo il 22 marzo alle 14.10 con la sessione: “Morra Cinese in salsa gesture con contorno di SignalR”.

Tagged with: