miércoles, diciembre 23, 2009

VS2008: M$, M$,... hasta cuaaaaando!!

Hace unas semanas prepare un ambiente de desarrollo con Visual Studio 2008 en una maquina virtual corriendo Windows Server 2008 Std y VirtualBox.

Todo funcionaba de maravilla, excepto que cada vez que enviaba a compilar el proyecto se tardaba hasta 10 minutos.

Luego de varios dias sufriendo eso, apenas HOY fue que recorde que lo mismo me habia pasado con mi ambiente de desarrollo original y que en su momento lo habia corregido.

La causa? una tecnologia desarrollada por M$ llamada Platform Verification Task. Para hacer muy corto y cuento muy largo, esta tecnologia permite verificar que no estemos usando elementos que no esten disponibles para la plataforma especifica para la que estamos desarrollando (ej, usar un objeto Button en Windows Mobile Phone Edition).

Este proceso se ejecuta DESPUES que VS ya ha compilado el proyecto e identifica clases o caracteristicas que no sean compatibles con la plataforma asociada al proyecto y lo notifica al usuario.

El problema es que este proceso tarda MUCHISIMO. Hasta aqui todo bien, realmente. Y en donde metio la pata M$?? bueno, pues en que a NADIE se le ocurrio que dado que ese proceso es sumamente lento, uno podria querer DESACTIVARLO temporalmente y reactivarlo solo cuando uno quiera realizar esa verificacion.

Afortunadamente, hay una forma relativamente facil de resolver el problema.


domingo, septiembre 27, 2009

Otra de las de M$

Hoy me tope con otro de esos errores en los que M$ se especializa tanto. El error en cuestión aparecía al momento de compilar el proyecto, luego de incluir una clase que hacia referencia a clases contenidas en System.Data.SqlClient:

genasm.exe(1) : error There was an error initializing Tracker.Helpers.CFSqlSP. Could not load file or assembly 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes' or one of its dependencies. El sistema no puede hallar el archivo especificado.

Luego de mucho investigar y probar, incluyendo una reconstrucción del proyecto en VS, encontré que el error era causado por la presencia del archivo DesignTimeAttributes.xmta, el cual contiene atributos personalizados utilizados por el editor de diseno de VS. En mi caso particular, este archivo contenía la propiedad DesktopCompatible(true) para varios controles de usuario en uso dentro del proyecto.

Una búsqueda exhaustiva en Google arrojo varias posible soluciones, que al menos a mi no me funcionaron:

  • Excluir el archivo XMTA del proyecto: esto efectivamente eliminaba el error al compilar, pero impedía cargar en el diseñador cualquier forma que contuviera controles de usuario heredados.
  • Incluir manualmente la referencia a los DLLs indicados en el error, dentro del archivo del proyecto.

Al final, y solo luego de mucho buscar, encontré un post de una persona llamada Joaquin Raya, que ofrecía la mejor explicación que encontré sobre la raíz del problema. Según explica Joaquin en su post, el problema es causado por un bug en VS 2008 el cual, cuando se usa el archivo XTMA dentro de un proyecto, causa una confusión dentro de las rutas de búsqueda de los DLLs, causando que VS intente ubicar las DLLs especificas de .NET CF dentro de los archivos del .NET Framework.

Su solución resulto ser bien sencilla: ubicar los DLLs indicados en el error e instalarlos en el GAC. En mi caso particular, lo hice de la siguiente forma:

  1. Abrí una ventana de Explorer en la carpeta C:\Archivos de Programa\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE
  2. Abrí otra ventana de Explorer en la carpeta C:\Windows\assembly
  3. Seleccioné los archivos System.dll y System.Data.dll en la carpeta WindowsCE y los arrastre sobre la carpeta assembly.

Nótese que, aun cuando mi proyecto estaba basado en el .NET CF 3.5, el error hacia referencia a archivo System.dll versión 2.0.0.0. Hay que fijarse bien en esto para saber que versión de los DLL se debe copiar en el GAC.

Y saben lo mas triste de todo el caso? que este mismo error ya había sido reportado en VS 2005 y corregido en su SP1.... solo para reaparecer vivito y coleando en VS 2008.... hay que ver!!


Gracias M$, por mas de dos horas improductivas y estresantes

lunes, junio 22, 2009

ASP.NET: Como alinear el contenido de un TextBox a la derecha

Algo como esto deberia ser sencillo: simplemente seleccionarse el valor "Right" en la propiedad Alignment del TextBox... pero increiblemente, la propiedad Alignment de la clase asp:TextBox solo acepta el valor "Left".

Asi que si desean obtener un control TextBox cuyo contenido este alineado a la derecha, se debe utilizar un workaround, como este:

anyTextBox.Attributes.CssStyle.Add("TEXT-ALIGN","right");

Las cosas del ASP.NET....!!

sábado, mayo 30, 2009

ASP.NET: Cuidado al eliminar una cookie

La colección Response.Cookies contiene un método de nombre Remove, que a primera vista pareciera el indicado para eliminar una cookie previamente definida:

Reponse.Cookies.Remove("myCookie")

Lógico verdad? pues resulta que el método Remove lo que hace es eliminar el cookie de la colección de cookies, pero no la elimina FISICAMENTE, por lo que en el siguiente Request esa cookie será cargada nuevamente.

Investigando un poco resultó que la forma más facil de eliminar definitivamente una cookie es hacerla expirar:

Response.Cookies("myCookie").Expire = DateTime.Now.AddDays(-1)

Increible verdad?  al mas puro estilo de Microsoft!! :) :)

miércoles, mayo 20, 2009

I'M BACK!!!

Hoy revivi mi sitio web, aunque con un pequeño cambio: en lugar de ser www.victorespina.com, ahora sera www.victorespina.com.ve.

La razón? pues un gracioso en USA no le pareció mejor que comprar mi dominio original cuando este venció a principios de este año (gracias Chavez por obligar a mi hosting a cobrar en US$ por los dominios .com) y ahora quiere que le pague 50$ por devolvermelo, cuando mi hosting me cobra 11$.

Asi que lo mande bien largo pa la $%!#%# y decidi nacionalizar mi dominio.

Asi que ya saben: mi nuevo sitio web es:

www.victorespina.com.ve

lunes, mayo 18, 2009

Una de abogados

Este chiste me lo conto el novio de mi cuñada, y la verdad me rei pero mucho!!

Los científicos estan estudiando seriamente la posibilidad de usar Abogados en lugar de ratas para sus experimentos, debido a tres razones:

1) Hay mas abogados que ratas
2) No hay sociedades defensoras de los derechos de los abogados
3) Los abogados estan dispuestos a hacer cosas... que las rata NO!

Una mirada hacia lo que nos espera

Leyendo en la última edición del Readers Digest, me encontré con una historia sobre una mujer que realiza la proeza de publicar un blog DESDE CUBA!!

Todos deberiamos, sobre todos los que apoyan a Chavez, leer las entradas de este blog, para que vean lo MUY FAMILIAR que resultan algunas de las cosas que se cuentan alli... y tambien de lo que se nos viene encima si no rectificamos el rumbo y sacamos del poder a ese mono payaso con su circo.

http://www.desdecuba.com/generaciony

viernes, marzo 27, 2009

VFP 6 SP5

Para los que aun usamos esa maravillosa herramienta llamada Visual FoxPro, pueden descargar el SP5 de la versión 6.0 desde aqui:

http://download.microsoft.com/download/vstudio60ent/SP5/Wideband-Full/WIN98Me/es/vs6sp5.exe

Pongo el post porque me resulto sorprendentemente difícil encontrar este link, asi que pense que poniendolo por aca de repente ayuda a alguien más que lo ande buscando como yo.

domingo, marzo 08, 2009

.NET CF: Un error que me costo un dia entero

Estoy en mitad de un proyecto para una aplicación mobile con .NET CF 2.0 y WM 6.0.

Hoy empecé la mañana con toda la intención de terminar lo que me faltaba del proyecto. Pero cual no fue mi sorpresa cuando al querer ejecutar el programa, el mismo fallaba con una excepción de tipo ObjectDisposedException.

El error ocurría al asignar un valor a la propiedad SelectedIndex de un ListBox. Los datos de dicho ListBox provenían de un DataTable construido sobre la marca para contener los datos a mostrar en ese ListBox.

Hasta donde podía entender el error se producía debido a que el origen de datos asociado al Listbox por alguna razón ya no existía en memoria al momento de asignar el valor de SelectedIndex, lo cual era prácticamente imposible pues ambas lineas de código estaban inmediatamente contiguas.

Luego de perder TODO EL DIA buscando en Google las causas de dicho error y sus posibles soluciones, es hasta ahora, a las 9:15pm cuando he caído en cuenta que el error lo estaba causando el hecho de que YO puse código en el evento SelectedIndexChange del ListBox que causaba el cierre de la forma.

Dado que ese evento se invoca INMEDIATAMENTE después de asignado un valor a la propiedad DataSource, el evento SelectedIndexChanged se disparaba e invocaba el código que resultaba en this.Close(), lo cual a su vez causaba la liberación de todos los recursos, incluyendo el DataSource asociado al ListBox, razón por la cual al llegar al SelectedIndex, se generaba el error en cuestión.

Simplemente increíble!!! Son estos errores los que, muchas veces, causan retrasos considerables en los proyectos.

miércoles, febrero 25, 2009

Mitos de la vasectomia

Mi esposa se topó por accidente con este blog, y encontramos este post que me pareció muy pero muy bueno.

Para no ganar indulgencias con escapulario ajeno, aqui les dejo el link al post original:

Mitos de la vasectomia

lunes, febrero 23, 2009

Luto en la familia Guaco

Hace unos minutos recibí la triste noticia del fallecimiento de Sundín Galué (padre, primero desde la izquierda en la foto), el cual fué en vida miembro fundador de la banda Guaco, excelente músico y cantante, y un querido amigo de mi familia paterna.

Tuve la gran dicha de compartir personalmente con él en varias tertulias en casa de mis tíos Magaly y Ricardo (QEPD), en las cuales nos deleitábamos con su excelente voz, siempre acompañado de su guitarra y su típico humor maracucho.

Mi mas sentido pésame a su familia... lo extrañaremos por aca.

martes, febrero 10, 2009

OS X: Como recuperar el acceso a root

En algún momento durante la instalación del OS X en mi iMac, le indique cual seria la clave para el superusuario o root.

Un año después no tengo NI IDEA de que clave fue la que puse, y resulta que he necesitado en algunas ocasiones accesar a root para hacer algo a bajo nivel.

Como hacer entonces para recuperar el acceso al usuario root?

La gente de Tech-Recipes me dió la respuesta hoy:

1. Haz login con un usuario Administrador
2. Abre una sesión de Terminal
3. Ejecuta sudo passwd root
4. Introduce la clave del usuario Administrador
5. Introduce la NUEVA clave para el usuario root
6. Confirma la clave

Y listo!!! de nuevo tienes acceso a tu usuario root.

Enlace original:
http://www.tech-recipes.com/rx/712/mac-os-x-recover-lost-root-password/