7 de agosto de 2012

Ante un error, no hay que dar todo por sentado

Hacía unos días que estaba luchando para descompirmir un archivo . rar desde una aplicación MVC con la librería de SevenZipSharp.
Hice un par de test y todo funcionaba.
Pero cuando lo implementaba en la aplicación MVC me sucedía el mismo error que da origen a esta discusión del foro de la librería,.
El error era bastante generico y ya estaba por tirar la toalla luego de preguntar en listas. Hasta que encontre un post donde se explicaban como obtener una descripción más clara del error. Así que procedí a bajarme el código fuente y aplicar las instrucciones. El código quedo así

En NativeMethods.cs

DllImport("kernel32.dll", BestFitMapping = false, ThrowOnUnmappableChar = true, SetLastError = true)] public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string fileName);

Y en LibraryManager.cs

if ((_modulePtr = NativeMethods.LoadLibrary(_libraryFileName)) == IntPtr.Zero) { 
//throw new SevenZipLibraryException("failed to load library.");
 throw new System.ComponentModel.Win32Exception();
 }

Ahora el error era más especifíco pero igual de críptico!!


 error 193 "%1 Is Not a Valid Win32 Application"

Sin saber mucho que hacer, hice caso a la recomendación de usar Dependency Walker para ver si no había algún modulo compilado para x64, y ahí estaba la madre del borrego!

La librería COM de 7-Zip (7z.dll) que bajas de acá   y que es la indicada para x86, tiene un módulo interno para x64.  es correcta.
Por lo que me fui al sitio de 7zip y lo instale en una máquina virtual de XP y me copie esa dll que es la que referencio en el proyecto.
Por suerte esta vez, la novela tuvo un final feliz.

Update:  Cuando termine de escribir el post me quedo la duda si ante el mareo de tantas pruebas no había yo pisado mal la dll, ya que al principio había copiado la dll desde mi instalación (x64)
Volví a probarlo y fue así, por lo que como dice el titulo "no hay que dar todo por sentado", y mejor es reconocer los errores a tiempo.






28 de mayo de 2012

Twitter Bootstrap: un nuevo estandar web?

Para quienes no conocen "Twitter Bootstrap"  vamos a comentar que básicamente es un "template" de páginas html realizado por desarrolladores y diseñadores de Twitter con las mejores prácticas que hoy se conocen para desarrollar sitios web multiplataforma (html responsive, grid, css, less, sprites, etc.), y que permite iniciar el diseño de un sitio con mínimo esfuerzo y maravillosos resultados. Entonces, antes de seguir leyendo recomendaría que se peguen una vuelta por ahí y le echen una mirada.
Sin embargo, los "bootstrap" no son nuevos, y hay varios muy buenos dando vuelta. Por lo que desde hace un tiempo cualquiera que empiece un sitio web debe tener "muy buenas" razones para no implementar alguno de ellos, ya que:
  • permiten establecer un "código común" entre desarrolladores y diseñadores gráficos.
  • no estamos reinventando la "rueda" cada vez que iniciamos un sitio
  • fáciles de actualizar con la mejoras provistas por la comunidad
  • y obviamente todos las ventajas del open source
Entonces cual es la novedad?
Lo que me llama a la reflexión del título es que quizas es la primera de estas herramientas que cuenta con el potencial de difundirse masivamente, y de tener una calidad de producto, de documentación y de actualización,  que díficilmente otros alcancen en lo inmediato, ya que cuenta con la sinergia de una gran empresa y de la comunidad. Esta suma de condiciones es en mi opinión lo que va a llevar a situarlo como un estandar de facto.
Conclusión:  vayamos agregando en nuestros C.V. a esta maravillosa herramienta.


1 de marzo de 2011

Katayunos de febrero



El 17 y 25 de febrero pasado tuve la suerte de participar en la organización de dos "Katayunos". El primero lo realizamos junto con un grupo de amigos (Mario Dal Lago y Francisco Larramendi) en un bar de Buenos Aires, donde degustando unas ricas medialunas llevamos adelante una "kata" de "StringCalculator". El segundo lo realizamos en el laboratorio de Grupo de Usuarios Microsoft(MUG), (el próximo será el 29 de marzo) junto a Ariel Cen, Alejandro Nelis y Carlos Peix.

Para quien no conozca lo que son los "katayunos", les cuento que es una reunión, inspirada en los "coding dojo", donde un grupo de programadores nos juntamos a escribir código para resolver un problema (o sea la "kata"), y a la vez desayunamos. El acento no está puesto en resolver un problema complejo, en general son muy sencillos, sino en practicar pair-programming y TDD. La idea es ir adquiriendo una "gimnasia", que nos acostumbre a incorporar estas prácticas, como movimientos naturales, a nuestra programación diaria, al estilo de las "katas" en las artes marciales.

Las ventajas que le encuentro a los "katayunos" es que son reuniones que organizarlas cuesta muy poco, solamente se necesita combinar un lugar de encuentro como un bar y un par de notebooks, y que nos permite aprender e intercambiar experiencias con programadores que quieren innovar y mejorar la calidad del software que construyen diariamente. Por otro lado la escala no condiciona su realización, ya que con dos personas ya le da sentido a la reunión.

Acá les dejo un video de la comunidad ágil de Buenos Aires sobre la realización de un "randori coding dojo" con una explicación más detallada del sentido de estas prácticas.
Y una "traducción" de la kata de "String Calculator"

22 de diciembre de 2010

Alt-net Open Space Buenos Aires 2010

Finalmente se realizó el Alt-Net Open Space 2010 (#altnetba en twitter) en las cómodas y "remodeladas" oficinas de Microsoft de Argentina. Sinceramente fue un gusto encontrarse de nuevo con varios amigos de la comunidad y tambien "ponerle la cara" a muchos nombres que leemos en la lista de alt-net argentina y en alt-net hispano.
Acá les dejó algunos post que hicieron otros asistentes del evento.

23 de marzo de 2010

Are you ConfORM? Yes!!!

Fabio volvió a hacerlo(cfr. NHValidator, SharpTestEx), y nos voló la cabeza con un espectacular código para olvidarnos de los .hbm, y mapear directamente nuestras entidades a la BD sólo escribiendo lo mínimo indispensable.
ConfORM, que así se llama el proyecto, es (entiendo) un framework para CONFigurar desde código el ORM NHibernate, sin necesidad de utilizar los archivos XML, y aprovechando las nuevas funcionalidades de NH 3.0. Pueden saber más de como usarlo visitando su blog o escuchando la VAN que dio en altnet.hispano.
Pero a que viene todo este cuento?
Es que estuve trabajando en mi framework Quetzal para implementar una "extensión" (no son extensiones de .net) que use ConfOrm en lugar de AutomationNH( o NHGenerator) , ya que el espiritú es el mismo, pero ConfOrm esta mucho mejor resuelto, y posee como ventaja el amplísimo conocimiento que tiene su autor sobre NH y el manejo de BD en general.
El cuento viene entonces debido a que, luego de "bucear" en el código de ConfOrm, y de preguntarle algunas cositas al "bueno" de Fabio, pude implementar la extensión, y parece que todo funciona.
Así que el código esta subido como para empezar a probarlo.

Documentación ágil y Open Source

El pasado sábado 13 de marzo participé del Agile Open Space 2010 en Buenos Aires que organizó la gente de Agiles de Argentina. Demás esta decir, que fue una experiencia muy productiva y enriquecedora, no solo desde el punto de vista técnico sino humano también.
En una de las charlas en que se dividio el Open Space, se tocó el tema de la documentación de un proyecto "ágil". La motivación de quien había propuesto el tema provenía de que estaba trabajando, junto con su equipo, en un proyecto como consultor externo, y terminado este deberían transferirle las capacidades para que un equipo interno de la empresa lo siguiera desarrollando.
Esto disparó una serie de propuestas desde armar videos con entrevistas a los propios desarrolladores, como demos para mostrar el deployment, hasta distintos tipos de gráficas, o infografías que explicaran la "metafora" del sistema que estaban desarrollando. Todas propuestas que implicaban dejar mucho más que un "Manual del usuario", y que apuntaban a tratar de "explicar" en un nivel de mayor abstracción, lo que el código decía.
Pero una de ellas me quedo picando en la cabeza, y fue la idea de escribir un blog con las decisiones de arquitectura que vamos tomando en el día a día, porqué usamos esta opción y desacartamos otras, o porque el surgimiento de un nuevo requerimiento implico cambios, etc.
Y esto me pareció muy aplicable al escenario que presentan los proyectos "open source", donde también se necesita tranferir el saber de un proyecto a personas que no han trabajado en él. Y pongo el acento en esto, porque creo que una de las grandes dificultades para que no haya más personas en proyectos "open source" es lo difícil que resulta iniciarse en uno, es decir tener un nivel de conocimiento mínimo de lo codificado, entender la "metáfora" de quienes lo diseñaron, y como eso impacto en el código.
Ya sabemos que arduo es, escribir la documentación de cualquier proyecto, quizás este sea un mecanismo "ágil" para lograrlo, ya que no solo ayudará a los "newbie", sino a nosotros mismo cuando volvamos 2 años despues a modificarlo :(

12 de enero de 2009

Quetzal finalmente disponible

Luego de un año ajetreado, finalmente he liberado el código de Quetzal bajo una licencia GPL. Lo pueden descargar de aquí.

Varias fueron las razones por las que tarde tanto en liberar este framework, pero la principal era que en la primeras versiones era arduo de configurar y de extender, cosa que lo hacía muy improductivo. Por suerte, Quetzal ha cambiado mucho internamente, desde esas primeras versiones principalmente para facilitar su extensibilidad.

Es así que Quetzal es un framework "orientado a la generación de código", ya que si bien fue pensado para resolver varios de los problemas que se presentan al trabajar con la generación de código, su capacidad de mantener el "modelo" en memoria permite que funcione como una "extensión" de las clases del dominio agregando propiedades y métodos de forma dinámica.

Quienes bajen el código tendrán entre sus manos lo siguiente:

  • El "core" de Quetzal que es "ModelDescriptor" y tres extensiones,
  • AutomationNH tambien conocida como NHGenerator que permite generar los .hbm a partir de las clases del dominio.
  • ModelToArtifact (M2A) que implementa un mecanismo para la manipulación y la administración de la generación de código
  • y Validator que como su nombre lo indica implementa validaciones usando como validadores específicos los de EntityLibrary 3.1

Pueden seguir como ejemplo los test, para el caso de M2A y Validator,  y el sample para el funcionamiento de "NHGenerator". Se que los ejemplos son pobres pero mi idea es tener una demo y "alguna" documentación que integre todo próximamente.

Espero sus comentarios y que les sea útil.