Informática e Internet

Uso de tipos Nullable<> con el operador ternario

La introducción en la plataforma .NET de los tipos Nullable<> nos facilitó bastante la vida al evitarnos a los desarrolladores el engorro de tener que definir un valor para los tipos valor numéricos que hiciera las veces de nulo.

Pero hay ocasiones en los que el uso de los tipos Nullable<> no está del todo claro, y uno de estos casos es su empleo dentro de operaciones en las que se involucra al operador ternario. Imaginemos la siguiente operación…

int? entero = (obj1.Codigo > obj2.Codigo) ? null : 1;

A priori parece correcta, pero el compilador nos informará de que se ha producido un error en tiempo de diseño. Esto ya nos da una pista del posible error que estamos cometiendo. Recordemos que los tipo Nullable<> son genéricos, por lo que el compilador chequea que todo lo que se usa con el tipo definido como Nullable<> sea de su mismo tipo.

En este caso vemos que la operación asigna dos posibles valores, 1, que es un valor del tipo Int32 y null. Pero entonces… ¿dónde está el error? Pues aunque no lo parezca el error de tipo se encuentra en el null. Para que el operador ternario acepte la operación tenemos que hacer un casting al valor null, de tal manera que si la operación se escribe de esta manera…

int? entero = (obj1.Codigo > obj2.Codigo) ? (int?) null : 1;

…funcionará correctamente en tiempo de diseño y ejecución.

Anuncios
Informática e Internet

Obtener CultureInfo a partir de la propiedad Page.Culture

Una parte importante de las aplicaciones web y que casi nunca se tiene en cuenta es la referente a la presentación de la información basándose en la configuración regional del usuario.

En ASP.NET tenemos medios y técnica que nos facilitan todas las tareas referentes a la globalización, pero el problema surge cuando no es difícil establecer la configuración regional de nuestro usuario. Veamos cómo se puede llegar a este escenario.

La inmensa mayoría de los navegadores, por no decir todos, permiten al usuario establecer los idiomas en los que prefiere ver una página en caso de que haya varios idiomas para elegir. Si el usuario ha creado una lista de estos idiomas nosotros como desarrolladores no tendremos problemas a la hora de establecer la configuración regional que emplearemos para validar los datos que el usuario nos proporcione. Para ellos basta con implementar el siguiente código

if(Request.UserLanguages != null) {
CultureInfo provider = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

}

La razón por la que empleo el método CreateSpecificCulture es que para poder validar datos con algún tipo de formato (números, fechas, etc) necesitamos una cultura de tipo específico, es decir, que indique el país y la región, como por ejemplo (es-es). Las culturas llamadas neutrales sólo hacen referencia al país omitiendo cualquier referencia a una región, que sería el caso de (es)

De esta manera ya podría usar el método TryParse a la hora de recoger el valor esperado. De esta forma permitimos al usuario que introduzca información pudiendo emplear la notación numérica o de fechas de su país. Veamos un ejemplo de uso del método TryParse:

NumberStyles estilo = NumberStyles.Number;
IFormatProvider provider = null;

if(Request.UserLanguages == null) {
provider = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

}

double valor;

bool valor_ok = Double.TryParse(this.TextBox.Text, estilo, provider, out cobertura);

Se le pasa como parámetros el string que queremos convertir, el estilo numérico que esperamos encontrar, en este caso es para números de todo tipo, la referencia cultural que debemos emplear a la hora de parsear la cadena y una variables donde dejar el resultado de la operación de parseo

Devuelve un bool que nos indica si la operación de parseo ha finalizado con éxito o si por el contrario ha habido algún error.

Pero ¿y si el usuario no ha especificado una lista de idiomas en su navegador? En este caso la solución es un poco más laboriosa.

Para empezar no podremos usar la propiedad UserLanguages de la clase HttpRequest ya que en este caso el array es nulo, y si recuperamos el valor de la propiedad Culture de la páginas ASP.NET veremos que el nombre que nos da, por ejemplo Español (España) no podemos usarlo ni en el constructor ni en ninguno de los método estáticos de la clase CultureInfo, así que, cómo podemos recuperar un objeto de la clase CultureInfo cuando sabemos que configuración emplea nuestro usuario pero a priori no tenemos nada para poder recuperarla.

Lo primero que tenemos que hacer es recuperar todas las culturas disponibles usando el método estático GetCultures de la clase CultureInfo. Una vez que tenemos esto tendremos que buscar una cuya propiedad DisplayName coincida con el valor que se encuentra en la propiedad Culture de nuestra página ASP.NET, y para ayudarnos en la labor de búsqueda nos apoyaremos en LINQ. Vamos a ver como queda todo esto junto.

public static CultureInfo ObtenerCultura(string displayName) {
CultureInfo cultura = null;
CultureInfo[] culturas = CultureInfo.GetCultures(CultureTypes.AllCultures);

try {
cultura = (from c in culturas
where c.DisplayName == displayName
select c).First<CultureInfo>();
} catch(Exception) {
cultura = CultureInfo.InvariantCulture;
}

return cultura;
}

Como vemos en caso que no encuentre la configuración regional del usuario entre las disponibles en el servidor devolveremos la InvariantCulture, disponible en todos los sistemas y que deriva de la configuración inglesa.

Cajón desastre, Informática e Internet

Google desarrollo un algoritmo para evitar la fuga de empleados

Fuga de cerebros en Google

Un trabajador de Google. Foto Albert Bredenhann

De un tiempo a esta parte la dirección de Google ha visto como algunos de sus directivos y empleados más valiosos han salido de la compañía argumentando los más diversos motivos.

La razón más común para abandonar la compañía es la sensación de que se ha perdido el encanto de los primeros años, cuando todo estaba por inventar y la iniciativa de los empleados era un bien muy preciado. Hoy en día Google no deja de ser una multinacional y esa sensación de dirección paternalista se ha perdido.

Pero para evitar, o minimizar, esta fuga de cerebros la gente de Google ha hecho lo que mejor sabe, un algoritmo. El código no ha sido publicado, pero parece que podría predecir que empleado quiere abandonar la compañía incluso antes de que se lo esté planteando seriamente.

Me pregunto en base a qué datos pueden generar un resultado.

Informática e Internet

Instalar Windows 7 en una máquina virtual

Hace un par de semanas que Microsoft puso a disposición del público en general la Release Candidate de Windows 7, su futuro sistema operativo.

Como mucha otra gente descargué la imagen ISO y tras grabarla en un DVD me dispuse a instalarla en mi ordenador cuando pensé en las posibles consecuencias que esto podría tener, no por el estado de desarrollo en el que se encontrara Windows 7, sino por el hecho de que no me apetecía tener que formatear mi ordenador tras probarlo y volver a instalar todas las aplicaciones. Así que estuve pensando en la manera de probarlo sin perder mi instalación actual de Windows XP – sí, yo tampoco he usado Vista – y fue cuando di con la solución. Lo instalaría en una máquina virtual.

Me puse a buscar por Internet y vi que mucha otra gente ya había adoptado esa solución  había probado Windows 7 sin problemas. Y si tú también quieres hacerlo de esta manera sólo tienes que seguir estas instrucciones.

Lo primero es conseguir el software para crear la máquina virtual y para ello vamos a usar Virtual PC 2007 SP1 de Microsoft. Si ya tienes instalado el producto asegúrate de que es la versión con el SP1 integrado, para comprobarlo abre la ventana Acerca de Virtual PC que se encuentra en el menú Ayuda y mira si ves algo como esto.

 VP2007_version

Número de versión de Virtual PC 2007 SP1

Si tu número de versión no coincide debes visitar la web de Microsoft y descargar la versión que indico en esta anotación

Una vez instalado el programa tenemos que crear la máquina virtual que contendrá nuestra instalación de Windows 7. Para ello pulsa en el botón Nuevo… para iniciar el asistente que nos guiará paso a paso durante todo el proceso.

La primera pantalla nos preguntará acerca del tipo de equipo virtual que queremos crear. Seleccionamos la opción Crear un equipo virtual y pulsamos en el botón Siguiente.

Ahora se nos pide un nombre y ubicación para el equipo virtual. En realidad sólo tenemos que ponerle un nombre, ya que la ubicación se especifica más adelante. En mi caso he llamado a mi equipo virtual Windows 7 RC. Una vez que has especificado un nombre pulsa en el botón Siguiente.

Tenemos que elegir el tipo de sistema operativo que queremos instalar en nuestro equipo virtual. Para ello tenemos que seleccionar uno de la lista desplegable, pero ¡oh sorpresa! Windows 7 no aparece. No hay problema, seleccionamos Windows Vista y pulsamos el botón Siguiente.

 install_3

Selección de sistema operativo. En este caso marcamos Windows Vista

Le toca el turno a la memoria RAM que queremos asignar a nuestro equipo virtual. Se aconseja asignar 1GB (1024 megas). Yo lo he dejado en 512 megas y funciona bien. Para poder asignar nosotros un valor tenemos que marcar la opción Ajustar RAM y mover la barra de desplazamiento hasta dejarla en el valor que queramos. Tras terminar pulsamos en el botón Siguiente.

La siguiente pantalla nos pregunta por el disco duro virtual que queremos utilizar. En mi caso he creado uno nuevo, así que marco la opción Un nuevo disco duro virtual. Nuevamente pulsamos en el botón Siguiente.

Ahora tenemos que indicar la ubicación del archivo que contendrá el disco duro virtual en nuestro ordenador así como el espacio que le queremos asignar. Mi disco duro virtual tiene 16 GB, pero para indicarlo tenemos que pasarlo a megas. La conversión se realiza multiplicando el número de gigas que queremos por 1024. En mi caso 16GB son 16384 MB.

 install_6

Especificamos la ubicación y el tamaño

Y ya sólo nos queda pulsar en el botón Siguiente para finalizar el asistente. Ahora le toca el turno a la instalación de Windows 7.

En la ventana principal de Virtual PC veremos que nuestro nuevo equipo virtual aparece en la lista, para trabajar con él tenemos que seleccionarlo y pulsar en el botón Iniciar.

 install_7

Ventana principal de Virtual PC 2007 SP1

Una nueva ventana se abrirá y tendremos que esperar hasta que leamos algo como esto en la pantalla.

 install_8

Ventana de arranque de equipo virtual

Cuando lo veamos tenemos que indicarle a Virtual PC dónde se encuentra la imagen ISO de Windows 7 que queremos instalar. Para ello pulsamos en la opción Capturar imagen de ISO del menú CD y seleccionamos el archivo con la imagen ISO.

Y ahora toca seguir los pasos del instalador de Windows 7 para que al final podamos ver algo como esto.

 Windows 7 ScreenShot

Windows 7 ejecutándose sobre Virtual PC 2007 SP1

A continuación indico algunos enlaces de interés a la hora de seguir los pasos de esta guía.

¡Sólo una cosa más! Cuando trabajamos con un equipo virtual la forma de indicarle al ratón sobre que equipo debe hacer click es pulsando la tecla ALT GR, lo que deshabilita dicha tecla en nuestra instalación de Windows 7.

Pero… ¿y si quiero escribir una arroba (@) porque estoy redactando un correo electrónico? Pues tenemos que usar otra combinación de teclas, concretamente la tecla CONTROL más la tecla ALT (la de la izquierda) seguida de la tecla del símbolo.

CONTROL + ALT + 2 = @

Informática e Internet

Wolfram Alpha

El nuevo buscador que centra la atención (de momento) en Internet se llama Wolfram Alpha y se autodefine como un motor de búsqueda de conocimiento computacional.

Ante todo hay que decir que aunque es un buscador la forma de trabajar y de presentar los datos no se parece en nada al rey Google. Para empezar a Wolfram Alpha se le pueden hacer preguntas como si nos dirigiéramos a una persona, y este responderá mostrando directamente los datos, no enlaces, tendiendo en cuenta la forma en la que se le ha formulado la pregunta.

Ahora vamos a ver un ejemplo, en una primera búsqueda le he preguntado qué es Microsoft, y la respuesta obtenida ha sido esta…

WA_que

…y al preguntarle dónde está Microsoft el buscador nos ha proporcionado esta otra información.

WA_donde

Podemos comprobar que a pesar de que el objetivo de la pregunta es el mismo, en este caso Microsoft, el buscador sabe interpretar mi pregunta y me muestra la información que necesito.

No me aventuro a predecir la vida que tendrá este buscador ni si se convertirá en el favorito de los usuarios, pero por lo menos curioso sí que es.

Informática e Internet

Apple podría comprar Twitter y Electronic Arts

twitter

Se dice, se escucha, se comenta por la Red que Apple podría estar interesada en la compra de Twitter, el popular servicio de microblogging que hace tiempo causó furor entre los usuarios de Internet.

La operación estaría valorada alrededor de 700 millones de dólares, un precio un tanto alto por este servicio, aunque a tenor de la popularidad que tiene Twitter entre los usuarios de iPhone/iPod Touch podría estar justificado.

La otra posible adquisición sería Electronic Arts, la compañía lider en el mercado de videojuegos para ordenadores y consolas, mercado en el que los sistemas Mac OS X no cuentan demasiado hoy en día.

Tendremos que esperar unos cuantos meses para ver en que quedan estos rumores, aunque cuando el rio suena…

Leido en Applesfera.