Muchas veces en el mundo del desarrollo de software (aunque es extensible a otras áreas) nos enfrentamos a proyectos de los que yo denomino de “Cuadrar Círculos“. Son proyectos en los que dentro de la lista de requisitos existen algunos que es difícil (o imposible) cumplirlos a la vez, pero por alguna extraña razón quien define (o paga) el proyecto decide que el sistema a desarrollar tiene que incluirlos sí o sí.

Da igual las razones que expongas para hacer ver que lo que te piden es un imposible o que en resumidas cuentas te están plantando como requisito la cuadratura del círculo.  Eres del equipo de tecnología y tienes que conseguirlo que para eso estás ahí. En estos casos me acuerdo mucho del relato “Oír Gilipolleces“, concretamente del pasaje en el que el jefe le pide que desarrolle algo genérico y reutilizable pero a su vez específico.

En ese momento, el equipo de desarrollo se llena de resignación y se pone manos a la obra para diseñar una solución al problema. Normalmente esta decisión errónea lleva a continuas y eternas reuniones que yo llamo “del día de la marmota” (ya hablaré en otro post sobre ellas) en las que tras discutir, pintar innumerables esquemas, darle mil vueltas al problema, valorar cientos de soluciones y dejar secos una cantidad ingente de rotuladores siempre se llega a la misma conclusión: que cumplir todos los requisitos es prácticamente imposible o bien lleva a una solución extremadamente compleja. Además, esta búsqueda de lo imposible consume muchísimo tiempo y esfuerzo para nada.

Este tipo de proyectos son un gran peligro para cualquier organización, porque lo normal es que finalmente el equipo se salte todas las reglas o recomendaciones del departamento de arquitectura de software e implemente una solución compleja, difícil de mantener, con baja calidad y por lo tanto cara. Esto es peor todavía cuando los nuevos requisitos incompatibles se introducen como evolutivos de un proyecto ya implantado. En este caso lo normal es que se haga añicos la arquitectura correcta de la solución y se llene de parches, desarrollados en lo que yo denomino “modo ñapa“, incrementando innecesariamente el coste de mantenimiento.

Evitar estos problemas es a veces muy difícil porque en muchas ocasiones los responsables definir el producto no hacen un exhaustivo análisis de todas las implicaciones que cada requisito conlleva (o lo que es peor, no tienen el conocimiento ni la capacidad necesaria para poder hacerlo) pero tampoco permiten que el equipo de ingeniería proponga modificaciones al respecto… pero de esto último ya hablaré en otra ocasión, que es un tema que da para mucho :-)

En el mundo de las TIC hay personas, grupos o organizaciones que son reticentes a adoptar o usar todo aquello que no ha sido desarrollado por ellos. Son los seguidores de la llamada filosofía “Not Invented Here”.

Está claro que cada uno es libre de decidir su estrategia TIC (no hay verdades absolutas) pero este antipatrón tiene, según mi opinión, muchos peligros:

  • Tendencia a “reinventar la rueda”, es decir, desarrollar desde cero soluciones ya existentes y estandarizadas.
  • Sobre coste en los proyectos. Al dedicar tiempo a implementar lo que otras librerías o piezas de software externas nos pueden proveer estamos incrementando el coste del proyecto innecesariamente.
  • Curva de aprendizaje alta cuando incorporamos a un nuevo miembro al equipo de desarrollo. Cualquier persona nueva en el equipo tiene que dedicar tiempo en aprender aquellos frameworks y/o librerías antes de ponerse al día con el proyecto en sí.
  • Dificultad para externalizar el mantenimiento

Dentro de los seguidores del “no inventado aquí” hay un subconjunto que me parece muy peligroso y es el de aquellos que siguen esa filosofía sólo porque se creen los mejores, los más geeks y consideran que ninguna persona en el mundo es capaz de implementar la solución tan eficiente, escalable y fiable como lo harían ellos.

Estas personas desprecian cualquier otra solución porque “no se fían” de lo que otros implementan. Y ese “no fiarse” lo hacen por defecto, aun sin llegar a conocer realmente si esa solución es válida y cubre todas sus necesidades. Este grupo de personas que no atienden a razones, se convierte todavía en más peligrosos cuando dentro de la organización se les da poder de decisión y veto.

RabbitMQ es un sistema gestor de colas de mensajes de código abierto que implementa el estándar AMQP (Advanced Message Queuing Protocol). Su principal característica es que soporta multitud de lenguajes de programación (Java, PHP, Python, Ruby, .NET, etc) lo que lo hace más versátil que por ejemplo los sistemas de colas que sólo implementan JMS. Es muy sencillo de utilizar y ofrece bastantes modelos de distribución de mensajes que cubren prácticamente todas las necesidades en este sentido.

Detrás de RabbitMQ está VMware, empresa que en 2010 compró este sistema a Rabbit Technologies Ltd. y que a día de hoy da soporte al producto y da garantías de continuidad a este buen middleware ofreciendo incluso soporte comercial.

Además el protocolo de mensajería AMQP que implementa está respaldado por grandes corporaciones internacionales, que velan por la evolución del estándar y aseguran que no caiga en el olvido.

La instalación del servidor RabbitMQ en Ubuntu 12.04 es sencilla, basta seguir las instrucciones que se dan en su página para añadir el repositorio e instalarlo vía apt-get.

Un poco más complicado es activar el soporte de AMQP en PHP. Ya que Ubuntu no lo ofrece en sus repositorios de forma oficial. Aquí os presento los pasos que he dado en una Ubuntu 12.04 de 64 bits para tener el soporte activado.

PASO 1. Descargar el código de la última librería C para rabbit

Usando Git, nos descargamos la última versión del código de la librería C, que podemos obtener de git://github.com/alanxz/rabbitmq-c.git. Por ejemplo en nuestro home de usuario ejecutamos lo siguiente:

git clone git://github.com/alanxz/rabbitmq-c.git
cd rabbitmq-c
git submodule init
git submodule update

Esto nos crea un directorio rabbitmq-c en el que está todo el código y ficheros necesarios para compilar la librería.

PASO 2: Compilar e instalar la última librería C para amqp.

cd rabbitmq-c
autoreconf –i
./configure --enable-64-bit
Make
make install

Esto compila las librerías para una máquina de 64 bits y las instala por defecto en /usr/local/lib. Ojo que para la instalación es necesario que seamos usuario root.

Paso 3: Compilar e instalar el módulo AMQP para PHP 5.3 (versión 1.0.3 estable)

Debemos descargar la última versión estable del módulo (a fecha de este artículo la 1.0.3) y compilarlo.

wget http://pecl.php.net/get/amqp-1.0.3.tgz
tar –zxvf amqp-1.0.3.tgz
cd amqp-1.0.3
phpize
./configure --with-amqp=/usr/local/lib/ CFLAGS="-m64"
make
make install

Como en el caso anterior hay que ser usuario root para la instalación.

PASO 4: Configurar php para activar el módulo

Creamos en /etc/php5/conf.d/ un fichero amqp.ini con el siguiente contenido

; configuration for php AMQP module
extension=amqp.so

PASO 5: Probar
Creamos un pequeño script en php para probar que tenemos el soporte activado correctamente:

function testConsumer($envelope, $queue) {
        echo "Message : " . $envelope->getBody() . "\n";
        return false;
}

// Create a connection
$cnn = new AMQPConnection();
$cnn->setHost('localhost');
$cnn->setPort(5672);
$cnn->setLogin('php-amqp-user');
$cnn->setPassword('devpassword');

$cnn->connect();

// Create a channel
$ch = new AMQPChannel($cnn);

if ($ch->isConnected()) {

        // Declare a new exchange
        $ex = new AMQPExchange($ch);
        $ex->setType(AMQP_EX_TYPE_FANOUT);
        $ex->setName('exchange1');
        $ex->declare();

        // Create a new queue
        $q = new AMQPQueue($ch);
        $q->setName('queue1');
        $q->declare();
        $q->bind('exchange1', 'routing.key');

        // Publish a message to the exchange with a routing key
        $ex->publish('message', 'routing.key');

        // Read from the queue
        $msg = $q->consume('testConsumer');
}

Al ejecutarlo en consola debemos obtener lo siguiente si todo va bien, o si algo falla se generará una excepción PHP que nos aclarará un poco por donde van los tiros.

jcaride@devdesktop:~$ php -f test.php
Message : message
jcaride@devdesktop:~$

Playa de Samil (I)

Playa de Samil (II)

Puesta de Sol desde Samil (I)

Puesta de Sol desde Samil (II)

Os presento las primeras fotografías de mi álbum Flickr “Vigo, Mi Ciudad”, dedicado con mucho cariño a mi ciudad natal. Poco a poco iré actualizandolo con las fotografías que vaya sacando de archivo. Que lo disfruteis.

Samuel Aranda, ganador del World Press Photo 2012, ha sido entrevistado por quesabesde.com. La entrevista se publica bajo un titular muy llamativo: “Yo no trabajo para ganar premios” que resume claramente la actitud que desde un principio Samuel ha mostrado tras conocerse ganador: lo importante no es el premio, sino mostrar al mundo lo que está pasando en Yemen.

La entrevista, que os recomendamos leer, nos muestra a un fotógrafo cercano y comprometido con La Primavera Árabe y nos descubre como es el día a día de un fotoperiodista en un ambiente que no es, ni de cerca, el óptimo para trabajar tranquilo.

 

Los compañeros de Foto DNG han publicado ya el número 66 de su revista. Como siempre esta revista viene cargada de muy buenas fotografías que no os debéis perder. De este número destacamos el reportaje “Circus Horror” de Jessica González (http://www.jessicagonzalez.es/) que nos presenta una visión un tanto tenebrosa del mundo del circo.

Número 66 revista Foto-DNG

  • Redacción (Página 2).
  • Indice (Página 3).
  • Novedades (Página 4).
  • Circus Horror (Página 28).
  • SONIA MÉNDEZ actriz y realizadora (Página 56).
  • Stéfano Pérez Tonella (Página 58).
  • Stefanie Wolff (Página 78).
  • Daniel Traverso (Página 88).
  • David y su peculiar forma de ver el mundo (Página 96).
  • Noticias Eventos (Página 102).
  • Libros del mes (Página 110).
  • Las Fotos del mes de Blipoint (Página 112).
  • Grupo Foto DNG en Flickr (Página 114).
  • Sexto Concurso Fotográfico Foto DNG (Página 122)

El fotógrafo de Santa Coloma de Gramanet, Samuel Aranda, se ha convertido en el ganador absoluto del World Press Photo 2012 con una instantánea muy emotiva que también ha sido galardonada con el primer premio en la categoría Personajes de Actualidad. La fotografía, realizada durante las revueltas de Yemen fue publicada en el New York Times y ha competido con

Desde 3megapixels.com queremos felicitar al fotógrafo español, que ha tenido que competir con 5.247 fotógrafos de 124 paises que han presentado más de 100.000 fotografías, lo que ha convertido a esta edición en la más concurrida de estos años.

Nuestra más sincera enhorabuena.

(c) Samuel Aranda. Todos los derechos pertenecen al autor.

Foto DNG número 65Ya está disponible el primer número del año de la revista digital de fotografía Foto DNG (número 65) y como siempre viene cargada de reportajes muy interesantes. Este mes nos ha gustado mucho el titulado “Seven beauty, seven deadly sins” de Gala Martínez (www.274km.com) y las fotografías de Tatiana Luna (www.tatianaluna.com)

  • Redacción (Página 2).
  • Indice (Página 3).
  • Novedades (Página 4).
  • Tatiana Luna (Página 28).
  • Caída del Cielo (Página 50).
  • Reportaje Publicitario – Vestidos de Novia (Página 68).
  • Ética Moral (Página 84).
  • Seven beauty seven deadly sins (Página 100).
  • Noticias Eventos (Página 116).
  • Las Fotos del mes de Blipoint (Página 120).
  • Grupo Foto DNG en Flickr (Página 122).
  • Sexto Concurso Fotográfico Foto DNG (Página 130).

Miniatura Foto DNG 63Ya está disponible el número 63 de la revista Foto DNG correspondiente al mes de Noviembre 2011
y como siempre viene cargada de buenos artículos y reportajes fotográficos. De este número os recomiendo el reportaje “Cementerio La Recoleta” y sobre todo “Etiopia Air”

  • Redacción (Página 2).
  • Indice (Página 3).
  • Novedades (Página 4).
  • Raquel Jaramago (Página 36).
  • Urban Girl (Página 58).
  • Cementerio La Recoleta (Página 71).
  • Etiopía Air (Página 96).
  • La rebeldía a las reglas de composición (Página 113).
  • Pincel corrector puntual de relleno según contenido (Página 118).
  • Noticias Eventos (Página 122).
  • Libros del mes (Página 160).
  • Las Fotos del mes de Blipoint (Página 164).
  • Grupo Foto DNG en Flickr (Página 166).
  • Sexto Concurso Fotográfico Foto DNG (Página 174).

 

Mis compañeros de planeo.com han elegido tres fotografías mías para la oferta de hoy de un viaje a París. Del “roller” de imágenes son mías la primera, cuarta y quinta. Como diría cierto personaje público… me llena de orgullo y satisfacción.

Aquí tenéis los pantallazos:

Y aquí los originales:

Muchas gracias al equipo de contenidos de planeo.com por haber publicado mis fotos, me ha hecho mucha ilusión.