Vídeo: Java 4 Ever

Ya hace días que había visto este vídeo y tardaba en subirlo al aquí.

Sinceramente, no tengo comentarios ante esto. Es realmente gracioso, sobre todo cuando te das cuenta, miras para atrás y piensas en como ha evolucionado el mundo Java en comparación del mundo .NET, o sea nada. No quiero abrir polémica al respecto, es una realidad.

Los años de .NET y los mensajes SOAP terminaron hace 4 años, con la llegada de Vista, que traía de serie .NET 3.0. Esta…
read more

Botón Bitacoras.com

He añadido al blog el botón de Bitacoras.com para que podáis votar aquellos post que os gusten. No creáis que es una tontería, votando los contenidos sabré que os gusta más y que os gusta menos a la hora de escribir y procuraré ir por temas que se que os gusten más.

Lo mismo con el botón de Facebook que ya puse la semana pasada y procuraré que en breve también tengamos un método para twittear.


read more

Gizmóvil: Resumen semana 28 de Junio

Esta semana ha sido para Android con sus próximas versiones 2.2 y 3.0, la tarifa de Vodafone y el Firefox Home ha sido casi testimonial.

La lista de aportaciones es la siguiente sido:

2 de Julio: Rumor: Google Music será lanzado junto a Android 3.0

1 de Julio: Tu Firefox en el iPhone, esperándolo App Store

30 de Junio: Samsung confirma que todos los Galaxy S tendrán Froyo

29 de Junio: Ya viene Froyo, también conocido como Android 2.2

28 de Junio: Tarifa Internet Contigo Deberes…
read more

Cómo hacer un juego con Silverlight. Parte I

Con este tutorial, quiero abrir un tema que desde hace tiempo me interesa bastante. Ya el otro día os recomendé un libro sobre desarrollo de juegos, pero en esta serie de tutoriales vamos a verlo de una forma más práctica pensando en la aplicación de estos conceptos en el próximo Windows Phone 7.

En el tutorial partiremos de la base de que has leído mis tutoriales de introducción a Silverlight. Y usaremos como base una librería que creé en su día para realizar una demo técnica: GameFX.

Ver juego

Tradicionalmente en Silverlight tendríamos dos formas de trabajar: creando controles de usuario con animaciones y basándonos en las interacciones del usuarios con dichos controles para la actualización del juego. El segundo te da mas flexibilidad a la hora de crear lógicas de inteligencia y colisión, pero, si estáis interesados en la primera, aquí tenéis una serie de 10 vídeos donde muestran como desarrollar un juego desde cero con Silverlight.

Entonces la idea es la siguiente:

Primero creamos los controles: enemigos, personajes, fondos, etc.

Lo segundo es comenzar el bucle de actualización y pintado

En el de actualización, cambiamos las posiciones de nuestros controles, creamos nuevos, etc. en función del estado del teclado

Finalmente en el de pintado añadimos y quitamos los controles que hayan sido creados o eliminados

Para la realización de la librería GameFX me basé en el modelo de programación de XNA para el diseño del modelo de programación.

Como veis la clase Game nos proporciona lo que decíamos antes: los métodos de carga, descarga, actualización y pintado.

¿Por donde debemos empezar?

Antes de nada debemos pensar qué tipo de juego queremos hacer, como se va a interactuar con él y que recursos va a tener: sonido, gáficos, etc.

Al menos tenemos que tener unos ejemplos de gráficos para ir viendo como se va moviendo.

Una vez lo tengamos claro, debemos crear los ficheros con esos recursos. Por ejemplo, para el jugador, crearemos el fichero Player.xaml:

<UserControl

xmlns=»http://schemas.microsoft.com/winfx/2006/xaml/presentation»

xmlns:x=»http://schemas.microsoft.com/winfx/2006/xaml»

x:Class=»Demo.Player»

Width=»128″ Height=»128″>

<Image Margin=»0″ Source=»Content/player.png» Stretch=»Fill»/>

</UserControl>

Como veis en la carpeta Content es donde he decidido guardar el contenido.

Una vez ya tengamos varios ficheros, XAML, con nuestros sprite ya podemos empezar con el juego.

Empezando a hacer el juego

Una vez que ya estemos listos para empezar a programar el juego, debemos de nuestro proyecto Silverlight, eliminar el fichero App.xaml ya que el propio juego ya se encarga de la gestión de la aplicación.

Acto seguido debemos crear un fichero XAML, nosotros le llamaremos DemoGame.xaml, que vamos a derivar de nuestra clase Game. En las propiedades del proyecto debemos ponerlo como objeto inicial (Startup Object).

<GameFx:Game xmlns=»http://schemas.microsoft.com/winfx/2006/xaml/presentation»

xmlns:GameFx=»clr-namespace:GameFx;assembly=GameFx»

xmlns:x=»http://schemas.microsoft.com/winfx/2006/xaml»

x:Class=»Demo.DemoGame» «>

<GameFx:Game.Resources»>

</GameFx:Game.Resources»>

</GameFx:Game»>

Y del lado del código C# debemos implementar los 4 métodos, siendo lo más importantes estos:

void LoadContent() { }

void Update(GameTime gameTime) { }

void Draw(GameTime gameTime) { }

A nivel de clase debemos declarar las variables de los recursos, como por ejemplo el jugador:

Player player;

Y en el método LoadContent debemos instanciarlo:

Player player;

public override void LoadContent() {

player = new Player();

}

Actualizando el estado

En el método Update debemos en función del estado del teclado, el objeto KeyboardState nos permite saber el estado del teclado:

public override void Update(GameTime gameTime)

{

if (KeyboardState.ContainsKey(Key.Down))

{

if (KeyboardState)

{

if ((double)player.GetValue(Canvas.TopProperty) + player.ActualHeight < GameSurface.ActualHeight - 10)
{

player.SetValue(Canvas.TopProperty, (double)playter.GetValue(Canvas.TopProperty) + 4.0);

}

}

}

}

Dibujando los sprites

Por último en el método Draw debemos añadir y quitar del juego aquellos objetos que se vayan creando o muriendo. En nuestro ejemplo solamente tenemos a nuestro jugador, que solo es necesario mostrarlo la primera vez.

bool firstTime = true;

public override void Draw(GameTime gameTime) {

if (firstTime) {

GameSurface.Children.Add(player);

firstTime = false;

}

}

Resumen

Tan solo hemos mirado como usar la librería GameFX que estoy programando, pero en caso de ser necesario tan solo se debería crear un bucle que llame a los métodos Update y Draw secuencialmente. Esta librería tan solo quiere ayudar a no repetir cosas que nos harían falta en todos los juegos que hagamos.

En próximas entregas veremos como añadir enemigos, detectar colisiones, etc. Para ver el estado actual del juego:

Ver juego

Nota: Hay muchas cosas que está en la librería GameFX que todavía no están implementadas como el ContentManager. Para futuras versiones la idea es descargar el contenido bajo demanda en vez de tener los ficheros en el propio paquete de Silverlight.

Entrada original

Una pequeña despedida, me traslado

Ya desde hace tiempo le llevo dando vueltas al tema del blog, poco a poco se ha ido fraguando en mi cabeza la idea de volver a tener un blog independiente. Han sido muchos los motivos que me han llevado a tomar esta decisión.

Entre ellos, como Rodrigo bien sabe, como ha ido evolucionando Geeks.ms desde sus inicios: no me ha terminado de convencer, ha crecido demasiado. Antes de que me machaquéis, no digo que eso sea malo simplemente que lo que antes era ver día a día a ver quien escribía, quien no, comentar en los blogs, etc. con tanto crecimiento se ha hecho imposible.

Otro motivo ha sido la diversidad de contenidos que estoy generando a día de hoy en otras redes, ya no estoy, como en su día, tan dedicado al blog. La cantidad de contenido técnico ha disminuido profundamente.

Y por último, y no menos importante, mi reciente iniciación en otros temas como el desarrollo en la plataforma Android.

Pero como digo, la despedida es pequeña: ¡sigo escribiendo!. Mi blog personal, principal o como queramos llamarlo desde hoy será: http://blog.eugenioestrada.es.

Pero no quiero que dejéis de leerme y por ello aquellos que os habéis subscrito a mi antiguo RSS ya está actualizado a mi nuevo blog. A partir de ahora os podéis subscribir en el siguiente:

http://blog.eugenioestrada.es/feed

No es fácil dar este paso, como toda despedida, Geeks.ms ha sido uno de los sitios donde más he aprendido a lo largo de estos años y que espero que seguirá siendo así. Porque aun que yo me vaya, os seguiré leyendo a todos y continuaré comentando cuando sea necesario, como siempre.

Y  aun así, todo el contenido que he generado en este blog a lo largo de todos estos años, seguirá aquí para que quien quiera pueda consultarlo, comentarlo, etc.

Es el momento de abrir una nueva etapa… ¿o un nuevo blog?

Continuaremos hablando en http://blog.eugenioestrada.es y sino en el Twitter.

Sonrisa

Actualizas las políticas de la Marketplace de Windows Phone 7

Microsoft acaba de actualizar su política de distribución de aplicaciones móviles. Hasta ahora teníamos las siguientes condiciones:

  • Subscripción anual de 99$ para publicar gratis 5 aplicaciones (cuando digo gratis, me refiero a que como programador no te cobran)
  • 99$ cada una de las siguientes aplicaciones (no se a cuanto era el límite)
  • La publicación en cada mercado consumía una de las anteriores
  • Remuneración del 70%

A partir de ahora:

  • Subscripción anual de 99$ para publicar gratis 5 aplicaciones (esta no cambia)
  • Subscripción gratuita para estudiantes mediante el programa DreamSpark con las mismas condiciones como si hubieras comprado la de 99$
  • 19$ por cada una de las siguientes aplicaciones sin ningún limite de aplicaciones distribuidas
  • Posibilidad de hacer lanzamiento en todos los mercados consumiendo solo una aplicación
  • Servicio de notificaciones disponible
  • API para gestionar versiones de prueba disponible
  • Se permiten diferentes modelos de negocio: free, pagada, “fremium” y “ad-funded”
  • Los pagos serán mensuales a partir de los 200$ de ingresos

Fuente: Windows Phone Developer Blog

Paralelizando tareas

Cada vez son más los equipos que al menos tienen dos núcleos, ahora mismo ya tenemos algunos con cuatro que emulan ocho. Pero no estamos, como desarrolladores, explotando ese potencial.

Imaginaros que tenemos en memoria una lista con cientos de miles de objetos y debemos realizar alguna operación sobre ellos, como cambiar un valor. Nosotros haríamos algo similar a:

foreach (var objeto in lista)
{
    objeto.dato = nuevoValor;
}

Esta instrucción sería equivalente a hacer:

for (int i = 0; i < lista.count; i++)
{
    var objeto = lista[i];
    objeto.dato = nuevoValor;
}

Estas instrucciones tendrían una complejidad O(n), pero solo harían uso de un solo núcleo.

Si estamos usando .NET 4.0, éste nos trae de serie una serie de funciones para paralelizar trabajos y de tal forma que va a repartir las tareas en diferentes núcleos.  No solo eso, sino que si un núcleo tiene capacidad para n tareas también se le pondrán n tareas a él.

Para hacer eso tan solo hay que cambiar un poco la llamada anterior:

lista.AsParallel().ForEach (objeto =>
{
    objeto.dato = nuevoValor;
});

El resultado final es que durante el proceso de ese bucle el procesador se pondrá al 100%, pero la tarea será ejecutada en menos tiempo.

Algunas consideraciones sobre paralelismo:

Debemos tener en cuenta que al realizar un trabajo en paralelo tenemos principalmente tres problemas:

  • Dividir el problema
  • Sincronizar las tareas
  • Unir el problema de nuevo

Todo esto tiene el problema de que supone una carga computacional extra que solamente será “rentable” si el bucle es muy grande. De todas formas en caso de que fuese pequeño debería ser imperceptible estas operaciones, ya que la carga computacional será pequeña de todas formas.

Una de codecs, HTML5 y navegadores

Quien haya estado un pelín atento a las noticias tecnológicas, sabrá que esta semana Google en su conferencia Google IO ha publicado su códec de vídeo VP8 para entrar en la guerra de los codecs en los navegadores.

Este códec lo ha liberado en el formato WebM que incluye el códec Ogg para el audio, todo envuelto en un contenedor Matroska (MKV para los amigos). Lo interesante es que parece que lo han optimizado para un uso mejor en Web tanto para escritorio, móvil y ahora televisión (con Google TV).

La parte más interesante de toda esta historia, es que mientras en los últimos meses los diferentes navegadores poco a poco se han ido posicionando en pro o contra de los diferentes codecs de vídeo, por ejemplo Google, Apple y Microsoft apoyaban el formato H.264 mientras Opera y Mozilla lo rechazaban por el coste de su licencia. Google, como era de esperar tras la compra de la empresa que realizaba el códec VP8, ha estado hablando con casi todos (Mozilla y Opera) para que den soporte a su códec.

Pero después del “googlpe” hay que comprobar resultados o mejor dicho comprobar reacciones.

Microsoft

Por un lado el equipo de IE tan sólo tardó unas horas en contestar, como podéis ver en los links que acompañan al post. Y su posición es totalmente lógica:

¿HTML5 define un códec estándar?

No, al igual que no define que formatos de imágenes hay que usar, etc. Esto tiene cierto sentido, la versión actual de HTML (hay que recordar que HTML5 todavía es un borrador) la 4.1 tiene ya más de 10 años. En ese tiempo, las conexiones a internet, formatos de videos, audio, etc. han cambiado totalmente. Por lo tanto no puedes bloquear la innovación por esa vía.

¿Porqué definir que códec debe usar el proveedor?

Por otra parte no podemos obligar al proveedor a codificar sus vídeos en un formato si no lo quiere, sea éste VP8, H.264, Ogg o el que sea.

Por lo tanto ¿para que limitarse a uno o a un subconjunto de ellos?

Para eso IE9 ha decidido que todo códec soportado por el sistema operativo será soportado en IE9. Por lo que IE9 soportará todos los codecs que tenga Windows de serie y todos aquellos que se instalen posteriormente.

Reflexión

Ahora espero que trabajen un poco este tema, para detectar que no tienes instalado WebM o el que sea y te ofrezca descargarlo de donde sea, en el caso de los codecs libres. ¿O tendrá esta labor que correr de la mano del proveedor? Espero que no para no dañar el buen trabajo que están haciendo de implementar HTML5 de forma completa.

Apple

Apple por su lado no se sabe nada de ellos, lo tienen más difícil ya que por su modelo productivo su decisión será:

¿Lo soporto o no lo soporto?

Si la respuesta es no, los usuarios nos veremos perjudicados ya que como siempre ha pasado la dispersión de contenidos en diferentes formatos será un problema.

Si la respuesta en cambio es que si, van a tener que actualizar todo el software que tienen tanto en dispositivos móviles como el software en plataformas Windows y Mac. La parte más preocupante es el iPod, iPhone y iPad ya que si no hacen reproducción usando aceleración por hardware se convertirá en un mayor consumo de batería.

La otra cara de la moneda

Por otro lado siempre habrá quien se decante por soluciones basadas en Flash o Silverlight para dar soporte a cuestiones más avanzadas como subtítulos, streaming adaptativo según bitrate y de más. Como digo siempre HTML5 no substituye a Flash ni a Silverlight, sigue y seguirá habiendo muchas cosas que HTML5 no pueda hacer. Ya sea el acceso a Webcam y Micrófono por ejemplo.

No quita que en los temas de reproducción de vídeo si que se hacen innecesarios.

Más información:

http://www.webmproject.org/

http://code.google.com/events/io/2010/

http://www.google.com/tv

http://blogs.msdn.com/ie/archive/2010/05/19/another-follow-up-on-html5-video-in-ie9.aspx

Problemas de instalación de Silverlight 4 (Segunda parte)

El otro día escribí el post Problemas de Instalación de Silverlight 4 (Solucionado), iluso de mi creí que eso llegaba. Pero cuando me puse a aplicar esa solución en algunos de los clientes me encontré con que el problema iba más allá. Silverlight se veía bien en Firefox y no en Internet Explorer y por consecuencia tampoco en el Out Of Browser.

Investigando me encontré con que Internet Explorer tenía TODOS los complementos deshabilitados y el botón de habilitar estaba bloqueado. Continué en mi andanza de intentar solucionarlo y me encontré con un artículo de TechNet (ahora mismo no lo tengo a mano pero si alguien lo pide lo pongo en los comentarios). Que hay una política que se guarda en el registro de Windows en la clave:

SOFTWARE>MICROSOFT>WINDOWS>CURRENTVERSION>POLICIES>EXT

Cuyo nombre de valor es RestrictToList que si es 0 se permiten todos los complementos y si es 1 solo una “lista blanca” que se encuentra también en el registro.

De cara a no tener que navegar por el registro de Windows me hice una utilidad compilada con .NET 2.0 para comprobar esa clave de registro y, en caso de estar mal, repararla.

De momento nació solo con esa reparación, pero como visto lo visto tocar el registro para reparar las instalaciones de Silverlight es bastante habitual irá creciendo a medida que las vaya encontrando.

Continuará…

De todas formas… si pensabais que ya estaba solucionado estáis equivocados, aún me queda un caso más que tengo sin solucionar y es que en Internet Explorer funciona, en Firefox también, pero en Out Of Browser no, no detecta el plugin de Silverlight.

¿Sugerencias?