Groovy

Como leer variables de entorno con Grails

En diversos proyectos en los que he tenido la oportunidad de participar, siempre me he encontrado con el inconveniente de tener que tomar archivos de cierto tipo como insumo para mi aplicación entiéndase con un archivo PDF para mostrarlo al usuario un archivo de propiedades y hasta un archivo de Excel para leer su contenido, utilizando diversas técnicas para resolver el inconveniente ¿Dónde pongo el archivo?

Algunas soluciones que en su momento implemente y que podemos hacer son desde poner una ruta estática, hasta crear una carpeta dentro del contexto de mi aplicación, otra opción es declarar una variable de entorno, todas las opciones anteriores tienen ventajas y desventajas.

* Si creamos una ruta estática, la ventaja principal sobre este método, es que hay mucha información de cómo hacerlo por lo cual realizar la implementación seria muy fácil y rápido, la principal desventaja es que si por algún motivo queremos cambiar la ruta definida, tendremos que cambiarla directamente en el código y al mismo tiempo tenemos que recompilar y desplegar nuestra aplicación.

Video podcast de ViveCodigo 00x12 - 2do. Coding Dojo

"En esta emisión del podcast convocamos a la comunidad de desarrolladores a asistir al 2do. Coding Dojo de ViveCodigo.org, en donde les pusimos un par de retos a implementar: #7 Project Euler y Roman Numerals
Es interesante ver las respuestas de todos pues se utilizaron varios lenguajes y las soluciones incluso entre mismos lenguajes difieren en su implementación.
Les recomendamos leer el post del Dojo en ViveCodigo.org, pues encontrarán las referencias a las respuestas que se desarrollaron y en la mayoría de los casos los asistentes mejoraron sus soluciones.
Que lo disfruten tanto como nosotros..."

Coding Dojo #2

El día de ayer tuve la fortuna de asistir al Coding Dojo de manos de los chicos de ViveCodigo, en verdad fue una experiencia enriquecedora y educativa.
Como no tuve una participación muy activa en esta edición me tome la tares de realizar un par de mejoras y terminar los ejercicios.
Ejercicio 1: By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. What is the 10 001st prime number?
Le hice una modificación mínima y da el resultado como en 3 segundos, cosa que antes hacia en 3 minutos.

/*
    @rodrigo_salado
*/

def getSolution(n){
    index = 0
    while(n!=0){
        if(isPrime(++index)){
            n--
        }
    }
    index
}

def isPrime(n){
    if(n <= 1) { return false }
    if(n <= 3) { return true  }
    lim = (long) Math.sqrt(n)
    !(2..lim).find{
        n%it == 0
    }
}

assert getSolution(1) == 2
assert getSolution(2) == 3
assert getSolution(3) == 5
assert getSolution(6) == 13
assert getSolution(10001) == 104743

assert isPrime(-1) == false
assert isPrime(0) == false
assert isPrime(1) == false
assert isPrime(2) == true
assert isPrime(3) == true

Video podcast de ViveCodigo 00x09 - Griffon

Si sólo quieren escuchar el audio:

Hola a toda la comunidad! Desde el sitio de ViveCodigo.org se ha publicado una nueva emisión el podcast donde el tema principal es Griffon con la participación de Andrés Almiray.

Andrés Almiray es un Java Champion mexicano, líder del proyecto Griffon y contribuyente al lenguaje Groovy, que en esta ocasión nos viene a hablar del desarrollo de aplicaciones Desktop. Específicamente de Griffon un framework Groovy basado en Grails para desarrollo de aplicaciones Java que se ejecutan en el escritorio de nuestros sistemas operativos. En la entrevista Andrés nos comenta el presente y futuro de Griffon, así como, de su experiencia desarrollando el framework y la adopción de este tipo de aplicaciones.

La liga del videpodcast es: http://vivecodigo.org/2011/11/29/podcast-9-de-la-temporada-0/

Convertir números a letras.

Este ejercicio estuvo de moda esta semana, y solo con el fin de que no se quede este humilde código en el baúl de los olvidos, lo dejo para la comunidad.

Soy nuevo en Groovy, y como siempre me gustan las recomendaciones y críticas sobre mi código.

Resumen del código: Convierte números enteros del 0 al 1000 en su forma escrita, letras en minúsculas y español.
Conforme se analicen números en la función ‘convierteNumeroAPalabras’ se irán agregando en el mapa ‘numerosEscritos’. Así que si se deseara llenar el mapa con la secuencia completa se usaría algo como:  (0..1000).each{convierteNumeroAPalabras(it) } , después solo se podrían recuperar la conversión con un método propio del mapa, por ejemplo: numerosEscritos.get(numero)

/*Mapa con las conversiones de los números*/
numerosEscritos = [
                0:"cero",  1:"uno",  2:"dos",   3:"tres", 4:"cuatro",
                5:"cinco", 6:"seis", 7:"siete", 8:"ocho", 9:"nueve",
               
                10:"diez",   11:"once",      12:"doce",       13:"trece",     14:"catorce",

RatPack: Servicios REST fácil y rápido

Si alguna vez han tenido que implementar un servicio web usando REST, sabrán que hay muchas opciones para hacerlo. Spring tiene facilidades para implementarlos, hay estándares para realizarlos, y por supuesto hay una gran cantidad de frameworks que pueden estar dedicados a implementar servicios de este tipo o que son para aplicaciones web pero además pueden usarse para implementar servicios REST.

Una opción muy sencilla para REST es RatPack, un framework bastante ligero para hacer servicios REST como scripts en Groovy.

Con RatPack, simplemente definimos los servicios que queremos implementar, en un script de Groovy, y el framework se encarga de lo demás: el servicio se ejecutará como un servlet dentro de Jetty, despachando las peticiones HTTP a los URL's que nosotros hayamos definido.

Los scripts son muy sencillos. Un ejemplo de "hola mundo" en RatPack:

get('/') {
  "Hola, Mundo!"
}

Grails, opción real y escalable para sitios web de alta carga.

 

He estado trabajando poco mas de un año en un proyecto que usa Grails, desde que lo comencé no pensé que se convertiría en lo que es ahora, es decir no pensé que llegara a tener tanta carga.

Básicamente es una tienda en linea, con diversas formas de pago. El stack de tecnologías se compone de varias cosas:

 

 

Usamos varios plugins de Grails entre ellos:

 

 

Y algunas librerías como:

 

 

 

Estamos modularizando la aplicacion en mas aplicaciones y tenemos una app que usa Scala con ScalaQuery para la base de datos, en el futuro haremos muchas mas cosas con Scala y Akka.

Para JavaScript usamos JQuery y varios plugins.

Para trabajar usamos IntelliJ IDEA 10, Gradle, Archiva, Jira, Git, GitHub y mucha cerveza y café.

Un miembro del equipo desarrollo herramientas de monitoreo que revisan la salud de los load balancers y reportan los errores con mensajes directos de Twitter con Shell Scripts. También usamos logstalgia para monitorear casi en tiempo real la carga en los web servers.

El hardware esta compuesta de 5 cajas RHEL 5 de 64 bits, un LoadBalancer y un Firewall físicos. El load balancer dirige el trafico a los Apache HTTPD de 4 cajas, en cada una de esas cajas, esta  configurado con mod_proxy usando AJP hacia 2 Tomcats con un fail over a otra caja. En total se tienen 8 Tomcats atendiendo todo el trafico. Una de esas cajas tiene instalado RabbitMQ y otra caja Terracotta. Se usa una caja exclusivamente como servidor de mySQL.

Las cajas tienen los siguientes specs:

 

  • Dual Quad Core Xeon 2.26 HGZ
  • 24 GB de RAM
  • 300 GB SAS X 3

 

Estas cajas están en el hospedaje dedicado de RackSpace en Chicago.

Con todo lo anterior hemos podido suscribir 1.5 Millones de personas, logrado una carga tope de 80,000 usuarios concurrentes y 30,000 http request por minuto.

Unas de las claves ha sido usar procesamiento asíncrono con RabbitMQ y usar muchísimo el cache distribuido con Terracotta. Ademas de contar con un equipo de 4 desarrolladores mexicanos (yo entre ellos) y un alemán, con mucho talento todos ellos.

Grails es una excelente opción para desarrollo web, nos ha permitido implementar rápidamente los requerimientos de negocio, hemos hecho en un día hasta 12 despliegues de la aplicación sin sufrir downtimes. Grails es una herramienta que facilita el desarrollo web sin perder poder en los frameworks en los que se basa como Spring, Hibernate y otros...

Les dejo un video del análisis casi en tiempo de real que hace logstalgia del log de acceso de los 4 webservers

 

Andrés Almiray - Java Champion Mexicano

Hola comunidad, este sera mi primer aporte al blog, y eso que ya tengo un buen rato registrado, pero considero que este articulo que realice para la comunidad de Upiicsalibre es muy adecuado para el contenido de Javamexico, Este articulo habla de Andrés Almiray, un mexicano que ha dedicado gran parte de su tiempo como desarrollador a trabajar sobre la JVM usando Java y mas recientemente Groovy, y que me di a la tarea de investigar y hacerle una entrevista, esto con motivo de "La semana de mexicanos importantes en el Software Libre", organizada por Upiicsalibre, denle una revisada al articulo es muy interesante y las opiniones de Andrés son muy acertadas, saludos y les dejo el enlace de la biografía y la entrevista.

Aquí pueden ver la entrevista

DSL en Groovy parte II : De estatico a dinamico

Antes que otra cosa, debo aclarar que este, como el post anterior sobre DSL, no prentende ser un tutorial completo de como crear un DSL como gradle; mas bien, intenta dar una mirada y explicar como comenzar para entonces SI, llegar a crear un DSL.

Comenzare con el siguiente ejemplo :

Integer.metaClass.toString = {
    return "El numero es " + delegate
}

println 5.toString()

Tal vez algunos pregunten "y por que querria hacer esto con un Integer si ya cuenta con un metodo toString() ?", la respuesta seria: "no se", pero sirve como ejemplo para resolver otros problemas o necesidades sobre clases (incluso finales como String) del JDK.

Ahora, "¿la sobreescritura de un método del JDK tiene efecto desde todas las clases, o solo durante el código donde se ejecuta?", la respuesta es: si, tiene efecto en toda la máquina virtual, pero solo dentro del código de las clases de Groovy, nunca dentro de una clase Java.

Pllugin para Grails que permite integrar código Scala

Hola,

Acabo de publicar una nueva versión del plugin de Grails que permite tener código Scala en una aplicación Grails. En breve, lo que hace este plugin es invocar al compilador de Scala con los fuentes que encuentre en el directorio src/scala y src/java de una aplicación Grails, deja los binarios en el classpath para que sean usados por artefactos Grails. Cualquier controller, servicio, taglib, etc. de Grails puede usar los binarios de Scala. La única limitante por ahora, es que desde código Scala no es posible acceder a artefactos Grails, esto debido a que no se cuenta con un joint-compiler entre Grovy/Scala. Solo existe entre Java/Scala.

Esta ultima versión, incorpora soporte para la mas reciente versión estable de Scala, la 2.9.1. Espero les sea tan útil como lo es para mi.

Ya se encuentra publicado en el repositorio oficial de plugins de Grails:
http://grails.org/plugin/scala

Distribuir contenido