Continuum

Continuum

Continuum Chile: Agilistas y Desarrolladores Web en Java, Ruby, Rails ..Java, Python, Ruby, Javascript, Ajax, Web 2.0, ESB, SOA…
Continuum

El código de MQToolsBox ahora es Open Source.

MQToolsBox es una herramienta que construí al no encontrar nada en la web o en los SupportPacs de IBM que permitiera realizar pruebas funcionales y de carga a servicios Websphere MQ.

La herramienta permite realizar tareas básicas de administración como; vaciar una cola, colocar un mensaje de prueba con el MQMD modificado, listar mensajes y obtener el contenido de los mensajes.

El código del proyecto es abierto, y puede bajarse desde http://github.com/icpchave/MQToolsBox

Para probar necesitan las bibliotecas de Websphere MQ (com.ibm.mq.jar, com.ibm.mq.pcf-6.*.jar, connector.jar, pcf.jar); Deben agregarlas manualmente porque por temas de licencia no se pueden compartir.

Importante:

La herramienta debe ser utilizada responsablemente, pues podrían causar inconsistencias en sus ambientes borrando e insertando requerimientos en sus servicios.

Me gustaría tener feedback de tipo: aportes al código, críticas, comentarios, etc. Así es que si te quieres involucrar te doy la bienvenida.

Continuum en Encuentro Linux 2009…

Hace varios días (para ser exacto 22, 23 y 24 de octubre) estuvimos con todo el equipo de Continuum (y dos invitados especiales: Desi Mcadam y Obie Fernandez) en “Encuentro Linux 2009“, celebrando los 10 años del evento.

Continuum en Encuentro Linux 2009

Continuum, Obie & Desi en Encuentro Linux 2009

Nota: En la imagen faltan gente del equipo que estaban regados por el evento.

Resumiendo nuestra participación cronologicamente:

Llegamos tarde el día de la inaguración por problemas ajenos a nuestra voluntad :P , e incluso nos perdimos la parte donde la organización nombraba la presencia de Continuum en el evento !.

El primer día participamos de varias charlas interesante, entre las que se destacaron “Tecnologias GIS Open Source” y “Android, la plataforma movil de Google“, pero lo mejor del día fueron las ligthning talks, sobre todo recuerdo la de DNSSEC y la disertación de “DNS en un minuto”.

El viernes 23 llegó el resto del equipo, y nos fuimos a recorrer las sedes en el día distribuido, participamos en algunas charlas. Ese día se destacó en particular la charla “Benchmark y predicción en el mercado inmobiliario chileno utilizando Pentaho Suite Business Intelligence CE“.

Esa noche nos fuimos todos a celebrar a cualquier bar del bajo mundo de Viña del Mar y yo terminé compartiendo una cerveza con mi Macbook Pro (para que tomen cerveza basta con derramarla sobre el teclado) quien por suerte decidió que aún no era la hora de dejar de funcionar !…

Al otro día me tocó presentar mi charla “JRuby on Rails al rescate de J2EE“, sobre el uso del lenguaje dinámico Ruby (más exactamente el framework web Rails) sobre una plataforma J2EE para agilizar el desarrollo de aplicaciones empresariales:

Luego de mi charla, le tocó el turno a mi colega Leo Soto, quien presentó “Jython: Python para la plataforma Java”, con varios excelentes demos de diferentes escenarios donde es posible usar el lenguaje Python sobre la JVM (Leo escribió más sobre su participación en el evento en su blog) :

Finalmente y para cerrar el evento, nuevamente las lightning talks se robaron el show, y esta vez fue Obie quien le puso color el final cuando comprimió su famosa charla “The Hashrocket Way” en tan solo 8 minutos:

Queremos extender una felicitación y enviar un abrazo al equipo organizador del evento por el trabajo que realizaron y sobre todo por el trato que recibimos de su parte !, ahora nos veremos obligados a participar en próximas instancias de tan magna conferencia !.

(Un)regular expressions en Java.

Quizás haya una forma más fácil de usar expresiones regulares en Java, pero yo no la encuentro. Usarlas en JavaScript, Python o Ruby es de las cosas que hacen atractivos estos lenguajes, pero en Java cuesta hacer natural lo natural.

Mi problematica es que tengo un servicio que retorna contenido HTML, y necesito dos cosas:

1. Saber cuantos caracteres del contenido pertenecen a TAGS HTML.

2. Retornar el contenido sin HTML, o sea en texto plano.

Por ejemplo, del texto:

"Presione <b><a href="javascript:void(0)">Aqui</a></b>..."

Debo retornar ["Presione Aqui", 40]. (40 es la cantidad de caracteres dentro de los tags).

Luce sencillo a simple vista, parsear el texto en busca de patrones que se corresponden con TAGS HTML substituyendo el patrón por un caracter blanco para eliminar los TAGS y contando el length de cada patrón devuelto. O sea se hace evidente el uso de Expresiones Regulares.

A continuación mi solución para que noten lo complicado que se hace programar con expresiones regulares en Java. Si alguien encuentra una forma más natural por favor no dude en enviarmela a través de un comentario.

Primero un contenedor de expresiones regulares compiladas

// regular expression Patterns (HTML TAGS) container
private static final Pattern[] HTML_TAG_REXP;
// init
static {
    HTML_TAG_REXP = new Pattern[] {
        Pattern.compile("<(a|A).*?>"),
        Pattern.compile("</(a|A)>"),
        Pattern.compile("<(b|B).*?>"),
        Pattern.compile("</(b|B)>"),
        Pattern.compile("<(i|I).*?>"),
        Pattern.compile("</(i|I)>"),
        Pattern.compile("<(p|P).*?>"),
        Pattern.compile("</(p|P)>"),
        Pattern.compile("<(img|IMG).*?>"),
        Pattern.compile("</(img|IMG)>"),
        Pattern.compile("<(stong|STRONG).*?>"),
        Pattern.compile("</(strong|STRONG)>"),
        Pattern.compile("<(h1|H1).*?>"),
        Pattern.compile("</(h1|H1)>"),
        Pattern.compile("<(h2|H2).*?>"),
        Pattern.compile("</(h2|H2)>"),
        Pattern.compile("<(h3|H3).*?>"),
        Pattern.compile("</(h3|H3)>"),
    };
}

Al compilarlas mejoramos la performance vs usar expresiones regulares literales. (Solo coloque algunos TAGS, pero basta con agregar más a la lista).

Y a continuación el método que pasado el contenido en HTML retorna un arreglo de objetos; donde en la primera posición va el contenido en texto plano (sin los TAGS HTML) y en la segunda posición la cantidad de caracteres que pertenecen a los TAGS.

...
/**
 * @param content
 * @return [String, Integer]
 */
private Object[] removeAndCountHtmlTags(String content) {
	String result = content;
	int htmlCharCount = 0;
	for (int i = 0; i < HTML_TAG_REXP.length; i++) {
		// create the matcher against the result
		Matcher m = HTML_TAG_REXP[i].matcher(result);
		// while send a message to find a match group is true
		while (m.find()) {
			LOG.info("matcher group - " + m.group(0));
			// count the number of chars that match
                        // the group
			htmlCharCount += m.group(0).length();
			// replace first ocurrence (eliminate tags)
			result = m.replaceFirst("");
                        // and send the message again to find the next
			m = HTML_TAG_REXP[i].matcher(result);
		}
	}
	return new Object[] {result, new Integer(htmlCharCount)};
}
...

« Entradas Anteriores Entradas Siguientes »

 
Copyright © 2012 Continuum Ltda. Coronel Pereira 72. Oficina 903. Las Condes. Santiago. Chile
Tel: +56 2 9341951