domingo, 12 de junio de 2016

Trabajando con CodeFirst en Azure App Service

Hola a todos,

Este es un post que debería empezar con algo así como, es mejor tener amigos que dinero. Gracias a Cheo y especialmente a Warnov por ayudarme a entender los cambios de Azure.

Escribo estas notas por que seguramente podrán ayudar a algunos de ustedes. Para quienes hemos trabajado con Azure Mobile Services usando CodeFirst y migraciones automáticas, seguro nos fue común encontrar el post de Fredrik Normén, indicando que debiamos asignar los permisos al usuario autogenerado por Azure.

A hoy las cosas han empezado a cambiar y ya Microsoft anunció la retirada de Azure Mobile Services para continuar con la evolución Azure App Service. Los cambios no son mayores en la construcción, pero si nos obligan a estar más concientes de lo que hacemos.

Ahora no todo se hace automaticamente con el paso a paso de Azure, cada componente y parte debemos crearla nosotros mismos. Es decir:

1. Debemos crear nuestro Mobile App en el portal nuevo


2. Creamos una base de datos y asociamos la base de datos siguiendo el paso a paso


Como vemos el cambio es simplemente que ahora debemos hacer las cosas manualmente, eso implica por lo tanto que debemos crear el login y usuario de base de datos para que nuestras migraciones de CodeFirst funcionen. Le explicación de los cambios en SQL Azure V12 está en MSDN.

Sin embargo los pasos son muy simples:

En la base de datos master creas un login:

CREATE LOGIN TuLogin WITH PASSWORD = 'YourPassword';

En tu base de datos creas el usuario asociado al login que acabaste de crear:

CREATE USER TuUsuario FOR LOGIN TuLogin 

EXEC sp_addrolemember N'db_owner', N'TuUsuario'

Por último hacemos lo que haciamos antes en Azure Mobile Services para que nuestras Migraciones Automáticas funcionen.

GRANT CONTROL ON SCHEMA::[dbo] TO TuUsuario 

Espero que esto les pueda resultar de ayuda, a veces nos malacostumbramos a que todo ocurra automáticamente sin entender que pasa y bueno, aunque es útil para aprendizaje e implementaciones de demos, es mejor ser más concientes de todo y tener el control cuando vamos a producción.

Algo adicional, no de SQL Azure si no del Api y que es muy importante, es que ahora el Api de AppService para Móvil no tiene una ApiKey para asegurar la conexión, por lo tanto además debemos implementar nuestra propia seguridad, sea oAuth o algun esquema de protección como HMAC Autentication

Hasta pronto

domingo, 8 de mayo de 2016

#NinjaTips - Xamarin Forms: Creando una app desde cero (2 de N)

Hola, vamos con un nuevo video. Déjame todos tus comentarios y sugerencias. Espero que lo disfrutes. Recuerda que el código de los laboratorios está disponible en mi Github > https://github.com/soreygarcia/xamarin-forms-lab

Encuentra todos los videos en Channel 9 > https://channel9.msdn.com/Niners/soreygarcia

domingo, 1 de mayo de 2016

#NinjaTips - Xamarin Forms: Creando una app desde cero (1 de N)

Al fin he retomado mis videos de NinjaTips en Channel 9. Espero que les guste esta nueva etapa avanzando un poco mas rapido y viendo como construir y evolucionar una app de verdad.

Encuentra todos los videos en Channel 9 > https://channel9.msdn.com/Niners/soreygarcia

domingo, 14 de febrero de 2016

Netduino Wifi 3

Quiero compartirles algo, después de mucha emoción con el Netduino Plus 2 y muchos días de jugar y aprender, me encontré con algo que no esperaba.

A diferencia de nuestro demo de Mobile Services, el service bus de Azure requiere SSL si o si y Netduino 2 Plus no lo soporta. Consumir o enviar data a Mobile Services, es cool, pero definitivamente el poder de IoT está en la mensajeria y para eso necesitaba Azure Service Bus.

Pues bien después de varios frustrantes días, ayer llegó la noticia nueva al fin para quienes nos gusta Netduino, y es la bienvenida a la familia, del Netduino 3 Wifi, con soporte por supuesto a SSL.

En la presentación oficial en el foro se han publicado algunas de sus características más destacadas:

  • Micro: STM32F427VI Rev 3
  • 2MB dual-bank flash (twice as much as NP2)
  • 256KB RAM including 64KB core-coupled RAM (33% more than NP2)
  • Wi-Fi: TI CC3100, 802.11b/g/n (2.4GHz)
  • Supports open networks, WEP and WPA2
  • Built-in support for the latest SSL security (including TLS 1.2)
  • Three GoBus 2.0 ports (for plug and play components)
  • Support for even more Arduino shields (with ICSP header pads)
  • New miniature shield-friendly pushbutton
  • Brand new power subsystem and power management.

Imaginé que su precio iba a ser muy alto pero en realidad está en el promedio. Para mi sorpresa la caracteristica que más esperaba, el poder configurar la wireless aparecia desactivada en el MS Deploy. Buscando actualizar el firmware al más reciente arruine completamente la board. Quedó permanentemente en Modo TinyBooter y no volvio a responder.

Después de un rato encontre en los foros de netduino la solución, re flashear la board manualmente. Aunque el proceso es más largo que una actualización normal y asusta un poco, funciona perfectamente.

Lo encuentran en esta URL
http://forums.netduino.com/index.php?/topic/11842-how-to-recover-non-responding-netduino-3/

Sin embargo aqui les dejo los pasos tomados desde los foros oficiales

To manually flash firmware using ST DFUSE tools, grab the latest copy of ST's DFUSE tools from the download link at the bottom of the following page:
http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF257916

To erase your board's firmware (do this first):
1. Detach your Netduino
2. Press and hold your Netduino's pushbutton while plugging it in via USB; this will put it in bootloader mode.
3. Erase the firmware on your Netduino using the STDFU Tester application
> a. Select the "Protocol" tab
> b. Press the "Create from Map" button
> c. Select the "Erase" radio button option
> d. Press the "Go" button
> e. Wait for erase process to complete

To create the DFU files which you will program onto your Netduino:
1. Run "DFU File Manager" (from the ST DFU tools)
2. Select "I want to GENERATE a DFU file" and press OK.
3. Click "S19 or HEX..." and then select one of the firmware files in Netduino Update's respective Firmware folder.
4. Click the "generate" button to generate a DFU file which contains the S19 (HEX) file you picked in step 3.
5. Click "delete selected image".
6. Repeat steps 3-5 for the other two firmware files.

Finally, flash each of the .DFU files using the ST DfuSe Demonstrator application (included with STDFU Tester).
1. Run "ST DfuSe Demonstrator"
2. Locate the "Upgrade or Verify Action" pane (bottom-right pane)
3. Press "Choose..." and select one of the generated DFU files
4. Check the "Verify after download" option
5. Press "Upgrade". It will take a few moments to update your Netduino.
6. Repeat steps 3-5 for the other two firmware files.

After you have flashed all the .DFU files, detach and reattach your Netduino (power cycle) or press "Leave DFU mode".


Fritzing: Graficando tus prototipos


Retomando los post del blog quise empezar por buscar una buena herramienta para subir los mapas o gráficos de los circuitos. En internet veia en muchas partes algunas gráficas geniales y he encontrado la herramienta con la que se hacen.

Su nombre es Fritzing y es un proyecto Open Source que pueden encontrar en sus página web y repositorios oficiales

http://fritzing.org
https://github.com/fritzing/fritzing-app

Genial proyecto como todo lo que involucra las comunidades open source alrededor de este tema. Los gráficos son vectoriales y manipularlo es realmente fácil. Eso además de que para quienes no somos expertos en electrónica tiene valiosas ayudas como mostrarte como fluyen tus conexiones en los circuitos.


Por supuesto nuestra board Netduino está disponible y cantidad de elementos. Lo mejor de todo es que al ser  Open Source es seguro que seguirá creciendo.



Consumiendo Servicios Web con Netduino

Se sorprenderán de como he empezado de una forma muy diferente a como comienzan todos los libros de Netduino, encendiendo y apagando LEDs, y es que básicamente lo que quiero que entiendan es que mi último interés es quedarme en temas de esa índole que son abordados en todos los libros de electrónica tanto de Arduino como de Netduino, seguramente también lo haremos, pero mi intención es que juntos nos trasportemos a entender como lograr la electrónica, el software y la nube trabajen para hacer el verdadero internet de las cosas.

La idea con este post es que también la gente que solo sabe electrónica entienda que hoy en día programar un backend para nuestros proyectos, ni siquiera necesita código. Nuestro backend será un servicio Node.js creado a través de los Wizard de Azure.

Así que bueno, para empezar vamos algo cool y simple, vamos a crear un servicio en Azure Mobile Service para que nuestro Netduino pueda enviar información.

En la consola de Azure encontrarán esa opción
Al seleccionar la opción nuevo se abre un submenú donde iniciamos la creación
Llenamos los datos de nuestro servicio
También de la base de datos que utilizará

Esperamos a que Azure finalice las  tareas necesarias

Hasta que nuestro servicio aparezca como listo para usarse

Al entrar a la pestaña de data podemos ver que no tenemos tablas creadas
Presionamos la opción adicionar tabla y le asignamos un nombre

Al confirmar que finalizamos empieza la creación de la tabla que no tarda mucho

 Podemos observar que la tabla no contiene registros

Al ir a la pestaña columnas vemos como azure crea algunos campos en nuestra tabla NoSql de forma automática. Presionamos el botón añadir columna para crear una propia.

Ahora damos un nombre a nuestra columna y elegimos el tipo de dato.
Después de confirmar verificamos que efectivamente la tabla tenga nuestra nueva columna

  
Para que nuestro demo sea más simple voy a cambiar los permisos de la tabla para que cualquiera pueda ingresar datos en ella.

Y ahora si lo que estabamos esperando empezar nuestro primer proyecto en Netduino. Como ven crear un proyecto de .NET Micro Framework es tan simple con cualquier proyecto de .NET en Visual Studio. Simplemente buscamos la sección y vemos todas las plantillas. Seleccionamos la que es acorde al Netduino que tenemos.

En el interior del proyecto encontramos algo familia, un punto de entrada Main típico de aplicaciones de consola.
Siendo nuestra intención probar si la red de nuestro Netduino quedo funcionando vamos a agregar dos referencias a nuestro proyecto, System.Http y System.IO

Además agregaremos un paquete de Nuget
Agregamos el Json.NETMF, para ayudarnos a serializar más facilmente.

Además creamos una entidad que nos permitrá guardar los datos en nuestra table. Ahora luce sencilla, sin embargo en otros laboratorios añadiremos más columnas. 


El código necesario para registrar datos en nuestra tabla se los pongo a continuación, es código .NET común el cual no es mi intención explicar pues es un consumo HTTP tradicional por POST. En verde resalto la línea que indica la Url con la que se debe apuntar a nuestro Azure Mobile Service.

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
using Netduino.NetworkTest.Entities;
using System.IO;

namespace Netduino.NetworkTest
{
    public class Program
    {
        public static void Main()
        {
            try
            {
                EventLog eventLog = new EventLog()
                {
                    Description = "Hello Cloud"
                };
                string json = Json.NETMF.JsonSerializer
                    .SerializeObject(eventLog);

                Debug.Print("Message: " + json);

                var httpWebRequest = (HttpWebRequest)WebRequest
                    .Create(

                      "http://netduinotest.azure-mobile.net/tables/EventLog");

                httpWebRequest.Method = "POST";
                httpWebRequest.Accept = "application/json";
                httpWebRequest.ContentType = "application/json; charset=UTF-8";
                httpWebRequest.ContentLength = json.ToCharArray().Length;

                using (var streamWriter =
                    new StreamWriter(httpWebRequest.GetRequestStream()))
                {
                    streamWriter.Write(json);
                    streamWriter.Flush();
                    streamWriter.Close();
                }

                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader
                    = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                    Debug.Print(result);
                }
            }
            catch (Exception ex)
            {
                Debug.Print("Error: " + ex.Message);
            }
            finally
            {
                Thread.Sleep(Timeout.Infinite);
            }
        }
    }
}


En este punto revisamos la versión del .NET Micro Framework a usar, si aun no has actualizado tu Firmware, debes cambiarla a la correspondiente.

Además nos aseguramos que en la opción .NET Micro Framework este el método de transporte USB y este seleccionado nuestro Netduino
 Y ahora si, estamos listos para ejecutar nuestra app dando PLAY. En la ventana de salida podremos ver como inicia el despliegue de paquetes dentro del Netduino
Luego inicia la ejecución de nuestra aplicación y ups, así se vería un error. En el código que les copié ya está corregido, sin embargo cuando di ejecutar por primera vez olvide remover el HTTPS y dejar solo HTTP en la ruta del servicio de Azure Mobile Services. Como vemos en la imagen, el error es que no es soportado. Netduino no soporta SSL.
Volvemos a ejecutar la aplicación y ahora si tenemos una ejecución exitosa.
Si revisamos nuestro servicio en Azure, veremos el registro enviado desde nuestro Netduino

Starter Kit: Caja De Herramientas

He posteado algunas cosas rápidamente con el fin de dar línea para tener todo lo necesario para comenzar, una de esas cosas es hablar de algunas de las cosas que sería interesante tener para hacer algunos laboratorios.

En muchos lugares donde venden cosas para Arduino encontrarás los componentes necesarios, todos compatibles, finalmente son los componentes más básicos de la electrónica, un Starter Kit para Arduino está muy bien para iniciar. Si lo pides para Netduino te dirán que no tienen pues la mayoría de gente que los vende no entiende del tema, así que no les hagamos lios.

Sin embargo cuando de sensores se trata, mira la hoja de especificaciones, he encontrado algunos que dicen explicitamente no trabajar con Netduino, así que ten cuidado y valida antes de comprar.

Algunas de las cosas que puedes comprar para empezar son: LEDs, fotoresistencias, pulsadores, potenciómetros, resistencias de diferentes valores, Display Segmentados, Multimetro, Protoboard, Pinza para pelar y cortar cable y por supuesto una caja de herramientas para guardarlo todo.

Entre mis recomendados están los siguientes:

Teclado matricial 4x4: Desde que lo ví quise tenerlo, excelente para dar entradas de datos a los labs, además es super sencillo de usar con el .NET Micro Framework Toolbox


Jumpers Wire: En el caso de los cables les recomiendo de varios materiales, tipos y tamaños. Con materiales me refiero a los cables tradicionales y los flexibles que son mucho más cómodos para trabajar con los cables largos que van a los sensores. Los cortos en cable tradicional se pueden poner más facilmente en la protoboard pues tienen más rigidez. Es importante que tengas algunos macho - macho, y otros macho hembra.


Sensores y otros: Es bueno tener servos, buzzer y diferentes tipos de sensores de acuerdo a los labs que quieras hacer


Con respecto a estos, ten en cuenta de compralos ya con su cable o si no tener un set de cables para sensores



Fuente de la imagen del header: http://www.domusweb.it/en/design/2013/02/15/arduino-out-of-the-box.html

Actualizando el Firmware de Netduino

He de confesar que al empezar a investigar como hacer esto me preocupe en poco, con la escasez de Netduinos en mi ciudad lo que menos queria era dañarlo. Pero después de buscar un rato cual era el mejor camino, descubrí que en realidad actualizar el Netduino Plus 2 de la versión 4.2.1 a 4.3.1 es bastante sencillo, lo cual no parecia así en versiones atrás.

En mi caso algo habia mal con mi firmware, al poner una Micro SD no se detectaba más el dispositivo, con la actualización ya no pasó más.

Lo primero que debes hacer es bajar los drivers DfuSe_Demo. Al descomprimir instala el setup según tu procesador. Si quieres curiosear en esta herramientas está bien, pero no necesitas hacer nada allí para la actualización. Estos drivers se requieren para que el Netduino Update Tool reconozca tu Netduino

Luego debes descargar el Netduino Update Tool. Al entrar al enlace notarás que te reporta un error, lo que debes hacer es iniciar sesión en la página y entonces funcionará sin problema el enlace de descarga.

Antes de inicial la actualización, desconecta tu Netduino Plus 2 del PC y presiona el botón de la board mientras vuelves a conectarlo. 

Ejecuta ahora NetduinoUpdate.exe desde la carpeta descomprimida y en la pantalla deberás ver que la herramienta lista tu Netduino. Selecciónalo e inicia proceso


Es bastante sencillo, cuando la barra de progreso termine, tu Netduino estará actualizado. Sin embargo debes tener en cuenta que debes configurar de nuevo la MAC de tu Netduino para que funcione la red. La MAC la encuentras debajo de la board y puedes actualizarla usando el Deployment Tool del .NET Micro Framework.


Allí simplemente ingresas tu nueva MAC Address y presionas el botón Update.

jueves, 28 de enero de 2016

Compartiendo Wifi con Netduino Plus 2

Después de tener todo listo para empezar, hay algo obviamente que en nuestra ruta falta y es darle salida a internet a nuestro Netduino, de todas las primera aventuras esta fue para mi la más complicada, la información está en todos los foros, pero al ser conversaciones y reportes de errores es un poco demorado entender a que se refieren.

Por otro lado mi PC tiene algo en particular y es que debido a que uso varias máquinas virtuales para trabajar con dispositivos móviles, me todo un ratito entender que era lo que debia configurar para poder usar la Wifi en casa con mi Netduino.

Los tradicional es conectar desde tu modem de internet un cable a tu netduino, sin embargo si como en mi caso eso significa cablear tu casa, este post podría ser también tu solución. Esto además de que al irse de casa a hacer un demo, depender de la red de cada lugar es una mala idea y a mano solo tenemos el plan de datos del móvil o bien la conexión de nuestro portatil a alguna red por ahí.

Lo primero que necesitas es un cable cruzado, reconocerlo es tan simple como comparar sus extremos, si la distribución de colores es diferente, ya lo tienes.

Ahora vamos a entrar a las opciones de red de nuestro Panel de Control y buscar la configuración de los adaptadores de red.

Este era el escenario al que me enfrentaba en mi PC


Lo primero es claramente identificar la red a compartir, en mi caso no era la Wifi directamente si no el Virtual Switch que tiene el nombre de mi conexión de red en casa (Yadira). Debes dar click derecho y entrar a las propiedades, y allí ingresar a la pestaña de compartir.

En mi caso debía seleccionar tambien el Virtual Switch de mi Ethernet y no la Ethernet directamente, que de hecho ni aparece. Después de eso la red aparece como compartida, tu internet debe seguir funcionando normalmente.


Ahora viene la parte que en realidad cuesta un poco poner a punto, pero que es necesario memorizar debido a que cada vez que desconectemos nuestras redes todo volverá a sus valores por defecto.

Después decodificar las recomendaciones en los foros estos fueron los pasos que realicé y únicos que me funcionaron, no desesperes, la red puede morir, enloquecer, vuelve al punto cero e inicia de nuevo, no pierdas la cabeza.

Ejecuta el comando IPCONFIG en la Consola de Comandos


Esto es importante pues necesitamos saber cual es el Gateway de nuestra Wifi. Ahora buscamos el Virtual Switch al cual le compartimos la Wifi e ingresamos a sus propiedades

Dentro de las propiedades editamos la configuración de IPv4


Allí configuramos una IP para nuestra subred, y configuramos el Gateway de la Wifi manualmente.


Ahora como vimos antes, entramos a nuestra configuración de red del Netduino y configuramos la IP teniendo en cuenta que el Gateway en este caso será la IP estática que asignamos a nuestro adaptador de red Ethernet en el paso anterior.

En este punto si quieres validar que todo va bien, presiona el botón de la board para resetear el Netduino y entonces deberás ver como muestra la IP que tiene asignada al iniciarse.


Como último paso de verificación, haz un ping a las IP estáticas que configuraste y si todo va bien, ambas responderán correctamente.



Para terminar de validar que nuestro Netduino tiene salida a internet debemos hacer un proyecto y probarlo, pero eso será en el siguiente post.


Fuente de la imagen de la cabecera: https://ciscoccvp.wordpress.com/2009/06/02/t1-crossover-cable/