My Blog

Friday, September 24, 2004

Supongo que los proximos dias voy a consultar mucho esta pagina

http://www.nplus1.net/nplus1/static/patterns/soa_patterns/patterns2.html

Friday, September 17, 2004

Curioseando por Java

Hace un tiempo habia mencionado lo de los CGLIB proxys para java. Parece que en tiempo de ejecucion podes generar codigo java compilado y ejecutarlo. Asumo entonces que las siglas significanCode Generation Library. También encontre un proyecto interesante que manipula los bytescodes de la aplicacion corriendo. No tuve mucho tiempo para leerlo pero aca esta lo que encontre

Un blog con ejemplos de uso de CGLIB
La pagina oficial de CGLib
La pagina oficial del proyecto ASM de java

Thursday, September 16, 2004

El señor de los anillos versión animé.

No soy un fanático del animé, pero vi lo suficiente de Gokú, los caballeros del zodiaco e incluso la pelicula de Fatal Fury (entre otros) para reconocer un patrón común entre todo lo que recibe el terminó de animé. Tal es asi que llegue a la conclusión que el animé va mucho mas alla de los ojos grandotes y una forma de dibjuarlos sino que la trama tiene que presentar características especiales para caer en este género.

Vamos a explicar cuales son esas características describiendo como sería "El Señor de los Anillos" si la trama la hubiera escrito un autor de animé.

Primero de todo, tiene que haber algun transfondo místico en cuanto al universo y la energía. Tiene que manejarse conceptos como el Ki o el cosmos o el poder del mistico universo o como corno se antoje. Para este caso vamos a referir a cualquiera de ellos con el término de "energia". Cada personaje tiene que irradiar un aura desplegando su energia que tiene que ser pura o estar plasmada de sentimientos como el odio para los malos. Por lo general cuanto más poderoso o más se calienta (enoja) el personaje mas grande debe ser su aura.

En la versión animé del Señor de los Anillos personaje debería tener un aura. Los buenos un aura azul y los malos su aura roja. Ademas tienen que tirar fueguitos y rayos de colores. Cuando se pelea la comunidad del anillo con los orcos deben desplegar su aura y tirarse descargas de energia mutuamente. El argumento puede desarrollarse parecido pero siempre los personajes tienen cada dos minutos hacer referencia a la energia, el cosmos y en las peleas tienen que terminar casi muertos antes de darlas vuelta. Ademas, entre los malos tendria que haber mas personajes considerados "poderosos" tal vez un orco que tire fueguitos de un color particular, etc.

Pero todo esto queda completamente relegado al desenlace de la pelicula. Para ser calificado como animé el señor de los anillos debería modificar su final. El argumento puede ser parecido. Pero luego de que frodo haga todo el trayecto para llegar a destruir el anillo, justo antes de tirarlo al monte del destino y destruirlo, tiene que cambiar el final. Sino NO seria anime.

En la versión anime, Saruman debe recuperar el anillo y revivir. Tiene que ser super-ultra poderoso y tener la capacidad de destruir la tierra tirandose un pedo.Tiene que haber una escena donde todos los personajes principales se pelean contra saruman con sus auras azules y sus fueguitos de colores. Saruman les tiene que ganar a todos y dejarlos moribundos e inconsientes a todos. Todo tiene que parecer perdido. En ese instante por alguna razón, frodo ve a Sam medio muerto y es tal los sentimientos que invoca que nace una esperanza en él. Con todos los huesos quebrados y todo roto se levanta y logra convocar todo el poder del cosmos para pelearse, se empieza a iluminar por un aura enorme. El sólo contra Saruman. Se pelea y logra matarlo con un rayo de colores de dimensiones astronómicas.

En su defecto el que mate a Saruman puede ser Gandalf, pero lo importante es que sea uno solo. Si bien en los anime hay mucha camaraderia y trabajo en grupo, el que se lleva los laureles tiene que ser uno. El más capo de todos tiene que ser UNO Y SOLOo UNO sino no es anime. Sea Ceia, Goku, Gandalf o Frodo.

Al final, a más de uno le puede quedar la sensación que toda la trama fue al pedo. Todo lo peor que pueda pasar, evectivamente tiene que pasar. El objetivo que se plantea la comunidad de destruir el anillo debe fracasar. Esto ES anime. Todo tiene que ser resuelto...por un milagro.

Wednesday, September 15, 2004

Venganza (Parte IX)

Empezó a hacer cuentas mentales. 250.000 por tres son... 750.000. Pesos. Casi un millon. Nunca habia visto semejante cantidad de dinero en su vida. Pensaba en comprase una casa para el y mandar al diablo el alquiler. Es curioso que rapido hace uno planes cuando se imagina una cifra de unos cuantos ceros a la derecha.

Tenia que arriesgarse. Despues de todo Ginsberg estaba muerto y la la plata del rescate nunca aparecia. Tan solo una parte del eso le podría significar dejar la, para él, mugrosa vida de mierda que llevaba y empezar a vivir como un duque. Era una suma por la que valía la pena arriesgarse.

Cuando Ordoñez terminó la conversación sintió el caño de la 45 de Amaro. Sabía que lo estaban apuntanto. No se dió cuenta cuando abrieron la puerta de su cabina. Intuyó quien era el que lo amenazaba.

Calentón como era, hubiera sido de esperarse que una ira irracional inundara a Ordoñez y fuera capaz que cometer una locura en ese momento. La realidad era que ante una situación muy crítica se le activaba un mecanismo en la mente mediante el cual desaparecian todos sus sentimientos y se silenciaba su conciencia. La tensión lo convertía en una máquina. Fria. Observadora. Despiadada. Extremadamente racional. Al punto que sabía que arrebatarle el arma a Amaro y ponerle un tiro primero en las pelotas, para que sufra, y luego en la cabeza, no era una decisión acertada. Quedó inmovil. Suspiro profundamente. Esperó.

- Ahora si que vamos a hablar, hijo de remil putas -

Tuesday, September 07, 2004

Nota de Opinion: Lenguajes de Programacion

Para variar entre capitulos de venganza, agenda personal, cuaderno de anotaciones y links, recordatorios, etc, pense usar mi blog para su uso mas difundido: escribir una nota de opinion. El tema: los lenguajes de programacion.

El objetivo de este articulo es presentar mi vision sobre los lenguajes/tecnologías de programacion Delphi(para win32), Java y .NET (C# en particular). Antes que nada aclaro que mi experiencia es más basta para el primer lenguaje, no obstante, siempre ando curioseando sobre el los otros dos.

Por donde empezar? Veamos los puntos fuertes de cada uno y, como es un articulo de opinion,¿Cuál hay?, vamos a darle rienda suelta a mi subjetividad y ver que más me gusta de cada uno de ellos.

Empecemos por Delphi. Me gusta la sintaxis de Delphi, suele ser muy legible con sus correspondientes Begin y End. También me gusta que no sea Case Sensitive.
Una cosa importante que me parece es la posibilidad de tener bien separada la seccion de interface de implementacion pues cuando tengo que ver un programa escrito en java por lo general me mareo buscando la declaración de los métodos que busco. Tener esa separacion es genial y te ahorra el constantemente ir a la documentacion en HTML como se hace en Java o los lenguajes de .NET.

Uno de los puntos fuertes que me encantan de Delphi es que ademas del lenguaje es la IDE y la VCL. Aunque no muy explotada, los componentes de Delphi tienen muchas ventajas que no vi en otros lenguajes. Programar un componente es ponerse en una posicion en la que el usuario es otro programador. Se le pueden hacer editores de propiedades muy ricos. Por ejemplo para modificar una propiedad de un objeto en tiempo de diseño que sea por ejemplo el pais (un simple string o enumerado) : teniendo el componentito (objeto) tirado en nuestro form podemos hacer un editor de propiedades donde para modificar esa propiedad hacemos click sobre el inspector de objetos se abra un mapa mundi donde el mismo programador elije el pais clickeandolo en el globo terrestre. Si, ya se que a nivel practico no parece un ejemplo muy feliz, pero no me van a decir que no suena lindo. En Java como existen varias IDEs estas cosas por lo que vi no se pueden hacer. Delphi es el Lenguaje, la IDE y la VCL.

Esto trae sus ventajas y sus descentajas. Delphi fue pensado para hacer aplicaciones rapidas y la forma como esta concebido tiende a tentar a los programadores a hacer Drag and Drop de botones, y tener clases formularios con muchisimas lineas de codigo.

Hay que notar algo. Con la tendencia a que las aplicaciones sean Web y el hecho de pensar en el diseño de la aplicacion antes de tirarse a programar, hacer diagramas de clases, etc. Las aplicaciones estan tendiendo a no ser componentes dentro de formulario. Esto hace que el hecho de tener un editor de propiedades hermoso no aporte mucho porque probablemente el componente que hayamos hecho para otro programador en vez de usarlo en tiempo de diseño tenga que instanciarlo a mano en tiempo de ejecucion en alguna de las clases que definio como parte de su sistema. Tal vez el concepto de Tiempo de diseño que propone Delphi no aporte tanto como hace unos años. Me pareció que .NET trata de rescatar este aspecto e incluirlo para aplicaciones web ASP.NET.

Creo que algunos me dirian un vende-patria porque programo en Delphi y parece que estoy hablando en contra de el. Con mucho dolor Delphi me parece que delphi esta perdiendo mucho terreno. El Delphi 8 ya es para .NET y me da toda la impresion que la gente de borland quiere que se deje de usar la VCL para pasar a las clases de .NET.

La verdad es que me encanta Delphi. Programo en él y si tengo que elegir algun lenguaje para hacer alguna cosa para mí siempre termino haciendolo en Delphi. Delphi es poderoso en toda la programacion orientada objeto y presenta la flexibilidad para poder explotar la API de windows, COM y hacer cosas como programar un hook a la API de windows. No me digan que eso no es divertido?. Dudo que esas cosas se puedan hacer en java. Incluso le veo ventajas, por ejemplo, para hacer juegos. Al poder compilar todavia para win32 me parece por el momento el mas indicado de los tres para hacer un juego en DirectX u OpenGL. Bueno, para el 2007 se prevee computadoras a 10 GHz asi que para ese entonces creo que se va a poder migrar cosas como el quaek 3 a Java usando la API 3d del lenguaje. La gente de .Net diria que tranquilamente se pueden hacer juegos en .NET con su Managed DirectX. Creanme que si tuviera más tiempo libre lo probaría.

Hay muchas mas ventajas o cosas interesantes que le encuentro a Delphi, pero por ahora vamos a dejarlas de lado para no hacer el articulo demasiado largo. Al ser un articulo de opinion pretendo escribir las cosas tal cual atraviesan mi conciencia pero sin excederme en algo que nadie quiera leer.

Vamos a pasar a Java. Java tiene un monton de cosa interesantes. La comunidad Java parece ser inmensa y dentro de estar todos on-fire con el lenguaje. También tenemos lo de multiplataforma y esas cosas que no vamos a discutir porque supongo que ya se discutio mucho sobre ese tema.

Java tiene un par de cosas que a simple vista me tientan muchisimo. Primero: metodos virtuales por defecto. Realmente no entiendo porque en C# no adoptaron ese camino. Lei un articulo al respecto en donde sus desarrolladores justificaron porque tomaron esa decision basandose en el pragmatismo (lo practico, mas adecuado para el mundo real) y otras justificaciones que no me convencieron el lo mas minimo. De hecho muchos patrones de diseño como el decorator tienen mas sentido si todos los metodos ya son virtuales. ¿Y si quiero decorar algo que ya esta hecho qué? ¿Tengo que ir a la declaracion de la clase que quiero decorar y poner todos los metodos como vituales?

Yo le realizaba muchas criticas a java de cosas que le faltaban al lenguaje y sin embargo no las voy a mencionar aqui. ¿Porqué?. Lei la especificacion de la última version de java y tuve que ponerme a respirar dentro de una bolsa de plastico de la emoción. Incluyeron cosas como generics y enumerados... Delphi no tiene generics y que vien me vendrían. Incluso escribo esto y me agito. Seamos sinceros, es una actitud de nerd, pero bueno.

Me pregunto si toda esas funcionalidades se van a incorporar en el java para telefonos celulares. Como programador frustrado de juegos que termino programando aplicaciones de gestion (:P) hacer jueguitos simples en mi tiempo libre para celulares me resulta una idea de lo mas atractiva. Claro que me encantaria disponer de los Generics, enumerados y todas esas cosas que las nuevas versiones de Java me ofrecen.

Otra cosa interesante es lo siguiente. Ultimamente lei sobre Programacion Orientada a Aspectos. Por lo poco que lei estoy convencido que es el proximo paso que tiene que dar la programacion . Muchas limitaciones que encontré a pueden ser solucionadas con la AOP. Pero igual le falta mucho camino por recorrer.

Sobre este punto Java parecer esta tomando la iniciativa. Vi un compilador que se llama AspectJ y unas cosas que se llaman CGLIB proxies. Estos ultimos los usa Hybernate para hacer proxies dinamicos a las clases de negocio persistentes. Habiendo estado programando un framework de persistencia para Delphi y habiendo puesto un generador de código para que me haga un proxy por cada clase de negocio (para lo que necesité un parser de codigo) veo bien clara la ventaja que me hubiera proporcionado una cosa asi en Delphi.

Vamos a ensuciar un poco a java en pos de Delphi. Que feo que me resultan crear las aplicaciones SWING o AWT. Si bien las ides como NetBeans lo hacen fácil sigue siendo más enroscado y para una aplicacion chiquita de windows ni lo dudaria en hacerla en Delphi antes que en Java. Hay que reconocer que eso de los punteros a funciones (o eventos) si bien es discutible puede resultar una solución de lo más que elegante.

Ni hablar si quiero usar la API de windows.

Y .NET? Bueno... no vamos a hablar mucho de .NET por una cuestion de longitud del articulo, pero vamos a ver una cosa muy interesante que vi en .NET y me parece completamente logica y correcta. Poder hacer override (como los metodos no son virtuales por defecto tampoco en C# hay que hacer override, aunque creo que nada impide hacer un lenguaje que compile a .NET y tenga los metodos virtuales por defecto . Taria bueno no?:) )y en el metodo de la subclase cambiarle el tipo del parametro de modo que sea alguno perteneciente a una subclase del tipo de parametro que recibia el padre. Creo que si leen el ultimo renglon unas dos o tres veces omitiendo el parentesis se entiende y me ahorro de escribir un ejemplo. En Java y Delphi ésto último no se puede hacer.

Aqui en este artículo estamos discutiendo a nivel lenguaje, nada mas que eso. Cada lenguaje con su correspondientes plataformas abarcan conceptos mas amplios y variables adicionales que podrian intervenir a la hora de juzgar uno y otro lenguaje y el cuando usar uno u el otro. Aqui solo hablamos de los lenguajes en sí.

No esta mal por ser mi primer articulo de opinion eh. Espero que no sea demasiado largo. Como ultimas palabras voy a decir: Aguante Delphi!. Le prometo que si alguien me regala el dinero suficiente como para poder programar a mi gusto sin trabajar voy a hacer una IDE en la que programes en Delphi (sin virtuals ni override porsupuesto pero con editores de propiedades), te traduzca los fuentes a Java y luego te lo compile.














Friday, September 03, 2004

Novedades Java

Salio la beta del java 1.5! Trae generics(templates) y enumerados.
Lo incluido en el release se puede ver en
http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html

Para seguir incursionando en java voy a
A) Aprender java 3d api
B) Ver lo que trae la version 1.5 de java
C) Ver y aprender a usar hibernate

Ademas
Investigar sobre "CGLIB proxies" que parece que usa Hibernate para hacer los proxies usando ideas de AOP

Post Data
Me pasaron una aplicacion interesante que prueba las clases de Java
JUINT