Buscar
Social
Ofertas laborales ES
jueves
abr282011

Java seguirá llegando a Mac OS X con retraso (al menos en Java 7)

Parece que hay algunas cosas que no van a cambiar respecto a cuándo Sun era la compañía que estaba al frente de Java. Y una es que las nuevas versiones de Java seguirán llegando a Mac OS X con retraso (al menos en lo que a Java 7 respecta). Esta semana Oracle ha publicado información sobre las plataformas que soportará inicialmente Java 7.


Java 7 estará disponible el 28 julio para las plataformas recogidas en esta lista. En general, son todas las que uno espera, con dos excepciones. Una es soporte para Itanium, tanto para Windows como para Linux. En este caso no es que vaya a haber un retraso; es que Oracle no tiene intención de liberar la versión de Java para esta plataforma porque hay poca gente interesada en ella.


La segunda excepción es Mac OS X. En este caso Oracle y Apple se habían comprometido a trabajar juntos para crear un porte del OpenJDK para la plataforma de Apple. Hasta esta versión de Java, Apple era quien desarrollaba en soporte de Java para Mac. Pero recientemente anunciaron que no tenían intención de seguir haciendo esto.


Por ahora, lo único que nos dice Oracle es que Java para Mac OS X estará disponible "en algún momento después de que se publique el JDK 7 para el resto de las plataformas".


¿Cuántos de vosotros desarrollais aplicaciones Java en Mac? ¿Tenéis miedo de que vuestra plataforma deje de ser idónea para el desarrollo Java? ¿Creéis que existe la posibilidad de que la experiencia de un JDK basado en el OpenJDK sea subóptima comparada con usar los JDK que desarrollaba Apple? ¿Ha habido alguien que ya haya abandonado Mac por estos continuos retrasos a la hora de actualizarse a nuevas versiones de Java?

miércoles
abr272011

Efficient Java Matrix Library (EJML): librería para trabajar con matrices

Efficient Java Matrix Library (EJML) es una librería 100% Java para trabajar con matrices. Soporta las operaciones básicas de suma, multiplicación, trasposición... además de solución de sistemas de ecuaciones, descomposiciones (LU, QR, Cholesky, SVD, Eigenvalue entre otras), generación de matrices aleatorias, y otras muchas operaciones.


Aquí tenéis un ejemplo de cómo funciona:

SimpleMatrix A = new SimpleMatrix(m,n);SimpleMatrix b = new SimpleMatrix(m,1);
//inicialización de las matrices
try {  
      SimpleMatrix x = A.solve(b);
} catch ( SingularMatrixException e ) {  
      throw new IllegalArgument("Singular matrix");
}

 


Aquí tenéis el manual de la librería y aquí un listado de ejemplos. La librería se encuentra ahora mismo en su versión 0.16, pero parece tener suficiente funcionalidad y estar suficientemente estable para ser útil en proyectos reales.

 

 

miércoles
abr272011

Groovy 1.8 publicado al fin

Ha sido publicada la nueva versión del lenguaje Groovy, la 1.8, que es una versión que los comitters del proyecto han estado trabajando por varios meses. En esta versión se incluyen importantes mejoras, que puedes leer en las Release Notes, entre ellas  destacan:

Cadenas de comando para mejores DSL.

En Groovy, se pueden omitir los paréntesis para invocar a un método; lo que facilita la creación de DSLs. Sin embargo, no se podía hacer si se encadenaban invocaciones a métodos. En la 1.8 ya es posible, así podemos pasar de esto:

 check(that: margarita).tastes(good)

a un DSL mucho más legible:

 check that: margarita tastes good 

Un ejemplo completo de las Release Notes:

show = { println it }

square_root = { Math.sqrt(it) }

def please(action) {

  [the: { what ->

    [of: { n -> action(what(n)) }]

  }]

}

please show the square_root of 100 

Mejor performance

La desventaja que la mayoría señalan de Groovy es sin duda el performance, lento en comparación a Java. En esta versión se ha mejorado el soporte a Integers. Las operaciones con este tipo de datos es tan rápida como en Java y se ha mejorado la parte de invocación directa a métodos. Además se ha creado un branch en el proyecto donde se irán incorporando poco a poco otras mejoras, como el uso de primitivos donde sea posible.

Soporte a JSON nativo

Ahora tenemos un JSONBuilde y un JSONSluper que nos ayudan a generar y leer documentos en ese formato

GPars es parte de la distribución oficial

El proyecto de Paul King: GPars, ahora vendrá en la distribución oficial. Este proyecto permite construir aplicaciones concurrentes, asíncronas y distribuidas con Groovy. Para ello tiene soporte para ejecutar closures de forma asíncrona, trabajar con colecciones de forma paralela y Actores para procesamiento concurrente.

Transformaciones AST.

Para mi, lo que más he esperado de Groovy 1.8. Los que pudistéis asistir al Spring I/O, Andrés Almiray dio una charla donde explicaba el gran número de transformaciones AST que se han agregado a esta versión. Estas transformaciones permiten mediante anotaciones indicarle al compilador de Groovy que haga modificaciones en el Abstract Syntax Tree para agregar comportamiento a una clase que antes no tenía. Por lo que tienen mejor performance que usar el antiguo método de modificar la meta clase y además este comportamiento vendrá en el bytecode logrando que desde otros lenguajes de la JVM puedan "verlo".

Entre las más interesantes:

@Log, @Log4j, @Commons, @SLF4J -> agrega un logger a tu clase  con la implementación que hayas puesto.

@EqualsAndHashCode -> construye el método equals y el hashcode basado en los atributos de tu clase

@ToString -> autoexplicativo

@WithReadLock, @WithWriteLock -> simplica el uso de java.util.concurrent.locks.ReentrantReadWriteLock para construir el típico mapa para cache thread safe:

 

class ResourceProvider {

    private final Map data = new HashMap<>()

    @WithReadLock

    String getResource(String key) {

        return data.get(key)

    }

 

    @WithWriteLock

    void refresh() {

        //reload the resources into memory

    }

Enhorabuena al equipo de Groovy que han seguido trabajando en mejorar uno de los lenguajes más populares de la JVM. 

 

Los que estáis interesados en aprender Groovy aquí podéis acceder a dos videos- tutoriales introductorios (en español). Y los que cree saber más sobre DSL en Groovy podéis ver estos otros dos videos (también en español). 

 

 

martes
abr262011

Ratpack: un framework ligero para Groovy basado en Sinatra

Sinatra es un framework para desarrollar aplicaciones web con Ruby muy ligero y sencillo. Tan sencillo que su creador lo considera un DSL para crear aplicaciones web. Surgió por la necesidad de desarrollar de forma rápida y ágil, sobre todo aquellos proyectos que no necesitaban cosas tan completas como las proporcionadas por Rails.

El éxito de este paradigma ha sido muy importante y ya hay frameworks parecidos en otros lenguajes  como Flask para python y Scalatra para Scala. Ahora es el turno de Groovy con Ratpack.

Ratpack permite construir aplicaciones web usando la idea de Sinatra: mediante pequeños métodos que se mapean a una ruta:

get("/") {

    "Hello, World!"

}

Así que de esa forma tan sencilla y unido a la sintaxis de Groovy enfocada a la simpleza y a mejorar la velocidad de desarrollo, tenemos una opción muy buena para crear proyectos rápidamente e ideal para prototipos.

Ratpack es desarrollado por Justin Voss y es open source bajo la licencia Apache 2. Puedes mirar más ejemplos de su funcionamiento en el github del proyecto.

 

martes
abr262011

Oracle anuncia Hudson 2.0.0

Oracle ha anunciado Hudson 2.0.0. Además de nuevas características, esta versión trae un nuevo sistema de versiionamiento diferente del que Hudson (y Jenkins en la actualidad) venía usando. En este esquema el primer dígito indica cambios mayores, el segundo cambios menores y el tercero corrección de bugs. En el esquema anterior, todas las nuevas versiones (excepto las mayores) continuaban incrementando un número que venía después del número de la versión mayor.


Las principales novedades en Hudson 2.0.0 son un soporte de inyección de dependencias al estilo del JSR-330, la opción de realizar un "clean" antes del build y algunas pequeñas mejoras en otras áreas. Desde mi punto de vista, no justifican una versión mayor "2.0", sino que parece que la revisión mayor esta más bien justificada por el cambio en el esquema de versionamiento.


¿Cuántos por aquí seguís usando Hudson? ¿Y cuántos os habéis pasado a Jenkins?