Función genérica para conversión entre tipos

La versión 2.0 de la plataforma .NET permite crear métodos y clases genéricas que trabajen de la misma manera, independientemente del tipo que utilicen para la operación. Puedes leer la introducción al tema que escribí hace ya un par de años (¡como pasa el tiempo!) con las primeras betas de .NET 2.0 en mi post: «Tipos Genéricos en .NET 2.0«.


El otro día me preguntaron cómo se podía hacer una función que sirviera para transformar de forma genérica entre dos tipos de datos. Es decir, una a la que le pasases una variable de un valor o una referencia de un determinado tipo y que devolviera el mismo valor pero con un tipo de dato diferente.


En realidad ya existe una función similar desde la primera versión de .NET, y es el método ChangeType de la clase Convert. Este método tiene varias sobrecargas pero la que se usa más habitualmente toma como primer parámetro un valor a convertir y como segundo una definición de tipo al que deseamos convertir el anterior. Así, por ejemplo, para cambiar desde un double a un entero, escribiríamos algo así:



double d = 12;
int i = (int) Convert.ChangeType(d, typeof(int));


Esto está bien para hacerlo de forma genérica pero es bastante lioso. Para empezar el método devuelve un objeto que hay que convertir en su tipo adecuado subyacente, lo que a fin de cuentas nos resta genericidad pues ¿cómo encapsulas en un método lo anteiror?. Además la sintaxis es liosa y difícil de leer.


¿no sería mejor disponer de un método más sencillo y directo de conseguir lo mismo?


Es aquí donde entran los genéricos. Pensé en utilizar un método que use genericidad para conseguir el mismo efecto pero que sea sencillo de utilizar desde código y funcione de un modo realmente general. El resultado es este código:



public static T Convertir<T>(object v)
{
   try
   {
      return (T) Convert.ChangeType(v, typeof(T));
   }
   catch
   {
      return (T) Activator.CreateInstance(typeof(T));
   }
}


Con él la conversión entre dos tipos cualquiera es tan fácil como en este ejemplo:



DateTime d = DateTime.Now;
string s = Convertir<string>(d);


la sintaxis es mucho más clara y directa ¿no?


Realmente lo único que hace es encapsular el uso del método ChangeType permitiendo su uso de forma genérica y facilitando el uso general desde el código.


Este método además tiene la particularidad de que siempre devuelve un valor del tipo adecuado ya que si la conversión falla instancia un objeto nuevo de ese tipo. Esto último no tiene porque ser interesante siempre así que es fácil sustituirlo por el lanzamiento de una excepción de tipo InvalidCastException cuando la conversión no sea posible.

Diálogo de descarga un tanto "liado"

Hoy, mientras me bajaba la máquina virtual que tra la CTP de Orcas (la próxima versión de Visual Studio y .NET), disponible aquí me salió el diálogo siguiente:



Internet Explorer se ha «hecho la picha un lío» y, nada más empezar la descarga indicó que estaba al 100%, y tras echarse un buen rato con el diálogo al 100% aunque estaba descargando unos pocos «megas» empezó a ir aumentándolo y en este momento va por el 482% (imagino que realmente será el 48,2 %) Aunque ahora mismo ha vuelto a bajar y está en el 459%, es decir, va dando bandazos y no sé muy bien porqué. Es un pequeño «bug» 😉


En fn, me ha parecido simpático para comentarlo.

¡Hay que ver qué cara tienen algunos!

Acabo de leer esto en el Blog de George Ou y he flipado.


Resulta que algunos de los iPods de Apple que se vendieron en septiembre llevaban dentro un ejecutable con un virus que ha infectado a algunos usuarios.


Resulta que Apple en lugar de simplemente matar a su proveedor y entonar públicamente el mea culpa han publicado en su web una nota que, con un par de huevos, dice literalmente:



«As you might imagine, we are upset at Windows for not being more hardy against such viruses, and even more upset with ourselves for not catching it.«


Para el que no sepa inglés la traduzco:



«Como puedes imaginar, estamos disgustados con Windows por no ser más resistente contra los virus como este, y más disgustados con nosotros mismos por que se nos haya pasado«


Es decir, «Vale reconocemos que hemos metido la pata, pero claro es que Windows no resiste bien los virus«. ¡No me digas que no es indignante! Y encima el archivo en el que está la nota de prensa se llama «Windows virus», no «iPod Virus». Hombre, por favor…


Sólo por un instante imagínate que Microsoft empaqueta con cualquier producto (por ejemplo un teclado o algo así) un CD que contiene además de los Drivers un virus, aunque sólo se le haya ido en un porcentaje pequeño de los que han fabricado. O peor aún, como dice George, que meten un virus para Mac (que los hay, ojo) en un DVD de Office para MacOSX. ¡Menuda se montaría!.


¿Quién se ha enterado de lo de Apple? Más bien nadie.


Para que luego hablen de la imparcialidad de los medios.


En fin…

La verdadera importancia del bug de seguridad de IE7

A ver… el otro día en cuanto estuvo disponible IE7, puse un post diciéndolo para que todo el mundo lo descargue.


El caso es que al día siguiente apareció un problema de seguridad de Internet Explorer 7… y todo el mundo se me echó encima en plan: «Ja!, que cachondeo, acaban de sacarlo y ya tiene un fallo». En general la prensa por ahí adelante (sobre todo en los USA porque la versión definitiva de momento está en inglés) se ha quemado bastante con el asunto también y ahora quiero aprovechar que tengo un rato libre y voy a dar mi opinión al respecto.


Primero: el bug no es de IE7 si no de Outlook Express, lo que pasa que se explota a través de IE. De hecho no es siquiera un error de la versión 7 si no que afecta también a versiones anteriores. No me extrañaría lo más mínimo que estos de Secunia estuviesen esperando a notificarlo al día en que IE 7 apareción. Obviamente no hubiera tenido el mismo efecto sacándolo con antelación y diciendo que era de la 6.0 que esperando a lo zorro hasta el mismo día del lanzamiento y soltar la bomba. Cualquiera que sepa un poquito de marketing es consciente de esto ¿no?


Segundo: el problema no es para tanto. Incluso los de Secunia (sus descubridores) lo clasifican con un 2 sobre 5. Lo que pasa es que con el asunto de lanzamiento y dado que el sensacionalismo vende mucho (no hay más que poner la tele y ver los programas que echan o ver las noticias, sobre todo los fines de semana), conviene presentarlo como un «fallo grave de seguridad» como han hecho muchos, sobre todo en el mundillo Linux.


Tercero: y esto sé que es lo que va a levantar más polémica: Firefox tiene tres fallos de la misma categoría descubiertos también por Secunia, dos de los cuales están sin parchear desde hace dos años. Si no me crees puedes verlos aquí y aquí. Y no pasa nada. No ha salido en ningún medio ¿verdad? De hecho aparecen fallos de nivel dos y tres cada poco tiempo en mútliples productos y no se reseñan en sitio alguno (si acaso en la Web del fabricante). Lo único realmente interesante de la de IE7 es su presentación por parte de Secunia al día siguiente.


Firefox es un navegador estupendo (aunque tenga sus problemas y pegas como IE), pero no está exento de problemas de seguridad.


¿Qué cuales son las pegas principales que yo le veo?: que carga mucho el sistema y que no está preparado para trabajar en un entorno empresarial grande (por temas de distribución y configuración centralizadas).

¡Internet Explorer 7 ya está disponible!

¡Ya era hora!


Seguro que a estas alturas ya lo sabes,pero por si acaso…. Desde hoy mismo ya está disponible para descarga la versión definitiva de Internet Explorer 7.


Get the new IE


¡OJO!: de momento sólo está disponible en inglés. En los próximos días lo estará en castellano y otros idiomas.


De todos modos ya puedes probar tus aplicaciones con la versión definitiva y ver si funcionan. Ten cuidado ya que hay bastantes cambios, sobre todo en lo referente a la seguridad, aunque también en otros aspectos. Lo mejor es que revises el Readiness Toolkit for Developers que te muestra todos los cambios y como afectan a tus aplicaciones, ofreciendo alternativas.

¿Te interesan estos cursos on-line gratuitos?

Pues si vives en alguna de estas zonas: Andalucia, Asturias, Canarias, Castilla La Mancha, Castilla León, Extremadura, Galicia, Murcia, Comunidad Valenciana, Ceuta y Melilla y trabajas en cualquier puesto relacionado con las TIC (valen autónomos también) que sepas que tienes cualquiera de estos cursos gratis, por la cara, gracias a una subvención:




  • Programación con PHP


  • Programación para Internet con Ruby on Rails


  • Programación de aplicaciones Web con AJAX (PHP y Java)


  • Administración y programación de Oracle


  • Diseño de informes con Crystal Reports (.NET)

Todo ello gratuito gracias a un proyecto FORINTEL y el patrocinio de Femxa Formación.






Además, si estás en GALICIA (únicamente en esta comunidad Española), cualquier curso de los de campusMVP te puede salir tirado de precio. Desde 90 euros un pack completo de cuatro cursos. Las condiciones son las mismas: ser trabajador en activo relacionado con las TIC (valen autónomos en ambos casos). En este caso es también un FORINTEL y el patrocinio de Femxa Formación.


Apúrate y llama al 902 100 986 para informarte y apuntarte. Las plazas están limitadas.

Adios Dreamweaver. ¡Bienvenido Expression Web Designer!

Gran trabajo el que está haciendo Microsoft con sus herramientas de diseño para desarrollo. En concreto me ha encantado el nuevo editor para la Web que va a sustituir a FrontPage y que, con todo lo que tiene, sustituye sin problemas también a productos de la competencia como Macromedia Dreamweaver.


Se trata de Expression Web Designer, que ahora está por la Beta 1. Vale la pena instalarlo y probarlo. Por lo que he podido comprobar estos días mientras lo probaba en mis escasos ratos libres, se trata de un producto muy estable a pesar de ser una Beta, funciona muy rápido en un ordenador normalito (yo tengo un Pentium IV a 1,7 y 512 MB de RAM como equipo de pruebas y va como un rayo), y lo único que necesitas es tener instala la plataforma .NET 2.0.


Al contrario de lo que estábamos acostumbrados hasta ahora con las herramientas de diseño Web de Microsoft (yo personalmente siempre he odiado FrontPage), Expression trae todo lo que un diseñador y programador pudiera desear. De hecho tiene ciertas características avanzadas que recuerdan sospechosamente a las que tiene Dreamweaver, pero creo que mejor implementadas, al menos en lo que se refiere a WYSIWYG.


Además permite introducir controles ASP.NET 2.0, trabajar con ellos y generar código sin necesidad de saber programación (cosas sencillas, obviamente). Soporta páginas «plantilla» (o sea, Master Pages). Claro que Dreamweaver genrera código para ASP.NET, ASP, JSP y PHP, y Expression, lógicamente, sólo ASP.NET, pero bueno… Lo cierto es que un programador normalmente el código lo hará con Visual Studio ¿no es así? 🙂


En fin, bájate la beta 1, pruébalo, compara y luego me contáis en los comentarios de abajo.


Saludos.


JM.