<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vicente G. Guzmán Lucio</title>
    <description>The latest articles on DEV Community by Vicente G. Guzmán Lucio (@luciod3v).</description>
    <link>https://dev.to/luciod3v</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F24182%2F64358022-97a2-4cb0-9841-695527cf6db4.jpeg</url>
      <title>DEV Community: Vicente G. Guzmán Lucio</title>
      <link>https://dev.to/luciod3v</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luciod3v"/>
    <language>en</language>
    <item>
      <title>Entrenamiento - Alibaba Cloud Associate Developer</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Fri, 20 May 2022 16:08:41 +0000</pubDate>
      <link>https://dev.to/luciod3v/entrenamiento-alibaba-cloud-associate-developer-1ca2</link>
      <guid>https://dev.to/luciod3v/entrenamiento-alibaba-cloud-associate-developer-1ca2</guid>
      <description>&lt;p&gt;¡Hola a tod@s!&lt;/p&gt;

&lt;p&gt;¿Te imaginas como desarrollador en el futuro? ¿Estás luchando por sobresalir entre todos los desarrolladores? ¡Entonces aquí viene el examen de certificación y capacitación de certificación de desarrollador de Alibaba Cloud Associate (ACA) GRATUITO! ¡Regístrese AHORA para estar más cerca!&lt;/p&gt;

&lt;p&gt;El contenido del examen de certificación cubre las características y soluciones de productos relacionados con Alibaba Cloud, incluidos contenedores, monitoreo de aplicaciones, depuración, optimización, computación de funciones de Alibaba Cloud y control de acceso a productos de Alibaba Cloud.&lt;/p&gt;

&lt;p&gt;Una vez completada la capacitación, tendremos la oportunidad de obtener la certificación de Associate Developer, siempre y cuando se logra aprobar el examen.&lt;/p&gt;

&lt;p&gt;Recuerden, tanto el curso como el examen son totalmente GRATUITOS, así que no dejen pasar esta oportunidad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calendario
&lt;/h2&gt;

&lt;p&gt;Fecha: 23 de Mayo (Lunes)&lt;br&gt;
Hora: 10:00 am - 6:00 pm (UTC+8/hora de Pekín)&lt;br&gt;
Idioma: Inglés&lt;br&gt;
Nivel del curso: Principiante a Intermedio&lt;/p&gt;

&lt;p&gt;&lt;a href="https://alibaba.zoom.us/webinar/register/7716504459829/WN_la379Wu6QYmI16fl_2SROg" rel="noopener noreferrer"&gt;Regístrate&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Examen
&lt;/h2&gt;

&lt;p&gt;Examen de certificación: el examen se llevará a cabo de 2:00 p.m. a 4:30 p.m. (UTC+8/hora de Beijing) el 25 de mayo, y se le enviará el correo electrónico de confirmación del examen a fines del 24 de mayo.&lt;/p&gt;

&lt;p&gt;¡Nos vemos pronto en la nube!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvicenteguzman.com%2Fassets%2Fimg%2Fblog%2Fpost-headers%2Falibaba%2Falibaba_training_associate_developer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvicenteguzman.com%2Fassets%2Fimg%2Fblog%2Fpost-headers%2Falibaba%2Falibaba_training_associate_developer.png" alt="Image ACA Developer" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>alibaba</category>
      <category>curso</category>
      <category>associate</category>
    </item>
    <item>
      <title>Protegiendo datos confidenciales en segundo plano {Xamarin.Forms}</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Tue, 19 May 2020 03:32:43 +0000</pubDate>
      <link>https://dev.to/luciod3v/protegiendo-datos-confidenciales-en-segundo-plano-xamarinforms-3eah</link>
      <guid>https://dev.to/luciod3v/protegiendo-datos-confidenciales-en-segundo-plano-xamarinforms-3eah</guid>
      <description>&lt;h3&gt;
  
  
  Introducción
&lt;/h3&gt;

&lt;p&gt;Las aplicaciones móviles se han convertido en nuestro pan de cada día; es la herramienta necesaria (incluso imprescindible) para poder desarrollar nuestra vida digital. Todo lo hacemos a través de las apps: gestionamos nuestras cuentas bancarias, escuchamos música, nos informamos, leemos las noticias, compartimos en redes sociales.&lt;/p&gt;

&lt;p&gt;Sabemos que hacemos uso de cada una por comodidad, pero cada vez que instalamos alguna nueva, ¿somos conscientes de los permisos que le otorgaremos?, es decir, ¿conocemos el nivel de seguridad de alguna aplicación?&lt;/p&gt;

&lt;p&gt;Me imagino que la respuesta de todos es un rotundo NO, y es que lo que sí sabemos, es que &lt;strong&gt;comodidad y seguridad son términos antagónicos&lt;/strong&gt; : cuanto mayor es una, menor es la otra y viceversa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacidad por Defecto
&lt;/h3&gt;

&lt;p&gt;El concepto de privacidad por defecto se traduce en que una aplicación, software o sistema desde el momento en que se crea debe tomar medidas para proteger la información de los usuarios, como la seguridad de los datos.&lt;/p&gt;

&lt;p&gt;Para esto ya existen metodologías que revisan desde el mismo código de la aplicación y que dan pautas para la seguridad entre ellas el cifrado de datos, protocolos SSL-TLS, pruebas de vulnerabilidades, auditorias, mecanismos de autenticación, almacenamiento, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solo algunas…
&lt;/h3&gt;

&lt;p&gt;Determinadas aplicaciones han mejorado con respecto a la seguridad que le ofrecen a los usuarios, tales como en PayPal, WhatsApp y claro esta, todas las aplicaciones bancarias. Si prestamos atención a alguna de las anteriores, podemos ver que cuentan con una función para proteger la información privada/confidencial en segundo plano, pero, ¿cómo lo hacen? la respuesta es super sencilla, así que veamos cómo podemos hacerlo en nuestras aplicaciones de Xamarin.Forms&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comencemos en iOS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para hacer esto en los dispositivos de la manzana, debemos ir al archivo AppDelegate.cs e ingresar los siguientes métodos:&lt;/p&gt;

&lt;p&gt;OnResignActivation — El cual sirve para bloquear el contenido&lt;/p&gt;

&lt;p&gt;OnActivated — El cual nos permite desbloquear el contenido&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9wb1cs5h5b7nww79thi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9wb1cs5h5b7nww79thi.png" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora para Android necesitamos ir a MainActivity.cs y hacer prácticamente lo mismo, pero esto en los métodos OnPause y OnResume:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv019qijgtjgw91hv2voe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv019qijgtjgw91hv2voe.png" width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Resultado
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgrwc1ajouk258ljsgu18.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgrwc1ajouk258ljsgu18.gif" width="513" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnfo1pw0rpply7pke54k.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnfo1pw0rpply7pke54k.gif" width="513" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Resumen
&lt;/h3&gt;

&lt;p&gt;Lo que nos debe quedar claro es que, si queremos proteger nuestra privacidad y que nuestros datos estén seguros (o menos expuestos), deberemos, además de revisar uno a uno los permisos de cada aplicación, sacrificar un poquito esa comodidad y realizar un par o tres más de clics en vez de dejar todas las configuraciones tal y como a los desarrolladores de esas apps les gustaría que estuvieran: accesibles al cien por cien.&lt;/p&gt;

&lt;p&gt;Descarga el código completo desde mi &lt;a href="https://github.com/LucioMSP/Xamarin.Forms.Examples/tree/master/SensitiveData/SensitiveData" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¡Happy Coding!
&lt;/h4&gt;




</description>
      <category>xamarinappdevelopmen</category>
      <category>xamarinforms</category>
    </item>
    <item>
      <title>¿Por qué aprender Machine Learning?</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Wed, 18 Dec 2019 18:53:00 +0000</pubDate>
      <link>https://dev.to/luciod3v/por-que-aprender-machine-learning-39d1</link>
      <guid>https://dev.to/luciod3v/por-que-aprender-machine-learning-39d1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmm7cr9zq2oabf208z4o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmm7cr9zq2oabf208z4o.jpg" width="750" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El aprendizaje automático o aprendizaje automatizado (rama de la inteligencia artificial), tiene como objetivo identificar patrones complejos en millones de datos, predecir comportamientos todo mediante un algoritmo y que, además de todo son capaces de mejorarse de manera independiente con el tiempo.&lt;/p&gt;

&lt;p&gt;Un ejemplo de lo anterior es cuando hacemos uso de los comandos de voz, ya sea por teléfono o mediante otros dispositivos, como los Echo de Amazon, el resultado es lo que el aprendizaje automático proceso con previo análisis de tendencias y relaciones de datos. Y es que este tipo de tecnología hace que nuestras vidas sean fáciles, y esto sin siquiera pensar qué hacemos uso de dicha tecnología.&lt;/p&gt;

&lt;p&gt;Recientemente, el sitio profesional de redes sociales LinkedIn lanzó una lista de las habilidades más demandadas del próximo año en algunos países, incluido Estados Unidos. El informe anual de Emerging Jobs de LinkedIn informó que la demanda de puestos de inteligencia artificial y ciencia de datos en el sector industrial ha subido a la cima de la lista más exigente en los EE. UU., Que aumentará en el futuro.&lt;/p&gt;

&lt;p&gt;Este año (2019), Mark Zuckerberg, el fundador y CEO de Facebook, habló sobre este mundo tecnológico muy solicitado y planea aprender al respecto.&lt;/p&gt;

&lt;p&gt;Los analistas de tecnología predicen que para 2024, se espera que las oportunidades de trabajo en el sector tecnológico aumenten en un 12%, lo cual abrirá la puerta a más empleos nuevos frente a los profesionales del sector de TI.&lt;/p&gt;

&lt;p&gt;La Inteligencia Artificial o IA también será importante el próximo año. Los profesionales de la tecnología de inteligencia artificial ganarán protagonismo. Los equipos de especialistas en inteligencia artificial que muestran habilidades en gestión, ciencia de datos y creación de productos innovadores avanzarán. El aprendizaje automático aplicado es una de las habilidades que se utilizarán el próximo año. Actualmente, la importancia de la ciencia de datos está aumentando rápidamente. Tendrán más demanda sí pueden demostrar su capacidad para usar los datos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entonces ¿qué es el aprendizaje automático (Machine Learning)?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Es una disciplina científica del ámbito de la Inteligencia Artificial que crea sistemas que aprenden automáticamente, es decir, que la computadora tiene la capacidad de aprender cualquier cosa sin escribir el programa por adelantado, eso es aprendizaje automático.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La máquina que realmente aprende es un algoritmo&lt;/strong&gt; que revisa los datos y es capaz de predecir comportamientos futuros. Automáticamente, también en este contexto, implica que estos sistemas se mejoran de forma autónoma con el tiempo, sin intervención humana.&lt;/p&gt;

&lt;p&gt;El principio básico del aprendizaje automático es extraer un patrón o modelo de datos específico de una gran cantidad de datos o datos. Luego, usarlo para clasificar nueva información, conocida como “clasificación”. Hablando de, ¿por qué esta clasificación debe hacerse? La respuesta es: supongamos que se solicito que se clasificara uno, dos y cinco pesos, ¿cómo haríamos esto? En cierto modo, podemos dividir el dinero de acuerdo con su magnitud y peso. Porque, la magnitud y el peso de cada peso es un poco diferente. Este tipo de cosas es probablemente más fácil para las personas, pero no para un programa de computadora. Esta clasificación requiere una gran cantidad de datos para que un programador los entienda, de modo que el programa pueda comprender y clasificar el dinero adecuadamente.&lt;/p&gt;

&lt;p&gt;Las áreas de aplicación del aprendizaje automático son: reconocimiento de voz, reconocimiento de imágenes y estimación.&lt;/p&gt;

&lt;p&gt;Reconocimiento de voz: el reconocimiento de voz se puede transformar en texto al escuchar a las personas a través de aplicaciones de software. La aplicación de aprendizaje automático es un número de desplazamiento, que presenta señales de voz. Se pueden distinguir palabras o sonidos específicos al compartir estas señales en diferentes secciones. Estas señales de voz se crean calculando diferentes tiempos y frecuencias.&lt;/p&gt;

&lt;p&gt;Reconocimiento de imágenes: otra aplicación importante de la aplicación de aprendizaje automático es trabajar en el proceso de reconocimiento de imágenes. A menudo, los objetos se definen como imágenes digitales. La imagen digital se calcula contando los píxeles de cada imagen. Funciona de dos maneras: detección de rostros y detección de personajes.&lt;/p&gt;

&lt;p&gt;Suposiciones: el uso del aprendizaje automático y la inteligencia artificial se pueden utilizar para estimar un tema. Por ejemplo, el aprendizaje automático puede usarse para predecir si una persona pagará el préstamo antes de otorgar un préstamo bancario. Se requiere el uso de información específica para verificar la viabilidad. En este caso, el papel de los analistas de datos es jugar con esto.&lt;/p&gt;

&lt;p&gt;En la actualidad, la demanda de ingenieros de aprendizaje automático está aumentando en grandes institutos, así como en instituciones generales. Varias organizaciones están mostrando incentivos para utilizar la información de la organización y obtener los beneficios necesarios de ella. Los empleados del sector tienen la oportunidad de trabajar como ingenieros de aprendizaje automático, científicos de datos, arquitectos de inteligencia artificial, analistas de negocios y estadísticos. Entre los sectores que ya aprovechan esta innovación analítica, vale la pena destacar casos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Servicios financieros&lt;/li&gt;
&lt;li&gt;Atención de la salud&lt;/li&gt;
&lt;li&gt;Ventas y mercadotecnia&lt;/li&gt;
&lt;li&gt;Gobierno&lt;/li&gt;
&lt;li&gt;Transporte&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El campo de aplicación práctica depende de la imaginación y de los datos que estén disponibles en la empresa.&lt;/p&gt;

&lt;h4&gt;
  
  
  Otros artículos que te pueden interesar:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://gigaom.com/2014/06/19/the-new-york-times-is-looking-to-machine-learning-to-help-it-understand-reader-behavior/" rel="noopener noreferrer"&gt;The New York Times is looking to machine learning to help it understand reader behavior&lt;/a&gt;. via Gigaom.com&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/@ageitgey/machine-learning-is-fun-80ea3ec3c471" rel="noopener noreferrer"&gt;Machine Learning is Fun!&lt;/a&gt; via medium.com&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mlwave.com/predicting-click-through-rates-with-online-machine-learning/" rel="noopener noreferrer"&gt;Predicting CTR with Online Machine Learning&lt;/a&gt;. via mlwave.com&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>inteligenciaartifici</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Getting Started with the Telerik SideDrawer Control in Xamarin.Forms</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Fri, 15 Nov 2019 17:29:37 +0000</pubDate>
      <link>https://dev.to/luciod3v/getting-started-with-the-telerik-sidedrawer-control-in-xamarinforms-167</link>
      <guid>https://dev.to/luciod3v/getting-started-with-the-telerik-sidedrawer-control-in-xamarinforms-167</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vjytnic4k3alww4ojmr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vjytnic4k3alww4ojmr.png" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is normal to see a side menu in every application that allows the user to navigate to other sections quickly and as a Xamarin developer, we know that there are several ways to implement this option, some complex and others not so much.&lt;/p&gt;

&lt;p&gt;Considering this, Telerik decided to create the SideDrawer control that allows its integration in a simple way, and that in addition to this allows developers to embed any content within the sliding panel, from text and icons to sliders and filters. The best thing about this is that it is compatible with Xamarin.iOS, Xamarin.Android, the Universal Windows Platform and Xamarin.Forms&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Various Customization Options&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In addition, this control is highly customizable, since we can customize the side where we want the menu to appear, this from any of the four sides of the screen. It also has several effects and transition modes, some of them include:&lt;/p&gt;

&lt;p&gt;Push, Reveal, Reverse Slide Out, Slide Along, Slide In On Top, Scale Up, Fade In.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let’s Start!&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First of all we need install Telerik in your Visual Studio:
&lt;a href="https://docs.telerik.com/devtools/xamarin/installation-and-deployment/mac/toolbox-extension-mac" rel="noopener noreferrer"&gt;For Mac&lt;/a&gt; &lt;a href="https://docs.telerik.com/devtools/xamarin/installation-and-deployment/windows/toolbox-extension" rel="noopener noreferrer"&gt;For Windows&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Add Telerik NugetPackage (&lt;a href="https://docs.telerik.com/devtools/xamarin/installation-and-deployment/telerik-nuget-server?_ga=2.224542681.2131240681.1573516749-1615001638.1573516749" rel="noopener noreferrer"&gt;See the instructions here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Let’s continue with the implementation, add the namespace:&lt;/li&gt;
&lt;li&gt;Then we add the control in the following simple way:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;SideDrawer on XAML&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/00040bd76a70ae1f29d8e71f7b6b81d8/href" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/00040bd76a70ae1f29d8e71f7b6b81d8/href" rel="noopener noreferrer"&gt;https://medium.com/media/00040bd76a70ae1f29d8e71f7b6b81d8/href&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SideDrawer on CS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/4cef18abb4e7b5f85e0a30b1716c11cf/href" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/4cef18abb4e7b5f85e0a30b1716c11cf/href" rel="noopener noreferrer"&gt;https://medium.com/media/4cef18abb4e7b5f85e0a30b1716c11cf/href&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once implemented, let’s save and see how it works:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F379%2F0%2A3At5HVxSebNoeE4E" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F379%2F0%2A3At5HVxSebNoeE4E" width="379" height="791"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Effects and Transitions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Remember that we have some effects that will make the menu more dynamic, here are some examples that we can use:&lt;/p&gt;

&lt;p&gt;Location:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/4afea7d51f339b9d3a1a90746278518a/href" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/4afea7d51f339b9d3a1a90746278518a/href" rel="noopener noreferrer"&gt;https://medium.com/media/4afea7d51f339b9d3a1a90746278518a/href&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Transitions:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/72d558679f2b07eeb415cd21aa86a711/href" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/72d558679f2b07eeb415cd21aa86a711/href" rel="noopener noreferrer"&gt;https://medium.com/media/72d558679f2b07eeb415cd21aa86a711/href&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Share Your Feedback&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For many of these we received feedback from you — extremely valuable and appreciated. Please, keep it coming, either by commenting below or by visiting our Feedback portal about Telerik UI for Xamarin. Let us know if you have any suggestions or if you need any particular features/controls.&lt;/p&gt;

&lt;p&gt;And If you have not yet tried the Telerik UI for Xamarin suite, take it out for a spin with a &lt;a href="https://www.telerik.com/xamarin-ui" rel="noopener noreferrer"&gt;30-day free trial&lt;/a&gt;, offering all the functionalities and controls at your disposal at zero cost.&lt;/p&gt;

&lt;p&gt;More Information: &lt;a href="https://www.telerik.com/xamarin-ui/sidedrawer" rel="noopener noreferrer"&gt;XamarinUI/SideDrawer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download the solution: &lt;a href="https://github.com/LucioMSP/Xamarin.Forms.Examples/tree/master/TrkSideDrawer" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Thanks for reading!&lt;/p&gt;




</description>
      <category>xamarin</category>
      <category>telerik</category>
      <category>xamarinforms</category>
    </item>
    <item>
      <title>Identificación Biométrica: Autenticación con huella dactilar en Xamarin.Forms</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Fri, 08 Nov 2019 19:37:35 +0000</pubDate>
      <link>https://dev.to/luciod3v/identificacion-biometrica-autenticacion-con-huella-dactilar-en-xamarinforms-3fdp</link>
      <guid>https://dev.to/luciod3v/identificacion-biometrica-autenticacion-con-huella-dactilar-en-xamarinforms-3fdp</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8s34t8v8zd29pkj6rbjj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8s34t8v8zd29pkj6rbjj.png" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seamos honestos, hoy en día utilizamos nuestro móvil 24h al día ya sea para el ocio, trabajo, vida personal, etc,… por que lo que lo hace portador de abundante información personal. Considerando esto, ¿somos consientes de si en verdad nuestra información está debidamente protegida?. Y es que además de los conocidos sistemas de PIN y patrones, actualmente se ha extendido la autenticación por huella dactilar como un nivel más en seguridad.&lt;/p&gt;

&lt;p&gt;Desde hace algunos años, los sistemas seguridad en dispositivos se están extendiendo a sistemas biométricos que se pueden utilizar o añadir en un nivel más elevado, esto en términos de seguridad. Entre estos se encuentran: reconocimiento facial, de iris, patrones de voz,…y el más popular, el escáner de huellas dactilares.&lt;/p&gt;

&lt;p&gt;Este último es el más extendido ya que está disponible en la mayoría de dispositivos, sean de alta o baja gama. Su uso se ha extendido tan rápido gracias a las ventajas que ofrece:&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;Se utiliza rápidamente y tiene un nivel alto de confianza&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;La huella siempre va con nosotros&lt;/strong&gt;. Nunca se pierde o se nos olvida.&lt;/p&gt;

&lt;p&gt;· Las operaciones que requieran &lt;strong&gt;verificaciones serán más rápidas y prácticas&lt;/strong&gt; (como puede ser la banca online por ejemplo).&lt;/p&gt;

&lt;p&gt;Dejando la introducción de lado, y como buenos programadores que somos, a continuación veremos cómo añadir a nuestros desarrollos la detección de la huella del usuario. Debemos de tener en cuenta que nosotros accederemos a la información de seguridad configurada en los dispositivos que contemos, no crearemos nuevas configuraciones para diferentes huellas o cosas por el estilo.&lt;/p&gt;

&lt;p&gt;Vamos a ver paso a paso cómo añadir el reconocimiento de huellas en una App desarrollada en Xamarin.Forms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 1 — Añadir Paquete NuGet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En esta ocasión haremos uso del NuGet &lt;a href="https://www.nuget.org/packages/Plugin.Fingerprint/" rel="noopener noreferrer"&gt;Plugin.FingerPrint&lt;/a&gt;, el cual se deberá de instalar en todos los proyectos de nuestra solución.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2exhp5i52n3m258kpsej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2exhp5i52n3m258kpsej.png" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez efectuado lo anterior, pasemos a modificar nuestro archivo principal, en mi caso es el MainPage.xaml&lt;/p&gt;

&lt;h3&gt;
  
  
  XAML
&lt;/h3&gt;

&lt;p&gt;De primera instancia deberemos de crear una etiqueta para mostrar un mensaje de resultado y un botón para llamar al método de autenticación.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/9f082588c5f484fff6d647c7f6d2384a/href" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/9f082588c5f484fff6d647c7f6d2384a/href" rel="noopener noreferrer"&gt;https://medium.com/media/9f082588c5f484fff6d647c7f6d2384a/href&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  C
&lt;/h3&gt;

&lt;p&gt;Pasando a la parte del código, primero usemos el método &lt;strong&gt;IsAvailableAsync&lt;/strong&gt; para verificar que el dispositivo tenga el sensor biométrico. Luego hacemos uso del &lt;strong&gt;AuthenticateAsync&lt;/strong&gt; para activar el sensor como se muestra en el siguiente ejemplo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/80c176cf3810c64db00b5dad3216630d/href" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/80c176cf3810c64db00b5dad3216630d/href" rel="noopener noreferrer"&gt;https://medium.com/media/80c176cf3810c64db00b5dad3216630d/href&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuraciones por plataforma&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Android
&lt;/h3&gt;

&lt;p&gt;En nuestro proyecto Android, hay que instalar el NuGet &lt;a href="https://www.nuget.org/packages/Plugin.CurrentActivity" rel="noopener noreferrer"&gt;&lt;strong&gt;Plugin.CurrentActivity&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvaqh7jptcbuhu8q0fsyd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvaqh7jptcbuhu8q0fsyd.png" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MainActivity.cs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Posterior a esto, vayamos a nuestro archivo MainActivity, en donde añadiremos los usings correspondientes para poder hacer uso de los paquetes previamente instalados:&lt;/p&gt;

&lt;p&gt;using Plugin.Fingerprint;&lt;br&gt;&lt;br&gt;
using Plugin.CurrentActivity;&lt;/p&gt;

&lt;p&gt;Después asignaremos la actividad a &lt;strong&gt;SetCurrentActivityResolver&lt;/strong&gt; e inicialicemos el complemento &lt;strong&gt;CrossCurrentActivity&lt;/strong&gt; como se muestra a continuación.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/d52d96d8ec2432e5bfec8e96daa16117/href" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/d52d96d8ec2432e5bfec8e96daa16117/href" rel="noopener noreferrer"&gt;https://medium.com/media/d52d96d8ec2432e5bfec8e96daa16117/href&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AndroidManifest.xml&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para culminar la configuración de esta plataforma, vayamos a nuestro archivo AndroidManifest y agreguemos los siguientes permisos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/16f75f16c419637208e3c0091f6d1428/href" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/16f75f16c419637208e3c0091f6d1428/href" rel="noopener noreferrer"&gt;https://medium.com/media/16f75f16c419637208e3c0091f6d1428/href&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  iOS
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Info.plist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La configuración en este caso para los dispositivos de la manzana es algo más sencillo, solo agreguemos el permiso para hacer uso del Face ID.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8tv7jln0tjjrjuemi6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8tv7jln0tjjrjuemi6v.png" width="562" height="21"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Resultado
&lt;/h3&gt;

&lt;p&gt;Con todo lo antes ya integrado, ahora sí podemos probar la aplicación. Una vez lanzada, si pasamos el dedo por el sensor de huellas, la aplicación nos avisará mediante un mensaje si la huella ha sido reconocida o no. Para realizar una nueva prueba deberemos de cerrar la app y volver a iniciarla.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3jelpy6dwq6z99osgim.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3jelpy6dwq6z99osgim.png" width="372" height="755"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Happy Coding!&lt;/p&gt;




</description>
      <category>xamarinappdevelopmen</category>
      <category>xamarinforms</category>
      <category>xamarin</category>
    </item>
    <item>
      <title>Android 64x con Xamarin.Forms</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Mon, 19 Aug 2019 16:54:29 +0000</pubDate>
      <link>https://dev.to/luciod3v/android-64x-con-xamarinforms-6b8</link>
      <guid>https://dev.to/luciod3v/android-64x-con-xamarinforms-6b8</guid>
      <description>&lt;p&gt;Antes de comenzar recordemos que Google hizo mención en diciembre del 2017, que a partir de este año los desarrolladores deberán lanzar sus aplicaciones en 64 bits (además de la versión de 32 bits) si es que quieren estar en Google Play. El primero de agosto la compañía dio a conocer los plazos de esta transición que acabará en 2021.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggbeixg7t5qgi5c8zwuz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggbeixg7t5qgi5c8zwuz.png" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pero, ¿por qué hace esto Google?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bueno, la finalidad principal proviene del lanzamiento de Android 5. 0 Lollipop y su compatibilidad con los 64 bits, y es que a la fecha no todos los desarrolladores lanzan versiones que puedan exprimir la potencia de los nuevos procesadores. Cabe destacar que una aplicación en 64 bits va más rápida que una aplicación en 32 bits.&lt;/p&gt;

&lt;p&gt;Por ello la compañía ha decidido a que todas las nuevas aplicaciones y las actualizaciones de código nativo deben proporcionar versiones de 64 bits además de las versiones de 32 bits al publicarse en Google Play. Como excepción, Google permitirá aceptando actualizaciones de solo 32 bits para juegos existentes que usan Unity 5.6 o superior hasta agosto de 2021.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Y mi desarrollo en Xamarin.Forms?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se que la mayoría de los que entran a este blog buscan soluciones para el desarrollo hecho en Xamarin.Forms, y no es la excepción este artículo, en el cual demostraré cómo configurar tus aplicaciones de Android hechas con Xamarin para ofrecer una versión de 64 bits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota&lt;/strong&gt; : Dado que las aplicaciones hechas en Xamarin son nativas, esta regla también aplica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comencemos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En nuestra solución hacemos clic derecho en el proyecto de Android y seleccionamos Opciones -&amp;gt; Compilación para Android (Android Build) -&amp;gt; Avanzada (Advanced).&lt;/p&gt;

&lt;p&gt;Asegúrate de que la configuración del proyecto esté establecida en el modo “ &lt;strong&gt;Release&lt;/strong&gt; ” y dentro de la pestaña de opciones avanzadas selecciona las opciones de arquitectura deseadas, para 64 bits indica &lt;strong&gt;x86_64&lt;/strong&gt; y &lt;strong&gt;arm64-v8a&lt;/strong&gt;  .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffwauqjm50owyrokw659c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffwauqjm50owyrokw659c.png" width="800" height="678"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y esto es todo, ahora nuestras aplicaciones de Android admiten la arquitectura de 64 bits.&lt;/p&gt;

&lt;p&gt;Más Información: &lt;a href="https://developer.android.com/distribute/best-practices/develop/64-bit?hl=es-419" rel="noopener noreferrer"&gt;Developer Android&lt;/a&gt; — &lt;a href="https://docs.microsoft.com/en-us/xamarin/android/deploy-test/multicore-devices?WT.mc_id=docs-xamarinblog-jamont" rel="noopener noreferrer"&gt;Multi-Core Devices &amp;amp; Xamarin.Android&lt;/a&gt;&lt;/p&gt;




</description>
      <category>xamarinforms</category>
      <category>xamarinappdevelopmen</category>
      <category>xamarin</category>
    </item>
    <item>
      <title>Probando {XAML Hot Reload for Xamarin.Forms}</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Thu, 08 Aug 2019 18:01:01 +0000</pubDate>
      <link>https://dev.to/luciod3v/probando-xaml-hot-reload-for-xamarinforms-3h38</link>
      <guid>https://dev.to/luciod3v/probando-xaml-hot-reload-for-xamarinforms-3h38</guid>
      <description>&lt;p&gt;Se el por que estas aquí, y se que es tentador el conocer más sobre lo que ya has de haber leído en otros medios digitales, pero antes que nada te invito a que recordemos por ultima vez esa sensación de estar esperando el despliegue de tu aplicación nuevamente en un emulador o dispositivo solo para probar o visualizar los últimos cambios en la UI trabajando con Xamarin.Forms.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgdp9hxz304uunk5fab4.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgdp9hxz304uunk5fab4.jpeg" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el pasado &lt;a href="https://xamarindevelopersummit.com/" rel="noopener noreferrer"&gt;Xamarin Developer Summit&lt;/a&gt; se lanzo una característica muy esperada por todos nosotros los que desarrollamos en Xamarin.Forms, y es que se anunció &lt;strong&gt;XAML Hot Reload for Xamarin.Forms,&lt;/strong&gt; lo que en esencia nos permite realizar cambios en la interfaz de usuario de XAML y verlos reflejados en vivo, sin necesidad de otra compilación o implementación.&lt;/p&gt;

&lt;p&gt;Y bueno, creo que la mayoría de ustedes que esta leyendo esto no puede negar el hecho de que, es o &lt;strong&gt;era&lt;/strong&gt; un poco molesto el tener que reconstruir y reiniciar la depuración para cada cambio visual menor y tener que esperar de 10 segundos a 1 minuto (dependiendo del equipo), solo para descubrir que el cambio no es lo que se quería. Sabemos que en el camino se han presentado algunos intentos de superar esto, por ejemplo ha habido una vista previa de XAML y Xamarin Live Player, pero todos eran diferentes de lo que Hot Reload nos permite hacer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entonces.., ¿qué es Hot Reload?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;XAML Hot Reload for Xamarin.Forms es el proceso que nos permite el poder acelerar el desarrollo de nuestra interfaz de usuario, es decir, cada vez que realicemos un cambio vía XAML en nuestra aplicación en ejecución, simplemente presionamos guardar y ¡listo!, nuestros cambios ya se encuentran en pantalla, sin importar si nos encontramos utilizando un emulador o un dispositivo físico.&lt;/p&gt;

&lt;p&gt;Suena genial, ¿verdad?. Veámoslo en funcionamiento:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/Y3nGkzbc0JE" rel="noopener noreferrer"&gt;https://youtu.be/Y3nGkzbc0JE&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tal y como lo pudimos observar se soportan cambios en cualquier tipo de archivo XAML, es decir, se soportan Páginas, ContentView’s, App, Recursos o Shell, y es que cuando la aplicación se compila utilizando XAML Hot Reload, funciona con todas las bibliotecas y controles de terceros.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Características principales:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Permite ver los cambios de XAML al instante una vez desplegada la App en modo depuración.&lt;/li&gt;
&lt;li&gt;Funciona en Visual Studio 2019 tanto en Windows como macOS.&lt;/li&gt;
&lt;li&gt;Funciona tanto como para Android como para iOS.&lt;/li&gt;
&lt;li&gt;Soporta emuladores y dispositivos físicos.&lt;/li&gt;
&lt;li&gt;Soporta plugins, librerías de terceros, SkiaSharp, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Resumen
&lt;/h3&gt;

&lt;p&gt;XAML Hot Reload llega para ayudar reducir drásticamente los pasos y tiempos necesarios para iterar en UIs. No hace falta hacer nada especial para usar XAML Hot Reload. Sencillamente, compila y despliega tu App como lo harías normalmente y a partir de ese momento solo tienes que hacer cualquier cambio en XAML. Es decir, tampoco es necesario instalar ningún paquete NuGet adicional en la App o realizar cualquier lógica de inicialización en la misma.&lt;/p&gt;

&lt;p&gt;Esto es así porque XAML Hot Reload &lt;strong&gt;usa el depurador&lt;/strong&gt; y no una conexión de red, así que funciona con o sin conectividad. Edita XAML y guarda los cambios. Al volver a cargar, se mantendrá el estado de navegación. Si usas el patrón MVVM, el estado de la interfaz de usuario vinculado a la ViewModel permanecerá intacto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AkrMBNzImlpkwi_Yx.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F0%2AkrMBNzImlpkwi_Yx.gif" width="600" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ejemplo utilizado: &lt;a href="https://developer.xamarin.com/samples/xamarin-forms/UserInterface/BindableLayouts/" rel="noopener noreferrer"&gt;Bindable Layouts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;XAML Hot Reload estará disponible más adelante en 2019, pero puedes registrarte para participar en la fase de vista previa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preview Privada
&lt;/h3&gt;

&lt;p&gt;Si quieren probar XAML Hot Reload, desde ya, pueden registrarse para obtener una &lt;strong&gt;Preview,&lt;/strong&gt; en el siguiente enlace pueden encontrar toda la información: &lt;a href="https://devblogs.microsoft.com/xamarin/xaml-hot-reload" rel="noopener noreferrer"&gt;https://devblogs.microsoft.com/xamarin/xaml-hot-reload&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Cabe destacar que se están agregando a grupos por lotes, así que no se preocupen si no pueden obtenerlo de forma inmediato. Y recordemos que cualquier feedback es importante para continuar mejorando.&lt;/p&gt;

&lt;p&gt;Estoy seguro de que esta nueva característica hará la vida de todos los que somos desarrolladores de Xamarin.Forms mucho mejor y más fácil.&lt;/p&gt;

&lt;h3&gt;
  
  
  Más información
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Blog de Xamarin: &lt;a href="https://devblogs.microsoft.com/xamarin/xaml-hot-reload/" rel="noopener noreferrer"&gt;Announcing XAML Hot Reload for Xamarin.Forms&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://aka.ms/XAMLHotReload" rel="noopener noreferrer"&gt;Xamarin.Forms XAML Hot Reload&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;¡Happy Coding Reload!&lt;/p&gt;




</description>
      <category>xamarin</category>
      <category>xamarinforms</category>
    </item>
    <item>
      <title>CurrencyConverter UI in Xamarin.Forms</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Tue, 06 Aug 2019 16:57:51 +0000</pubDate>
      <link>https://dev.to/luciod3v/currencyconverter-ui-in-xamarinforms-25ao</link>
      <guid>https://dev.to/luciod3v/currencyconverter-ui-in-xamarinforms-25ao</guid>
      <description>&lt;p&gt;Normalmente cuando estamos trabajando con nuestro diseñador visualizando o apoyándolo con el flujo de la aplicación u algunos elementos que se requieren desarrollar de manera inmediata, a veces no pensamos en los componentes que tendremos que hacer para que realice lo que requiere el cliente en la interfaz de usuario, y es que si prestamos atención, existen diversos aspectos que podemos hacer para mejorar la experiencia del usuario al personalizar o mejorar controles, los cuales pueden estar en algún formulario y que sean relevantes ante su interacción con nuestra aplicación.&lt;/p&gt;

&lt;p&gt;Siguiendo con el patrón de las publicaciones anteriores de mis compañeros con referencias hacia aplicaciones Bancarias, en este artículo veremos cómo generar un control que nos permita convertir el valor numérico de un &lt;strong&gt;Entry&lt;/strong&gt; a un valor monetario.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comencemos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1- Una vez creado nuestra solución, generemos las carpetas &lt;strong&gt;Classes, Converters&lt;/strong&gt; y &lt;strong&gt;ViewModels&lt;/strong&gt; en nuestro proyecto Portable, en donde agregaremos las clases relacionadas a las necesidades que soportara la aplicación.&lt;/p&gt;

&lt;p&gt;2- Partamos por la carpeta Classes, en donde agregaremos una clase denominada: &lt;strong&gt;&lt;em&gt;ObservableObject&lt;/em&gt;&lt;/strong&gt; , la cual será la que detecte los cambios de propiedad en nuestro Entry, el código es:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/LucioMSP/188a756f6944efdb1ef80db3953b9b39" rel="noopener noreferrer"&gt;https://gist.github.com/LucioMSP/188a756f6944efdb1ef80db3953b9b39&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3- En la carpeta de Converters generaremos la clase que tendrá toda la lógica para hacer la conversión, llamémosle: CurrencyConverter.&lt;/p&gt;

&lt;p&gt;Tomemos en cuenta que en lugar de extender nuestros modelos con más y más valores, los Converters nos permiten transformar unos valores a otros directamente desde XAML, ejemplo:&lt;/p&gt;



&lt;p&gt;&lt;a href="https://gist.github.com/LucioMSP/8afa5afdeb3f5c190144e3a229ff5b72" rel="noopener noreferrer"&gt;https://gist.github.com/LucioMSP/8afa5afdeb3f5c190144e3a229ff5b72&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4- Continuemos en el sendero de crear clases en las carpetas, en la última (ViewModels), deberemos de crear el ViewModel de la vista MainPage, entonces asignémosle el nombre de: MainPageVM y añadamos lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/LucioMSP/d2b56163a3975a6f71c3b9bc41da2f4e" rel="noopener noreferrer"&gt;https://gist.github.com/LucioMSP/d2b56163a3975a6f71c3b9bc41da2f4e&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5- Agreguemos el Converter en la vista MainPage.xaml.&lt;/p&gt;

&lt;p&gt;El Converter es una clase que hereda de la interfaz IValueConverter, se implementa el método Convert y ConvertBack. Para utilizar el converter se debe definir primero como recurso:&lt;/p&gt;











&lt;p&gt;Y posteriormente, utilizar la palabra reservada Converter para acceder al mismo:&lt;/p&gt;

&lt;p&gt;&amp;lt;Entry x:Name=”NumbertoMoney” Keyboard=”Numeric”&lt;/p&gt;

&lt;p&gt;Text=”{Binding NumbertoMoney, Converter={StaticResource currencyConverter}}”/&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTA&lt;/strong&gt; : Se suelen utilizar los Converters para transformaciones más complejas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XAML Completo&lt;/strong&gt; :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/LucioMSP/a9bbee13a1a3d2bfc0f4fdca6429d322" rel="noopener noreferrer"&gt;https://gist.github.com/LucioMSP/a9bbee13a1a3d2bfc0f4fdca6429d322&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6- Por último, en nuestro MainPage.xaml.cs invoquemos al ViewModel antes creado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/LucioMSP/f6e312ced7d49eec7e23bfa054377ff2" rel="noopener noreferrer"&gt;https://gist.github.com/LucioMSP/f6e312ced7d49eec7e23bfa054377ff2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con esto hemos terminado, guardemos, compilemos y probemos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resultado&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F378%2F1%2AKNEIi5tf-e__zARNljhBwA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F378%2F1%2AKNEIi5tf-e__zARNljhBwA.gif" width="378" height="781"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Acerca de este articulo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Este es el artículo número 22 de &lt;strong&gt;#XamarinUIJuly&lt;/strong&gt; , que es básicamente una serie de publicaciones de blog donde cada día de Julio un miembro de la comunidad de Xamarin publica un blog sobre Xamarin y las interfaces de usuario. Puedes ver más información &lt;a href="https://www.thewissen.io/introducing-xamarin-ui-july/#schedule" rel="noopener noreferrer"&gt;aquí&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobryc4dbom31ziccj8th.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobryc4dbom31ziccj8th.png" width="512" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Descarga el código completo desde mi &lt;a href="https://github.com/LucioMSP/Xamarin.Forms.Examples/tree/master/CurrencyUISample" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;¡Happy Coding!&lt;/p&gt;




</description>
      <category>xamarinforms</category>
      <category>xamarindevelopment</category>
      <category>ui</category>
    </item>
    <item>
      <title>Alexa, abre el curso de desarrollo de Skills de Alexa…</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Wed, 12 Jun 2019 14:52:06 +0000</pubDate>
      <link>https://dev.to/luciod3v/alexa-abre-el-curso-de-desarrollo-de-skills-de-alexa-31dc</link>
      <guid>https://dev.to/luciod3v/alexa-abre-el-curso-de-desarrollo-de-skills-de-alexa-31dc</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvow8ev81qgnh2hbl3c6j.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvow8ev81qgnh2hbl3c6j.jpeg" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hoy en día la tecnología evoluciona a un ritmo sorprendente, tanto así que los dispositivos que nos permiten ejecutar diversas actividades mediante la voz ya es una realidad y su dispersión en la sociedad toma cada vez más terreno.&lt;/p&gt;

&lt;p&gt;La semana pasada, &lt;a href="https://twitter.com/germanviscuso" rel="noopener noreferrer"&gt;German Viscuso&lt;/a&gt;, Technical Evangelist de Amazon para Alexa, ha lanzado un curso &lt;strong&gt;gratuito&lt;/strong&gt; (en Español) para aprender a desarrollar Skills de Alexa. Este curso se encuentra disponible en la plataforma &lt;a href="https://plataforma.keepcoding.io/p/curso-desarrollo-alexa-skills" rel="noopener noreferrer"&gt;KeepCoding&lt;/a&gt; y cubre una amplia variedad de temas clave.&lt;/p&gt;

&lt;p&gt;Susodicho comienza con un vídeo de 20 minutos titulado “Creando skills desde cero”, y sigue con un temario bastante específico, con algunos temas que nos ayudarán a entender cómo funciona Alexa y cómo podemos desarrollarle habilidades para ella. El contenido cubre desde la creación de una Skill básica de tipo “Hola Mundo” a la comunicación con APIs externas y el soporte para el nuevo lenguaje de presentación de Alexa APL:&lt;/p&gt;

&lt;p&gt;– i18n de skills (26:20)&lt;br&gt;&lt;br&gt;
– Diálogos (29:00)&lt;br&gt;&lt;br&gt;
– Memoria y persistencia (26:54)&lt;br&gt;&lt;br&gt;
– Acceso a APIs de ASK (23:58)&lt;br&gt;&lt;br&gt;
– API de recordatorios (46:34)&lt;br&gt;&lt;br&gt;
– Acceso a APIs externas (31:52)&lt;br&gt;&lt;br&gt;
– Introducción a APL (57:14)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“En este curso gratuito aprenderás a hacer una skill de Alexa de forma progresiva. Comenzaremos con un Hello World y de a poco iremos agregando más elementos y características con lo que te convertirás en un verdadero gurú del desarrollo de skills.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para realizar el curso, los requerimientos técnicos son muy básicos y es imprescindible crear una cuenta en el portal de &lt;a href="https://developer.amazon.com/es/alexa/" rel="noopener noreferrer"&gt;desarrolladores de Amazon&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;¿Te apuntas?.. &lt;strong&gt;Inscríbete&lt;/strong&gt; &lt;a href="https://plataforma.keepcoding.io/p/curso-desarrollo-alexa-skills/?product_id=1157593&amp;amp;coupon_code=CURSO-ALEXA-SKILLS-WWWHATSNEW&amp;amp;preview=logged_out" rel="noopener noreferrer"&gt;AQUI&lt;/a&gt;&lt;/p&gt;




</description>
      <category>amazonecho</category>
      <category>alexaskills</category>
      <category>alexa</category>
    </item>
    <item>
      <title>Abrir WhatsApp desde Xamarin.Forms</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Tue, 14 May 2019 03:19:21 +0000</pubDate>
      <link>https://dev.to/luciod3v/abrir-whatsapp-desde-xamarinforms-27a7</link>
      <guid>https://dev.to/luciod3v/abrir-whatsapp-desde-xamarinforms-27a7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawj1ti004nosow70xa81.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawj1ti004nosow70xa81.jpg" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Más del 75% del tiempo los usuarios o consumidores emplean su smartphone y se centran en conversar vía Whatsapp, por ende se entiende que actualmente las aplicaciones tiendan a incluir en su apartado de contacto la opción de interactuar con alguien a través de este medio o mejor aun, incluir un bot dentro de WhatsApp.&lt;/p&gt;

&lt;p&gt;Sea cual sea la opción que se desee optar, en este artículo vamos a ver cómo nuestra aplicación desarrollada en Xamarin.Forms puede abrir un chat en WhatsApp para enviar un mensaje a un número específico.&lt;/p&gt;

&lt;p&gt;Para este ejemplo vamos a utilizar el plugin &lt;a href="https://www.nuget.org/packages/Xamarin.Forms.OpenWhatsApp" rel="noopener noreferrer"&gt;Xamarin.Forms.OpenWhatsApp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenl7oi7c26q9bxz4pn59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenl7oi7c26q9bxz4pn59.png" width="589" height="67"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comencemos generando un nuevo proyecto en VS 2019 que sea Forms en blanco:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz2gz689v5o7zmenysgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz2gz689v5o7zmenysgl.png" width="498" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le asignamos un nombre como: WAXF&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjcmaivaeks60ztxi2t06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjcmaivaeks60ztxi2t06.png" width="499" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seleccionamos la ruta donde se generara la solución:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdkpina52ca6u5k0uuv5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdkpina52ca6u5k0uuv5.png" width="543" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez creado el proyecto deberemos de agregar el NuGet Package, para esto hagamos clic con el botón derecho sobre la solución y seleccionemos Agregar -&amp;gt; Agregar paquetes NuGet…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flvecp9jnifs80067lxgu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flvecp9jnifs80067lxgu.png" width="589" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la ventana emergente escribamos “Xamarin.Forms.OpenWhatsApp” y seleccionemos el plugin como se muestra en la siguiente imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fneweazk3jct865dgfuj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fneweazk3jct865dgfuj6.png" width="468" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hacemos clic en el botón “Install”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XAML&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En nuestra UI añadamos un botón con la propiedad Clicked:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;C#&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agreguemos el using correspondiente:&lt;/p&gt;

&lt;p&gt;using Xamarin.Forms.OpenWhatsApp;&lt;/p&gt;

&lt;p&gt;Posteriormente utilizaremos el método de Chat, para esto abriremos el parámetro que pasa como un número de teléfono y un mensaje.&lt;/p&gt;

&lt;p&gt;private async void OpenWhatsApp(object sender, EventArgs e)&lt;br&gt;&lt;br&gt;
 {&lt;br&gt;&lt;br&gt;
 try&lt;br&gt;&lt;br&gt;
 {&lt;br&gt;&lt;br&gt;
 Chat.Open(“+52 55 X3 X8 XX 4X”, “Envía este texto… VGGL”);&lt;br&gt;&lt;br&gt;
 }&lt;br&gt;&lt;br&gt;
 catch (Exception ex)&lt;br&gt;&lt;br&gt;
 {&lt;br&gt;&lt;br&gt;
 await DisplayAlert(“Error”, ex.Message, “OK”);&lt;br&gt;&lt;br&gt;
 }&lt;br&gt;&lt;br&gt;
 }&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IOS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si queremos que de igual manera funcione en los dispositivos de la marca Apple, deberemos de añadir en el archivo Info.plist los &lt;strong&gt;LSApplicationQueriesSchemes&lt;/strong&gt; clave como se muestra a continuación.&lt;/p&gt;

&lt;p&gt;LSApplicationQueriesSchemes&lt;br&gt;&lt;br&gt;
 &lt;br&gt;&lt;br&gt;
 whatsapp&lt;br&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6doa7mj7wflvhyw4sk3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6doa7mj7wflvhyw4sk3.png" width="425" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con esto hemos terminado, guardemos, compilemos y probemos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resultado&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f183omgi7zcnpa3cn6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f183omgi7zcnpa3cn6c.png" width="367" height="757"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Descarga el código completo desde mi &lt;a href="https://github.com/LucioMSP/Xamarin.Forms.Examples/tree/master/WAXF" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1q8hbwohdgwsixpucn7u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1q8hbwohdgwsixpucn7u.png" width="318" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Hasta la próxima!&lt;/p&gt;




</description>
      <category>whatsapp</category>
      <category>xamarin</category>
      <category>xamarinforms</category>
    </item>
    <item>
      <title>Comparativa de plataformas para Chatbots</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Tue, 07 May 2019 01:47:32 +0000</pubDate>
      <link>https://dev.to/luciod3v/comparativa-de-plataformas-para-chatbots-ke</link>
      <guid>https://dev.to/luciod3v/comparativa-de-plataformas-para-chatbots-ke</guid>
      <description>&lt;p&gt;Antes de comenzar hay que dejar bien en claro un aspecto importante sobre el mundo de los bots, y es que: los &lt;strong&gt;Bot Frameworks&lt;/strong&gt; son las plataformas para la creación y alojamiento de bots y las &lt;strong&gt;Bot Platforms&lt;/strong&gt; son los entornos y aplicaciones donde estos pueden ser desplegados, para interactuar con los usuarios, por ejemplo, aplicaciones de mensajería, páginas web y otros tipos de aplicaciones.&lt;/p&gt;

&lt;p&gt;Hoy en día existe hay una gran &lt;strong&gt;variedad de Bot Frameworks&lt;/strong&gt; , que permiten el desarrollo de chatbots con diferentes niveles de complejidad, funcionalidad y capacidad de integración.&lt;/p&gt;

&lt;p&gt;Entonces, antes de elegir una Bot Framework es muy importante tener claro el &lt;strong&gt;tipo de chatbot&lt;/strong&gt; que se quiere construir:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sencillo y orientado a un fin concreto:&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Comprar una entrada, pedir comida u obtener una información determinada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chatbot conversacional&lt;/strong&gt; :&lt;/p&gt;

&lt;p&gt;Estos son capaces de mantener una conversación, entendiendo y recordando lo que se dice en la misma. Estos chatbots se suelen utilizar con fines de entretenimiento y también para reemplazar los sistemas de FAQ (&lt;em&gt;Frequently Asked Questions&lt;/em&gt;), automatizándolos y haciéndolo más dinámico.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complejos&lt;/strong&gt; :&lt;/p&gt;

&lt;p&gt;Aquí podemos contar con aquellos que ayuden a los usuarios a realizar tareas concretas, manteniendo una conversación y recordando lo que se dice. Su desarrollo es más laborioso, pero ofrecen más posibilidades y una mejor experiencia de usuario.&lt;/p&gt;

&lt;p&gt;Una vez contemplando esto, recordemos que los Bot Frameworks se agrupan en &lt;strong&gt;tres tipos&lt;/strong&gt; :&lt;/p&gt;

&lt;p&gt;Visuales — Conversacionales — Programables&lt;/p&gt;

&lt;p&gt;Cada una de estas tipologías, tienen sus pros y sus contras, y sus mayor o menor idoneidad va depender tanto del objetivo y funcionalidad del chatbot que se quiere construir como de los recursos disponibles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plataformas Visuales&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Estas plataformas están totalmente orientadas a &lt;strong&gt;usuarios no técnicos&lt;/strong&gt; , donde se pueden construir chatbots sin tener conocimientos de programación y/o de IA (&lt;em&gt;Inteligencia Artificial&lt;/em&gt;). La idea es que el usuario puede centrarse en el diseño sin tener que preocuparse por los detalles técnicos.&lt;/p&gt;

&lt;p&gt;Dentro de lo que cabe son &lt;strong&gt;fáciles de aprender&lt;/strong&gt; , ideales para construir &lt;strong&gt;chatbots sencillos&lt;/strong&gt; , orientados a la realización de una función concreta, pero no son adecuadas para el desarrollo de chatbots complejos, ya que no permiten la implementación de sistemas conversacionales complejos y la integración con APIs, y otros sistemas externos que aporten de funcionalidades extras, en pocas palabras esta muy limitada.&lt;/p&gt;

&lt;p&gt;Dentro este grupo estarían: &lt;a href="https://chatfuel.com/" rel="noopener noreferrer"&gt;Chatfuel&lt;/a&gt;, &lt;a href="https://manychat.com/" rel="noopener noreferrer"&gt;ManyChat&lt;/a&gt;, &lt;a href="http://octaneai.com/" rel="noopener noreferrer"&gt;Octane.ai&lt;/a&gt; y &lt;a href="https://www.motion.ai/" rel="noopener noreferrer"&gt;Motion.ai&lt;/a&gt;, entre otras. Todas ellas son &lt;strong&gt;bastante similares&lt;/strong&gt; , aunque hay diferencias en cuanto a madurez, usabilidad de la interfaz y potencia de las tecnologías de IA que incorporan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plataformas Conversacionales&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El objetivo principal de estas plataformas es la de desarrollar &lt;strong&gt;chatbots conversacionales&lt;/strong&gt; , capaces de mantener una conversación con un usuario, sin que tenga que haber un objetivo específico. Así, son adecuadas para la construir chatbots de entretenimiento, publicidad, e-learning o educación. Algunas academias y universidades los usan para enseñanza e investigación.&lt;/p&gt;

&lt;p&gt;Estás plataformas usan lenguajes específicos como &lt;a href="https://es.wikipedia.org/wiki/AIML" rel="noopener noreferrer"&gt;AIML&lt;/a&gt; (&lt;em&gt;Artificial Intelligence Markup Language&lt;/em&gt;) para construir modelos de interacción, sistemas de programación y servicios cognitivos como el NLP (&lt;em&gt;Natural Language Processing&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Un buen representante de este tipo de plataformas es &lt;a href="http://www.pandorabots.com/" rel="noopener noreferrer"&gt;Pandorabots&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;La plataforma de Pandorabots permite el alojamiento de bots, el &lt;em&gt;procesado de lenguaje natural&lt;/em&gt; (NLP) y el uso de entornos de programación, tales como: &lt;em&gt;Java, Node.js, Python, Ruby, PHP&lt;/em&gt; y_ Go_.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plataformas Programables&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Su curva de aprendizaje es más lenta, porque requieren &lt;strong&gt;conocimientos técnicos&lt;/strong&gt; : programación y técnicas de IA. Todas ellas se caracterizan por:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Permitir el uso de diferentes &lt;strong&gt;entornos de programación&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Incorporar sistemas de &lt;strong&gt;NLP avanzados&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dar una amplia gama de posibilidades a la hora &lt;strong&gt;interactuar con otros servicios&lt;/strong&gt; :&lt;br&gt;&lt;br&gt;
servicios cognitivos, bases de datos, modelos de Machine Learning y Deep Learning, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto hace que sirvan tanto para la construcción de &lt;strong&gt;chatbots sencillos&lt;/strong&gt; como otros más &lt;strong&gt;avanzados&lt;/strong&gt; y con una mayor número de funcionalidades.&lt;/p&gt;

&lt;p&gt;Hay bastantes plataformas programables, pero aquí vamos a conocer las que he ido manejando durante este ultimo año.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dialogflow.com/" rel="noopener noreferrer"&gt;Dialogflow (Google)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Plataforma de desarrollo de chatbots, adquirida por Google en septiembre de 2016.&lt;/p&gt;

&lt;p&gt;En Dialogflow pueden crearse chatbots o &lt;strong&gt;agents&lt;/strong&gt; con un &lt;strong&gt;NLP&lt;/strong&gt; (&lt;em&gt;Natural Language Processing&lt;/em&gt;) que permite el uso de &lt;strong&gt;intents&lt;/strong&gt; (&lt;em&gt;intenciones&lt;/em&gt;), &lt;strong&gt;entities&lt;/strong&gt; (&lt;em&gt;entidades&lt;/em&gt;) y la &lt;strong&gt;gestión dinámica de subcontextos&lt;/strong&gt; , en base a los intents detectados. Así, la existencia de un/os determinado/os subcontexto/os, puede/en ser clave/es para la detección y uso de otros intents.&lt;/p&gt;

&lt;p&gt;Por ejemplo, si un usuario dice &lt;em&gt;“Me gustaría encargar una hamburguesa”&lt;/em&gt;, el sistema detectaría el &lt;strong&gt;intent&lt;/strong&gt; &lt;em&gt;“Encargar”,&lt;/em&gt; y una vez que este indicará el tipo y tamaño de la hamburguesa, acciones asociada a este intent, se generaría el subcontexto &lt;em&gt;“&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Hamburguesa_Seleccionada&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;”&lt;/em&gt;. Si posteriormente, el usuario dijera: &lt;em&gt;“¿Cúal es el tiempo de entrega?”&lt;/em&gt;, el chatbot podría decírselo porque la existencia del sub-contexto &lt;em&gt;“Hamburguesa_Seleccionada”&lt;/em&gt;, daría acceso al otro intent &lt;em&gt;“&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Obtener_Informacion_Pedido&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;”&lt;/em&gt;, que contiene dicha información. Si no existiera el subcontexto &lt;em&gt;“Hamburguesa_Seleccionada”&lt;/em&gt;, no podría decirselo porque no tendría acceso al intentel intent &lt;em&gt;“Obtener_Informacion_Pedido”.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Otro aspecto interesante de esta plataforma es que permite la definición de &lt;strong&gt;roles en las entidades&lt;/strong&gt; e indicar si estás son o no obligatorias. Así en la frase &lt;em&gt;“Quiero ir de Madrid a Bilbao el próximo 11 de julio”&lt;/em&gt;, se podría establecer que la primera ciudad es la de salida y la segunda es la de llegada.&lt;/p&gt;

&lt;p&gt;Algunos de los &lt;strong&gt;entornos de desarrollo&lt;/strong&gt; disponibles en Dialogflow son: &lt;em&gt;Node.js, .NET, C++, Python, Ruby, PHP, Java, Android, Xamarin&lt;/em&gt; e_ iOs_.&lt;/p&gt;

&lt;p&gt;Permite el &lt;strong&gt;despliegue&lt;/strong&gt; de chatbots en muchas de las aplicaciones de mensajería, VoIP, en páginas web, asistentes virtuales y aplicaciones propias. Algunas de ellas son: &lt;em&gt;Actions de Google, Web, Slack, Facebook Messenger, Skype, Cisco Spark, Kik, Line, Telegram, Amazon Alexa, Cortana, Twilio&lt;/em&gt; y_ Twitter._&lt;/p&gt;

&lt;p&gt;Otros aspectos importantes de esta plataforma son que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incorpora una &lt;strong&gt;herramienta de análisis&lt;/strong&gt; y &lt;strong&gt;monitorización&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Permite la integración con otros sistemas (&lt;em&gt;APIs, Bases de datos, servicios cognitivos, etc&lt;/em&gt;), a través de  &lt;strong&gt;webhook&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Y se pueden configurar algunos aspectos del &lt;strong&gt;algoritmo de Machine Learning&lt;/strong&gt; (ML) que utiliza para hacer el NLP.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://developers.facebook.com/docs/messenger-platform" rel="noopener noreferrer"&gt;Facebook Bot Engine&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La Facebook Bot Engine, se creó en abril de 2016 y se integra muy bien con la plataforma &lt;strong&gt;Wit.ai&lt;/strong&gt; (adquirida por Facebook a principios de 2015) para el procesamiento de lenguaje natural.&lt;/p&gt;

&lt;p&gt;En ella pueden desarrollarse chatbots con &lt;em&gt;Node.js, Android, iOS, Unity&lt;/em&gt; y &lt;em&gt;PHP&lt;/em&gt;, para los que han creado un buen número de funcionalidades, entre las que se encuentra una buena integración con los elementos de su red social.&lt;/p&gt;

&lt;p&gt;Solo permite el &lt;strong&gt;despliegue&lt;/strong&gt; de chatbots en el &lt;em&gt;Facebook Messenger&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Permite el &lt;strong&gt;NLP&lt;/strong&gt; a través del uso de &lt;strong&gt;intents&lt;/strong&gt; y &lt;strong&gt;entities&lt;/strong&gt; , e incorpora las llamadas &lt;strong&gt;stories&lt;/strong&gt; (historias), elementos clave para definir el comportamiento del chatbot. Cada story es un ejemplo de una conversación o conjunto de intenciones (intents) relacionadas (grafo de intents), a la que se pueden ir añadiendo ramas que se activan ante la existencia o no de una determinada información en las frases entrantes. De modo, que se puede definir un &lt;strong&gt;flujo de conversación&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;También hay habilitado un &lt;strong&gt;mecanismo de marcadores&lt;/strong&gt; que sirve para saltar entre intenciones e historias. Esta plataforma también permite definir los &lt;strong&gt;roles de las entidades&lt;/strong&gt; que se van creando.&lt;/p&gt;

&lt;p&gt;La integración de chatbot con sistemas externos como: &lt;em&gt;APIs, Bases de datos, servicios cognitivos, etc&lt;/em&gt;., puede hacerse a través de los &lt;strong&gt;Bots sends commands&lt;/strong&gt; , que son básicamente, llamadas a funciones. Con &lt;strong&gt;Facebook Analytics&lt;/strong&gt; puede hacerse un seguimiento y monitorización de la actividad del chatbot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.botframework.com/" rel="noopener noreferrer"&gt;Microsoft Bot Framework&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La plataforma de desarrollo de Microsoft consta de tres partes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El portal de desarrollo&lt;/li&gt;
&lt;li&gt;El Bot Connector&lt;/li&gt;
&lt;li&gt;El Bot Directory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El &lt;strong&gt;portal de desarrollo&lt;/strong&gt; permite hacer desarrollos en &lt;em&gt;Node.js&lt;/em&gt; y ** ** &lt;em&gt;.Net,&lt;/em&gt; frameworks de programación maduros, de amplio uso en la actualidad y para los que han desarrollado muchas funcionalidades. También existen implementaciones de esta plataforma con &lt;em&gt;Python&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;Bot Connector&lt;/strong&gt; es una clase que permite la multicanalidad de los chatbots, Así, a través de él, se pueden desplegar los chatbots en las principales aplicaciones de mensajería: &lt;em&gt;Slack, Facebook Messenger, Kik, Line, Telegram, Twilio SMS, Twitter, etc&lt;/em&gt;., páginas web_,&lt;em&gt;aplicaciones de VoIP (_Skype&lt;/em&gt;) email, asistentes virtuales (&lt;em&gt;Cortana&lt;/em&gt;) y aplicaciones propias, a través del &lt;em&gt;Direct Line&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;Bot Directory&lt;/strong&gt; es una colección de chatbots desarrollados con Microsoft Bot Framework.&lt;/p&gt;

&lt;p&gt;Esta plataforma también permite &lt;strong&gt;monitorizar&lt;/strong&gt; , hacer &lt;strong&gt;analíticas&lt;/strong&gt; (con &lt;em&gt;Azure Application Insights&lt;/em&gt;) e &lt;strong&gt;integrar otros servicios&lt;/strong&gt; como: &lt;em&gt;bases de datos, servicios cognitivos de Microsoft&lt;/em&gt; (para el procesamiento de texto, voz e imágenes) y las &lt;em&gt;APIs de Bing&lt;/em&gt; para hacer búsquedas, entre otros.&lt;/p&gt;

&lt;p&gt;Para el &lt;strong&gt;NLP&lt;/strong&gt; , usa el &lt;strong&gt;LUIS&lt;/strong&gt; (&lt;em&gt;Language Understanding Intelligent Service&lt;/em&gt;) de Microsoft. LUIS soporta &lt;strong&gt;intents&lt;/strong&gt; &lt;em&gt;,&lt;/em&gt; &lt;strong&gt;entities&lt;/strong&gt; y &lt;strong&gt;features&lt;/strong&gt; para analizar el contenido de los mensajes entrantes y definir el comportamiento del chatbot. Las features son &lt;em&gt;diccionarios de palabras o expresiones&lt;/em&gt; que permiten que el modelo aprenda más rápido. Gracias a ellas, puede reconocer una entidad con el menor número de ejemplos posibles.&lt;/p&gt;

&lt;p&gt;Mediante las &lt;em&gt;phrase list features&lt;/em&gt; pueden definirse conjuntos de posibles valores de una entidad, que tienen que tratarse de manera idéntica. LUIS también admite los &lt;em&gt;pattern features&lt;/em&gt;, útiles cuando una de nuestras entidades es, por ejemplo, un código de vuelo o un producto cuyo formato es representable mediante una expresión regular.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://console.bluemix.net/developer/watson/dashboard" rel="noopener noreferrer"&gt;IBM Watson&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el cloud de IBM la construcción de chatbot se hace a través de los &lt;strong&gt;Conversation Services de Watson&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Los chatbots se conocen como &lt;strong&gt;workshop&lt;/strong&gt; y se pueden construir haciendo uso de varios &lt;strong&gt;frameworks de desarrollo&lt;/strong&gt; : &lt;em&gt;Node.js, Python, .Net, Android, iOS, etc&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;NLP&lt;/strong&gt; que usa esta basado en el uso de &lt;strong&gt;intents&lt;/strong&gt; , &lt;strong&gt;entities&lt;/strong&gt; y &lt;strong&gt;synonyms&lt;/strong&gt;. Estos últimos son &lt;em&gt;conjuntos palabras, reconocidas dentro de una misma entity&lt;/em&gt;, por ejemplo: paella, pizza, bocadillo y gazpacho, estarían dentro de la entity “comida”. Otro aspecto interesante es que incluye una funcionalidad, llamada &lt;em&gt;Fuzzy Matching&lt;/em&gt;, con la que reconocer las palabras que el usuario escribe mal, por ejemplo: si el usuario escribe &lt;em&gt;piza&lt;/em&gt;, el sistema sería capaz de interpretar que se refiere &lt;em&gt;pizza&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;La herramienta de NLP de IBM, también permite la creación &lt;em&gt;flujos de diálogos&lt;/em&gt; de forma gráfica, teniendo en cuenta los intents y entities definidas, y la gestión de subcontextos, de forma similar a como se hace en Dialogflow.&lt;/p&gt;

&lt;p&gt;Permite el despliegue de chatbots en la &lt;em&gt;web&lt;/em&gt;, dentro de &lt;em&gt;aplicaciones propias&lt;/em&gt; (similar al Direct Line de Microsoft), &lt;em&gt;Slack&lt;/em&gt;, &lt;em&gt;Facebook Messenger&lt;/em&gt; y &lt;em&gt;Twillo&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;También incluye una &lt;strong&gt;herramienta monitorización&lt;/strong&gt; y &lt;strong&gt;analítica,&lt;/strong&gt; y permite la integración de otras &lt;strong&gt;APIs de Watson&lt;/strong&gt; , bases de datos, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/es/lex/" rel="noopener noreferrer"&gt;Amazon Lex&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es un servicio de AWS (cloud de Amazon) para crear &lt;strong&gt;interfaces conversacionales&lt;/strong&gt; o chatbots.&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;sistema de NLP&lt;/strong&gt; se basa en el uso de &lt;strong&gt;intents&lt;/strong&gt; y &lt;strong&gt;slots&lt;/strong&gt;. Los slots son los parámetros que puede requerir un intent, aunque no son obligatorios. Por ejemplo, el intent &lt;em&gt;OrderFly&lt;/em&gt; podría requerir slots como &lt;em&gt;origen&lt;/em&gt;, &lt;em&gt;destino&lt;/em&gt; y &lt;em&gt;clase&lt;/em&gt;, teniendo cada uno de ellos un tipo, por ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Origen&lt;/em&gt; y &lt;em&gt;destino&lt;/em&gt;: tendrán un listado de aeropuertos&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Clase&lt;/em&gt;: los valores “&lt;em&gt;Turista”,&lt;/em&gt; “&lt;em&gt;Turista superior”,&lt;/em&gt; “&lt;em&gt;Business”&lt;/em&gt; y “&lt;em&gt;Primera”&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El usuario podrá responder con un valor de slot que incluya palabras adicionales, como &lt;em&gt;“Quiero ir desde a Madrid a San Petesburgo”&lt;/em&gt; o &lt;em&gt;“Prefiero la clase Business”&lt;/em&gt; y el sistema de Amazon Lex seguirá entendiendo el valor de slot integrado.&lt;/p&gt;

&lt;p&gt;Cuenta con los siguientes &lt;strong&gt;entornos de programación&lt;/strong&gt; : &lt;em&gt;Node.js, Python, .NET, Android, iOS, Java, Javascript, PHP&lt;/em&gt; y_ Ruby_.&lt;/p&gt;

&lt;p&gt;La &lt;strong&gt;integración con otros servicios&lt;/strong&gt; (&lt;em&gt;DynamoDB, Amazon Cognito&lt;/em&gt; y &lt;em&gt;APIs&lt;/em&gt;), se hace a través de los &lt;strong&gt;AWS Lambda&lt;/strong&gt; , integrados dentro de Amazon Lex.&lt;/p&gt;

&lt;p&gt;Incluye &lt;strong&gt;herramientas para la monitorización&lt;/strong&gt; y &lt;strong&gt;analítica&lt;/strong&gt; , y también permite la integración del &lt;em&gt;Amazon CloudWatch&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Los chatbots creados con Amazon Lex pueden desplegarse en &lt;em&gt;Facebook Messenger, Slack_y&lt;/em&gt; Twillo_.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://designer.aspect-cloud.net/" rel="noopener noreferrer"&gt;Aspect CXP&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La &lt;strong&gt;Aspect Customer Experience Platform (CXP)&lt;/strong&gt; es una plataforma para el diseño, implementación y despliegue de aplicaciones de para el customer service, entre los que se incluyen los &lt;strong&gt;chatbots, a&lt;/strong&gt; través de &lt;strong&gt;canales de comunicación&lt;/strong&gt; como; &lt;em&gt;SMS, voz, web, Skype_y redes sociales como _Facebook&lt;/em&gt; y &lt;em&gt;Twitter&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No permite el uso de lenguajes de programación&lt;/strong&gt;. El diseño y desarrollo de chatbots, se hace a través de una herramienta propietaria, llamada &lt;strong&gt;Aspect CXP Designer&lt;/strong&gt;. Una aplicación con bastantes posibilidades que está a &lt;em&gt;medio camino entre una aplicación gráfica y un lenguaje de programación&lt;/em&gt;, aunque para sacarle el máximo partido hay que tener conocimientos de lógica de programación. Sin embargo, es importante aclarar que el grado de personalización y adaptación que permite es menor que cuando se usa un lenguaje de programación. También permite la &lt;strong&gt;integración de otros servicios&lt;/strong&gt; : &lt;em&gt;APIs, Bases de datos, servicios cognitivos, etc&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Para el &lt;strong&gt;NLP&lt;/strong&gt; usa un componente llamado &lt;strong&gt;Aspect NLU&lt;/strong&gt; (Natutal Language Understanding) que permite recorrer las frases entrantes e ir identificando los elementos relevantes y su significado. Este sistema de procesamiento del lenguaje natural es diferente a los vistos anteriormente, que se basan más en el entrenamiento de sistemas pre-entrenados, y sus sistemas de interpretación se construyen a través de un &lt;em&gt;sistema de reglas&lt;/em&gt; que se apoya en una serie de &lt;em&gt;bases de datos léxicas&lt;/em&gt;, que están alienadas entre los diferentes lenguajes y permiten que los elementos identificados funcionen en &lt;em&gt;varios idiomas&lt;/em&gt;. Así, un mismo sistema de identificación puede ser utilizado para diferentes idiomas.&lt;/p&gt;

&lt;p&gt;Las implementaciones de NLP hechas con Aspect NLU son &lt;strong&gt;más robustas,&lt;/strong&gt; pero &lt;strong&gt;menos flexibles&lt;/strong&gt; y &lt;strong&gt;más complejas&lt;/strong&gt; de construir.&lt;/p&gt;

&lt;p&gt;La calidad de la &lt;strong&gt;documentación es aceptable&lt;/strong&gt; , los &lt;strong&gt;ejemplos&lt;/strong&gt; desarrollo de chatbots con esta plataforma son &lt;strong&gt;escasos&lt;/strong&gt; y su código no es accesible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.gupshup.io/developer/home" rel="noopener noreferrer"&gt;Gupshup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es una plataforma de desarrollo apta tanto para desarrolladores como para aquellos que no lo son, ya que ofrece dos herramientas: Flow Bot Builder y Bot Builder IDE.&lt;/p&gt;

&lt;p&gt;La &lt;strong&gt;Flow Bot Buider&lt;/strong&gt; es un editor visual, apto para usuarios sin conocimiento de programación, que permite la construcción y despliegue de chatbots sin necesidad de escribir código de programación. Permite la construcción de &lt;strong&gt;chatbots sencillos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;Bot Builder IDE&lt;/strong&gt; es una herramienta de desarrollo que permite el uso de varios &lt;strong&gt;entornos de programación&lt;/strong&gt; (&lt;em&gt;Node.js, Python, Ruby, PHP, Java, C#, Android e iOS&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Incluye herramientas de &lt;strong&gt;analítica&lt;/strong&gt; y &lt;strong&gt;monitorización&lt;/strong&gt; , y el NLP que trae por defecto (NLP on the fly) es sencillo y muy fácil de implementar, pero sólo permite el manejo de &lt;em&gt;intents&lt;/em&gt; y &lt;em&gt;entities&lt;/em&gt;. También permite hacer uso de otros motores de NLP (más completos), en especial los de &lt;em&gt;Dialogflow&lt;/em&gt; y &lt;em&gt;Wit.ai&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Tanto una herramienta como la otra, permiten el &lt;strong&gt;despliegue de chatbots&lt;/strong&gt; en varios canales: &lt;em&gt;Facebook Messenger, SMS, Twitter, Telegram, Slack, Hipchat, Skype, Kik, Twillio, Line, Cisco Spark, Teamchat, etc.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;También permite la integración de servicios como &lt;em&gt;APIs, Bases de datos, servicios cognitivos, etc&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resumen&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Según lo antes mencionado las tres plataformas de desarrollo de chatbots más recomendadas actualmente, en orden de prioridad, serían:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dialogflow de Google&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft Bot Framework&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gupshup&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Como se puede ver, existe un gran número de posibilidades a la hora de crear &lt;strong&gt;chatbots&lt;/strong&gt;. Así que lo más recomendable, es ir viendo y probando cada una de las plataformas disponibles, para ver cuál de ellas se ajusta mejor a los requerimientos de nuestro proyecto, aunque por distribución de canales mi recomendación seria &lt;strong&gt;MS Bot Framework&lt;/strong&gt;.&lt;/p&gt;




</description>
      <category>chatbots</category>
      <category>microsoftbotframewor</category>
      <category>nlp</category>
    </item>
    <item>
      <title>Change StatusBar Color [Xamarin.Forms]</title>
      <dc:creator>Vicente G. Guzmán Lucio</dc:creator>
      <pubDate>Wed, 04 Jul 2018 21:52:01 +0000</pubDate>
      <link>https://dev.to/luciod3v/change-statusbar-color-xamarinforms-3dob</link>
      <guid>https://dev.to/luciod3v/change-statusbar-color-xamarinforms-3dob</guid>
      <description>&lt;p&gt;Normalmente cuando estamos desarrollando una aplicación buscamos como poder brindar una UI completa hacia el usuario, ademas de que el cliente así lo solicita. Por ende cuando lanzamos la misma, la barra de estado es de otro color, lo cual rompe con lo anterior y lo que requerimos aquí es cambiar el color para que se asemeje con el de la aplicación, pero,¿como lo puedo hacer en Xamarin.Forms?&lt;/p&gt;

&lt;p&gt;Esto es relativamente sencillo, a continuación las indicaciones por plataforma&amp;gt;&lt;/p&gt;

&lt;p&gt;Android&lt;/p&gt;

&lt;p&gt;Window.SetStatusBarColor (Android.Graphics.Color.ParseColor ("#FFFFFF")); // o cualquier otro valor hexadecimal en MainActivity.&lt;/p&gt;

&lt;p&gt;iOS&lt;/p&gt;

&lt;p&gt;El color de la barra de estado de iOS depende del Color de la barra de navegación, por lo que&amp;gt;&lt;/p&gt;

&lt;p&gt;MainPage = new NavigationPage(new MyPage()) { BarBackgroundColor = Color.FromHex("000000"), BarTextColor = Color.White };&lt;/p&gt;

&lt;p&gt;Haría una barra de navegación negra y una barra de navegación con texto blanco en la barra de navegación. Para cambiar el color del texto en la barra de estado, debemos establecer&amp;gt; UIStatusBarStyle UIStatusBarStyleBlackTranslucent en el Info.plist&lt;/p&gt;

&lt;p&gt;UIStatusBarStyleBlackTranslucent significa texto blanco.&lt;/p&gt;

&lt;p&gt;var statusBar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView(); &lt;/p&gt;

&lt;p&gt;Donde el StatusBar tiene propiedades BackgroundColor, BackgroundOpacity, ForegroundColor.&lt;/p&gt;




</description>
    </item>
  </channel>
</rss>
