GPXReader

25 10 2009

Hola de nuevo :P

En los últimos fines de semana, he estado trabajando a ratos en un programilla para leer archivos *.gpx, que contienen rutas grabadas con un dispositivo GPS, de momento el programa es bastante cutre y lo quiero ampliar y añadirle mucha más funcionalidad, pero eso será poco a poco, de momento, se puede descargar de aquí. Os dejo también un pantallazo, para que veais la pinta que tiene el invento:

GPXReader

El archivo zip contiene un .jar que es el programa propiamente dicho y un ficherito GPX de ejemplo, hay que ejecutarlo de la siguiente forma:

java -jar GPXReader.jar nombre_del_archivo

Espero que os guste, cualquier reporte de bug, sugerencia, etc, será bienvenida :)

Cuando esté algo mejor, también subiré el código fuente.



Artifex Terrain Loader (III)

9 11 2008

Por fin he conseguido que esto funcione bien, al final era un problema que no tenia nada que ver con el cargador del terreno, aunque todo parecia indicar que no era así, pero bueno, C++ es así xD

Esta tarde he estado investigando como aplicar físicas al terreno para que los personajes y objetos vaya por el, y la verdad es que la tarde ha sido bastante fructífera, he sacado un par de videos, con los resultados.

El primero de ellos muestra a una caja, que aunque no se ve muy bien, cae del cielo, y choca contra el terreno, deslizandose por el, lástima que no se vea del todo bien (maldito encoder de video xD)

en el segundo video vemos un robot que “camina” por las montañas:




Artifex Terrain Loader (II)

9 11 2008

Ya tenemos video del terreno metido en nuestra aplicación :D

Siguiente paso Terrain+Newton



Artifex Terrain Loader

6 11 2008

Estos últimos días, he estado investigando el funcionamiento del cargador de terreno de Artifex en juegos que utilicen Ogre como motor y finalmente ha funcionado, aunque no todo lo bien que esperaba, ya que parece que hay algún problema que aun no he conseguido encontrar con nuestra aplicación, que hace que ciertos componentes del terreno que estamos intentando cargar no funcionen bien, hasta el punto de provocar un fallo en la aplicación, al final, después de una intensa y fructifera busqueda, he encontrado esos componentes y los he quitado temporalmente, con lo que al final ha “funcionado”.

Las 2 siguientes imágenes están tomadas de la demo de Artifex:


From Ogre
From Ogre

y ¡sorpresa! esta está tomada de nuestra aplicación :D


From Ogre



OgreNewt

16 10 2008

En los últimos días, he estado trasteando con sistemas de gestión de físicas “integrables” con Ogre, para la programación que es un motor gráfico para la programación de videojuegos, después de probar el ODE y comprobar que aquello que los tutoriales daban como muy sencillo, en la práctica no lo era y perder demasiado tiempo con él, decidimos apartarlo del camino y probar con otros, el siguiente fue el Bullet, que prometia bastante, ya que es el que está integrado en Blender para la śimulación de fluidos, softbodies y demás, el problema es que el wrapper para Ogre, no tiene NADA de documentación, aun así, decidí aventurarme y descubrí que a pesar de no tener documentación, echandole un ojo a los ejemplos es bastante fácil hacer cositas, pero claro, era demasiado bonito para quedarnos con este, y topamos con el movimiento de personajes, después de darle unas cuantas vueltas, no conseguí hacer nada decente, así que entre esto, y la falta de documentación, volvió a la lista de descartados. Por último, he estado probando el Newton, que a pesar de no ser libre, está bastante bien, además, tiene una comunidad bastante grande y activa de usuarios, por lo que solucionar los posibles problemas que puedan surgir es relativamente sencillo, después de unas cuantas pruebas, y algo de investigación, creo que nos vamos a quedar con este. Aquí dejo un pequeño ejemplo de las colisiones:



Extrayendo etiquetas XMP de las fotos digitales

31 08 2008

Aunque el título sea un poco “extraño”, con este post pretendo explicar un poco como se pueden extraer las etiquetas de metadatos XMP que algunos programas como por ejemplo f-spot introducen para clasificar las fotos.

Esto viene a cuento porque después de clasificar todas las fotos del viaje a NY, algo así como 1200, me he puesto a exportarlas a una carpeta creando una galería web, para hacer más comodo el verlas dentro de un tiempo, y aquí empiezan los problemas, para empezar, el exporter, peta, y para continuar, no te clasifica las fotos por etiquetas, lo cual es una putada bastante decente, así que me he dicho, ¿porque no te haces un programita para hacer esta función? Así que en ello estoy.

Para empezar he empezado con lo más complicado, es decir, como leer los metadatos que el f-spot escribe en las fotos, al final he dado con que los datos XMP, son simplemente un fichero XML embebido en el archivo JPG, el problema viene entonces en como encontrar que fragmento del fichero JPG es que el contiene el XML, pero para esta tarea tenemos al tito google, que trás un par de búsquedas con diferentes términos, un enlace a una página en la que se muestra un fragmento de código que hace precisamente lo que queremos y además, en JAVA xD

El código es el siguiente:
public class XMLExtractor {
public String getXMP(File f) throws IOException {
FileInputStream is = new FileInputStream(f);
int i = 0;
String result = null;
while ((i = is.read()) != -1)
if (i == 0xFF && is.read() == 0xE1) {
result = checkNamespace(is);
if (result != null)
break;
}
return result;
}
public static final String namespace = "http://ns.adobe.com/xap/1.0/";
private String checkNamespace(FileInputStream is) throws IOException {
String s = getSegment(is);
return (s.startsWith(namespace)) ? s.substring(29) : null;
}
private String getSegment(InputStream is) throws IOException {
DataInputStream dis = new DataInputStream(is);
byte[] buffer = new byte[dis.readShort() - 2];
dis.read(buffer);
return new String(buffer);
}
}

Lo único que he hecho aquí ha sido mover el método main a otra clase.

Ya tenemos el contenido del XML, ahora solo tenemos que parsearlo para convertirlo en un objeto del tipo “Document” y obtener los datos que nos interesan por medio de operaciones sobre el árbol DOM del XML, para ello, añadimos un nuevo método llamado getTag a la clase anterior. Este método contiene el siguiente código, aunque de momento es solo una aproximación a hacer lo que nos interesa, por lo que puede que cambie bastante en los próximos días :)


public String getTag(String xml) {
// Converts the XML string to document
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document document = null;
try {
DocumentBuilder builder = factory.newDocumentBuilder(); //el documento
document = builder.parse(new InputSource(new StringReader(xml))); //aqui le paso al Document
} catch(Exception e) {
e.printStackTrace();
}
document.toString();
document.setXmlVersion("1.0");
NodeList list = document.getElementsByTagName("rdf:li");
//NodeList list = document.getChildNodes();
Node node = (Node)list.item(0);
System.out.println(list.getLength()+" - "+node.getFirstChild().getNodeValue());
//XMPMetadata metadata = new XMPMetadata(document);
return node.getFirstChild().getNodeValue();
}

Bueno, de momento, esto es lo que hay, está probado y funciona, aunque como ya digo, este código es de prueba, por lo que solo nos devuelve el valor de la primera etiqueta que encuentra, en caso de que haya varias.

Cuando esté más avanzado el proyecto subiré el código para que se pueda descargar.



Primera batalla con wordpress

11 02 2008

Saludos terrícolas xD

Empezamos bien la andadura del blog. Después de poner el blog lo suficientemente bonito para mi gusto, me he puesto a instalar plugins hasta que esto se ha cansado, el problema en cuestión, es que parece ser que el php viene configurado por defecto para funcionar con 8MB de RAM, lo cual se queda un poco escaso para ciertas cosas, como por ejemplo, los plugins para estadísticas.

En mi caso, he instalado el Wassup, pero al darle a activar el plugin, la catástrofe se ha cernido sobre mi cabeza, y es que ha empezado a salirme el siguiente error:

Fatal error: Allowed memory size of 8388608 bytes exhausted

¿Que los bytes se han cansado? ruaro ruaro ruaro xD

Pues despues de algunas investigaciones, he llegado a la conclusión de que era la falta de memoria que comentaba antes, y también he encontrado la solución (por supuesto), es tan sencilla, como añadir la siguiente línea al principio del archivo principal del plugin, es decir, justo después del “<?php”:

ini_set(”memory_limit”,”24M”);

y voilá, arreglado :)

Nota: El valor 24 se puede cambiar por el que más nos convenga.