miércoles, febrero 25, 2009

Segunda reunión JUG CR

Breve resumen.

Nuestra segunda reunión ha sido todo un éxito!

El expositor, Carlos Zuñiga; inicio practicamente puntual a eso de las 6 y media, después de una breve bienvenida, empieza la exposición comentando las características principales del lenguaje Groovy:

Lenguaje Script y Dinámico (Hot deployment) principalmente orientado a programadores Java, Groovy posee una compatibilidad al 100% con clases Java, pues corre directamente en el Virtual Machine de Java, lo que quiere decir que puede tanto Groovy usar clases Java como Java clases Groovy.

Seguidamente nos comenta de la herramienta Groovy Console, nos señala que es una herramienta que nos permite correr segmentos de código en un archivo Groovy de forma dinámica, con solo seleccionarlo. Carlos continua con una serie de ejemplos, a medida va afinando puntería con la ya mencionada consola de Groovy.

Entre varias cosas, nos muestra el funcionamiento de los GString (Tangas en Ingles y nos señala que el nombre fue hecho a propósito y con algo de sátira o humor, en efecto).

También nos muestra los Heredocs, comenta el duck typing, el autoboxing y la recalca el hecho que Groovy sea full orientado a objetos, pues hasta los primitivos a diferencia de Java, son objetos.

Por ultimo nos da una introducción al manejo de collecciones: Listas, Mapas, Vectores para finalizar con algunos buenos ejemplos del uso de Closures.

Una vez cocinado los closures y de un pequeño debate entre su servidor y Carlos, entramos en un receso acompañado de pan de Ajo y deliciosa pizza, patrocinada por BackCountry, ehh todo el anuncio.

Despues del intermedio, volvemos al auditorio de la ULatina para iniciar con Grails; Carlos retoma la charla, comentando que Grails es la versión de Rails para Groovy, es un tool/framework para hacer aplicaciones Web, utiliza la convención sobre configuración, utiliza Ant para la construcción (en realidad es GANT y se parece demasiado a Maven, osea reinventaron la rueda), usa SpringMVC y Flow para el control, GSP (Groovy Server Pages para la presentación), Hibernate para la persistencia, entre otras cosas.

La forma de funcionar, resulta muy similar a un generador de código, en particular a OpenXava, en el ultimo se anotan los beans con JPA y se genera todo un IMEC, basado en porlet's por defecto, en Grails se espera simplemente una estructura estándar de paquetes y por convención se hacen mapeos basados en mapas asociativos en variables estáticas que deben llevar cierto nombre.

Por ultimo demuestra el Hot deploy con el cual cuenta Grails y de las ventajas del mismo, así como el ejemplo, además nos da por enterados de una serie de plugins para mejorar la interface, entrelazarse con otros sistemas, tener mas control y extender Grails.

La charla termina con un Set de preguntas, en gran parte hechas por su servidor, ahora desde mi humilde opinión y mi completa ignorancia, claro y con mas calma, mis impresiones.

1) Groovy es Java 2, el 85% de las características que tiene el lenguaje, simplemente excelentes y además son cosas que ya no se le pueden agregar o no deberían, a la actual arquitectura de Java; un claro ejemplo son los closures; espero que todos los ángeles y demonios por igual caigan a Sun y al Java Community, para evitar este sacrilegio, de lo contrario vamos a tener una librería util, mas demoniaca que nunca, con mas parches de los que ya tienen a raíz de las anotaciones, enumeraciones y templates (generics a.k.a) introducidos en la versión 5, no confundan, me cuadran, pero el lenguajes no fue pensado para ellas, al menos no, para anotaciones y generics, por ultimo diré que Groovy fue considerado y solicitado por el Java Community como un Fork de Java, al cual algunos le apodan Java 2 y con mucha razón, pues este es un super conjunto de Java, como en su momento lo fue C++ de C.

2) Programador Java que quiera conservar su trabajo como desarrollador en esta área del conocimiento, debe aprender Groovy, pues en el futuro la programacion Java apoyada en ciertos segmentos por scripting, fijo va a ser la moda si no la regla.

3) Para seguir en el futuro, Groovy con sus inconvenientes de desempeño y todo, sera el lenguaje VM mas usado, las cosas que realmente necesitemos "perfomance" seran en Java, asi como hace algunos años, se escalaba el desempeño a traves de JNI y C++, e igual siempre queda ese tercer nivel para lograr aun mejores resultados o cuando la plataforma Java necesita cosas muy especificas del sistema operativo en donde es huesped.

4) Grails: pienso que este enfoque aun esta muy en pañales e inclusive me atrevo a decir que Grails, puede ser un buen intento de algo que fracasará y en el futuro evolucionara a algo mas intermedio, es decir facil de usar pero mas flexible y proporcionando mas control, asi como le sucedio a los EJB version 2, practicamente muertos y relevados por JPA y EJB 3 que es una version super Pojo y sin tanta interface.

Otro punto bajo recae en el hecho que Grails utiliza una serie de framework's que aunque muy buenos y todo, primero no son estandar (aunque no tengo ningun problema con eso ;) y segundo no estoy del todo seguro de la facilidad de meter por ejemplo otro framework de persistencia (aunque por estar con Spring, de fijo se puede, aunque sea fuera del caminito de oro), digamos iBatis y por que iBatis; con base en los comentarios hechos por la gente de LinkedIn, por solo poner un ejemplo de escalabilidad, ellos no usan un ORM por que simplemente no tienen sentido, usan JDBC directamente con unas clasesillas que les apoyan en lo repetitivos, supongo algo como dbutils de common apache, ya que ellos tienen la base de datos distribuida, osea una tabla en una base de datos, otra en otra base de datos, etc; Hibernate hasta donde yo se, no puede manejar este tipo de cosas pues aqui no existiría integridad referencial, para iBatis por el contrario, es una situación perfecta; bases de datos no normales y nefastas, con select moustrosos, venga, a iBatis le vale un comino, simplemente toma el resultado de la consulta y juazzzz, te retorna un bean, si bien no es un ProxyBean y el manejo de transacciones no es el mismo, es mil veces mejor que JDBC y muy util para diferentes escenarios (Notese la aficcion a iBatis, creo que soy un psicopata del control en mis app's me gusta saber que pasa y como :). Y asi pienso que se pueden sacar muchos mas escenarios donde Grails se queda corto, claro no le quito merito, la velocidad de desarrollo y demas, es super cool, GORM y sus campos "buscables", super cool, sin embargo aun permanezco algo retraido a este tipo de soluciones, genera todo. Si me preguntan, Grails te ofrece una solución al estilo .Net, cero opciones, pero funca y rapido, pero con restricciones, en el caso por ejemplo de ASP, no se puede tener mas de un formulario, entre otro monton de pegas, la diferencia es que Grails usa un pseudo Java para implementarlo todo. Jajaja, espero que no me llamen ateo o me acusen de sacrilegio por eso, pero al chile, no quiero ver clientes pidiendome hacer un facebook con Grails en 2 meses.

5) Como Carlos menciono, los test cases son un escenario bastante bueno para introducir Groovy, estoy de acuerdo, pero como comente en el cuarto punto, Grails si se pasa de esa raya. Un enfoque donde los DAOS y Servicios sean Java, digamos expuestos por XFixe o Axis, etc y un Aplicativo MVC, donde Actiones de Struts inyectadas por Spring, sean Script's Groovy o Jython, Scala, etc; con Hot Deployment, seria super cool, de hecho yo lo hago asi y si bien es cierto, el IDE aun le falta bastante y el classpath al compilar a veces queda super perdido, la velocidad para probar y hacer cambios lo justifica.

En resumen, muy buena confe y aguante al grupo de Java CR.

Nos vemos en la proxima!

Saludos,
J

martes, febrero 24, 2009

JUG CR - Segunda Reunión Groovy and Grails

Image del grupo de usuarios java costa rica

Que tal amigos, solo para comentar que hoy vamos asistir a la segunda reunión del Java User Group de Costa Rica, la primera charla fue muy interesante con exponentes de categoría internacional tuvo lugar en la ULatina (mismo lugar). En esa ocasión trato de Ajax y Java. Ahora será de uno de mis pseudo lenguajes Script dinámico favoritos; Groovy, del cual se que aun debo bastante de la guía de referencia.

Intentaré tomar nota y ahí les cuento!

Cuando: 24 Feb 2009
Onde: Auditorio ULatina
Hora: 6 y 30 PM.

Era con reservación previa, así que los apuntados ahi nos vemos!


Saludos,
J

domingo, febrero 22, 2009

Frase de la semana

Frase de la semana - Sabinaso

Para esta semana, les traigo a un grande de la canción hispana, Mr. Madrid, el gran y único maestro, Sabina....




"Por decir lo que pienso sin pensar lo que digo
más de un beso me dieron (y más de un bofetón)...

...Cada noche me invento, todavía me emborracho;
tan joven y tan viejo, like a rolling stone. " *

* Joaquín Sabina, tema: Tan joven y tan viejo, yo mi me contigo, 1996

Que hora es en... Tabla de conversiones horaria

Saludos,

Navegando me encontré este tool in-line con una tabla horaria, para saber que hora es en otras latitudes del mundo y así estar más al tanto de nuestros programas favoritos, reuniones o eventos en otros países, espero sea útil.

sábado, febrero 21, 2009

JEE 6 New Features

Vía The ServerSide pueden checkar un articulo comenta las principales características de Java EE 6.

Entre las más importantes mencionamos la inclusión de profiles, los cuales nos permiten utilizar o incluir solo ciertos fragmentos de toda la especificación, por ahora solo barajan el profile full y el Web profile, la idea es si estas desarrollando un servicio Web por ejemplo, no te sean incluidos componentes de la capa de vista tales como JSF o JSP, etc.

Actualizaciones a JAX-RS y JAX-WS también estan a la orden, JPA 2.0 con nuevos e interesantes inclusiones, Servlet 3.0 la cual viene mas POJO que nunca, entre otras adiciones.

Por ultimo indicar también la inclusión de WebBeans, esta aun esta en debate, sin embargo la misma sería una implementación de un framework para integrar varias tecnologías al estilo Spring o Seam, mi suposición sería através de la inyección de dependencias.

En fin, interesante y didáctico para ver que viene de nuevo! Que les parece este nuevo release de la versión empresarial de Java?

Saludos,
J

viernes, febrero 20, 2009

Me levanto - cara a cara - desconectadisimo

A veces pienso que pasaría si vivieramos en un estilo de vida al estilo Truman Show (sin salir de la Matrix, jeje), en ella algunos sucesos de mi vida debería tener una canción como parte de mi banda sonora de la vida, para matizzar la escena.

Esta mañana, esta canción hubiera quedado perfecta..... (enjoy!!!)


Disconnected
Face To Face
you don't know a thing about me
is there something you should know?
I can tell you what you want to hear
let your inhibitions just go

no, you don't know what you will give up
you don't know what you want
it may take you years to find out
you don't know what you need
it's something that may never come to you

trust is something that comes easy
when you've never been a victim
lies and promises and words are said
it's you're decision to accept them

no, you don't know what you will give up
you don't know what you want
it may take you years to find out
you don't know what you need
it's something that may never come to you

lunes, febrero 16, 2009

Eco al salmon

Haciendo un poquito de eco, al excelente sitio Web de los inconseguibles del rock, les regalo este post:

Andres Calamaro - Nada se pierda (2009)




01. Up in the morning
02. Bajan
03. New Jimi doesn´t surf
04. Mejor no hablar
05. Jamming with myself
06. Los mareados
07. Jugar con fuego
08. Una noche sin ti
09. I cant´ help falling in love
10. Pato trabaja en una carniceria
11. Dias distintos
12. Slave driver

Como ya hizo en varias oportunidades anteriormente, Andrés Calamaro regala material inédito por internet. “Nada se pierde”, es un disco de libre descarga que El Salmón cedió para celebrar el décimo aniversario de la revista española Efe Eme.

Son doce tracks, entre los que se destacan “Bajan” (un cover de Spinetta, de la época de Pescado Rabioso), un ensayo de “Días distintos” (luego incluida en “El Salmón”), una versión en vivo de “I can’t help falling in love”, muy al estilo Dylan y “Mejor no hablar de ciertas cosas” (un cover de Sumo).

Como Calamaro dio este disco a la revista española FM para que esté disponible y sea descargado libre y gratuitamente, no hay problemas legales con su publicación. Los temas son de la época 98/99.



Post original

Ser o no ser


Ser, no ser, que ser, que quería ser, ese es mi tema

Me gustaría proponer un divertido e interesante ejercicio, voy a escribir lo que he llegado a ser, lo que me hubiera o me gustaría ser o cualquier otra cosa relacionada:

Jsanca:
Soy ingeniero en Informática y con algo de conocimientos en administración.
Me gustaría llegar a ser músico, actualmente estudio batería.
Me hubiera gustado ser:

Corredor (atletismo, aun lo practico pero ni para el gasto)
Fotógrafo (el color y lo visual, que puedo decir me encanta)
Chef (Cocinero y Barman, para matizzar las tardes con platos y tragos)
Pintor (quien no disfruta a Picasso, Miro, entre otros inmortales)
Poeta (Neruda es el gran maestro)
Escritor (demasiados referendes, soy una autentica polilla de estancia)
Profesor de educación física (Lo intenté)
Profesor de matemática (Aunque no lo crean fui profesor de mate durante 2 años, ni yo lo creo a decir verdad ;)
Algo relacionado con la naturaleza (Siento un fuerte llamado a ella)
Arquitecto (Compro la revista su casa todos los meses, entre otro montón de revistas, revistologo???)
Profesor de Universidad, este lo veo posible; espero sacar pronto una licenciatura en docencia.

En fin y ustedes, que son, que quieren ser, que les hubiera gustado ser o no ser!

Frase de la semana



Cualquier tonto puede hacer cosas muy grandes, muy complejas, y muy violentas.
Se necesita un toque de genialidad - y de mucho valor - para ir en la dirección opuesta.

Albert einstein

Se levanta el Lunes



De golpe el primer rayo de sol me avisa que arranca el día,
ya veo es Lunes, se rompe el espacio entre despertar de resaca y un leve dolor de cabeza,
busco perezoso una aspirina entre las sobras de ayer y apresuro el paso a la cocina hasta hacerme con un vaso de agua, mis des hidratados pellejos beben hasta acabar con todo el contenido, sin embargo la señora sed aun no esta del todo complacida.
El vago recuerdo de un extraño y escabroso sueño inquieta mi mente, que será, que será, divago a solas mientras atravieso el living para recoger algunas cosas.
Que locura, los pequeños vestidos de azul o blanco atestan la calle, la nostalgia abre paso a la melancolía... pero hombre que haces, a por unos huevos y un par de frizados panes, la dureza de su cuerpo tienen reparo con unos segundos en el microondas.
Mi celebro incrédulo que es lunes, aun no arranca, un golpe de jugo de naranja intenta activar lo que no tienen goyete, después de satisfecha la jauria, busca limpiar su reseco cuero, los andados harapos, su impía posedumbre, una vez fuera de la ducha un par de trapos negros ocultan su cuerpo y algo para cubrir el descabellado pleito de gatos y perros que coronan la cabeza.
Una vez fuera de la aparente seguridad de mi concha en cuatro paredes, la impía selva de concreto me recibe con sus democráticos rayos de sol, trato de hacer la fotosintesis mientras esquivo algunos bólidos motorizados que al igual que yo, parecen ir con retraso a su destino.
Después del circo matutino que representa cruzar la calle, veo al cielo en busca de ayuda... quizá no se espero una señal de mas allá que me envié al mas acá un taxi veloz, mientras en extrañas lenguas intento explicarle al operador de la central de Taxi, donde demonios me encuentro. Al final después de unos cuantos dimes y diretes, el disparate del caos encuentra un oasis en una tuna donde se posa el salvador corcel de color sangre, me subo al taxi y mientras en un intento acrobático balanceo todos los chunches que me cuelgan mientras busco donde posar mi cansado armatoste, logro hacerle entender cual es el destino final de esta mañana.
De camino busco algunas monedas, que le aran compañía a un viejo billete de 2 mil colones, leo la leyenda que esculpe un apenas legible mensaje "Jenny y Alvaro", me golpea de frente el recuerdo de las joviales parejas que enmarcan su momento de amor en el astillado roble al lado de la escuela, o los que sin mas tarea que hacer, se dedican a recordarle al mundo que aman a Alvaro.
Al fin llegamos, el calor me mata y como vampiro en la mañana, corro a la estancia como si fueran los cien metros libres de la final mundial, como si mi vida dependiera de ello, dejando un rasto de humo tras de mí. Una vez ahí manotazos, choques de codo, veloces palabras "Hola", dan su destino en caras conocidas.
Una vez pasado el puesto de control, me despido del guarda con un clásico "Pura vida", con la consigna que el día empieza y ya todos vuelven a su rutina, los niños al aula y las parejas, las parejas solas o algunas otras por un infortunado cese de labores, juntando sus soledades en la cama, calentando el frió espacio que dejo perder su trabajo, o quizá quien sabe con algo mas de suerte al abrazado en un autentico nudo de popa de aquella persona con quien quieres estar en las buenas y en las malas, descansando de la cruel rutina que nos azota a diario, la que nos toca vivir; afortunada o infortunadamente día con día.

Buen día a todos.

lunes, febrero 09, 2009

Holocausto movie - Será solo producto de la casualidad?

Holocausto movie

El penoso y repudiable holocausto judío, fue sin lugar a duda una de tantas muestras de crueldad y estupidez del hombre, sin embargo y en un efecto parecido al logrado en el 9/11, donde nació una de tantas zonas cero que existen en el mundo; parece que solo algunos hechos terribles son dignos de nuestras lágrimas, lastima, dolor y espanto, llegando a hacer hasta lo imposible en los medios, para que no se nos olviden; escriben libros, películas, etc, para que siempre estén presentes en la memoria del mundo y hasta intentan utilizar estos tragicos hechos como escusa para hacer otras locuras, recordemos las invasiones de USA en el medio oriente, entre otras irreverencias.

Volviendo al holocausto judío, este no ha sido un hecho aislado, debemos recordar a la Iglesia y su casería de brujas, sin olvidar la masacre a raíz de las benditas cruzadas, imposible para los latino americanos dejar de lado la terrible y masiva masacre indigena por parte de la intrusiva conquista Europea que se llevo a acabo de sur a nortea lo largo y ancho del continente, las terribles dictaduras e invasiones modernas patrocinadas por el gigante del Norte, y así se podría seguir hasta gastar mi teclado.

Con lo anterior en cuenta, he notado un fenómeno al cual quiero referirme con el nombre de el Holocausto Movie; es innegable que el cine siempre ha sacado muchas películas acerca de esta masacre, sin duda el dolor y la muerte ultimamente venden mucho y si simplemente hubiera sido una simple película, como fue el caso de los falsificadores y cuando digo simple, no se confunda que no me refiero a la realización, es una película excelente y se las recomiendo, si no que fue solo una película en esa temporada, sin embargo vea mas abajo los últimos títulos, que en menos de dos meses han salido al publico, será acaso que desean que nuestra lastima justifique o patrocine la masacre hecha por Israel, un gobierno preparado para la guerra por tu ya sabes quien (como dice el grupo de Rock Ska-p en su canción Intifada, ver letra mas abajo, es bastante alusiva al tema), donde nos dicen muy acertadamente en el escribillo de su canción:

¿Quién podía imaginar?
que David fuese Goliat

Muertos, muertos ¿en nombre de quién?
Muertos, muertos de Israel
Muertos, muertos ¿en nombre de quién?
Muertos, muertos de Yavé.

Al parece David (Israel) no aprendió nada del holocausto judío y ahora con autoridad divina??? hace lo mismo contra su hermano, en un terreno obsequiado por Inglaterra en un hecho argumentado por algunos, como una tragedia preparada por algunos judíos poderosos que se dicen eran y son los dueños de la económica mundial, como los famosos banqueros Rockefeller, que quieren hacerse con el mundo, según se dice, rumores de conspiración alegan que la masacre judía fue en realidad patrocinada estos poderosos judíos, en un movimiento para obtener mas poder y un territorio mas grande, haciéndose como lo hizo USA con México, con mas y mas tierras de sus vecinos, en este caso palestinos.

En fin, no se si esto sera simplemente una loquera mía, o algo que se ha estado haciendo a proposito, para los de toda la vida, para los mismos de siempre, como dice Serrat en su canción Buenos Tiempos, ustedes que opinan?




-

Intifada
Ska-P

Seis millones de judíos aniquilados de la forma mas cruel.
Un genocidio imperialista por ejércitos fascistas,
de la historia hay que aprender
Las victimas se han convertido en los verdugos se vuelven del revés.
Colonizando territorios Palestinos, de nuevo atentando a la sensatez.

Muertos, muertos ¿en nombre de quién?
Muertos, muertos de Israel
Muertos, muertos ¿en nombre de quién?
Muertos, muertos de Yavé.

Que harías tu si te echaran de tu casa sin derecho a rechistar. Pisoteando tu cultura, sumergido en la locura por perder la dignidad.
Palestina esta sufriendo en el exilio la opulencia de Israel por un gobierno prepotente, preparado para la guerra, por tu ya sabes quien.

Muertos, muertos ¿en nombre de quién?
Muertos, muertos de Israel
Muertos, muertos ¿en nombre de quién?
Muertos, muertos de Yavé.


Piedras contra balas una nueva intifada en Cisjordania, Gaza o Jerusalén

Ohhhhh. ¿Quién podía imaginar?
OhOhhh que David fuese Goliat
OhOhhh. ¿Quién podía imaginar?
OhOhhh que David fuese Goliat.

Ohhhhhhhhhhhhh intifada, intifada.
Ohhhhhhhhhhhhh intifada, liberación.

No confundas mi postura, soy ateo y no creo en ningún dios, no diferencio a las personas por su raza, su cultura o su mierda de religión. Sólo condeno el sufrimiento, la injusticia y el abuso de poder.
Palestina es sometida a la mas terca de las guerras, la opulencia de Israel.

Muertos, muertos ¿en nombre de quién?
Muertos, muertos de Israel
Muertos, muertos ¿en nombre de quién?
Muertos, muertos de Yavé.

Piedras contra balas una nueva intifada en Cisjordania, Gaza o Jerusalén

Ohhhhh. ¿Quién podía imaginar?
OhOhhh que David fuese Goliat
OhOhhh. ¿Quién podía imaginar?
OhOhhh que David fuese Goliat.

Ohhhhh. ¿Quién podía imaginar?
OhOhhh que David fuese Goliat
OhOhhh. ¿Quién podía imaginar?
OhOhhh que David fuese Goliat.

Ohhhhhhhhhhhhh intifada, intifada.
Ohhhhhhhhhhhhh intifada, liberación.

Ohhhhhhhhhhhhh intifada, intifada.
Ohhhhhhhhhhhhh intifada, liberación.

domingo, febrero 08, 2009

Frase de la semana


"Dios existe si vives una actitud positiva, audaz y generosa, o no existe, si vives con actitud amargada, timorata o egoísta, aunque reces libros enteros de jaculatorias y te bañes en agua bendita, porque en definitiva, Dios es una forma de ver la vida y de pasar por el mundo exactamente como pasó Jesús.

Los seres humanos se han preguntado siempre si existe algo trascendental, mucho más real que la existencia cotidiana. Pero al no ser capaces de descubrirlo, han adorado a un símbolo."

Jiddu Krishnamurti

jueves, febrero 05, 2009

Repositios en JavaScript

Google AjaxLibs

Hola,

Ya fue algún tiempo atrás cuando escuche en una conferencia de Ajax, acerca de repositorios JavaScript de donde puedes referenciar una librería JavaScript y reutilizarla, sin necesidad de tenerla en tu servidor, veamos un ejemplo:


<!-- Google reference apis -->



<script src="http://www.google.com/jsapi" type="text/javascript" charset="utf-8"></script>



<!-- Indico que deseo utilizar prototype y scriptaculous -->



<script type="text/javascript" charset="utf-8"> google.load("prototype", "1.6");

google.load("scriptaculous", "1.8.2");

</script>



Este ejemplo muestra como se incluye el Google JavaScript API y como al mismo se le solicita incluir prototype y scriptaculous.

Entre los inconvenientes podrían estar el tiempo de descarga del JavaScript, sin embargo esto es debatible en el sentido que el servidor de Google puede ser más rápido que el nuestro. Otro punto importante recae directamente sobre las nuevas tecnologías introducidas en Google Chrome; este navegador orientado a App Web, tiene dentro de sí el V8, una maquina virtual que compila el JavaScript, por lo tanto si la referencia a una libraría, como JQuery por mencionar alguna, fuera siempre la misma (por ejemplo referenciando a repo de Google), el V8 probablemente ya la tenga compilada, así que ni siquiera la descargara, solo reutilizara el código ya compilado, lo que nos ayuda tanto a nivel de descarga como de interpretación del JavaScript, pues con V8, la librería se interpreta una vez y se sigue reutilizando, que nos proporciona una velocidad mayor en el procesamiento inicial.

Para terminar este post, me parece que el enfoque es fantástico y además hace muy fácil su utilizaron y mas estándar también.

+ Info

Groovy - Referencia #12

Usando Listas - Parte 1

En Groovy el manejo de vistas es bastante abreviado y la sobrecarga de ciertos operadores también facilita la tarea, vamos a los ejemplos:

Esta línea define una lista vacía, por defecto instancia un ArrayList.
def list = []
println list.class

Salida:
class java.util.ArrayLis

Las siguientes dos líneas muestran una primera lista, como un vector de cadenas, con tres valores.
La segunda, implementa la lista como un conjunto.
def listString = ["String1", "String2", "String3"] as String []
def listSet = ["String1", "String2", "String3"] as Set
println listString.class
println listSet.class

Salida:
class [Ljava.lang.String;
class java.util.HashSet

Ahora vamos agregar algunos elementos; en Groovy contamos con el operador << para agregar nuevos elementos a la lista, los que programaron en C++, recordaran que la STL utilizaba este operador para el mismo objetivo, vamos al ejemplo.

(1..3).each { list << "String" + it }
println list


Salida:
["String1", "String2", "String3"]

No preste atencion al "(1..3)", solo basta saber que esta sentencia nos hace un siglo de 1 a 3 y lo almacena en la variable implicita "it".
El resto de la sentencia, nos muestra como se van agregando elementos a la lista, concatenando a la cadena "String" el indice actual.
Para darnos una idea, en Java esta sentencia sería algo como:

for (int i = 1; i <= 3; ++i) {

list.add ("String" + i)
}


Como notarán la sintaxis es bastante mas comoda y además me parece mas natural, ahora si queremos obtener un elemento podríamos hacer:
println "element 0 ${list [0]}"
println "element 2 ${list [2]}\n"

Salida:
element 0 String1
element 2 String3

Notese que estamos utilizando GString para obtener los elementos de la lista, para obtener un elemento utilizamos los corchetes cuadrados [i] o de la forma tradicional, get(i).
Una ventaja de utilizar los operadores [] recae en el hecho que si la lista es un vector, un set o un list, el acceso sigue siendo identico atraves de este operador.

Para cerrar este capitulo, veremos algunos closures definidos para las listas, con los cuales podemos recorrer las listas, con o sin conocer el indice actual; el primer closure es el each, veamos un ejemplo:

list.each {item -> print "${item} -- " }

Salida:
String1 -- String2 -- String3 --

Al aplicar el closure "each", necesitamos indicar una parámetro al mismo, en nuestro caso lo llamamos "item", pero usted puede colocarle el nombre que desee, vale decir que este item, es el objeto actual que se esta recorriendo en la lista, en Java una sentencia equivalente seria.

for(String item : list) {

System.out.println (item + " -- ");
}

Como nota, este closure no nos da información acerca del índice actual, para ello vayamos al siguiente y ultimo ejemplo:

list.eachWithIndex {item, index -> println "${index}) ${item}" }

Salida:
0) String1
1) String2
2) String3

Note que este closure necesita de dos parámetros, el objeto actual que esta siendo iterado y el índice actual al cual pertenece el objeto iterado, en Java haríamos algo como;

En caso que sea un collection:
for (int i = 1; i <= list.size(); ++i) {

System.out.println (i+ " ) " + list.get(i));
}

En caso de un array:
for (int i = 1; i <= list.length; ++i) {

System.out.println (i+ " ) " + list.get(i));
}

Notese de nuevo que en Groovy, la iteración tanto del array como del collection, son iguales.

Pronto la parte dos de Listas

martes, febrero 03, 2009

Orgullosamente un nuevo Blogtico da a luz




Hola,

Quisiera hacer un párrafo aparte en el tutorial de Groovy, para comentarles acerca de algunos cambios en el blog. Como notarán, me he unido a la comunidad de bloggeros ticos, en ticoblogger.
Esta es una comunidad de ticos, unidos por algo mas que la pasión por bloguear y naufragar en Internet, ya identificado podemos decir que un nuevo blogtico da a luz.

Adicionalmente elimine el componente de frases del día que aprecia al final de la página, realmente rompía mucho el layout del sitio, así que tome la decisión de hacer uno personalizado e intentar cambiarlo a cada inicio de semana, por el momento les dejo con la frase de la semana, la autoría de la misma le corresponde al medico argentino, Ernesto Guevara.



...ustedes no entienden lo que yo escribo y repito en mis conferencias.
Aquí lo que hace falta no son homenajes, sino trabajo. En cuanto a los honores, se los agradezco, pero les voy a responder en francés, que es más delicado, para no ofenderlos: Les honneurs, ca m' emmerde! (los honores son una mierda)*



fotografía del Che

* Commandate Ernesto Che Guevara'


Pura vida y hasta la victoria siempre!

lunes, febrero 02, 2009

Groovy - Referencia #11

GString

Las GString (Groovy String), aunque es una cadena, la misma agrega funcionalidad a la vieja cadena de Java, en un GString podemos hacer evaluaciones de variables o propiedades de clases, disponibles en el "scope" de la cadena, las operaciones se realizan de una manera muy similar a como se harían en EL (expression language) utilizado en librerías tales como JSTL.


void theGString () {

def name = "Jon"
def now = new Date ()
println("\nGString")
(1..3).each { print "*** " }
println("")

println "Hello word!".class
println "Hello ${name}".class

println """
Hi my names is ${name},
now is "${now}"
"""
} // theGString.

Salida
class java.lang.String
class org.codehaus.groovy.runtime.GStringImpl

Hi my names is Jon,
now is "Mon Feb 02 17:11:19 CST 2009"


Como se puede notar, al utilizar las expresiones ${} podemos utilizar variables dentro del scope e inclusive inspeccionarlas, de esta manera se tenemos una lista de usuario, los cuales tienen nombre y apellidos, podríamos hacer lo siguiente:

println "Hello ${users[0].name.lastName}"

La anterior sentencia, obtiene el primer elemento de una coleccion, el atributo name de ese objeto y el apellido del objeto name.