jueves, 29 de enero de 2009

QUE SIGNIFICA "XNA"?

El artículo original fue escrito el 23-Feb-08.

Interesante interrogante ... si es que estás tomándote un largo descanso con una tasa de café o una cerveza en tu mano y permitiendo que tu mirada salga por la ventana hacia el espacio profundo (digo, de ambas "ventanas", tu sistema operativo y la de tu hogar u oficina).

Hace unos días miré la película "El Código Da Vinci" en DVD y unas "largas noches" atrás -dado que estaba sin sueño- miré "2001: Odisea del Espacio" en el cable, así que como pueden adivinar recordé rápidamente el significado detrás de "HAL" -el computador de la nave- sobre el que algúnas personas solían discutir. Lo que es pero y más triste, es que de repente comencé a buscar patrones en casi todo: "23, 23, ...".

Con el reciente anuncio de que podremos crear juegos para el Zune, y bajo la influencia principal de la primera película mencionada, comencé a reflexionar sobre el el significado de la palabra "XNA", si es que existe algúno.

Se que oficialmente se ha afirmado que no hay un significado real detrás de esas 3 letras, pero QUE TAL SI dichas letras resultaran de otras 3 letras distintas ... (?)

Siguiendo esta alocada idea jugué unos pocos minutos "trasladando" las letras algúnos lugares hacia atrás y adelante y aquí tienen los resultados:

V W X Y Z
L M N O P
Y Z A B C

No tengo ni la más remota idea de lo que las letras "VLY" y "YOB" puedan significar, pero echemos un vistazo a los dos restantes arreglos:

  1. WMZ : "Windows Mobile Zune", y mi favorito
  2. ZPC : "Zune PC Console".
Ahora bien, cuáles platformas serán oficialmente suportadas por XNA en algún momento de la segunda mitad del 2008? ... esperen ... procesando ... esperen ... lo tengo! ... psee ... Windows (PC), XBox360 (Console) and Zune (eeehh ... Zune?) ... XNA suena mucho mejor que WMZ y/o ZPC.

Coincidencia? Tal vez ... :)

Vamos a comerciales!

[Se que he perdido mi cordura pero Uds. aun tienen esperanza ... simplemente eviten la combinación de peliculas: "El Código Da Vinci" y "2001". No se preocupen, pronto voy a publicar mejores artículos. Prometido!]

XNA Y MAS ALLA: EL CAMINO A VS 2008

El artículo original fue escrito el 16-Dic-07.

He subido mi primer artículo al sitio "The Code Project", el cual muestra como integrar una aplicación basada en XNA y VS 2008 (se incluye una implementación para WPF) ... leánlo aquí.

Además en el artículo presento -lo que yo considero que es- una solución simple para incrustar juegos XNA dentro de controles WinForms; un asunto que ha sido largamente discutido en los foros (de XNA Creators) en estos días.

Espero que les sea de mucha utilidad.

Salúd, brindemos!

GANANDO PERFORMANCE EN XNA GSE

El artículo original fue escrito el 13-Ago-07.

Viejo! Relmente preciso conseguir las diapositivas de Shawn ... info muy útil y consejos para programar juegos usando XNA GSE, tanto para Windows cuanto la 360. El cubrió muchas áreas, como gráficos, matemática, hilos múltiples y herramientas de perfilamiento.

Aquí les dejo algúnas líneas:

  • Gráficos: Shawn mencionó cosas como el spritebatch, luego shaders, materiales y efectos, y finalmente renderstates. Algúnas conclusiones: usen el GPU lo más que puedan, no olviden configurar el SpriteSetMode, entiendan el sistema de llamadas de la XBox 360 y eviten abusar de los bloques de estado.
  • Matemática: es increíble como podemos ganar algo de performance pasando structs por referencia y haciendo cómputos alineados (inline). Sobre esto último, se pueden alinear constructores (un ejemplo de ello fue presentado). Aquellos de nosotros que hemos tenido experiencia con el framework .NET 3 y 3.5 sabemos que el modo ventajoso como esto es manejado en dichas versiones del framework.
  • Hilos Múltiples: obligatorio! A los efectos de obtener ventaja de esta funcionalidad en la XBox 360, debemos entender como están organizados los núcleos e hilos múltiples así como también el hecho que debemos manualmente asignar los hilos a los núcleos de la 360 (esto no se hace automaticamente). También tengan en cuenta que el Gestor de Contenido (Content Manager) no es thread-safe y que el manejo de entradas del usuario no puede reasignarse a hilos secundarios en Windows (léase, debe siempre permanecer en el hilo principal).
  • Herramientas: no hay mucha ayuda para identificar cuellos de botella en la XBox 360, y por ello, analicen perfíles en Windows and hagan inferencias (obviamente, recuerden la forma como el compact framework de .NET gestiona a la recolección de basura y a las generaciones).

Hubieron más puntos a mencionar de la presentación de Shawn sumado a una variedad de preguntas inteligentes, pero tendrán que ver el webcast luego para descubrirlo ... ;)

Fiuuu! ... un recreo de 30 minutos. Gracias mil! Necesito descansar ...

MAS SOBRE BUCLES "FOREACH"

El artículo original fue escrito el 19-Abr-07.

La segunda parte de la serie de Eli se encuentra disponible ahora.

De la publicación de Eli: "... Para Uds. lectores impacientes, aquí están mis resultados: Como he descubierto, esta verdad se mantiene también en la Xbox360. Siguen leyendo para averiguar como llegué a tal conclusión, y quizas aprendan algo sobre (un respiro profundo) el Monitor Remoto de Performance del Framework XNA para la Xbox 360 ...".

Entonces, quieren averguarlo? Léanlo ...

"EL PROYECTO NO ES SOPORTADO POR ESTA INSTALACION"

El artículo original fue escrito el 10-Abr-07.

"Enciendes tu computador como cualquier día normal, tomás de tu taza de café, te preparas un agradable café caliente mientras Windows inicia, obviamente con la cantidad usual de azúcar -por favor, no exageres- y vuelves a tu confortable escritorio, tu Reino, luego inicias C# Express -o cualquier edición de Visual Studio 2005- y decides crear un proyecto del framework .NET desde cero, así que pulsas sobre "New Project" y seleccionas "Window Application (WPF)"; el disco duro entonces emite el sonido habitual de "trabajando/ocupado" mientras el nuevo proyecto está siendo creado, pero de repente el siguiente mensaje aparece: "El proyecto no es soportado por esta instalación" ("The project is not supported by this installation"). Entonces dices: "QUEEE!!!", y con eso tu grandioso día se transforma en una pesadilla de #$%&$@ ...".

No, lo antedicho no es parte del guión de una escena de película, es la vida, la vida misma y me ha pasado a mí. Por suerte, encontré esta discusión en los foros de MSFT que presenta una solución fácil y rápida, la cual -al menos en mi caso- funcionó.

La solución:

  1. Abran la línea de comandos de VS 2005,
  2. Ingresen el siguiente comando: regsvr32.exe "%vs80comntools%\..\IDE\projectaggregator.dll", y finalmente
  3. Ejecuten %vs80comntools%\..\IDE\VCSExpress /setup (si usan C# Express), o bien de lo contrario, ejecuten %vs80comntools%\..\IDE\devenv /setup (si están usando VS 2005).

Tomen nota que "%vs80comntools% ..." es una variable de entorno, así que las líneas de comando antedichas deberían funcionar "como están". Sin embargo, si no funcionan porque no se encuentra el camino -quizás algúnas o todas las variables de entorno configuradas por el IDE actualmente se encuentran desordenadas en tu sistema- sólo reemplaza el término "%vs80comntools%" con el camino real al directorio que contiene los archivos y el comando debería entonces ejecutarse.

Ahora bien, intenta recrear el proyecto de nuevo y todo debería salir bien, como si nada malo hubiera pasado en primera instancia.

Salúd, brindemos!

UN TUTORIAL 3D AD-HOC PARA PRINCIPIANTES

El artículo original fue escrito el 23-Mar-07.

Ultimamente, las cosas han estado un poco quietas en el mundo de XNA -como la calma que precede a la tormenta, por lo que decidí publicar algúnos vínculos útiles para aquellos que quieren dar sus primeros pasos en lo 3D y por ende, necesitan entender algúnos conceptos básicos.

Primero lo primero, conceptos matemáticos: entendiendo ndertanding vectores y matrices. Uds. conocerán como operar con ambos así como también entenderán algúnos conceptos relevantes como la diferencia entre los productos de punto (dot) y cruzados (cross). Obviamente, hay lecturas adicionales disponibles que pueden encontrarse por separado para vectors y matrices.

Suponiendo que lo tienen claro, pueden entonces continuar con el siguiente concepto: sistema de coordenadas. Cuál es la diferencia entre coordenadas locales y globales? Qué es el espacio tangente? Uds. encontrarán un primer vistazo de estos conceptos, no se preocupen.

Ahora aparecen las matrices de transformación. Y qué es una matríz de transformación? Uds. aprenderán que a fin de obtener la proyección 3D deseada o correcta, es fundamental el orden en que se opera con dichas matrices.

Ok, demos aquí un paso más largo, ... este tópico no está particularmente relacionado sólo con 3D, pero viene de maravilla cuando se quiere construir un motor de juegos y comenzar a tratar con objetos padres e hijos que se mueven juntos y por ende, con concatenación de matrices: scenegraph.

Implementar un scenegraph varía en base a cada proyecto, pero si entienden los conceptos básicos lo harán bien, incluso si no lo llaman (o no quieren llamarlo) scenegraph en su código fuente o si quieren evitar su implementación completa pero preservar aún su funcionalidad.

Bueno, como pueden ver, este es un tutorial para principiantes ad-hoc, creado sólo navegando la web con la ayuda de motores de búsqueda, así que si no tienen dinero para comprar un buen libro en la materia verán que Internet es un gran lugar para encontrar la información que necesitan si tienen paciencia al buscar.

Que tengan una buena lectura ...

SON LOS BUCLES 'FOREACH' TAN MALOS PARA TUS JUEGOS?

El artículo original fue escrito el 17-Mar-07.

Ultimamente, muchos desarrolladores han estado preguntando sobre aspectos de performance que al usar los bucles "Foreach" en sus juegos basados en XNA, tanto para la plataforma PC cuanto la XBox360.

Como resultado de todas esas interrogantes, Cornflower Blue decidió efectuar su propia investigación con la ayuda de la herramienta  "CLR Profiler".

De la publicación de Eli: "... Yo quería obtener la historia completa. Adicionalmente, esta era una razón ideal para aprender a utilizar las herramientas de perfilamiento del CLR de Windows y Xbox 360, lo cual he pospuesto por algún tiempo. Entonces, me percaté como haría justamente eso: crear un bucle foreach sobre un montón de colecciones, usar los prefiladores para ver si estoy generando basura, y con un poco de suerte aprenderíamos algo durante el proceso. ...".

Es una buena lectura, pero más importante, los resultados obtenidos por Eli son muy interesantes, así que adelante, vayan y lean "Foreach, Garbage, and the CLR Profiler".

Que lo disfruten!

NECESITAS UN OFUSCADOR PARA .NET? - PARTE 2

El artículo original fue escrito el 06-Mar-07.

Recuerdan este artículo?

Bueno, en los foros de XNA GSE hay una nueva discusión -sobre el mismo asunto- donde Jim Perry ha publicado un vínculo muy útil a este sitio con una lista de los obfuscatores disponibles para .NET (así como también los que ya han sido discontinuados).

La belleza del sitio es qie por cada ofuscador listado, también van a saber sobre cuales versiones del framework .NET trabajan (includo el compact framework), si tienen versiones libres para descargar, cuándo fueron actualizados por última vez, su vendedor, etc.

Espero que les sea de utilidad, adiós!

[Dicho sea de paso, he intentado encontrar un cuadro comparativo en la Internet (independiente  de todo vendedor) sin éxito hasta el momento ... :( ]

NECESITAS UN OFUSCADOR PARA .NET?

El artículo original fue escrito el 07-Feb-07.

Recuerdan la segunda parte de la serie "Deploying Games To The 360 Without Sharing Source Code" -relacionada a la ofuscación de ensamblados de .NET?

Bueno, si no están interesados en la materia sólo ignoren esta publicación. De lo contrario, sigan leyendo ...

He buscado en Internet por algúnos ofuscadores y esto es lo que he encontrado hasta ahora:

Algúnos de los sitios de los vendedores sí incluyen cuadros comparativos pero desafortunadamente no pude encontrar cuadros comparativos "hechos por usuarios". Entonces, como es habitual terminamos en un escenario "prueba-la-demo-antes-de-comprar" a fin de encontrar el que llena nuestras necesidades adecuadamente para la protección de código.

Por cierto, la lista de arriba tiene como finalidad ser una referencia "dinámica", por lo que si por algúna razón falta un ofuscador -lo siento por ello, sólo avísenme y lo agrego a la lista lo antes posible.

Además, si conocen bien una o varias de estas aplicaciones -porque las usan o las usaron- y quieren compartir sus opiniones son bienvenidos a publicar sus comentarios.

Espero que esto les sea de ayuda!

RECUPERANDO PLANTILLAS DE PROYECTO DE VISUAL C# EXPRESS

El artículo original fue escrito el 12-Dic-06.

Luego de instalar XNA GSE v1 me di cuenta por casualidad que las plantillas de proyecto que trae por defecto la versión express de VS C# - esto es, Windows Application, Class Library, Console Application, etc. - habían desaparecido del navegador de plantillas del IDE ... :(

Mi primer movimiento desesperado era desinstalar y reinstalar todo (por supuesto, luego de un fuerte grito of terror), pero antes de saltar a la piscina dónde talvez no había nada de agua, pensé (y vean cuán astuto soy): "Bueeeno! Talvez sea tiempo de mirar algo de TV ...", pero agregando casi instantáneamente: "... pero primero busquemos un poco en los foros de MSFT por algúnas respuestas, culpémos a otros y otras tareas comúnes diarias ...".

Para mi sorpresa encontré no uno sino dos discuciones relacionadas a un asunto similar lo cual me brindó una pista acertada sobre la solución alternativa. Y como nos aproximámos a la víspera de Navidad lo voy a compartir con todos Uds. ...

La solución es simple, simplemente ejecuten la siguiente línea -tanto en el command shell (cmd.exe) como llamando con la barra de búsqueda del explorador de Windows a "start > run":

"%vs80comntools%\..\..\common7\ide\vcsexpress.exe" /installvstemplates

Por supuesto, deberán remplazar "%vs80comntools%\..\..\common7\ide\vcsexpress.exe" con el camino correcto a "vcexpress.exe" en sus máquinas locales.

Si bien esto debería funcionar, puede surgir un problema: las plantillas podrían seguir desaparecidas para el navegador de plantillas del IDE (esto sucedió en mi caso, lo cual significa, otro grito de terror). No hay problema! Si abren la carpeta donde "vcexpress.exe" está alojado también encontrarán un directorio llamado "VCSExpress", cierto?

Si no es así, contacten a su administrador local, quien les recomendará que (des/re)instalen todo.

Si la encontraron, abran la carpeta "ProjectTemplates" y luego "1033" folder donde verán al menos 4 archivos zip (usualmente 6) conteniendo las plantillas faltantes. Copien estos archivos zip a "ProjectTemplates", ejecuten de nuevo la línea de comando antedicha y voilá! El IDE ahora reconoce todas las plantillas de proyecto instaladas.

Parece que el proceso de instalación de XNA GSE modifica de algún modo el archivo de "cache" ubicado en la carpeta llamada "ProjectTemplatesCache" que todas las plantillas de projecto instaladas dentro de la carpeta "ProjectTemplatesCache\1033" son ignoradas.

Entonces, luego de aplicar la solución alternativa mencionada en este artículo encontrarán que las plantillas recuperadas están duplicadas en el directorio "ProjectTemplatesCache" (esto es, 6 dentro y 6 fuera de la carpeta "1033") hasta que un grupo de MSFT arregle los futuros instaladores de las próximas versiones de XNA GSE ... ;)

Nos vemos!

MANAGED DIRECTX Y WINDOWS XP PRO 64-BITS

El artículo original fue escrito el 14-Set-06.

Como muchos de Uds. deben saber, no hay aún soporte para MDX en una plataforma x64. Por lo que, a efectos de correr cualquier programa de MDX, la plataforma objetivo debería configurarse en "x86" (esto es, 32 bits).

Para usuarios de WinXP Pro x64 que quieran correr código gestionado de DirectX con Visual Sudio 2005 (también aplica a el framework de XNA) -en cualquiera de sus ediciones, sepan que hay dos formas posibles de evitar esa horrible excepción "Bad image format".

Tal cual mencionado en el blog de Benjamin Nitschke, la primera forma es modificando el archivo "csproj" con el Bloc de Notas. Sólo encuentren y abran el archivo y luego agreguen la siguiente línea:

<PlatformTarget>x86</PlatformTarget>

(si el "nodo" ya existe, sólo remplácenlo por lo mencionado arriba).

La segunda forma es usando el IDE de VS en sí mismo. Sigan este vínculo por más instrucciones.

No cambien de canal!