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”

WinAPI en aplicaciones de escritorio


Cuando estamos desarrollando aplicaciones de escritorio con tecnologías Microsoft lo hacemos con WPF o WinForms, pero muchas veces necesitamos acceder a funcionalidades extra que nos proporciona Windows ya que este cuenta con un gran volumen de funciones para los desarrolladores el cual podemos tener acceso desde las entrañas de Windows hasta los más altos niveles como es la interfaz gráfica, ya sea modificandola a nuestro acomodo o simplemente porque el desarrollo lo necesita.

En el desarrollo de Malware es muy común hacer uso de WinAPI porque como ya les comentaba se puede tener acceso a un nivel muy cercano de Kernel de Windows, hacer estos movimientos en aplicaciones con C++ y C es muy sencillo ya que Windows proporciona los headers para usarlos de manera muy cómoda; el problema viene cuando queremos acceder a estas funcionalidades desde C# o Visual Basic ya que por su propia arquitectura no acceder de manera convencional estas API.

Para entrar un poco en detalle, las API de Windows están contenidas en unas DLL ya compiladas ya que casi todas las aplicaciones que ves en la pantalla (si estás en Windows) acceden a estas y para hacer llamados a código nativo desde aplicaciones administradas como es el caso de las aplicaciones de .Net, me explico, acceder a funciones de DLL’s construidas en lenguajes como C++ (No Visual C++)  o C para ser usadas en aplicaciones que funcionan bajo el CLR

Sin ir más allá en teoría ya que si estás en este post es porque algo debes saber de WinAPI, les presento un portal Web donde recopilan todas las funcionalidades y ponen el código en C# y VB de como debe ser usado, en las más comunes ponen ejemplos de uso.

http://www.pinvoke.net/

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 automaticamente


En la entrega pasada se vio como crear y publicar un Cloud Service, pero muchas veces esto no es práctico ni funcional, lo que se necesita en el mundo real son sistemas automatizados que generen mil cosas por detrás para entregarnos un resultado, como es el caso de una compra por Internet con tarjeta de crédito, también el proceso de autenticación en un sitio web, en fin…

Así que sin más preámbulos esta entrada expondrá el típico caso de una empresa que permite hacer páginas web para clientes que pagan algún dinero, en este caso nos basaremos desde el ejemplo anterior pero esta vez será explicado en detalle y con imágenes.

Configurando y preparando el escenario

En Microsoft Azure o en algún entorno de virtualización preferido crear una máquina virtual con Windows Server 2012 R2 Datacenter

Configurar dicha máquina, para el caso de Microsoft Azure escoger la fecha de la versión de Windows, Nombre, Capa, Tamaño Nombre de usuario y una contraseña Continue reading “Crear Cloud Service desde Azure PowerShell automaticamente”

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”

Día del maestro – FacultyCol, WebGL Demo 2 parte 3


Para finalizar esta serie de tutoriales concluiré con el último paso de esta demo de poder controlar un Photosynth mediante mi móvil; recapitulando ya tenemos el servidor funcionando, tenemos el bridge entre IE y el server, nos queda hacer la App, la cual para esta usaré Xamarin con C#. En Xamarin Studio crearemos un proyecto nuevo para Android llamado “AndroidAppXamarin”, cuando esté creado iremos a “Resources/layout/Main.axml” el cual es el archivo para nuestra interfaz gráfica, aquí crearemos todos los elementos necesarios para que nuestra App pueda funcionar. Necesitaremos los siguientes controles:

  • 2 TextView.
  • 2 Spinner.
  • 1 SeekBar.
  • 1 Button.
  • 1 LinearLayout con 3 botones.

Y nos quedará una interfaz algo parecida a la siguiente: Por el momento probablemente no se ve así tal cual, pero tranquilos, el código es el siguiente:   Continue reading “Día del maestro – FacultyCol, WebGL Demo 2 parte 3”

Día del maestro – FacultyCol, WebGL Demo 2 parte 2


En la primera parte con el demo que se iba a hacer para el evento FacultyCol se hizo un servidor que va a atender todas nuestras peticiones y en si opera como un servidor de chat, recibe y envia a todos sus clientes.

En esta sección será un poco más breve y me concentraré a hacer posible el control de Internet Explorer donde básicamente lo que se hará es un auto-tecleador o un simulador de eventos de teclado, como si fuera alguien quien estuviera físicamente manipulando el teclado.

Lo más básico y sencillo es hacer una aplicación de consola en Visual Studio, para este caso usaré Visual Studio 2013 y compilaré la aplicación con el .NET Framework 4.5.

Continue reading “Día del maestro – FacultyCol, WebGL Demo 2 parte 2”

Auto KeyDown y KeyUp en C#


En alguna ocasiones necesitamos desarrollar un programa o aplicación donde simule un evento del teclado para hacer diversas cosas, como por ejemplo controlar un videojuego de manera remota, haciendo spam, usando Kinect para leer los movimientos y controlar el flujo de un programa externo, en fin… para mi caso lo necesito para automatizar el tecleado de la flecha hacia arriba y hacia abajo, en los próximos post explicaré el motivo.

Inicialmente lo iba a hacer en Javascript nativo pero dadas las políticas de seguridad de Internet Explorer 11 me vi obligado a hacer otra solución, lo único que se me ocurrió fue hacerle una trampilla a IE y hacerle creer que el usuario era quien enviaba el comando del teclado, desgraciadamente no soy el único que se le ha ocurrido y no solo con buenas intenciones, averiguando a puro ensayo y error me di cuenta que para llevar a cabo esta acción la aplicación debe estar con permisos administrativos, de lo contrario IE 11 cierra la aplicación al detectar que está siendo aplicada esta técnica que comunmente se usa para generar spam.

Ok, luego entendiendo esos puntos claros no queda más que comenzar con un proyecto nuevo en Visual Studio, para este caso estoy usando el Framework 4.5 pero según la documentación la función que se usará es soportada desde el Framework 2.0.

En esta solución nueva seleccionar un proyecto para consola.

Se y entiendo muy bien que la función keybd_event fue sustituida por SendInput, pero nuevamente entra a jugar la seguridad de IE y es como si no le hiciera nada.

Entonces declararemos el siguiente método:

 

        private static void SendInput(byte key, int time)
        {
            keybd_event(key, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);

            Thread.Sleep(time);

            keybd_event(key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
        }

Continue reading “Auto KeyDown y KeyUp en C#”