lunes, octubre 02, 2006

Analizando aplicaciones en producción

Buscando algo de información sobre herramientas para realizar profiling encontré un blog que hablaba sobre el problema de que hacer cuando necesitamos hacer profiling de una aplicación que esta en producción.

Este problema generalmente surge por problemas de performance en la aplicación, por lo que si metemos un profiler la performance se vera todavía mas afectada.

Afortunadamente se pueden tomar snapshots de la ejecución de una aplicación java a partir de Java 5 update 7 y de Java 1.4.2_12, estos snapshots pueden ser analizados con algunas herramientas que permiten obtener información bastante interesante como esta corriendo la aplicación y recursos que se están utilizando.

Podran encontrar mas informacion en estos links:

Blog que discute el tema de HEAP DUMP en Java

Herramientas para analizar HEAP DUMPS

viernes, junio 02, 2006

Explorando nuevos usos de Jabber

Estaba mirando un poco JMS y decidí bajar el Websphere CE para hacer pruebas, cuando voy a al configuración del servidor de JMS encuentro que puedo agregar un Jabber Listener.

Esto me hizo recordar inmediatamente un evento al que había asistido de Oracle, donde en una de las demos que había, mostraban una aplicación que se accedía desde un cliente de IM que podía acceder servidores Jabber, donde el sistema desplegaba un menú y el usuario indicaba mediante un numero que opción quería y el sistema le respondía nuevamente con la información que había solicitado.

En ese momento se me ocurrieron sistemas interactivos para una mesa de ayuda, o para consultas de datos, todo es valido como opción para poder exponer información.

Me puse a ver un poco y encontré otra forma de usar Jabber dentro de una aplicación, y es combinado con Log4J, me parece muy interesante ya que puede servir para mandar mensajes a un administrador o a alguien que este monitoreando determinada aplicación.

Aca dejo la URL del artículo para que lo vean, de paso es un buen ejemplo de como construir appenders para Log4j.


lunes, mayo 29, 2006

JavaScript The Objec tWay

Estuve trabajando un poco con algunas cosas que estaban hechas con JavaScript, y tenia que introducir un pequeño cambio en algo que se suponía debería ser sencillo, afortunadamente no lo fue, y tuve que ponerme a refactorizar todo el código que estaba escrito en una forma totalmente procedural utilizando el nefasto estilo spaghetti.

Tarde o temprano iba a tener que meterle algo de mano a cosas hechas en JavaScript, y como esas que uno espera nunca tener que hacer, llego ese momento.

Recordé que una vez escuche que en JavaScript se podía llegar a trabajar en una forma bastante “objetosa” así que decidí ponerme a investigar un poco y encontré que efectivamente se puede y que además se pueden hacer cosas bastante interesantes que ni me imaginaba.

Por ejemplo, se pueden crear Clases y generar instancias de estas, se puede llegar a construir una herencia con un mecanismo que se llama prototipado:
Clases con JavaScript:

function Reporte() {
this.inicializar = function(e) {
window.alert("Esto es una prueba de prototipos con JS");
}

this.testTrue = function(e) {
return false;
}
}

function main() {
var aReporte = new Reporte();
aReporte.inicializar();
if(aReporte.testTrue()) {
window.alert("La validacion dio verdadera");
}
}

En el ejemplo se ve como se crea una Clase llamada Reporte, esta clase contiene una funcion llamara inicializar, que emite un mensaje y en la funcion main se ve como se usa la clase Reporte

Herencia con JavaScript

function superClass() {
this.supertest = superTest;
}

function subClass() {
this.inheritFrom = superClass;
this.inheritFrom();
this.subtest = subTest;
}

function superTest() {
return "superTest";
}

function subTest() {
return "subTest";
}

var newClass = new subClass();
alert(newClass.subtest());
alert(newClass.supertest());


Esto es un poco de lo que vi hoy, dejo algunos links que me sirvieron bastante.



domingo, mayo 28, 2006

Ciencia Ficción en Bits

Hace poco encontré un viejo Diskette de cuando estaba cursando en la secundaria en 4to año, algunos eones atrás, increíblemente estaba etiquetado, algo que solo hacia con discos que realmente creía interesantes.
Lo que decía la etiqueta era
AXXON , repentinamente recordé que era el contenido del disco, una revista!!

La revista AXXON era una publicación de ciencia ficción gratuita que se distribuía en Diskette, estaba hecha creo en Turbo Pascal, usando programación grafica, incluía en sus cuentos imágenes y enlaces estilo HTML, y eran muy buenas historias.
Buscando en Google encontré que tienen una pagina y que hoy es aun mas interesante que cuando la conocí, así que si les gusta el genero les recomiendo que se den una vuelta y disfruten de buenas historias.



jueves, mayo 25, 2006

Había una vez AJAX

El desarrollo WEB que comenzó hace varios años era puramente estático con paginas escritas en HTML que podían tener vínculos con otros documentos, una evolución de este modelo fue las paginas dinámicas que por medio de procesos generaban el código HTML que se presentaba, estos procesos de los denominaba programas CGI y permitían que se acceda a bases de datos y que los contenidos sean mostrados en paginas HTML.

Ese modelo sirvió bastante tiempo pero tenia falencias como el tiempo de ejecución o la cantidad de pedidos que podían ser servidos en un momento determinado, debido a que los programas CGI se ejecutaban en un proceso distinto por cada request que atendían.

Como consecuencia de esto aparecieron otras soluciones que básicamente solventaban los problemas de escalabilidad del modelo CGI. Surgieron servidores que podían correr estos procesos de una manera mucho mas rápida y sin el overhead de la creación de procesos, en esa época Netscape con su servidor WEB tenia un conjunto de librerías llamadas NSAPI y Microsoft con su IIS tenia las ISAPI.

Luego apareció Java que de a poco iba ganando espacio en la WEB y surge un modelo que conceptualmente se parecía a los Netscape y Microsoft, los Servlets, pero con algunas cosas que los hicieron particularmente atractivos para los desarrolladores, y era la simplicidad con la que se podía crearlos, en contrapartida con los modelos de Netscape y de Microsoft.

Pero resulta que el modelo del request y del response para refrescar los datos de la pantalla no había presentado una evolución en todo este tiempo, esto fue así hasta que Google comienza a desplegar aplicaciones como Gmail donde uno podía ver como una aplicación WEB se comportaba casi como una aplicación del tipo Desktop, esto despertó la curiosidad de muchos y es donde se comenzó a hablar de AJAX.

Hoy en día ya nadie se sorprende de ver una aplicación donde las paginas cambian su contenido sin que se realicen refrescos de la misma, es mas hoy es algo que resulta ya molesto tener que refrescar las paginas para cargar la información de un combo.

Pero como con todas las tecnologías que emergen en un principio son algo complicadas y muchas veces caemos en tareas repetitivas o en modelos donde las cosas no son manejables o reutilizables.

La batalla de los entornos de desarrollo como Java y .Net puede llegar a tornarse desiciva si alguno de estos logra abstraer todo esta complejidad y ocultarla al desarrollador.

Microsoft ya esta trabajando en un framework llamado ATLAS que proveerá componentes para ASP .Net que trabajaran con AJAX.

Para Java hay también bastantes frameworks de presentación que están dando soporte para AJAX, y además existe un framework para utilizar de GOOGLE, estuve dándole una mirada a los ejemplos y me pareció excelente el enfoque que dan para poder abstraer la complejidad de desarrollar con esta tecnología , el framework se llama GWT (Google Widget Toolkit)

Que será el próximo paso en la evolución de la WEB ? La WEB Semántica? Nuevos protocolos con estado?

jueves, mayo 05, 2005

Herramienta para detectar cambios en una API

Un problema que suele presentarse cuando se trabaja con librerías de terceros son los cambios que se pueden realizar entre una versión y otra, muchas veces sucede que no hay buen manejo de estos cambios y la documentación es prácticamente nula.
Un podría seguir utilizando la versión actual pero la gran mayoría de las veces uno se ve forzado a hacer estos cambios porque la nueva versión contiene importantes mejoras con respecto a las anteriores o arreglan bugs.
Las soluciones que se pueden llegar a plantear es reemplazar la API correr un test de regresión y verificar que todo siga funcionando como se esperaba, o en el caso lamentable de no tener forma de testear la aplicación cambiar la API y cruzar los dedos!!
Para cualquiera de los casos anteriores primero debemos reemplazar la API, lo ideal seria poder tener un filtro previo como para poder lograr mayor visibilidad del cambio que se esta por realizar, una forma de poder lograr esto seria comparando las versiones de la API, la que esta en uso y la que se quiere usar para reemplazar y verificar los cambios que hay entre una y otra, esta es una tarea que puede llegar a ser demasiado costosa en tiempo, pero afortunadamente hay una herramienta que nos puede dar una buena mano para realizar esta tarea JDiff lo que hace Jdiff es generar un reporte en HTML con el formato de un JavaDoc con las diferencias que contiene una API con respecto a la otra, muestra los métodos que se agregaron, los que se eliminaron, etc... en la pagina hay varios ejemplos de comparaciones de API.

miércoles, abril 27, 2005

JVM para testear Sistemas de la NASA

La NASA hizo publico y open source una JVM que permite encontrar dentro de un programa los flujos que pueden llevar la ejecucion a un estado en la cual la misma seria inestable.

Según los creadores es capaz de econtrar excepciones mal manejadas, problemas de deadlocks, y que esta especialmente pensado para poder testear aplicaciones multithread.

El proyecto esta hosteado en source forge y su nombre es Java PathFinder

martes, abril 26, 2005

Patrones de diseño

Desde la aparicion en 1995 de el libro Design Patterns: Elements of Reusable Object-Oriented Software de los autores Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides mas conocidos como GoF (Gang of four) el movimiento detrás de los patterns tuvo un auge muy grande.

Surgieron descenas de libros tratando sobre el tema y esto se debe a que los patterns son soluciones probadas y practicas a problemas que son bastante comunes en un determinado dominio, una de las ventajas es que incorporan al dominio del profesional de sistema nuevos lexicos que son comprendidos de manera inmediata y permiten que uno pueda abstraerse de detalles muy complejos que tienen que ver con el dominio de la solucion, como ejemplo uno puede decir “Una factura es un composite de items” y esto ya nos podria dar una idea de que es lo que estamos queriendo hacer.

Debido a esto es que los patterns cobraron una gran importancia dentro de la comunidad de sistemas. A continuacion detallo algunos links bastante interesantes como para poder tener como referencia o como para poder introducirse en el tema.

 

 

Estos son solo algunos de los muchos sites que ahora se dedican a hablar sobre este tema, tambien han aparecido en su momento libros de J2EE patterns, cuando la tecnologia J2EE todavia era muy nueva y muchos de los patrones que aparecian en ese catalogo todavia no podian calificar para entrar en esa categoria, por el hecho de no ser soluciones ampliamente utilizadas, como consecuencia algunos de estos patterns an quedado deprecados porque no resultaron ser tan buenas soluciones como se las vendia.

miércoles, abril 20, 2005

Mule 1.0 ESB

Esta disponible la version 1.0 de Mule este framework permite conectar componentes a travez de canales heterogeneos.
Esta basado en ESB (Enterprise Service Bus Architecture). Mule maneja la interaccion de los componentes en forma transparente sin importar que estos residan en distntas VM y sin importar el protocol de transporte.

Breve Resumen de las caracteristicas (extraido del sitio)

Key Features

  • J2EE 1.4 Enterprise Service Bus (ESB) and Messaging broker
  • Pluggable connectivity such as Jms (1.0.2b and 1.1), vm (embedded), jdbc, tcp, udp, multicast, http, servlet, smtp, pop3, file, xmpp.
  • Support for asynchronous, synchronous and request-response event processing over any transport.
  • Web Services using Axis or Glue.
  • Flexible deploment [Topologies] including Client/Server, Peer-to-Peer, ESB and Enterprise Service Network.
  • Declarative and Programmatic transaction support including XA support.
  • End-to-End support for routing, transport and transformation of events.
  • Spring framework Integration. Can be used as the ESB container and Mule can be easily embedded into Spring applications.
  • Highly scalable enterprise server using the SEDA processing model.
  • REST API to provide technology agnostic and language neutral web based access to Mule Events
  • Powerful event routing based on patterns in the popular EIP book.
  • Dynamic, declarative, content-based and rule-based routing options.
  • Non-Intrusive approach. Any object can be managed by the ESB container.
  • Powerful Application Integration framework
  • Fully extensible development model

When to use Mule

The common scenario for using Mule -

  • Integration projects where two or more existing systems need to communicate with each other.
  • Applications that need to be totally decouple from their surrounding environment or where the ability to scale one more components in the system is needed.
  • Single VM Applications where the developer wants to future-proof their application against unexpected distribution or scaling requirements. Mule works very well as a single VM application where interaction between components in the system is achieved in memory with no detectable degradation in performance.

Kiara!


Aca les presento a Kiara la segunda integrande del Team!, en esta foto justo estabamos haciendo un poco de Pair Programming! Kiara ya cuenta con una gran experiencia en el area, apenas me ve trabajando se apura a gatear para darme una manito :-)

martes, abril 19, 2005

Testeo de aplicaciones Web Con Eclipse

SOLEX

Es el nombre de este plugin que permite testear aplicaciones WEB corriendo como plugin desde eclipse, según los autores del mismo, lo hicieron para ser usado sobre un producto que estaban desarrollando, lo cual significa que el producto deberia de tener un nivel de madurez considerable, pero tambien que por ahí no sea tan general como para cubrir las necesidades de otros proyectos.

Leyendo la pagina del producto no vi que hubiera una forma de poder correr el producto en forma standalono, con lo cual el tema de la automatizacion se torna bastante complicado.

En la pagina van a ver que hay una breve explicacion que explica como se puede arrancar usando SOLEX en un proyecto.

Este es un pequeño resumen sacado de la Pagina de SOLEX de lo que el mismo es capaz de hacer.

What can I do with Solex?

  • Solex can record HTTP messages by acting as a Web proxy.
  • Recorded sessions can be saved as XML and reopened later.
  • HTTP requests and responses are fully displayed in order to inspect and customize their content, thanks to replacement rules.
  • Solex allows the attachment of extraction or replacement rules to any HTTP message content, HTTP header or URL parameter.
  • Recorded requests can be filtered to remove or disable unwanted resources, like .jpg, .gif.
  • Solex allows the attachment of assertions to responses in order to validate a scenario during its playback.
  • Solex can replay an HTTP session request by request or all requests at once.
  • Playback results can be exported as XML with an optional XSL transformation.

ACEGI Security system For Spring

Este framework de seguridad esta integrado para trabajar con Spring.
Entre los puntos mas destacados del mismo se encuentran:

  • Single Sign On
  • Domain Object Instance Security
  • Integracion con Tomcat, Jetty, JBoss y Resin
  • Soporte de eventos por medio de Spring utilizando ApplicationEvent Sevices
  • Soporte para control remoto

Entre otras cosas el site dice que el proyecto tiene bastante documentacion.

Site: http://acegisecurity.sourceforge.net/

Java Best Practices

Este sitio contiene algunas recomendaciones sobre algunas de los errores mas comunes cometidos cuando se desarrolla con Java.
Esta dividido en secciones y es sorprendente (al menos para mi lo es) que no tenga una seccion de Testing , donde explique algunas buenas practicas de este topico.
Justamente sobre ese topico encontre Test using main method el cual no me parece para nada una buena practica, de todas formas se hace referncia al uso de JUnit

Site: Collected Java Practices

Mora!!


Aca estoy con mi asistente numero uno que se especializa en testear Mouse y teclados y demas accesorios conectados a una pc utiliza unas tecnicas muy particulares que no quiere dar a conocer, pero, siempre encuentra un desperfecto en los aparatos y estos quedan fuera de servicio, ya testeo dos teclados, un mouse analogico uno optico y el cable USB de mi pocketpc! por las dudas no le voy a dar a probar las cosas que desarrollo yo :-$

viernes, abril 15, 2005

Emerging Technologies Toolkit - Technologies

En el site de DeveloperWorks encontre una seccion muy interesante sobre algunas herramientas que esta promocionando IBM.
Desde Eclipse se pueden instalar algunas como un editor de documentos compuestos para XML
el Update site para instalarlo es http://awwebx04.alphaworks.ibm.com/ettktechnologies/updates
Para esto es necesario crearse una cuenta en developerWorks que es gratis y aceptar los terminos de la licencia del mismo.

La pagina donde pueden encontrar estas herramientas es: ETTK