Aprende programación






23 ene 2011

100 números de javaHispano podcast


Hace poco llegamos al número 100 de javaHispano. Al igual que hice con los videotutoriales, he decidido hacer un post donde se recopile un link a todos los números. Para darle un valor añadido a este post respecto al feed, he organizado los podcast por temas:

Java EE y Desarrollo web:
Java ME y Android:
Java SE:
Videojuegos:
Desarrollo ágil:
Test y automatización de procesos
Spring, Grails y Groovy:
IDEs:
Legal:
Eventos y reuniones:
SUN y Oracle:
Software libre:
Personas y entrevistas personales:
Otros temas:
Noticias:
Dudas foro:

18 ene 2011

Interés emocional vs interés económico

Un claro ejemplo de que el interés emocional, pasional o gusto por algo puede ser más alto que el económico. Para ejemplo, la comparativa de las versiones Sonic 4 creada por el equipo de SEGA y tirando de nostalgia y la versión de Sonic Fan Remix creada por unos fans de Sonic con la intención de crear un juego tan solo por su pasión por Sonic y sin ningún animo de lucro. Aquí los resultados:


Sonic 4




Sonic Fan Remix

16 ene 2011

Primer prototipo para eficiencia en desarrollo de juegos Android con buscaminas de ejemplo

Buenas,

En el anterior post, comenté los perjuicios en el desarrollo que ví desarrollando directamente con el SDK. Para ello comenté la posibilidad de hacer la aplicación con frames y luego cambiando una clase poderla portar a Android. Pues bién, aquí hay un pequeño prototipo experimental con unos pequeños métodos que habrá que ir incrementado con el tiempo.

Lo he llamado adaptador de juegos android ya que en realidad se basa en que hay que extender una clase y no utilizar directamente lo que dispone Android, si no unos métodos que hacen de adaptador al SDK. Además viene de ejemplo el juego del buscaminas, que es bastante sencillo de desarrollar.

En el framework adaptador este hay que extender la clase JuegoAdaptador para poder pintar o extender eventos. Es muy importante el orden alfabético de los métodos ya que si inician por pintarXXXX es que se plasma algo sobre las ventanas. Si pone eventoXXXX es que es un evento del usuario.

Los eventos implementados son:
public void eventoInicializar(); //Al iniciar la aplicacion
public void eventoPausa(); //Al pulsar pausa (de momento no es posible).
public void eventoFinalizar(); //Al finalizar la aplicacion
public void eventoTick(); //Hilo que sirve para animar la aplicación. Por defecto se ejecuta cada 100ms.
public void eventoPintar(int orientacion); //Se está solicitando pintar en pantalla. La variable orientación indica si está en 0 vertical, 1 horizontal. Sin embargo, para que no esteis haciendo if hay una funcion getValor(orientacion,20,30) donde devuelve 20 si está vertical o 30 en horizontal. Así solo teneis que pintar todo 1 vez.
public void eventoTocarPantalla(int orientacion, int x, int y); //Se ejecuta cuando se hace click sobre la pantalla.
public Serializable eventoEstadoCapturar(); //Para persistencia y grabación en "video". Si se guardan los datos en una clase Serializable hacer snapshot de la partida e incluso grabarla y poderla rebobinar. Aquí se solicitan los datos serializables.
public void eventoEstadoReestablecer(Serializable s); //Para lo mismo. Aquí se solicita modificar los datos.



Monitor de grabación.
Una cosa muy interesante es estar jugando y si ves algún fallo poder ver que está pasando. Para ello hay una ventana adicional que permite visualizar los métodos get del modelo Serializable e incluso rebobinar a un estado anterior. También permite guardar el estado actual en disco duro para seguir otro día. Mi recomendación es ejecutarlo en modo depuración pero para comprobar las variables utilizar este frame de visualización ya que en un videojuego hay muchas iteraciones.

Ejemplo buscaminas.
Para que veais como funciona, he preparado un buscaminas ya que es relativamente fácil de hacer. Ya lo iremos complicando poco a poco. Para ello, he aplicado el JuegoAdaptador con JuegoAdaptadorTablero que permite la visualización de tableros NxM de manera que cada número va asociado a una imagen.

¿Donde conseguir el programa?.
Aún me falta hacer una lista de distribución y un portal para quien quiera participar. Si es que no tengo tiempo. Para que vayais probandolo lo teneis por SVN en google code y para quien quiera bajarlo sin SVN lo he subido a Mediafire.

https://code.google.com/p/adaptador-de-juegos-android/
http://www.mediafire.com/?xs35doxzo9lgw08

Vuestras sugerencias son bienvenidas.
Comentar que aún no está la clase que interaciona con Android. Este es un primer paso para recibir críticas. Hay cosas que están premeditadas como la utilización de español para hacer un API (ya lo explicaré en otro momento), pero ahora mismo se me habrán pasado miles de cosas y faltan muchas cosas por desarrollar. Vuestras ideas serán bienvenidas.

Poco a poco iré dando de alta a más sitios para que sea más colaborativo. De momento, las sugerencias podeis hacerlas en este post.

La licencia que le he puesto es Apache 2.0 para que sea lo más permisiva posible.

Resumen de todo este rollo.
La idea es crear métodos en la clase JuegoAdaptador que aislen donde se están volcando datos en un frame o en un screen de Android. Extendiendo esta clase se debería poderse utilizar tanto para Java Frames como para Android cambiando la implementación de la clase JuegoAdaptador. De momento, es algo básico pero se irán añadiendo funcionalidades poco a poco (sonido, eventos de arrastrar, etc).

Actualización 18-01-2011:
Subida una nueva versión con correcciones.


10 ene 2011

Primeras impresiones de Android SDK

Buenas,

Este año he empezado con fuerza y he iniciado a aprender Android. El objetivo será desarrollar algunos juegos y subirlos al Market (algunos gratuitos y otros a unos 50 centimos). Ya anteriormente había intentado hacer algo y las herramientas las conocía, pero siempre se había quedado atrás por falta de tiempo. En esta ocasión va en serio, es un objetivo prioritario.

Para instalación tan solo hay que seguir los pasos que están explicados.
  • Descargas Eclipse
  • Descargas el SDK de Android y lo instalas
  • Instalas el plugin de Eclipse y lo configuras
Y con todo ello ya puedes hacer tu primer "hola mundo". También puedes probar alguna demo si quieres.

Hasta aquí todo normal hasta que empiezo a ver inconvenientes.

Inconvenientes:

Memoria.
Lo primero de todo, al ser emulado traga multitud de memoria. Está bién que el dispositivo emule bién el dispositivo pero ¿no puede haber una versión ligera con las opciones mínimas?. Es increible como cuando llevas 30 minutos programando (o más bién desplegando) deja de funcionar el emulador, eclipse, etc. Esto os comento en Windows. Lo he probado también en un Linux Ubuntu 10.10 y funciona un poco mejor, en vez de caer a los 30 minutos cae a los 60. Pero sigue utilizando mucha memoria.

Lentitud de despliegue.
El primer despliegue es bastante lento pero una vez arrancado el emulador, cada vez que despliegas genera el paquete y lo sube al emulador. Lo cual significa que si tengo una aplicación con muchos resources, cada despliegue será eterno. Esto habría que mejorarlo. El sistema se parece un poco a los Ant de JEE que generan el paquete entero. Está bién tener un paquete generado que sea la aplicación, pero cuando estás desarrollando lo primordial es la velocidad de despliegue subiendo unicamente los cambios.

Depuración.
Al menos se puede depurar, pensé. En efecto, se puede depurar siempre y cuando no quieras cambiar el código al ver el error. Algo que es tremendamente util es la posibilidad de cambiar el código mientras se está ejecutando y que funcionen los cambios sin tener que volver a rearrancar y/o redesplegar la aplicación.

No hay console.
O al menos aún no la he encontrado. No puedo decir que no haya pues quizá no haya buscado adecuadamente pero esperaba que cuando pusiese System.out.println("Algo"); se visualizase en la consola del eclipse.

Modo horizontal y modo vertical.
Una característica de los nuevos móviles es la posibilidad de girar el movil. Este es interesante aunque pone complejidad en el desarrollo ya que quizá la distribución de los componentes sean diferentes. Tienes la posibilidad de desarrollar unicamente para una orientación si quieres. La pega que veo es que si quieres desarrollar para las dos orientaciones el emulador solo visualiza una por lo que si quieres volver a testear si funciona para la otra orientacion debes volver a lanzar otro emulador y volver a probar todo.

Ventajas:

Aun así, me gustaría comentar alguna ventaja que le he visto:
Gestión de resources muy bueno.
Está automatizado para que cargue imagenes de manera sencilla a través de una constante de una clase que se autogenera. Además tienes un directorio para poner diferentes imagenes según la orientación vertical-horizontal. Esto estaba interesante.

Doble buffer.
Al pintar en pantalla ya se dispone de un doble buffer. Aun no tengo claro como puedo provocar el repaint(), pero poco a poco me iré haciendo. Comentar que todos los juegos consistiran en cargar imagenes y moverlas en un canvas. No hay componentes prediseñados.

-------------
Y hasta aquí mis primeras impresiones. Es normal que al principio se vean más pegas que beneficios porque los trucos se van aprendiendo poco a poco. Yo que soy un maniático del desarrollo y despliegue rápido he visto bastantes inconvenientes pues he estado más tiempo desplegando que desarrollando.

Creo que para avanzar más rápido con Android habrá que crear un framework o API que permita ver mis aplicaciones en un JFrame y luego que el traspaso a Android sea cambiar dos cosas y vale. De esa forma, conseguimos la velocidad de desarrollo sencillo en un JFrame y luego lo podremos portar a algo más pesado.

En cuanto consiga algo, veré publicarlo con licencia LGPL para ver si se anima más gente.

Ya os iré contando.