Mostrando entradas con la etiqueta Java. Mostrar todas las entradas
Mostrando entradas con la etiqueta Java. Mostrar todas las entradas

martes, 13 de marzo de 2007

De la implementación del Universo en Java y los Monty Python

Cerúlea se me ha quedado la cara leyendo el comentario al post de ayer de mi buen amigo Malasombra. Y es que este ladino personaje sabe dar donde duele: primeramente, en la entrepierna, y, a continuación, en el orgullo. El mero hecho de hablar de algo y no mentar a los Monty Python ya debiera hacerme arrastrar por el barro avergonzándome de dejar en el olvido sus aportaciones al siempre infravalorado mundo de la programación spaghetti.

Siguiendo al hilo de las sanas costumbres programáticas según las cuales se puede uno hacer imprescindible para cualquier modificación de lo ya codificado e instalado en cliente, siempre se pueden aprender emocionantes y novedosas técnicas. Me van a tener que permitir citar el ejemplo original en la lengua de Shakespeare:

Use constant names like LancelotsFavouriteColour instead of blue and assign it hex value of $0204FB. The color looks identical to pure blue on the screen, and a maintenance programmer would have to work out 0204FB (or use some graphic tool) to know what it looks like. Only someone intimately familiar with Monty Python and the Holy Grail would know that Lancelot's favorite color was blue. If a maintenance programmer can't quote entire Monty Python movies from memory, he or she has no business being a programmer.
¡Qué belleza!, ¡qué elegancia!, ¡qué sofisticación!, ¡qué maravilloso compendio de mala leche y profundo conocimiento de los más intrincados mecanismos de codificación de una simple variable!.

Sin embargo, quien piense que este nivel de malsana inquina es difícilmente superable, no ha visto el siguiente ejemplo:
for(j=0; j < myArray.length; j+=8)
{
total += myArray[j+0];
total += myArray[j+1];
total += myArray[j+2]; /* Main body of
total += myArray[j+3]; * loop is unrolled
total += myArray[j+4]; * for greater speed.
total += myArray[j+5]; */
total += myArray[j+6];
total += myArray[j+7];
}
Bello, ¿no es cierto? Para el lector bienintencionado o el ojo poco entrenado no es más que la suma de todos los valores contenidos en un cierto array, pero, bajo la perversa mano del programador extremo, esto es lo que en realidad está codificado:
for(j=0; j < myArray.length; j+=8)
{
total += myArray[j+0];
total += myArray[j+1];
total += myArray[j+2]; /* Main body of
total += myArray[j+3]; * loop is unrolled
total += myArray[j+4]; * for greater speed.
total += myArray[j+5]; */

total += myArray[j+6];
total += myArray[j+7];
}
¡Cuánta pérfida perfección contenida en tan pocas líneas! ¡Bjarne Stroustrup se revolvería en su tumba de no ser porque el hijo de puta aún sigue vivo!

Ahora, si alguien espera que retome el tema que me había traído aquí, que no era otro que el de codificar el universo en Java según el punto de vista Pythoniano, va de culo.

No obstante, y por pegarme la machada de cara a la galería, ahí dejo lo siguiente:
public interface HijoDeDios extends Dios {...}

public abstract class Hombre implements HijoDeDios,
Serializable {
...
public static boolean isPringao() {
return true;
}
...
}

public abstract class Mujer implements HijoDeDios,
Serializable {
...
public Mujer (Costilla costilla);

public static boolean isGolfa() {
return true;
}

public final void tenerConversacion()
throws UndefinedException {
throw
new UndefinedException("Método no implementado");
}
...
}

public class Pringao extends Hombre {...}

public class Golfa extends Mujer {...}

Hombre adan = new Pringao();
Mujer eva = new Golfa(adan.getCostilla();

Y para satisfacer personalmente a nuestro querido Pedro, usamos el Factory para la creación del sentido de la vida:
SentidoDeLaVida sdv = new SentidoDeLaVidaFactory()
.getSentidoDeLaVida("Monty Python",
hijoDeDios.getDatosUsuario());
universo.put("sentidoDeLaVida", sdv);

Queridos niños: como hemos visto en la llamada al constructor, la implementación del sentido de la vida depende de cada hijo de Dios. Buscad el vuestro y, cuando lo encontréis, haced el favor de no venir a tocar los cojones a los desgraciados de siempre.

PD: Para más información acerca de los antipatrones de diseño, no me preguntéis a mí. ;)

lunes, 12 de marzo de 2007

Del Universo en expansión y los problemas de memoria

Dicen que cuando la gente se hace mayor tiende a acercarse más a Dios. En cierta ocasión me dijo un amigo "Todo los cabrones, en el lecho de muerte, se acojonan y dicen ¡Creo en Dios! ¡Creo en Dios!, pero esos hijos de puta van a ir al infierno". Yo, que intento ser persona de bien, también tengo mis más y mis menos, y, como cualquiera, en no pocas ocasiones me planteo por qué poblamos este punto azul pálido en la inmensidad del firmamento; por qué hemos venido a la vida; por qué, en definitiva, estamos aquí comiendo mierda.

Si unimos mi desarrollo laboral actual, mis inquietudes y mi creencia personal en la existencia de un ser superior (al fin y al cabo, si toda la materia y energía conocida proviene del Big Bang, ¿de dónde provienen las partículas o energía necesaria para el nacimiento del Universo? A mí no se me ocurre nada, y a los científicos parece que tampoco, así que lo damos por bueno), puedo afirmar sin ningún temor a equivocarme que el Universo está hecho en Java.

Atendiendo al libro que ha marcado los devenires de la sociedad occidental, en la cual me encuentro, vemos en su comienzo:

En el principio creó Dios los cielos y la tierra.
que vendría a ser, clarísimamente:
public class Universo implements Runnable 
extends Hashtable {
...
};

Universo universo = new Universo();
universo.start();
universo.put("cielo", new Cielo());
universo.put("tierra", new Tierra());

Seguimos con:
Y la tierra estaba desordenada y vacía, y las tinieblas estaban sobre la faz del abismo, y el Espíritu de Dios se movía sobre la faz de las aguas. Y dijo Dios: Sea la luz; y fue la luz.

Que sería:
Tierra tierra = universo.get("tierra");
tierra.setOrdenada(false);
tierra.setVacia(true);
tierra.setAguas(new Aguas());
tierra.getAguas().add(new EspirituDeDios());
tierra.setLuz(true);

Más o menos sigue la cosa así hasta que vemos:
Dijo Dios: Produzcan las aguas seres vivientes, y aves que vuelen sobre la tierra, en la abierta expansión de los cielos. Y creó Dios los grandes monstruos marinos, y todo ser viviente que se mueve, que las aguas produjeron según su género, y toda ave alada según su especie. Y vio Dios que era bueno. Y Dios los bendijo, diciendo: Fructificad y multiplicaos, y llenad las aguas en los mares, y multiplíquense las aves en la tierra. Luego dijo Dios: Produzca la tierra seres vivientes según su género, bestias y serpientes y animales de la tierra según su especie. Y fue así.

O lo que es lo mismo:
tierra.add(new Bichos());

Pero viene aquí la parte que nos atañe más directamente:
Entonces dijo Dios: Hagamos al hombre a nuestra imagen, conforme a nuestra semejanza; y señoree en los peces del mar, en las aves de los cielos, en las bestias, en toda la tierra, y en todo animal que se arrastra sobre la tierra. Y creó Dios al hombre a su imagen, a imagen de Dios lo creó; varón y hembra los creó.

¡Oh! ¡Por fin estamos aquí!
public class Hombre extends Dios implements Serializable {
...
public static boolean isPringao() {
return true;
}
...
}

Y el opuesto femenino:
public class Mujer extends Dios implements Serializable {
...
public static boolean isGolfa() {
return true;
}
...
}

La Naturaleza, sabia ella, no es la encargada de dar la vida, sino de quitarla. La gran suerte que tenemos de vivir se compensa sabiendo que algún día la Naturaleza vendrá a reclamar lo que no es nuestro para poder dárselo a otro. Ya decía Cervantes que "la Naturaleza es el mayordomo de Dios en la tierra". Y como Cervantes erraba en muy pocas ocasiones, podemos afirmar sin temor alguno que la Naturaleza es el Garbage Collector.

Sin embargo, no todo es de color de rosa. Estudios astronómicos han confirmado que el Universo está en constante expansión. Dicha expansión, sin ninguna duda, está provocada por el voraz algoritmo de consumo de recursos que tiene la propia implementación del Universo.

¿Cuándo llegará la máquina virtual a llenar toda la memoria? El tan temido final del sistema en el que vivimos acabará con nosotros tan rápidamente que cuando queramos darnos cuenta no vamos a tener posibilidad de lanzar ninguna excepción para remediarlo.

Queridos niños: atesorad cada momento de vuestra vida como si fuera el último, y no busquéis un pendrive donde guardar aquello que no distrutáis porque, en efecto, en cualquier instante nuestro servidor dirá:
Exception in thread "main" java.lang.OutOfMemoryError
Y entonces será demasiado tarde.