Maven

January 17, 2012

Desde que entre en mi nuevo puesto he tenido que enfrentarme a tecnologías con las que no me había topado antes. Hoy quiero hablar de maven. En mi experiencia como desarrollador he trabajado principalmente con dos lenguajes de programación, por un lado php y por otro y por encima del anterior con python. Cuando los proyectos se hacen relativamente grandes el proceso de configuración del proyecto en sí para poder comenzar a trabajar es a veces excesivamente costoso, en python esto se resuelve con virtualenv, pip y pypi. En java esto se puede resolver con maven.

maven es más que un sistema de repositorios, ya que tambien permite construir los proyectos,  compilándolos y generando los artefactos necesarios en cada caso. Esto puede resultar extraño para alguien que viene de un mundo en el que los lenguajes no tienen que ser compilados,  en python todos los requerimientos son de tiempo de ejecución, sin embargo, en un lenguaje compilado, pueden existir distintos tipos de dependencias, lo que hace casi una necesidad que el mismo software que se usa para gestionar las librerías sea usado para construir el proyecto.

Una de las cosas que más me gusta de maven es el famoso “maven war overlay”. Básicamente es un mecanismo que permite construir proyectos y despliegues de una manera similar al paradigma de la herencia. En el proyecto en el que estoy trabajando actualmente usamos este mecanismo para modificar por partes los distintos aspectos que deseamos personalizar, como el aspecto, algunas extensiones o los parametros necesarios para ejecutarlo en producción o pre-poducción.

Se puede usar maven desde eclipse via un plugin. Esto es realmente deseable para gestionar el pom.xml, ya que cuenta con un editor hecho para humanos en lugar de tener que trabajar con un larguísimo fichero xml. Me parece particularmente útil el mecanismo para añadir dependencias ya que se encarga de buscar el groupid por ti lo cual es altamente cómodo.


Python platform for development

November 18, 2008

Most develop companies use to choose a development platform for all its projects. While this is probably not a good idea for big ones, I realize than doing so has some advantages for small ones. Get specialized is important in order to achieve the best productivity.

There are several platforms you can choose:

  • .Net/Mono
  • Java
  • Others

The first two are the ones most companies choose. Probably the most important features for those are they are quite extended, it’s possible to develop for a lot of  devices, has great IDEs, etc.

I would like to mention that Python at this level. Since Django became important in the web applications scenario, developers coming from PHP, Java and others has given it a chance, you can develop desktop applications (QT, wxWindows, etc.), web applicatrions (Django, Turbogears, etc.), mobile applications (PyS60, PythonCE, etc.). There are some IDEs such as Eclipse and Netbeans (6.5 or greater).

Python is much more faster to develop than Java (and probably .Net) as you can perform quite complex operation in a really simply manner, while it keep the code clean and readable due to its blocks (not like Perl).

On the other hands it miss namespaces (can be simulated some way using packages) and private variables.

On my view Python is one of the most interesting alternative to the major established develop platform.