8 de mayo de 2006

Tinúviel


Se dice en la Balada de Leithian que Beren llegó tambaleándose a Doriath, con cabeza cana y como agobiado por muchos años de pesadumbre, tanto había sido el tormento del camino. Pero errando en el verano por los bosques de Neldoreth, se encontró con Lúthien, hija de Thingol y Melian, a la hora del atarceder, al elevarse la Luna, mientras ella bailaba sobre las hierbas inmarcesibles del claro umbroso junto al Esgalduin.

Entonces todo recuerdo de su pasado dolor lo abandonó, y cayó en un encantamiento; porque Lúthien era la más hermosa de todos los Hijos de Ilúvatar. Llevaba un vestido azul como el cielo sin nubes, pero sus ojos eran grises como la noche iluminada de estrellas; estaba el manto bordado con flores de oro, pero sus cabellos eran oscuros como las sombras del crepúsculo. Como la luz sobre las hojas de los árboles, como la voz de las aguas claras, como las estrellas sobre la niebla del mundo, así eran la gloria y la belleza de Lúthien; y tenía en la cara una luz resplandeciente.

Pero ella desapareció de súbito; y él se quedó sin voz, como presa de un hechizo, y durante mucho tiempo erró por los bosques, impetuoso y precavido como una bestia, buscándola. La llamó en su corazón Tinúviel, que significa Ruiseñor, hija del crepúsculo en la lengua de los Elfos Grises, pues no conocía otro nombre para ella. Y la vio a lo lejos como las hojas en los vientos de otoño, y en invierno como una estrella sobre una colina, pero una cadena le aprisionaba los miembros.

En la víspera de la primavera, poco antes del alba, Lúthien bailó en una colina verde; y de pronto se puso a cantar. Era un canto vehemente que traspasaba el corazón como el canto de la alondra que se alza desde los portones de la noche y se vierte entre las estrellas agonizantes, cuando el sol asoma tras las murallas del mundo; y el canto de Lúthien aflojó las ataduras del invierno, y las aguas congeladas hablaron, y las flores brotaron desde la tierra fría por la que ella había pasado.

En ese momento el hechizo de silencio cesó de repente, y Beren la llamó, gritando Tinúviel; y los bosques devolvieron el eco del nombre. Entonces ella se detuvo maravillada y no huyó más, y Beren se le aproximó. Pero cuando Tinúviel lo miró, la mano del destino cayó sobre ella, y lo amó; no obstante, se deslizó de entre los brazos de Beren y desapareció en el momento en que rompía el día. Entonces Beren cayó desmayado en tierra como quien ha sido herido a la vez por el dolor y la felicidad, y se hundió en el sueño como en un abismo de sombra; y al despertar estaba frío como la piedra, y sentía el corazón árido y desamparado. Y con la mente errante andaba a tientas como quien ha sido atacado de súbita ceguera y trata de atrapar con las manos la luz desvanecida. Y así empezó a pagar el precio de la angustia, por el destino que le había sido impuesto; y en este destino estaba atrapada Lúthien, y siendo inmortal compartió la mortalidad de Beren, y siendo libre se ató con las cadenas de Beren; y ninguna Eldalië había conocido una angustia mayor.

Sin que Beren lo esperara, ella regresó al sitio donde el estaba sentado en la oscuridad, y hace ya mucho en el Reino Escondido puso su mano en la de él.

Redundancia Cero

El título de este post es, básicamente, el objetivo de todo buen programador de base de datos que se precie de serlo. Y hoy, concretamente, me ha venido a la mente una ligera reflexión al respecto de esa existencia de redundancia, de su inutilidad y utilidad, pero sobre todo de la a veces necesidad de que esta esté presente.

Por partes. Como el asunto redundancia cero (palabras que se van a repetir mucho en las próximas lineas) es un término bastante técnico, haré una breve explicación. Informáticamente hablando, una base de datos es un conjunto de tablas relacionadas entre sí por una o varias claves vinculantes. Cada una de estas tablas, a su vez, contiene campos de información organizados en registros individuales. De esta manera, cualquier tipo de información bien estructurada queda perfectamente organizada y, lo que es más importante, carece absolutamente de redundancia: la redundancia cero, el sueño de cualquier programador de base de datos. Por ejemplo, podemos tener una tabla de Trabajadores con una serie de datos: Identificador de trabajador, Nombre, Apellidos, Dirección, Teléfono, DNI, etc. A su vez, tenemos otra tabla de, por poner otro ejemplo, Incidencias de trabajador con otros datos: Fecha y hora, Identificador de informe de incidencia, Identificador de trabajador e Identificador de Incidencia. Con un simple número, un identificador de trabajador, ya hemos vinculado a una incidencia (porque un trabajador puede tener varias) a un informe de incidencias. A su vez, como acabo de decir, hay un identificador de incidencia, que nos vincula a una aparentemente existente Tabla de listado de incidencias. Se aplica lo mismo que acabo de decir con el identificador de cliente. Así, con estos identificadores relacionados entre sí entre n tablas, conseguimos en mayor o menor medida esa redundancia cero.

¿Parece complicado?. Pues imaginad, por un instante, que una base de datos se compone de digamos más de 100 tablas interrelacionadas entre sí por múltiples factores como el que acabo de exponer (que dicho sea, es la base de las bases de datos relacionales, su forma más sencilla). Está claro que en una tesitura de esas características, obtener la redundancia cero es una quimera, un imposible, algo que no se puede conseguir. Y si se puede, desde luego supone un auténtico prodigio de destreza mental, organizativa. Como diría Doc de Regreso al futuro, Hay que pensar en cuatro dimensiones.

Pongámoslo aún más difícil: digamos que las tablas principales de esta base de datos contiene, literalmente, millones y millones de registros. Digamos que te piden hacer estadísticas complicadísimas en base a esos millones de registros. Señores, es en este punto cuando la redundancia cero llega a su fin absoluto: por mucho que hayas trabajado en diseñar la base de datos perfecta en lo referente a redundancia de datos, te vas a ver obligado a crear una segunda base de datos con nuevas tablas y registros que, evidentemente, reunirán una serie de datos simplificados y optimizados, ya calculados, basados en la base de datos original. Un ejemplo claro: si tienes datos concretos de ciertos aspectos de un día, y en un solo día tienes casi 30.000 registros, eso hace que al mes tengas aproximadamente 900.000 registros. En un año, esto serían 10.800.000. En 4 años, esto serían 43.200.000. Y entonces resulta que necesitas datos resumidos de un mes concreto, comparándolo con los mismos datos del mes anterior y posterior. La cantidad de búsqueda y cálculos a realizar es realmente abrumador. Y si luego resulta que necesitas lo mismo para un año concreto en base a los datos mensuales, subimos aún más de nivel. ¡La cosa se complica!. Conclusión: hazte un resumen de los datos mensuales y guárdalos en otra parte, para que cuando te pidan los datos del año ya tengas todo calculado. Si bajamos al nivel más bajo, el coste de tiempo y rendimiento es extremo. Si lo tienes ya guardado en otra parte, el cálculo es inmediato. La cosa está clara, ¿no?. No, no lo está. Hemos sacrificado la redundancia cero en favor de una simplificación de la situación.

Oh, pero lo siento. Me temo que me he metido en una parafernalia extremadamente compleja y mareante. ¿Hbéis llegado hasta aquí leyendo?. ¡Enhorabuena!. Estoy seguro de que podéis aguantar un poco más.

Lo que he querido decir, en cristiano, es que la redundancia es en muchas ocasiones NECESARIA. No queda más remedio. Si nos limitamos al ámbito de la informática, todo se resume en que hay que ser lo menos redundante posible. Pero cualquier informático que se precie de serlo sabe que la redundancia cero solo existe en procesos simples. Y ahora vamos a ir más allá y vamos a aplicar esto mismo a la vida real, a lo visceral, a las emociones, al día a día de uno. ¿Existe mucha diferencia entre el ámbito informático y cualquier otro?. La experiencia me ha demostrado que no.

La informática es organizada, cuadrada, limitada, fría, indiferente, precisa. En ese aspecto no hay discusión posible: no se puede comparar (¿o sí?) con la vida real, y asimismo la programación es una colección de algoritmos matemáticos y lógicos estructurados. Os sorprendería saber cuánto se parece la lógica filosófica con la informática. Apenas se distinguen, son hermanas gemelas. Por eso tengo el atrevimiento de decir que estamos hablando, en general, siempre de lo mismo. Los ámbitos no existen, sólo cambia la naturaleza de los mismos.

Pero ya vuelvo a enredarme en tecnicismos y lo siento mucho, al fin y al cabo soy un animal de oficina encerrado en esos mismos algoritmos y no lo puedo evitar. Voy a llegar, ahora mismo, a una conclusión y, por tanto, establecer mi reflexión.

No existe la redundancia cero en la vida salvo en asuntos excesivamente simplistas. No hay verdades absolutas. Simplemente no existen. Y a veces, solo a veces, me da la impresión de que las personas nos negamos a nosotros mismos la creaciónn de una segunda base de datos en nuestra mente para simplificar los problemas y obtener conclusiones de esta, y en vez de eso tiramos de la raíz de dichos problemas, es decir, de la primera base de datos. Si somos capaces de asumir que la redundancia presente en nuestras vidas es algo necesario, podremos obtener soluciones mucho más rápidamente a todo, sea de mayor o de menor relevancia. ¿Podemos llegar a comprender la importancia de la presencia redudante?.

El exceso de redundancia es realmente malo. Hace que todas las cosas engorden innecesariamente. La carencia absoluta de la misma implica complicación excesiva e igualmente innecesaria. Conclusión: las personas nos encontramos en una lucha constante para optimizar nuestras ideas sin caer en la redundancia fácil. Pero muchas, muchísimas veces no queremos ver que la redundancia cero es IMPOSIBLE. Asumamos eso y nuestra vida será mucho más sencilla.

Un abrazo.