jueves, octubre 08, 2009

Modelo de Joint Point (I)

El modelo de "joint point" está compuesto de dos partes claramente diferenciadas: los propios "join point", que no son más que puntos en la ejecución de un programa, y los "pointcuts", un mecanismo de selección de los puntos anteriores.

Imaginemos por un momento que nos encontramos desarrollando un sistema que necesita gestión de la seguridad, algo muy común en el mundo en el que nos movemos, y, que, debido a la naturaleza transversal del mismo, elegimos AOP como enfoque principal nuestra solución. ¿Cuáles son los pasos que deberíamos seguir?

  • Identificar los puntos del sistema que necesitan ser protegidos, comprobando, antes de realizar el acceso, que el usuario que está realizando el acceso está autenticado y tiene los privilegios necesarios para hacerlo. En resumen, estamos identificando los "joint point" que requieren ser securizados.
  • Construiremos un pointcut (o varios, todos los que sean necesarios), que permitan la selección de los "joint point" descritos en el punto anterior.
  • Construiremos un aspecto que encapsule toda la lógica de seguridad requerida.
Los conceptos anteriores son sumamente importantes dado que componen la base de AOP. A lo largo de los siguientes postz profundizaremos en cada uno de ellos.

Para terminar esta entrada simplemente analizaremos la definición de joint point:

Un join point es un punto de ejecución en un sistema. Así por ejemplo, el acceso al campo de una clase, la ejecución de una función o una sentencia for son ejemplos claros de join points.

AspectJ solamente expone un subconjunto de todos los posibles joint points, limitando de este modo, el acceso a las construcciones más estables.

En el siguiente post analizaremos con un poco más de profundidad los pointcuts,para, posteriormente, analizar las categorías de joint points existentes.

Hasta pronto,

Migue

domingo, octubre 04, 2009

AOP en el mundo real

Hace tiempo había escrito algún post relativo a AOP y AspectJ y nunca he tenido la ocasión de continuar con aquella de serie de posts, así que . . . . intentando retomar la dinámica de escribir aquí con una frecuencia aceptable; continuemos aquella miniserie con una visión del uso en el mundo real de AOP.

  • Aplicaciones empresariales .Gestión de transacciones, seguridad, auditoría, monitorización, gestión de la concurrencia, manejor de errores y un largo ecétera son funcionalidades transversales en la mayoría de aplicaciones empresariales. Aquellas aplicaciones que usen Spring como base de su arquitectura ya estarán utilizando algunos de los aspectos que vienen facilitados por el framework. Gracias a las anotaciones, concretamente @Aspect, la construcción de aspectos se ha convertido en una tarea habitual.
  • Web y servidores de aplicaciones. Aplicación de políticas, FFDC, recolección de contextos,trazabilidad o monitorización son algunas de las funcionalidades basadas en AOP que podemos encontrar en los servidores de aplicaciones. Spring Source DM Server y TC Server son un claro ejemplo de estas funcionalidades.
  • Frameworks. Gestión de transacciones y seguridad son habitualmente implementadas mediante aspectos. Asimismo, otras utilizaciones de los aspectos podría ser la inyección de dependencias en en objetos de dominio. Para obtener un amplio abanico de posibilidades de uso de los aspectos, el usuario podría visitar los proyectos de Spring Roo o Apache Magma.
  • Herramientas de monitorización. El uso de aspectos facilita también la construcción de herramientas de monitorización. Muchas herramientas utilizan AspectoJ como tecnología subyacente: Glassbox,Perf4J,Contract4J,JXInsight o MaintainJ son algunos de los ejemplos.
  • Compiladores e integración de IDE's.La propia gente de AspectJ utiliza la propia tecnologia para extender el compilador de JDT de manera que sea capaz de sopotar las nuevas construcciones. AJDT utilizan un proceso de weaving a través de una implementación basada en OSGI ofrecida por el proyecto Equinox. Scala IDE en Eclipse utiliza un enfoque similar para la construcción de su entorno de desarrollo.
En el desarrollo de nuestros productos software nosotros también hacemos uso de AOP para arquitectar nuestras soluciones (además de las enumeradas anteriormente), así por ejemplo, utilizamos AspectJ para la gestión del estado "dirty" de un metamodelo, o para la generación de las licencias de uso de nuestros productos.

jueves, octubre 01, 2009

Great ebook

An amazing reading about software developement.


Ebook link

Interviewers with 15 of the most interesting programmers:
  • Frances Allen: Pioneer in optimizing compilers, first woman to win the Turing Award (2006) and first female IBM fellow
  • Joe Armstrong: Inventor of Erlang
  • Joshua Bloch: Author of the Java collections framework, now at Google
  • Bernie Cosell: One of the main software guys behind the original ARPANET IMPs and a master debugger
  • Douglas Crockford: JSON founder, JavaScript architect at Yahoo!
  • L. Peter Deutsch: Author of Ghostscript, implementer of Smalltalk-80 at Xerox PARC and Lisp 1.5 on PDP-1
  • Brendan Eich: Inventor of JavaScript, CTO of the Mozilla Corporation
  • Brad Fitzpatrick: Writer of LiveJournal, OpenID, memcached, and Perlbal
  • Dan Ingalls: Smalltalk implementor and designer
  • Simon Peyton Jones: Coinventor of Haskell and lead designer of Glasgow Haskell Compiler
  • Donald Knuth: Author of The Art of Computer Programming and creator of TeX
  • Peter Norvig: Director of Research at Google and author of the standard text on AI
  • Guy Steele: Coinventor of Scheme and part of the Common Lisp Gang of Five, currently working on Fortress
  • Ken Thompson: Inventor of UNIX
  • Jamie Zawinski: Author of XEmacs and early Netscape/Mozilla hacker


I think it's a recommended reading!

miércoles, septiembre 30, 2009

Hype Cicle

Hype Cycle es una representación gráfica del grado de madurez, adopción y aplicación en el mundo real de una tecnología determinada.


Si comprendemos bien el gráfico anterior, y la posición que la tecnología que estamos considerando ocupa en el mismo, dispondremos de una visión mucho más ajustada de los riesgos y beneficios a los que nos estamos exponiendo.


La interpretación de la curva Hype Cicle implica cinco fases diferentes las cuales analizaremos a continuación.
  • Activación de la tecnología: Este es el momento en el que la tecnología aparece con la intención/promesa de solucinar un conjunto determinado de problemas. Podría ser el anuncio de un nuevo producto o la liberación de una nueva versión de un produco ya existente.
  • Expectativas irreales ("peak"):Durante esta fase la tecnlogía se hace muy popular. Todo el mundo quiere conocerla y tiene una opinión sobre ella aunque muy poca gente la utiliza en aplicaciones reales.
  • Desilusión: Esta es la fase de ciclo Hype en la que la tecnología comienza a perder toda la atención que se le había prestado hasta el momento.
    Mientras que los equipos que la adoptaron desde sus inicios continuan utilizándola con el objetivo de obtener una ventaja competitiva, muchos otros comienzan a observar con cierto escepticismo. Nuevas tecnologías aparecen en escena aportando soluciones diferentes al mismo problema. Resulta interesante destacar que muchos de estos nuevos competidores están en la fase de "expectativas irreales".
  • Viendo la luz:Numerosos factores intervienen en el desarrollo de esta fase: maduración de la tecnología, cambios en la misma para acercarse a la realidad, búsqueda de un contexto de uso en el que realmente se cause impacto o la "desilusión" con otras alternativas, que en su momento fueron competidores, son algunas de ellas.
  • Plena productividad:La última fase definida en el ciclo Hype. En esta situación la tecnología está ampliamente difundida y se utiliza en las solución de problemas para los que ofrece una gran respuesta. Será en esta fase cuando se produzca una aceptación mavisa de la tecnología.
Si a alguien le interesa, Harvard Business Press publicó el libro Mastering the Hype Cycle: How to Adopt the Right Innovation at the Right Time.

Hasta pronto

Migue

sábado, septiembre 12, 2009

El puto amo

Hay cosas que no cambian nunca:







Sintiendolo mucho no tengo mas tiempo para el blog, espero que dentro de poquito pueda dedicarle todo el tiempo que me gustaria.

Un abrazo!

sábado, agosto 22, 2009

C++ Singleton Pattern (y II)

Y ya que estamos, os dejo la segunda parte que también había escrito hace bastante tiempo :)

Vamos a continuar con el patrón de diseño Singleton que habíamos comenzado en un post anterior. Intentaremos añadir alguna que otra mejora. Vayamos poquito a poquito:

Un primer cambio que podríamos realizar sería el de retornar una referencia en lugar de un puntero en el método getInstance(); de este modo evitaríamos que el usuario que obtiene una referencia del objeto intentase aplicarle el operador delete. El prototipo del nuevo método podría ser algo parecido a lo siguiente:

static singletonPattern & getInstance();


Ahora podríamos pensar en que ocurre cuando se destruye el singleton.Realmente no se trata un memory leak tradicional sino un resource leak. El singleton podría haber adquirido diversos recursos del sistema operativo como un socket,un semáforo,...... Con el objetivo de solucionar este problema, Scott Meyers facilitó una solución sencilla (y muy elegante): en lugar de almacenar un puntero a un objeto de tipo Singleton instancial una variable local estática del siguiente modo:

singletonPattern & getInstance(){
static singletonPattern instance;
return instance;

}
El fragmento anterior se conoce como el singleton de Meyers y se basa en, tal y como describe Alexandrecu en su libro Modern C++ Desing:Generic Programming and Patterns Applied, "some compiler magic": un objeto estático de una función es inicializado, en tiempo de ejecución, en el momento de la primera pasada de la definición.

Este par de soluciones son, aparentemente sencillas, y pueden ayudarnos a construir un Singleton mucho más robusto.

En el libro de Alexandrescu mencionado anteriormente plantea otros problemas tales como las referencias muertas (a las cuales aplica soluciones elegantes e ingeniosas) o los problemas derivados de la interacción de los hilos y los singleton.

Desde mi punto de vista el singleton es un patrón de diseño muy sencillo conceptualmente pero que, llegada la hora de implementarlo, no resulta tan evidente como pueda parecer en un principio.

C++ Singleton Pattern (I)

Os dejo un post que había escrito hace mucho tiempo en otro blog; está dedicado a C++ y a los patrones de diseño.

Os propongo una implementación del patrón de diseño Singleton (uno de los patrones de diseño más simples aunque creo que muchas veces lo utilizamos de forma no demasiado apropiada).

El patrón anterior nos garantiza que, desde el momento en que instanciamos un objeto de dicha clase, será esa la única instancia que exista de dicho objeto. Existen multitud de libros acerca de patrones de diseño y con multitud de aplicaciones de los mismos. Yo desde aquí nada más pretendo dejaros mi experiencia y el uso que yo le he dado en mis aplicaciones. Por ejemplo, este patrón lo he utilizado en el desarrollo de un compilador para representar los builtin type. Vamos allá:

En primer lugar definimos la clase singletonPattern y el método que nos permitira obtener una referencia al mismo (hacemos que el constructor sea privado para que no se puedan crear objetos de ese tipo):

class singletonPattern{
private:
/// unique instance of the object
static singletonPattern * instance;
/// Default Constructor
singletonPattern(){}

public:
/*!
Returns the reference
to the unique instance of the object

(if it's the first time create de reference)
*/
static singletonPattern * getInstance(){
if(instance == NULL)
instance = new singletonPattern();
return instance;
}
};

// init the static member
singletonPattern * singletonPattern :: instance = NULL;

El código anterior no estaría completo dado que nos queremos asegurar de que nuestra instancia sea única por lo que tendremos que implementar el constructor de copia y el operador de asignación (no tiene sentido el operador de asignación en el singleton) como privados dentro de nuestra clase singletonPattern. Algo como lo que sigue:

/// Copy Constructor
singletonPattern(const singletonPattern & sp){}

/// Assignement Operator
singletonPattern & operator=(singletonPattern & sp){
return *this;
}

Si quisieramos utilizar esta clase en uno de nuestros programas no tendríamos más que declarar un objeto tal y como a continuación se muestra:
singletonPattern * singleton = singletonPattern::getInstance();

Y listo. Con esto tendremos nuestro patrón de diseño Singleton listo para disponer de el cuando deseemos.

Desde el siguiente enlace podeis descargaros el código fuente completo junto con un makefile:singletonPatterC++.

Hasta pronto!

viernes, agosto 07, 2009

Vigo & Madrid


Some weekends ago we have been in Vigo and Madrid (to a company meeting) :)






Bye!

Frameworks

Some weeks ago an interesting book arrives to my personal library :)


Althought last weeks my enjoy time is not enought to read the whole book i have been reading the starting chapters. Anyone has read it completely?

Bye!

sábado, julio 11, 2009

Groovy Metaclass

One of my favourites Groovy´s features is its MOP architecture. It allow us introducing new methods at runtime thanks to the metaClass.

We can define a new class

class SampleClass {
// class field
def propertyOne
// one sample Closure
def closureOne = {
println "I´m the closure one"
}
}

Now we add a new method at runtime

SampleClass.metaClass.runtimeAddedMethod = {
println "I´m runtimeAddedMethod"
}

Declare a new instance an test all the methods

def instance = new SampleClass()

Call to the closure declared in class definition

instance.closureOne()

Call to the method added at runtime

instance.runtimeAddedMethod()

We add a method to the "instance" too

instance.metaClass.instanceRuntimeAddedMethod = {
println "I´m the method added at runtime to a single instance"
}

instance.instanceRuntimeAddedMethod()

Bye!!

viernes, julio 03, 2009

Amsterdam Photos

Some photos of our last trip to Amsterdam:




Chihi: Art essence (trying to become famous jajajaja)

i amsterdam

all the travelers (I was tooking the photo)

Ita

Dam Place


Dam Place

Ita again


Bye!


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++.

miércoles, marzo 26, 2008

Sin tiempo a nada

Hace casi un mes que no posteaba nada pero es que el trabajo, ¿qué iba a ser sino ;)?, apenas me deja tiempo ni a respirar con lo que actualizar el blog se convierte en una tarea con una prioridad demasiado baja como para poder ser atentida :). También es cierto que vamos cerrando cosillas pero dichos cierres implican la apertura de nuevos trabajos con lo que . . . . . . ya veremos que nos deparará el futuro.

No puedo decir cuándo volveré a actualizar; intentaré que sea lo más pronto posible (no prometo n ada) y con temas más interesantes.

Hasta pronto chic@s!

Un abrazo!

sábado, marzo 01, 2008

Señales de vida

No he abandonado este site (aunque últimamente lo parezca :) ) aunque si es cierto que he estado bastante ocupado y no he tenido demasiado tiempo para mi mismo (y mucho menos para el blog).

Espero que a partir de la semana que viene pueda actualizar con más frecuencia,contaros como va todo aquí en Madrid y retomar la serie de post técnicos que había comenzado hace tiempo.

Un abrazo y hasta pronto!

lunes, enero 07, 2008

Se abaco lo que se daba

Lo dicho; las vacaciones se terminan y mañana mismo me reincorporo al trabajo en la oficina de Madrid. Me espera una larga tarde-noche de viaje aunque esperemos no encontrar demasiado atasco.

Las vacaciones han estado bastante bien en general; he aprovechado para retomar mi proyecto, terminar de leer alguno de los libros que tenía a medias,descansar,disfrutar de mi familia y de mis amigos y muchas cosas más.

¿Y este año que hemos comenzado hace una semana? No suelo hacer propósitos de nuevo año tales como dejar de fumar (más que nada porque no fumo), adelgazar, ir al gym o cosas por el estilo. Sólo espero gozar de buena salud para intentar llevar a cabo todas las cosas que tengo entre manos: terminar mi proyecto, actualizar el blog con temas interesantes y con mucha más frecuencia, intentar dar forma a un par de ideas/proyectos que tengo entre manos, y, sobre todo, disfrutar de toda la gente que me rodea.

Desde este pequeño espacio me gustaría desearos, tanto a los asiduos como a los ocasionales, un Feliz Año 2008.

Un abrazo a todo@s!

miércoles, diciembre 05, 2007

Vacaciones

Así es amigos, tal y como reza el título de esta entrada ayer mismo dieron comienzo mis vacaciones de manera oficial. Desde ayer hasta el día ocho de enero intentaré desconectar lo máximo posible, trabajar fuertemente en mi proyecto y, sobre todo, pasármelo bien que es lo realmente importante.

Al igual que el resto del año el día también fue muy intenso, para que vamos a cambiar :). A eso de las ocho de la tarde recogí todas mis cosas y tomé rumbo al aeropuerto para tomar mi vuelo dirección a Bilbao ( una media hora de retraso en el embarque pero únicamente cinco minutos de retraso sobre la hora de llegada programada). Y aquí estoy desde Bilbao escribiendo en el blog e itentando retomar todas las cosas que tengo olvidadas ;).

Estaré por aquí hasta el viernes a mediodía con lo que preveo llegar a Lastres a eso de las seis más o menos. Ya tengo muchas ganas de ver a mis padres y a mi hermana; desde mi regreso a Madrid el día cuatro de Septiembre no he estado ni un fin de semana por la tierra patria.

Poco más tengo que contar, además quiero ponerme a hacer cosas con lo que vamos a dejarlo aquí para este post. Prometo actualizaciones más a menudo tanto ahora que estoy de vacaciones como a mi regreso a Madrid (espero que mi jornada de trabajo se reduzca de manera considerable).

Hasta pronto!
Un abrazo.

domingo, noviembre 25, 2007

Una centena de entradas

Post número 100. Puede que no os parezcan demasiados pero, sinceramente, nunca pensé que llegaría tan lejos. Retomé esta aventura desde mi traslado a Madrid hace hoy un año y dos meses exactamente y en ningún momento pensé que fuese capaz de mantener ésto activo durante tanto tiempo pero aquí estamos con la intención de seguir dando guerra el mayor tiempo que me sea posible.

En muchas ocasiones me pregunto a mi mismo por qué escribo en el blog y la primera respuesta que me viene a la cabeza es "porque me apetece", ni más ni menos. Escribo acerca de cosas que me parecen interesantes, anécdotas, las cosas de mi vida que se pueden contar, aspectos técnicos, . . . . . no sé, intento catalogarlo con las etiquetas pero la verdad que tampoco me preocupa demasiado; escribo cuando tengo ganas y tiempo sobre los temas que me resultan interesantes.

Analizándolo más en detalle tampoco es que encuentre otras razones con un peso mucho mayor que la descrita en el párrafo anterior, aunque como dicen en Galicia: "habelas, hailas".

El hecho de haberme venido a Madrid y estar completamente solo fue el el principal motivo de que retomase el blog; mi intención era que la gente que había dejado en Asturias no se olvidase de mi por completo con el paso del tiempo y aunque parezca mentira creo que lo estoy consiguiendo. Y la otra parte del blog, la de artículos técnicos (por llamarlos de algún modo), también está íntimamente relacionada conmigo ya que todo ese mundo también forma parte de mi vida (y no soy un friki como Andre dice :) ). Escribo temas relacionados con programación, informática, patrones de diseño, . . . porque me gusta, porque me distrae ,porque me sirve para aprender cosas nuevas, porque puede que a alguien (lo dudo mucho) le pueda servir de ayuda en un determinado momento, . . . . . Por todo ésto y por muchas cosas más creo que voy a seguir en la misma línea.

Aprovechando que estamos de cumpleaños, puesto que el blog cumple 100 entradas y yo un año y dos meses de vida en la capital, creo que es un buen momento para echar la vista atrás y ver en que situación me encuentro.

Hasta el momento la experiencia creo que no puede ser más positiva; desde mi llegada a la ciudad todo el mundo me ha hechado una mano siempre que la he necesitado, he crecido un montón como persona, he conocido a mucha gente interesante, he viajado, he hecho amigos de verdad, . . . . En lo que al tema profesional se refiere he tenido la suerte de coincidir con gente extraordinaria, gente de la que estoy aprendiendo un montón de cosas nuevas y de las que espero seguir aprendiendo con el paso del tiempo; sólo espero haber aportado mi granito de arena para que toda esta aventura llegue a buen puerto.

Éste año ha sido complicado en lo que a trabajo se refiere aunque,en general, creo que las cosas han ido bastante bien. Todo este duro trabajo me ha servido para aprender miles de cosas nuevas o poner a prueba un montonazo de conocimientos e ideas que jamás pensé tendría oportunidad.

¿Y ahora? Pues en primer lugar espero disfrutar de mis vacaciones (tengo un mes :) ): retomar mi proyecto a ver si de nuevo soy capaz a tomarle el pulso, pasar mucho tiempo con alguien a quien por desgracia no puedo ver todo lo que me gustaría, estar con mis padres y mi hermana que ya tengo muchas ganas e intentar desconectar un poco porque creo que lo necesito. A todo ésto hay que sumarle el volver a ver a todos mis amigos y rememorar viejos tiempos jejejejeje.

¿Y para el próximo año? Tras las últimas noticias recibidas y conversaciones con las personas adecuadas creo que tengo más o menos claro mis intenciones tras el regreso de vacaciones. De todos modos, hasta que no me encuentre totalmente seguro prefiero no decir nada.

Hasta pronto!
Un abrazo!

PD: en widget de la derecha de la página (Almacén) he dejado mi clave pública (migue.asc)

sábado, noviembre 24, 2007

Setting up an SVN server (y II)

En el post anterior configuramos nuestro servidor Subversion a través del servidor standalone svnserve. En esta ocasión habilitaremos nuestro servidor svn a través del protocolo WebDAV (una extensión del protocolo http). Vamos allá:

En primer lugar necesitaremos tener instalado en nuestro sistema un servidor http. De sobra es conocido por todos que Apache es el servidor http más extendido con lo que será el que utilicemos en esta sencilla guía (concretamente utilizaremos Apache 2). También es necesario el módulo mod_dav_svn.so. Ejecutamos la siguiente orden en una terminal:
sudo apt-get install apache2 libapache2-svn

Tras esta sencilla orden tendremos en nuestro sistema un servidor http con el soporte necesario para habilitar nuestro servidor subversion. Configuremos ahora nuestro repositorio:

Editamos con nuestro editor favorito el fichero dav_svn.conf (si habeis instalado apache2 con la orden indicada anteriormente lo encontrareis en la ruta /etc/apache2/mods-enabled/dav_svn.conf)
vim /etc/apache2/mods-enabled/dav_svn.conf
Deberemos descomentar una serie de líneas para habilitar y establecer una configuración básica
: vayamos por partes.

En primera instancia habilitaremos el repositorio con lo que descomentaremos las siguientes líneas:
# habilitamos el repositorio
DAV svn
# indicamos la ruta absoluta al mismo
SVNPath ruta_absoluta_repositorio

Configuremos ahora el control de acceso. Dicho control es realizado a tres niveles diferentes:
  1. Autenticación facilitada por Apache.
  2. Directivas "limit" y "limitexcept".
  3. El módulo mod_authz_svn.
En este mini-tutorial habilitaremos una autenticación básica. Soy consciente de que no es demasiado seguro a no ser que se utilice a través de https pero no quiero complicar demasiado esta entrega; en futuras versiones configuraremos los distintos niveles de acceso.

Para llevar a cabo nuestra tarea necesitaremos descomentar las siguientes líneas en el fichero dav_svn.conf:
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
Creamos el fichero /etc/apache2/dav_svn.passwd con los usuarios a los que deseemos permitir el acceso a nuestro repositorio. Actuamos del siguiente modo:
htpasswd -cm /etc/apache2/dav_svn.passwd nombre_usuario
Se nos pedirá una contraseña para el usuario indicado.

En este momento dispondremos de una configuración básica de nuestro servidor svn a través de http. Si queremos comprobar el correcto funcionamiento podemos irnos a nuestro navegador (Firefox por supuesto ;) e intentar acceder al repositorio:
http://maquina/repositorio/
Nos solicitará nuestro usuario y contraseña, y en caso de que las claves introducidas sean correctas, se nos mostrará un listado con todos los proyectos registrados en el repositorio.

Tal y como os contaba en el post anterior establecer una configuración básico no es demasiado complicada. Espero que pueda serviros de utilidad.

Hasta pronto!

PD: en siguientes post cambiaremos un poquito de tema dejando a un lado la configuración de servidores. Hablaremos un poquito de Hibernate y puede que LINQ si tengo tiempo.


martes, noviembre 20, 2007

Setting up an SVN server (over SSL) (I)

Tenía ganas de retomar la parte técnica del blog y aprovechando que estos días he estado instalando Suvbersion y Artifactory (éste aún no lo tengo completamente configurado) he elaborado este mini artículo con los pasos a seguir. En esta primera entrega configuraremos svnserve (modo standalone) y dejaremos para un segundo artículo la posibilidad de que nuestro sistema controlador de versiones esté disponible a través del protocolo WebDAV (una extensión de http). Manos a la obra:

En primer lugar, y tal y como indica el título del post que nos ocupa, estableceremos un servidor SVN a través de una conexión SSL con lo que necesitaremos tener instalados en nuestro sistema dichos componentes. En el caso de mi Ubuntu Feisty podríamos ejecutar el siguiente comando:
sudo apt-get install subversion openssh-server
Tras la ejecución del comando anterior tendremos en nuestro equipo todos los elementos necesarios para realizar una configuración totalmente operativa de nuestro sistema de control de versiones.

A continuación creamos un nuevo grupo (en mi caso lo he llamado svnusers) para facilitar las labores de administración . Todos los usuarios que deseen tener acceso deberan ser miembros del grupo anterior (más adelante veremos el porqué). Además crearemos un nuevo usuario perteneciente al grupo anterior con nombre svnadm. Para llevar a cabo esta tarea ejecutaremos el siguiente conjunto de órdenes:

# creamos el grupo svnusers
addgroup svnusers

# creamos el usuario "test" perteneciente al grupo svnusers
adduser --ingroup svnusers test
Nota: por motivos de seguridad es una buena práctica que el usuario root no pueda realizar login a través de una conexión de ssh. Asimismo ninguno de los usuarios pertenecientes al grupo svnusers debería ser capaz de "hacer su hacia root".

Llegados a este punto necesitamos que los usuarios del grupo svnusers no inhabiliten, en el momento en que establecen una conexión a través del tunel ssh,los permisos establecidos a nivel de grupo; para ello establecemos la máscara al valor 002. Una manera sencilla de hacer ésto es editar el fichero .bashrc de cada uno de los usuarios pertenecientes al grupo svnsusers y añadir la siguiente línea:

# permitimos lectura/escritura al usuario y al grupo pero no al resto
umask 002
Reptimos los dos últimos pasos descritos anteriormente y creamos el usuario svnadm.

Nos logueamos como usuario root, en caso de que no lo estuviéramos, y creamos una ruta en nuestro sistema de archivos para contener nuestros repositorios. Suponiedo que path_to_repository contiene una ruta válida dentro de nuestro sistema de archivos podríamos ejecutar la siguiente orden:
mkdir -p path_to_repository
Además restringimos el acceso a los repositorios al root y los usuarios pertenecientes al grupo svnusers
chown -R root.svnusers path_to_repository
chmod -R u+wxr,+gwxr,o-wxr path_to_repository
El paso que a continuación se indica (lo encontré en una mini guía buscando cosas relativas a la seguridad) pretende "esconder" la ruta raíz del servidor donde estamos almacenando todos nuestros repositorios. Para ello sustituiremos nuestro ejecutable svnserve del modo que a continuación se indica:

Renombramos el comando svnserve (en mi caso lo tengo disponible en /usr/bin/) con el nombre svnserve.bin
mv /usr/bin/svnserve /usr/bin/svnserve.bin
Creamos un nuevo fichero /usr/bin/svnserve que contendrá el siguiente código:
#!/bin/sh
# wrap in order to put root in by default
# Script implemented by Adrian Robert <arobert@cogsci.ucsd.edu>

exec /usr/bin/svnserve.bin -r /path/to/repository/root "$@"
El fichero recién creado podrá ser ejecutado y leído por todo el mundo
chmod u+wrx,g+rx-w,o+xr-w /usr/bin/svnserve

Un vez llegados a este punto estamos en disposición de crear un nuevo proyecto en nuestro repositorio. Nos logueamos como usuario svnadm e introducimos la siguiente orden en una terminal:
svnadmin create path_to_repository/nombre_proyecto
No permitimos el acceso a ningún usuario no perteneciente al grupo svnusers (a excepción del root claro está)
chmod -R o-rwx path_to_repository/nombre_proyecto
Editamos el fichero de configuración del proyecto recientemente creado para no permitir accesos anónimos (sólo aquellos autenticados a través de ssh) y además permitimos la escritura (una vez autenticados). Esto se consigue editando el fichero svnserve.conf de un modo similar al que a continuación se indica:
# abrimos el fichero de configuración de nuestro nuevo proyecto
vi path_to_repository/nombre_proyecto/conf/svnserve.conf

# no se permite el acceso anónimo y si la escritura para usuarios autenticados
[general]
anon-access = none
auth-access = write

Para testear que todo marcha correctamente ejecutamos al siguiente orden:
svn list svn+ssh://@localhost/nombre_proyecto
Se nos pedirá un nombre y un password y en caso de que los datos introducidos sean correctos seremos devueltos al prompt donde tecleamos la orden (el proyecto que hemos creado unos pasos más arriba no contiene ningún tipo de información). Con ésto nos aseguramos que el servidor ssh está funcionando correctamente así como el tunel hacia el svnserve.

En este mismo instante dispondríamos de un repositorio Subversion totalmente funcional aunque cada vez que realizásemos una operación se nos pediría que introdujésemos nuestro usuario y contraseña correspondientes. Con el objetivo de evitarnos este pequeño incordio generaremos un par de claves públicas/privadas.
A continuación, y de manera rápida, se indica el modo en que llevaríamos a cabo esta tarea:
# generamos nuestro par de claves
ssh-keygen -t dsa

# copiamos nuestra clave pública a las claves autorizadas
cd $HOME/.ssh/
cp id_rsa.pub authorized_keys

# permisos adecuados
chmod 0700
$HOME/.ssh/
chmod 0600
$HOME/.ssh/authorized_keys
Esto ha sido todo. Como veis son un conjunto sencillo de pasos gracias a los cuales establecemos una configuración básica de un repositorio subversion a través de una conexión segura.

En el siguiente capítulo haremos que nuestro repositorio se encuentre accesible a través del protocolo WebDAV; (mucho más sencillo que ésto :) )

Espero que os haya gustado y que os sirva de ayuda.

Hasta pronto!

domingo, noviembre 11, 2007

El trabajo(I)

Últimamente el trabajo, ¿que otra cosa podría ser sino?, me impide actualizar con la frecuencia que me gustaría; además siempre he tenido la intención de continuar con los post acerca de programación que hace un tiempo comenzé pero, sinceramente, paso demasiado tiempo inmerso en el trabajo y apenas me queda tiempo para nada más. El problema es que el proyecto actual parece no tener fin, cada dos por tres aparecen cosas nuevas (supuestamente se habían dicho en el inicio del proyecto con lo que me lo tendré que creer porque yo no estaba). Todo ésto implica que en este último mes y medio las jornadas "largas" (por llamarlas de alguna manera) se hayan convertido en una tónica habitual. Entonces me surge la duda de si es que realmente tengo demasiado trabajo o es que soy un completo inútil (más bien apuesto por lo segundo). Bueno, que tampoco me quiero extender demasiado que tengo que terminar unas cosas que debemos entregar mañana y todavía me quedan bastantes cosas por terminar.

Espero que el proyecto actual no se prolongue demasiado y pueda dedicar mucho más tiempo a mi proyecto, a escribir más por aquí (pretendo retomar con ganas la parte técnica del blog) y dedicar más tiempo a las cosas con las que realmente me entretengo.

Seguireis teniendo noticias mías.

Un abrazo!
Migue!

sábado, octubre 20, 2007

Una de clientes

Ya había oído que la mayoría de la gente del ***** ********* (no daré nombres para no ofender a nadie aunque . . . . .) eran unos auténticos ********** (no se pueden decir palabrotas que estamos en horario infantil) pero en estos momentos lo estoy sufriendo en mis propias carnes.

Me encuentro desarrollando un proyecto, el cual me fue asignado una vez iniciado por distintos motivos que ahora no vienen al cuento. La cuestión radica en que los inicios del mismo no parecía que se tuviese mucha prisa pero resulta que esta última temporada el cliente presenta una necesidad imperiosa porque todo ésto se termine la próxima semana. ¿En qué se traduce todo ésto? Pues que llevo una temporada con muchísimo trabajo, y cuando digo mucho es mucho de verdad, con lo que escribir aquí se ha convertido en una tarea harto complicada (ahora estoy trabajando desde casa y he hecho un pequeño inciso para escribir esto).

¿Y a qúe viene todo ésto os estaréis preguntado? Pues bien, el pasado viernes tuvimos una reunión en las instalaciones de nuestro cliente para enseñarles cambios que se habían realizado y uno de sus empleados, durante el transcurso de la reunión, soltó la frase: "... pero si a nuestros usuarios le entregamos esa mierda . . . ." (en alusión a una pantalla que ellos habían diseñado la tarde anterior y que tuve que implementar esa misma noche). No sé si fue la cara de odio con lo que lo miré (lo dudo) o que el mismo se dio cuenta de que la frase no había sido de lo más afortunada, pero se disculpó de manera instantánea.
No fue la frase en sí lo que me molestó (la opinión de una persona que no tiene ni idea sencillamente me resbala) sino el hecho de que no tengan un poco más de respeto; más aún cuando han estado haciendo cambios del alcance hasta el último momento y nos seguimos comprometiendo a tener casi todo listo para finales de la semana que viene. Yo al final soy un pringao que ni pincho ni corto pero tengo muy claro que si yo soy mi jefe y me suelta la frasecita del otro día le emplumo otro mes más en el desarrollo debido a todos los cambios de alcance realizados las últimas tres semanas (y lo mismo me da lo que le estén presionando sus jefazos). Pero como no soy nadie pues . . . . . . .

Y la verdad es que es una aunténtica pena porque este proyecto es muy interesante: he implementado un motor de consultas, un intérprete,. . . . Además he tenido la oportunidad de pelearme con nuevas herramientas que desconocía tales como antlr, la herramienta de reporting que viene integrada en .NET y algunas más. El problema radica en que lo estamos haciendo aprisa y corriendo y las cosas así no pueden salir bien de ninguna manera. Pero bueno, es lo que hay. Ya lo dice el refrán, donde manda patrón no manda marinero.

A pesar de todo el montonazo de trabajo, y como ya os contaba en el post anterior, sigo muy contento. Creo que todo ésto me está sirviendo para aprender un montón de cosas nuevas, poner en práctica nuevas ideas y, lo más importante de todo, darme cuenta de que puedo llevar a cabo cualquier cosa si de verdad me lo propongo.

Por poner una pega a todo ésto: tengo un montonazo de ideas nuevas que podrían mejorar el desarrollo de determinado tipo de proyectos en la oficina pero no tengo tiempo a proponerlos (aunque tampoco estoy seguro de que me hiciesen mucho caso :) ).

Dejando a un lado el tema del trabajo, deciros que las cosas siguen más o menos como siempre aquí por Madrid: mi proyecto sigue aparcado como os podeis imaginar pero en cuanto la carga de trabajo se relaje un poco me dedicaré a él todas las noches. Últimamente si que algunas cosas han cambiado en mi vida, para bien, pero tampoco me apetece contarlas ahora porque he decidido que las voy a abordar con calma.

Y poco más tengo que contar. Voy a continuar trabajando otro rato que después tengo que bajar al centro a comprarle a Javi el regalo de cumpleaños (y puede que aproveche para darme un homenaje jajajajja)

Hasta pronto!
Migue

PD: el jefe me ha regalado el puente de Todos los Santos pero no voy a ir a Asturias, he hecho planes. Hasta Navidades posiblemente no regrese a casa (como el Almendro jajajajajja)

sábado, octubre 13, 2007

De regreso

Hace casi un mes que no actualizo pero es que estas últimas tres semanas he estado realmente agobiado; en serio, llevamos una temporada en la que hemos estado trabajando muchísimo y apenas he tenido tiempo de respirar; mis compañeros de la oficina pueden dar fe de ello. Hasta que no termine este proyecto que tengo entre manos me imagino que el ritmo de trabajo será el mismo con los que las actualizaciones se dejarán caer con cuentagotas, lo siento.

Tras la explicación de rigor tras un largo periodo de inactividad bloggera, ¿por dónde empezar? Pues no lo sé muy bien :).

Sigo en Madrid; creo que resulta evidente pero para los más despistados prefiero aclararlo jejejeje. Las cosas se mantienen en su curso habitual, muy ocupado e intentando aprovechar al máximo el poco tiempo libre del que dispongo.
Como os contaba antes, en el trabajo estamos hasta arriba,pero hasta arriba de verdad, en serio,y muchas veces me saturo (es lo que tiene estar más de 14 horas seguidas frente a esta maldita pantalla) y me apetece mandarlo todo a la mierda pero enseguida se me pasa y me lo tomo con calma. A pesar de esos ataques momentáneos de, no sé muy bien como llamarlos, quizás locura jajajajajja; sigo muy contento, aprendiendo un montonazo de cosas nuevas y cada día que pasa con más ganas de aprender. Puede que resulte raro pero os lo digo como lo siento.

En el terreno personal las cosas siguen bien (aunque últimamente puede que mejor que bien ;) aunque eso lo dejaremos para futuros episodios).
Entre unas cosas y otras hace un montón de tiempo que no sé nada de mis amigos; salvo una llamada de Andre hace poquito y un mail de Vicio para decirme que el último finde del mes en curso se vendrá a visitarme (ya tengo ganas de que llegue!!) la verdad es que he perdido un poco el contacto.

Y a pesar de que hace tanto tiempo que no escribo no tengo muchas cosas más que contar y tampoco quiero aburriros con cosas del trabajo (últimamente es la tarea a la que dedico el 75% de mis horas jajajajaj). Espero que todo el mundo siga bien y prometo actualizar ésto con cosas más interesantes en cuanto me sea posible.

Un canción con la que me he encontrado mientras navegaba y que me ha gustado mucho:



Un abrazo
Migue

PD: el finde que me fui a ver el Billabong Pro Mundaka sólo tuvimos un día de competición en Bakio. A pesar de que las olas no eran una maravilla el viaje mereció la pena y el domingo pudimos disfrutar de unas cuantas mangas.