A little bit on new technologies, software architecture, programming languages and whatever else.
jueves, junio 25, 2009
Amsterdam Trip
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.
miércoles, junio 03, 2009
Some New York Photos (I)
lunes, mayo 18, 2009
New York Holidays
miércoles, mayo 13, 2009
My last favourite ebooks
- Clean Code, A handbook of Agile Software Craftsmanship
- Programming Erlang: Software for a Concurrent World (i am reading it now)
- Refactoring in Large Software Projects: Performing Complex Restructurings Succesfully
- Equinox and Osgi: The power behind Eclipse (noy yet published)
- Eclipse Modeling Project: A domain-specific language (DSL) Toolkit
- AspectJ in Action,Second Edition (MEAP available)
- . . . . . .
lunes, abril 20, 2009
Maven next generation
miércoles, abril 01, 2009
Plataformas, herramientas y métodos
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.
lunes, marzo 30, 2009
miércoles, diciembre 31, 2008
Año viejo, Año Nuevo
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:
Un abrazo.
jueves, diciembre 25, 2008
Spring DM and Eclipse RCP
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
A ver si de ahora en adelante puedo aumentar la frecuencia de actualización :)
¡¡¡Feliz Navidad!!!
martes, septiembre 09, 2008
London Trip
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:
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
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!
sábado, julio 26, 2008
miércoles, julio 23, 2008
SpringDM,Maven y Eclipse: Introduction
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)
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
Hasta pronto!
jueves, junio 26, 2008
No Internet, No blog
Hasta pronto!
Un abrazo!
jueves, mayo 22, 2008
Regreso a Asturias
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
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
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++.