Showing posts with label bases de datos. Show all posts
Showing posts with label bases de datos. Show all posts

Monday, August 27, 2018

Gigachess: bases de datos y búsquedas regulares



El software que he escrito para parte del desarrollo de mi tesis de doctorado no es lo rápido que quisiera y en ocasiones me he puesto a pensar si es el  enfoque correcto. La idea va así: de mi base de partidas de ajedrez, estoy tomando 1 millón de ellas y las estoy procesando de forma que cada una contenga dos campos: el encabezado de la partida: quién contra quién jugó y en qué torneo (incluyendo fecha). Los demás datos como rating no me interesan realmente. El segundo campo contiene una imagen de cada posición que se dio en cada partida. La posición la represento como una línea de caracteres Forsyth, que es un formato en modo texto para representar posiciones de ajedrez. Por ejemplo, la posición:



se representa como: "4t1r1/p1p2pp1/1d1p3p/1P3P2/1P6 /2c1D3/PA4PP/4T1R1/". La posición en modo texto se representa leyendo el tablero de izquierda a derecha y de arriba a abajo. Las piezas blancas se representan con sus iniciales en mayúsculas y las negras con minúsculas. Así, "4t1r1" significa que en la octava fila (la primera del negro), hay 4 casillas vacías, una torre negra, otra casilla vacía, un rey negro y una casilla vacía más. Las diagonales "/" simplemente sirven para denotar que pasamos a la siguiente fila, pero pueden omitirse. Si se omiten tengo exactamente 64 letras o números máximo. Obviamente puedo poner "4t1r1" como "1111t1r1", pero poniendo la cifra de casillas vacías me ahorro espacios.

Imaginemos que tenemos ya una base de datos armada así y que quiero buscar si en alguna posición se tuvo un caballo  blanco en f6 y un rey negro en g8. Mi busqueda buscaría esta posición: "6r1/8/5C2/8/8/8/8/8". Evidentemente ignoro (o debería ignorar) si hay otras piezas en donde yo estoy diciendo que hay casillas vacías. Debo -pienso- definir si es vacía o no con alg{un símbolo en la búsqueda. Se me ocurre entonces que si busco que exista un caballo blanco en f6 y cualquier pieza en g8, debería poder buscar algo así: "6?1/*/5C??/...", donde el símbolo "?" es un comodín que sustituye al símbolo "?" por cualquier pieza o casilla vacía en el tablero. Esto, de hecho, no es un invento mío, sino que se ha definido hace muchos años en cómputo. Hablamos de las búsquedas regulares, las cuales buscan "patrones" en cadenas de caracteres. Es un sistema que es muy versátil y pienso que podría ser muy útil en lo que estoy trabajando.

Mi problema básicamente es que si proceso un millón de partidas tendré aproximadamente 80 millones de posiciones. ¿Cómo puedo buscar sobre una base de datos con expresiones regulares que sea muy rápido? La idea de generar todas las posiciones que es las búsquedas sean muy rápidas. Por ejemplo, Chessbase permite buscar posiciones, pero el sistema lee cada partida y hace la búsqueda sobre la base de datos de referencia que se le dé y esto puede llevarle minutos. No es mucho, lo sé, pero pienso que mi enfoque podría hacer que con búsquedas de expresiones regulares, en mucho menos tiempo que Chessbase, debería saber en qué partida ocurrió una posición determinada.

Hay que decir que tampoco etoy pidiendo algo imposible, porque por ejemplo, si se le piude a Google que busque "regular search", entrega el siguiente resultado:

Cerca de 1,260,000,000 resultados (0.45 segundos) 

Es decir, en su gigantesca base de datos halla 1,260 millones de resultados en menos de medio segundo. Sí, sé que Google usa cómputo distribuido y que tiene montones de algoritmos refinados para sus complejas bases de datos, por lo que me queda claro que lo que quiero hacer tampoco pretende ser algo del otro mundo.

Hay un sistema RegEx, que permite hacer más fácil el asunto de definir las búsquedas de expresiones regulares y hay muchas aplicaciones que permiten crear estas búsquedas casi visualmente.


Entiendo que Oracle permite hacer búsquedas de expresiones regulares en sus bases de datos, pero no tengo más información y no tengo idea de cómo hacerlo en esa plataforma de base de datos. ¿Alguna idea de mis cuatro lectores?

Friday, July 08, 2016

Los problemas de hacer bases de datos


Recientemente se me encomendó la tarea de llevar el rating de la Federación Nacional de Ajedrez (FENAMAC), la cual tiene ya unos 40,000 socios registrados, aproximadamente. Esta lista es la medición numérica que tienen los jugadores, equivalente a su nivel ajedrecístico. La idea es que las asociaciones de cada estado de este país manden a la FENAMAC los resultados de sus torneos (vía un archivo específico hecho en alguno de los programas para generar torneos de ajedrez, por ejemplo, Swiss Manager), y entonces mi tarea es calcular el desempeño de cada jugador de acuerdo a su rating antes del torneo, los puntos que realizó y el promedio de nivel de rating de sus oponentes. De acuerdo a las fórmulas de Elo se sabe entonces si el jugador subió o bajo puntos en su rating, también llamado "Elo".

Pues bien, me puse a trabajar usando un manejador de bases de datos gratuito llamado Absolute Database, el cual tiene muchas virtudes comparado con el sistema de bases de datos nativo de Delphi (BDE), el cual, por ejemplo, tiene que instalarse aparte y esto causa una dificultad extra, porque portar el programa a otra máquina implica primero instalar BDE en la otra computadora y entonces poder cargar el programa del cálculo del rating. Absolute Database -para las necesidades del problema- hace la tarea magníficamente bien y además, todo está encapsulado en el mismo programa ejecutable que se genera en Delphi. Es decir, tengo el manejador de bases de datos y mi código en el mismo archivo, cosa que abrevia la problemática, pues no hay que instalar nada extra.

Pero fuera de mi código, hallé que la base de jugadores está llena de problemas, todos ellos comunes a todas las bases de datos. Por ejemplo, los nombres de los jugadores están escritos con mayúsculas en ocasiones, o con comas después de los apellidos y los nombres, o bien, no tienen acentos, o están incluso mal escritos. Y entonces la tarea inicial -antes de programar nada- es tratar de limpiar la base de datos, la de los jugadores, para que después el programa del cálculo del rating encuentre a los jugadores en la base de datos y pueda actualizarse de acuerdo a esto.

Porque esto es lo crítico: si la base de datos no está limpia, si tiene nombres escritos de diferentes formas, entonces lo que se tiene es una problemática que a la larga no es tan fácil de resolver, al menos automáticamente, y obliga al programador (o usuario del programa, que en este caso soy yo mismo), a tener que ver y revisar manualmente cada caso de lo que pasa cuando se calcula el rating de algún jugador. Considerando esto nada más, me di cuenta que las bases de datos son solución de muchas dificultades, pero para ello se necesita que la información esté bien dispuesta, limpia, en un formato -digamos- estándar, que pueda ser manejado fácilmente.

Después de todo esto de lo que he hablado, ya tengo un programa que permite el cálculo del rating automático cuando se me entregan los archivos de Swiss Master. Tiene aún algunos problemillas pero poco a poco se irán resolviendo. Los "bugs", desafortunadamente, aparecen en el peor de los momentos y no cuando uno espera algo extraño.

Monday, March 05, 2012

Para ganar en ajedrez


No, no voy a hablar del libro de Guil Russek, de editorial Selector, el cual se llama precisamente "Para ganar en ajedrez", sino que hablaré de lo que habría que hacer para mejorar en su nivel de juego. Hoy en día el ajedrecista, desde el principiante hasta el consagrado, tiene acceso a mucha información, a demasiada -diría yo. Hay bases de partidas, que son como cinco millones de ellas o más. AHay discos compactos con monografías de aperturas, de finales, de combinaciones. Hay sitios web que muestran las útlimas partidas de los más importantes torneos. Se pueden incluso seguir en vivo. Hay desde luego, libros que pueden conseguirse incluso de manera muy legal en Internet o bien, comprarlos en los Estados Unidos y esperar unos días para que lleguen a México. En fin, que la cantidad de información ajedrecística actualmente es prácticamente inacabable.

Por ello, hay que pensar muy bien en qué información comprar o usar porque con la escasez de tiempo, hay que ser muy prácticos y si se quiere progresar, ganar en ajedrez, hay que saber cómo aprovechar el tiempo al máximo. Así pues, van algunas recomendaciones para quien de verdad quiera mejorar y por qué no, ganar en ajedrez:

  1. Tiempo: Por una parte, considere que para progresar hay que estudiar. Alguien le preguntó a Kasparov lo siguiente: ¿Cómo puedo progresar en ajedrez si no tengo tiempo? A lo que el excampeón del mundo le respondió: "¿cómo quiere mejorar si no tiene tiempo de estudiar?". Y la respuesta lo dice todo: si quiere mejorar tiene que buscar tiempo para tomar los trebejos y sentarse a estudiar. Por ósmosis, créame, no mejorará en su nivel de juego.
  2. Disciplina y método: No basta con tener tiempo libre, sino además, hay que aprovecharlo y sentarse con seriedad a estudiar. Ponga su tablero y analice partidas, vea posiciones del medio juego, resuelva combinaciones, etc., pero con disciplina y métodos. Si está aprendiendo a lidiar con una variante de la defensa siciliana, pues no se cxanse a la tercera página de variantes. Pregúntese por qué el autor de la monografía dice que una jugada es buena o mala. Intente discernir por usted mismo qué planes tiene cada bando. Hay que hacer un trabajo que a veces se antoja monumental, pero que es la única manera de aprender y progresar. Si se toma el estudio a la ligera, posiblemente pase un buen rato, pero los beneficios de un mejor nivel ajedrecístico en cierto tiempo, no ocurrirán.
  3. Salir de la zona de comfort. Si quiere mejorar tiene que esforzarse. Los amantes del ejercicio físico dicen: "no pain, no gain", algo así como "si no duele, no sirve". Esto significa que para mejorar en ajedrez no basta con ver una partida por aquí, un final por allá, una combinación simpática, etc. No, se necesita esforzarse para tratar de descubrir por uno mismo las ventajas y desventajas de las jugadas que se están analizando. Ningún jugador, inclusive Kasparov o Fischer, eran proclives a la flojera, a creerle al comentarista sobre el valor de un a jugada, etc. Al contrario, dudaban de todo y por ello mejoraron aunque cabe decirlo, esos jugadores son ejemplos de constancia, de esfuerzo, de trabajo.
  4. Estudie deliberadamente. El estudio deliberado es precisamente el estudio que se hace para hacerse de una nueva habilidad, para mejorar específicamente en algo. De nuevo, siguiendo la analogía del gimnasio: si quiere desarrollar los bíceps tendrá que hacer ejercicios que definitivamente incrementen la masa muscular que se quiere desarrollar. En ajedrez pasa lo mismo: se necesita estudiar con sistema, deliberadamente un tema, para que éste se convierta en un trabajo constante y a la larga veamos los frutos del estudio. Por ejemplo, si desea mejorar su nivel combinatorio, debe ver muchos ejercicios de táctica e intentar resolverlos. En caso de no resolver uno, no vea la solución de inmediato, márquelo y regrese al ejercicio más tarde. Esfuércese por hallar la solución aunque le lleve más tiempo. Si no hay esfuerzo, si no trabaja para eliminar sus defectos, no habrá mejora en su nivel de juego.
  5. Juegue partidas de entrenamiento con amigos o contra la computadora desde la posición que está estudiando. Intente jugar partidas contra reloj, simulando las condiciones del torneo. No importa si gana o no (probablemente casi nunca le ganará a la computadora). Lo que interesa es ver si su entendimiento del tablero ha mejorado, lo cual puede ocurrir si trabaja, repito, con constancia.
  6. Juegue en torneos. Si no juega no puede saber si ha progresado. Al terminar la partida -si se puede- analícela con su rival. Tome nota de lo que su contrario vio y que usted quizás despreció. Una vez terminada la competencia, ponga a su motor de ajedrez favorito y pídale que analice las partida. Hallará muchísimas cosas. Kasparov decía que no hay partida perfecta, incluso habiendo ganado se pueden encontrar todo género de problemas que se pasaron por alto.

Si hace todo esto probablemente pueda mejorar y jugar un ajedrez más sólido. Esto, créame, no lo logrará en uno o dos meses. En ocasiones puede llevar un año para darse cuenta de que entiende más de ajedrez, que juega mejor y por ende, hallará que el esfuerzo valió la pena.

Sin embargo, debe quedarle claro también que en este juego no hay garantías. Observe a los ajedrecistas de elite. No hacen otra cosa que jugar al máximo nivel y de pronto salen de ese reducido grupo de grandes jugadores por razones difíciles de explicar. Algo pasa y empiezan a sufrir descalabros en su nivel de juego. Topalov o Leko son clásicos en este sentido. El húngaro Peter Leko por muchos años estuvo entre los 10 mejores del mundo y ahora no pinta como antes en el escalafón mundial. Topalov, el excampeón del mundo 2005 de pronto algo le pasó y no ha podido recuperar su anterior forma. De ganar los torneos con muchos puntos de ventaja sobre sus rivales, ahora queda relegado a la parte baja de la tabla de las competencias. Eso quizás habla de lo rudo que es el ajedrez de torneo y lo difícil que es mantenerse vigente jugando al mejor nivel. En esa proporción, en la medida que juegue y se dedique al juego ciencia, hallará satisfacciones como vencer a un archienemigo local, o ganar uno que otro torneo del club donde participa. Sin embargo, puede que nada salga bien y que su ajedrez se quede estancado por alguna razón. Si este es el caso, habrá que reconsiderar qué está haciendo para ver por qué no progresa. Pero no se desanime. Afortunadamente uno mejora cuando verdaderamente estudia, aunque haya por ahí uno que otro descalabro.

Friday, May 13, 2011

Respaldar el blog

Hoy me enteré que este blog estaba caído. Me lo informó vía Facebook Javier Rivera. De inmediato busqué las posibles razones de esto y hallé que pude entrar al blog pero las entradas después del 11 de mayo habían desaparecido. Quise entrar a editar entradas, a ver si éstas estaban en el listado correspondiente pero no pude. Un mensaje de "Blogger" me indicó que estaban en mantenimiento y que habían eliminado las entradas después del día 11 de mayo, pero que no había de qué preocuparse, porque serían restauradas en su momento.

Todo el día de hoy he esperado que las entradas perdidas reaparezcan porque no tengo respaldo de las mismas. Eso me hace pensar ahora en lo frágil que puede ser la información. Confié ciegamente en Blogger (que es de Google), y siempre pensé que mi información estaría segura... Y quizás la está, pero me causa cierta frustración no hallar artículos que ya escribí y que francamente no sé si pudiese re-escribir para no perderlos, al menos en su esencia.

Acabo de ver el blog Blogger Buzz, el cual da cuenta de lo que está pasando en el sistema. He aquí el mensaje último que publicaron los responsables de este sistema de blogs:

Blogger restablecido

Qué día frustrante. Lamentamos mucho que no hayan podido publicar entradas en Blogger durante las últimas 20.5 horas. Ya casi estamos volviendo a la normalidad - pueden publicar nuevamente y en las próximas horas los blogsposts y comentarios que fueron removidos temporalmente serán restablecidos. Queremos agradecer su paciencia mientras resolvemos esta situación. Nosotros mismos usamos Blogger para nuestros blogs así que comprendemos su frustración.

Esto fue lo que sucedió: durante el mantenimiento programado para el miércoles a la noche experimentamos una corrupción de datos que afectó el comportamiento de Blogger. Desde ese momento, los bloggers y lectores de blogs pudieron haber experimentado una variedad de anomalías, incluyendo disrupciones intermitentes del servicio, entradas que desaparecieron y blogs que redireccionaron a blogs no buscados o a páginas de error. Una pequeña porción de usuarios de Blogger (estimamos que el 0.16%) pudieron encontrar problemas adicionales específicos a sus cuentas. Ayer decidimos volver Blogger al estado previo al mantenimiento y nuestro servicio estuvo disponible a modo sólo de lectura mientras trabajábamos para reestablecer todo el contenido: éste fue el motivo por el que no pudieron publicar nuevas entradas. Volvimos a la versión de Blogger del miércoles 11 de mayo por lo que las entradas publicadas desde entonces fueron removidas temporalmente. Ahora, estamos trabajando para recuperar estas entradas.

De nuevo, queremos expresar que lamentamos mucho las consecuencias que esto tuvo para nuestros autores y lectores. Trabajamos mucho para asegurarnos que Blogger esté siempre disponible para compartir sus ideas y opiniones con el mundo y haremos lo mejor posible para prevenir que esto vuelva a suceder.


Publicado por Eddie Kessler, Tech Lead / Manager, Blogger


Por lo tanto, asumo que Blogger, en algún momento, reestablecerá las entradas perdidas y todo regresará a la normalidad. Sin embargo, me queda claro que debo hacer respaldos hasta de Blogger.

Wednesday, April 27, 2011

Bases de datos de ajedrez para el iPod/iPhone/iPad


Hace más de un año me compre un iPod Touch. Es como la versión barata del iPhone, porque no trae la parte de la telefonía. Aún así, me parece un dispositivo móvil costoso, porque por el precio del mismo uno bien podría comprarse el último XBox con Kinect incluido. Desde luego que son aparatos diferentes, pero valga la comparación de precios para darse cuenta que el iPod Touch, aunque muy simpático juguete, no deja de ser costoso.

En fin, la cuestión es que me hice de este juguete porque mi Palm, en donde tenía mis programas de ajedrez, simplemente ya dio de sí. Tuve muchas dificultades con la batería y aunque se la cambié un par de veces, evidentemente ya no hubo manera de que regresara a un uso en donde la pila me durara al menos un par de horas. Vaya, la pila nueva en la Palm se descargaba -si tenía suerte- en unos diez minutos máximo. Parte de mis comentarios al respecto aquí.

La cuestión es que el iPod Touch tiene acceso a la tienda App de aplicaciones de Apple, la cual está llena de programas para el aficionado al ajedrez. La culpa de que me haya comprado el iPod Touch es en parte de Javier Rivera, JR!, porque él me mandaba imágenes de los programas de ajedrez para este dispositivo y francamente no me pude resistir a lo bonito, porque como ahora dicen: "¡qué bonito es lo bonito!".

en estos meses me compré algunos programas de ajedrez para el iPod Touch, en el que el Hiarcs me parece el más fuerte. Me costó unos 100 pesos y me parece una ganga para lo que hace. Vaya, es un gran maestro de bolsillo que juega unos 2650 sin temor a equivocarme.

Pero aparte de los programas de ajedrez, me hice de varias bases de datos, que contienen muchas partidas de ajedrez. He aquí mis reflexiones sobre tres de los programas más importantes para el iPod Touch/iPad/iPhone, que contienen partidas y que sirven para ver encuentros ajedrecísticos, así como para buscar las mejores producciones de los jugadores de ajedrez más connotados.

La primera base de datos que adquirí, que me costó unos 50 pesos, es la Chess DataBase for the iPhone. Tiene alrededor de medio millón de partidas. Sí, medio millón, lo cual no es poco. Y aunque las partidas parecen estar correctamente pasadas a la base de datos, los encabezados de las mismas, particularmente en lo que se refiere a los sitios en donde se jugaron los encuentros, son equivocados. Por ejemplo, busqué mis propias partidas y hallé 6 resultados. Todos del torneo Carlos Torre, que se juega en Mérida a fines de año. Está mi partida con el GM Urday, con Bolio, con Canales, con el MI Calderín y con Bruno Villanueva. Sin embargo, hay una partida que se me adjudica pero que no jugué yo, contra el GM Kurajica, en un torneo abierto en 1993 en Alemania. Además, las partidas que sí jugué se consignan no en el Carlos Torre, sino en un torneo ¡en Singapur!

Quizás es un error menor, pero desde luego suena extraño que los datos de las partidas sean tan incorrectos. Eso no me gusta nada de esta base de datos.

Por otra parte, está la ChessDB, que cuesta unos 40 pesos, y que en lugar de ser una base de datos en donde puedo buscar por jugador, torneo, etc, (como la anterior reseñada), aquí lo que tengo son bases de partidas en formato PGN y no parece haber una manera de hacer búsquedas fácilmente. No obstante, tiene la ventaja de poder crear bases de datos de aperturas, finales, jugadores, etc. De hecho, tiene ya incluidas muchas bases de datos: 773 mates en 1-4 jugadas, Maestros del tablero, lecciones del medio juego, etc. Se pueden bajar bases de datos (en PGN) de partidas desde alguna página en la red que uno deseé.

Otra virtud es que se pueden seguir las partidas con comentarios, muchas veces concisos, pero que permiten entender muchas veces qué está pasando en el tablero. En alguna medida, este programa, en conjunto con la base de datos antes reseñada, se hacen mutua compañía y son entre los dos un producto aceptable. Si me dieran a elegir, me quedaría sin embargo, con ChessDB.

Una tercera base de datos es TWIC Files, que es una recopilación de las partidas publicadas por la página de Mark Crowther, The Week in Chess (TWIC). Ahí hallé las mismas partidas mías que hay en la Chess Database for iPhone, pero con la salvedad que los encabezados están correctos. De acuerdo a alguna otra reseña, el problema con esta aplicación es que parece que hay partidas duplicadas. Sin embargo, yo no lo he notado. Como sea, la mejor ventaja de este aplicación es que es gratuita, aunque a decir de otros usuarios, hay algunas cosas que pulir para considerarla una aplicación más que interesante.

Finalmente, la última base de datos de partidas a reseñar es la de Chessbase, la cual acaba de publicarse y en donde los alemanes hay hecho una buena campaña de promoción para que los usuarios de estos iCosas se hagan de ella.

Considerando que Chessbase es el lider de bases de partidas de ajedrez, y que sus productos son notables, rápidamente me hice de este programa para el iPod, que costó 50 pesos. Sin embargo, estoy por lo pronto decepcionado, porque la app parece tardar mucho en cargar y al final parece que termina y me regresa al menú de las apps que tengo, Al intentar de nuevo, a veces me manda al programa, pero otras veces no obtengo resultados.

Así, por el momento, no he podido usar siquiera las funciones del programa. Le pedí me buscara partidas mías. No halló ninguna y el programa terminó abruptamente. Quiero creer que el software está aún en una fase experimental, porque llama la atención que el sistema no funcione como hubiese esperado, considerando la calidad que los alemanes le imprimen a sus productos. Espero pronto ver alguna actualización al respecto. Habrá que investigar qué está pasando.

Pero independientemente de todo, me queda claro que el hacerse de un iPod Touch (yo tengo la versión más chica, de 8 gigas), es casi una obligación a todo ajedrecista que quiera mejorar en su nivel de juego. En alguna otra ocasión hablaré de los programas de ajedrez, tanto los comerciales como los gratuitos, y buscaré poner una tabla comparativa. En el iPod hay mucho para el ajedrez y la realidad es que aunque no todos los contenidos y aplicaciones tienen todo lo que uno quisiera, no por ello son desdeñables. La mayoría son apps que valen la pena.