Consultas MySQL con muchos JOINs

A veces uso MySQL por elección. No por mi elección, sino por la de los clientes. 🙂

Una de las cosas que más me ha roto la cabeza es optimizar queries con muchos JOINs. Recientemente, un informe requería una consulta con 25 JOINs, y al tratar de ejecutarla nuestro servidor prácticamente lloraba que por favor parásemos. Sin embargo, me he topado (al decir verdad, fue mi jefe) con una variable de configuración muy interesante a la hora de encarar este problema.

Continuar leyendo «Consultas MySQL con muchos JOINs»

Emuladores 101

La emulación es una técnica muy usada en informática para poder dar soporte a software antiguo. Básicamente consiste en hacer que un sistema informático sea capaz de imitar a otro, normalmente con el fin de hacerlo compatible con el software de éste. Esta técnica puede implementarse tanto por software como por hardware, y de hecho puede usarse para imitar el comportamiento de ambos. Trataré en este artículo de dar una visión de los fundamentos de este fenómeno.

El ejemplo práctico más común de emulador sería un programa que se ejecuta en nuestro ordenador que permite utilizar software de un sistema antiguo. Tómese como ejemplo un emulador de Master System para ordenadores con Windows. Consistiría, pues, en un programa que se ejecutaría en nuestra máquina, ejecutaría un programa diseñado para esta consola, volcado en un fichero en nuestro PC. Mediante un mapeo de controles (por ejemplo, asignar los cursores de nuestro teclado al control direccional del mando de la consola) controlaríamos el funcionamiento de la misma. Es decir, podemos jugar al Alex Kidd in Miracle World (1986) en Windows.

Alex Kidd en Wakalabis
Alex Kidd en Wakalabis, un emulador conocido por su creador.

Continuar leyendo «Emuladores 101»

Webcrawler java Hoverkraft

He estado trasteando una forma de simular un navegador en Java. Hasta ahora he usado JMeter, que es tremendamente potente, configurable y para pruebas de carga es imprescindible. No obstante hay dos detalles que no me convencen: a veces uno quiere algo programático en lugar de declarativo, y segundo el JMeter es durillo de entender y configurar. Además, no siempre es necesario tener métricas exóticas o peticiones de Ajax, a veces sólo queremos acceder a algún servicio web o analizar una web para bajar ficheros o automatizar tareas.

Aunque hay un montón de soluciones disponibles, me he propuesto hacer un pequeño simulador de navegador (un webcrawler) en Java, que permita fácilmente y de forma sencilla implementar tareas. Le he puesto a la criatura Hoverkraft. Dejo por aquí el código fuente.

Continuar leyendo «Webcrawler java Hoverkraft»

Converter JSF para SelectOneMenu

La principal característica de JSF (o, al menos, la que más me gusta) es la facilidad para enlazar atributos del bean controlador desde la vista xhtml. No obstante existe una limitación importante: en el estándar HTTP las claves y valores siempre serán cadenas porque así es como se transmiten. Sí, se puede serializar el objeto en base64, pero en casi cualquier circunstancia se debe huir de una salvajada así.

¿Cómo hacer, pues, que el valor de un control se enlace directamente con un objeto? Pues JSF provee para ello los converters. Bueno, permite que tú los programes, claro. Tampoco PrimeFaces, que es mi librería de componentes de eleción, incluye estos conversores. Así pues, he programado uno pequeño para los SelectOneMenu, los menús desplegables asemejables a comboboxes. Lo dejo aquí para referencia mía y por si puede servirle de algo a alguien.

Continuar leyendo «Converter JSF para SelectOneMenu»

De LAMP a LEMP

Como fundador de la difunta Frikipedia, una de mis primeras labores fue el montar un servidor web. En 2005 la elección por antonomasia era, por supuesto, el stack LAMP en Debian. Por aquel entonces no existía verdadera competencia en el segmento de webs personales, y sigue siendo hoy día el recomendado para MediaWiki.

Para los rezagados, LAMP significa Linux+Apache+MySQL+PHP, y es uno de los stacks más utilizados a la hora de construir páginas web personales. Linux (estrictamente distribuciones de GNU/Linux) provee el sistema de explotación de la máquina, Apache el servidor HTTP, MySQL la base de datos y PHP el lenguaje de programación. Continuar leyendo «De LAMP a LEMP»