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).

2008/01/25

Buen xxxx, mal xxxx

Si un hombre bondadoso pero cojo siempre es mejor que un hombre no-bondadoso pero con todos los miembros, entonces un programa sin la característica X pero con la bondad de ser libre, siempre debe ser mejor que un programa con cualquier número de características pero sin la bondad de ser libre.

Y escribo esto desde un mal SO (según la definición que acabo de dar). Pero oye, nadie impide a un camionero promover las bicis por que contaminan menos :-P

PD: No cabe en twitter por poco

2008/01/24

Jack-o'-lantern

Jack'o'lantern de mandarina

¡De mandarina! (ph34r my t4ng3r1n3 p33l1ng sk1llz!!1!! XD)

2008/01/15

Felices fechas... ó_Ò ¿huh?

Bueno, iba a esperar a febrero para asegurarme que soy el último blogger en escribir el primer post de 2008 felicitando las fechas, pero no he podido esperar tanto.

diciembre 2007 enero 2008

Pues eso, ¡Felices Fechas!, y que se os dé bien el próximo año 2008 que acabamos de estrenar

2007/12/29

El waterboarding no es un deporte acuático

Leo en Kottke sobre waterboarding, que a pesar de tener un nombre en inglés de deporte acuático molón, en español sería lo que se conoce como Tortura del agua, o tortura de la toca, que ya son nombres más respetables y, sobre todo, descriptivos.

Al parecer es un tema de debate entre los norteamericanos (artículo en el NYTimes sobre el tema), pues se debate si la tortura del agua es un método apropiado de interrogatorio o no, ya que por lo visto, desde fuera no pinta tan grave, y están en proceso de regulación de los métodos de interrogatorio.

El objetivo de la tortura del agua es simular un ahogamiento sin el ahogamiento real ni la inhalación de líquido en los pulmones. Para conseguir esto se fuerza al sujeto recostándolo sobre un plano inclinado con su cabeza por debajo del nivel de sus pies, y entonces se vierte agua sobre su cara (siempre manteniendo los pulmones por encima del "nivel del agua"). Esto simula el ahogamiento y causa pánico

Esta descripción la da el usuario Scylla en el foro de The Straight Dope en el artículo donde narra su experiencia aplicándose a si mismo la tortura del agua para comprobar si es o no un método de interrogatorio válido.

Como el mensaje me ha parecido extraordinariamente interesante lo he traducido, colgándolo en mi espacio de google pages donde pongo estas cosas tan largas: ¡Me autotorturo! (ya digo que en el original inglés, el título no parece tan masoquista).

2007/12/28

Bueno, el artículo del día

La SGAE es una organización de gente bellísima y maravillosa que vela por los intereses de los artistas y que los protege de la ignorancia generalizada del común de los mortales que, como todo el mundo sabe, es idiota y no tiene conciencia de lo que le conviene.

Cualquier otra cosa que añada sería emperifollar esto demasiado, así es suficiente, aquí termina el artículo del dia de hoy.

2007/12/27

Activa la corrección de palabras en MacVim

Descubrí la versión definitiva de Vim para OS X gracias a una entrada en simfoony que hablaba de él y me enamoré por completo (antes usaba la versión de macvim.org, que empezaba a quedarse algo desfasada, sobre todo después de que Jobs anunciara en una de las últimas 'misas' que mejor dejase todo el mundo de desarrollar aplicaciones con carbon).

Como casi todo el software en general, ningún programa está completo ni libre de errores, y en particular en esta versión no se incluyen los diccionarios para la corrección de palabras en español (en inglés sí que vienen), y cuando parece que se los va a descargar, hace como que se los va a descargar, pero no descarga nada y escupe un error.

Nada es imposible de arreglar. Para añadir el español (también vale para cualquier otro idioma) como lenguaje de corrección de palabras, abre este ftp de la universidad de oviedo con Firefox por ejemplo y con la búsqueda de Firefox (FRUTA+f en el mac) busca "es." (sin las comillas y con el punto del final), luego pulsa CTRL+a, o la opción para resaltar todo en la barra de búsqueda, así puedes ver fácilmente los archivos interesantes [1]. Descárgate todo lo que aparezca resaltado; cuando lo miré yo eran 5 archivos (2 utf-8, 2 latin1, y un readme).

El siguiente paso es abrir un terminal y ejecutar la orden "open .vim" (no te olvides del punto ni del espacio). En la ventana del finder que se abrirá, creas una carpeta y la nombras "spell", y metes dentro los archivos que habías descargado antes.

Ahora, cada vez que quieras activar el español para un texto sólo tienes que invocar la orden ":set spell spelllang=es", o si lo quieres siempre, modificar el archivo .gvimrc (para los archivos txt, por ejemplo):

au BufNewFile,BufRead *.txt set spell spelllang=es

Y ya está :p

[1] Para catalán busca "ca.", y para gallego "gl.". En ese FTP no tienen los diccionarios para euskera, si los encuentras en algún otro sitio, el método vendría a ser el mismo.

PD: No lo llamo corrección ortográfica por que no corrige la ortografía/gramática, sólo comprueba si las palabras están en el diccionario. La ortografía es algo más que eso. :p :p

PPD: No se me olvide agradecer a esta entrada de 2006 sobre corrección ortográfica en castellano para vim 7 en el blog de iRamos que me ha aclarado algunas dudas antes incluso de tenerlas :D.

2007/12/22

¿mejor medio o entero?

Manzana mordida con medio gusano sangrando

2007/12/21

Extensión Personas para Firefox

Creo que via anieto2k encontré Personas for firefox.

Según comentan, es una extensión que permite, de manera ligera y sencilla, cambiar el aspecto de Firefox (como los temas pero más ligero, rápido y etc, etc). Las ideas sobre las que parte Personas y la funcionalidad que aporta ya las traduce anieto2k en su blog, así que no las repetiré yo aquí, lo que sí voy a hacer es comentar lo que he probado la extensión.

Por cierto, me voy a tomar la libertad de usar la palabra camisa como traducción de theme/skin/etc... usar piel me parece demasiado estático (ningún animal ser humano cambia el aspecto de la piel con la que nace --las excepciones tipo bronceados y pintura corporal no cuentan :p --), y tema demasiado abstracto y bastante fuera de tiesto (un navegador no es una conversación para ir cambiando de tema, por ejemplo).

  • Para empezar es un prototipo, lo que implica estado de desarrollo, como prácticamente todo el software actual, pero de momento no me he encontrado con ningún problema usándolo (aunque está en inglés, y eso puede ser un problema para algunos).
  • Cambiar la camisa de manera instantánea sin tener que reiniciar el navegador es genial :)
  • Como comentan en las ideas principales, un navegador requiere conexión a internet, y Personas usa la red para bajar los archivos necesarios para cambiar de camisa, por lo que no funcionará si no tienes conexión (mantienes la camisa que tuvieras antes de perder la conexión, pero no puedes cambiar a otras camisas).
  • De momento no se aplica a toda la interfaz de Firefox, por ejemplo la barra lateral de historial, y el panel de ScribeFire en el que escribo esto no están afectados por Personas.
  • Algunas de las camisas son demasiado claras o demasiado oscuras en algunas zonas y disminuye la legibilidad de algunos textos (por ejemplo el texto de los favoritos).
  • Con la moda de las webs claritas, si eliges una camisa oscura, da la sensación de ver la web en cinemascope XD
  • Como la interfaz de OS X es principalmente clara, las camisas oscuras no quedan demasiado bien.

Como valoración general después de usarla me parece una idea estupenda infinitamente más cómoda que los temas actuales.

Y para terminar, una selección que he hecho de las camisas actualmente disponibles, mientras probaba Personas. Estas son las camisas que a mi juicio no tienen (o que lo tienen de manera mínima e irrelevante) el problema de los textos que comento antes (que viene a ser el único problema realmente molesto para mi, puede que tu veas otros problemas :-) ):

  • All -> Firefox -> Viva Firefox
  • All -> Holidays -> Snowflakes
  • All -> Holidays -> Winter
  • All -> Geometric -> Plaid
  • All -> Geometric -> Diagonal Lines
  • All -> Geometric -> Dots
  • All -> Other -> Blue Spheres
  • All -> Other -> Green Wave
  • All -> Other -> Suede
  • All -> Other -> Paper
  • All -> Other -> Groovy Hearts
  • All -> Other -> Groovy Orange

Especialmente recomendadas para maqueros, "Viva Firefox" y "Paper", aunque las de Geometric también quedan majas :)