2008/02/28

Averiguar las coordenadas de Google Maps (2)

Hace algún tiempo (en Mayo del año pasado), publiqué un código javascript que te dice las coordenadas de Google Maps y algo más de información al ponerlo como favorito y pulsarlo mientras visitas el sitio de mapas de Google.

Reconozco que por aquel entonces no se me ocurrió mirar la API, pero Andrés Nieto redifunde un artículo de Lifehacker donde dan un método más sencillo que el que yo usé para sacar la coordenada del mapa. Aunque en el ejemplo no te da toda la información que te daba mi bookmarklet antiguo (a mi me parece útil saber la fecha/hora), combinar ambos códigos no es dificil.

2008/02/25

martillo

martillo

2008/02/14

Expresiones reguleras

El otro día un conocido tenía un problemilla con las expresiones regulares y me ofrecí a ayudar. Lo dejo por aquí para no olvidarlo (que es lo que tienen estas cosas, que uno se olvida de ellas frecuentemente).

Las expresiones regulares son un mecanismo la mar de potente para buscar texto. Es tanta la potencia que tienen que normalmente no usamos más que lo básico y al necesitar algo más avanzado podemos perdernos (por eso existen algunas herramientas para hacer y comprobar las expresiones regulares, aunque personalmente yo para eso uso el editor Vim). Como introducciones a las expresiones regulares hay en Internet a miles, no me extenderé en eso y paso al problema en cuestión, que consistía en buscar con PHP algunas agujas de texto en un pajar de HTML.

En el pajar se reconocen 3 tipos de agujas que nos interesa encontrar:

<!-- textoA textoB-->
<!-- textoA textoB str1-->
<!-- textoA textoB str1 str2-->

De ahí interesa diferenciar los 3 casos y extraer str1 y str2 en los 2 últimos casos. El código PHP con las expresiones regulares que había al principio era más o menos este (pongo sólo las funciones preg_*, que es lo interesante):

preg_match("/<!-- textoA textoB-->/", $pajar);
preg_match_all("/<!-- textoA textoB (.+)-->/", $pajar, $arr);
preg_match_all("/<!-- textoA textoB (.+) (.+)-->/", $pajar, $arr);

El problema aquí es que la segunda expresión encuentra las 2 últimas agujas, por lo que la tercera expresión no servía de nada (por que estaba en un else que dependía de la segunda). Una vez resuelto puede parecer evidente, pero a simple vista tampoco se me ocurrió a mi lo que estaba pasando.

El problema es el punto: el punto hace coincidir cualquier carácter, y el espacio en blanco también es un caracter, por lo tanto es normal que aparezcan casos de la tercera aguja cuando sólo nos interesa la segunda. La solución pasa por buscar cualquier carácter excepto el espacio que tiene que haber entre str1 y str2 (asumí que ni str1 ni str2 van a contener ningún espacio, pero es una presunción peligrosa). La forma de decir esto mediante expresiones regulares es mediante un conjunto de exclusión (que es igual que el resto de conjuntos pero el primer carácter debe ser un acento circunflejo '^'). Las expresiones quedan así:

preg_match("/<!-- textoA textoB-->/", $pajar);
preg_match_all("/<!-- textoA textoB ([^ ]+)-->/", $pajar, $arr);
preg_match_all("/<!-- textoA textoB ([^ ]+) ([^ ]+)-->/", $pajar, $arr);

Como he comentado antes, si por algún casual la str1 o la str2 que nos interesan tuviesen espacios, ni la segunda ni la tercera expresión regular encontrarían nada, lo que puede ser un problema; pero nada que no se arregle con unos cuantos modificadores en las expresiones :)

Y esto ha sido todo en la entrada de San Valentin (es lo que tiene amar a las expresiones regulares) XD

2008/02/08

Erepublik

Tengo 5 7 invitaciones para Erepublik para los 5 7 primeros que comenten pidiendolas. Si no sabes qué es Erepublik aún, lo explico a continuación.

Actualización: por algún motivo no me di cuenta y en lugar de 5 tengo 7 invitaciones.

Actualización (4-may-2008): ya no me quedan invitaciones.

Descripción corta y exagerada (con un poco de hype): Erepublik es un simulador de sociedad donde podrás tomar las riendas de la historia de tu propio país (o de algún otro). Consigue tu propia empresa, tu propio periódico, tu propio partido político, alcanza la presidencia del gobierno. Todo eso y más aquí, en Erepublik (que es gratis y sólo necesitas un navegador web).

Descripción larga y desaliñada (tan objetiva como me sea posible): Erepublik es un simulador de sociedad con un interfaz en HTML, donde cada uno de los participantes se inscribe como ciudadano de una sociedad simulada. Una de las gracias es que la simulación se hace sobre la misma base geográfica que el mundo real (eliges país y región de entre los países y regiones del mundo real).

Al ser una simulación (además de por estar en beta) significa que las cosas están bastante limitadas. En concreto en esta sociedad hay 6 áreas principales en las que los ciudadanos pueden actuar:

  • Sociedad: gestión de tu perfil y contactos con otros jugadores, además de localización geográfica;
  • Economía: gestión de tu empleo (tanto si buscas trabajo como si buscas trabajadores), gestión de tu empresa (si consigues montarla) y acceso a los mercados (alimentación, transporte, armas, vivienda, regalos, sanidad y cambio de moneda);
  • Política: gestión de la afiliación política que tengas y tu participación en la vida política de tu partido. Una vez te afilias a (o creas) un partido puedes optar a distintos puestos (congresista, alcalde de la región, o presidente del gobierno);
  • Militar: entrenamiento militar. De momento, esta sección está poco desarrollada y no hay más que ir a entrenar;
  • Prensa: gestión del periódico personal. Cada ciudadano tiene la posibilidad de crear un periódico personal con el que comunicarse con el resto de jugadores del país;
  • Foro: hay un subforo para cada uno de los 5 apartados anteriores además de otros 8 para cuestiones adicionales: contratos (que son públicos), noticias, ayuda, trucos, off-topic, problemas, sugerencias y reglas. En los foros se debe hablar inglés a ser posible.

Además, en 4 de esos sectores (sociedad, política, economía y militar) se obtienen puntos según las acciones realizadas o los hitos conseguidos. Algo a tener en cuenta es que a pesar de estos puntos, en Erepublik no se gana nada (salvo algún disgusto que otro, la gente es "asín").

De los 3 puntos que Erepublik destaca como atractivos: "Es gratis", "Sólo inteligencia humana" y "No consume tiempo". Me gustaría aclarar los dos últimos:

  • Sólo inteligencia humana: Esto significa que no hay inteligencias artificiales a las que enfrentarse como por ejemplo en el Civilization (que es lo más parecido a esto en juegos convencionales). Esto tiene sus pros y sus contras.
    • La ventaja de esto es que va a ser bastante difícil predecir el comportamiento del resto de jugadores, tal y como pasa en la vida real; aunque las limitaciones del simulador hacen que el rango de acciones sea bastante limitado siempre hay alguien creativo con alguna buena idea para llevar a cabo ligeramente al margen de la capacidad del sistema.
    • Y el inconveniente es que, tal y como pasa en la vida real, algunas personas son muy gilipollas y el simulador no tiene mecanismos para compensar esto (lo peor sin duda son los gilipollas bienintencionados por que se aferran en que la intención es buena y no aceptan que les digas que estan haciendo el gilipollas). En fin como la vida misma, pero a través de un navegador web.
  • No consume tiempo: Y UNA PUTA MIERDA (perdón por el lenguaje soez... o no). En realidad puedes elegir entre jugar a "no consume tiempo" o jugar a "me dejo la mitad de la vida aquí":
    • Para que no te consuma tiempo tienes que hacer lo básico: te das de alta como militar, y vas a entrenar todos los días (entrenar es un click en un botón), luego consigues un trabajo y vas a trabajar todos los días (trabajar es un click en un botón), y unas 2 veces al mes votas: al presidente del gobierno y al alcalde de tu región (que esta vez es algo más de un click, pero sólo pasa 2 veces al mes).
    • Para perder media vida lo tienes fácil, ya que cualquier intento de involucrarse más te lleva a una espiral de interacción social. Y aunque el entorno sea simulado, la interacción no lo es: no hay inteligencias artificiales, las personas son personas y la interacción es tan real como reunirse a pegar gritos en el bar de la esquina sobre si cetapé es vulcaniano o si rajoy es un subnormal profundo. A partir de crear un periódico o de leer los periódicos de los demás empiezas a involucrarte en la vida política del simulador y, como la gente se queja por todo, a nada que no se le atiendan las quejas ya tienes la agenda del día-mes-loquesea lleno (de insultos, de exageraciones, de dermatitis, etc...). Ya lo he dicho antes: como la vida misma, oigan.

En fin, si has leído todo esto y aún tienes ganas de darte de alta (reconozco que no soy un buen publicista) déjame un comentario pidiendo la invitación (y recuerda que de momento sólo tengo 5 7).