¿El futuro de los gráficos para juegos pasa también por la nube?

Creo que hoy en día nadie duda de las bondades que tiene la externalización de servicios computacionales y todo lo que se ha dado en llamar «cloud computing» (otro día hablaré de mi opinión al respecto y cómo creo que el término se está pervirtiendo bastante). Lo cierto es que no deja de sorprenderme las aplicaciones que algunos inventan para poner en la nube. Lo último que he leído al respecto me ha llamado poderosamente la atención porque, francamente, nunca pensé en la posibilidad de tener esto externalizado.


Se trata de AMD -sí, el fabricante de chips- que está creando un supercomputador de procesamiento gráfico que estará disponible después del verano. La idea es alquilarlo para proporcionar a los creadores de juegos un entorno de alta escalabilidad y potencia que genere los gráficos de sus juegos en tiempo real. He ahí la importancia o, al menos, lo que a mi me ha llamado tanto la atención. La idea es que los juegos que se ejecuten en dispositivos con poca potencia (sobre todo los móviles) manden los datos del juego en tiempo real a Fusion Render Cloud (que es como se llama el servicio), el cual renderizará los gráficos y los devovlerá al dispositivo. Así, en lugar de tener que disponer de un chip gráfico de gran potencia en el móvil podremos obtener los mismos resultados a través de Internet. Y no estaos hablando de una ida de olla de ciencia ficción, sino de algo disponible dentro de unos pocos meses…


¿No te deja flipado la idea?. Hay que tener en cuenta que estamos hablando de renderizar entre 30 y 50 cuadros por segundo para cada usuario, enviando y recibiendo información contantemente a través de Internet y que un juego en 3D tiene que ser realmente rápido para responder a las acciones del usuario. Aunque la pantalla de un móvil es pequeña y la resolución por tanto baja a mi me parece inviable conseguir un nivel de desempeño mínimamente razonable para esta tarea en la nube. AMD asegura que incluso en conexiones de baja velocidad pueden devolver 30fps aunque retirando detalle de la imagen.


Fusion Render Cloud será el supercomputador comercial más rápido del mercado, con un Petaflop de potencia (mil millones de millones de operaciones en coma flotante por segundo). No pongo en duda que la capacidad sea suficiente, ya que además es escalable para crecer según sea necesario. Ellos mismos dicen que con él serían capaces de gestionar los gráficos de cualquiera de los juegos on-line multijugador que hay hoy en día (como World of Warcraft y similares). Lo que me resulta complicado de creer es que, con las actuales redes de comunicaciones y por mucho que compriman los datos de ida y de vuelta, puedan conseguir en tiempo real una jugabilidad aceptable. Si hubieran dicho otra aplicación de renderizado en tiempo real, como gráficos científicos, render de imágenes estáticas de alta calidad para cine o para juegos, etc… estaría de acuerdo. Pero justo lo que proponen de dotar a los juegos de renderizado en la nube es lo que no me acabo de creer. Quizá dentro de unos cuantos años sí, pero ¿ahora?.


Seguramente se me escapan muchas cosas.


Puedes leer el artículo completo en el Spectrum del IEEE. Vienen muchos más datos interesantes, como por ejemplo la gran eficiencia de consumo energético del monstruo, algunos detalles técnicos de las GPU o los factores tecnológicos que confluyen para dar lugar a esto.


¿Qué opinas tú al respecto? ¿Lo ves viable o no?


P.D.: Seguro que este post me pasará factura, y dentro de unos años tendré que avergonzarme de leerlo, como cuando «otros» dijeron que «¿para que podría querer alguien un ordenador en casa?». Pero bueno… 😉

Forzar el modo de compatibilidad de IE8 en nuestras aplicaciones

En el post que escribí hace unos días sobre cómo solucionar el problema de los menús de ASP.NET en IE8, comenté que en un futuro post explicaría cómo forzar desde nuestra aplicación que la gente que acceda a la misma con Internet Explorer 8.0 la vea en modo de compatibilidad con Internet Explorer 7.0. Esto es de especial importancia para nosotros si nuestra aplicación no se visualiza bien según los estándares estrictos de CSS 2.1 pero no tenía problemas con la versión anterior de IE.


Dado que, como comentaba en el anterior post, no podemos confiar en que los usuarios vayan a pulsar el botón de compatibilidad si la página se ve mal (simplemente semarcharán o si tenemos mucha suerte intentarán usar Firefox), lo mejor que podemos hacer es forzar de manera transparente para ellos esa compatibilidad.


Para ello disponemos de varias técnicas:


1.- Usar una etiqueta META especial en nuestra página


Si incluimos la siguiente etiqueta META en la cabecera de nuestra página podremos conseguir que el navegador de forma automática y transparente para el usuario utilice el modo de compatibilidad:



<meta http-equiv=»X-UA-Compatible» content=»IE=EmulateIE7″/>


Ya está. Con esto conseguiremos que, incluso, el agente de usuario del navegador sea como el de IE7, es decir, a todos los efectos el navegador se hará pasar por IE7.


2.- Etiqueta META en todas las páginas


Lo anterior está genial si son una o dos páginas las que presentan problemas. Sin embargo en un sitio Web grande, con decenas o cientos de páginas la cosa ya no es tan interesante pues habría que ir una a una poniendo la cabecera. Para estos casos podemos obligar a que sea la propia infrastructura de ASP.NET la que fuerce la inclusión de la etiqueta en cada una de las páginas. Para ello necesitamos modificar el nodo <system.webServer> dentro del archivo de configuración web.config de nuestra aplicación, así:



El nodo httpProtocol nos permite añadir cabeceras propias a todas las páginas, así como cabeceras de redirección. En este caso añadimos una cabecera normal con la pareja nombre-valor necesaria para forzar la emulación en IE8. Es equivalente a poner en todas las páginas la cabecera META anterior.


3.- Forzar la cabecera de compatibilidad en el servidor


Si quieres forzar que todas las aplicaciones de tu servidor fuercen el modo de compatibilidad, sin tener que ir por cada web.config haciendo lo anterior, puedes incluir dicha cabecera de forma sencilla tanto en IIS 6 como IIS7.


En IIS6 basta con ir a las propiedades de un sitio Web y una vez ahí a la pestaña encabezados:



En IIS 7 es más fácil aún pues se puede establecer para el servidor completo así:



¡Listo!


Si eres de los que programa aplicaciones Web en ASP.NET para Linux o Mac usando Mono, puedes encontrar una guía de la propia Microsoft sobre cómo configurar las cabeceras de compatibilidad para IE8 en Apache.


Algunos detalles más


1.- ¿Y si quiero que ocurra todo lo contrario? Es decir, quiero que siempre se use el modo de compatibilidad total con estándares (es decir modo IE8) aunque el usuario pulse tenga configurado mi dominio para compatibilidad con IE7. Pues se puede hacer lo mismo que he dicho antes pero con esta otra pareja de nombre-valor en una cabecera:



<meta http-equiv=»X-UA-Compatible» content=»IE=8″/>


2.- ¿Cómo distingo que el navegador que me visita es en realidad Internet Explorer 8 en compatibilidad con IE7?. Claro, la pregunta tiene lógica ya que si hasta el agente de usuario se modifica para reflejar que es IE7, ¿cómo hago? Lo puedo necesitar para estadísticas o lo que sea…


Cuando IE8 hace una petición a una página en modo compatibilidad esta es la cadena que usa como agente de usuario (la real en mi propio equipo)



Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.5.21022; OfficeLiveConnector.1.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618;


Lo importante a destacar aquí es lo que está en negrita. El fragmento inicial, hasta MSIE 7.0, es lo que indica que es IE7 quien solicita la página. No se distinguiría de una petición hecha con el IE7 real (de hecho en IE8 sólo cambia ese número y pondría MSIE 8.0). Lo que la distingue realmente del IE7 real es la otra negrita de arriba: Trident/4.0.


Trident es el nombre del motor de renderizado de páginas de Internet Explorer 8.0, siendo 4.0 su versión. Si buscamos la palabra Trident sabremos que el navegador es realmente IE8.


¡Espero que te resulte útil!

Sistema operativo en varios idiomas al mismo tiempo para prueba de aplicaciones

¡Fenomenal!: nos ha salido ese cliente en Arabia Saudí o Finlandia y ahora toca localizar nuestra aplicación a esos idiomas y, sobre todo, probarla en el sistema operativo real para no llevarnos sorpresas. Lo primero que suele hacer todo el mundo es correr hacia el MSDN y rezar para no haber tirado los DVDs de Windows en todos esos idomas raros que envían. Eso o descargarlo de MSDN Online para instalarlo en algún equipo.


Lo que mucha gente no sabe es que la ediciones más profesionales de Windows viene con la posibilidad de trabajar en varios idiomas al mismo tiempo. En el caso concreto de Windows Vista, las ediciones Ultimate y Enterprise disponen legalmente de esta interesante capacidad. De esta manera no es necesario que nos instalemos varios sistemas operativos diferentes en varios idiomas, ni tendremos que andar con máquinas virtuales ni nada similar: nuestro sistema operativo de trabajo, normal y corriente, nos permitirá cambiar de idioma y localización de manera muy sencilla.


¿Cómo lo conseguimos?


Bueno, si tienes un Vista Ultimate o Enterprise es muy fácil puesto que los packs de lenguaje necesarios los tienes directamente en Windows Update:



Una vez instalados los que desees (Ojo, porque tarda un montón ya que cada paquete ocupa unos 250 MB y luego la descompresión más de 1GB) puedes cambiar entre lenguajes yendo a Panel de control·Opciones de región y lenguaje, y dentro de la pestaña «Teclados y lenguajes»:



Cambias el lenguaje en la lista, y tras cerrar la sesión de usuario y volver a entrar, tu interfaz estará totalmente traducida. Y no sólo  la interfaz sino cualquier componente de Windows, como la plataforma .NET, el navegador Internet Explorer o incluso Microsoft Office. Todo estará en el otro idioma, incluso las teclas rápidas.


Varias puntualizaciones importantes


1.- No llega sólo con cambiar el lenguaje de la interfaz. Es conveniente que en la pestaña de «Formatos» cambies también al lenguaje de tu interés los formatos de fecha, números, hora, etc.. , porque para probar bien una aplicación no sólo llega con el idioma, sino que estas cosas son igual o más importantes.


2.- No te dejes engañar por el botón «Instalar/Desinstalar lenguajes». En él no hay una lista de lenguajes de los que escoger para instalar. O tienes los archivos en tu disco duro o los descagas de Windows Update. Lo cierto es que desde mi punto de vista sería mucho más intuitivo que desde ahí se pudieran elegir los lenguajes, ya que desde Windows Update no es tan fácil.


3.- Este cambio sólo tiene efecto sobre el usuario actual. De este modo podemos tener un usuario en un idioma y otros en diferentes lenguas. Yo, por ejemplo, en mi equipo tengo un usuario con todo el entorno en inglés (que es con el que trabajo) y otro con el entorno en castellano (para capturas de pantalla, vídeos en castellano, etc…). Si quieres que el cambio sea global y afecte a todos los usuarios (incluyendo la pantalla de bienvenida, o sea, que el sistema esté en otro idioma a todos los efectos) debes ir a la pestaña «Administrativo» y allí usar el botón de «Copiar a cuentas reservadas»:



Esto hará que las cuentas del sistema usen el lenguaje elegido actualmente, lo que hará que en la práctica sea ellenguaje por defecto del sistema.


¿Y en otras versiones de Windows?


Fíjate en que en el segundo párrafo resalto la palabra «Legalmente». El motivo es que en realidad, podemos conseguir esta funcionalidad multiidioma con cualquier versión de Windows Vista, no sólo con las ediciones Ultimate y Enterprise, pero la licencia del sistema operativo indica que sólo podemos hacerlo con estas dos. Lo cierto es que si tenemos los paquetes de idioma deseados nada nos impide el montar más de uno en cualquier edición de Vista. Pero ¿cómo conseguimos esos paquetes si no nos salen en Windows Update?. Los amigos del blog Tip&Trick nos facilitan los enlaces directos a cada uno de los paquetes multilenguaje en Windows Update, por lo que sólo hay que bajarlos y ejecutarlos para poder hacer uso de ellos:


· Paquetes multi-idioma para Vista 32 bits.
· Paquetes multi-idioma para Vista 64 bits.


Además, si tenemos Windows Server 2008 también podemos disponer de la misma funcionalidad descargándola directamente desde Windows:


Windows Server 2008 Multilingual User Interface Language Packs


Con sistemas operativos anteriores (estilo XP o Windows Server 2003) no he podido probar (hace siglos que no los uso) así que no me preguntes 🙂


¡Espero que te resulte útil!

Mi menú ASP.NET no se ve en Internet Explorer 8: Solución rápida

Internet Explorer 8 ofrece una compatibilidad con los estándares de la W3C sin precedentes en los navegadores de Microsoft (incluso ha pasado el ACID2 test). Se trata de una gran noticia para los programadores Web ya que cuanto más estándar sean todos los navegadores menos esfuerzos para desarrollar interfaces pasaremos pues no hay que estar pegándonos para conseguir que funcione en todos ellos.


Por desgracia esta compatibilidad estricta hará que algunos sitios Web que funcionaban perfectamente en la versión anterior (la 7.0) de IE dejen de hacerlo ahora en la nueva versión, dado el modo diferente de tratar ciertos elementos (sobre todo CSS) que éste tenía. Esto es algo de lo que Microsoft es muy consciente y por eso ha incluído un modo de compatibilidad con IE7 en la última versión. Así, si entramos en una página que se veía perfectamente con IE7 pero ahora no vemos correctamente sólo tenemos que pulsar el botón a tal efecto colocado al lado de la barra de direcciones del navegador para conseguir que la página se renderice exactamente igual que se hacía antes, y problema resuelto:



Esto está bien cuando somos nosotros los usuarios, pero siendo programadores no es algo en lo que debamos confiar mucho. Quiero decir que va a ser mucho esperar que los usuarios de nuestras aplicaciones utilicen esta característica si nuestro sitio no se visualiza correctamente, ya que la mayoría ni siquiera sabrá que existe. Así que debemos ser proactivos y tratar de solucionar esos posibles problemas de visualización y no confiar en que el usuario pondrá la vista de compatibilidad.


La mayor parte de los controles Web que vienen con ASP.NET funcionan sin problemas con Internet Explorer 8. Pero hay uno que es especialmente problemático y que no funcionará tal y como viene de fábrica: el control Menu. Este control sirve para mostrar menús desplegables para navegar por nuestra aplicación.


Cuando añadimos un menú a un formulario Web y lo visualizamos con Internet Explorer 8 lo que pasará es que la parte desplegable del mismo se verá en blanco completamente, así:



Upps!, cosa mala.


¿Cómo podemos solucionarlo?


Obviamente una forma de conseguirlo es forzar que el navegador se comporte como lo hacía Internet Explorer activando desde nuestra página el modo de compatibilidad. Se puede hacer y seguramente lo explicaré en un próximo post, pero eso no deja de ser un «apaño» que deberíamos evitar pues no estamos solucionando el problema, sólo posponiéndolo.


Lo que tenemos que hacer es solucionarlo definitvamente y ello es más fácil de lo que parece. Si conocemos donde está el problema solucionarlo es inmediato. Según reconoce el propio equipo de ASP.NET el problema viene de que asumieron incorrectamente que el valor por defecto del estilo z-index (para posicionamiento vertical de los elementos en la página) de las capas que forman el menú desplegable era un valor concreto, cuando en realidad, según el estándar, este valor por defecto es «auto». El resultado es que IE8 sigue estrictamente el estándar y por lo tanto al no tener un z-index asignado la capa no se muestra.


Entonces, sabiendo esto, la solución es bien sencilla: apliquémosle un z-index a esa capa.


Asi, lo único que hay que hacer es crear un nuevo estilo en la página tal que así:



Como vemos lo único que hacemos es crear un estilo que asigna un valor de z-index. Cualquier valor mayor de 0 será suficiente, pero mejor ponerlo alto para asegurarnos de que las capas del menú pasan por encima de los demás elementos y que así siempre estarán visibles cuando se desplieguen.


Perfecto. Ahora sólo queda asignarle este estilo al control, para lo cual usaremos la propiedad CssStyle de su elemento DynamicMenuStyle:



A partir de ese momento el menú aplicará este estilo adicional a las capas de elementos adicionales (junto con cualquier otro que tuviésemos asignado para darle la estética deseada), y se verá perfectamente bajo IE8:



¡Listo!


Si queremos aplicárselo a todos los controles del mismo tipo podemos crear un archivo Tema de ASP.NET y definirlo dentro de un archivo .skin para reutilizarlo en todas las páginas.


Además, la gente de Microsoft ha sacado hace un mes unos parches para ASP.NET que solucionan, entre otros, este problema. Los podemos descargar desde aquí:



· Para Windows 2000, Windows XP y Windows Server 2003
· Para Windows Vista y Windows Server 2008


Aunque el título se refiere a parches para otras cosas más importantes, en ambos casos lleva incluida la solución al problema del que hablo en este post.


En un próximo post hablaré de cómo forzar el modo de compatibilidad en toda nuestra aplicación o en páginas concretas de la misma.


Espero que te resulte útil.

Un añito más MVP

Me ha pillaado de viaje (algo no muy raro últimamente) y lo acabo de leer, pero me he encontrado con un correo como siempre muy atento de la gente de Microsoft en el que me comunicaban que por quinto año consecutivo he sido reconocido de nuevo como Most valuable Professional (MVP) por Microsoft Corporation.


Así que ya me ha alegrado el día, y esta vez más que nunca, la verdad, porque uno ya empieza a tener una edad 🙂


Pues nada, otro año más a dar guerra por todos los sitios que pueda (y el tiempo me permita).


Genial 🙂