Ejecutar Socket.io en Xamarin.Android


Es muy frecuente querer ejecutar esta grandiosa tecnología en la mayoría de recursos que usamos, por lo que esta vez les enseñaré a implementar Socket.io sin necesidad de usar terceros y sacarse las canas entre versiones y dependencias en servidor, etc etc… como me pasó a mi.

La ejecución es muy sencilla, tenemos un WebView donde se ejecuta código en Razor, HTML y un poco de JS donde se hará un hilo de comunicación de doble vía entre el WebView y el Code-Behind, a esta técnica la llamé BlackOps, ya que aquí se harán todas estas tareas oscuras y transparentes al usuario final, la cual darán una sensación de que corre de manera nativa.

  • En Xamarin Studio crear un nuevo proyecto tipo “Android WebView Application”, en este caso lo llamaré “EtonMessy_And”. 
  • En la carpeta Assets crear otra carpeta llamada “js” y crear un archivo llamado “blackOpsHelper”, descargar el cliente de Socket.io desde https://cdn.socket.io/socket.io-1.0.4.js y JQuery desde http://code.jquery.com/jquery-1.11.0.min.js 
  • En el archivo RazorView.cshtml agregar las referencias necesarias a los script.
  • Como buena práctica es encapsular toda la lógica en un archivo *.js que podría llamarse BlackOpsHelper.js, sin embargo, por razones del diseño del control WebView en Xamarin no es posible ejecutar llamados a Internet (probablemente se corrija más adelante), por el momento..  añadir el código base que he diseñado en una etiqueta “script”.

Continue reading “Ejecutar Socket.io en Xamarin.Android”

Crear un backend rápido y poderoso con Socket.io en Azure


Siguiendo con el demo del 11 de diciembre el siguiente paso es crear un backend donde todo orquestará y hará armonía; pero para ello decidí usar Socket.io, ya que es una tecnología muy flexible y desde mi punto de vista, muy sencilla de implementar.

Básicamente en Socket.io se generan eventos y listener de estos eventos donde se necesite, si necesito ejecutar un evento en el backend, simplemente defino el emisor y el receptor, con sus lógicas de negocio dependiendo de como sea el callback.

Para comenzar es vital generar una máquina virtual en el ambiente que nosotros deseemos, sin embargo, con fines de esta práctica todo se hizo en Microsoft Azure y su implementación de Virtual Machines.

Crear Website básico en Microsoft Azure


El pasado jueves 11 de Diciembre en Microsoft Branch Colombia se estaba llevando a cabo unas sesiones técnicas para emprendedores del país, en esta sesión accedí a dictar la charla donde se tomarán los siguientes temas:

  • Websites Azure
  • Virtual Machines Azure
  • Windows Phone
  • Xamarin

Por lo cual decidí compartir este código usado durante la sesión en varias secciones, la primera es acerca de la creación básica de Websites en Azure.

Creando el Front End

En esta ocasión se decidió hacer un sitio muy básico y estático que a la final solo se conectará con un Backend publicado en otro lado.

En este caso se simulará un negocio de una disquera musical, sin embargo aclaro que todos los logos y nombres de marca son propiedad registrada.

  • Seleccionar una plantilla adecuada, en este caso ir a http://startbootstrap.com/template-overviews/freelancer/
  • Descomprimir el contenido y renombrar la carpeta a algún nombre fácil de recordar.
  • Modificar las imágenes primarias, donde aparece el muñeco por una foto de algún Dj y agregarle un background a esa sección, esto se hace en el archivo freelancer.css
header {
    text-align: center;
    color: #fff;
    background: #18bc9c;

    background-image: url(../img/DJ-Background.jpg);
  
    /* Background image is centered vertically and horizontally at all times */
    background-position: center center;
  
    /* Background image doesn't tile */
    background-repeat: no-repeat;
  
    /* Background image is fixed in the viewport so that it doesn't move when 
       the content's height is greater than the image's height */
    background-attachment: fixed;
  
    /* This is what makes the background image rescale based
       on the container's size */
    background-size: cover;
}

Continue reading “Crear Website básico en Microsoft Azure”

Windows Phone 8.1: WebView – DefaultBackgroundColor & DOMContentLoaded


En Windows Phone 8.1 Microsoft nos proporciona otro método y dos eventos sumamente importantes para dominar a nuestro antojo el control WebView el cual he dedicado un tiempo para mostrar el potencial de este.

DefaultBackgroundColor

Para comenzar ahora podemos cambiar el color que trae el control por defecto si y solo si, la página no define un background porque ahí si no podemos modificarlo. Esto nos puede servir para modificar una aplicación Web a la identidad de la aplicación, con esto y con las técnicas anteriores podemos tener este WebApp totalmente modificable y parametrizable desde la aplicación de Windows, esto es simplemente magnífico!.

Yendo al grano, DefaulBackgroundColor es una propiedad que se puede leer y escribir (Get, Set) donde pide por parámetro a modificación un objeto tipo Windows.UI.Color y así mismo se puede obtener este tipo de dato.

El uso de esta propiedad es la siguiente:

// Get
Windows.UI.Color myColor = myWebView.DefaultBackgroundColor;

// Set
myWebView.DefaultBackgroundColor = Color.FromArgb(255, 0, 0, 0);

Continue reading “Windows Phone 8.1: WebView – DefaultBackgroundColor & DOMContentLoaded”

Windows Phone 8.1: WebView


El control WebView hospeda contenido Web en la aplicación el cual está en el ensamblado Windows.UI.Xaml.Controls.WebView definido en las librerías compartidas entre Windows y Windows Phone; mediante este control es posible renderizar código HTML y poderlo visualizar, por lo tanto podemos embeber una página Web en nuestra aplicación la cual nos puede traer grandes beneficios a la hora de desarrollar aplicaciones multiplataforma, sin embargo si se usa sin control o de manera desmedida puede convertirse en un dolor de cabeza ya que se puede volver un vector de ataque a nuestra aplicación.

He ahí el motivo de dedicarle una serie de artículos a este aparente sencillo control del cual podremos aprovechar para sacarle su máximo potencial.

Comenzando, dedicaré este artículo a explicar los ámbitos sencillos.

Primeros pasos

Para implementar un control tipo WebView nuestro proyecto de Windows Phone 8.1 debe tener referenciado el ensamblado Windows.UI.Xaml.Controls.WebView el cual si lo construimos con la ayuda de Visual Studio 2015 o 2013 ya lo tendremos referenciado por defecto.

Es decisión nuestra declararlo en la interfaz gráfica o en el code behind, sin embargo la documentación de las API de Microsoft oficial (MSDN) nos recomienda declarar todos los controles a través de XAML porque ya este fue optimizado para administrar la memoria y demás, sin embargo en casos particulares se puede declarar que en este caso será C#.

Code behind:
Windows.UI.Xaml.Controls.WebView webView = new Windows.UI.Xaml.Controls.WebView();
webView.Name = "myWebView";
XAML:
<WebView x:Name="myWebView" />

Continue reading “Windows Phone 8.1: WebView”

Windows Phone 8.1: Optical Character Recognition (OCR)


Siguiendo con el post anterior de los primeros pasos con la cámara se dejó preparado el terreno para este nuevo post.

Antes de comenzar es importante entender que es OCR y por supuesto, seguir el tutorial pasado.

En la última imagen del tutorial pasado en el método CreateBitmapFromCaptureElement se veía una otro método, ReadText.

Para comenzar a leer los caracteres contenidos en una imagen y en este caso obtenida de la cámara es obtener el empaquetado WindowsPreview.Media.Ocr, donde podremos instalarlo de la siguiente manera:

Instalar el NuGet

Abrir el Package Manager Console

Continue reading “Windows Phone 8.1: Optical Character Recognition (OCR)”

Windows Phone 8.1: Cómo usar la cámara, primeros pasos


Hace poco comencé con un proyecto bastante interesante el cual incluía un módulo de reconocer caracteres en una imagen, al lograr eso se podrían desplegar varios tipos de aplicaciones; sin embargo el primer obstaculo que encontré es que controlar la cámara del dispositivo no es como se hacía con sus antecesores (WP7 y WP8), es un poco más cercano a como se maneja en WindowsRT.

Por lo que primero que tenía que hacer era domar este dispositivo que accede a un nivel muy bajo en cuanto a Hardware (se me crasheó el móvil más de 30 veces!!!!), por lo cual decido compartirles esta serie de artículos hasta reconocer caracteres en Windows Phone 8.1, mecanismo que se denomina OCR (Optical Character Recognition).

Como estos artículos son nivel medio supondré que ya tienen creado el proyecto Windows Phone 8.1 XAML con C#.

Declarando los manifiestos

En el manifiesto de la App ir a la sección de Capabilities, seleccionar “Microphone” y “Webcam”

Continue reading “Windows Phone 8.1: Cómo usar la cámara, primeros pasos”

Primeros pasos en Node.js


Casi siempre que tengo que escribir una nueva App con Node.js me toca buscar los pasos iniciales ya que mi frecuencia de desarrollo en esta tecnología no es alta, por lo que decidí re-copilar todos estos primeros pasos que desde mi perspectiva son los más generales.

¿Cómo instalar Node.js en Ubuntu 14.x?

Desde la consola ya sea directamente o un terminal PuTTY escribir los siguientes comandos:

sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm

Cabe aclarar que la máquina virtual debe tener conexión a Internet.

¿Cómo instalar Express?

Continue reading “Primeros pasos en Node.js”

Crear Cloud Service desde Azure PowerShell automaticamente: Anexo


Luego de haber construido gran parte del backend necesario para crear nuestro proveedor de servicios basado en Microsoft Azure lo que nos queda es hacerle un Frontend y así automatizar más las operaciones, así que comencemos.

Lo primer es definir un marcador apropiado para esta operación, el resultado se puede ver en la primera imagen de esta entrada.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>cloud builder.</title>

    <!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="http://getbootstrap.com/dist/css/bootstrap.min.css">

	<link href="http://getbootstrap.com/examples/cover/cover.css" rel="stylesheet">

	<style id="holderjs-style" type="text/css"></style>

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <div class="site-wrapper">
      <div class="site-wrapper-inner">
        <div class="cover-container">
          <div class="masthead clearfix">
            <div class="inner">
              <h3 class="masthead-brand">cloud builder.</h3>
              <ul class="nav masthead-nav">
                <li class="active"><a href="#">Home</a></li>
                <li><a href="#">Contacto</a></li>
              </ul>
            </div>
          </div>

          <div class="inner cover">
            <h1 class="cover-heading">Creación de Cloud Services</h1>            
			<br/><br/><br/>
           <form role="form" name="myform" method="post">
			  <div class="form-group">
			    <label for="InputName">Ingrese el nombre del servicio</label>
			    <br/>
			    <input type="text" class="form-control" name="InputName" id="InputName" placeholder="nombre">
			  </div>
			</form>
			<br/><br/>
            <p class="lead">
              <a href="javascript:sendForm()" class="btn btn-lg btn-default">CREAR <img src="http://i.imgur.com/wwx9MzT.png" alt="Upload Cloud" width="35" style="position:relative;top:-5px;"></a>
            </p>
          </div>
          <div class="mastfoot">
            <div class="inner">
              <p><img src="http://i.imgur.com/knK1nMO.png" alt="Powered by Microsoft Azure"></p>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    
    <!-- Latest compiled and minified JavaScript -->
	<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>

	<script>
		function sendForm()
		{
			document.myform.submit();
		}
	</script>
  </body>
</html>

Listo, ahora solo queda hacer el motor del backend en Node.js

 var express = require("express");
 var bodyParser = require('body-parser');
 var app = express();
 
app.use(bodyParser());

 /* serves main page */
 app.get("/", function(req, res) {
    res.sendfile('/public/index.html')
 });
 
  app.post("/", function(req, res) { 
    /* some server side logic */
    var name = req.body['InputName'];
    
	var file = 'C:\\Users\\thEpisode\\Documents\\Scripts\\Create.ps1';
	var params = ' –Name ' + name + 
				' –publish –PathCredentials C:\\Users\\thEpisode\\Documents\\Scripts\\Credentials\\BizSpark-6-16-2014-credentials.publishsettings';
	var exec = require('child_process').exec;
	var child = exec('powershell.exe ' + file + params, function( error, stdout, stderr) 
    {
       if ( error != null ) {
            console.log(stderr);
            // error handling & exit
       }
       console.log(stdout);

       res.send(stdout);

    });
  });
 
 /* serves all the static files */
 app.get(/^(.+)$/, function(req, res){ 
     console.log('static file request : ' + req.params);
     res.sendfile( __dirname + req.params[0]); 
 });
 
 var port = process.env.PORT || 5000;
 app.listen(port, function() {
   console.log("Listening on " + port);
 });

Todo esto puede quedar en una carpeta llamada “www” y el frontend en “public”

Crear Cloud Service desde Azure PowerShell


En esta entrega demostraré como crear un Cloud Service desde la consola de PowerShell para Microsoft Azure (anteriormente Windows Azure) y poder desplegar un sitio web creado en Node.js.

Prerequisitos

  • Node.js
  • NPM
  • Windows Azure PowerShell
  • Preferible: Windows Server 2012 R2 Datacenter.

Continue reading “Crear Cloud Service desde Azure PowerShell”