Oct 21

Jugando con Archiva

 

El otro día me puse a jugar con archiva. Esta aplicación básicamente realiza dos tareas:

  • Hace de repositorio de maven, en el que se pueden dejar los jar de nuestros proyectos. Eso sí, para poder ejecutar el mvn deploy correctamente sobre este repositorio de archiva, debemos tener la última versión de maven, la 2.0.9.
  • Hace de proxy con los repositorios maven en internet. De esta forma, nuestros proyectos maven pedirán los jar al repositorio de archiva y este, si lo considera necesario, accede a internet y los baja.

La instalación standalone es realmente simple. Basta descargarse y arrancar. Todo queda con una configuración por defecto que podemos cambiar fácilmente desde el navegador. Luego sólo nos queda configurar nuestro fichero settings.xml de configuración de maven para indicarle dónde esté el repositorio de archiva. Eso sí, en vez de el protocolo ftp que se indica en el enlace, archiva usa el protocolo webdav y por ello debemos tener maven 2.0.9 o añadir el plugin adecuado.

La instalación como servicio de Windows también es inmediata. Basta arrancar el Wrapper correspondiente.

Eso sí, cómo no, mi primera intención fué instalar el war de archiva para usarlo con Tomcat, pero mirando las instrucciones, ni se me ocurrió intentarlo.

En fin, que lo tenemos ahora montado, como servicio de windows y de momento únicamente yo, en plan de prueba, lo estoy usando como repositorio único. Hasta ahora va bastante bien y creo que se va a quedar de forma definitiva para todos.

Oct 18

¿TDD requiere memoria de elefante?

 

A mí siempre me ha gustado programar de poco en poco, haciendo un trozo de código que se puede arrancar y ver, luego añadir otro trozo que también se puede arrancar y ver y así sucesivamente. Nunca me ha gustado liarme a escribir código durante varios días, sin probar nada, y luego arrancarlo y pasarme otros varios días haciéndolo funcionar. No sé qué es mejor, pero desde luego, me gusta más lo primero, es más entretenido. Tiene la pega de que "pierdes", sobre todo en proyectos grandes, mucho tiempo compilando. Haces algo en uno o dos días, compilas y pruebas, repites, y repites.

Por todo esto, TDD es una metodología que me gustó desde que la descubrí. Básicamente dice que hay que hacer lo que yo hago, implementar un poco y probar. Sin embargo, TDD es por supuesto más estricto y organizado. Antes de programar, debes hacer unos test para ver que fallan. Luego debes implementar tu código para que no falle y finalmente debes refactorizar para que tu código si adapte bien al resto del código y viceversa.

Así que he tratado de adaptar mi forma de trabajo a TDD. Pero me encuentro con un problema con la refactorización. No es lo mismo ir haciendo código y refactorizar según vas viendo código chapucero, que esperar a tener algo funcionando y luego refactorizar para adaptar tu código o el código ya hecho el uno al otro. Mi principial problema es la memoria de mosquito. Una vez tengo mi código, ya no me acuerdo con detalle de cómo estaba hecho el anterior, y no sé qué tengo que refactorizar para que se adapten el uno al otro. No me queda más remedio que dar un repaso a lo ya hecho para ver qué juntar.

Supongo que a la larga incluso es mejor, ya que el repaso del código para mejorarlo tiene que ser bueno, pero no deja de ser un poquito pesado.

Oct 11

Sobreorientación a Objetos

 

Ando últimamente un poco preocupado sobre un tema.

Según puedo comprobar en la realidad, el 90% de los programadores no sabe realmente de orientación a objetos. Sí, el 90 % de ellos a lo mejor han usado alguna vez, por ejemplo, un patrón observador: un ActionListener de java lo es y sólo por hacer un botón que haga algo, ya el 90% de los programadores lo han usado. Implementar uno en tu diseño/programa también. El patrón observador es sencillo y bastantes programadores lo han implementado alguna vez en sus proyectos, incluso muchas veces.

Pero ¿qué pasa con el resto de patrones? ¿Quien conoce el patrón estado, o el patrón comando, o cualquier otro de esos que hay por ahí menos conocidos? ¿Y cuántos lo han implementado alguna vez para algo? ¿y cuántos de esos poco lo han hecho correctamente?. Ya estamos llegando al otro 10 % de programadores, los que realmente entienden la programación orientada a objetos, los que realmente entienden la utilidad de esos patrones y los que realmente son capaces de usarlos y sacarles partido en proyectos reales, los que después de pasarse ocho horas programando en el trabajo, llegan a casa, encienden el ordenador y se ponen a programar lo que les gusta.

Pero ahí está el problema. Para ese 10% de programadores el código que han hecho es entendible, fácilmente modificable y adaptable y una pequeña maravilla de la técnica. ¿Y qué pasa cuando tiene que mantener ese código un programador del otro 90%, que suele ser el 90% de las veces?. Pues que se encuentran un código que no entienden, en el que no saben qué buscar ni donde, en el que no tienen ni idea de qué tocar y en el que toquen lo que toquen, fastidian algo.

Y esa es mi preocupación. ¿Hasta qué punto es entonces bueno usar la orientación a objetos?. La situación real es que cuando necesitas modificar/adaptar un sofware ya hecho con intención de reutilizarlo en otro proyecto, depurar algún bug, añadirle algo de funcionalidad, etc, el programador original ya está en otras cosas y sólo tienes un 10% de posibilidades de que la persona a la que pongas a hacerlo pueda hacerlo.

Al final, el código hecho por ese 90% de programadores que hace un uso básico de la orientación a objetos es realmente el código que resulta mantenible, el código que cualquier programador puede entender y cualquier programador puede tocar con cierta seguridad, aunque no sea todo lo elegante ni correcto que debiera ser.

Dicho de otra forma, muchos son capaces de tocar un texto en prosa para que diga otra cosa. Muy pocos son capaces de entender una poesía genial, modificarla para que diga otra cosa, y siga siendo genial.

En fin, cada vez soy más partidario de hacer código más "lineal", usando la orientación a objetos lo más simple posible y en los sitios que realmente se le saque un partido real. Si estás en un proyecto en el que todos los programadores son programadores de "élite", en el que todos ellos realmente viven la orientación a objetos y todos ellos de coeficiente intelectual alto, adelante, usa todos los patrones que quieras. Si estás en un proyecto normal con programadores normales (el 90% de las veces y el 90% de los programadores), piénsatelo dos veces antes de poner un patrón estado.

Oct 04

Duró poco

 

Pues me duró poco la alegría del pagerank 5 en mi sitio web. Hace unos días google actualizó nuevamente sus pagerank, esta vez sólo dos meses después de haberlo hecho por última vez, y he vuelto a mi sempiterno pagerank 4.

Lo cierto es que lo tengo merecido. Ultimamente estoy muy, pero muy vago. Escribo poco o nada en la wiki, salvo mi foro prácticamente no visito los foros habituales y en este blog tampco escribo con demasiada frecuencia. Cuando enciendo el ordenador, arranco mi jueguecito de ajedrez o de Warhammer 40000 y hecho ahí el tiempo libre.