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.