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