24 de octubre de 2005

The beauty of fractals

Hace poco estaba viendo un episodio de la primera temporada de Murphy Brown (una de mis sitcoms favoritas), y esta vez el tema era acerca de un "físico" que estaba a punto de ser nominado para el premio Nóbel. Su especialidad eran los fractales...eso me trajo muchos recuerdos de hace algunos años, cuando hacía programas en Turbo Pascal para renderear el conjunto de Mandelbrot, con todo y manejo de mouse, zoom boxes y todo, voy a poner ese código en Internet al rato. Para el tour de Genesis en 1992 que fuimos a ver en Miami, los backgrounds eran precisamente "viajes" sobre el famoso Lago Mandelbrot.

Bueno, para recordar un poco, me fui a leer el capítulo sobre fractales en The new Turing Omnibus (que me regaló para mi cumpleaños un amigo). En general han habido muchas aplicaciones ahora para esto, especialmente en la parte de juegos de video y generación de landscape imagery.

1 de octubre de 2005

A rose is a rose is a rose...

En realidad este post podría tener el título "A Linux distro is a Linux distro is a Linux distro..." parafraseando el título de la famosa línea de poesía de Gertrude Stein por las recientes experiencias que he tenido de probar un mismo feature de Apache en dos distros distintas.

Bueno, para comenzar con un ejemplo, instalar Java en Red Hat Enterprise Linux AS es totalmente otra cosa que instalar Java en Debian (tema que escribí en un post anterior). En realidad estaba buscando cómo hacer para trasladar un sistema que se compró, y que lo había instalado en RHEL a una versión de Linux un poco más abierta (en este caso Debian).

Al final, la instalación de Java en las dos distros permitió que el programa escrito en Java funcionara de manera igual en ambos.

La aplicación a que hago referencia provee servicio a través del Web, sin embargo no corre de forma normal bajo el control de servidor Web (si fuera un CGI o un PHP), sino que pone su propio proceso a hacer listen en un puerto específico, de tal manera que para usarlo se requiere conectarse así: http://www.example.com:8000 (uso el dominio example.com tal como lo requiere la RFC 2606).

Bueno, al final quedó instalada y funcionando, pero para tener dos diferentes bases de datos, se tiene que poner a correr dos instancias, como por ejemplo así: http://www.example.com:8000 y http://www.example.com:8001.

El problema es que para un uso normal esto se hace un poco complicado, especialmente recordarse si el puerto 8000 es la base de datos de ventas y el 8001 es la de mercadeo, etc.

Me pidieron que encontrara algo, o por lo menos asignar un dominio distinto para cada base de datos...

La primera opción era poner http://ventas.ejemplo.com y http://mercadeo.ejemplo.com, lo que implicaba usar servidores virtuales en Apache, y estar jugando con el servidor de DNS...en realidad prefería hacerlo de otro modo.

Así que me acordé que existía un módulo de Apache para reescribir URLs llamado mod_rewrite. Me puse a leer la documentación, y en realidad es interesante, hace un buen uso de las expresiones regulares para recibir URLs y cambiarlas antes de servirlas, bastante útil, incluso hay gente que lo usa cuando abusan de sus imágenes haciendoles hotlinks directos, como en este ejemplo (not safe for work).

En fin, me puse a probarlo primero en el Debian, por lo que tuve que comenzar aprendiendo la organización del archivo de configuración (totalmente distinta a lo que yo acostumbraba normalmente en RH), aprender cómo se activaba el módulo mod_rewrite (leyendo el README incluido) y después de un poco de experimentación para determinar el lugar correcto dónde debía poner la regla de reescritura me funcionó. Esto me pareció excelente porque funcionaba como yo lo quería: en vez de poner http://www.example.com:8000 ya podía escribir http://www.example.com/ventas !!!

Es interesante notar que antes el servidor no se enteraba de las conexiones al sistema, ya que aceptaba directamente la transacción hacia el puerto. Con este cambio, Apache tomó control de la conexión inicial y entonces ya fue posible tener un log de accesos. Un plus para esta configuración.

Bueno, ya con esto pensé que sólo era de copiar al RHEL...yeah right. No sólo los archivos de configuración, sino los comandos para subir y bajar el httpd son diferentes. En realidad esto no es nada nuevo, pero cuando hay presión...allí si se da cuenta uno que realmente debería hacerse un mejor trabajo en compatibilizar ciertos servicios, ya que realmente no encontré ningún valor agregado a la diferencia de configuraciones entre Debian y RHEL AS.

Al final, y casi 30 minutos después, logré hacerlo funcionar igual en las dos distros...qué pérdida de tiempo, más el estrés de la gente que necesitaba que eso funcionara.