Integración continua en proyectos de desarrollo

1 Diciembre 2008 por Giancarlo Corzo 3 comentarios »

El siguiente artículo trata de un nuevo concepto que ha empezado a hacerse popular para el desarrollo de proyectos, sobre todo los que están basados en metodologías ágiles.

¿Qué es Integración continua o Continuous integration?

Según Martin Fowler, escritor de libro “Continuous integration – Improving software quality and reducing risk”, el concepto de integración continua se define como sigue:

“Es una práctica de software donde los miembros del equipo de trabajo integran su código de manera frecuente, dando así multiples integraciones por día. Donde cada integración forma parte de un Build (Integración, Construcción, Pruebas, Despliegue, entre otras cosas). ”

El proceso normal que se sigue en un esquema de trabajo CI es como sigue:

  1. Los desarrollares envían sus modificaciones al controlador de versiones (SVN, CVS, etc).
  2. El Servidor de integración continua monitorea el repositorio buscando cambios y ejecuta automáticamente el build.
  3. Una vez finalizado el proceso de build (integración, construcción, pruebas y despliegue) el servidor envía a los reponsables un email con el resultado del proceso (feedback del proyecto).
  4. El servidor realiza el paso 2 continuamente.

Como puede verse el proceso es relativamente simple pero en muchos proyectos no se realiza ésto que es tan elemental y que a la larga mejora el proceso de desarrollo y evita problemas.

Las ventajas de usar este esquema de trabajo:

  • Los problemas de integración son detectados rápidamente y pueden ser corregidos con la misma celeridad, no hay porque integrar 1 vez al mes y estar corriendo contra el reloj para detectar problemas.
  • Código que rompa el build es detectado automáticamente al tener un feedback automático.
  • Las pruebas unitarias corren cada vez que se ejecuta el build lo cual permite que el desarrollador pueda darse cuenta rápidamente de cualquier error en su código.
  • Existe un mecanismo de despliegue automatizado donde el código producido puede ir a parar a los distintos servers (development server, testing server, production server).

Algunos CI servers open source que se pueden utilizar son:

Algunos CI server pagados que se pueden usar son:

Antartec usa integración continua

Antartec se encuentra en el proceso de implementar un servidor CI para mejorar el proceso de desarrollo de todos nuestros proyectos, para lo cual se realizó la siguiente evaluación:

  • Actualmente en Antartec utilizamos la siguiente combinación para el desarrollo Maven y Subversion.
  • El Servidor CI en evaluación es Hudson.
  • El repositorio de dependencias en evaluación es Hudson ya no es necesario implementar un servidor de dependencias por separado puesto que Hudson ya lo trae incluido.
  • Los Servidores de aplicaciones para dev, test, prod dependiendo del tipo de proyecto pueden ser Tomcat, JBoss, Apache, etc.

La arquitectura propuesta

Basado en el trabajo realizado por Henry Carrión, miembro de Antartec, sobre Integración continua la arquitectura planteada es la siguiente:

Arquitectura planteada según el esquema CI

Arquitectura planteada según el esquema CI

Resultados a obtener

  • Control de cambios
  • Monitoreo constante
  • Integración de procesos
  • Retroalimentación
  • Gestión de dependencias
  • Proceso de desarrollo en base a Métricas
  • Finalmente disminuir el tiempo de desarrollo requerido para cada proyecto

Siendo este último punto el más importante dentro de esquema de trabajo de Antartec.

A manera de conclusión

El concepto de Integración continua es una forma de desarrollo de software que mejora el proceso y puesta en producción del producto desarrollado, mediante la aplicación de herramientas de automatización y mejora continua del proceso.

En Antartec se espera con este sistema mejorar nuestros procesos y tiempos de desarrollo  del software producido.

Antartec presente en el Spring Community Day Lima 2008

7 Noviembre 2008 por Otto Theo 1 comentario »

Spring User Group Perú realizó el Spring Community Day Lima 2008 el día 25 de octubre en el auditorio de Cibertec, evento al cual acudieron miembros de Antartec. En estas conferencias se tocaron temas relacionados a Spring Framework, aquí la agenda:

  • Presentación del evento.
  • Presentación de Spring Perú (Lennon Shimokawa).
  • Introducción a Spring Framework 2.5 (Lennon Shimokawa).
  • Spring Portlet MVC (Jose Luis Manrique).
  • Spring Security (Colin Fairless).
  • Spring Batch (Kenneth Delgado).
  • Extreme Testing con Spring (Abner Ballardo & Gustavo Quiroz).
  • Spring Dynamic Modules (Leonardo Torres).
  • Rueda de preguntas.

» Leer más: Antartec presente en el Spring Community Day Lima 2008

Hibernate Shard: “de lo centralizado a lo distribuido”

6 Noviembre 2008 por Jose Corcuera Sin comentarios »

Es un hecho que hoy en día las empresas se han distribuido en forma regional a lo largo del mundo, con sucursales en cada una de estas regiones, en donde se maneja el mismo aplicativo para realizar sus operaciones cotidianas. Es cierto, por ejemplo, si vamos a realizar un depósito en la sucursal X o Y de un banco específico y damos una ojeada (si es que la persona de ventanilla lo permite) a la pantalla de su ordenador, notaremos que se trata de la misma aplicación; y ésta misma trabajando con una o muchas bases de datos.

Las empresas optan por tener en cada sector su propia base de datos para el manejo de los datos locales, éste es un esquema distribuido de la información, en donde la base de datos ha sido particionada horizontalmente. La decisión de seguir este modelo se debe a cuestiones técnicas de diseño, siendo la principal: latencia en la red.

Diseñar un aplicativo que unifique la información de estas N bases de datos como si fuera una suele ser un poco engorroso debido al manejo de distintas fuentes de datos a nivel de la aplicación (datasources) y en el manejo de los recursos.

Navegando por la web me topé con un framework que realiza el trabajo mencionado en el párrafo anterior, me refiero a Hibernate Shard.

Hibernate Shard

El framework Hibernate Shard es una extensión de Hibernate Core que encapsula y minimiza la complejidad de trabajar con un modelo de datos particionado horizontalmente. Debido a que está basado en Hibernate Core, Hibernate Shards ofrece un conjunto de clases las cuales extienden de las clases base de Hibernate Core (Session, SessionFactory, entre otras).

Características

  • Se puede definir la forma en la que se hará la distribución de la data en las particiones que se tiene, siguiendo determinada lógica.
  • Si conoces Hibernate Core, entonces Hibernate Shard te resultará fácil de aprender.
  • Ofrece un mecanismo de redistribución de la data, ésto se da por ejemplo cuando se agrega una nueva base de datos; la solución es hacer uso de Particiones Virtuales. Las particiones virtuales estan asociadas a particiones fisicas, siendo éstas mapeadas una a una para luego realizar una determinada configuración.

Limitaciones

  • No se permite la relación de objetos de diferentes particiones.
  • No se tiene una implementación completa del API de Hibernate Core.
  • No soporta el uso de transacciones distribuidas, si queremos hacer manejo de esto debemos utilizar una herramienta alternativa.

Conclusión

Se puede apreciar que es una herramienta atractiva en el caso que se nos presente trabajar con un modelo de datos particionado horizontalmente, sin embargo; dado que tiene varias funcionalidades por implementar, seria bueno darle un tiempo para luego ver que tanto ha mejorado.

ExtJS lo bueno, lo malo y lo feo

22 Octubre 2008 por Giancarlo Corzo 20 comentarios »

ExtJS lo bueno, lo malo y lo feo

En el mercado actualmente existen múltiples librerías de Javascript que permiten realizar todo tipo de maravillas en el navegador web. Quién iba a pensarlo, un lenguaje al que a pocos agrada termina haciendo más por la web de lo que podríamos haber imaginado.

Una de estas librerías, sobre la que hablaremos hoy día, se llama ExtJS y tiene muchas cualidades que la hacen interesante.

¿Qué es ExtJS?

De acuerdo a la definición de la página web ExtJS es una librería Javascript que permite construir aplicaciones complejas en Internet. Esta librería incluye:

  • Componentes UI del alto performance y personalizables.
  • Modelo de componentes extensibles.
  • Un API fácil de usar.
  • Licencias Open source y comerciales.


¿Qué tiene de bueno?

Antes de poder entrar a examinar ExtJS primero tenemos que hablar sobre RIA, acrónimo de Rich Internet Applications (Aplicaciones Ricas en Internet). Lo que RIA intenta proveer es aquello de lo que siempre ha adolecido la web, una experiencia de usuario muy parecida o igual a la que se tiene en las aplicaciones de escritorio.

Las aplicaciones web tradicionales tienen problemas como la recarga continua de las páginas cada vez que el usuario pide nuevo contenido, o la poca capacidad multimedia, para lo cual se han hecho necesarios plug-ins externos.

Junto con el reto de llevar la experiencia RIA a los usuarios comenzó el debate sobre cual sería el mejor modo de atacar el problema. La historia de los últimos años nos ha traído diversas tecnologías, basadas en Flash (Adobe), Java (Sun), Silverlight (MS). Todas muy interesantes, pero con la desventaja de necesitar algún tipo de extensión en los navegadores que podría no estar presente. Ha sido esta limitante lo que le ha dado la victoria (al menos por el momento) al casi dejado de lado Javascript y la “nueva” tecnología conocida como AJAX.

ExtJS encaja dentro de este esquema como un motor que permite crear aplicaciones RIA mediante Javascript. Si enmarcamos a ExtJS dentro del desarrollo RIA, éste seria el render de la aplicación que controla el cliente y que ese encarga de enviar y obtener información del servicio.

Una de las grandes ventajas de utilizar ExtJS es que nos permite crear aplicaciones complejas utilizando componentes predefinidos así como un manejador de layouts similar al que provee Java Swing, gracias a esto provee una experiencia consistente sobre cualquier navegador, evitando el tedioso problema de validar que el código escrito funcione bien en cada uno (Firefox, IE, Safari, etc.).

Además la ventana flotante que provee ExtJS es excelente por la forma en la que funciona. Al moverla o redimensionarla solo se dibujan los bordes haciendo que el movimiento sea fluido lo cual le da una ventaja tremenda frente a otros.

Usar un motor de render como ExtJS nos permite tener además estos beneficios:

  • Existe un balance entre Cliente – Servidor. La carga de procesamiento se distribuye, permitiendo que el servidor, al tener menor carga, pueda manejar más clientes al mismo tiempo.
  • Comunicación asíncrona. En este tipo de aplicación el motor de render puede comunicarse con el servidor sin necesidad de estar sujeta a un clic o una acción del usuario, dándole la libertad de cargar información sin que el cliente se de cuenta.
  • Eficiencia de la red. El tráfico de red puede disminuir al permitir que la aplicación elija que información desea transmitir al servidor y viceversa, sin embargo la aplicación que haga uso de la pre-carga de datos puede que revierta este beneficio por el incremento del tráfico.

Lo malo

Esta es una lista de algunos puntos que encuentro negativos en las aplicaciones RIA:

  • Necesita una plataforma. En este caso dependemos de ExtJS para mostrar los componentes y hacer el render de la aplicación.
  • El javascript no es tan rápido como quisiéramos, sin embargo con la entrada de Google Chorme y el nuevo motor de Mozilla las cosas van mejorando.
  • Descargas lentas. Al ser aplicaciones grandes, especialmente porque cargan todo al inicio, hace que el tiempo de descarga sea mayor al de una aplicación web tradicional.
  • Problemas con los motores de búsqueda. Los motores de búsqueda indexan el contenido web estático por lo que los textos cargados de manera dinámica no serán encontrados.
  • Accesibilidad. Estas aplicaciones tienen problemas con los programas de accesibilidad pues, al igual que los motores de búsqueda, no trabajan bien con texto cargado dinámicamente.
  • No se pueden usar fuera de línea. Por su naturaleza web estas aplicaciones no pueden ser usadas en el cliente como cualquier otra aplicación.

En el caso específico de ExtJS existe un factor que hay que tener en cuenta y que nace del hecho de ser una librería Javascript independiente de cualquier tecnología del lado servidor. No existe una forma fácil de realizar binding entre los component visuales con el respectivo modelo, lo cual genera que el programador tenga que escribir más código para validar y enlazar los formularios.

Es difícil hacer que el servidor haga push de información desde el servidor web hacia el navegador, haciendo que el cliente tenga que constantemente hacer pooling para obtener datos actualizados del servidor.

La falta de un diseñador gráfico limita la difusión de la aplicación al no proveer una forma fácil y rápida de desarrollar en él, la situación me recuerda mucho a los inicios de Java Swing donde la falta de un diseñador gráfico limitaba su alcance.

Un problema grave del layout manager es que si usas código personalizado dentro de un componente, como por ejemplo un iframe, entonces se hace complicado lograr que se redimensione junto con el layout pues cae fuera de su control, sin embargo hay formas de lograrlo mediante código.

Lo Feo

Su sistema de licenciamiento no contempla la licencia LGPL, o tu código es 100% GPL o debes pagar por su licencia de desarrollo.

¡Hola Mundo!

22 Octubre 2008 por Javier Castillo Sin comentarios »

Hola a todos los que por alguna casualidad de la navegación web han llegado hasta acá.

Ésta es la primera entrada de este blog, con la cual inauguraremos lo que queremos sea un lugar donde podamos exponer sobre temas relacionados al desarrollo web y aquellas tecnologías que en la actualidad lo están impulsando.

Somos un grupo de profesionales con años de experiencia en proyectos de desarrollo, principalmente en Java, nos gusta la innovación y aquellas tecnologías que puedan hacer la vida más sencilla (tanto al usuario final como a nosotros).

En este blog publicaremos artículos, tanto de las tecnologías con las que trabajamos en el día a día como de aquellas que hemos evaluado y nos parecen interesantes.

Esperamos poder leer sus comentarios.