#VS2017 – Lessons learned migrating a UWP App from #Windows 8.1 to #Windows10 and how to replace Geolocation CivicAddress

Hi!

If you ever get bored, an 100% interesting activity is to try to update a project that has been closed 3 years ago or more. In my case, I have invested much time during these past days upgrading a Windows 8.1 to Windows 10 App.

Here’s a couple of things I’ve learned

  • Visual Studio 2017 is a thousand times better than previous Visual Studio versions to create UWP Apps. This point applies the saying “for tastes colors” in my case Visual Studio 2017 works great!
  • 3 years ago the most advisable option to share code/functionality between projects were to use Portable Class Libraries. Today this is very Old School, so I have migrated several projects to .Net Standard and it was not an easy path (ostias!)
  • I have suffered, in silence but pain was there. For example, .Net Standard its now in version 2.0, however, in order to create Net standard Class Libraries that can be used in UWP Apps, you have to “download” to version 1.4
  • No more CivicAddress. If you use localization functionality in your App, including values such as the country, city, zip code and State, the CivicAddress property has been declared obsolete from win 8.1

On this last point I will extend a bit. Well When you get the location in a UWP App, the 2 values that if returned are latitude and longitude. I was investigating a little bit about the best way to get an address from a point (latitude and longitude) and I came to this conclusion.

You can use services like the following where you must have a Developer key

Although thanks to StackOverflow I found a free service that with 4 lines solves the problem. This is OPENSTREETMAP and the following code is more than enough to understand how it works

A sample result in the next image

I1

that if, if your application requires a very intense use of this service, it is time to go back to Bing or Google to avoid a

System.Net.Http.HttpRequestException: ‘Response status code does not indicate success: 429 (Too Many Requests).’

I2

Happy Coding!

Greetings @ Toronto

El Bruno

References

Advertisements

#VS2017 – Lecciones aprendidas migrando una UWP App de #Windows 8.1 a #Windows10 y como reemplazar GeoLocation.CivicAddress

Buenas!

Si alguna vez te aburres, una actividad 100% interesante es intentar actualizar un proyecto que se ha cerrado hace 3 años o más. En mi caso, he invertido gran parte de estos últimos días en actualizar una App de Windows 8.1 a Windows 10.

He aquí un par de cosas que he aprendido

  • Visual Studio 2017 es mil veces mejor que las versiones anteriores para crear UWP Apps. Este punto se aplica el dicho “para gustos colores”, en mi caso VS2017 vuela.
  • Hace 3 años la opción mas recomendable para compartir código / funcionalidad entre proyectos eran Portable Class Libraries. Hoy esto es muy Old School, he migrado varios proyectos a .Net Standard y algún par de ostias he sufrido
  • Por ejemplo, .Net Standard va por su versión 2.0, sin embargo, para poder crear Net Standard Class Libraries que se puedan utilizar en UWP Apps, hay que “bajar” hasta la versión 1.4
  • No more CivicAddress. Si utilizas funcionalidades de localización en tu App, incluyendo valores como el país, ciudad, código postal y estado, la propiedad CivicAddress ha sido declarada obsoleta desde Win8.1

Sobre este último punto me extenderé un poco. Pues bien, cuando obtienes la ubicación en una UWP App, los 2 valores que si se retornan son latitud y longitud. Estuve investigando un poco sobre la mejor forma de obtener una dirección a partir de un punto (latitud y longitud) y llegué a esta conclusión

Puedes utilizar servicios como los siguientes donde debes tener una clave de Developer

Aunque gracias a StackOverflow encontré un servicio gratuito que con 4 líneas me resuelve el problema. Se trata de OpenStreetMap y el siguiente código es mas que suficiente para comprender como funciona

El resultado que retorna este servicio es similar a

I1

Eso si, si tu aplicación requiere un uso muy intenso de este servicio, es momento de volver a Bing o a Google para evitar un

System.Net.Http.HttpRequestException: ‘Response status code does not indicate success: 429 (Too Many Requests).’

I2

Happy Coding!

Saludos @ Toronto

El Bruno

References

#Flow – Invocando un Flow desde una ConsoleApp en #CSharp

Hola !

Hace un par de días escribí un post donde comenté como utilizar un trigger del tipo Http Request para poder invocar una definición de Flow desde apps externas (link). Hoy completaré el ejemplo con un poco de código C# para lanzar una instancia del Flow.

Comencemos con la definición del Flow. En este caso son 4 pasos

  1. Request
  2. Crear un archivo en OneDrive for Business con el contenido del Body que se recibe
  3. Enviar una Push Notification
  4. Retornar un código HTTP 200 en el Response

Clipboard06.jpg

Una vez apuntada la Url para invocar este flow, el código C# a utilizar puede ser similar el siguiente

clipboard08

Y un par de notas

  • Líneas 10 a 15, creo un mensaje Json a partir de unas clases C#
  • Con el body convertido a Json, utilizo JsonSchema.Net para crear el Schema que luego agrego a la definición del Flow.
  • Líneas 17 a 22, realizo la llamada al Flow utilizando RestSharp (link)

Listo ! Nuestro flow está completo y además ya podemos lanzar el mismo. Una vez invocado podremos ver cómo nos llega una notificacion a nuestro device, con el link para acceder a la Url del mensaje !

clipboard01clipboard02

El código de ejemplo se puede descargar desde aquí (link)

Saludos @ Toronto

El Bruno

References

#Coding4Fun – What’s There App, código fuente y ejemplo de uso de #VisionAPI

Hola !

Después del post de ayer, algunas personas me preguntaron un par de cuestiones sobre la App What’s There, así que aprovecharé este post para comentar algunos detalles de la misma.

Antes de crear la app, le expliqué a mi niño con un esquema simple, el funcionamiento de la App

  1. El smartphone sacará una foto
  2. La foto se procesará con Vision API
  3. Vision API nos retornará información sobre lo que se encontró en la foto
  4. El smartphone nos hablará con la información de la foto

image

Luego cree un dibujo muy simple y el Valentino entendió la idea Open-mouthed smile (espero tu tú también) Así que veamos un poco en detalle cada uno de los pasos de la App.

Empezamos por los prerequisitos, dentro de package manifest necesitamos activar las siguientes capabilities: Internet, Microphone y WebCam.

image

Para sacar una foto, he reutilizado una función que saca una foto, guarda la misma en un storage local y retorna el archivo creado. Además soporta sacar fotos en “modo silencioso”, en donde el usuario no se entera de que está sacando fotos; y en “modo normal” en el que aparece la ventana del SO para sacar fotos.

image

El siguiente paso es analizar la foto utilizando VisionAPI. Para esto necesitamos agregar el paquete NuGet Microsoft.ProjectOxford.Vision a nuestro proyecto.

image

Importante: Para poder utilizar la API necesitamos una cuenta activa en Cognitive Services y copiar las keys correspondientes, lo he explicado en este post.

Ahora si, ya podemos procesar la foto con Vision API. Las siguientes líneas son un ejemplo simple sobre como hacer esto. Es importante remarcar que dentro de Description nos encontramos con la colección de Captions. Cada Caption es una frase completa con la descripción de la foto.

image

Si queremos darle un toque personal a esta descripción, la colección Tags nos brinda los elementos más importantes encontrados con palabras sueltas.

Finalmente, para el proceso Text to Speech, usé la clase SpeechSynthesizer. Esta clase nos permite obtener el audio stream desde el texto y luego reproducir el mismo utilizando un Media Element.

image

Y esto es todo ! 4 simples pasos para crear una App más que divertida Open-mouthed smile

Saludos @ Toronto

-El Bruno

References

#Coding4Fun – What’s There App, source code and #VisionAPI description

Hi!

Some people ask me a couple of questions regarding the What’s There App, so I’ll write this post to explain the basic features of the app.

I explain to my kid with a simple schema, that the main steps of the app

  1. The phone will take a photo with the camera
  2. The photo will be sent to the Vision API for processing
  3. The Vision API will return information about the stuff discovered in the photo
  4. The phone will speak up with the description

image

And after this my kid gets the idea Open-mouthed smile So let’s review each one of the steps and the required code in a Windows Universal App.

Let’s start with the prerequisites. In the package manifest we need to enable the use of the following capabilities Internet, Microphone and WebCam.

image

To take the picture, I’ve reused this code which takes a picture, saves the picture and returns the file. It also support the work in “silent mode”, which means the picture will be taken without user interaction, and “normal mode” which will display the camera UI to take a photo.

image

Next step is to analyze the photo using VisionAPI. I added the Microsoft.ProjectOxford.Vision NuGet package to the project.

image

Note: You need a couple of keys here to use the online service, take a look at this post.

Next step, is to process the photo using Vision API. The following lines are a good sample on how to do this. An important note here, is that the Captions collections will have all the information you need. Each caption is the complete sentence.

image

If you want to create your own description phrases, you use the Tags collections for this.

And finally, to perform the speech, I use a SpeechSynthesizer class. With this I get the audio stream from the text and later I play this audio stream using a Media Element.

image

And that’s it! 4 easy steps to create a sample and fun App Open-mouthed smile

Greetings @ Toronto

-El Bruno

References

#CognitiveServices – Text Analytics API, detección de lenguaje, análisis de sentimiento y más utilizando #Azure

Hola !

Otro ejemplo más para la serie de posts sobre Cognitive Services. En el post de hoy veré la API de Text Analytics:

Understanding and analyzing unstructured text is an increasingly popular field and includes a wide spectrum of problems such as sentiment analysis, key phrase extraction, topic modeling/extraction, aspect extraction and more.

Text Analytics API is a suite of text analytics services built with Azure Machine Learning. We currently offer APIs for sentiment analysis, key phrase extraction and topic detection for English text, as well as language detection for 120 languages.In this initial preview release, we offer APIs for sentiment analysis and key phrase extraction of English text. No labeled or training data is needed to use the service – just bring your text data. This service is based on research and engineering that originated in Microsoft Research and which has been battle-tested and improved over the past few years by product teams such as Bing and Office.

Esta API es genial, y es la base de bastantes herramientas que utilizamos hoy que nos permiten analizar en tiempo real información de redes sociales. Por ejemplo, podemos analizar el texto de un Tweet y ver el lenguaje en el que está escrito el mismo, identificar si el mismo tiene un mensaje positivo o negativo y más..

Sobre esta base he escrito un ejemplo donde hay una Client Library para interactuar con la API, inicialmente solo he implementado las funciones de análisis de idioma y de sentimiento. Esta API require el envío utilizando un body más complejo, así que he implementado el uso de una acción HTTP POST para esto. Y también es por esto que he creado contratos para las acciones de Request and Response para cada una de las APIs.

image

Ahora bien, para realizar el análisis de idioma y sentimiento en un mismo texto, hay que hacer 2 llamadas a la API. Son bastante similares y tienen el siguiente esquema:

image

Y el ejemplo final es con una Console App que pide un texto de entrada y realiza el análisis sobre el mismo. Un ejemplo con un texto en inglés con un mensaje positivo retornaría el siguiente resultado

image

Y un ejemplo en Español, con un mensaje un poco enfadado, retornaría:

image

Si en un mismo mensaje hay más de un lenguaje o no es claro el mismo, podemos encontrarnos con un score menor que uno para el lenguaje

image

La app en demo mode

2016 04 08 Sentiment Analysis

GitHub Sample https://github.com/elbruno/Blog/tree/master/CognitiveServices

Saludos @ Toronto

-El Bruno

References

#CognitiveServices – Text Analytics API, detect language, sentiment and more using #Azure

Hi !

Another sample for the Cognitive Services posts series. Today’s post is on Text Analytics API, and as always, let’s start with the official description

Understanding and analyzing unstructured text is an increasingly popular field and includes a wide spectrum of problems such as sentiment analysis, key phrase extraction, topic modeling/extraction, aspect extraction and more.

Text Analytics API is a suite of text analytics services built with Azure Machine Learning. We currently offer APIs for sentiment analysis, key phrase extraction and topic detection for English text, as well as language detection for 120 languages.In this initial preview release, we offer APIs for sentiment analysis and key phrase extraction of English text. No labeled or training data is needed to use the service – just bring your text data. This service is based on research and engineering that originated in Microsoft Research and which has been battle-tested and improved over the past few years by product teams such as Bing and Office.

The API is great, and is the base of some fundamental tasks that we perform today, like analyze in real time information from social media to find sentiment, languages, etc.

In the sample source code, there is the Client Library to analyze language and sentiment. In this sample the send of information requires a more complex body, so a HTTP POST action is used. That’s why there are a couple of Request and Response contracts for each one of the APIs.

image

To perform the language analysis and the sentiment analysis, we must perform 2 different call to the API. They are very similar, and this is the code for the language one.

image

Finally, the console app request a input text and perform and display the analysis for language and sentiment. A sample with normal English text detected

image

And a second sample with some “angry text” in spanish.

image

If you send a text with some mix between different languages, the language analysis will return a score lower than 1

image

And finally the app running in demo mode

2016 04 08 Sentiment Analysis

You can download and use the sample from the GitHub source Code.

GitHub Sample https://github.com/elbruno/Blog/tree/master/CognitiveServices

Greetings @ Toronto

-El Bruno

References

#CognitiveServices – #Bing Web Search API, un repaso rápido y un ejemplo de uso simple con #Azure

Hola !

Sigo con la serie de posts sobre las nuevas funcionalidades que tenemos en Cognitive Services. Hoy es momento de tocar a una de las estrellas de Bing: Search. La documentación oficial la describe de la siguiente forma:

La API de Bing Web Search provee una experiencia similar a Bing.com/Search (más en MSDN). La API de Web Search API permite a partners enviar una query de búsqueda a Bing y obtener una lista de resultados. La misma incluye webpages y puede incluir además imágenes, videos, y más.

La API es muy cool. Tiene los elementos básicos que esperamos encontrar en una API de búsqueda como query y count, y también podemos agregar filtros adicionales como searchSafe y la ubicación (mkt).

Al igual que en el ejemplo de ayer, he creado una client library para invocar a la API y una app de Consola de ejemplo.

Los resultados de la búsqueda icluyen urls, última fecha de búsqueda y otra información como por ejemplo imágenes. El siguiente gif animado muestra como al realizar una búsqueda la API retorna una colección de urls y además para cada imagen, abro un navegador y muestro el thumbnail de la misma.

2016 04 07 Bing Search Console Demo

GitHub Sample https://github.com/elbruno/Blog/tree/master/CognitiveServices

Saludos @ Toronto

-El Bruno

References

#CognitiveServices – #Bing Web Search API, review feature and #Azure sample code

Hi !

Today’s post is still on the Cognitive Services new features, and today is for the main Bing feature: Search. Let’s start with the official description from the documentation

The Bing Web Search API provides a similar (but not exact) experience to Bing.com/Search (overview on MSDN). The Bing Web Search API lets partners send a search query to Bing and get back a list of relevant search results. This includes webpages and may include images, videos, and more.

The API is so cool, there are some basic search criteria like query and count, and you can also add additional filters like searchSafe of location (mkt). So, like yesterday I created a client library with the sample console app.

The search results includes response urls, last date of search, and other interesting information like “related images”. The next animation performs a search with my name and open the images thumbnails in a browsers

2016 04 07 Bing Search Console Demo

You can download and use the sample from the GitHub source Code.

GitHub Sample https://github.com/elbruno/Blog/tree/master/CognitiveServices

Greetings @ Toronto

-El Bruno

References

#CognitiveServices – #Bing Autosuggest API, interesante API y de regalo: una App de ejemplo

Hi !

Después de mi post de ayer sobre cómo obtener las claves de App para usar las Cognitive Services APIs, hoy voy darle un repaso a uno de los nuevos servicios: Bing Autosuggest API. La documentación oficial explica muy bien el objetivo de este servicio:

La API Bing Autosuggest permite a los partners enviar una parte de una consulta de búsqueda Bing y recuperar una lista de preguntas sugeridas que otros usuarios han buscado a partir de la misma.

Además de incluir las búsquedas que otros usuarios han escrito, la lista puede incluir sugerencias basadas en la intención del usuario. Por ejemplo, si la cadena de consulta es “el tiempo en Lo”, la lista incluirá sugerencias con consultas que incluyan temas relacionados con el tiempo .

Hasta el día de hoy no hay SDK oficial para trabajar con este servicio, así que crearé uno en pocos pasos. En mi repositorio de GitHub, es posible encontrar una solución con 2 proyectos que incluyen una app de Consola para las pruebas, y una Client library para trabajar con la API de Bing Autosuggest.

image

La clase AutosuggestClient es la encargada de realizar las llamadas a la API y de transformar el resultado JSON en Net classes. Aquí me he encontrado con una herramienta interesante: http://json2csharp.com/ que genera clases C# a partir de un contenido JSON.

image

Agregando estas nuevas clases, pude completar el contrato y el proyecto AutoSuggest comenzó a ser un poco más amigable.

image

Ahora si, en la clase ServiceClient, que hereda de Microsoft.ProjectOxford.Common.ServiceClient pude agregar un poco de código básico de HttpClient para realizar la consulta en la API de Bing.

image

Llega el momento de probarlo. Y claro, como ahora estoy en Toronto, los criterios de búsqueda cambian un poco. En el siguiente ejemplo podemos ver como para la  parcial “toronto rap” procesa y retorna sugerencias como “toronto raptors”, “toronto raptors schedule”, y más 😀

Clipboard01

GitHub Sample https://github.com/elbruno/Blog/tree/master/CognitiveServices/BingAutoSuggest

Saludos @ Toronto

-El Bruno

References