Bienvenido a Java Mexico

Java México es una comunidad de desarrolladores mexicanos en el lenguaje Java.

Este sitio es colaborativo, automáticamente al registrarte obtienes un Blog para compartir tus conocimientos o información acerca del lenguaje. Antes de publicar en tu blog o los foros por favor lee los lineamientos de publicación.

Para dudas y problemas con respecto al lenguaje Java puedes visitar los Foros de Discusión.

También puedes responder nuestra encuesta para saber en que estado vives!

Drone.io, Integración Continua en unos cuantos pasos

Les quiero compartir lo fácil y sencillo que es usar Drone.io para Integración Continua (CI) de su proyecto.

En este caso lo usé como prueba en un repositorio donde se está gestando la v2 del portal de javaMexico.org, el cuál está en Github: https://github.com/javamexico/javamexico.org

Drone.io se integra automáticamente con tres servicios tanto para hacer login como para obtener el código de los proyectos que quieras construir:

  • Github
  • Bitbucket
  • Google Code

Esto es ventaja y desventaja, ya que es extremádamente fácil configurar un proyecto que esté en cualquiera de esas tres opciones, pero si tu proyecto no está en alguna de ellas Drone.io (al momento) no lo podrá construir.

La cuenta gratuita permite dar de alta cualquier cantidad de repositorios siempre y cuando sean públicos (proyectos de código libre), de lo contrario se puede adquirir un plan para repositorios privados.

Concurrencia en Java Parte 2

Hola,
Comparto la segunda parte de un tutorial que cree del API de concurrencia en Java, para quien le interese.

http://jrlq.blogspot.mx/2013/05/concurrencia-en-java-parte-2.html

Concurrencia en Java Parte 1

Hola,
Comparto la primer parte de un tutorial que cree del API de concurrencia en Java, para quien le interese.
http://jrlq.blogspot.mx/2013/04/concurrencia-en-java-parte-1.html

Web Services en Axis2 con Spring y Gradle

Recientemente en un proyecto un cliente nos dijo que la interfaz entre nuestros sistemas sería... esperen... sí... un web service. Un web service que ellos invocarían y que por lo tanto nosotros tenemos que implementar. Así que nos dieron un par de archivos WSDL y unos ejemplos de XML para asegurarnos que salga como debe ser (no entiendo para qué, si todas las herramientas de generación de web services se encargan de que el XML siempre salga como debe ser, ¿verdad?).

Cuando tengo que invocar un web service, generalmente uso Axis2. Me ha resultado de lo más sencillo porque consiste simplemente en ejecutar el script wsdl2java dándole el URI del WSDL y con eso tengo una clase que puedo usar para invocar los servicios (junto con mil clases internas que envuelven los datos dentro de envoltorios intermedios porque parece que los de Axis entendieron OOP como Onion-Oriented Programming). Así que en esta ocasión decidí probar el otro lado de la implementación: publicar un servicio hecho con Axis2.

JBoss AS ahora se llamara WildFly

Parece que JBoss AS ahora se llamara WildFly. Fue renombrado para reducir la confusion. El termino JBoss se referia tanto al application server, como a la comunidad y la linea de negocios

Las caracteristicas que mas me llaman la atencion son:

  • Arranque en menos de un segundo
  • Soporte para non-blocking I/O y web sockets
  • No mas jar hell a traves del uso de un diseño modular que permite cargar solo las bibliotecas que necesitas
  • Diseñado para ser probado mediante integracion directa con Arquillian

El repositorio en GitHub ya esta disponible

La version Alpha sera liberada pronto... ojala que cuando eventualmente WildFly llegue a GA, cumpla con todo lo que promete...

Una perspectiva del uso de tuplas en Groovy!

El uso de Tuplas en Groovy me parecía algo innecesario, ya que el lenguaje cuenta con listas muy agradables y un método que permite hacerlas inmutables.

def lista1 = ["Rodrigo", 30]
lista1.collect{ it }

def lista2 = ["Rodrigo", 30].asImmutable()
println(lista2.getClass())
lista2[0] = 'Rambo!'

/**
class java.util.Collections$UnmodifiableRandomAccessList
...
java.lang.UnsupportedOperationException
        at java.util.Collections$UnmodifiableList.set(Collections...
*/

Y porque hacer algo como lo anterior si Groovy cuenta con tuplas (groovy.lang.Tuple).

def tuple = new Tuple("Rodrigo", 30)
println(tuple)
java.util.Collections.reverse(tuple)

/**
[Rodrigo, 30]
...
java.lang.UnsupportedOperationException
        at java.util.AbstractList.set(AbstractList
*/

No se si sea mejor usar listas inmutables en lugar de tuplas, pero una queja es que no se puede hacer una tupla como lo haría con una lista ([...]), como lo siguiente.

def tuple = (“Rodrigo”, 30)

/** expecting ')', found ',' at ... */

Google App Inventor for Android, instalación local.

En mis ratos de ocio, encontré que existe un proyecto de software libre llamado App Inventor (y de la cual también existe información en español); dicho proyecto ofrece un asistente gráfico para android, algo muy útil para diseñar pantallas, si no se tiene un IDE instalado ( se puede configurar remoto).

La interface ya existe, y lo único que te pide es entrar con tu cuenta de google para mostrarte una interface como ésta:

app inventor

Y bueno, después me pregunté, si es Open source, podrías tener dicho app inventor en local (digo, para aquéllos paranoicos que no quieren soltar su cuenta de google), así que me dí el tiempo para configurarlo localmente en mi máquina.

Bien se pueden bajar el paquete específico por plataforma desde acá; o bien, bajarse los fuentes del proyecto del Github desde acá.

Aplicar Efecto Sepia

Aplicar Efecto Sepia

Hace ya unos dias que he estado jugando con los filtros y efectos sobre imagenes desde java, en la mayoria de los casos manipulando los valores RGB de cada pixel, espero les sea de interes, pueden ver mas de 15 filtros que he publicado en My Java Zone

Imagenes

Codigo

Clase Principal

package clases;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

Comparativo de desempeño para formato de fechas

Comparto esto para los que tengan la misma duda que yo tenía: Saber si es más rápido usar String.format o un SimpleDateFormat para formatear una fecha.

Es claro que String.format puede ser más simple de codificar, sobre todo en ambientes concurrentes, ya que SimpleDateFormat no es thread-safe y por tanto hay que usarlo solamente de manera local o bien envolverlo en un ThreadLocal.

Pero pues hice un programa muy simple en Groovy para comparar el performance de ambos:

import java.text.SimpleDateFormat

SimpleDateFormat df = new SimpleDateFormat('yyyyMMddHHmmss')
Date now = new Date()
//calentamiento
10000.times {println df.format(now)}
10000.times {println String.format('%tY%<tm%<td%<tH%<tM%<tS', now)}
System.currentTimeMillis()

long t0=System.currentTimeMillis()
10000.times {
    df.format(now)
}
long t1 =System.currentTimeMillis()
10000.times {
    String.format('%tY%<tm%<td%<tH%<tM%<tS', now)
}
long t2 = System.currentTimeMillis()
println "SimpleDateFormat: ${t1-t0} vs String.format: ${t2-t1}"

jQueryMobile para movil WEBApps

Hace tiempo me eché un clavado en el desarrollo de aplicaciones para dispositivos móviles enfocado exclusivamente en dispositivos de Apple y al trabajar con el XCODE logré concluir un minijueguito de pong el cual fue mi proyecto final de tesis, durante el proceso realice varios "pininos" con diversas herramientas que me permitian crear interfaces graficas compatibles con pantallas tactiles, entre los cuales se encuentra el InterfaceBuilder utilería interesantisima que forma parte del kit de herramientas que disponemos con XCODE, pues para no hacer el cuento largo, la creación de interfaces graficas con estas herramientas es muy sencilla, basta con arrastrar los componentes y configurarlos de la menara correcta... pero eso es otra historia.

Distribuir contenido