Más PacMan!!

Si amigos!, mientras trato de hacer el código algo presentable, tengo nuevas novedades. Hoy Alan me hizo notar que mi juego estaba adaptado para celulares demasiados groso (pantallas de 240×240 pixels). Claro que no es la realidad de la mayoría.

Por lo tanto, me tuve que poner a implementar window-scrolling, y para que quede como a mi me gustaba, lo hice desde 0, logrando algo que realmente me gusta, tanto en código como visualmente.

Antes de liberarlo, les dejo un lindo swf mostrando como se ve en los distintos modelos, les voy a visando, son 4Mb.

UPDATE: Ya puse el código fuente disponible en mi repositorio de darcs. Para bajarlo (si tenés darcs instalado) : darcs get http://www.gazer.com.ar/repos/PacMan , Si no tenes darcs, no existís 🙂

Juegos con J2ME

PacMan!Ya he repetido una y otra vez lo que opino de Java, pero también en el último tiempo vengo diciendo que veía con buenos ojos J2ME, la edición para dispositivos móviles de esta plataforma. Mi interés inicial es hacer juegos con ella, por lo que en el último mes vengo lentamente avanzando en un juego totalmente innovador, nuevo y de concepto radical : un PacMan 🙂

La primera aproximación del juego es funcional, tenemos a PacMan que se mueve, detecta choques, come pastillitas y todo eso. También tenemos unos fantasmas medio lelos, que se mueven de manera pseduo-aleatoria, con una simple máquina de estados finidos.

Claro que el código apesta, es una mugre que fui toquetando a lo largo de un mes, mientras iba de tutorial en tutorial, pasando por la documentación de la API, pero se puede mejorar sin mucho esfuerzo. A nivel de implementación gráfico también apesta, ya que no uso backbuffering, lo que me obliga a redibujar la totalidad de la pantalla en cada iteración.

En fin, es un proyecto que me está gustando hacer, la plataforma está muy bien pensada (no así J2SE :-)) y creo que tiene un futuro en mis desarrollos. Lo interesante es toda la movida que se está lanzando sobre APIs 3D, que cada día más modelos de celulares soportan una calidad gráfica 3D que sorprende.

La imagen que adjunto es un screenshot del emulador de Sun con el juego en acción.

Oregano 0.40.4

Hace unos momentos he liberado Oregano 0.40.4, una versión que pretende arreglar un problema de ploteo con Cairo 0.4.

También se ha includio un arreglo faltante para dar soporte completo a IA64 que se había escapado en las últimas pruebas.

Otro cambio es que se han sacado los parámetros de DEPRECATED por default, para que compile ocn Gnome > 2.8, hasta que, eventualmente, se porte a Gnome 2.10 (2.12 es un lindo número :-).

OpenUsability

Leyendo la web de Escritorio Ya! me encontré con una noticia sobre un sitio llamado Open Usability. La idea de esta gente, es marcar pautas, agrupar expertos en usabilidad y ayudar a los proyectos a crecer mejorando su capacidad de interacción con el usuario.

En una vista rápida, principalmente se han sumado varios proyectos de KDE (que realmente lo necesitan :-)).

Podemos encontrar toda clase de información : guías de diseño de UI, artículos, especificaciones, etc. Varios de los enlaces llevan a los sitios de Sun, IBM y Apple, fuentes, en general, muy ricas de documentación en este campo, sobre todo las de Apple (que le llevan años a todo el resto en los que respecta a usabilidad).

Un proyeto que, de funcionar, lograré mejorar las aplicaciones que usamos todos los días. Esperemos que otros proyectos lo tomen en cuenta, sobre todos aquellos que todavía no entienden lo que significa UI 🙂

Ubuntu Update

Luego de varios días con los repositorios rotos, Ubuntu Breeze (como se llama la nueva versión de desarrollo) volvió a la vida. La novedad con la que me encontré es que han creado paquetes para Mono 1.1.X y Gtk# 1.9.x, con lo que ahora puedo probar todo eso que no podía antes, por no querer compilar Mono desde los fuentes, o sea : Beagle e iFolder.

También compilé Mono UML, una herramienta CASE para generar diagramas UML y luego código (C# por ahora si mal no recuerdo), entre otras cosas. Si bien está un poco verde, los diagramas son 1000 veces más lindos que los que hace Dia. Pueden ver como compilarlo en este enlace.

Mono UML

Sin duda Ubuntu crece y crece para el lado correcto cada día ….

Pero, para tener un poco de variedad, no le pierdan la vista a Foresight Linux, una distro que quiere pisar fuerte. Seguramente haré uno de mis famosos review’s cuando termines los actuales 🙂

WordPress Quote Plugin

Hoy organizando los comentario de mi blog, encontré que algunos quoteaban partes de otros comentarios usando el “>”, y se perdía un poco de vista las cosas. Es por eso que me puse a hacer un simple plugin de WordPress para agregar un tag “quote” que pueda ser utilizado.

El resultado está acá. Solo deben guardarlo en el directorio wp-content/plugins y luego activarlo desde el manejador de plugins de WordPress.

Para ajustar el estilo, solo deben agregar a su hoja de estilo un .quote definiendo como desean que se vea.

XML HTTP con JavaScript

En los últimos meses he tenido que trabajar mucho con Javascript para poder hacer las pantallas del sistema que desarrollo en el trabajo. La idea siempre es tener la menor cantidad de recargas de página posible, por lo menos visibles para el usuario.

Fue por eso que en un momento necesité el find as you type en una caja de texto, y buscando como lo hacía Google pude implementarlo sin problemas.

Luego necesité un poco más, así que me puse a investigar. La solución no es 100% portable, pero solo me interesaba que funcione con IE y Firefox.

Lo primero que vamos a necesitar es el objeto que se encarga de la comunicación. Como varía con el navegador, crearemos una función :

function getXMLHTTP(){
  var A=null;
  try{
    A=new ActiveXObject("Msxml2.XMLHTTP")
  }catch(e){
    try{
      A=new ActiveXObject("Microsoft.XMLHTTP")
    } catch(oc){
      A=null
    }
  }
  if(!A && typeof XMLHttpRequest != "undefined") {
    A=new XMLHttpRequest()
  }
  if (!A) {
    alert ('No XML-HTTP Capable Browser!');
  }
  return A
}

La función va probando crear el objeto XML HTTP. Si fallan todos los métodos, lanza una alerta y retorna NULL.

Para obtener datos de un script remoto es muy simple, el siguiente código lo muestra :

function saludar () {
  nombre = document.getElementById('nombre');
 _xml = getXMLHTTP();
  if (_xml) {
    _xml.open("GET", "/saludar.php?nombre="+nombre.value, true);
    _xml.onreadystatechange=function() {
      if(_xml.readyState==4&&_xml.responseText) {
        if(_xml.responseText.charAt(0)!="< "){
          eval(_xml.responseText)
        }
      }
    }
    _xml.send(null);
  } else {
    alert('XML HTTP NOT SUPPORTED');
  }
}

Bien, analicemos lo que hace nuestra función. Lo primero es obtener el INPUT del formulario donde el usuario ingresa el nombre (estoy suponiendo que existe). Luego de obtener el objeto XML HTTP y verificar que existe, abrimos una conexión GET al URL especificado (tengan en cuenta que esto todavía no realiza el GET, solo setea lo que vamos a hacer).

Lo importante viene ahora en _xml.onreadystatechange=function() . Lo que hacemos es asignar al slot onreadystatechange una función que se encarga de recibir los datos que llegan. En nuestro caso, la función verifica el estado, para ver si fue exitoso, y saltea las líneas que comienzan con “< “, quedandose solo con el contenido plano, el cual pasa a la función eval que ejecuta ese string como si fuera código JavaScript.

Por último, para realizar la acción, llamamos al método Send.

Por el lado de PHP, necesitamos el script saludar.php :

  echo "alert('Hola ".$_REQUEST['nombre'].", como va?');";

Pueden probar este ejemplo acá. La verdad es que da para jugar mucho. También les recomiendo el código de Google para hacer el autocomplete, que es muy ingenioso (pueden encontrarlo googleando en varios blogs).