Páginas

jueves, 15 de mayo de 2014

Usando dos Document Managers con Doctrine MongoDB Bundle

Hola a todos.

Retomo mi blog después de bastante tiempo de olvido. En estos meses, mi vida a dado un vuelco en el ámbito profesional, ya que después de presentar mi proyecto de fin de carrera (con bastantes buenos resultados) entré a formar parte de The MadVideo Inc..

En esta nueva etapa, Symfony y MongoDB han pasado a formar parte de mi día a día. En este espacio os cuento como resolví el problema de utlizar dos Document Managers desde DoctrineMongoDBBundle para tener dos bases de datos separadas en diferentes servidores. Es importante indicar que las bases de datos están configuradas en dos replica sets de MongoDB.

Según la documentación oficial, si queremos indicar en nuestra configuración la presencia de dos Document Managers debemos indicarlo de esta forma:

doctrine_mongodb:
    default_database: hello_%kernel.environment%
    default_connection: conn2
    default_document_manager: dm2
    connections:
        conn1:
            server: mongodb://localhost:27017
        conn2:
            server: mongodb://localhost:27017
    document_managers:
        dm1:
            connection: conn1
            mappings:
                AcmeDemoBundle: ~
        dm2:
            connection: conn2
            mappings:
                AcmeHelloBundle: ~

Hasta aquí todo bien. El problema es que con esta configuración no habremos configurado la conexión para utilizar un replica set. Según encontramos en la documentación, la configuración de la conexión con los replica sets debería quedar de la siguiente forma:

connections:
        conn1:
            server: mongodb://mdb1:27017,mdb2:27017
            options:
                connect: true
                replicaSet: true
        conn2:
            server: mongodb://mdb3:27017,mdb4:27017
            options:
                connect: true
                replicaSet: true
            

Según se puede observar, tenemos un replica set compuesto por los servidores mdb1 y mdb2 y otro compuesto por los servidores mdb3 y mdb4.

Ahora viene lo más importante de todo: ambos replica sets deben ser identificado con distinto nombre. Esta identificación de la que hablo es la que se asigna al replica set cuando lo iniciamos desde la consola de mongo con el comando rs.initiate().

Si no tenemos en mente esto e identificamos ambos replica sets de la misma forma, Symfony tomará ambas conexiones indistintamente para cualquier Document Manager, y por tanto el sistema no producirá los resultados deseados.

Para terminar, hay que hacer un retoque en la configuración para asegurarnos que Symfony identifica cada replica set de forma unívoca:

connections:
        conn1:
            server: mongodb://mdb1:27017,mdb2:27017
            options:
                connect: true
                replicaSet: MyReplicaSet1
        conn2:
            server: mongodb://mdb3:27017,mdb4:27017
            options:
                connect: true
                replicaSet: MyReplicaSet2
            

Como se puede observar, el primer replica set se identifica con el nombre MyReplicaSet1, el segundo con MyReplicaSet2.

De esta forma no tendremos problemas a la hora de redirigir cada petición a base de datos al servidor correcto.


sábado, 20 de octubre de 2012

Instalando OpenCV 2.3.1 en Ubuntu 11.10 (con soporte para Python)

La instalación de OpenCV, sea la versión que sea, suele ser un dolor de cabeza, en especial para los usuarios que se adentran en el mundo de la Visión por Computador a través de esta famosa biblioteca.
El problema principal viene por los continuos cambios en los nombres de funciones, constantes, etc, que los desarrolladores de la biblioteca ffmpeg realizan a lo largo de las diferentes versiones, lo que da lugar a una gran cantidad de errores en la compilación de OpenCV.
En este pequeño tutorial os mostraré unos sencillos pasos para tener la biblioteca OpenCV en su versión 2.3.1 instalada en nuestra máquina Ubuntu 11.10. Sin más, comenzamos.

*******************************************************************************

   1.  Eliminamos las posibles versiones de ffmpeg y x264 que podamos tener instaladas previamente en nuestro PC.


   2.  Instalamos las dependencias necesarias.


   3.  Descargamos e instalamos la biblioteca x264.



        *  Para PC de 32 bits:


        *  Para PC de 64 bits:


        De aquí en adelante procedemos igual para ambas configuraciones:



   4.  Descargamos e instalamos la versión correcta de ffmpeg, que para el caso de OpenCV 2.3.1, debe ser la versión ffmpeg 0.7.1. Instalar otra versión dará innumerables problemas en la instalación de OpenCV.



        *  Para PC de 32 bits:


        *  Para PC de 64 bits:


        De aquí en adelante procedemos igual para ambas configuraciones:



   5.  Descargamos e instalamos la biblioteca v4l.


  6.  Descargamos e instalamos (por fin) nuestro OpenCV 2.3.1.



*******************************************************************************

Para instalar opciones adicionales, podeis consultar la página oficial de OpenCV. Si tenéis alguna duda, no dudeis en preguntar comentando. Un saludo!

miércoles, 27 de junio de 2012

Calentando motores: ARToolkit

¡Hola a todos! 
Comienzo este blog sobre Visión por Computador y Realidad Aumentada con algo bastante básico dentro de este mundo, conocido como tracking con marcas.
Antes de meternos en materia explicando los fundamentos, entresijos y cuestiones generales de qué es y cómo funciona el tracking con marcas, os mostraré un ejemplo sencillo de lo que se pretende conseguir con esta técnica. Para ello os presento la biblioteca ARToolkit.
ARToolkit nos permite realizar en poco tiempo aplicaciones de Realidad Aumentada utilizando marcas especialmente diseñadas para ello. Está basada en el lenguaje C y la biblioteca de generación de gráficos 3D OpenGL; además, puede ser utilizada en Windows, Linux y MacOS.
Una vez instalada esta biblioteca en el sistema operativo que más nos guste, estamos en disposición de realizar nuestros primeros programas con ARToolkit.

* Es importante tener en cuenta que para poder compilar nuestros programas, deberemos cumplir unos ciertos prerrequisitos según el sistema operativo en el que trabajemos (ver sección de descarga de ARToolkit).

Por el momento no entraré en detalles de cómo funciona internamente ARToolkit. Simplemente veremos el aspecto de un programa a modo de Hola mundo en el que se dibujará un cubo encima de la marca que utilizaremos para este ejemplo, tal y como se puede ver en la imagen.


Para la ejecución de este ejemplo he utilizado Ubuntu 11.10 como sistema operativo. 
Bien. ¡Manos a la obra! Para poner en funcionamiento este pequeño programa seguiremos los siguientes pasos:

1.  Descargaremos el archivo Hola Mundo con ARToolkit, el cual contiene todo lo necesario para compilar y ejecutar el ejemplo.

2.  Una vez descomprimido, observaremos que hay un archivo .pdf de nombre Mark1.pdf. Éste contiene la marca con la que vamos a trabajar. Solo tenemos que imprimirlo y recortarlo. Os recomiendo que, si podéis, peguéis la marca sobre algo sólido (un cartón, por ejemplo), con el fin de que al ponerla delante de la cámara, se deforme lo menos posible y se detecte perfectamente.

3.  Abriremos el archivo Makefile y editaremos la línea siguiente:

ARTOOLKITDIR=/home/riky/ARToolkit

Esta línea indica dónde se encuentra instalado ARTookit. Generalmente tendréis que indicar como directorio el /usr/local, que es el directorio donde, por defecto, se instala la biblioteca. Si tenéis ARToolkit instalado en otro directorio, lo escribiremos aquí. En mi caso, la instalación me dio algún problemilla, por lo que tuve que cambiarlo.

4.  Guardamos el Makefile y en el terminal lo compilaremos, como siempre, con el comando make.

5.  Si todo ha ido bien, tendremos un bonito ejecutable de nombre helloWorld. Solo nos queda ejecutarlo con el comando ./helloWorld.