Libros gratuitos de programación | SyncFusion

Simplemente les vengo a compartir una serie de libros gratuitos en el cual solo tienes que registrarte en la página y te permitirá descargar muchos libros y muy buenos en formato PDF o para Kindle. Les dejo el enlace:

https://www.syncfusion.com/resources/techportal/ebooks

Saludos!!

Implementando el patrón Repositorio y Unidad de Trabajo (Unit of Work & Repository) – ASP.NET MVC 5

En esta entrada veremos un patrón de diseño que utilizo ya en todos los proyectos en los que participo, que consiste básicamente en la creación de una capa intermedia que se encuentra entre la Data Layer (acceso a datos) y la Bussiness Layer (reglas de negocio).

El uso de repositorios llega a ser muy común, ya que permite tener bien divida la aplicación, re utilización de código y ademas hace más sencillo el uso de pruebas unitarias, más si usamos interfaces e inyección de dependencias para poder crear  mockups, fake data y ese stuff.

En una unidad de trabajo su función principal es juntar todos los repositorios que conforman nuestra capa de datos y ordenarlos de tal forma que permiten el trabajar en el mismo contexto de Entity Framework y poder hacer operaciones entre repositorios y todo en las mismas transacciones. La unidad de trabajo es utilizada por la capa de negocios, que por lo regular ahí se incluyen las reglas que nuestra aplicación tendrá. Y finalmente el controlador de MVC que es el que nos comunicará con la vista. Sin mencionar que en el front-end podemos tener arquitecturas MVW (AngularJS) o MVVM (KnockoutJS, KendoUI)… un sin fin de patrones que son tan emocionantes!
Leer más “Implementando el patrón Repositorio y Unidad de Trabajo (Unit of Work & Repository) – ASP.NET MVC 5”

Como usar REDIS desde Windows y C# [Visual Studio 2015]

Redis es un motor de base de datos NoSQL del tipo key-value. Éste tiene un sin fin de casos de uso, teniendo como principal función el proveer una instancia de caché de rápido acceso.

En esta entrada veremos algo sencillo pero útil que nos sirve de introducción a las nuevas tecnologías que cada vez son más escuchadas a la hora de trabajar o estudiar nuevas tecnologías en el día a día.

Es turno de Redis, un motor de base de datos NoSQL del tipo key-value caché con persistencia de información. Esto significa que funciona como cualquier caché muy comunes en frameworks web, funcionando como un array asociativo (por eso su descripción de ser key-value) pero manteniendo una persistencia de los datos tanto en memoria y disco duro.

También Redis es popular por ser un servidor de datos estructurados ya que permite no solo guardar un valor relacionado a una llave, sino estructuras diferentes como hashes, listas, bitmaps, hash ordenados y entre otros.

NOTA: Todas las imágenes al darle click se abrirán en una ventana aparte.

Instalando REDIS en Windows

Leer más “Como usar REDIS desde Windows y C# [Visual Studio 2015]”

Introducción a Python y Flask (Visual Studio 2013)

Flask es un micro-framework de python para crear applicaciones web bajo el patrón MVC. Sencillo de usar pero amplio en sus capacidades.

Buen día a todos, en esta ocasión me dediqué el tiempo para ahora grabar un screencast de Python, Flask, Jade con Visual Studio Community Edition 2013 con las herramientas de desarrollo de Python.

Les dejo el vídeo a continuación (ponlo en 720p y de preferencia en otra ventana más grande).

Si les interesa el código me lo hacen saber.

Code4Fun 😀

Consumir Gravatar API con Kendo UI MVVM

Gravatar es un servicio muy utilizado en aplicaciones web que nos ayuda de forma fácil obtener información del usuario sin tener que estarla pidiendo continuamente simplemente usando el email que usa para nuestra aplicación.

Hola a todos, en esta entrada escribiré algo corto y simple. Lo que haremos hoy es consumir la JSON API de Gravatar para que partiendo del User Name poder sacar información del usuario. Si no sabes que es Gravatar, no sé que haces aquí 😛 (Es broma, lee un poco aquí). Es muy útil que las aplicaciones Web que regularmente uso usen Gravatar, con tan solo mi Email ya sacan mi foto de perfil y si es necesario mi biografía (todo depende de cuanto le digas a Gravatar).

El código lo subí a este fiddle. Trabajos de puro Javascript seguro los estaré subiendo a mi cuenta de Fiddle para que si lo usan, estén al pendiente.

HTML

Primero tendremos que agregar las librerías que vamos a usar, vamos a usar las mismas que el post pasado y tendremos la siguiente base:

Screen Shot 2015-05-02 at 8.45.39 PM

Y dentro de body agregaremos nuestra vista de MVVM:
Screen Shot 2015-05-02 at 8.48.06 PM

Lo que hay que explicar aquí son los bindings, el div#container tiene un binding que se casa con su estilo in-line y la propiedad css background-color. Esto porque Gravatar me puede dar el background color que el usuario tiene personalizado. Los demas bindings son como ya lo hemos visto antes, vinculos con propiedades de nuestro View Model. Es importante hablar del span que tiene el binding “text: getGravatarData”, aquí es un truquito para ejecutar una función de mi View Model cada cuando la propiedad gravatarName cambie en el input. En realidad este no mostrará nada. La cosa aquí es que cualquier binding que se ponga en el HTML se van a evaluar nuevamente cada vez que una propiedad cambie.

Javascript

Agregamos dentro del load function de jQuery que ya agregamos el siguiente código javascript:

Screen Shot 2015-05-02 at 8.52.29 PM

getGravatarData consume la api de Gravatar. El URL de la api de gravatar es http://en.gravatar.com/{userName}.json, pueden usar un REST client para probarlo y ver los datos que manda (o simplemente ponerlo en el navegador funciona). So, le concatenamos el user name al url para obtener la información del usuario que queremos, así de fácil.

La api nos regresa un hash MD5 del email del usuario, y lo necesitamos para obtener la imagen de perfil del tamaño que queramos. Por eso usamos el URL http://www.gravatar.com/avatar/{has-md5}?s={size}.

Y el resultado es como lo hemos visto en el fiddle que he subido.

Screen Shot 2015-05-02 at 8.57.28 PM Screen Shot 2015-05-02 at 8.58.49 PM

Saludos!