tag:blogger.com,1999:blog-17218732733540991292024-03-13T00:34:38.213+01:00Code TailorMassimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.comBlogger477125tag:blogger.com,1999:blog-1721873273354099129.post-67682214452457684092017-06-28T10:43:00.001+02:002017-06-28T10:43:52.941+02:00Materiale della sessione a Cloud@Work2017Il materiale della sessione su Service Fabric tenuta durante l’evento <b>Cloud@Work2017</b> è disponibile, in particolare queste sono le slide:<br />
<br />
<div align="center">
<iframe allowfullscreen="" frameborder="0" height="290" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/key/KUJmAmw5buy8RQ" style="border-bottom-width: 1px; border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; margin-bottom: 5px; max-width: 100%;" width="340"> </iframe></div>
<div align="center" style="margin-bottom: 5px;">
<strong><a href="https://www.slideshare.net/massimobonanni/microservices-architecture-service-fabric" target="_blank" title="Microservices architecture & Service Fabric">Microservices architecture & Service Fabric</a> </strong>from <strong><a href="https://www.slideshare.net/massimobonanni" target="_blank">Massimo Bonanni</a></strong> </div>
<br />
mentre il codice delle demo è disponibile su GitHUb all’indirizzo<br />
<br />
<a href="https://github.com/massimobonanni/ServiceFabricSamples" title="https://github.com/massimobonanni/ServiceFabricSamples">https://github.com/massimobonanni/ServiceFabricSamples</a><br />
<br />
Buona lettura!! <img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="https://lh3.googleusercontent.com/-hdmtrFLE_zA/WVNrpsq42II/AAAAAAAAB8M/MWgELBYdMPIzW0CHY1YhhwUQkYiq-4P5QCHMYCw/wlEmoticon-smile%255B2%255D?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" />
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-84234971943918065682016-12-15T10:00:00.000+01:002016-12-15T12:20:10.625+01:00UMI Plus, prime impressioni!!!Ieri pomeriggio ho ricevuto, dritto dritto a casa, il mio nuovo UMI Plus 5.5 pollici Android.<br />
Probabilmente molti di voi, come d’altronde io prima del “famigerato” Black Friday, non sanno di cosa si tratta.<br />
<br />
Di fatto si tratta di uno smartphone cinese (trovate il sito ufficiale a questo <a href="http://www.umidigi.com/page-umi_plus_overview.html" target="_blank">link</a>) con delle caratteristiche decisamente interessanti, tra queste il prezzo!!!<br />
<br />
Proprio questa caratteristica e l’atmosfera da Black Friday, mi hanno spinto, non senza titubanza a prenderlo e, ora, dopo una giornata di utilizzo abbastanza intenso, provo a dare le mie impressioni.<br />
Tengo a precisare che non sono un espertone di Android ma diciamo un “super-user” e, quindi, quelle che trovate in questo post non sono considerazioni squisitamente tecniche o di confronto con altri smartphone, ma considerazioni personali e proprio per questo opinabili.<br />
<br />
Cominciamo dalle caratteristiche che sono rintracciabili, comunque al seguente <a href="http://www.umidigi.com/page-umi_plus_specification.html" target="_blank">link</a>.<br />
Tra le più importanti troviamo:<br />
<blockquote>
CPU : MediaTek Helio P10 Octa Core <br />
GPU : ARM Mali T860 image processor <br />
RAM : 4GB SAMSUNG eMMC5.1+LPDDR3 <br />
ROM : 32GB<br />
Display Size : 5.5 inch <br />
Resolution : 1920*1080 pixels<br />
Band : GSM: 850(B5)/900(B8)/1800(B3)/1900(B2) <br />
WCDMA: 850(B5)/900(B8)/1900(B2)/2100(B1)<br />
LTE FDD: 2100(B1)/1800(B3)/2600(B7)/800(B20) <br />
WIFI : 802.11 a/b/g/n 2.4GHz/5GHz <br />
Bluetooth : Bluetooth 4.1 <br />
GPS : Build in GPS <br />
Sensor: G-Sensor, Glonass, P-Sensor, L-Sensor, Accelerometer, Compass, Gyroscope, Hall switch </blockquote>
In pratica c’è tutto e se pensiamo che si tratta di un telefono da un paio di centinaio di euro (anche meno se lo si compra su GearBest in questi giorni) la cosa non guasta.<br />
Per quanto riguarda dove acquistarlo vi posto il suddetto GearBest (da dove l’ho acquistato io ed è arrivato in un paio di settimane) e l’onnipresente Amazon ma si trova anche su altri siti: <br />
<br />
<a href="https://www.amazon.it/UMI-PLUS-unlocked-Fingerprint-Flashlight/dp/B01LWLINFM/?_encoding=UTF8&camp=3370&creative=23322&keywords=umi%20plus&linkCode=ur2&qid=1481732377&sr=8-1&tag=codtai-21" rel="nofollow" target="_blank">UMI Plus Gray - Amazon.it</a><br />
<a href="http://www.gearbest.com/cell-phones/pp_446575.html?wid=11&lkid=10264850" target="_blank">UMI Plus Gray - GearBest.Com</a><br />
<br />
<br />
Definito come è fatto e dove acquistarlo, vediamo le mie impressioni.<br />
Aperto il pacchetto, mi trovo davanti ad una anonima scatola di cartone grigio (vedi immagine seguente) e la cosa non mi entusiasma.<br />
<br />
<a href="https://lh3.googleusercontent.com/-i0B-bL0tVTA/WFJXN-yLqgI/AAAAAAAAB4s/JeE81c-p3l8/s1600-h/IMG_20161213_1455405.jpg"><img alt="IMG_20161213_145540" border="0" height="480" src="https://lh3.googleusercontent.com/-x53nbKgQU-k/WFJXOXuKTKI/AAAAAAAAB4w/LcRKDXIICa8/IMG_20161213_145540_thumb2.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="IMG_20161213_145540" width="360" /></a><br />
<br />
All’interno della stessa, però la vera scatola contenitore dello smartphone è una ben fatta scatola in plastica traslucida (molto carina :-) )<br />
<br />
<a href="https://lh3.googleusercontent.com/-_PNo5IMV-4Q/WFJXO1f0EkI/AAAAAAAAB40/6fYbunYeUds/s1600-h/IMG_20161213_1455565.jpg"><img alt="IMG_20161213_145556" border="0" height="480" src="https://lh3.googleusercontent.com/-gRu2ZontchU/WFJXPhRFznI/AAAAAAAAB44/2UFnZpztCfY/IMG_20161213_145556_thumb2.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="IMG_20161213_145556" width="360" /></a><br />
<br />
Nella confezione troviamo lo smartphone, il caricatore rapido, il cavetto USB-C, lo strumento per estrarre il cassettino per l’alloggiamento delle due sim (o della sim e della scheda di memoria) e una guida rapida all’uso.<br />
<br />
<a href="https://lh3.googleusercontent.com/-I4qJE8WtJic/WFJXQGwXubI/AAAAAAAAB48/CS_hTfCfY08/s1600-h/IMG_20161213_1457029.jpg"><img alt="IMG_20161213_145702" border="0" height="240" src="https://lh3.googleusercontent.com/-8E_Hq0dQIyI/WFJXQpmXJ1I/AAAAAAAAB5A/hBlzRdunSoQ/IMG_20161213_145702_thumb3.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="IMG_20161213_145702" width="180" /></a><br />
<a href="https://lh3.googleusercontent.com/-NzafPBSyMws/WFJXRKcGSMI/AAAAAAAAB5E/QIA8GBprUIM/s1600-h/IMG_20161213_1458064.jpg"><img alt="IMG_20161213_145806" border="0" height="180" src="https://lh3.googleusercontent.com/-m0hh5bLic2k/WFJXRkns2oI/AAAAAAAAB5I/-vDgO7WBsNo/IMG_20161213_145806_thumb1.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="IMG_20161213_145806" width="240" /></a><br />
<br />
Lo smartphone ha una linea molto arrotondata (ricorda molto iPhone) e sembra ben costruito con una sensazione piacevole in mano.<br />
<br />
<a href="https://lh3.googleusercontent.com/-p5DxQeqnoKc/WFJXSLtjPDI/AAAAAAAAB5M/wPZYUy-i4AY/s1600-h/IMG_20161213_1623035.jpg"><img alt="IMG_20161213_162303" border="0" height="480" src="https://lh3.googleusercontent.com/-_4_aCiNqgQ4/WFJXSrbo0WI/AAAAAAAAB5Q/4ZVPpNqz5zg/IMG_20161213_162303_thumb2.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="IMG_20161213_162303" width="360" /></a><br />
<br />
<a href="https://lh3.googleusercontent.com/-mSHQd51Fk9Q/WFJXTBA_I9I/AAAAAAAAB5U/NcEhnqhthSA/s1600-h/IMG_20161213_1622505.jpg"><img alt="IMG_20161213_162250" border="0" height="480" src="https://lh3.googleusercontent.com/-HiV-BnLF03g/WFJXTvdQv_I/AAAAAAAAB5Y/8mbFihmU3Qw/IMG_20161213_162250_thumb2.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="IMG_20161213_162250" width="360" /></a><br />
<br />
e lo schermo sembra decisamente buono (anche troppo luminoso in alcune circostanze)<br />
<br />
<a href="https://lh3.googleusercontent.com/-dn8TWDT6Ar8/WFJXUMZhaDI/AAAAAAAAB5c/gTvFENFmDb4/s1600-h/IMG_20161213_1624335.jpg"><img alt="IMG_20161213_162433" border="0" height="480" src="https://lh3.googleusercontent.com/-sMZlXafEpIc/WFJXUtBv63I/AAAAAAAAB5g/wUrgpp8uDCA/IMG_20161213_162433_thumb2.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="IMG_20161213_162433" width="360" /></a><br />
<br />
La carica della batteria è durata una giornata intera ma diciamo che è stata messa a dura prova dal download dei vari profili, delle applicazioni e dall’uso prolungato per configurare le stesse.<br />
Per questo motivo mi riservo il giudizio sulla batteria con un utilizzo più "consono" della stessa.<br />
<br />
Il device arriva con la versione 6.0 di Android e una distribuzione UMI (la 3.01_20161019) che, a detta dell’azienda cinese, dovrebbe essere poco differente rispetto alla distro base Android. In realtà è disponibile un aggiornamento immediato alla 3.01_20161117.<br />
<br />
L’impressione di utilizzo del telefono è decisamente buona, la forma stondata si tiene bene in mano e l’interazione sembra fluida. C’è da dire che il telefono è stato appena configurato e, anche qui, mi riservo di verificare tra un pò di tempo a seguito di minore memoria disponibile, applicazioni installate e disinstallate e via discorrendo.<br />
<br />
Se proprio vogliamo dirla tutta, il bluetooth mi sembra scarsino (tanto per intenderci la mia autovettura non mostra il nome del brano in esecuzione) ma debbo capire se il problema è il device o il SO.<br />
<br />
Alla fine, per il momento, sono decisamente soddisfatto del device, proseguirò ad eseguire dei test più approfonditi (specialmente su fotocamera e sensore di impronte digitali).<br />
<br />
Stay tuned!!!! :-)Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-27547352088539398722016-12-08T19:56:00.001+01:002016-12-08T20:19:03.671+01:00MVP Reconnect …… ovvero quando entri nella “famigghia” resti sempre nella “famigghia”!!!Ma di che “famigghia” stiamo parlando!!!!<br /><br />
Fermi tutti, non si tratta di robe strane o sette segrete o affari malavitosi….stiamo parlando della grande famiglia dei Microsoft MVP.<br /><br />
Per chi non sapesse cosa sono i Microsoft MVP, vi consiglio di fare un giro sul sito ufficiale del programma (<a href="https://mvp.microsoft.com/it-it/" target="_blank">link</a>), ma, volendolo spiegare in pochisime parole, si tratta di un riconoscimento che Microsoft da a persone che si distinguono per il loro impegno, aiutando gli altri ad ottenere il massimo grazie alle tecnologie Microsoft. Si tratta di persone, non dipendenti Microsoft, che mettono la loro passione, il loro tempo, la loro buona volontà per la divulgazione e la condivisione della conoscenza. Non necessariamente (come qualcuno erroneamente sostiene, evidentemente non conoscendo le basi del programma) si tratta di professionisti nel termine letterale del termine ma si tratta comunque di un gruppo di persone che sacrifica un pò del suo tempo (e, a volte, vi assicuro neanche pò!!!) per la sua passione.<br /><br />
Personalmente ho avuto la fortuna e l’onore di far parte di questo gruppo per ben 6 anni di fila, ma entrando a lavorare in Microsoft lo scorso Marzo, sono di fatto uscito fuori dal programma (il programma è riservato ai non dipendenti Microsoft).<br /><br />
Lavorare in Microsoft è sicuramente un sogno inseguito da anni e un privilegio che, per uno come me sempre orientato sulle tecnologie della casa di Redmond non ha prezzo, ma dover lasciare un gruppo di amici e di persone come gli MVP, mi ha lasciato un pochino di amaro in bocca.<br /><br />
Fortunatamente ciò che esce dalla porta, rientra dalla finestra. Lo scorso 3 Novembre, <a href="https://twitter.com/StevenGuggs" target="_blank">Steve Guggenheimer</a> (Corporate Vice President of Developer Platform & Evangelism and Chief Evangelist) ha annunciato (<a href="https://blogs.msdn.microsoft.com/stevengu/2016/11/03/announcing-the-mvp-reconnect-program-the-2016-mvp-global-summit/" target="_blank">post</a>) "MVP Reconnect Program", un programma dedicato a coloro che non sono più MVP ufficiali.....perchè<br />
<br />
<div style="text-align: center;">
<span style="font-size: large;"><b>once an MVP, always part of the MVP community!</b> </span></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://mvp.microsoft.com/en-us/Pages/reconnect-whatis" target="_blank"><img border="0" height="106" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii9BhQv1FFxZNG6Qax0MnUZ0Ab8FfxazrvuVDEtOUdojuGJGa0s-I4UQKLDMAfH4NEww9bWd6II5Cd7S7pW_YbihAPX54DoYrcI79iguu7NTJD9he2det3PUCB7f8vX-dkboFiphZCtmq2Wpd4/s320/Reconnect_Logo_2.png" width="320" /></a></div>
<br />
Ieri mi è arrivato a casa il riconoscimento del mio "reconnect" e debbo dire che la cosa mi ha fatto molto piacere.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHkMzD8v9Uw_efSIpIOF3Lso0x-QL2IUTIfLO9e7h_YBveX-Jkv9mJrsUpawosWVjBdWA5QGYNyKjEnhNKxgIWzZUDHp67wQXXhklrCgl9Nn3uZ3LPqplf0C_L9aY353ebltED37uUSK3e9Yop/s1600/IMG_20161208_190337_low.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHkMzD8v9Uw_efSIpIOF3Lso0x-QL2IUTIfLO9e7h_YBveX-Jkv9mJrsUpawosWVjBdWA5QGYNyKjEnhNKxgIWzZUDHp67wQXXhklrCgl9Nn3uZ3LPqplf0C_L9aY353ebltED37uUSK3e9Yop/s400/IMG_20161208_190337_low.jpg" width="400" /></a></div>
<br />
Personalmente mi sento e mi sentirò e mi sarei, comunque, sentito un MVP a prescindere, ma così è più bello!!! 😉😉😉<br />
<br />
Prima di chiudere questo post vorrei ringraziare <a href="https://twitter.com/crisgherrero" target="_blank">Cristina González Herrero</a> (il mio program manager nel gruppo MVP), <a href="https://twitter.com/alead" target="_blank">Alessandro Teglia</a> e <a href="https://twitter.com/thisisjorie" target="_blank">Marjorie Di Clemente</a> senza i quali tutto questo non sarebbe stato possibile!!!!<br />
<br />
<br />Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-66780800628329780452016-06-29T20:20:00.001+02:002016-06-29T20:20:00.052+02:00L’attore…..chi è costui!!<p>Ovviamente non stiamo parlando di colui che recita sul palco di un teatro o davanti alla macchina da presa, ma dell’attore inteso come unità fondamentale di calcolo nell’approccio a Microservizi.</p> <p>Se vi interessa l’argomento e volete capire da quali basi matematiche (il modello Actor nasce, infatti, nel 1973, quindi un’era geologica fa per l’informatica) si basa uno dei capisaldi su cui si basa Service Fabric e non solo, ecco un video di Channel9 in cui “l’inventore” dell’Actor ci spiega un po' di cose.</p> <p align="center"><iframe height="281" src="https://channel9.msdn.com/Shows/Going+Deep/Hewitt-Meijer-and-Szyperski-The-Actor-Model-everything-you-wanted-to-know-but-were-afraid-to-ask/player" frameborder="0" width="500" allowfullscreen></iframe></p> <p>Buona visione!!!!</p> <p> </p> <div id="scid:77ECF5F8-D252-44F5-B4EB-D463C5396A79:4df296a8-9763-4b39-b48f-989de4cb4a89" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">Technorati Tags: <a href="http://technorati.com/tags/Actor+Model" rel="tag">Actor Model</a>,<a href="http://technorati.com/tags/Service+Fabric" rel="tag">Service Fabric</a>,<a href="http://technorati.com/tags/Reliable+Actor" rel="tag">Reliable Actor</a></div>Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-47617174464968526072016-03-25T10:00:00.000+01:002016-05-10T02:06:50.264+02:00dotNET{podcast} fa 100!!Ebbene si, contro ogni pronostico e in barba a chi ci vuole male……<a href="http://www.dotnetpodcast.com/" target="_blank">dotNET{podcast}</a> è arrivato a quota <strong><span style="background-color: yellow;">100 puntate</span></strong>! <br />
<a href="https://lh3.googleusercontent.com/-LgeMx8eSgps/VvRKbeQwkjI/AAAAAAAAB2s/XQvhat1P4NI/s1600-h/Logo-100-esima-puntata-400x248%25255B8%25255D.png"><img alt="Logo-100-esima-puntata-400x248" border="0" height="248" src="https://lh3.googleusercontent.com/-XGdCHpu9Xws/VvRKcNck7uI/AAAAAAAAB2w/-NLeHSozUdg/Logo-100-esima-puntata-400x248_thumb%25255B6%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Logo-100-esima-puntata-400x248" width="400" /></a><br />
<br />
Il traguardo è stato raggiunto in un anno e mezzo circa e, se pensate che, un anno ha 52 settimane, significa che siamo usciti con più di una puntata a settimana (Natale, Pasqua e ferragosto incluse)!<br />
<br />
Ma quello che molti non sanno è che dietro ad ogni puntata c’è un lavoro infinito di preparazione e, soprattutto, di post produzione!<br />
<br />
Per capire meglio cosa si nasconde dietro le quinte, ascoltate la <a href="http://bit.ly/1PtLnLa" target="_blank">puntata 100</a> e scoprirete come nasce e si evolve ogni episodio di <a href="http://www.dotnetpodcast.com/">dotNET{podcast}</a>.<br />
<br />
Un ringraziamento va ai miei soci <a href="https://twitter.com/dancerjude" target="_blank">Roberto Albano</a> e <a href="https://twitter.com/agiglio71" target="_blank">Antonio Giglio</a> senza il cui incessante lavoro tutto questo non sarebbe stato posibile e un benvenuto va a <a href="https://twitter.com/luke2375" target="_blank">Luca Di Fino</a>, neo entrato nel team di <a href="http://www.dotnetpodcast.com/" target="_blank">dotNET{podcast}</a> e nuovo "stagista" del gruppo.<br />
<br />
Un altro grazie va a tutti gli ospiti (anche internazionali) che ci hanno onorato della loro partecipazione e, soprattutto, a chi continua ad ascoltarci anche se non lo facciamo di professione…..evidentemente la passione traspare e ci aiuta!<br />
<br />
Allora buon ascolto e restate connessi!!<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:77ECF5F8-D252-44F5-B4EB-D463C5396A79:7a6585f2-1a00-48c5-97ea-6a870190d332" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
Technorati Tags: <a href="http://technorati.com/tags/dotnetpodcast" rel="tag">dotnetpodcast</a>,<a href="http://technorati.com/tags/podcast" rel="tag">podcast</a>,<a href="http://technorati.com/tags/microsoft" rel="tag">microsoft</a>,<a href="http://technorati.com/tags/.net" rel="tag">.net</a></div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-48065784218376053892016-02-12T09:00:00.000+01:002016-02-12T09:00:05.973+01:00Tascam DR-05 registratore digitale per tuttiDiverso tempo fa ho acquistato il registratore digitale <a href="http://www.amazon.it/gp/product/B00LU8K790/ref=as_li_tf_tl?ie=UTF8&camp=3370&creative=23322&creativeASIN=B00LU8K790&linkCode=as2&tag=codtai-21">Tascam DR-05</a> e, ora, dopo diversi mesi di utilizzo, posso dire la mia a proposito.<br />
<br />
Si tratta di un ottimo registratore digitale con microfono stereo che permette di ottenere registrazioni di ottima qualitaà anche in ambienti non perfetti dal punto di vista acustico.<br />
<br />
Interessante la possibilità di utilizzare un cavalletto di piccole dimensioni come <a href="http://www.amazon.it/gp/product/B00006J4GB/ref=as_li_tf_tl?ie=UTF8&camp=3370&creative=23322&creativeASIN=B00006J4GB&linkCode=as2&tag=codtai-21" rel="nofollow">HAMA Mini treppiede</a><img alt="" border="0" src="http://ir-it.amazon-adsystem.com/e/ir?t=codtai-21&l=as2&o=29&a=B00006J4GB" height="1" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; margin: 0px;" width="1" /> o <a href="http://www.amazon.it/gp/product/B00NKO1UR0/ref=as_li_tf_tl?ie=UTF8&camp=3370&creative=23322&creativeASIN=B00NKO1UR0&linkCode=as2&tag=codtai-21" rel="nofollow">Mini Cavalletto Universale</a><img alt="" border="0" src="http://ir-it.amazon-adsystem.com/e/ir?t=codtai-21&l=as2&o=29&a=B00NKO1UR0" height="1" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; margin: 0px;" width="1" /> per tenere il microfono sollevato dal tavolo in fase di registrazione grazie allàattacco universale per macchina fotografica che il microfono ha nella parte inferiore.<br />
<br />
Da segnalare anche il menu’ ben fatto e la possibilita’ di utilizzare una scheda SD esterna per memorizzare i file audio. Anche a livello di consumo batterie non e’ niente male. Consiglio l’uso delle alcaline non ricaricabili.<br />
<br />
Il mio utilizzo e’ stato prettamente di registrazione di podcast vocali (no musica) ma le recensioni confermano che se la cava egregiamente con la musica.<br />
Se dobbiamo trovare un difetto, e’ fin troppo sensibile e consiglio di spegnere i cellulari perche’ anche se messi non proprio vicinisimo ai microfoni stereo, si rischia di fare entrare i rumori degli stessi nella registrazione.<br />
<br />
Alla fine si tratta di un microfono molto buono con un ottimo rapporto prezzo/prestazioni. <br />
<br />
Io l’ho acquistato su Amazon.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.amazon.it/gp/product/B00LU8K790/ref=as_li_tf_tl?ie=UTF8&camp=3370&creative=23322&creativeASIN=B00LU8K790&linkCode=as2&tag=codtai-21" rel="nofollow" target="_blank"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilftyOIfZt2SHgVYMzjUtERn2zehAgX_eRFJvXIZ_sgxxIOsrXjTAxtWaMmsAvktq01rECv-7e447x3aOPfa-gX4AVPodjetDhvcPVnkuyn7N4xe7Evr3fzrAD2KQ4tkQ9UlFALimRXui5hfas/s320/2016-02-11_21-35-26.png" width="176" /></a></div>
<br />
<div align="center">
<a href="http://www.amazon.it/gp/product/B00LU8K790/ref=as_li_tf_tl?ie=UTF8&camp=3370&creative=23322&creativeASIN=B00LU8K790&linkCode=as2&tag=codtai-21" rel="nofollow">Tascam DR-05 VER 2 Registratore Portatile</a><img alt="" border="0" src="http://ir-it.amazon-adsystem.com/e/ir?t=codtai-21&l=as2&o=29&a=B00LU8K790" height="1" style="border: none !important; margin: 0px !important;" width="1" />
</div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-72176965795232453372016-01-18T10:14:00.001+01:002016-01-18T10:14:29.791+01:00Intel® RealSense™ SDK – Pulse EstimationPer la serie dedicata all’Intel RealSense SDK su <a href="https://software.intel.com/it-it" target="_blank">Intel Developer Zone</a>, è il turno della funzionalità di Pulse Estimation.<br />
<br />
La funzionalità di Pulse Estimation consente di stimare il battito cardiaco della persona di fronte alla camera.<br />
<br />
Trovate l’articolo all’indirizzo <a href="https://software.intel.com/it-it/articles/intel-realsense-sdk-pulse-estimation" title="https://software.intel.com/it-it/articles/intel-realsense-sdk-pulse-estimation">https://software.intel.com/it-it/articles/intel-realsense-sdk-pulse-estimation</a><br />
<br />
Enjoy RealSense!!Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-70540492782688894872016-01-11T13:05:00.003+01:002016-01-11T13:05:35.012+01:00Intel® RealSense™ SDK – Face ExpressionsVi segnalo l'ennesimo articolo riguardante le funzionalità esposte dall'SDK di Intel RealSense.<br />
<br />
Questa volta si tratta delle Face Expression e potete leggere l’articolo su <a href="https://software.intel.com/it-it">Intel Developer Zone</a> all’indirizzo <a href="https://software.intel.com/it-it/articles/intel-realsense-sdk-face-expressions" title="https://software.intel.com/it-it/articles/intel-realsense-sdk-face-expressions">https://software.intel.com/it-it/articles/intel-realsense-sdk-face-expressions</a><br />
<br />
Rimanete connessi perché gli articoli introduttivi non sono finiti!!<br />
<br />
Enjoy RealSense!Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-82275815435839928522016-01-07T09:00:00.000+01:002016-01-07T09:00:19.949+01:00Intel® RealSense™ SDK - Face AlertVi segnalo un ulteriore articolo della serie dedicata all’SDK per Intel RealSense pubblicato su <a href="https://software.intel.com/it-it">Intel Developer Zone</a> e riguardante i Face Alert<br />
<a href="https://software.intel.com/it-it/articles/intel-realsense-sdk-face-alerts" title="https://software.intel.com/it-it/articles/intel-realsense-sdk-face-alerts">https://software.intel.com/it-it/articles/intel-realsense-sdk-face-alerts</a><br />
<br />
Buona lettura!!<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:77ECF5F8-D252-44F5-B4EB-D463C5396A79:f537a8c0-13c5-4c03-b01d-d4c7b5ac543b" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
Technorati Tags: <a href="http://technorati.com/tags/Intel+RealSense+SDK" rel="tag">Intel RealSense SDK</a>,<a href="http://technorati.com/tags/Intel+RealSense" rel="tag">Intel RealSense</a></div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-34453726420266986182016-01-04T09:00:00.000+01:002016-01-04T09:00:16.161+01:00Intel® RealSense™ SDK - Face PoseVi segnalo il mio articolo pubblicato su <a href="https://software.intel.com/it-it">Intel Developer Zone</a> e relativo alle funzionalita’ di Face Pose con Intel® RealSense™ SDK.<br />
Potete leggere l’articolo all’indirizzo<br />
<a href="https://software.intel.com/it-it/articles/intel-realsense-sdk-face-pose" title="https://software.intel.com/it-it/articles/intel-realsense-sdk-face-pose">https://software.intel.com/it-it/articles/intel-realsense-sdk-face-pose</a><br />
Vi ricordo che l’elenco degli articoli e delle risorse relative a Intel® RealSense™ SDK sono disponibili alla pagina <a href="http://codetailor.blogspot.com/p/intelr-realsensetm.html" title="http://codetailor.blogspot.it/p/intelr-realsensetm.html">http://codetailor.blogspot.com/p/intelr-realsensetm.html</a><br />
Le demo di tali articoli sono disponibili su GitHub all’indirizzo <a href="https://github.com/massimobonanni/RealSenseSamples">https://github.com/massimobonanni/RealSenseSamples</a><br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:77ECF5F8-D252-44F5-B4EB-D463C5396A79:7aa0771b-1a4d-4674-a388-f4b3f6a5be28" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
Technorati Tags: <a href="http://technorati.com/tags/Intel+RealSense+SDK" rel="tag">Intel RealSense SDK</a>,<a href="http://technorati.com/tags/Intel+RealSense" rel="tag">Intel RealSense</a></div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-69210743756915026802015-12-21T09:00:00.000+01:002016-01-03T17:32:20.549+01:00Intel RealSense SDK – Face LandmarksVi segnalo il mio articolo sull’SDK di Intel® RealSense™ e relativo ai Face Landmarks<br />
<a href="https://software.intel.com/it-it/articles/intel-realsense-sdk-face-landmarks" target="_blank" title="Intel RealSense SDK – Face Landmarks">https://software.intel.com/it-it/articles/intel-realsense-sdk-face-landmarks</a><br />
<br />
Trovate tutti gli articoli su Intel® RealSense™ SDK fino ad ora pubblicati alla pagina <a href="http://codetailor.blogspot.it/p/intelr-realsensetm.html" title="http://codetailor.blogspot.it/p/intelr-realsensetm.html">http://codetailor.blogspot.it/p/intelr-realsensetm.html</a><br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:77ECF5F8-D252-44F5-B4EB-D463C5396A79:e6dff87f-4a97-4b0f-8fbb-6c69f1828898" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
Technorati Tags: <a href="http://technorati.com/tags/Intel+RealSense+SDK" rel="tag">Intel RealSense SDK</a>,<a href="http://technorati.com/tags/Intel+RealSense" rel="tag">Intel RealSense</a>,<a href="http://technorati.com/tags/Face+Landmarks" rel="tag">Face Landmarks</a></div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-6185482799601682452015-12-15T16:45:00.000+01:002015-12-15T16:45:12.876+01:00Intel RealSense SDK – Face TrackingVi segnalo il mio articolo su <a href="https://software.intel.com/" target="_blank">Intel Developer Zone</a> riguardante le funzionalità' di face tracking nell'Intel RealSense SDK.<br />
<br />
Potete trovarlo al seguente indirizzo:<br />
<a href="https://software.intel.com/it-it/articles/intel-realsense-sdk-face-tracking">https://software.intel.com/it-it/articles/intel-realsense-sdk-face-tracking</a><br />
<br />
Buona lettura!!<br />
<br />Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-33037928901089276732015-12-04T20:24:00.001+01:002015-12-04T20:24:16.968+01:00Rilasciata la versione R5 HF1 di Intel RealSense SDK<p>Nei giorni scorsi è stata rilasciata la versione R5 HF1 dell’SDK di Intel Realsense.</p> <p>Nel seguente <a href="https://software.intel.com/it-it/blogs/2015/12/04/rilasciata-realsense-sdk-r5">post</a> trovate alcune informazioni più dettagliate.</p> <p> </p> <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:56cdc657-12de-48b4-89f5-d675996532bd" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">Technorati Tags: <a href="http://technorati.com/tags/Intel+RealSense+SDK" rel="tag">Intel RealSense SDK</a></div> Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-14547467204179479282015-11-06T09:00:00.000+01:002015-11-06T09:00:11.424+01:00Template di progetto per sviluppare applicazioni WPF con Intel® RealSense™<p>E’ disponibile, nella gallery di Visual Studio, la prima versione del mio template di progetto per applicazioni WPF scritte in C# che permette di realizzare applicazioni con l’SDK di Intel® RealSense™.</p> <p>Il template si può scaricare direttamente all’interno Visual Studio utilizzando il tool “Extensions and Updates”</p> <p><a href="http://lh3.googleusercontent.com/-9tqsvfY8aRc/Vjuxf9V1FEI/AAAAAAAAB00/IQ6FJwOwIyM/s1600-h/image%25255B6%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="http://lh3.googleusercontent.com/-W-PcT7OZKwU/VjuxhEonmwI/AAAAAAAAB04/9qoc42emIpE/image_thumb%25255B4%25255D.png?imgmax=800" width="500" height="285"></a></p> <p>oppure all’indirizzo </p> <p><a title="https://visualstudiogallery.msdn.microsoft.com/1c36ecfd-8c00-4aee-b20c-a1726ab6424d" href="https://visualstudiogallery.msdn.microsoft.com/1c36ecfd-8c00-4aee-b20c-a1726ab6424d">https://visualstudiogallery.msdn.microsoft.com/1c36ecfd-8c00-4aee-b20c-a1726ab6424d</a></p> <p><a href="http://lh3.googleusercontent.com/-G1IO258K658/VjuxiGM53jI/AAAAAAAAB1E/ckqfHjoGh3k/s1600-h/SNAGHTMLf9cff23%25255B5%25255D.png"><img title="SNAGHTMLf9cff23" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="SNAGHTMLf9cff23" src="http://lh3.googleusercontent.com/-eTj3wbMp-a0/VjuxjT5_2xI/AAAAAAAAB1M/ak0WMbWGpnA/SNAGHTMLf9cff23_thumb%25255B2%25255D.png?imgmax=800" width="500" height="319"></a></p> <p>Il template esegue le seguenti operazioni per voi:</p> <ol> <li>Aggiunge la reference all’assembly libpxcclr.cs.dll (nelle due distinte versioni per x86 e x64);</li> <li>Aggiunge lo script di post build per copiare la libreria libpxccpp2c.dll dalla cartella dell’SDK alla cartella bin del vostro progetto.</li></ol> <p>Una volta creato il progetto dovete rimuovere la configurazione di compilazione AnyCPU (che non ha più senso) dalla vostra solution e sarete pronti per sviluppare con Intel® RealSense™.</p> <p>Ovviamente dovete installare l’SDK che potete scaricare all’indirizzo <a title="https://software.intel.com/en-us/intel-realsense-sdk" href="https://software.intel.com/en-us/intel-realsense-sdk">https://software.intel.com/en-us/intel-realsense-sdk</a></p> <p>Prossimamente cercherò di rilasciare anche il template per VB.NET.</p> <p>Stay Tuned!!</p> <p> </p> <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1f6e1370-29f7-44b6-8863-bbd0767dfbd0" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">Technorati Tags: <a href="http://technorati.com/tags/Intel+RealSense" rel="tag">Intel RealSense</a>,<a href="http://technorati.com/tags/Visual+Studio+Template" rel="tag">Visual Studio Template</a></div> Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-56458440477677973412015-10-26T08:00:00.000+01:002015-10-26T08:00:07.484+01:004 chiacchiere con Erica Barone!<p>Vi segnalo la puntata della serie #TecHeroes in cui faccio l’intervistatore di Erica Barone, Microsoft Technical Evangelist.</p> <p>La puntata è incentrata sulla nuova piattaforma di sviluppo Windows10 ed è particolare perchè, di solito, sono gli evangelist a fare da intervistatori!!! </p> <p align="center"><iframe height="281" src="https://channel9.msdn.com/Shows/TecHeroes/TecHeroes-Speciale-dotNETpodcast-intervista-ad-Erica-Barone/player" frameborder="0" width="500" allowfullscreen></iframe></p> <p> </p> <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dc552bb0-65a2-4893-a7ec-3f149f3da2af" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">Technorati Tags: <a href="http://technorati.com/tags/Channel9" rel="tag">Channel9</a>,<a href="http://technorati.com/tags/TecHeroes" rel="tag">TecHeroes</a>,<a href="http://technorati.com/tags/Windows+10" rel="tag">Windows 10</a></div> Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-51718944783552540442015-10-12T17:48:00.001+02:002015-10-12T17:48:18.898+02:00Rilasciata nuova versione dell’SDK per Band<p>Dopo l’annuncio dell’uscita della versione 2 del Band, ecco qui il rilascio dell’SDK per lo stesso.</p> <p>Potete trovare maggiori info alla pagina <a title="http://developer.microsoftband.com/bandSDK" href="http://developer.microsoftband.com/bandSDK">http://developer.microsoftband.com/bandSDK</a></p> <p>Tra le novità da segnalare i nuovi sensori inseriti nel nuovo device:</p> <ul> <li>Sensore galvanometrico: resistenza in KOhm di chi indossa il sensore;</li> <li>Sensore RR: fornisce il tempo intercorso tra i due ultimi battiti cardiaci (utilizzabile solo in resting mode);</li> <li>Sensore luce ambientale: fornisce la luminosità dell’ambiente circostante in lux;</li> <li>Barometro: restituisce pressione atmosferica in hPa e temperatura dell’aria in gradi celsius;</li> <li>Altimetro: fornisce informazioni sulla velocità di scalata/discesa e via discorrendo.</li></ul> <p>La versione dell’SDK rilasciato è 1.3.10929 ed è compatibile con la precedente (esclusiva per Band 1) nel senso che se avete progetti che referenziano la precedente e girano su Band1, tutto continua a funzionare.</p> <p>Se provate ad utilizzare uno dei sensori non disponibili sul Band1 (ad esempio l’altimetro) quello che otterrete è un errore del tipo “Use of an unsupported sensor”</p> <p><a href="http://lh3.googleusercontent.com/-r4b738pvczU/VhvWPZd-emI/AAAAAAAAB0c/iFe-hzgT9oM/s1600-h/image%25255B4%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh3.googleusercontent.com/-iLGOIRIiSYM/VhvWQEKkq2I/AAAAAAAAB0g/eBC_sKzcv6U/image_thumb%25255B2%25255D.png?imgmax=800" width="500" height="99"></a></p> <p>Appena avrò fra le mani la nuova versione del Band andremo ad analizzare il funzionamento dei nuovi sensori.</p> <p> </p> <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0c74a2cd-653f-436d-a930-9c462e4c130a" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">Tag di Technorati: <a href="http://technorati.com/tags/Microsoft+Band+SDK" rel="tag">Microsoft Band SDK</a>,<a href="http://technorati.com/tags/Band2" rel="tag">Band2</a>,<a href="http://technorati.com/tags/Band1" rel="tag">Band1</a></div> Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-88104919548645820602015-10-05T10:00:00.000+02:002015-10-05T10:00:03.788+02:00Nomina a Intel Black Belt<p>Lo scorso 2 ottobre ho avuto l’onore di essere nominato Intel Black Belt (<a title="https://software.intel.com/it-it/blackbelt" href="https://software.intel.com/it-it/blackbelt">https://software.intel.com/it-it/blackbelt</a>). E’ per me un onore soprattutto perchè in europa siamo solamente in 3 e due nel nostro paese (l’altro italiano e’ <a href="https://software.intel.com/it-it/user/784718" target="_blank">Marco Dal Pino</a> che saluto e a cui faccio i complimenti).</p> <p>Intel Black Belt è il massimo award concesso da Intel Corporation e premia chi si distingue per essere presente nelle attività community e nella documentazione tecnica.</p> <p>Cito un paragrafo preso dal sito ufficale Intel Developer Zone:</p> <blockquote> <p><em>Il Programma Intel® Black Belt Software Developer riconosce i membri delle nostre comunità che sono noti per la loro esperienza tecnica e leadership. Sono membri che condividono le proprie conoscenze e collaborano con altri rafforzando le nostre comunità. Il titolo di Black Belt è riservato ai membri che mettono a disposizione delle comunità la loro vasta esperienza e competenza. Questo titolo riconosce i membri anche per l'impegno e il tempo dedicati nel mettere a disposizione informazioni tecniche che rendono l'Intel® Developer Zone una risorsa di valore per gli sviluppatori.</em></p></blockquote> <p>Ringrazio <a href="https://software.intel.com/en-us/user/552115" target="_blank">Francesco Baldassarri</a> per la sua pazienza quando rompo le scatole per pubblicare documentazione su IDZ, la mia community di riferimento DomusDotNet perchè, senza la visibilità che una community così importante da, sarebbe stato tutto più difficile e quella santa donna di mia moglie che sopporta il fatto che spesso mi metta davanti al pc in orari inconsueti!</p> <p>Adesso la sfida è di impegnarsi ancora di più perchè diventare Intel Black Belt è meraviglioso, ma mantenere il titolo è d’obbligo!</p> <p> </p> <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a11d720b-e612-419f-b0a7-2082dea23489" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">Technorati Tags: <a href="http://technorati.com/tags/Intel+Black+Belt" rel="tag">Intel Black Belt</a>,<a href="http://technorati.com/tags/Intel+Developer+Zone" rel="tag">Intel Developer Zone</a>,<a href="http://technorati.com/tags/Intel+RealSense" rel="tag">Intel RealSense</a></div> Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-58393035937506978902015-10-05T09:00:00.000+02:002015-10-05T09:00:07.284+02:00Universal Windows Platform – Da dove iniziare<p>In questo post vorrei proporre una lista di URL utili a chi si avvicina allo sviluppo per la Universal Windows Platform.</p> <p>Per cominciare la documentazione ufficiale Microsoft:</p> <p><a href="http://bit.ly/1iHFHEP" target="_blank">What’s new for developers in Windows 10</a></p> <p><a href="http://bit.ly/1iHFSAa" target="_blank">Get started with Windows apps</a></p> <p><a href="http://bit.ly/1WvfEj6" target="_blank">Design UWP apps</a></p> <p><a href="http://bit.ly/1FzV0KF" target="_blank">Develop Windows apps</a></p> <p><a href="http://bit.ly/1RdnpHH" target="_blank">Publish Windows apps</a></p> <p>Infine vi suggerisco il corso specifico su <a href="http://www.microsoftvirtualacademy.com/" target="_blank">Microsoft Virtual Academy</a> dedicato in maniera specifica a Windows 10:</p> <p><a href="http://bit.ly/1RdmDKG" target="_blank">A Developer’s Guide to Windows 10</a></p> <p> </p> <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:61432171-670a-4c2b-841a-3363fc2593d3" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">Tag di Technorati: <a href="http://technorati.com/tags/UWP" rel="tag">UWP</a>,<a href="http://technorati.com/tags/Universal+Windows+Platform" rel="tag">Universal Windows Platform</a>,<a href="http://technorati.com/tags/Windows+10" rel="tag">Windows 10</a></div> Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-79477094856877391272015-09-28T10:25:00.001+02:002015-09-28T10:25:28.889+02:00Intel® RealSense™ primo contatto su IDZ<p>Vi segnalo il primo di una serie di articoli dedicati a Intel® RealSense™ che verranno pubblicati su <a href="https://software.intel.com/en-us" target="_blank">Intel Developer Zone</a>.</p> <p>L’articolo è raggiungibile all’indirizzo</p> <p><a title="https://software.intel.com/en-us/articles/intel-realsense-sdk-primo-contatto/" href="https://software.intel.com/en-us/articles/intel-realsense-sdk-primo-contatto/">https://software.intel.com/en-us/articles/intel-realsense-sdk-primo-contatto/</a></p> <p>Buona lettura e rimanete connessi!!!</p> <p> </p> <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c7f86089-25ca-4efc-8f69-dbfa999d3130" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">Tag di Technorati: <a href="http://technorati.com/tags/Intel+RealSense+SDK" rel="tag">Intel RealSense SDK</a>,<a href="http://technorati.com/tags/Intel+Developer+Zone" rel="tag">Intel Developer Zone</a></div> Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-34564746886164988182015-08-10T09:00:00.000+02:002015-08-10T09:00:01.024+02:00Microsoft Band SDK su Channel9Se siete interessati allo sviluppo per il Microsoft BAND vi segnalo la mia “serie” su Channel9 <a href="https://channel9.msdn.com/Blogs/Microsoft-Band-SDK-ITA" target="_blank">Microsoft Band SDK</a>.<br />
Al momento ci sono due webcast relativi all’SDK su Windows e alle Web Tiles.<br />
<div align="center">
<iframe allowfullscreen="" frameborder="0" height="280" src="https://channel9.msdn.com/Blogs/Microsoft-Band-SDK-ITA/Sviluppare-per-Microsoft-Band/player" width="500"></iframe></div>
<div align="center">
<iframe allowfullscreen="" frameborder="0" height="280" src="https://channel9.msdn.com/Blogs/Microsoft-Band-SDK-ITA/Microsoft-Band-SDK-Web-Tiles-Preview/player" width="500"></iframe></div>
<br />
<div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:169e0f03-f0a6-44fd-8b05-623c31051965" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
Technorati Tags: <a href="http://technorati.com/tags/Microsoft+Band" rel="tag">Microsoft Band</a>,<a href="http://technorati.com/tags/Microsoft+Band+SDK" rel="tag">Microsoft Band SDK</a>,<a href="http://technorati.com/tags/Web+Tiles" rel="tag">Web Tiles</a></div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-84476396378765010132015-07-31T09:00:00.000+02:002015-07-31T09:00:01.591+02:00Microsoft Band SDK – Web Tile : RESTIn questo post, ultimo di questa mini serie dedicata alle Web Tile, vedremo come sia possibile realizzare una tile che visualizza dei dati presi da un servizio REST.<br />
Il servizio che utilizzeremo è un semplicissimo servizio REST, hostato su Azure, che permette di eseguire il ping verso un indirizzo web.<br />
Il servizio risponde all’url <br />
<br />
<strong>http://webtileapi.azurewebsites.net/api/Ping?urlToPing=<url da verificare></strong><br />
<strong></strong><br />
e lo fa con un JSON del tipo<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:90b93d07-b553-4908-9822-f53580aba13b" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
{<br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"UrlPinged"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"<url da verificare>"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"Result"</span><span style="background: rgb(255, 255, 255); color: black;">: 0,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"ResultString"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Ok"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"PingDurationInMilliseconds"</span><span style="background: rgb(255, 255, 255); color: black;">: 100,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"PingDateTime"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"2015-07-27T18:02:57.1500904Z"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span></div>
</div>
</div>
<br />
in cui troviamo il risultato del ping (OK o ERROR), il tempo di attesa e il timestamp di esecuzione dell’operazione.<br />
Quello che vogliamo fare è creare una Web Tile in grado di mostrare le statistiche per due siti e i dettagli per ogni sito, quindi un totale di 3 pagine.<br />
In questo caso, tralasciando la parte del file manifest.json relativa ai metadati, i punti cruciali del file stesso sono la definizione delle risorse (con le relative variabili da utilizzare) e la definizione delle pagine.<br />
Partiamo con la definizione delle risorse:<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:dd240b9c-c6ca-46fb-bfc4-a6219907fb71" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
<span style="background: rgb(255, 255, 255); color: #2e75b6;">"resources"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"url"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"http://webtileapi.azurewebsites.net/api/Ping?urlToPing=http://www.dotnetpodcast.com"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"style"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Simple"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"content"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"DNPpingdatetime"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"PingDateTime"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"DNPresultstring"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ResultString"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"url"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"http://webtileapi.azurewebsites.net/api/Ping?urlToPing=http://www.domusdotnet.org"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"style"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Simple"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"content"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"DDNpingdatetime"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"PingDateTime"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"DDNresultstring"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ResultString"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span></div>
</div>
</div>
<br />
Il tipo di entrambe le risorse è “Simple”, il che comunica all’infrastruttura delle Web Tile (gestita dall’app mobile Microsoft Health), che si avrà a che fare con una risposta composta da una struttura JSON e non da una collezione di item, come avviene nel caso del tipo “Feed”.<br />
Nella parte di content definiamo i dati che ci interessa mostrare e, in particolare, XXXpingdatetime e XXXresultstring che conterranno i valori delle proprietà PingDateTime e ResultString della struttura JSON restituita del servizio.<br />
Le due chiamate ai servizi verranno eseguite nell’ordine impostato.<br />
Nella definizione delle pagine troviamo:<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8d86cd1a-e6fb-4466-9af5-dc78ee849a36" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
<span style="background: rgb(255, 255, 255); color: #2e75b6;">"pages"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"layout"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"MSBand_MetricsWithIcons"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"iconBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"11"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"conditions"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"icon"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotnetpodcasticon"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"21"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"conditions"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"icon"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"domusdotneticon"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">],</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"textBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"12"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotNETpodcast {{DNPresultstring}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"22"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"DomusDotNet {{DDNresultstring}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"layout"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"MSBand_NoScrollingText"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"textBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"1"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotNET{podcast}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"2"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{DNPresultstring}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"3"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{DNPpingdatetime}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"layout"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"MSBand_NoScrollingText"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"textBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"1"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"DomusDotNet"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"2"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{DDNresultstring}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"3"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{DDNpingdatetime}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span></div>
</div>
</div>
<br />
Abbiamo, quindi, tre pagine.<br />
Il layout della prima di queste è di tipo MSBand_MetricsWithIcons:<br />
<br />
<a href="http://lh3.googleusercontent.com/-eTADeYrgjGI/VbaDB7-u08I/AAAAAAAAByg/oqtSEskr2gY/s1600-h/SNAGHTMLab8921b%25255B6%25255D.png"><img alt="SNAGHTMLab8921b" border="0" src="http://lh3.googleusercontent.com/-RPKiCDEC8JY/VbaDCwC47SI/AAAAAAAAByo/dQJA1aaA_NQ/SNAGHTMLab8921b_thumb%25255B3%25255D.png?imgmax=800" height="149" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SNAGHTMLab8921b" width="500" /></a><br />
<br />
che mostrerà il riepilogo dell’ultima invocazione:<br />
<br />
<a href="http://lh3.googleusercontent.com/-sEn2-WJ9_po/VbaDE6gf2tI/AAAAAAAAByw/Kqdpflti7gg/s1600-h/image%25255B9%25255D.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-Jzmn7bbADMo/VbaDGQ-Cy0I/AAAAAAAABy4/-JmAd7lXt5Y/image_thumb%25255B5%25255D.png?imgmax=800" height="111" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="350" /></a><br />
<br />
Nel JSON che definisce il binding degli elementi visuali della pagina possiamo osservare la sezione iconBindings all’interno della quale assegniamo delle icone agli elementi visuali in grado di contenerle.<br />Le icone in questione sono contenute nella cartella icons del package e definite nella sezione JSON icons:<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:56d74549-8ec0-4ec1-b04b-34f0ce4f9db8" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"icons"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"dotnetpodcasticon"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/dotnetpodcast.png"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"domusdotneticon"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/domusdotnet.png"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span></div>
</div>
</div>
<br />
Nella parte del binding degli elementi visuali che contengono il testo, invece, assegniamo delle scritte a cui concateniamo uno dei valori prelevati dal servizio.<br />
Le altre due pagine sono uguali tra loro e usano il layout MSBand_NoScrollingText:<br />
<br />
<a href="http://lh3.googleusercontent.com/-bT5ix2A1h6Y/VbaDHQ9N_aI/AAAAAAAABzA/SznU05hWSpM/s1600-h/SNAGHTMLab98ecb%25255B5%25255D.png"><img alt="SNAGHTMLab98ecb" border="0" src="http://lh3.googleusercontent.com/-9X4RjHbKvd0/VbaDIIlM4fI/AAAAAAAABzI/PicYVHO9qpg/SNAGHTMLab98ecb_thumb%25255B2%25255D.png?imgmax=800" height="169" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SNAGHTMLab98ecb" width="500" /></a><br />
<br />
Le tre righe sono messe in binding, rispettivamente, con una stringa costante (il nome del sito) e con i due valori ottenuti dal servizio, ottenendo, ad esempio:<br />
<br />
<a href="http://lh3.googleusercontent.com/-irtYK0toB_c/VbaDKu6XWLI/AAAAAAAABzQ/8cDJ7qcZuvo/s1600-h/image%25255B4%25255D.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-3IprPOVzsRo/VbaDL0vpmNI/AAAAAAAABzY/L3eLt4bPs8c/image_thumb%25255B2%25255D.png?imgmax=800" height="112" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="350" /></a><br />
<br />
In questo modo, ogni volta che Microsoft Health aggiornerà la Web Tile (l’intervallo in minuti è contenuto nella proprietà refreshIntervalMinutes, come visto nei precedenti post), verrà invocato due volte il servizio ed effettuato il binding dei dati sulle pagine.<br />
Le pagine così create non hanno, al momento, interazione con l’utente.<br />
Il file manifest completo è il seguente:<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:38bcbfef-137c-4552-8903-db541ac9fcb0" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
{<br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"manifestVersion"</span><span style="background: rgb(255, 255, 255); color: black;">: 1,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"name"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"PingBand"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"description"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Tieni sotto controllo i tuoi siti con PingBand"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"version"</span><span style="background: rgb(255, 255, 255); color: black;">: 1,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"versionString"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"1.0"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"author"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Massimo Bonanni"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"contactEmail"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"massimo.bonanni@tiscali.it"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"tileIcon"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"46"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/largeicon.png"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"badgeIcon"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"24"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/smallIcon.png"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"icons"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"dotnetpodcasticon"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/dotnetpodcast.png"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"domusdotneticon"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/domusdotnet.png"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"refreshIntervalMinutes"</span><span style="background: rgb(255, 255, 255); color: black;">: 15,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"resources"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"url"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"http://webtileapi.azurewebsites.net/api/Ping?urlToPing=http://www.dotnetpodcast.com"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"style"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Simple"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"content"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"DNPpingdatetime"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"PingDateTime"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"DNPresultstring"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ResultString"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"url"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"http://webtileapi.azurewebsites.net/api/Ping?urlToPing=http://www.domusdotnet.org"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"style"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Simple"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"content"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"DDNpingdatetime"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"PingDateTime"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"DDNresultstring"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ResultString"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">],</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"pages"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"layout"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"MSBand_MetricsWithIcons"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"iconBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"11"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"conditions"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"icon"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotnetpodcasticon"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"21"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"conditions"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"icon"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"domusdotneticon"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">],</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"textBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"12"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotNETpodcast {{DNPresultstring}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"22"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"DomusDotNet {{DDNresultstring}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"layout"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"MSBand_NoScrollingText"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"textBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"1"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotNET{podcast}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"2"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{DNPresultstring}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"3"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{DNPpingdatetime}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"layout"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"MSBand_NoScrollingText"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"textBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"1"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"DomusDotNet"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"2"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{DDNresultstring}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"3"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{DDNpingdatetime}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">} </span></div>
</div>
</div>
<br />
Con questo è tutto per quanto riguarda la mini serie dedicata alla preview delle Web Tile.<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:97fcf468-5c93-4edc-8dc8-5cc2313a0e99" style="display: inline; float: none; margin: 0px; padding: 0px;">
Technorati Tags: <a href="http://technorati.com/tags/Microsoft+Band" rel="tag">Microsoft Band</a>,<a href="http://technorati.com/tags/MIcrosoft+Band+SDK" rel="tag">MIcrosoft Band SDK</a>,<a href="http://technorati.com/tags/Web+Tile+Preview" rel="tag">Web Tile Preview</a>,<a href="http://technorati.com/tags/Web+Tile" rel="tag">Web Tile</a></div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-29929386181207031862015-07-29T09:00:00.000+02:002015-07-29T09:00:03.845+02:00Microsoft Band SDK – Web Tile : Feed RSSIn questo post vorrei prendere in esame come sia possibile creare una Web Tile prendendo i dati da un feed RSS.<br />
Abbiamo visto nel precedente post dedicato alle Web Tile quale è la struttura del file manifest.json, in questo post vedremo come configurare la parte relativa alle risorse e alle pagine per poter visualizzare il contenuto di un feed RSS.<br />
Cominciamo con il prendere un feed RSS: nell’esempio riportato utilizzerò il feed di <a href="http://www.dotnetpodcast.com/" target="_blank">dotNET{podcast}</a> (così faccio anche pubblicita’ occulta al sito <img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="http://lh3.googleusercontent.com/-pMo3-alS030/VbT2zKTpOSI/AAAAAAAABxc/fmkgSQJBlQc/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" />).<br />
Il feed completo si trova al seguente <a href="http://www.dotnetpodcast.com/feed/RSS" target="_blank">link</a>.<br />
Prima cosa che andiamo a configurare è la sezione resources e, precisamente:<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:250ed767-23ac-41e8-8817-90d8240077a7" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"resources"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"url"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"http://www.dotnetpodcast.com/feed/RSS"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"style"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Feed"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"content"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"title"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"title"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"pubdate"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"pubDate"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"itunesduration"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"itunes:duration"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">],</span></div>
</div>
</div>
<br />
Osserviamo che:<br />
<ul>
<li>lo style è Feed il che dice all’infrastruttura delle web tile che stiamo recuperando un feed e che quando apriremo la tile sul Band, avremo un numero di pagine, tutte uguali e fino ad un massimo di 8, che conterranno i dati secondo il layout che sceglieremo nella parte delle pages;</li>
<li>l’url del feed è nella proprietà url;</li>
<li>l’estrazione dei dati che ci interessano è definita nell’oggetto content ed in particolare definiamo tre variabili “title”, “pubdate” e “itunesduration” (i nomi sono quelli che ci fanno più comodo) che contengono, rispettivamente i campi “title”, “pubDate” e “itunes:duration” del tag <item> contenuto nell’XML del feed;</li>
</ul>
In questo modo, di fatto costruiamo una sorta di DTO che mappa il contenuto del feed in opportune variabili.<br />
Il secondo step consiste nel definire come vogliamo appaiano i dati al’interno della tile che metteremo nella strip del Band.<br />
Per fare ciò, dovremo agire sulla collezione pages del file di manifest.<br />
In questo caso, poichè stiamo trattando un feed, avremo una pagina sola che verrà ripetuta per ogni item presente nel feed (fino ad un massimo di 8).<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c7c89142-da38-4cc3-b0f1-0e0bb95f1b83" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"pages"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"layout"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"MSBand_NoScrollingText"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"textBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"1"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{title}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"2"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{pubdate}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"3"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"durata: {{itunesduration}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span></div>
</div>
</div>
<br />
In questo caso abbiamo scelto il layout MSBand_NoScrolingText impostando opportunamente la proprietà layout.<br />
<a href="http://lh3.googleusercontent.com/-_5BCQqUfmQg/VbT2z4HgK7I/AAAAAAAABxk/p_CjsVB0m7E/s1600-h/SNAGHTML407c5aa%25255B5%25255D.png"><img alt="SNAGHTML407c5aa" border="0" src="http://lh3.googleusercontent.com/-FBft3tiSPzU/VbT209nEqMI/AAAAAAAABxs/bNuOJMLTylo/SNAGHTML407c5aa_thumb%25255B2%25255D.png?imgmax=800" height="169" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SNAGHTML407c5aa" width="500" /></a><br />
La proprietà condition in questa versione delle Web Tile deve essere posta obbligatoriamente a true.<br />
L’oggetto textBindings, infine, contiene l’associazione tra i controlli presenti nel layout e le variabili definite nella sezione resources.<br />
Nel nostro caso specifico abbiamo:<br />
<ul>
<li>nell’elementid 1 (quello che nell’immagine del template è Header)mettiamo il contenuto della variabile title;</li>
<li>nell’elementid 2 (Body lines 1) mettiamo il contenuto della variabile pubdate;</li>
<li>nell’elementid 3 (Secondary Content) mettiamo la concatenazione tra il testo “durata: “ e il contenuto della variabile itunesduration.</li>
</ul>
Possiamo osservare che si utilizza la sintassi {{nomevariabile}} per definire il binding.<br />E’ possibile combinare, in uno degli elementi del layout, più variabili o anche concatenare stringhe e variabili.<br />
Infine, per personalizzare ulteriormente la visualizzazione del feed, possiamo cambiare il tema utilizzato all’interno della tile utilizzando l’oggetto JSON tileTheme:<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c30bf2ae-fbc3-4ab8-922f-adbb8cad41f9" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
<span style="background: rgb(255, 255, 255); color: #2e75b6;">"tileTheme"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"base"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ffaf00"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"highlight"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ffaf00"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"lowlight"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"f99a03"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"secondary"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"9e9678"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"highContrast"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ffa500"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"muted"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"bc8b00"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span></div>
</div>
</div>
<br />
La seguente figura mostra il significato delle singole proprieta’ dell’oggetto tileTheme:<br />
<br />
<a href="http://lh3.googleusercontent.com/-6OCa9i56VzA/VbT21yKwxAI/AAAAAAAABx0/U7qvOR_NGk4/s1600-h/image%25255B4%25255D.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-IJCLLSEFNXI/VbT22p56pnI/AAAAAAAABx8/Gezf3nhqbzs/image_thumb%25255B2%25255D.png?imgmax=800" height="347" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="500" /></a><br />
<br />
Quello che otteniamo, una volta installata la Web Tile attraverso l’applicazione Microsoft Health, e’ mostrato nella seguente figura:<br />
<br />
<a href="http://lh3.googleusercontent.com/-Iul6MB7F7j0/VbT24hLmP5I/AAAAAAAAByE/MXTKXwlKuCI/s1600-h/Pagina-del-feed%25255B4%25255D.png"><img alt="Pagina-del-feed" border="0" src="http://lh3.googleusercontent.com/-A9c5nT6-tv8/VbT284OHQmI/AAAAAAAAByM/piGCM65FB84/Pagina-del-feed_thumb%25255B2%25255D.png?imgmax=800" height="172" style="background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Pagina-del-feed" width="500" /></a><br />
<br />
Il file manifest completo e’ il seguente:<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2749fba0-5435-4799-9bb9-4cd19c024863" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
{<br />
<span style="background: rgb(255, 255, 255); color: #2e75b6;">"manifestVersion"</span><span style="background: rgb(255, 255, 255); color: black;"> : 1,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"name"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotNET{podcast}"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"description"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Il feed di dotNET{podcast}, il primo podcast italiano su tecnologie Microsoft."</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"version"</span><span style="background: rgb(255, 255, 255); color: black;"> : 1,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"versionString"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"1.0"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"author"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Massimo Bonanni"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"contactEmail"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"massimo.bonanni@dotnetpodcast.com"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"organization"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotNET{podcast}"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"tileIcon"</span><span style="background: rgb(255, 255, 255); color: black;"> : {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"46"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/largeicon.png"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"badgeIcon"</span><span style="background: rgb(255, 255, 255); color: black;"> : {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"24"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/smallIcon.png"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"refreshIntervalMinutes"</span><span style="background: rgb(255, 255, 255); color: black;"> : 15,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"tileTheme"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"base"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ffaf00"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"highlight"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ffaf00"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"lowlight"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"f99a03"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"secondary"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"9e9678"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"highContrast"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ffa500"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"muted"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"bc8b00"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"resources"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"url"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"http://www.dotnetpodcast.com/feed/RSS"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"style"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Feed"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"content"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"title"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"title"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"pubdate"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"pubDate"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"itunesduration"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"itunes:duration"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">],</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"pages"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"layout"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"MSBand_NoScrollingText"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"textBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"1"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{title}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"2"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{pubdate}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"3"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"durata: {{itunesduration}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span></div>
</div>
</div>
<br />
Nel prossimo post vedremo come creare una tile che mostri delle pagine i cui contenuti sono recuperati da un nostro servizio REST custom.<br />
<br />
Rimanete connessi!!!<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:31dd14de-a497-4d0c-8365-15bc3e58747c" style="display: inline; float: none; margin: 0px; padding: 0px;">
Technorati Tags: <a href="http://technorati.com/tags/Microsoft+Band" rel="tag">Microsoft Band</a>,<a href="http://technorati.com/tags/Microsoft+Band+SDK" rel="tag">Microsoft Band SDK</a>,<a href="http://technorati.com/tags/Web+Tile" rel="tag">Web Tile</a></div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-54489438749795310152015-07-27T09:00:00.000+02:002015-07-27T09:00:01.249+02:00Microsoft Band SDK : WebTileQualche giorno fa è stata rilasciata una nuova versione dell’SDK del Microsoft Band (la 1.3.10702 per la precisione) che ha portato con se, di fatto, solo alcune fix. Contestualmente, però, è stato rilasciato il supporto per le WebTile e le API di Microsoft Health Cloud.<br />
In questo post (e in un paio di altri che seguiranno) prenderemo in esame le WebTile.<br />
Il meccanismo delle Web Tile è in preview, maggiori informazioni, sample e documentazione è disponibile all’indirizzo <a href="http://developer.microsoftband.com/WebTile" title="http://developer.microsoftband.com/WebTile">http://developer.microsoftband.com/WebTile</a><br />
<br />
<h3>
Cosa sono le WebTile</h3>
Le WebTile sono dei file zip la cui estensione è .webtile (detto “Web Tile Package”) e la cui strutura interna è la seguente:<br />
<a href="http://lh3.googleusercontent.com/-_U2alAWbLAY/VbPYA0Wp3hI/AAAAAAAABwQ/F2O6Y8AiBQE/s1600-h/image8.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-G6bKr0OiL6U/VbPYBll164I/AAAAAAAABwY/bKhuMgCFIrs/image_thumb6.png?imgmax=800" height="149" style="background-image: none; border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="500" /></a><br />
Il loro scopo è quello di veicolare informazioni al Band prendendole direttamente da qualsiasi sorgente dati accessibile via web che restituisca dati in formato XML o JSON.<br />
Una volta creata la Web Tile, l’installazione e la gestione della stessa è a carico dell’app Microsoft Health installata nel nostro smartphone e che utiliziamo come bridge per poter scaricare i dati dal Band.<br />
In particolare Microsoft Health registra il file activation protocol sull’estensione <strong>.webtile</strong> e l’URI activation protocol con il protocollo <strong>mshealth-webtile://</strong> il che significa che ci basta aprire un file .webtile o accedere ad un link del tipo mshealth://www.miosito/generatile per ottenere che la stessa Microsoft Health prenda in carico l’installazione della tile all’interno del nostro Band e gestisca il suo ciclo di vita.<br />
La tile così installata comparirà tra le tile di terze parti nell’app Health e sarà compito di Health stessa provvedere ad aggiornare i dati delle pagine in essa contenute.<br />
Nel momento in cui apriamo un link ad una webtile (o apriamo un file che ci è stato inviato), quello che accade è che Microsoft Health viene attivata e ci chiede l’autorizzazione ad installare la nuova tile nel Band (sempre che ci sia ancora spazio nella strip).<br />
<a href="http://lh3.googleusercontent.com/-jgPM1a_UTeg/VbPYCGOJB9I/AAAAAAAABwg/eHekKOqVmt8/s1600-h/SNAGHTML141480%25255B6%25255D.png"><img alt="SNAGHTML141480" border="0" src="http://lh3.googleusercontent.com/-ub8kXz9plkU/VbPYCvlgCXI/AAAAAAAABwk/WV_m7r2MtFE/SNAGHTML141480_thumb%25255B3%25255D.png?imgmax=800" height="480" style="background-image: none; border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SNAGHTML141480" width="260" /></a><br />
Se accettiamo, la tile viene “installata” nel Band e i dati cominciano a fluire a carico dell’app Microsoft Band. <br />
Possiamo rimuovere la tile agendo nella finestra di gestione delle tile di Health.<br />
<a href="http://lh3.googleusercontent.com/-mpu4lVTzyVE/VbPYDlS5ksI/AAAAAAAABws/TIKFc-pMla4/s1600-h/SNAGHTML1694f1%25255B5%25255D.png"><img alt="SNAGHTML1694f1" border="0" src="http://lh3.googleusercontent.com/-oO5lQCdhCag/VbPYELETwqI/AAAAAAAABww/jCd-LV1SOOI/SNAGHTML1694f1_thumb%25255B2%25255D.png?imgmax=800" height="480" style="background-image: none; border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SNAGHTML1694f1" width="261" /></a><br />
Attenzione perchè, in questa versione, non viene eseguito un controllo sull’esistenza della Web Tile all’interno della strip. Il che significa che se installiamo due volte la stessa Web Tile, ci ritroviamo due tile uguali nella strip del Band.<br />
<br />
<h3>
Il file di Manifest</h3>
Il file manifest.json è un file in formato JSON che contiene tutte le informazioni necessarie a Microsoft Health per poter generare la tile, le pagine, recuperare i dati ed eseguire il binding dei dati stessi all’interno delle pagine.<br />
Il manifest.json può essere diviso in tre sezioni distinte:<br />
<ul>
<li>metadati della tile (come nome, versione, descrizione, autore e icone della tile); </li>
<li>definizione delle sorgenti dati </li>
<li>definizione delle pagine e del binding dei dati.</li>
</ul>
Un esempio di file manifest.json è il seguente:<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a45172e7-26cd-4e5c-819d-8883f24a3364" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
{<br />
<span style="background: rgb(255, 255, 255); color: #2e75b6;">"manifestVersion"</span><span style="background: rgb(255, 255, 255); color: black;"> : 1,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"name"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotNET{podcast}"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"description"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Il feed di dotNET{podcast}, il primo podcast italiano su tecnologie Microsoft."</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"version"</span><span style="background: rgb(255, 255, 255); color: black;"> : 1,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"versionString"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"1.0"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"author"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Massimo Bonanni"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"contactEmail"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"massimo.bonanni@dotnetpodcast.com"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"organization"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotNET{podcast}"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"tileIcon"</span><span style="background: rgb(255, 255, 255); color: black;"> : {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"46"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/largeicon.png"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"badgeIcon"</span><span style="background: rgb(255, 255, 255); color: black;"> : {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"24"</span><span style="background: rgb(255, 255, 255); color: black;"> : </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/smallIcon.png"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"refreshIntervalMinutes"</span><span style="background: rgb(255, 255, 255); color: black;"> : 15,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"resources"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"url"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"http://www.dotnetpodcast.com/feed/RSS"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"style"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Feed"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"content"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"title"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"title"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: black;">],</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"pages"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"layout"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"MSBand_ScrollingText"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"textBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"1"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"dotNET{podcast}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"2"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"value"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"{{title}}"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span></div>
</div>
</div>
<br />
Nella prima parte troviamo tutti i metadati della tile:<br />
<ul>
<li><strong>manifestVersion</strong> : è un numero che indica la versione ad uso e consumo di Microsoft Health grazie alla quale Health riesce a comprendere quale versione del manifest si sta utilizzando. E’ obbligatorio e per la preview deve essere utilizato il valore 1; </li>
<li><strong>name</strong> : si tratta di una stringa che definisce il nome della tile. E’ il nome che compare all’interno di Microsoft Health nel momento in cui installiamo o nella lista delle tile di terze parti. E’ obbligatorio; </li>
<li><strong>description</strong> : è una stringa che descrive la tile. Non è obbligatoria; </li>
<li><strong>version</strong> : è un numero che indica la versione della tile. Non è obbligatoria e non è mostrata all’utente. Se non indicato viene preso il numero 1; </li>
<li><strong>versionString</strong> : è una stringa che contiene il numero di versione della tile che verrà mostrata all’utente. Non è obbligatoria e, se non presente, viene mostrato il valore presente nel campo version; </li>
<li><strong>author</strong> : stringa non obbligatoria contenente il nome dell’autore; </li>
<li><strong>organization</strong> : stringa non obbligatoria contenente il nome dell’azienda; </li>
<li><strong>contactEmail</strong> : stringa non obbligatoria contenente la mail di contatto utilizzabile dal team di Microsoft Band per fini analitici; </li>
<li><strong>tileIcon</strong> : oggeto obbligatorio contenente i dati dell’icona da utilizzare nella strip del Band in termini di posizione e grandezza in pixel; </li>
<li><strong>badgeIcon</strong>: oggetto non obbligatorio contenente i dati dell’icona da utilizzare quando deve essere visualizzato il numero di nuove pagine presenti nell’icona; </li>
<li><strong>refreshIntervalMinutes</strong> : numero non obbligatorio che indica l’intervallo di aggiornamento (in minuti) della tile. Non sono ammessi valori minori di 15. Se non presente, viene utilizato il valore 30.</li>
</ul>
Nella sezione dei metadati, possono anche essere presenti i seguenti oggetti JSON che permettono di impostare il tema dell’icona ed eventuali immagini accessorie da utilizzare nel binding dei dati provenienti dalle sorgenti dati all’interno delle pagine della tile.<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b3fba419-e489-4c01-a53b-48814ab34391" style="display: block; float: none; margin-left: auto; margin-right: auto; padding: 0px; width: 537px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; max-height: 500px; overflow: auto; padding: 2px 5px;">
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"tileTheme"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"base"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"d94c66"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"highlight"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"ea5475"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"lowlight"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"c64763"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"secondary"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"a3919c"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"highContrast"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"bf455f"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"muted"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"993344"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"icons"</span><span style="background: rgb(255, 255, 255); color: black;">: {</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"Icon1"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/icon1.png"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"Icon2"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"icons/icon2.png"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">},</span></div>
</div>
</div>
<br />
Se la sezione del tema non viene impostata, la tile prenderà il tema di default del Band.<br />
Per quanto riguarda le icone accessorie, queste vengono trasferite al Band nel momento in cui la tile viene installata, il che significa che sono fisse e non possono essere scaricate, ad esempio, da internet in un secondo tempo. Inoltre sono ammesse fino a 10 icone, comprese le eventuali tileIcon e badgeIcon.<br />
<br />
<h3>
Le sorgenti dati</h3>
La sezione resources del file manifest.json contiene le informazioni relative alle risorse web da utilizzare per prelevare i dati.<br />
Possono essere presenti più risorse e queste verranno elaborate nell’ordine in cui sono riportate all’interno del file manifest.json.<br />
Ogni risorsa ha tre proprieta’ che possono essere impostate:<br />
<ul>
<li><strong>url</strong> : contiene l’indirizzo della risorsa da utilizzare per prelevare i dati. Può essere, ad esempio, un feed rss o un servizio REST; </li>
<li><strong>style</strong> : specifica il tipo di risorsa web che si sta utilizzando. Al momento sono ammessi solo i valori “simple” e “feed”. Il primo valore si utilizza quando la risorsa è un generico servizio REST mentre il secondo quando abbiamo a che fare con un feed rss; </li>
<li><strong>content</strong> : questa sezione definisce come estrarre i dati dalla risorsa. Ogni oggetto presente nella sezione definisce una sorta di variabile che potremo utilizzare nelle pagine per eseguire il binding dei dati ed è formato dal nome della variabile stessa e dal “percorso” in cui ricavare il valore da associare. Nel caso di una risorsa JSON, tale percorso altro non è che una Javascript objecte xpression. Nel caso di XML dobbiamo utilizzare un formato xpath.</li>
</ul>
La parte di definizione delle risorse verrà analizzata meglio nei prossimi post.<br />
<br />
<h3>
Le pagine della tile</h3>
La sezione Pages, infine, contiene le informazioni relative alle pagine che abbiamo intenzione di utilizzare all’interno della nostra tile.<br />
Questa sezione definisce quante pagine utilizzeremo, quale sarà il loro layout e, soprattutto, come andremo amostrare i dati recuperati dalle risorse definite nella sezione resources.<br />
In questa sezione troviamo le seguenti proprietà:<br />
<ul>
<li><strong>layout</strong> : imposta il nome del layout della pagina. Sono disponibili 6 possibili layout per le pagine (mostrati in seguito); </li>
<li><strong>condition</strong> : se presente, in questa versione, deve essere impostato a true. Probabilmente in futuro potrà essere utilizzato per dare una condizione di visibilità alla pagina basata su dati provenienti dalle sorgenti dati; </li>
<li><strong>textBindings</strong> : definisce l’associazione tra gli elementi testuali della pagina e dei valori costanti o i valori contenuti nelle variabili definite all’interno della sezione resources vista in precedenza; </li>
<li><strong>iconBindings</strong> : permette di eseguire il binding tra elementi della pagina che possono contenere immagini e le immagini definite nella sezione icons. Ogni elemento all’interno di questa sezione contiene l’id dell’elemento grafico della pagina in cui posizionare l’immagine e degli oggetti conditions. In questa versione, la collezione dei conditions può essere formata da un solo elemento e tale elemento deve avere la proprietà condition impostata a true. Probabilmente in futuro potrà servire per poter visualizzare o meno una immagine in base a delle condizioni recuperate dalle sorgenti dati.</li>
</ul>
<br />
<ul>
</ul>
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d4aca037-601f-4615-ad27-a0efc5243a71" style="display: inline; float: none; margin: 0px; padding: 0px;">
<div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: "Courier New", Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; overflow: auto; padding: 2px 5px;">
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"iconBindings"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"elementId"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"21"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"conditions"</span><span style="background: rgb(255, 255, 255); color: black;">: [</span><br />
<span style="background: rgb(255, 255, 255); color: black;">{</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"condition"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"true"</span><span style="background: rgb(255, 255, 255); color: black;">,</span><br />
<span style="background: rgb(255, 255, 255); color: black;"></span><span style="background: rgb(255, 255, 255); color: #2e75b6;">"icon"</span><span style="background: rgb(255, 255, 255); color: black;">: </span><span style="background: rgb(255, 255, 255); color: #a31515;">"Icon1"</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span><br />
<span style="background: rgb(255, 255, 255); color: black;">}</span><br />
<span style="background: rgb(255, 255, 255); color: black;">]</span></div>
</div>
</div>
<br />
I possibili layout per le pagine sono i seguenti<br />
<a href="http://lh3.googleusercontent.com/-rx3vuhSbspY/VbPYE7pSxiI/AAAAAAAABw8/vdl4TQhzegQ/s1600-h/SNAGHTML5450e6%25255B5%25255D.png"><img alt="SNAGHTML5450e6" border="0" src="http://lh3.googleusercontent.com/-1cuK09aBO40/VbPYF4JjFZI/AAAAAAAABxE/rHm7lWeQzHw/SNAGHTML5450e6_thumb%25255B2%25255D.png?imgmax=800" height="768" style="background-image: none; border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="SNAGHTML5450e6" width="424" /></a><br />
Nei prossimi post vedremo come costruire le tile per un feed e per un nostro servizio REST.<br />
Restate collegati!!!<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e328d444-c314-4584-a683-8a157bfb7d0c" style="display: inline; float: none; margin: 0px; padding: 0px;">
Technorati Tags: <a href="http://technorati.com/tags/Microsoft+Band" rel="tag">Microsoft Band</a>,<a href="http://technorati.com/tags/MIcrosoft+Band+SDK" rel="tag">MIcrosoft Band SDK</a>,<a href="http://technorati.com/tags/Web+Tile" rel="tag">Web Tile</a>,<a href="http://technorati.com/tags/Microsoft+Health" rel="tag">Microsoft Health</a></div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-36776400481237766392015-05-04T09:00:00.000+02:002015-05-04T09:00:04.775+02:00Microsoft Band SDK–Accesso ai sensoriIn questo post cominciamo a vedere quali cambiamenti e novità sono state introdotte nella nuova versione (la 1.3.10417) dell’SDK per il Band rilasciata il 30 aprile scorso.<br />
In particolare, in questo post, prenderemo in esame la parte di accesso ai sensori e partiremo dal mio precedente post <a href="http://codetailor.blogspot.com/2015/03/microsoft-band-sdk-preview-accesso-ai.html" target="_blank">"Accesso ai sensori"</a>.<br />
Per cominciare, la nuova versione dell’SDK espone un nuovo sensore, quello per il consumo calorico, il quale ci permette di conoscere il consumo di calorie a partire dall’ultimo reset del device.<br />
Il suo funzionamento è analogo a quello degli altri (ad esempio quello di misurazione della temperatura corporea).<br />
Come già mostrato nel precedente post, l’accesso ai sensori avviene tramite l’istanza dell’interfaccia ISensorManager esposta dall’istanza corrente di IBandClient. <br />
In questa versione dell’SDK, oltre al già citato sensore per il consumo calorico, è stata rinominata la proprietà di ISensorManager che espone il sensore di esposizione agli UV.<br />
Come possiamo vedere dalla successiva immagine, la proprietà che ci da accesso a tale sensore si chiama ora UV, anziché Ultraviolet come nella precedente versione.<br />
<br />
<a href="http://lh3.googleusercontent.com/-Cq5RQ4R4_lg/VUZLAh2XY1I/AAAAAAAABuU/TkoY_kNZyL0/s1600-h/image%25255B7%25255D.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-TQ0Yaz2BJpA/VUZLBcv7TqI/AAAAAAAABuc/wvNaBwe4eVA/image_thumb%25255B5%25255D.png?imgmax=800" height="397" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="500" /></a><br />
<br />
Il sensore per l’esposizione UV, inoltre, prevede un cambiamento nell’interfaccia IBandUVReading restituita dall’evento ReadingChanged.<br />
<br />
<a href="http://lh3.googleusercontent.com/-_9g26nM7XvA/VUZLB9E_ZgI/AAAAAAAABug/QdNyvMA9498/s1600-h/image%25255B18%25255D.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-LjrlUHG0xx4/VUZLCuiLwOI/AAAAAAAABus/fDJaZ2O8s9I/image_thumb%25255B12%25255D.png?imgmax=800" height="159" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="500" /></a><br />
<br />
La proprietà IndexLevel è un’enumerazione che indica il livello di esposizione ai raggi UV (a differenza della versione precedente che restituiva un numero poco comprensibile).<br />
<br />
<a href="http://lh3.googleusercontent.com/-3cvge27zbtg/VUZLDJWUFWI/AAAAAAAABuw/DtQq3-nUJFE/s1600-h/image%25255B23%25255D.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-nNo9dLvBgEo/VUZLD3_FaCI/AAAAAAAABu4/OcfayvZtH8I/image_thumb%25255B15%25255D.png?imgmax=800" height="193" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="250" /></a><br />
<br />
Altra cosa che è stata cambiata riguarda la gestione della privacy nell’utilizzo dei dati provenienti dai sensori.<br />
Come possiamo osservare dalla seguente immagine: <br />
<br />
<a href="http://lh3.googleusercontent.com/-S611_hi4MSs/VUZLEjAw9hI/AAAAAAAABvE/9LW8BK-xaPk/s1600-h/image%25255B13%25255D.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-dGT2i6Qvc_w/VUZLFmQR2eI/AAAAAAAABvM/gsTeuoN6EHg/image_thumb%25255B9%25255D.png?imgmax=800" height="286" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="250" /></a><br />
<br />
l’interfaccia IBandSensor espone due metodi per gestire il consenso dell’utente all’utilizzo dei dati del sensore.<br />
Il metodo GetCurrentUserConsent ci fornisce la selezione dell’utente corrente in fatto di consenso all’utilizzo di quel determinato sensore ed è il metodo che dobbiamo utilizzare per verificare se l’utente ha dato il consenso o meno.<br />
Il metodo RequestUserConsentAsync permette, invece, di richiedere l’autorizzazione all’utente. Nella realtà dei fatti, solo alcuni sensori hanno la richiesta esplicita all’utente, cioè, nel momento in cui si invoca tale metodo, si ha effettivamente la visualizzazione della finestra di richiesta del consenso.<br />
Per capire quali sensori effettivamente mostrano il consenso all’utente, è sufficiente andare a decompilare la Microsoft.Band.dll (ad esempio con Reflector) e vedere che tutti i sensori derivano da una classe internal (Friend) chiamata BandSensorBase(Of T), la cui struttura è la seguente:<br />
<br />
<a href="http://lh3.googleusercontent.com/-fXi2mUnZ8MQ/VUZLGc9xFBI/AAAAAAAABvU/SvM1UPRvgGA/s1600-h/image%25255B33%25255D.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-M4bChVKUU0Y/VUZLHDOShzI/AAAAAAAABvc/LE78xmvb8KM/image_thumb%25255B21%25255D.png?imgmax=800" height="211" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="500" /></a><br />
<br />
e, in particolare, il metodo RequestUserConsentAsync ha la seguente implementazione<br />
<br />
<a href="http://lh3.googleusercontent.com/-6aN5_2Kn3f8/VUZLHoBEGWI/AAAAAAAABvg/JLrTDK4UYzM/s1600-h/image%25255B38%25255D.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-tbdhLxQmGBw/VUZLIGhD8dI/AAAAAAAABvs/qriixKLnbwA/image_thumb%25255B24%25255D.png?imgmax=800" height="49" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="500" /></a><br />
<br />
che restituisce sempre true.<br />
Il metodo è Overridable e, infatti, in alcuni sensori, come ad esempio l’HeartRate, viene ridefinito con la seguente implementazione:<br />
<br />
<a href="http://lh3.googleusercontent.com/-ZJAMYPupDmw/VUZLI1h97fI/AAAAAAAABvw/c2FJijMP9DU/s1600-h/image%25255B43%25255D.png"><img alt="image" border="0" src="http://lh3.googleusercontent.com/-M3NQwZn3Xdc/VUZLJ5DdJwI/AAAAAAAABv8/aSb7Nnyl1_c/image_thumb%25255B27%25255D.png?imgmax=800" height="35" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="500" /></a><br />
<br />
cioè viene effettivamente richiesto il consenso all’utente.<br />
In questa versione dell’SDK, l’unico sensore che richiede effettivamente il consenso all’utente è proprio l’heartrate.<br />
In ogni caso è buona norma prevedere sempre l’utilizzo del metodo RequestUserConsentAsync a prescindere dal tipo di sensore in modo da non avere sorprese se in futuro cambiasse la situazione.<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:606dd102-0525-4d16-8573-528b820dbae8" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
<div style="border: #000080 1px solid; color: black; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background-color: white; max-height: 500px; overflow: auto; padding: 2px 5px; white-space: nowrap;">
<span style="background: #ffffff; color: green;">' Recupero il consenso precedentemente espresso dall'utente</span><br />
<span style="background: #ffffff; color: blue;">Dim</span><span style="background: #ffffff; color: black;"> userConsent </span><span style="background: #ffffff; color: blue;">As</span><span style="background: #ffffff; color: black;"> </span><span style="background: #ffffff; color: #2b91af;">UserConsent</span><span style="background: #ffffff; color: black;"> = bandClient.SensorManager.HeartRate.GetCurrentUserConsent()</span><br />
<span style="background: #ffffff; color: blue;">If</span><span style="background: #ffffff; color: black;"> userConsent <> </span><span style="background: #ffffff; color: #2b91af;">UserConsent</span><span style="background: #ffffff; color: black;">.Granted </span><span style="background: #ffffff; color: blue;">Then</span><br />
<span style="background: #ffffff; color: black;"></span><span style="background: #ffffff; color: green;">' se il consenso non e' concesso richiedo il consenso all'utente</span><br />
<span style="background: #ffffff; color: black;"></span><span style="background: #ffffff; color: blue;">If</span><span style="background: #ffffff; color: black;"> </span><span style="background: #ffffff; color: blue;">Await</span><span style="background: #ffffff; color: black;"> bandClient.SensorManager.HeartRate.RequestUserConsentAsync() </span><span style="background: #ffffff; color: blue;">Then</span><br />
<span style="background: #ffffff; color: black;">userConsent = </span><span style="background: #ffffff; color: #2b91af;">UserConsent</span><span style="background: #ffffff; color: black;">.Granted</span><br />
<span style="background: #ffffff; color: black;"></span><span style="background: #ffffff; color: blue;">End</span><span style="background: #ffffff; color: black;"> </span><span style="background: #ffffff; color: blue;">If</span><br />
<span style="background: #ffffff; color: blue;">End</span><span style="background: #ffffff; color: black;"> </span><span style="background: #ffffff; color: blue;">If</span><br />
<span style="background: #ffffff; color: blue;">If</span><span style="background: #ffffff; color: black;"> userConsent = </span><span style="background: #ffffff; color: #2b91af;">UserConsent</span><span style="background: #ffffff; color: black;">.Granted </span><span style="background: #ffffff; color: blue;">Then</span><br />
<span style="background: #ffffff; color: black;"></span><span style="background: #ffffff; color: blue;">AddHandler</span><span style="background: #ffffff; color: black;"> bandClient.SensorManager.HeartRate.ReadingChanged, </span><span style="background: #ffffff; color: blue;">AddressOf</span><span style="background: #ffffff; color: black;"> HeartRate_ReadingChanged</span><br />
<span style="background: #ffffff; color: black;"></span><span style="background: #ffffff; color: blue;">Await</span><span style="background: #ffffff; color: black;"> bandClient.SensorManager.HeartRate.StartReadingsAsync()</span><br />
<span style="background: #ffffff; color: blue;">Else</span><br />
<span style="background: #ffffff; color: black;"></span><span style="background: #ffffff; color: green;">' Utente non ha concesso il consenso e la lettura non viene avviata</span><br />
<span style="background: #ffffff; color: blue;">End</span><span style="background: #ffffff; color: black;"> </span><span style="background: #ffffff; color: blue;">If</span></div>
</div>
</div>
<br />
Nell’esempio precedente di codice viene preso in esame il sensore del battito cardiaco, ma il meccanismo è lo stesso per qualsiasi altro sensore.<br />
<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:76e27dbf-c54d-49ff-926e-814bc27d601e" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
Tag di Technorati: <a href="http://technorati.com/tags/Microsoft+Band" rel="tag">Microsoft Band</a>,<a href="http://technorati.com/tags/Microsoft+Band+SDK" rel="tag">Microsoft Band SDK</a></div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0tag:blogger.com,1999:blog-1721873273354099129.post-16229944895167811672015-05-01T12:53:00.000+02:002015-05-01T12:53:09.079+02:00Nuova versione del Band SDKE’ di ieri l’annuncio del rilascio della nuova versione dell’SDK per il Microsoft Band.<br />
Si tratta della versione 1.3.10417 (la precedente e, prima della serie, era la 1.3.10219 preview).<br />
Maggiori informazioni, download dell’SDK per le tre piattaforme Windows Phone, iOS e Android all’indirizzo <a href="http://developer.microsoftband.com/" title="http://developer.microsoftband.com/">http://developer.microsoftband.com/</a>.<br />
Allo stesso indirizzo potrete trovare anche la documentazione.<br />
Nei mesi scorsi mi sono gia’ occupato della precedente versione e questi sono i post che ne parlano:<br />
<ul>
<li><a href="http://codetailor.blogspot.com/2015/03/microsoft-band-sdk-preview-first-look.html" target="_blank">Microsoft Band SDK Preview - First Look</a></li>
<li><a href="http://codetailor.blogspot.com/2015/03/microsoft-band-sdk-preview-hello-band.html" target="_blank">Microsoft Band SDK Preview - ”Hello Band”</a></li>
<li><a href="http://codetailor.blogspot.com/2015/03/microsoft-band-sdk-preview-accesso-ai.html" target="_blank">Microsoft Band SDK Preview - Accesso ai sensori</a></li>
<li><a href="http://codetailor.blogspot.com/2015/03/microsoft-band-sdk-previewtile.html" target="_blank">Microsoft Band SDK Preview - Tile</a></li>
<li><a href="http://codetailor.blogspot.com/2015/03/microsoft-band-sdk-preview-notifiche.html" target="_blank">Microsoft Band SDK Preview - Notifiche</a></li>
<li><a href="http://codetailor.blogspot.com/2015/03/microsoft-band-sdk-preview.html" target="_blank">Microsoft Band SDK Preview - Personalizzazione</a></li>
</ul>
<br />
Gli argomenti trattati e il codice proposto dovrebbe, ad una prima lettura delle nuove funzionalita’ inserite, essere ancora valido e funzionante ma nei prossimi giorni prendero’ in esame tutti gli argomenti dei precedenti post e vedremo cosa cambia e cosa e’ stato aggiunto.<br />
Nel frattempo, se siete interessati a sviluppare per Band, vi segnalo la seguente sessione di Build 2015:<br /><br />
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="281" src="//channel9.msdn.com/Events/Build/2015/2-619/player?format=html5" width="500"></iframe> </div>
<br />
<br />
<br />
<div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ea2ff292-705e-4fa5-8012-368e85eb2299" style="display: inline; float: none; margin: 0px; padding: 0px;">
Tag di Technorati: <a href="http://technorati.com/tags/Microsoft+Band" rel="tag">Microsoft Band</a>,<a href="http://technorati.com/tags/Band+SDK" rel="tag">Band SDK</a></div>
Massimo Bonannihttp://www.blogger.com/profile/13415682515700337429noreply@blogger.com0