Jose Hernández

Introducción a ReactiveX

ReactiveX es una librería que nos permite crear programas asíncronos basados en eventos y que sigue el patrón observador. ReactiveX utiliza objetos Observable para manejar el flujo de eventos como si fueran una colección a la cual se le pueden aplicar distintas operaciones. Algunos de los beneficios que nos proporciona ReactiveX son que es una librería disponible para muchos lenguajes (Java, JavaScript.NET, Swift …) por lo tanto se puede utilizar tanto en el lado backend como en frontend. Facilita la gestión de excepciones en la programación asíncrona, que se hace muy costosa con los típicos bloques try / catch. Además, hace más sencilla la concurrencia de los programas ya que se encarga de abstraer al programador de la capa más baja y gestiona internamente la sincronización, hilos y posibles errores de concurrencia.

Para comenzar a ver el uso de ReactiveX vamos a ver un ejemplo sencillo utilizando Java y RxJava:

1
2
3
4
String letters[] = {"a", "b", "c", "a", "d", "b", "f", "g", "a", "h", "b", "c", 
    "i", "a", "a", "j"};
Observable<String> observable = Observable.from(letters);
observable.subscribe(letter -> System.out.println(letter));

Leer más

Tutorial Symfony 2: 5 - Completando el controlador

Si has seguido el tutorial anterior sobre los controladores de Symfony 2, ya tendrás una ligera idea de como hay que implementarlos y como se crean las diferentes actions en ellos. Para continuar con el tutorial, en esta entrada vamos a crear un nuevo action que responderá a la petición para ver el detalle de una entrada.

El primer paso que vamos a hacer es definir una ruta para ver el detalle de los posts. Para ello vamos al fichero src/jhernandz/BlogBundle/Resources/config/routing.yml y le añadimos una nueva ruta que llamaremos detail:

1
2
3
4
5
6
7
home:
    pattern: /
    defaults: { _controller: jhernandzBlogBundle:Default:index }

detail:
    pattern: /post/{slug}
    defaults: { _controller: jhernandzBlogBundle:Default:detail}

Leer más

Tutorial Symfony 2: 4 - Trabajando con el controlador

En la última entrada del tutorial de Symfony 2 creamos la página principal de nuestro blog, mostrando información que introducíamos directamente en el controlador. Ahora vamos a modificar ese controlador para que busque las entradas del blog en una base de datos.

Pero antes de comenzar a poner código en nuestro controlador y consultar la base de datos, sería interesante tener algunos datos en ella. A estos datos de prueba, se les llama fixtures y gracias a un bundle de Doctrine podemos crear clases que se encarguen de rellenar, con los datos que indiquemos, nuestra base de datos de forma rápida. Además también nos permite eliminar todos los datos y volverlos a cargarlos.

Vamos a instalar el bundle para poder crear nuestras fixtures, así que abrimos el fichero composer.json que encontraremos en la raíz de nuestro proyecto y después de la clave require añadimos lo siguiente:

Leer más

Tutorial Symfony 2: 3 - Creación del frontend

Actualizado a 19 de Octubre de 2013 Continuamos con la serie de tutoriales sobre Symfony 2 y en esta ocasión vamos a crear el frontend de nuestro blog y a definir algunas rutas. Para realizar estas tareas, Symfony nos proporciona dos herramientas muy útiles dentro de su framework. A la hora de crear el frontend vamos a usar el sistema de plantillas Twig. Mientras que para las rutas usaremos el sistema de enrutamiento.

Comenzaremos definiendo la ruta de la página principal. Si recuerdas la entrada sobre la creación del bundle y el modelo de datos ya indicamos donde podemos encontrar el fichero de rutas. Así que vamos a la carpeta app/config y abrimos el fichero routing.yml. En mi caso el contenido de este fichero es el siguiente:

1
2
3
jhernandz_blog:
    resource: "@jhernandzBlogBundle/Resources/config/routing.yml"
    prefix:   /

Leer más

Enviar imagen desde Android a una base de datos MySQL

En la entrada que realice para obtener una imagen almacenada en MySQL desde una aplicación Android recibí varios comentarios de como realizar el proceso inverso, es decir, poder subir una imagen desde un dispositivo Android para almacenarlo en una base de datos. Así que he decidido crear esta entrada para explicar más o menos como sería el proceso.

Lo primero que tendríamos que tener es un servicio que escuchara la petición y se encargara de almacenar la imagen en la base de datos. Este servicio podría ser de la siguiente manera:

Leer más

Tutorial Symfony 2: 2 - Creación del bundle y del modelo de datos

Actualizado a 19 de Octubre de 2013 Este artículo es la segunda parte del tutorial de Symfony 2 que estoy realizando y continua donde se quedo la primera parte. Si aun no lo has visto, dale un vistazo para aprender a Instalar Symfony 2. Esta parte se va a centrar en crear un bundle en la aplicación y a definir el modelo de datos.

Para comenzar hay que explicar que es un bundle. Una forma fácil de definirlo es, decir que un bundle es una carpeta que contiene todo el código de una funcionalidad de la aplicación. Separar la funcionalidad de una aplicación en bundles permite que más tarde esos bundles se puedan reutilizar con otras aplicaciones sin ningún problema. La aplicación de ejemplo únicamente contendrá un bundle ya que es muy pequeña, pero por ejemplo podíamos separar la gestión de los usuarios en un bundle y toda la gestión de las entradas en el blog en otro bundle distinto.

Una vez explicado que es un bundle, toca crear uno para la aplicación. Para ello abrimos un terminal y vamos al directorio de trabajo donde instalamos Symfony. Una vez en el directorio blog tecleamos lo siguiente:

> php app/console generate:bundle

Este comando inicializará un asistente para crear un nuevo bundle. La primera pregunta que hace el asistente es para que le indiquemos el namespace del bundle. El namespace normalmente suele ser el nombre de la compañía que desarrolla el bundle, seguido opcionalmente de una categoría bajo la que queremos agruparlo y finalmente el nombre del bundle terminado con la palabra bundle. Yo le voy a poner como namespace lo siguiente jhernandz/BlogBundle. En este caso no he indicado ninguna categoría, solamente el nombre del desarrollador y el del bundle.

Leer más