jueves, junio 25, 2009

Amsterdam Trip

Next few days (till next Monday) we are going to be in Amsterdam . I´ll upload some pictures to the back.

Bye!

PD: I have some incoming posts: R grammar and ANTLR (PFC), AspectJ examples, Groovy/Grails introduction and something more.

martes, junio 16, 2009

AOP Benefits

Muchas de las críticas sobre la metodología AOP argumenta que en muchas ocasiones es demasiado complejo.

Personalmente, creo que al igual que cuando otras metodologías dieron el salto, como por ejemplo OOP, la novedad hace de ella su principal handicap.

Algunos de los beneficios del uso de una metodología AOP:

  • Responsabilidades claramente diferenciadas . Cada módulo es el responsable de su funcionalidad principal; dejando a un lado los conceptos transversales (croscutting concerns). Así por ejemplo, un módulo cuyo principal cometido es implementar la lógica de acceso a datos de un sistema de ventas por internet, no tendrá que preocuparse de realizar pooling sobre la base de datos o de la transaccionalidad. Gracias a esta clara asignación de responsabilidades conseguimos una alta trazabilidad entre los requisitos y su correspondiente implementación.

  • Incremento de la modularidad . Utilizando AOP conseguimos manejar cada uno de los conceptos de manera independiente con un acoplamiento mínimo. Incluso aunque tengamos presentes conceptos transversales que afecten en todos los ámbitos del sistema, la implementación resultante es modular.

  • Retraso en las decisiones de diseño . Cuando se arquitecta un nuevo sistema siempre aparece el siguiente dilema: ¿debemos realizar un diseño sumamente complejo y detallado que intente abarcar todas las funcionalidades,incluso las futuras? o, por el contrario, ¿debemos arquiectar una solución que se corresponda con la situación actual?.

    Gracias a AOP, el arquitecto de la solución, puede retrasar la toma de determinadas decisiones de diseño dado que los futuros requerimientos se implementarán en aspectos independientes.

  • Mejoras/Evoluciones más sencillas . AOP permite añadir una nueva funcionalidad sin más que desarrollar un nuevo aspecto (el cual no afecta al núcleo del sistema). Gracias a ello, el tiempo de respuesta ante nuevos requerimientos disminuye notablemente puesto que la implentación y diseño de los nuevos requisitos no supondrán, idealmente, una modificación del núcleo del sistema que estamos construyendo.

  • Reutilización del código .AOP establece cada uno de los aspectos es un módulo independiente, de modo que resultan independientes entre si. En general, cada uno de ellos no suelen tener conocimiento del resto de elementos que conforman el sistema final.

    El único elemento consciente del acoplamiento entre los diferentes módulos son las reglas de tejido (weaving rules) , de modo que, si cambiamos éstas, podemos componer un sistema final completamente diferente.

  • Reducción de costes. Las características descritas en los puntos anteriores generan sistemás desarrollos mucho más rápidos. Asimismo, eliminando la necesidad de modificar múltiples módulos para la implementación de un nuevo concepto que afecta al sistema completo, AOP provoca que dicha implementación sea más barata.
  • Areas de conocimiento. Permitiendo que los desarrolladores estén centrados en su especialidad lograremos que el coste del desarrollo disminuya puesto que estaremos concentrando los esfuerzos.
En siguientes post veremos una introducción a AspectJ para adentrarnos un poquito más en el mundo de la orientación a aspectos.

Hasta pronto!

miércoles, junio 03, 2009

Some New York Photos (I)

Some of our New York pictures:


Murrays bagel: ummmmm!!! Our favourite breakfast :-)


M&M´s store:


Central Park from TOR:


St Pauls Chapel
Manhattan:

New York night from Empire State:



The SDHC card has more than 750 pictures :) ; i´ll upload some of them in future posts!

Bye!!

lunes, mayo 18, 2009

New York Holidays

Next few days i will be in New York with my girlfriend :).

I´ll tell you to the back!

See you soon!!

lunes, abril 20, 2009

Maven next generation

Presentación sobre Maven 3 de Jason van Zyel en el Maven Meetup del 19 de Marzo de este año.

Son 28 transparencias acerca del futuro de Maven, la verdad que no tienen desperdicio


Aquí os dejo también el video de la presentación:

miércoles, abril 01, 2009

Plataformas, herramientas y métodos

Uno de los principales problemas de la industria del software, en comparación con otro tipo de industrias, es que las herramientas y las metodologías no han seguido la misma evolución que las plataformas tecnológicas que sirven de base para la construcción del software. Podemos conectar sistemas heterogéneos separados cientos de miles de kilómetros a través de las últimas tecnologías de servicios web, ubicar nuestros procesos en la "nube", ofrecer nuestro software como un servicio a través de internet (SaaS), . . . Sin embargo, en la mayoría de las ocasiones, siempre es necesaria la intervención "manual" en las nuevas construcciones, como si cada una ellas fuese la primera que se realiza bajo esa tecnología.

Imaginemos por un momento que la industria del hardware utilizase un enfoque similar al anteriormente descrito. En ese caso, la construcción de circuitos integrados se realizaría mediante el soldado de transistores en lugar del método actual (utilización de software específico encargado de generar las implementaciones). ¿Podría la industria del software aplicar un enfoque similar?

Otras industrias han resuelto problemas similares a los que nos ocupan descubriendo cómo, de manera ágil, se pueden personalizar y ensamblar componentes estándar de modo que se puedan construir productos iguales pero distintos, mediante la integración, estandarización y automatización de sus líneas de producción, mediante el desarrollo de herramientas altamente extensibles, configurándolas de modo que puedan realizar tareas repetitivas y minimizando el riesgo y los costes en las relaciones con los clientes y proveedores. Partiendo de este punto se han construido líneas de producción para las variantes de los productos, se han generado cadenas de suministros distrubuyendo los costes y los riesgos a lo largo de diferentes suministradores especializados y relacionados entre si, habilitando de este modo la producción de una variada gama de productos capaces de satisfacer las necesidades de un amplio abanico de clientes. En resumen, industrialización.


Mi intención no es sugerir que la construcción de software es un proceso mecánico capaz de ser llevado a cabo por trabajadores no cualificados sino que, al contrario, no se debe malgastar el tiempo de los buenos desarrolladores realizando tareas automáticas y repetitivas, de modo que dichos trabajadores puedan pasar más tiempo pensando y no realizando tareas que podrían estar automatizadas. Deberíamos de ser capaces de encapsular el conocimiento en lenguajes, patrones, dsl, herramientas, frameworks, etc de modo que se puedan aplicarl de manera sistemática, automatizando de este modo el ciclo de vida del software.

La construcción de componentes software reutilizables es un reto apasionante, y posiblemente no sea tan sencillo ensamblarlos como los circuitos integrados, aunque, personalmente, creo que la industria del software debería moverse en esa dirección.

miércoles, diciembre 31, 2008

Año viejo, Año Nuevo

2008 toca a su fin.
Dentro de unas horas daremos por terminado este año y comenzaremos un 2009 cargados de ilusiones, propósitos, aventuras y, por que no, despropósitos también :). Desde este pequeño blog me gustaría desearos a tod@s un nuevo año inmejorable en todos los aspectos.

Para terminar el año, no voy a poner nada relacionado con la informática, programación,diseño, etc ni nada que se le parezca :).

Únicamente os dejo uno de los últimos vídeos de uno de los raperos españoles que más me gustan:




Feliz Nochevieja y Año Nuevo para tod@s!!

Un abrazo.

jueves, diciembre 25, 2008

Spring DM and Eclipse RCP

He creado un pequeño screencast en el que se puede ver un modo sencillo de interacción entre una aplicación Eclipse RCP y Spring Dynamic Modules.

Es mi primer screencast y no tengo demasiada pericia con los programas de video, por lo que no he modificado el video para añadirle algún comentario explicativo. Probaré algún programilla como VirutalDub o las propias anotaciones disponibles en YouTube con el objetivo de ir mejorando de cara al futuro.

De momento os dejo con esta primera entrega. Espero que os guste:




En el equipo local se ve mucho mejor que colgado en la web. Desde YouTube se puede descargar el archivo original.

Hasta pronto.

miércoles, diciembre 24, 2008

Feliz Navidad

Desear feliz Navidad a todos los que, a pesar de actulizar una vez cada mucho tiempo, alguna vez se pasan por aquí.

A ver si de ahora en adelante puedo aumentar la frecuencia de actualización :)

¡¡¡Feliz Navidad!!!

martes, septiembre 09, 2008

London Trip

El fin de semana pasado, aprovechando que el lunes era festivo con motivo de la festividad del día de Asturias, nos escapamos el fin de semana a Londres. Yo ya había estado pero la verdad es que es una ciudad que me gusta y me apetecía volver.

El viernes por la tarde arrancamos el viaje desde el CIDI dirección al aeropuerto de Santander. A la llegada a London Stansted tuvimos que esperar un ratillo por el bus con destino al centro:


Una vez llegamos a nuestro destino nos llevamos la sorpresa desagradable del viaje: el hostel. La verdad es que era una auténtica basura; sucio,desordenado, carente de organización, el desayuno horrible . . . mejor no sigo porque se me terminan los adjetivos. Con creces, el pero de todos los bed & breakfast de los que he estado. No se lo recomiendo a nadie: Astor Quest.

Tras cenar la noche anterior en un restaurante cercano, iratxe y yo "decidimos" (verdad peque?) madrugar un rato y darnos un paseo por Hyde Park:


Tras recoger a Ángel,Cristina y Juanjo iniciamos el viaje por el centro de Londres: largas caminatas, destinos turísticos, una increíble mojadura, pantalones para la nieve (ya estoy sentenciado :) ). No tengo todas las fotos puesto que las repartimos entre las tres cámaras del viaje:


A la noche cenamos en un restaurante indio y tomamos una cervecita antes de regresar a nuestro lujoso alojamiento.

Ya el domingo, otro pequeño madrugón para continuar nuestra visita turística: el mercadillo de Candem Town, London Eye, la torre de Londres, . . . . (cuando tenga todas las fotos recolectadas subiré alguna más).

El lunes, tras un paseo por Hyde Park y un sandwich partimos rumbo a London Stansted para tomar el avión que nos traería de regreso a casa.

Y hoy, vuelta al trabajo, a continuar con el montonazo de cosas que nos quedan por terminar.

Hasta pronto!

miércoles, septiembre 03, 2008

Asturias,CIDI,CMMI y resto de cosas

Postear aquí de manera asidua se ha convertido en una tarea complicada, por no decir imposible, por lo que cada vez que tengo un hueco para escribir me cuesta decidirme por donde voy a empezar) . Dicen que se suele comenzar por el principio, así que alla vamos.

He decidido quedarme a trabajar en el CIDI; era una idea que llevaba dando vueltas en mi cabeza durante bastante tiempo y finalmente me he decidido a dar el paso. ¿Y por qué os estaréis preguntando? Pues bien, el principal motivo, que no el único, es que realmente me gusta todo el trabajo que realizamos aquí: desarrollo de productos, metodología de software desde un punto de vista industrial, ganas de aprender, interés por hacer las cosas bien (las cosas bien hechas, bien parecen), . . . .

Siguiendo con mi trabajo aquí, ahora estamos comenzando a obtener la certificación CMMI de nivel 2, y parece que ésto promete, aunque para sacar ésto adelante vamos a tener que trabajar bastante. Al menos eso es la impresión que me ha quedado tras la realización del proceso inicial.

Y como no, también tengo un montón de cosas pendientes, unas más prioritarias que otras claro está: terminar mi proyecto (tengo unas negociaciones en marcha . . .), volver a surfear de manera constante, trabajar menos, escribir más aquí sobre temas interesantes, quedar más a menudo con mis amigos, . . . .

Parece que tampoco era tanto lo que tenía que contar :). Se me olvidaba; este fin de semana me marcho a Londres con Iratxe y unos amigos; prometo fotos y un post a la vuelta.

Un abrazo para tod@s!

miércoles, julio 23, 2008

SpringDM,Maven y Eclipse: Introduction

No pretendo ni mucho menos dar una explicación detallada (tampoco podría) de la especificación OSGI, ni de maven ni Spring Dynamic Modules. Únicamente me gustaría dar una brevísima introducción y un pequeño ejemplo de uso de estas tecnologías para la construcción de aplicaciones distribuidas.

OSGI Service Platform determina una arquitectura común para proveedores de servicios,desarrolladores, . . . . para desarrollar, desplegar y trabajar con servicios de manera coordinada.

OSGI Framework compone el núcleo de las especificaciones, facilitando un framework Java de propósito general que permite el despliegue de aplicaciones (conocidas como bundles). De manera muy simplificada, nos facilita un entorno dinámico de ejecución de aplicaciones en que podemos instalar,actualizar o eliminar aplicaciones "en caliente". Modularidad y versionamiento son otras de las características principales de esta especificación.

La arquitectura establecida por el framework anterior es la siguiente:

Spring Dynamic Modules, de ahora en adelante SpringDM, nos permite construir aplicaciones basadas en Spring de modo que puedan ser desplegadas en un entorno OSGI (trabaja con Equinox,Felix y Knopflerfish) ya hacer uso de todoos los servicios ofrecidos por el mismo.

La combinación de estas dos tecnologías nos ofrece innumerables ventajas de las que podríamos enumerar algunas de ellas:
  • Modelo de programación sencillo (y al que estamos habituados) el cual nos permitirá explotar todas las capacidades de la plataforma OSGI.
  • Capacidad de desplegar múltiples versiones de un mismo módulo de manera concurrente.
  • Instalación, actualización y eliminación dinámica en el entorno de ejecución.
  • Búsqueda y utilización de servicios ofrecidos por otros módulos desplegados en el sistema
  • . . . . . . (muchísimos más)
Como ya os supondreis, ésto no es ni una millonésima parte de las capacidades ofrecidas por estas tecnologías aunque creo que es una visión un poquito genérica que podría servir como punto intrductorio.
En la siguiente entrega construiremos un bundle que correrá bajo Equinox y ofrecerá un servicio. Asimismo construiremos otro bundle adicional, que correrá bajo el mismo entorno, y utilizará el servicio ofrecido por el primero de ellos.

En el futuro, espero que no demasiado lejano, intentaremos adentrarnos un poquito en el usode estas tecnologías para la construcción de clientes ricos distribuidos basados en Eclipse RCP.

lunes, julio 07, 2008

Ya tengo internet

La verdad es que en esta ocasión el servicio de Telefónica ha sido impecable: contratamos internet un martes en una tienda oficial y a los dos días nos llamo el instalador para decirnos que se pasaba por aquí cuando nosotros quisiéramos. Ha terminado de instalarlo hace menos una hora y ya está todo listo; el telefóno y la conexión internet. Sólo espero que a partir de ahora pueda actualizar el blog con una frecuencia mucho mayor.

Hasta pronto!



jueves, junio 26, 2008

No Internet, No blog

Pues eso, que no tengo Internet (ahora mismo se la estoy pirateando un poquito al vecino :) ) y no puedo actualizar esto. El próximo mes cambiaremos de piso (en el que estamos ahora era temporal) y podré disponer de una conexión estable ( y propia jejejej).

Hasta pronto!

Un abrazo!

jueves, mayo 22, 2008

Regreso a Asturias

El próxima día 3 de Junio, si no hay contratiempo, regresaré a Asturias durante, al menos, los próximos cinco meses. Regreso para echar una mano, espero que sea así :), y sobre todo, hacer y estar entre lo que más me gusta: el mundo del desarrollo.

Cambiando de tema, espero que dentro de poco pueda tener disponible la segunda entrega de la serie de capítulos dedicados a AOP.

Hasta pronto!

jueves, mayo 15, 2008

Aspect Oriented Programming (I): Introducción

Me gustaría iniciar una serie de posts relacionados con la programación orientada a aspectos (AOP programming) y este es el primer paso (esperemos que no sea el último ;) ). Tal y como podría esperarse, los ejemplos que aquí veremos serán muy sencillos, pero nos darán una idea de las capacidades que AOP nos ofrece.

A lo largo de estas entradas (todavía no tengo claros cuántas van a ser) veremos algunas de las posibilidades que AOP nos ofrece, ejemplos sencillos de utilización, terminología, . . . Para el desarrollo de los ejemplos utilizaremos, principalmente Spring AOP, aunque puede que también en algún caso veamos algo de AspectJ.

Creo que un buen punto de partida podría ser la definición de los conceptos propios (y no demasiado comunes) de la programación orientada a aspectos (pongo el nombre del concepto en inglés para no meter la pata en la traducción ;) )
  • Aspect: Representación de una funcionalidad transversal , es decir, un concepto que se utiliza en múltiples clases. Elementos como el log, la seguridad o el manejo de transacciones en aplicaciones empresariales son ejemplos de funcionalidades transversales.
  • JoinPoint: lugar de ejecución de un programa tal y como puede ser la ejecución de un método o el procesamiento de una excepción.
  • Advice: función realizada por un aspecto en un determinado joinpoint.
  • PointCut: predicado a través del cual se asocia la ejecución de un aspecto en un determinado joinpoint.
  • Introduction: declaración de nuevos métodos o atributos en un tipo determinado
  • Target Object: también llamado "advised object", es el objeto al cual se le está aplicando el aspecto.
  • AOP Proxy: objeto creado por el framework AOP tras aplicarle el advice al target object. El objetivo de este proxy es implementar los requerimientos del aspecto.
  • Weaving: Proceso mediante el cual se aplica el aspecto a un target object con el fin de objetner un nuevo proxied object. El proceso de weaving puede llevarse a cabo en distintos puntos.
    • Tiempo de compilación
    • En el momento de la carga de las clases
    • Tiempo de ejecución
Puede que la mayoría de los conceptos suenen extraños, y mucho más después de haberlos descrito yo :) . Las definiciones anteriores las he hecho en función de algunos de los libros que he leído (en realidad son mucho más extensas), intentando explicarme lo mejor que he podido.

De todos modos, esto únicamente pretendía ser una sencilla introducción a los conceptos generales y ,al menos eso espero, poco a poco iremos profundizando en el tema.

Hasta pronto.

PD: La programación orientada a aspectos no es exclusiva de Java, en C++ podríamos realizar una aproximación a la misma (un poco engorrosa, eso si) mediante plantillas y el concepto de plantillas de plantillas o mediante un lenguaje propio de aspectos como puede ser AspectC++.