Razor Helpers

Para aquellos que venimos trabajando desde el inicio con ASP.NET MVC recordaran que con la versión de MVC 3 aparecía Razor, el view engine que nos permitía armar vistas mas simples escribiendo menos caracteres 🙂

Hoy vamos a hablar de una característica de Razor que muchas veces se nos pasa por alto, pero que les puede resultar muy útil. Se trata de la sintaxis @helper que nos permite escribir métodos auxiliares re-utilizables en las vistas.

Trabajemos en un simple ejemplo para apreciar la utilidad de esta sintaxis. Supongamos que tenemos una lista que muestra información sobre personas y en una de las columnas es necesario mostrar su dirección postal. Para el caso en que no existiera esta información hay que mostrar la frase “No se cuenta con la dirección postal“.

Como ya se imaginan, esto requiere escribir una simple porción de lógica en la vista que muestre el texto que corresponda dada una condición determinada. Para esto vamos a crear un método auxiliar con la sintaxis @helper que vamos a llamar MostrarDireccionPostal:

Definiendo un Razor Helper

Definiendo un Razor Helper

Sencillo, no?… Seguramente se estarán preguntando cómo podemos hacer para reutilizar esté método en otras vistas de mi aplicación sin necesidad de re-escribir el @helper en cada una de estas vistas. Para esto simplemente debemos mover nuestro método a un archivo con extensión .cshtml o .vbhtml dentro del directorio “/App_Code” (en mi caso lo voy a llamar SebysHelpers.cshtml):

SebysHelpers Template

SebysHelpers Template

Tengan en cuenta que el template SebysHelpers.cshtml se compila bajo la clase SebysHelpers la cual me va a proveer del método estático MostrarDireccionPostal (dentro del template podemos poner cuantos métodos queramos). Hecho esto finalmente resta modificar la vista para invocar el método correspondiente:

Invocando al método dentro del template.

Invocando al método del template.

Como podemos ver el uso de la sintaxis @helper nos permite encapsular lógica del renderizado de las vistas en métodos auxiliares que podemos compartir entre deferentes vistas de una manera muy sencilla y generando código mas legible y mantenible.

Espero que les sea de mucha utilidad.

Abrazos!

Windows Phone 8.1: Controles renombrados

Introducción

Se dice que con “todo cambio se requiere un pequeño sacrificio”. Como los controles de Windows Phone 7.x y Windows Phone 8.0 también existen en Windows Store, se han renombrado los controles para que éstos puedan adaptarse a las aplicaciones universales.

Como sabemos Microsoft está cambiando y el desarrollo de software cambia constantemente para satisfacer las necesidades de clientes y desarrolladores según se da el caso. Con estos cambios nos beneficiaremos en el desarrollo de una aplicación para ambas plataformas (Windows Phone 8.1 y Windows Store), con las famosas Aplicaciones Universales.
En esta publicación veremos algunos de los controles renombrados en esta nueva versión de Windows Phone, es decir, controles que se reemplazan a partir de esta versión.
Sigue leyendo

Windows Phone 8.1: ¿Con qué lenguaje desarrollo?

Introducción

Hoy en día nos encontramos con infinitas formas de desarrollar software, de modo que resulta casi imposible valernos de excusas para no hacer aplicaciones. En el mundo de Windows Phone 7.x e inclusive 8.0, desarrollamos las aplicaciones de forma nativa, híbrida o directamente web. Para las dos últimas, utilizamos como lenguaje base HTML con Javascript para realizar las interacciones entre el usuario y la aplicación, obviamente con sus limitaciones, propias de un lenguaje enfocado a plataformas cliente.

Por otra parte, en el desarrollo nativo nos encontramos por ahí con algún lenguaje “propietario” que debemos aprender de manera a poder desarrollar aplicaciones que puedan interactuar perfectamenete con el hardware disponible en los dispositivos. Por ejemplo, para Android debemos utilizar código Java y sus nomenclaturas, para Windows Phone un lenguaje acorde al .NET Framework y para iOS su famoso Objetive C. Es por eso que Windows Phone a dado un salto más allá para traernos más opciones en el desarrollo de aplicaciones para Windows Phone, incluyendo las aplicaciones Universales.
Sigue leyendo

WPF: Atrapar errores a nivel de aplicación

Introducción

Los buenos desarrolladores de software son conscientes de la necesidad de atrapar errores dentro de una aplicación, para tener control sobre ellas y para evitar “sorpresas” en una aplicación puesta en producción. Sin embargo, existen excepciones que escapan de dichos controles por encontrarse fuera del contexto en el cual nos encontramos en un determinado momento de la ejecución de la aplicación.

Contexto

Dado que en una aplicación podemos ejecutar varios hilos, ejecutar tareas y trabajos en segundo plano existen disponibles maneras de atrapar errores generales dentro de una aplicación WPF. Particularmente utilizo estas 4:

Sigue leyendo

Universal Apps: Lo nuevo para desarrollo Windows

Introducción

Todos nos hemos enterado del Build 2014 que trajo consigo muchas novedades en varios ámbitos por parte de Microsoft. El punto es que han lanzado un simple “Update” para Visual Studio que nos provee de muchas herramientas, SDK y documentación muy útil. Dentro de dicha actualización aparece la novedad Windows Phone 8.1, donde Visual Studio presenta una idea innovadora y bastante llamativa que supera todas las ideas planteadas en el desarrollo nativo anterior. Analizando los cambios en las plantillas nos encontramos con: Aplicaciones universales (Universal Apps) que permite desarrollar una única aplicación para Windows 8.1 y Windows Phone 8.1. Así como lo leíste, utiliza un mismo runtime para ambos tipos de aplicaciones.

Contexto

En Windows 8 y Windows Phone8 habían ciertos snippets (porciones de código) que se utilizaban de la misma manera, otras que eran similares y otras que diferían bastante, razón por la cual los desarrolladores nos veíamos obligados a crear 2 aplicaciones que puedan realizar la misma función y publicarlos en 2 Tiendas (Store) distintas, una para Windows 8 y otra para Windows Phone. Para nosotros, los desarrolladores .NET, es una gran noticia y además un desafío muy grande, pues todos sabemos lo competitivo que es el mercado y con estas facilidades que nos ofrece Microsoft hay que saber explotar el potencial. Sigue leyendo

Usando la cámara del Kinect como cámara fotográfica.

Hola y bienvenidos a este nuevo tutorial, está vez vamos a convertir nuestro Kinect en una cámara fotográfica.

  • Crea un nuevo proyecto en Visual Studio 2012 o 2010 de C# tipo Aplicación WPF con el nombre de tu preferencia.
  • Agrega la referencia Windows.Kinect.dll
  • En la ventana agrega los siguientes controles:

– Image: VideoControl

– Button Inicio: BtnBgn

– Button Guardar Imagen: BtnSave

– Button Detener: BtnStop

– Button Salir: BtnExit

*A todos los button agrega el evento Clic.

Ahora es tiempo de programar, nos vamos al MainWindows.xaml.cs

  • Agrega las siguientes librería:  Using Microsoft.Kinect;
  • Antes del MainWindows() agrega lo siguiente: private KinectSensor sensor;  private byte[] pixelData;

 

Una vez que tengamos todo listo es hora de iniciar con nuestro ejercicio.

  • Da clic en la ventana y agrega el evento Loaded y en el MainWindow agrega  this.Loaded += this.MainWindow_Loaded;
  • Y en el evento Loaded agregaremosKinectCam1
  1. Nos permitirá saber si hay uno o más sensores conectados a nuestro computador.
  2. Esta línea de código encuentra el objeto KinectSensor en la colección junto con su estatus, estatus que será asignado a la propiedad sensor.
  3. Iniciamos el Sensor
  4. Deshabilitamos el ColorStream [Obtiene la secuencia de colores para el Kinect.]
  5. Con esto, el control de su aplicación se traslada a la sensor_ColorFrameReady controlador de eventos donde el proceso marco de imagen tiene que ser hecho.
  6. Con este en caso de que no encuentre ningún sensor conectado al ordenador lanza un mensaje de notificación y cierra la ventana automáticamente.

Creación de Imagen

KinectCam2

  1. OpenColorImageFrame() que devuelve un marco de imagen del tipo ColorImageFrame. Ahora pudemos utilizar este mismo código exacto para trabajar marcos de imagen.
  2. Compruebaa si el marco entrante no es null.
  3. Obtiene los datos de los píxeles en la matriz/arreglo de bytes.
  4. Copia los datos de píxeles.
  5. Calcular la stride.
  6. Asignamos el mapa de bits en VideoControl image. Utilizando las dimensiones del image y utilizando el PixelFormats Bgr32 que es el formato del pixel de 32 bits por pixel.Cada canal de color (azul, verde y rojo) se le asignan 8 bits por píxel (BPP).

Inclusive nosotros podemos jugar con esta parte es decir si cambiamos de Bgr32 a Cmyk32 obtendríamos los siguientes resultados. Dentro de las opciones que te da PixelFormats puedes escoger la que más te guste y tomar las fotografías que quieras y divertirte un buen rato con tu aplicación.

Hasta aquí ya tenemos lo principal, si corremos nuestra aplicación en este momento obtendremos lo siguientes resultados.

KinectCam4

Eventos Clic

Antes de encender y/o apagar el dispositivo hay que cerciorarse de que esté conectado y que nos indique si es posible interactuar con el sensor y para ello agregamos en todos los eventos lo siguiente.

if (this.sensor != null && !this.sensor.IsRunning)

Encender/Iniciar el sensor.

this.sensor.Start();

Detener el sensor.

this.sensor.Stop();

Para salir de la ventana primero detenemos el sensor y después ahora si cerramos la ventana.

this.sensor.Stop();

this.Close();

Guardar imagen.

Para ser un poco más ordenados y que no se vea el código todo amontonado crearemos un método llamado SaveImage donde nos permitirá guardar las imágenes.

KinectCam3

  1. Como es un ejemplo simple le daremos un nombre estático a nuestra imagen a guardar en mi caso será: “Mi primer foto con Kinect.jpg” y de daré el formato de .jpg
  2. Para verificar que no marque error al guardar la segunda imagen y se me detenga la aplicación le estoy diciendo que si encuentra una imagen con el mismo nombre sobre escriba o elimine para sustituirla por la nueva.
  3. Aquí es donde guardamos la imagen, creamos un FileStream con el nombre de la imagen y le decimos que el contenido de la imagen es la que contiene nuestra image, en mi caso la guardare en formato .jpg y es por eso que utilizo JpegBitmapEncoder para definir un codificador que se usa para codificar imágenes a ese formato y finalmente la guardo.

Y ya terminamos ahora si podemos correr nuestra aplicación y al guardar una imagen nos dará el siguiente resultado.

*Las dimensiones de la imagen resultante son de 640 x 480.

*La imagen se guardará en la carpeta del paquete de la aplicación en la carpeta  Bin > Debug.

KinectCam5

 

~ Hasta la próxima 🙂 ~ 

Qué hay de nuevo en ASP.NET MVC 5?

ASP.NET MVC

ASP.NET MVC

Como muchos ya sabrán hace poco Microsoft lanzo nuevas versiones de sus productos y frameworks, entre ellos Visual Studio 2013 (producto) y ASP.NET MVC 5 (framework).

ASP.NET MVC 5 no trae demasiadas novedades (como en versiones anteriores) y por el momento solo esta disponible – de forma totalmente integrada – con VS2013 (es posible utilizarlo en VS2012 instalando los binarios por medio de Nuget: Install-Package Microsoft.AspNet.Mvc).

En este post solo vamos a nombrar las nuevas features del framework, y en siguientes post vamos a ampliar sobre cada una.

Características:

  • One ASP.NET
    Es una nueva plantilla de proyectos ASP.NET que permite customizar y configurar nuestras aplicaciones MVC.
  • ASP.NET Identitity
    Los templates de proyectos ASP.NET MVC se han actualizado para usar ASP.NET Identity en cuestiones de autenticación y gestión de identidad.
  • Bootstrap in the MVC template
    Integración de Bootstrap en las vistas para proporcionar un aspecto elegante y responsivo a nuestras aplicaciones.
  • Authentication Filters
    Nuevos tipos de filtros de autenticación que se complementan al filter [Authorize]. Estos se ejecutan previamente y permiten añadir lógica para validar un usuario y asociarlo a la petición (ya sea a nivel de una acción, controlador o de forma global).
  • Filter overrides
    Permiten definir que filtros no se deben ejecutar en un método de acción o controlador. Por ejemplo podemos definir un filter de forma global y especificar que para cierto controlador o acción el mismo no se ejecute.
  • Attribute routing
    Soporte para routing basado en atributos (gracias a la contribución de Tim MacCallhttp://attributerouting.net). Esta característica nos permite definir nuestras rutas utilizando atributos sobre las propias acciones y controladores.

Si bien nos son revolucionarios los cambios de esta nueva versión de ASP.MVC, hay mucho por investigar, estudiar y conocer 🙂