Construyendo proyectos .NET usando Maven

Los que me conocen saben que por lo general tiendo a usar Maven para todo, pero si lo hago, es porque estoy convencido de que está bueno tener un marco para ciertas tareas repetitivas, y despues de haber visto tantos enfoques, creo que lo que propone maven es bastante razonable, para prácticamente cualquier lenguaje.
Pero la idea de este post, no es hablar de lo que ofrece Maven, sino de describir cuales son las alternativas que existen hoy en día para poder utilizarlo en proyectos de la plataforma de Microsoft.
Cabe aclarar de que en mi carrera como desarrollador, comencé utilizando la plataforma .NET, antes que JAVA, cuando todavía estaba apareciendo, allá por el año 2000 (12 años ya pasaron, dios!). Luego la vida me llevó al mundo de la tacita de café, en el cual descubrí otras formas de construir aplicaciones; y luego de unos años me volví a enfrentar nuevamente a la tarea de arquitecturar y de trabajar con aplicativos de este sabor.
Acostumbrado como estaba a sistemas alineados con los lineamientos propuestos por Maven, debo confesar que pasé por varios estados de ánimo al ver que me faltaban ciertas características que ya las consideraba como básicas en todo proyecto de desarrollo, como ser el layout común de estructura de directorios, manejo de dependencias, de versionado, de releases, etc.
Entonces comencé a buscar diferentes maneras "hacer andar maven" con .NET. Ahorrando los detalles de la búsqueda, llegué a dos alternativas diferentes: NPANDAY y maven-dotnet-plugin.

NPANDAY

El primero es un proyecto al cual seguí por algunos años, comenzó como un tímido port de los plugins core de Maven pero evolucionó mucho a lo largo del tiempo, y actualmente se encuentra como proyecto incubadora en el cúmulo de Apache, lo cual no es poco.
El enfoque de este proyecto es acercar maven a los desarrolladores .NET, facilitando la vida a los que están acostumbrados a trabajar la mayor parte del tiempo, con la IDE N°1 de la plataforma: Visual Studio.
Tal es así que el proyecto está dividido en dos grandes partes: por un lado el gran conjunto de plugins que permiten hacer las tareas rutinarias (compilar, empaquetar, construir, liberar, etc.) del proyecto utilizando Maven y por otro lado un plugin para Visual Studio que permite realizar ciertas tareas (ciertas modificaciones a los archivos pom.xml, agregar dependencias, construir, etc.) desde adentro de la IDE.
Al comenzar a investigarlo, una de las cosas que no me gustó demasiado, es que el proyecto en sí, se aleja mucho de la filosofía Maven, en el sentido de que para comenzar tenemos que seguir una Guía de Instalación. Nada más alejado del espíritu Maven, de ser un software que se autoinstala en cierta manera, ya que todas  las partes que lo componen se van descargando a medida que se va utilizando. En las primeras etapas del proyecto, incluso, uno tenía que descargarse todo el repositorio completo para poder utilizarlo, y nuevas versiones de NPANDAY obligaban a tener nuevas versiones del repositorio! ... muy Microsoft :)  ... por suerte hoy en día todo está subido al repositorio mundial.
Otro de los problemas a los cuales me enfrenté, fue al hecho de que el plugin para Visual Studio, solo funciona si lo tenemos funcionando en idioma Ingles (a tenerlo en cuenta, ya que lamentablemente este tema todavía no está solucionado).
Con respecto a la documentación, que si bien existe y es bastante, me da la sensación de estar bastante desorganizada, uno no sabe por donde comenzar, sobre todo si ya tenemos un proyecto funcionando y lo queremos hacer andar con Maven, no hay una guía simple de como hacerlo. Tampoco si queremos empezar desde cero, sobre todo lo que es relacionado al manejo de dependencias. Una buena página para los que quieran comenzar, es la que muestra el listado de plugins existentes.
La verdad que luego de intentar utilizarlo llegué a varios problemas (como por ejemplo la falta de plugins de reporting, y un no muy buen esquema de directorios para el testing unitario) por lo que lamentablemente tuve que seguir buscando a ver si no existía alguna alternativa.

Maven-dotnet-plugin

Por suerte existe, este proyecto apareció tímidamente en la n-ésima búsqueda en google, y terminó sirviendo totalmente para lo que estaba necesitando. El enfoque es totalmente diferente: está pensado para las personas que ya conocen Maven, y que lo necesitan para poder construir proyectos en .NET
En este caso olvídense de plugins de visual studio y de grandes características. Es un simple proyecto que lo que intenta resolver es justamente, poder construir proyectos .NET usando Maven.
Ya desde el sitio oficial uno ya se siente a gusto con el layout utilizado, obviamente generado automáticamente por los plugins de Maven. Este proyecto si bien tiene algunas limitaciones (ej. no pude hacer andar el manejo de dependencias, lo cual lamentablemente es bastante malo), pose algunas características muy interesantes, como por ejemplo muchos plugins de reporting que funcionan de lo más bien con servidores de construcción como Jenkins (lo más interesante es que tenemos el reporte de DRY gracias al plugin CPD), una idea inicial de empaquetado de aplicaciones WEB, un muy buen enfoque de estructura de directorio e integración con Galio para el unit testing, todo esto a la Maven-way, es decir, se descarga cuando se usa.

Conclusión

Se que probablemente lo que esperaban es un análisis más detallado de las características de cada uno, pero les puedo dejar como conclusión, despues de haber utilizado las dos herramientas lo siguiente: NPANDAY se ve como un proyecto más grande, con más plugins, más líneas de código y más esfuerzo de fondo. Lamentablemente todavía tiene muchos problemas que lo hacen prácticamente inusable, y para colmo de males, el proyecto parece haberse detenido en la versión 1.4.0-SNAPSHOT, una pena realmente, ojalá en algún momento lo retomen y lo continúen. Con respecto a maven-dotnet-plugin, lo recomiendo, si bien es mucho más humilde y más simple, funciona, hace lo que promete y bien, y nos abre las puertas a tener proyectos similares, ordenados, liberables y construíbles contínuamente.
Nos vemos en el próximo post.

Eclipse Juno: Primeras impresiones

Todavía me estoy descargando la nueva versión de eclipse, pero ya tengo ganas de escribir un poco acerca de lo que pude advertir en las notas de lo nuevo que trae este release de una de las IDES más usadas para programar en lenguaje JAVA, y algunos otros como PHP, C++, etc.
Eclipse es un megaproyecto que, seguramente como a varios colegas, prácticamente me acompañó en toda mi vida de programador JAVA. Cuando me refiero a megaproyecto, me refiero a que ya tiene más de 20 años, lo cual no es poco en la vida de una IDE. También me refiero a que en realidad no es un único proyecto isolado, sino que es una organización incubadora de pequeñas joyas (como Mylyn, WTP, etc.) que viven dentro del ecosistema del mismo nombre.
Para los que no lo conocen (si es que hay alguien) o que no siguen los releases, hace un tiempo que se adoptó el formato de releases sincronizados anuales, con un nombre relacionado a lunas, dioses antiguos o científicos famosos. Esto fue necesario por la enorme cantidad de proyectos con versiones que dependen entre si (por ejemplo ahora fue un release de 72 proyectos simultáneos).

Nuevo y que valga la pena anotarlo

Leyendo un poco las famosas New and Noteworthy, lo primero que vemos es que despues de mucho tiempo, se optó por hacer un profundo rediseño del look & feel. La razón es adoptar un enfoque más moderno, y ocultar un poco de líneas, sobre todo en los elementos que no tienen el foco. Personalmente por lo que pude ver en las capturas, no me parece feo, pero me da la impresión de que tiene muchos espacios no aprovechados.
Relacionado a la usabilidad, pareciera que todos los elementos son un poco más flexibles. Ahora las vistas se pueden situar en el espacio de los editores, esto viene muy bien para vistas que muestran mucha información (como por ejemplo la Problems View). También se pueden disponer de forma dividida, para poder maximizar un editor, y al mismo tiempo tener una vista en la misma zona. Relacionado a esto, ahora los editores se pueden desatachar y convertirse en ventanas independientes.
Una cosa que me pareció curiosa, es que se puede seleccionar una intersección de vistas, y arrastrando se pueden dimensionar varias vistas al mismo tiempo.
Una de las cosas que por mucho tiempo diferenció a eclipse de otras IDEs, es que mantiene un "estado" de los archivos, interno e independiente de lo que ocurre por fuera de la IDE. Es decir que si uno tocaba un archivo con un editor externo, luego al trabajar con Eclipse, era necesario hacer un "refresh" (F5) sobre el mismo, para que tome los cambios. Ahora en esta nueva versión, existe un mecanismo habilitado por defecto, que lo que hace es hacer esa actualización de forma automática y en background.
Con respecto a lo que me pareció más llamativo, de lo nuevo que trae para los desarrolladores JAVA, tenemos resaltado de las llaves que engloban al código sobre el cual estamos parados (antes solo se hacía cuando estábamos parados sobre una de las llaves), posibilidad de asociar un editor a los archivos .class que no tienen código fuente asociado (antes era para todos los .class), detección de leaks cuando trabajamos con recursos y diferentes análisis para cuando trabajamos con las anotaciones @NonNull y @Nullable.
En fin, no son muchas cosas (igualmente acá estamos hablando solamente del core de la IDE, probablemente existan muchos más cambios en los proyectos satélites como WTP, etc.), pero vale la pena probarlo, ya que probablemente junto con estos new features, probablemente haya muchos bugfixes.
Terminé de bajarlo, asi que lo pruebo y les cuento!

Herramientas: BoxCryptor

Si bien esto no está directamente relacionado con el desarrollo y la programación, me pareció una herramienta muy útil, para los que quieran almacenar sus creaciones en la nube, sin tener que dejar cada archivo expuesto a la merced de los términos y condiciones de los servicios más populares.
BoxCryptor es una herramienta bastante simple. Esencialmente se trata de un aplicativo que permite encriptar nuestros archivos, antes de que se escriban en un filesystem. Como encripta cada archivo por separado, es especialmente útil e interesante, para subir, luego, lo generado a servicios como DropBox, Google Drive o Sky Drive.
La forma de uso es bastante simple, luego de instalarlo, tenemos que crear un directorio, en cuyo interior se va a almacenar todo lo que necesitemos de forma encriptada. Si ya tenemos funcionando algún servicio de cloud hosting, lo conveniente es seleccionar un directorio ya sincronizado.
Luego nos preguntará el nombre de un drive (lo probé utilizando la versión Windows), el cual servirá para trabajar con nuestros archivos. Luego de este paso ya lo podemos utilizar.
Una vez que esté en funcionamiento, lo único que hay que hacer, es arrastrar lo que querramos proteger, al drive creado, y automáticamente lo va a ir encriptando en el directorio que seleccionamos previamente, y luego esto será sincronizado de forma automática.
Lo que me pareció interesante, es que podemos volver cualquier archivo a una versión anterior (ej, usando Google Drive o DropBox), y el archivo encriptado se restaurará sin generar problemas de checksum o cosas por el estilo. La versión free tiene el limitante de que solo nos permite tener una carpeta encriptada al mismo tiempo, pero podemos ir eliminando y seleccionando cada carpeta que querramos sin mayores complicaciones, por lo que se puede usar para varios directorios (no al mismo tiempo).
Muy recomendable!