Archive for November, 2006

Monkey Island 2: LeChuck’s Revenge :: Parte 1

Wednesday, November 29th, 2006

Por que Java no me gustaba

Wednesday, November 29th, 2006

… aun sin haberlo usado, y por que ahora lo miro con otros ojos

Hace mucho, mucho tiempo en una galaxia muy, muy lejana existia un lenguaje llamado Visual Basic. Con ese lenguaje por el año 1997 (cuando yo tenia 12 años) aprendi que era la programación. En esa misma época, cientos de miles de programadores en todo el mundo usaban VB para ganarse el pan de cada día desarrollando aplicaciones de, entre otras cosas, bases de datos.

¿Quien no vió una? Hace unos cuantos años en el hospital donde trabaja mi padre instalaron un sistema de gestion y manejo de pacientes, y a simple vista uno se daba cuenta el lenguaje en el que lo hicieron: Visual Basic. De la misma forma, habia millones de lineas de codigo en ese momento que ya habían sido escritas, estaban siendo escritas, y serían escritas.

Varios años mas tarde, ya era bastante sabido que ocurriria lo impensable, y el 31 de marzo de 2005 Microsoft puso punto final: corta el soporte para dicho lenguaje. 265 MVPs de Microsoft firmaron un petitorio para que esto no sea asi. Microsoft los ignoró; no le convenia economicamente, tenia que promover su nueva y brillante VM.

¿Tenes algun problema con el compilador que tanto dinero te costó comprar? Si, bueno, pagame un poco más y capaz te ayudo. ¿Queres Visual Basic? Usá .Net. Ahh.. si, hay un problema: lo único en que se parecen VB 6.0 y VB.Net es en el nombre; son lenguajes completamente diferentes.

Miles de millones de lineas de codigo tiradas por las cloacas.

Mi miedo con Java era que la historia se vuelva a repetir: si algun dia a Sun no le convenia económicamente continuar el desarrollo de Java, lo iban a hacer sin que uno desde su posicion de insignificante programador pueda hacer algo.

Es por eso tambien que soy muy rehacio a .Net. Si bien .Net tiene su propio estandar ECMA y un par de VMs alternativas, le falta un gran pedazo que Microsoft ni en un millon de años va a estandarizar: las clases de la interfaz grafica. La unica forma de respetar el estandar oficial publico ECMA de .Net es hacer programitas de consola. Es por eso que las otras VMs de .NET no son de fiar: todo lo que no aparece en el estandar lo hicieron a ojímetro con el masomenómetro para que aparentemente funcione.

No soy ningun fanático de Sun, pero haber liberado Java bajo GNU/GPL fue un gran paso para toda la indistria de la informática. Hoy en dia si uno tiene un programa en Visual Basic que no funciona, tiene que pagarle una suma importante a Microsoft para que lo ayude. Digo “importante” porque recordemos que el compilador de VB hay que comprarlo, y se supone que el soporte viene gratis (ya no es mas asi). Un programador Java, en cambio, puede elegir cambiar de VM (hoy en dia GCJ es una MUY buena alternativa, segun dicen) o leerse un par de cientos de miles de lineas de codigo.

Random

Wednesday, November 29th, 2006

Microsoft

Arno escribió: (ingles)

Algunos diran que a veces voy muy lejos en mi busqueda por la simplificación. Frecuentemente digo que la tarea del diseñador de software es tomar decisiones en bien del usuario. De eso se trata el diseño.

Moishe Lettvin escribió: (version original en Ingles)

Trabajé en Microsoft unos 7 años en total, desde 1994 hasta 1998 y desde 2002 a 2006.

El año más frustrante de los siete fue el que pasé trabajando en Windows Vista, que por aquellas épocas se llamaba Longhorn. Pasé un año completo trabajando en una función que debería haber sido diseñada, implementada y verificada en una semana.

Java

Joel escribió:

Programmers under the age of thirty probably don’t realize why Aged Senile Programmers like me are so slow to adopt exciting new programming languages the day they come out, and why we roll our eyes at hip bandwagon ideas that sell books and consulting engagements (forgive me if I don’t seem excited enough about your new book, “Extreme UML Refactoring Patterns”).

No, esta no es la sorpresa de Java ;)

Sobre ser informatico

Wednesday, November 29th, 2006

Diego escribió:

Hoy cuando fui a la facultad encontré un cartel que hablaba sobre la falta de informáticos. Decía que la inscripción en la facultad había bajado. Una de las principales razones de esto, según la nota, es que los estudiantes secundarios, ven a la carrera como cosa de nerds, y que no veían un futuro profesional usando la computadora.

Manifiesto del mal blogger

Tuesday, November 28th, 2006

Manifiesto del mal blogger

¡Bloggers del mundo, únanse a este manifesto!

¿Están hartos de que les recuerden lo mal que llevamos nuestro blog?
¿Están hartos de los viejos consejos de siempre? (escribe regularmente, ten una temática definida, haz entradas concisas, etc…)

Porque teniendo en cuenta que:
I. Nunca vamos a conseguir miles y miles de visitas ni, muchísimo menos, ganar dinero con nuestro blog, ni conseguir el Pulitzer…
II. No creemos que la calidad de un blog venga marcada por su número de visitas ni por la cantidad de páginas que lo enlacen.
III. Sabemos y aceptamos que el 80% de nuestras visitas procederán de nuestros colegas, y estamos felices con ello. (O como mínimo, nos conformamos)
Y, sobretodo:
IV. No escribimos para satisfacer al lector, sino para satisfacer nuestras ansias de escribir y comunicar. Si sólo a diez personas les gusta nuestro blog, estaremos tan felices como si les gusta a mil.

Manifestamos que:
V. El miedo a que un post no guste provoca una retorcida forma de autocensura. Una autocensura que coarta nuestra libertad artística y comunicativa. Nosotros no somos medios de comunicación forzados a vigilar nuestra popularidad. Tenemos el privilegio de no tener miedo al mercado ni a las críticas… ni al olvido. ¡No lo tengamos!
VI. Es posible que seamos felices si uno de nuestros post se hace popular y se difunde por la blogosfera. Pero nos comprometemos a no buscarlo, ni escribiendo lo que consideráremos más popular, ni de ninguna otra forma.
VII. Somos personas complejas, no maquinas especializadas. Por ello, escribiremos aquello que nos parezca interesante compartir, sin importar su temática ni su idoneidad.
Y, en resumidas cuentas:
VIII. Este es mi blog.
IX. Yo me pago y me doy el vuelto.
X. Si a alguien no le gusta, que no lo lea.

¡Si eres un blogger auténtico haz de este manifiesto algo tuyo!
a. Si no te gusta parte del texto o te apetece añadir algo, cámbialo sin complejos.
b. No cites de donde has sacado este manifiesto.
c. No digas quien ha escrito este manifiesto.
d. Ni se te ocurra poner un link a este post que estás leyendo, a no ser que sea para criticarlo o para anunciarlo sin hacerlo tuyo.
e. Es posible que estés leyendo este manifiesto en un blog y no sepas si lo ha escrito el dueño o no del blog. ¿Acaso importa?

Porque todo blogger tiene derecho a ser mal blogger, y estar orgulloso de ello.

Reelija a la Gobernadora Marley

Tuesday, November 28th, 2006

Re-elija a la gobernadora Marley, cuando sólo hay un candidato, sólo hay una elección.

Re-elija a la gobernadora Marley, cuando sólo hay un candidato, sólo hay una elección.

Java es Open Source

Saturday, November 25th, 2006

Si, capaz es una noticia algo “vieja” pero Sun comenzo las tratativas para liberar TODO el codigo fuente de Java bajo licencia GNU/GPL. Y recien entre a la web y me di cuenta de un pequeño detalle:

Dr. Marcelo Knörich Zuffo
Professor, Laboratory of Integrated Systems, Univeristy of Sao Paulo, Brazil

No se quien es ese hombre, pero segun parece es de Brasil. ¿ Tan inutiles somos en este pais que nadie de la UBA o de la UNLP o de alguna otra universidad haga un comentario oficial sobre el tema ? Mi granito de arena es el siguiente: dentro de unos dias voy a publicar una sorpresa sobre Java.

Saludos!

Curso rapido de Buscaminas

Friday, November 24th, 2006

Como instalar Sun Java en Debian “Etch” Testing

Wednesday, November 22nd, 2006

Actualización 16 de Junio, 2007:

Esto lo escribí cuando Debian Etch estaba en etapa de “testing” (prueba) . Hoy en día Etch es la nueva verison estable de Debian; los pasos siguen siendo los mismos, excepto que no hace falta agregar el repositorio testing, y solo deberán tener algún repositorio non-free:

deb http://mirrors.kernel.org/debian/ stable main contrib non-free

Antes que nada, en el archivo /etc/apt/sources.list deben tener un mirror del repositorio non-free de Debian Testing. Por ejemplo:

deb http://mirrors.kernel.org/debian/ testing main contrib non-free

Luego, instalar el paquete sun-java5-jdk de la siguiente manera:

apt-get update
apt-get install sun-java5-jdk

Despues, establecer la alternativa por defecto de la VM de java:

/usr/sbin/update-alternatives --config java

Elegir la opcion que dice: /usr/lib/jvm/java-1.5.0-sun/jre/bin/java. Hacer lo mismo con javac:

/usr/sbin/update-alternatives --config javac

Elegir la opcion que dice: /usr/lib/jvm/java-1.5.0-sun/bin/javac. Si todo salio bien, deberian poder ver algo asi:

# java -version
java version “1.5.0_08″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode, sharing)

Listo!

Double Dispatching

Friday, November 17th, 2006

Double Dispatching es una forma "elegante" de romper el polimorfismo.

La idea basica de objetos es que si vos haces una jerarquia de clases, no te preocupes exactamente por cual subclase del objeto que estas usando. Por ejemplo, supongamos que estamos haciendo el diseño de clases de un Juego en donde hay varios jugadores y varios enemigos. Los jugadores son los Moviles controlador por personas, y los Enemigos son los que controla la computadora. Ademas en el juego puede haber varias instancias de cada clase. Varios enemigos luchando contra varios jugadores. Si tenes dos clases llamadas Jugador y Enemigo que ambas cuelgan de "Movil", puedas hacer algo asi:

PHP:
  1. $posicion = $this->darPosicionAtaque();
  2. $unMovil = $mapa->darMovilEn( $posicion );
  3.  
  4. // Aca esta el dilema ...
  5. $unMovil->atacar( $this );

Yo ataco a un Movil. El que llama a "atacar" no le interesa saber "$movil" de que clase es. El tema es que, a veces, necesitas saberlo para poder calcular las ecuaciones de golpe entre cada uno, o si dos jugadores se atacan entre si poder realizar las penalizaciones en caso de tener friendly-fire. Una opcion es preguntar por la clase del objeto, pero eso rompe con todo lo que la POO intenta hacer de diferente con los lenguajes procedurales / estructurados.

En cambio, la idea del D.D. es aprovechar que las clases saben realmente quien son. Si tenes una clase Enemigo, entonces toda funcion de esa clase sabe que realemnte uno mismo es un Enemigo. Entonces haces algo asi:

PHP:
  1. class Movil {
  2.  
  3.  // aca no va ningun codigo interesante ...
  4.  
  5.  // Yo ataco al argumento
  6.  public function atacar( $atacado );
  7.  
  8.  // El argumento me ataca
  9.  public function atacadoPorJugador( $atacante );
  10.  public function atacadoPorEnemigo( $atacante );
  11. }
  12.  
  13. class Jugador {
  14.  public atacar( $atacado ) {
  15.   $atacado->atacadoPorJugador( $this );
  16.  }
  17.  public function atacadoPorJugador( $atacante ) {
  18.   echo "Soy un Jugador y me ataca un Jugador";
  19.  }
  20.  public function atacadoPorEnemigo( $atacante ) {
  21.   echo "Soy un Jugador y me ataca un Enemigo";
  22.  }
  23. }
  24.  
  25. class Enemigo {
  26.  public atacar( $atacado ) {
  27.   $atacado->atacadoPorEnemigo( $this );
  28.  }
  29.  public function atacadoPorJugador( $atacante ) {
  30.   echo "Soy un Enemigo y me ataca un Jugador";
  31.  }
  32.  public function atacadoPorEnemigo( $atacante ) {
  33.   echo "Soy un Enemigo y me ataca un Enemigo";
  34.  }
  35. }

Por cada subclase de Movil que agregues tenes que agregar una funcion nueva a cada subclase existente. Si tenes pocas clases no hay mucho problema, pero si tenes 10 clases, tenes que agregar 100 funciones: es el precio que hay que pagar por no hacer:

PHP:
  1. if ( class_name( $movil ) == "...") { ... }

Dependiendo del caso, esas 100 funciones son preferibles a los horrorosos if que pueden llegar a aparecer.