Saturday, June 16, 2007

Foro de Mundo Computín

Mundo ComputinYa está abierto el foro oficial de Mundo Computín:

Sunday, May 20, 2007

99 Bottles of Beer, más que un Hello World

"99 Bottles of Beer" es una canción popular en inglés, que consiste en cantar iterativamente:

"99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall."


Esto hasta llegar a 0 y finalizar con:

"No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall."


La página http://99-bottles-of-beer.net/, contiene una colección de más de 1090 variaciones de un programa que imprime esta canción en pantalla, en cientos de cientos de lenguajes diferentes.
Por más trivial que suene, lo interesante está en ver cómo cada participante propone su programa haciendo uso de las características más poderosas (y/o oscuras) del lenguaje.
Algunas propuestas utilizan lenguajes diseñados para ser inentendibles (con malbolge), lenguajes esotéricos (wiki de lenguajes esotéricos), otras implementan en ASCII-art (ejemplo en common lisp) como principal atractivo, y otras simplemente utilizan herramientas desconocidas del lenguaje.

Para el que quiere comenzar a travesiar un nuevo lenguaje, le sugiero que busque en ese página el programa correspondiente, en vez de utilizar un simple y anticuado Hello World...

The History Of Hacking Documentary

Documental de Discovery Channel sobre la historia del Hacking.

Patrón Singleton + Controller

Problema:
necesitamos que la aplicación tenga una clase que controle todos los procedimientos y que la interfaz pueda comunicarse con ella para que el usuario pueda ejecutar estos procedimientos.

Solución:
Crear una clase controladora (Main.java en este ejemplo) "singleton" accesible desde la capa de la interfaz.

Ejemplo:
Clase controladora:

public class Main {

// instancia del objeto singleton
private static Main instance;

...

// devuelve la instancia singleton del objeto
public static synchronized Main getInstance() {
if ( instance == null ) {
// critical section if multithreaded application
instance = new Main();
}
return instance;
}

// metodo del controlador para un procedimiento
public Object[] A(Object[] datosInterfaz) {
...
}

...

}

Llamada del método del controlador desde la interfaz:

Main.getInstance().A(datos);

Nótese que el método getInstance es estático y público, por lo tanto se puede llamar desde una clase de la interfaz de esta manera. getInstance devuelve la instancia singleton del objeto Main (controlador de procesos), y con esta instancia única se ejecuta el método A que corresponde a algún procedimiento de la aplicación (ej: registro de usuarios, tirar los dados, guardar informacion, etc...)

Tips de programación

Aqui se planea ofrecer algunos tips o trucos interesantes para los programadores. Por favor hagan sus comentarios.