Wednesday, July 01, 2020

Murió el Maestro Internacional Jorge Aldrete




















Esta es una de esas noticias que a nadie le gusta dar. Nuestro amigo, el ingeniero Jorge Aldrete, Maestro Internacional de Ajedrez y Gran Maestro por correspondencia, falleció en la madrugada de hoy después de tener un sinfín de complicaciones provocadas por el covid-19.

Jorge Aldrete tuvo una carrera ajedrecística espléndida. Fue uno de los mejores jugadores de ajedrez de nuestro país. Ganó -si la memoria no me falla- un Campeonato Nacional al menos (uno de los abiertos que se jugó en Xalapa, Veracruz), y por años fue uno de los jugadores más animosos del Club Pomona, que abría martes y viernes, y que formó a muchísimos ajedrecistas.



Se hizo Maestro Internacional en 1999 aunque ya tenía la fuerza ajedrecística desde antes. En mi opinión, el Maestro Aldrete era un talento que hizo mucho más de lo factible con los recursos que había en su época. Vamos, la información de ajedrez llegaba a cuentagotas y Jorge mostró siempre un nivel de juego que simplemente exhibía su talento natural.

Como pasa con muchos ajedrecistas, con el paso de los años la energía y motivación empiezan a decrecer, pero en esa pasión que hace que el ajedrez sea obsesivo, Jorge se involucró en la modalidad por correspondencia. Y entonces mandaba sus cartas a sus rivales. Cada sábado revisamos muchas de sus partidas, incluso una contra el que fuese campeón del mundo, que a decir del mismo Jorge, le sorprendía porque le contestaba casi sin pensar (cuando ya no se mandaban cartas sino correos electrónicos).

En el ajedrez por correspondencia logró el título de gran maestro, cosa nada fácil y menos cuando ya hay tanta ayuda de información y "engines" que descubren una miriada de combinaciones por demás inhumanas.

Jorge Aldrete fue también presidente de la Federación Nacional de Ajedrez, y combinaba notablemente esta actividad con su profesión y con su pasión por jugar torneos. Fue de esas personas que hacía de todo y lo hacía bien.


Con Jorge debo haber jugado tres partidas en toda mi vida. Empaté una y perdí dos. He aquí la que me ganó en un torneo en el Club Israelita:

Manuel López - Jorge Aldrete
Club Israelita (México) 1977

1. e4 d5 2. exd5 Nf6 3. d4 Nxd5 4. c4 Nf6 5. Nc3 c6 6. Be3 Bg4 7. Qb3 Qc7 8. f3 Bf5 9. Nge2 Nbd7 10. Rd1 e6 11. g4 Bg6 12. g5? (12. Bf4 Qb6 =) 12... Ng8 13. Ng3 Bd6 14. Nge4 Bxh2 



15. Rxh2?! 16 Qxh2 16. c5?? (16. Qxb7 Rd8 17. Rd2 Qb8 18. Qxc6=) 16... b5 17. Nd6+ Kf8 18. Nce4 Bxe4? (18... Ne7con ventaja ganadora) 19. fxe4 Qg3+ 20. Kd2 h6 21. Be2 (21. Bxb5 cxb5? 22. Rf1 Qh2+ 23. Rf2 Qh5 24. Qxb5 ganando las blancas) 21... hxg5 22. Rf1 (22. Rg1 Qh2 23. d5 son mis anotaciones en la partida, pero esto da ventaja clara al negro) 22... Ngf6 23. e5 Nxe5 24. dxe5 Qxe5 25. Qb4 $2 Qxe3+ 26. Kxe3 Nd5+ 27. Kd2 Nxb4 28. Rxf7+ Kg8 -+ 29. Bg4 Rh2+ 30. Ke3 Nd5+ 31. Kd3 Nf4+ 32. Ke3 Rxb2 33. Bf3 0-1

Hoy la noticia de su fallecimiento nos tiene tristes de verdad. Convivimos con él cada sábado en la "Royal Society" por más de 30 años (se dice fácil). Siempre amable, cariñoso con los amigos y fuerte en el tablero. Nos deja un vacío y lo vamos a extrañar. Vamos, ya lo extrañamos. Descanse en paz.



_______

(*) La foto, tomada por Merlina Acevedo, muestra a los integrantes de la RS (de izquierda a derecha): MI Kenneth Frey, MF Armando Acevedo, MF Manuel López, MI Guil Russek y MI Jorge Aldrete

Tuesday, June 23, 2020

De sismos y epidemias



El escenario que vivimos desde hace unos cuatro meses fue realmente inesperado. Nos cayó la epidemia de covid-19 y entramos a la cuarentena. Tenemos expertos epidemiólogos en el gobierno, nos han dicho, que saben lo que hacen. El subsecretario de salud, el Dr. Hugo López Gatell tiene precisamente un doctorado en ese tema y es en mucha medida el artífice de todas estas medidas de la "sana distancia", del sacar a la gente del ámbito social para evitar contagios, etcétera.

Curiosamente la llegada de la epidemia no sorprendió, porque cuando ésta llegó, ya España e Italia sufrían miles de muertos por un mal manejo inicial de la epidemia. De acuerdo a lo que nos han mostrado en las tantas diapositivas que a diario nos enseñan en la conferencia sobre la pandemia, en Europa el problema está cediendo y al escribir esto, es el continente americano el que tiene el 55% de la epidemia activa.

López Gatell y el Dr. Alomía, quien hace el reporte diario de lo que pasa con la epidemia en México, nos ha mostrado ya casi de manera rutinaria que los muertos se siguen incrementando y curiosamente, rechazan que las cantidades de fallecidos por día sea tan alta, sobrepasando las mil unidades. Dicen ellos que lo que pasa es que son fallecimientos pasados que hasta ahora se reportan, pero que nunca se han pasado de 350 muertos por día. Bonita manera de justificar  lo injustificable.

Pero López Gatell lo sabe bien -y lo ha dicho- no se puede tener perpetuamente el confinamiento de la población  y más en un país en donde hay mucha gente que vive al día. Entonces, hay que reactivar la economía, buscando minimizar los riesgos porque no se puede, repito, seguir teniendo cerrado a todo México. Pero desde luego, como epidemiólogo lo que quisiera es que la gente se mantuviera en casa, y sigue llamando a esto, aunque ya su jornada nacional de la sana distancia acabó el 1 de junio (aunque en la CDMX la continuaron 15 días más).

La argumentación de aplanar la curva fue precisamente la razón del confinamiento, porque de no haber intervenido, no habría podido haber atención médica suficiente. Y entonces, ante la realidad de un sistema de salud mexicano abandonado, lamentable, con mil vicios, se decide poner en cuarentena la población para que no lleguen todos los contagiados inmediatamente. Pero López Gatell después nos informa que la cantidad de infectados, a la larga, será igual que en una epidemia corta, pero que habremos paliado el problema porque la atención médica estaría garantizada.

Potr otra parte, el presidente que tenemos, López Obrador, decidió ya ir de gira olvidándose todas las recomendaciones y además, diciendo públicamente al respetable que salga a la fonda, al museo, al restaurante, al parque, porque hay que dejar el miedo, contraviniendo lo que diariamente dice el Dr. López Gatell. No ayuda en nada esta serie de mensajes contradictorios, pero eso parece no importarle a AMLO, que vive en un mundo absolutamente apartado de la realidad, sin saber -además- lo mínimo de economía, buscando hacer sus megaproyectos como el tren maya, o la refinería de dos bocas o el aeropuerto de Santa Lucía.

Y si todo esto fuera poco, nos cayó un sismo que afectó a Oaxaca principalmente pero que tuvo algunos efectos menores en la ciudad de México. Y entonces vimos al presidente hablar por teléfono celular en un par de videos (uno en su oficina, otro fuera de ella), en donde mostraba como gran actor un gesto preocupado, y tomando notas en una hoja sobre lo que le informaban del movimiento telúrico. Francamente lamentable, porque cree que actuando co cara de proecupación hace la diferencia y se muestra como un gran presidente. Lo que hizo, el hablar con alguien para que le informara lo que supimos momentos después del evento por Twitter y Facebook, me hace creer que de verdad López Obrador está perdiendo la capacidad para lidiar con un país como México en las circunstancias actuales.

Y que conste, hay acciones que me gustaron, como convertir la casa presidencial en centro cultural, que es el único que recuerdo en estos momentos como en favor de la ciudadanía. Sin embargo, muchísimas acciones, verbigracia la famosa rifa del avión presidencial, la carta que le mandó Twitter pero que no supo que decía porque estaba en inglés, la defensa a ultranza de Bartlett y ahora de Ackerman y mujer, que entre otros personajes de la vida pública, generan millones, tienen 6 a 24 casas compradas pero son impolutos. Vamos, el mensaje es claro: váyase a trabajar al gobierno porque sino, estará condenado a ser clase pobre alta (la clase media la están desapareciendo). Yo no entiendo como alguien puede tener el descaro de poner en su declaración que gana poco menos de dos millones de pesos por su trabajo en el gobierno y 13 millones más de rentas que tiene. En serio, el hampa a todo lo que da en la 4T que, supuestamente, no permitiría estos abusos y a estos ladrones.

Esa es la situación actual en mi país. López Gatell dice que la epidemia puede terminar en octubre, aunque ya veo venir que sus predicciones, de las que hace alarde por tener grandes matemáticos a su servicio, fallan un día sí y otro también, y no dudo ya de que cambie la fecha tentativa de una disminución de la epidemia ya sostenido y final. Y por otra parte, el panorama en la educación se ve complicado. Por ejemplo, el siguiente semestre en la Facultad de Ciencias de la UNAM, al menos, será en línea. Nada de clases presenciales y si bien nos va, eso ocurrirá hasta el semestre que inicie en febrero del 2021.

Vamos a ver qué pasa con el peje. Yo no creo que el país aguante mucho más tantos yerros en la economía. El Peje mintió (está documentado), sobre que no subiría la gasolina. Mintió cuando dijo que no subirían los impuestos cuando ya hay un impuesto más a pagar por usar servicios digitales (aunque nos digan que ya existía pero que no se había puesto en la práctica, lo que es una manera de decir, ahora pagarás más pero no subimos los impuestos).

Ya hablaremos en la medida que se vayan presentando las cosas.

Friday, June 19, 2020

¿Cómo saber qué fotomosaico es mejor?



En este trabajo de fotomorsaicos que he retomado gracias a la pandemia, que me ha dado más tiempo, he hecho varias modificaciones al software original, por ejemplo, el poder evitar las repeticiones, lo que en mi opinión, hace que los morsaicos sean menos monótonos y se vean mejor. Y aunque "la belleza está en la mirada de quien contempla" (beauty is in the eye of the beholder), bien pueden definirse algunos parámetros para tratar de definir más precisamente qué fotomorsaico es mejor.

Desde luego que hay criterios variables. El que haya pocas repeticiones debe ser un buen criterio considerando que mientras más se repiten algunas imágenes, más monótono o simplón es el resultado final. Otro criterio a considerar es el usar "blending", es decir, el fusionar la imagen original en un porcentaje contra la imagen del fotomorsaico, de manera que "se suavice" la imagen final y no se vea tan "pixelada", por decirlo de alguna manera.

Para este concepto del blending no tengo por el momento ninguna manera de medir numéricamente si el blending mejora o no el fotomorsaico final. Sin embargo, para la parte de la cantidad de fotos repetidas o no, se puede hallar un índice muy sencillo que claramente nos puede indicar si un morsaico es mejor que otro a la vista del observador.

Lo que hice entonces fue leer el archivo que describe el fotomorsaico, el cual se usa para crear la imagen final. Entonces hice una rutina que contara cuantas veces se repetían las imágenes. Una vez hecho esto, puse una lista, ordenada de menor a mayor, de las fotos que se repetían y las grafiqué para ver cómo se ven. Obviamente, la gráfica tiende a ser como una exponencial, porque se grafica de menor a mayor número de repeticiones. En un morsaico ideal probablemente se tenga una línea con pendiente cero, es decir, donde todas las imágenes aparecieron en la misma cantidad. Pero como este caso es el ideal y muy poco probable, es simplemente la referencia teórica.



Una vez que tuve estos datos, pude contar cuántas imágenes diferentes aparecen en el mosaico. Y para encontrar el índice, tome la cantidad total de imágenes que debe tener el morsaico, tomadas del mismo archivo de descripción y lo dividí entre el número de imágenes diferentes.

Esto es lo que encontré:

Para la siguiente imagen,



el índice del morsaico fue de 4.644.



el índice del morsaico fue de 3.737.

En este caso se usó una colección de imágenes de 10,019.

En el caso de la siguiente imagen:


se obtuvo un índice de 4.70

Mientras que en la siguiente imagen



se obtuvo un índice de 3.91

Usando una colección de 5560 imágenes.

Es claro que la cantidad de imágenes disponibles puede hacer cambiar el índice. Por ello, intentamos procesar una imagen (en tonos de gris), con una colección de 63,136 imágenes.

Para el caso de permitir repetición, en la siguiente imagen final:


el índice del morsaico fue de 13.51

En cambio, poniendo el criterio de elegir en cada imagen una de las mejores 50, hallamos que


el índice fue de 1.33.

Las conclusiones parecen ser bastante evidentes:

  • Una imagen sin permitir repeticiones hacen un mejor morsaico, pero depende de cuántas imágenes consideremos para elegir la mejor. En las imágenes en tonos de gris, como solamente podemos tener de 0 a 255 tonos diferentes, elegir de 63 mil imágenes una entre las 50 mejores, parece ser razonable. Mientras menor es el índice, mejor debe ser el morsaico.
  • Las imágenes con repeticiones tienden a ser muy monótonas y suelen tener índices más altos.
  • El blending, que suaviza el resultado final no se está tomando en este índice por el momento, pero claramente tiene importancia.
  • El total de las imágenes en la colección es otro punto a tomar en cuenta, pero en esta prim era aproximación no está contemplado.
Finalmente, dejo la imagen en tonos de gris final, usando blending en un 75% (para el mosaico) y 25% para la imagen original, la cual pueden descargar de este enlace y la imagen procesada -pero sin blending (es la imagen anterior a esta). ¿Cuál les gusta más?




La pregunta sería, para mis cuatro lectores, ¿cómo definirían ustedes este índice?

Sunday, June 14, 2020

FotoMorsaicos: Fusionando imágenes



Los fotomosaicos los conocí gracias al trabajo de Robert Silvers, el cual se hizo popular después de la imagen de Lady Di, publicada en la revista Newsweek hace algunos años.


La imagen de Lady Di, hecha con fotos de flores


Tiempo después fui al cine a ver la película The Truman Show y me asombró el póster de dicho filme: Es el rostro de Jim Carrey, el protagonista, hecho con fotogramas de la película. El autor es Silvers, el cual no vende un programa para hcer fotomosaicos, sino que los hace por encargo. Sin duda es uno de los mejores exponentes del tema y su trabajo lo ha patentado, aunque sus ideas no lo son, sino solamente la manera en como las hace.


El cartel original de la película The Truman Show


Lo interesante es que -aunque hacer fotomosaicos no tiene mucha ciencia- la manera en cómo hacerlos puede ser muy sofisticada. El tema básicamente trata de tomar una imagen, cuadricularla -es decir- tomar pequeñas regiones y sacar un mosaico sólido de la misma. Una vez hecho esto, hacerse de una buena colección de imágenes y entonces, buscar qué imagen es la más adecuada para sustituirla por la región de color sólido.


De un mosaico de colores sólidos a un fotomorsaico


Básicamente todos los programas usan la ecuación de la distancia euclidiana en 3 dimensiones, la cual simplemente permite calcular la distancia entre puntos considerando tres ejes perpendiculares entre sí, x, y y z.


Eso es lo que en mi software le he llamado una "métrica". Sin embargo, encontré que Thiadmer Riemersma, de Holanda, había hecho un estudio de cómo el ojo humano reconoce los colores, lo cual en el fondo es una modificación de la distancia euclidiana.



Yo apliqué esa fórmula y curiosamente, Riemersa leyó mi artículo del Dr. Dobbs y me escribió, indicándome que nunca pensó que su estudio pudiese usarse para un proyecto de fotomosaicos. Pienso que esto es la verdadera contribución al tema.


Ejes cartesianos en donde X, Y y Z se transforman en los colores primarios Rojo, Verde y Azul


Pero hay más que se puede hacer con los fotomosaicos. Por ejemplo , se puede hacer "blending". Esto es básicamente superponer en el mosaico la foto original, en un porcentaje, como si fuese una transparencia, de manera que algunas regiones se oscurezcan o se aclaren, haciendo un fotomosaico más suavizado. Esto, desde luego, debe hacerse con cuidado porque si se abusa entonces el blending no sirve y simplemente se ve la imagen original superpuesta con los mosaicos, como en este ejemplo


Un ejemplo burdo de blending


Aquí los colores de las imágenes dan lo mismo, porque al hacer la fusión con la imagen del personaje, no se respeta nada de cada una de las pequeñas imágenes.

Este otro ejemplo se ve mucho más sutil (del cartel de la película The Truman Show):


Un ejemplo de blending mucho mejor y más cuidado


Esto es un trabajo mucho más elaborado y deja un muy buen sabor al observador. Aquí se maneja sutilmente el blending.

Pensando en todo esto, escribí un pequeño programa que hace este blending con el fotomosaico generado. Cabe decir que hay problemas técnicos que hubo que resolver. Lo primero fue el saber que el fotomorsaico final no necesariamente tenía el mismo tamaño que la imagen original. En ese caso, había que cambiar el tamaño de esta última imagen para empatarla con la imagen del morsaico y poder entonces hacer el "blending".

Otra cosa que hice fue el poner un control para definir la cantidad de transparencia de la imagen original sobre el mosaico (o viceversa). Así, todo estaba listo. Finalmente puse un control para ver el progreso del proceso de blending. He aquí los resultados:


Programa de blending entre la imagen original y el fotomorsaico


Aquí hacemos la fusión entre la imagen de la izquierda (el fotomorsaico) con la imagen original y el resultado queda en la imagen de la derecha, que ya podemos guardar como un archivo ".jpg".

La imagen resultante es esta:


El resultado final

Quien quiera ver la imagen original, descárguela de este sitio y quien quiera ver el Morsaico compelto, baje la imagen procesada de aquí.




Friday, June 12, 2020

Un regreso a los fotoMorsaicos




Hace ya algunos años de esto,  hice un programa de computadora que generaba fotomosaicos como en la película de Jim Carrey (The Truman Show. Pueden ver las entradas aquí, aquí y aquí.



Este trabajo me trajo algunas satisfacciones. Una de ellas es que por primera veza publiqué un artículo técnico en una revista que siempre consideré de buen nivel (ya desaparecida): Dr. Dobbs Journal. Aparte de eso, en el portal unocero he realizado algunos concursos de programación lúdica y uno de ellos era precisamente el generar un fotomosaico. El ganador hizo un trabajo notable, pues no puso imágenes como normalmente se hace, sino que puso pequeños cubitos 3D en lugar de las imágenes.



Pues bien, en el mundo de la programación, cuando se dice que un programa está terminado es porque probablemente ya sea obsoleto. Y esto me pasó a mí con mis fotoMorsaicos. En algún momento me cansé del tema y lo dejé por la paz. Sin embargo, esta es una de las tareas que dejo a mis alumnos de la asignatura en proceso digital de imágenes.  Uno de mis estudiantes de ese entonces, Andrés Aldana (que ya termina ahora su doctorado), hizo un fotomosaico y noté que no se veían en general imágenes repetidas. Él me explicó que su programa no necesariamente toma la mejor imagen, sino que calcula las diez mejores imágenes para cada región del mosaico y pone alguna de ellas al azar. Esto tiene su ventaja, que no se ve el mosaico monótono. Tiene un contra, que no pone la mejor imagen siempre. Sin embargo, para todo fin práctico, me parece que la idea de Andrés es muy buena.

Pasaron los años y ahora, gracias al confinamiento por la pandemia, decidí sentarme a implementar esto. Cabe señalar que me la pasé un par de días pensando (no todo el tiempo, evidentemente), cómo hacer que la sugerencia de Andrés podía implementarse. Una posibilidad es hacer los cálculos para saber cuáles son las diez mejores fotos (en lo que se refiere a su color contra el de la región que se está analizando). Y si se tienen, por ejemplo 10 mil imágenes, guardar esos cálculos y después ordenar las imágenes de acuerdo a la métrica que indica qué foto está más cerca (en color), con cada región.

Para comprender lo que sigue, sugiero le echen un ojo a mi clase virtual en donde le explico a mis alumnos el trabajo de los fotoMorsaicos:


Sin embargo, me resultaba ridículo y oneroso, en términos de recursos, el hacer un ordenamiento de 10 mil elementos. ¿Y si usaba una colección de 30 mil o 40 mil imágenes? ¿Cuánto tardaría el asunto? No resultaba la mejor idea. Entonces se me ocurrió lo siguiente: Leo cada imagen y coloco las 10 primeras ern un arreglo. Las ordeno, de acuerdo con el criterio de la métrica (que me dice cuál es la mejor imagen cuando el calculo que hago es el menor). Así, solamente tengo que ordenar 10 imágenes. Cuando llego a la imagen 11, la pongo en lugar de la imagen 10 y vuelvo a ordenar mi pequeño arreglo, que la verdad, no le pega notablemente al desempeño del software. Y así lo hago hasta la última imagen. Cuando termino el cálculo, en mi arreglo tengo las 10 mejores imágenes para una región y de ahí, elijo una al azar y ¡listo! Morsaico terminado.

En otra entrada del blog expliqué la necesidad de tener muchas imágenes para poder procesar los fotoMorsaicos. Claramente, mientras más imágenes se tengan, mejores serán los resultados. Mis alumnos reciben de mi parte (gratuitamente, antes de que alguien brinque con algún comentario absurdo), unas 60 mil imágenes de alta resolución, las cuales compré hace años (me gasté unos 200 dólares en ellas en su momento). Estas son básicamente The Big Box of Art y Art Explosion, amén de un disco con 5600 imágenes (la primera colección que usé y un  CD con 10 mil imágenes que mi hermano Juan me consiguió en un viaje a Estados Unidos, y que le costó menos de 10 dólares.


Pues bien, regresando al problema, programé la idea de Andrés e hice una prueba. Puse la imagen de Lena, que se usa como el estándar de facto del Proceso Digital de Imágenes, y generé dos fotoMorsaicos: el primero (a la izquierda), poniendo la mejor foto siempre (aunque haya repeticiones) y un segundo Morsaico, que trabaja con la idea de poner una de las 10 mejores imágenes halladas para cada región.

Los resultados ilustran qué fotoMorsaico queda mejor (ver la imagen al inicio de este artículo). Ahora bien, aquí abajo puede verse una ampliación de la parte superior izquierda de la imagen procesada.



Nótese que en el Morsaico con repetición, se ve muy, pero muy repetidas las imágenes y esto tiende a ser monótono, aunque sea la opción estricta y rigorista a seguir. No obstante esto, el morsaico con no repeticiones (aunque se ven algunas, porque el morsaico elige al azar la foto que pondrá entre 10 mejores fotos y el algoritmo del azar de pronto repetirá alguna) -en mi opinión- se ve mejor aunque el criterio de selección sea más laxo.

La pregunta sería, ¿cuál le gusta más al lector?

Sunday, June 07, 2020

¿Por qué fallan las predicciones de la Secretaría de Salud?



El covid-19, la pandemia más terrible probablemente en este siglo, ha detenido al mundo. Todo empezó a fines del 2019 y a seis meses del primer caso y miles de muertos en Europa, particularmente alto en España e Italia, empieza el viejo continente a recobrarse. Ya en algunas partes se ha anunciado que no han  hallado un nuevo caso de la enfermedad y desde luego, este proceso será muy lento y probablemente tome todo el año siendo optimista.

En México hemos padecido el covid-19 de manera muy particular. Por una parte, el gobierno de este país por decenas de años mantuvo a los hospitales públicos a pan y agua, para decirlo coloquialmente y ahora, que surge esta emergencia epidemiológica, el propio gobierno se da cuenta que no va a poder atender en sus hospitales a todos los que se enfermarán. Entonces, llaman al especialista, el Dr. Hugo López Gatell, y lo ponen al mando para sugerir qué hacer. Y entonces se cierran las actividades de prácticamente todo el país desde el 23 de marzo. Se define la "Jornada Nacional de la Sana Distancia" (ay, cómo le gustan estos nombrecitos payasos) y se dice que terminará el 31 de mayo. Según López Gatell, el pico de la pandemia sería el 6 de mayo, después dijo el 8 y más adelante el 10 de mayo. Y sin embargo, los casos -al 6 de junio- prácticamente un mes después, no bajan aunque, de acuerdo al especialista, se empieza a ver una tendencia a la baja, aunque sigan registrándose más de 350 muertos por día. Así, dicho de otra manera, simplemente, ante la incapacidad y el descuido de la salud pública, deciden cerrar al país para evitar los contagios masivos.

Y desde luego, añádase a este escenario todos los abusos, como los de la empresa del hijo de Bartlett, que vendió no sé cuantos respiradores a sobreprecios, o a los kits de mascarillas chinas que se rompen hasta cuando las demuestran públicamente, o a las protestas de los médicos de los hospitales público porque simplemente no los apoyan y de nuevo, coloquialmente, los dejan morir. Pero esto no parece importarle a López Gatell & Co., que con otros funcionarios hablan de los cientos de miles de pruebas que no se aplican pero que ahí tienen, o bien, del hecho de que hacer pruebas no dice nada y cualquier cantidad de argumentación que cada vez resulta más una maroma de circo, para justificar lo injustificable y los datos reales. No hay pico aún y parece estamos lejos de que ocurra. Todas las predicciones de los halagados matemáticos de López Gatell simplemente no funcionan.

¿Y por qué las predicciones fallan? ¿Es que los matemáticos de Conacyt, del Instituto de Matemáticas de la UNAM, entre otros, no saben hacer predicciones ni modelos matemáticos? Porque cabe decir que de acuerdo a López Gatell son unas eminencias en este rubro de la estadísticas y probabilidad (y no lo dudo), aunque no den una sola predicción que se haya cumplido. Y es simple: lo que pasa es que a los matemáticos no les están dando los datos confiables, verdaderos y entonces, sus gráficas tan bonitas sirven para bien poco. Los modelos matemáticos resultan muy buenos cuando se tienen buenos datos y aquí parece que eso es lo que esta faltando. Vamos, mientras se les sigan dando datos alterados, la información que nos presenten día con día no servirá de nada. Y hay quien buscará politizar el asunto, pero eso se queda chico cuando se ve cómo los muertos siguen creciendo en las estadísticas. Y el problema es que la economía no se puede detener indefinidamente porque eso va a agravar la condición de todo el país.

Friday, June 05, 2020

Reto lúdico: procesadores de palabras y diccionarios



Hoy en día prácticamente todas las aplicaciones usan un diccionario de palabras, el cual funciona en tiempo real, marcando (muchas veces subrayando en rojo o pintando con algún color específico) las palabras que de acuerdo a cómo se escriben las palabras, están mal escritas. Esto lo usan muchos procesadores de palabras que añaden esta capacidad para hacer más valioso su software y ayudar al usuario a escribir con mayor corrección.

Hay que decir que los idiomas humanos muchas veces son más complicados para corregir que simplemente hacer una búsqueda en un diccionario a ver si existe una palabra o no. Hay giros idiomáticos, hay anglicismos que muchas veces no se encuentran en los diccionarios, amén de que hay palabras que tienen que ver con el contexto en el que se escriben. Pongamos un ejemplo: la palabra "solo" se escribe sin acento si es de soledad. Si es adverbio, entonces se le pone la tilde en la primera sílaba. Así, "estoy solo" está bien escrito, pero "estoy sólo" no lo está. Y sí, sé que la Rel Academia de la Lengua Española estaba quitando estos acentos diacríticos. Sin embargo, mientras no se decida cómo quedará la cosa, yo seguiré con la regla antigua.

Los elementos de una buena corrección ortográfica

En 1988 hice la maestría en Inteligencia Artificial. Mi proyecto era un corrector ortográfico inteligente. Después de analizar a detalle la problemática, llegué a la conclusión que, para tener un corrector razonablemente bueno, se requería lo siguiente:

  • Ser capaz de usar reglas ortográficas: Hay más de doscientas reglas en el español. Por ejemplo, "En una palabra, después de una n va una v, después de una m va una b". Así, "enbiar" está mal escrito y "homvre" también está mal. Si usamos las reglas, podemos olvidarnos en algunos casos de consultar las palabras en el diccionario.
  • Ser capaz de usar un diccionario con miles de palabras: Mientras más palabras se tengan en un diccionario, la corrección puede ser mejor.
  • Ser capaz de usar diccionarios personalizados: Muchas palabras no están en los diccionarios, por ejemplo, aquellas que usan términos científicos o un lenguaje especializado. Sería pues conveniente poder agregar esta funcionalidad de tener (o crear) diccionarios especializados.
  • Ser capaz de usar otras tecnologías para buscar errores, como patrones equivocados de letras: En muchas ocasiones los usuarios cambian la letras de orden y estoi hace que la palabra esté mal escrita. Si podemos detectar esto, la corrección puede hacerse sin necesidad de un diccionario.
  • Ser capaz de usar de un diccionario de verbos ya conjugados: Curiosamente, los diccionarios normalmente traen los verbos en infinitivo pero no vienen conjugados. La conjugación es un proceso mecánico y por ende, bien podría añadirse a las capacidades del corrector. Cada verbo tiene, en general unas 50 conjugaciones y hay unos 10 mil verbos. Esto haría posible tener un diccionario -sólo de verbos (¿notaron la tilde?)- de 500 mil palabras.


Tres tipos de corrección: interactiva, por lotes y rápida

Normalmente los procesadores de palabras corrigen mientras el usuario está escribiendo un texto. Esto es relativamente ágil para el usuario pues puede detectar errores de inmediato. Sin embargo, hay otros escenarios. Supongamos que nos mandan un texto de muchas cuartillas. Pues bien, sería recomendable ejecutar el corrector ortográfico de manera tal que se haga automáticamente mientras hago otra cosa. Cuando termine, que guarde un reporte con las correcciones que hay que hacer en un archivo que pueda consultar. Una tercera opción es hacer una "corrección rápida", usando para ello una lista de palabras más frecuentemente usadas en el español. Estas pueden encontrarse aquí.

Con esto dicho, va el reto: hágase un editor de textos (puede ser del tipo bloc de notas, es decir, sin necesidad de tipos y tamaños diferentes de letras), que corrija un texto usando estas posibilidades, mientras más, mejor. Es decir, mientras más características puedan usarse (de las descritas), será un mejor candidato a ganar el premio del reto lúdico.

Más de uno preguntará: ¿Y de dónde saco el diccionario de palabras a usar? Buscando en el oráculo de Internet, encontré este sitio, que Giusseppe Domínguez tecleó las 91 mil palabras del diccionario de la RAE y las puso en un archivo de texto, el cual puede descargarse de este enlace. El autor de semejante esfuerzo nos da algunas estadísticas sobre las palabras:


  • Palabras en a.txt = 11135
  • Palabras en b.txt = 3861
  • Palabras en c.txt = 12697
  • Palabras en d.txt = 5880
  • Palabras en e.txt = 7332
  • Palabras en f.txt = 2966
  • Palabras en g.txt = 3000
  • Palabras en h.txt = 2215
  • Palabras en i.txt = 3308
  • Palabras en j.txt = 982
  • Palabras en k.txt = 117
  • Palabras en l.txt = 2531
  • Palabras en m.txt = 5598
  • Palabras en n.txt = 1351
  • Palabras en ñ.txt = 82
  • Palabras en o.txt = 1468
  • Palabras en p.txt = 7951
  • Palabras en q.txt = 521
  • Palabras en r.txt = 4603
  • Palabras en s.txt = 4713
  • Palabras en t.txt = 4980
  • Palabras en u.txt = 500
  • Palabras en v.txt = 2031
  • Palabras en w.txt = 28
  • Palabras en x.txt = 48
  • Palabras en y.txt = 267
  • Palabras en z.txt = 774


Palabras en total = 90939

Con esto todo está en la mesa. ¡A programar!

El ganador (si es de la Ciudad de México), se hará acreedor a una taza con el logotipo de la Morsa. Si es de otro país o de provincia, le mandaremos un USB de al menos 16 GB.



Cabe señalar que este concurso busca simplemente alentar el trabajo de la programación y mostrar que puede ser lúdica. Es un concurso de buena fe. Si hay, por ejemplo, dos o más respuestas satisfactorias, ganará quien la haya mandado primero.

El ganador cede su código fuente a la comunidad. Los que estén interesados deberán mandar sus programas a morsa@la-morsa.com. Quien resulte ganador deberá entregar el código fuente para compartirlo con la comunidad.

Digamos que la idea es promover la creación de software y además, hacer que ésta sea de código abierto. Si el autor decide no poner su código accesible, perderá su premio.



Hoy hace 14 año murió mi papá



Un día como hoy, pero hace ya 14 años, mi papá murió. Tuvo una vida feliz y llena de satisfacciones. Hace apenas un par de días se comunicó conmigo un matemático de la Facultad de Ciencias, quien estudió guitarra en el Estudio de Arte Guitarrístico, que dirigió mi papá por muchos años. Y entonces regresaron las memorias y el ver la foto de mi padre entregando un certificado al estudiante me llevó a un sinfín de buenos recuerdos. Finalmente de alguna manera me alegró el día.

Hoy extraño a mi papá como nunca y además, me queda claro que este día se abre la herida y sigue doliendo. Es increíble. Parece que todo pasó ayer. Un beso a mi papá hoy porque sé que a pesar de no estar físicamente, está conmigo. Yo no sería quien soy sin sus enseñanzas.


Saturday, May 30, 2020

Definitivo: Windows 10 es más lento que Windows 7



El sistema operativo de Microsoft ha sido adoptado por unos mil millones de usuarios en el mundo, de acuerdo con este sitio, y aunque tardó dos años más de lo previsto, puede decirse que este es el sistema operativo más usado de todos los tiempos (hasta ahora). Sin embargo, aunque Microsoft puso de forma gratuita la descarga de Windows 10 en el 2015 (para que la gente lo descargara y usara), fue clara la estrategia para ir migrando su propia plataforma al hardware más del momento.

A cinco años de su introducción al mercado, podemos preguntarnos: ¿Es Windows 10 mejor que Windows 7? La respuesta en general es un rotundo sí. Esa más estable, menos pantallas de la muerte, una buena capacidad de recuperación, software más robusto por parte de Microsoft, etcétera. Sin embargo, la segunda pregunta clave es ¿Es más rápido Windows 10 que Windows 7? Pues no, la realidad es que Windows 10 -de acuerdo a mis propias pruebas, es mucho más lento que la versión anterior. La pregunta es ¿cuánto?

Para probar esto, decidí usar un programa escrito en Delphi, que hace una serie de búsquedas regulares en un archivo de datos. Este archivo tiene alrededor de 110 mil líneas y el programa debe buscar si una cadena de símbolos en particular aparece en el archivo de texto mencionado y además, que indique en qué líneas aparece. Lo que hace mi software puede verse aquí.

Busqué en Internet una respuesta a la razón por la cual Windows 10 se observa tan lento. Hay un sinfín de respuestas, pero la realidad es que no sé exactamente qué está pasando. La pregunta sería entonces: ¿Cómo hacer para que Windows 10 corra más rápido?

He aquí los dos videos con las pruebas referidas. Cuando en el video (que no tiene sonido), le pongo la opción de buscar patrón, entonces puse el cornómetro, que me dio los datos mencionados. A ver si alguien tiene alguna explicación al respecto.




La versión corriendo en Windows 10



La versión corriendo en Windows 7



Mi software lo probé en Windows 10 y obtuve un tiempo de proceso (tomado con mi celular), de 81 segundos. Esto significa que mi programa puede revisar 1358 cadenas por segundo. No parece demasiado lento. Sin embargo, corrí en mi máquina con Windows 7 exactamente el mismo programa con los mismos datos. El cálculo del tiempo que tardó fue de 33 segundos. Esto es 3333 cadenas revisadas por segundo. Vamos, Windows 7 es 2/3 veces mas rápido que el flamante Windows 10.

Para ser justos, esta es la comparación del hardware:


Windows 7



Windows 10

En términos del trabajo que estoy haciendo, el programa en Windows 7 puede revisar unas 54 partidas por segundo, mientras que en Windows 10 solamente 22. Demasiada diferencia, ¿No?

Wednesday, May 27, 2020

35 veces más rápido



Para la tesis de doctorado he escrito un programa que busca los patrones ajedrecísticos de acuerdo al lenguaje de descripción que definimos en este trabajo, y del cual he hablado ya muchas veces. El software -escrito en Delphi- permite buscar un patrón por segundo en toda una partida, en promedio. Desde luego, si es una partida de 20 movimientos la búsqueda tarda incluso menos. Si es una partida larga, 60 o más movimientos, probablemente la búsqueda del patrón se haga en un par de segundos.

Por supuesto que esta velocidad de proceso es muy lenta en términos de la velocidad de la computadora, aunque para los seres humanos usar un segundo por partida es extremadamente rápido sin considerar siquiera una remota posibilidad de poderlo hacer. De hecho, esto fue uno de los puntos en donde los revisores de mi artículo pusieron algunos peros. Tal vez los convencí indicando que el programa escrito buscaba ser una prueba del concepto investigado, es decir, el uso de patrones, y entonces terminaron por conceder que era un argumento razonable.

Pero desde luego que tardar un segundo por partida para hallar un patrón es lento. Y de hecho, llevaba ya tiempo dándole vueltas al problema. Si vemos los manejadores de partidas, como Chessbase, pueden hacer búsquedas -de posiciones, no patrones- en tiempos notables, por ejemplo, buscar una posición determinada puede llevarle unos 3 minutos en un conjunto de 7 millones de partidas. Y la pregunta es ¿cómo lo hace? Para poder acceder a estas velocidades hay que crear bases de datos de las partidas y manejarlas así. Por ejemplo, Chessbase tiene una serie de archivos de índice para esta tarea y es una de las explicaciones por las cuales sus búsquedas son más rápidas.

¿Sería la única alternativa? Decidí investigar una idea que tiene que ver con las búsquedas regulares, que además, ya he planteado antes en el blog. Entonces me di a la tarea de hacer un programa que mostrara la bondad de usar búsquedas regulares. En este caso el asunto sería de la siguiente manera: El patrón sería una cadena de caracteres, una cadena Forsyth (ver el articulo al que hice referencia para entender de lo que hablo) y cada partida sería una colección de cadenas de caracteres (posiciones) en formato Forsyth. Lo que tendría que hacer es ir recorriendo mi listado de posiciones y ver si pudiesen coincidir con la posición que define el patrón.

En las búsquedas regulares se usan "wildcards", comodines, que indican diferentes conceptos de búsqueda. Por ejemplo, el "?" significa que podemos poner cualquier caracter o símbolo en esa posición. Otro muy usado es "*", que generaliza la búsqueda a muchos caracteres o símbolos, sin importar cuáles sean estos. Por ejemplo, puedo buscar la posición: "???????k" o bien "*k". En la primera, busco siete símbolos pero el octavo debe ser una "k". En el segundo caso, puede haber un número, el que sea, de símbolos, antes de la "k". Desde luego que debe usarse cada símbolo considerando lo que tengamos en mente.

rnbqkbnr
pppppppp
11111111
11111111

11111111
11111111
PPPPPPPP  = 

rnbqkbnrpppppppp/11111111/11111111/11111111/11111111/PPPPPPPP/RNBQKBNR1111111111111111PPPPPPPPRNBQKBNR

Podemos quitar los "/" y tendremos:

rnbqkbnrpppppppp11111111111111111111111111111111PPPPPPPPRNBQKBNR

Ahora bien, supongamos que tengo el patrón del sacrificio griego:



111111r1
111111pp
111111X1
1111PX11
1111X111
111A1C11
11111111
111D1111

Esto es equivalente a la cadena de símbolos:

111111r1111111pp111111X11111PX111111X111111A1C1111111111111D1111

Las X son casillas que no deben estar ocupadas por ninguna pieza o peón en el momento de definir el patrón.

Si yo quiero buscar esta posición, lo que debo poner es:

??????k???????pp??????1?????P1??????1??????B?N?????????????Q????

Donde los escaques vacíos se ponen con "1".

El siguiente paso es poner una partida, jugada a jugada, en formato Forsyth, es decir, en este formato en donde se ve la partida, movimiento con movimiento como una cadena de caracteres. Por ejemplo, esta es una partida de ajedrez completa en formato Forsyth:

rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1
rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2
rnbqkbnr/pp1ppppp/8/2p5/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 0 2
rnbqkbnr/pp1p1ppp/8/2p1p3/4P3/2P5/PP1P1PPP/RNBQKBNR w KQkq - 0 3
rnbqkbnr/pp1p1ppp/8/2p1p3/4PP2/2P5/PP1P2PP/RNBQKBNR b KQkq - 0 3
rnbqkbnr/pp3ppp/3p4/2p1p3/4PP2/2P5/PP1P2PP/RNBQKBNR w KQkq - 0 4
rnbqkbnr/pp3ppp/3p4/2p1p3/4PP2/2P2N2/PP1P2PP/RNBQKB1R b KQkq - 1 4
rnbqkbnr/pp3ppp/3p4/2p5/4Pp2/2P2N2/PP1P2PP/RNBQKB1R w KQkq - 0 5
rnbqkbnr/pp3ppp/3p4/2p5/3PPp2/2P2N2/PP4PP/RNBQKB1R b KQkq - 0 5
rnbqkb1r/pp3ppp/3p1n2/2p5/3PPp2/2P2N2/PP4PP/RNBQKB1R w KQkq - 1 6
rnbqkb1r/pp3ppp/3p1n2/2p5/3PPp2/2PB1N2/PP4PP/RNBQK2R b KQkq - 2 6
rnbqk2r/pp2bppp/3p1n2/2p5/3PPp2/2PB1N2/PP4PP/RNBQK2R w KQkq - 3 7
rnbqk2r/pp2bppp/3p1n2/2p5/3PPB2/2PB1N2/PP4PP/RN1QK2R b KQkq - 0 7
rnbq1rk1/pp2bppp/3p1n2/2p5/3PPB2/2PB1N2/PP4PP/RN1QK2R w KQ - 1 8
rnbq1rk1/pp2bppp/3p1n2/2p5/3PPB2/2PB1N2/PP1N2PP/R2QK2R b KQ - 2 8
r1bq1rk1/pp2bppp/2np1n2/2p5/3PPB2/2PB1N2/PP1N2PP/R2QK2R w KQ - 3 9
r1bq1rk1/pp2bppp/2np1n2/2p5/3PPB2/2PB1N2/PP1N2PP/R2Q1RK1 b - - 4 9
r2q1rk1/pp2bppp/2np1n2/2p5/3PPBb1/2PB1N2/PP1N2PP/R2Q1RK1 w - - 5 10
r2q1rk1/pp2bppp/2np1n2/2p1P3/3P1Bb1/2PB1N2/PP1N2PP/R2Q1RK1 b - - 0 10
r2q1rk1/pp2bppp/2n2n2/2p1p3/3P1Bb1/2PB1N2/PP1N2PP/R2Q1RK1 w - - 0 11
r2q1rk1/pp2bppp/2n2n2/2p1P3/5Bb1/2PB1N2/PP1N2PP/R2Q1RK1 b - - 0 11
r2q1rk1/pp2bppp/2n5/2p1P2n/5Bb1/2PB1N2/PP1N2PP/R2Q1RK1 w - - 1 12
r2q1rk1/pp2bppB/2n5/2p1P2n/5Bb1/2P2N2/PP1N2PP/R2Q1RK1 b - - 0 12
r2q1r2/pp2bppk/2n5/2p1P2n/5Bb1/2P2N2/PP1N2PP/R2Q1RK1 w - - 0 13
r2q1r2/pp2bppk/2n5/2p1P1Nn/5Bb1/2P5/PP1N2PP/R2Q1RK1 b - - 1 13
r2q1r2/pp3ppk/2n5/2p1P1bn/5Bb1/2P5/PP1N2PP/R2Q1RK1 w - - 0 14
r2q1r2/pp3ppk/2n5/2p1P1bn/5BQ1/2P5/PP1N2PP/R4RK1 b - - 0 14
r2q1r2/pp3ppk/2n5/2p1P1b1/5nQ1/2P5/PP1N2PP/R4RK1 w - - 0 15
r2q1r2/pp3ppk/2n5/2p1P1b1/4NnQ1/2P5/PP4PP/R4RK1 b - - 1 15
r2q1r2/pp3ppk/2n1n3/2p1P1b1/4N1Q1/2P5/PP4PP/R4RK1 w - - 2 16
r2q1r2/pp3ppk/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/R4RK1 b - - 3 16
r2q1rk1/pp3pp1/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/R4RK1 w - - 4 17
r2q1rk1/pp3pp1/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/3R1RK1 b - - 5 17
r4rk1/pp2qpp1/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/3R1RK1 w - - 6 18
r4rk1/pp1Rqpp1/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/5RK1 b - - 7 18
r4rk1/pp1q1pp1/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/5RK1 w - - 0 19
r4rk1/pp1q1pp1/2n1nN2/2p1P1bQ/8/2P5/PP4PP/5RK1 b - - 1 19
r4rk1/pp1q1p2/2n1np2/2p1P1bQ/8/2P5/PP4PP/5RK1 w - - 0 20
r4rk1/pp1q1p2/2n1nR2/2p1P1bQ/8/2P5/PP4PP/6K1 b - - 0 20

Así, buscar posiciones se reduce a hacer una búsqueda regular en las cadenas de caracteres. La pregunta que me hacía es qué tan rápido sería.

Los programas de mi tesis están todos escritos en Delphi, porque tengo una serie dee bibliotecas que ya me hacen la tarea de dibujar los tableros de ajedrez gráficos, el movimiento de las piezas, etcétera. Entonces, lo que estaba necesitando era una biblioteca que hiciese búsquedas regulares. Hallé una rutina que usaba los comodines "*" y "?", la cual se discutía en este sitio. La copié y la implementé.



Entonces hice mi primera prueba y encontré que el software tardaba 32 segundos analizando 1030 partidas. Esto significó buscar el patrón en aproximadamente unas 32 partidas por segundo, lo que es equivalente a 32 veces más rápido que en el software de patrones original de patrones.

Pero recordé entonces que tenían en otro paquete una biblioteca de búsquedas llamada hyperstrings, la cual estaba escrita en buena parte en ensamblador, buscando ser muy rápida. Hurgué en mi respaldo (porque dicha biblioteca ya no está accesible ahora), y entonces la puse en mi sistema. En este caso el sistema tardó ¡19 segundos!, lo que significa 54 partidas analizadas por segundo, lo que ya me gusta más y que es casi el doble que con la primera rutina en Delphi.

Tomando en cuenta esto último, si el sistema puede buscar un patrón a una velocidad de 54 partidas por segundo, en 48 horas (dos días), podría hacer la búsqueda en unas 9 millones de partidas (la Megabase 2020 contiene menos de 8.5 millones de partidas). Originalmente había pensado que este análisis me llevaría entre 3 y 6 meses sin apagar la computadora.

Cabe señalar que para poder usar mi programa de búsqueda de patrones a través de posiciones Forsyth (FEN), se necesita pasar todas las partidas del archivo PGN (portable game notation) a Forsyth. GigaChess era mi esfuerzo en software para ello, pero hay dificultades, y esto tiene que ver con el sistema operativo, el cual por la propia interfaz gráfica es demasiado lento (véase https://la-morsa.blogspot.com/2019/08/un-misterio-sin-resolver.html).

Entonces se me ocurrió que ya alguien debía haber hecho esta tarea en Internet y sí, hallé este sitio: http://chessbrigade.com/pgnviewer/pgn2fen.html, pero solamente puede hacer la transformación de partida por partida. Sería interesante poder transformar todas las partidas en un archivo PGN. La solución la encontré aquí: https://queenalice.com/topic.php?id=18185, la cual transforma muy rápidamente un archivo de partidas en formato PGN a FEN (esto lo hace desde la consola porque es un programa de DOS). Cabe decir que acabo de hallar otro que aparentemente lo hace en Windows, pero no lo he revisado aún (https://www.bluechillies.com/details/8077.html).

En resumen, si se tiene ya un archivo PGN en formato FEN, mi software puede hacer la búsqueda de patrones unas 50 veces más rápidamente que con el programa original de patrones que había escrito. Y desde luego, para que sea útil, no solamente debe decirme que halló una o varias posiciones donde se da al patrón, si no que debe indicar en qué partidas ocurrió el patrón que estamos buscando. Ahora estoy trabajando sobre eso que ya me parece algo relativamente sencillo.

Seguiremos informando. Una vez que tenga todo funcionando, pondré mi software a disposición de quien le interese.

Monday, May 25, 2020

Finalmente se ha publicado mi artículo de patrones


Los que siguen mi blog saben que en los últimos años he trabajado en mi doctorado en ciencias de la computación, el cual realizo en la UNAM. Uno de los requisitos obligatorios es la publicación de al menos un artículo en una revista internacional arbitrada. El asunto supone que si se acepta en ese tipo de publicaciones, con académicos que no saben quién es uno, que finalmente sólo leen lo que único está investigando, pues debe tener valor. Esa idea parece que fue de Sandoval Vallarta, físico, profesor en el MIT y del Instituto de Física de la UNAM, quien alguna vez indicó a un reportero que le preguntó cómo es que la ciencia nacional podía validarse, su respuesta fue: "publicando en el extranjero". Y tiene su propia lógica viniendo de un país que es del tercer mundo. Por ejemplo, mi asesor estudió su doctorado en el Reino Unido y no había ese requisito e incluso, les sorprendía cuando le pregunta eso a sus tutores.

Como sea, después de casi dos años desde que mandé el primer borrador del artículo, finalmente lo aceptaron. Mi asesor me decía que no tomara a mal las correcciones que me hacían, pues no eran personales. Así que aguanté todo lo que me dijeron, corregí todo lo que me pidieron y finalmente fue aceptado y publicado -según entiendo- en el número de mayo 2020. Esta revista sale cuatro veces al año.



Así pues, requisito cumplido y además contento, porque creo que la contribución vale la pena, particularmente en los patrones de ajedrez, en los que llevo trabajando desde mucho antes de que entrara al doctorado.

Cabe decir que en estos días de cuarentena se me ha ocurrido que el lenguaje de descripción podría hacerse más robusto si le añadimos la capacidad de ser programable. Es decir, por el momento, en el artículo se analiza cómo describir posiciones en ajedrez de manera generalizada, lo que haría finalmente tener la posibilidad de describir los patrones en ajedrez, cuyo mérito es que muestran que no necesariamente hay que analizar profundamente en un árbol de variantes para encontrar la mejor jugada.

Por ello mismo, añadiendo capacidad de procesamiento de los patrones en bases de partidas, se podría tener un ambiente en donde podríamos eliminar los manejadores de bases de datos (de encuentros ajedrecísticos) y darle así independencia al lenguaje de descripción de este tipo de aplicaciones.

Ya hablaré más de esto en la medida que vaya progresando en el problema. Por lo pronto, como ya dije antes, creo que empiezo a ver la luz al final del túnel.

Saturday, May 23, 2020

La cuarentena, el semáforo epidémico y las mentiras del gobierno



Seguimos en cuarentena y ya en la Ciudad de México se ha anunciado que el semáforo rojo, es decir, la condición actual de la pandemia, nos mantendrá encerrados hasta el 15 de junio. Y se supone, de acuerdo a las predicciones de un grupo de matemáticos de los cuales nadie sabe quienes son, se empezarán a abrir las actividades, de las imprescindibles hasta las no imprescindibles. Es decir, actividades como la distribución de alimentos, que son necesarias e imprescindibles, no pueden detenerse. Pero actividades como las diversiones, los cines, los teatros, etcétera, que no son imprescindibles, no empezarán pronto.

Y desde luego, cuando empiecen a haber más actividades, que se abrirán gradualmente, puede haber rebrotes y entonces ya lo digo López Gatell, se tendría que regresar a la fase anterior, regresando a la cuarentena, aunque fuese más selectivamente. En resumen, todo el problema tiene tres vertientes: por un lado el hecho de que la pandemia no puede curarse con ningún tratamiento o vacuna, otro, que no se puede perpetuar la inmovilidad social de las ciudades y finalmente, el hecho de la miserable infraestructura médica gubernamental. Y es que el gobierno está preocupado porque requiere que los casos de contagio no sobrepasen cierta cantidad porque no habría manera de atenderlos. Y entonces nos hablan de la disponibilidad de camas y de respiradores todos los días, como si fuésemos primer mundo. Pedro hay historias de enfermos que han pasado un  vía crucis para ser atendidos.

Así las cosas, el asunto es que López Gatell nos dijo que el pico de la pandemia sería el 10 de mayo. Pero no solamente no se cumplió esa fecha, a pesar de lo que dijeron los matemáticos que hacen las predicciones y que el Secretario López Gatell ha anunciado como luminarias de la ciencia en México. Y ojo, entiendo que los modelos matemáticos fallan, pero decir una y otra vez que el pico sería en un día determinado y ver que no se cumple y que además, sigue creciendo la cantidad de contagiados, habla que algo estamos haciendo mal.

Y ya no voy a hablar de los números que presentan. Hay muchas voces que dicen que hay muchos más muertos de los que menciona el Gobierno Federal. Sea como sea, el asunto es que empieza a dar impresión de que todas las medidas han sido inadecuadas o bien que no se han cumplido como se cacarea, literalmente.

Termino con eso: apuesto doble contra sencillo que saldrá la Dra. Sheinbaum a decirnos que la cuarentena se extenderá hasta finales de junio y cuando estemos por llegar ahí, dirá que se alargará otros 15 días de julio. Y puedo entender las razones, pero estamos llegando al límite de esta cuarentena. Y ojo, ni siquiera estamos hablando de regresar a las escuelas, que se supone está planeado para agosto de este espantoso 2020. Así están las cosas. Yo ya no les creo nada a las fechas que propone el gobierno.

Más sobre las imágenes hechas con dados



Hace apenas un par de días escribí sobre la imagen de Michael Jordan, creada con dados, hecho por Barbara Lynn Helman, una ciberartista. La foto del basquetbolista está hecha con pequeños dados negros con puntos blancos. Después de elaborar una versión que ya tenía para hacer imágenes -pero con fichas de dominó- me di a la tarea de simular los dados. No fue difícil pues en Internet hay muchísimas imágenes de dados como los que necesitaba.

Pues bien, debido a que el tema me era familiar, decidí replicarlo por software, es decir, me iba a evitar comprar 5300 dados para hacer algún cuadro, pues iba a simular los mismos poniendo las gráficas correspondientes a cada cara del dado, de acuerdo al tono de gris que requiriera la imagen.

Sin embargo, como ya mencioné antes, mis resultados -usando la misma imagen que usó la artista- no lo replicaba. Sí, se parecía bastante pero por alguna razón la creación con dados reales se veía mejor que en mi simulación con dados virtuales.

Así descubrí que Barbara Lynn Helman había manipulado la fotografía de Michael Jordan. El fondo de la imagen original lo oscureció totalmente -lo cual tiene sentido si consideramos que las caras de los dados pueden dar apenas seis tonos de gris: el dado marcado con un punto es el más oscuro y la mula de seis es la más clara. Igualmente, Barbara cambió el contraste y el brillo dela imagen antes de procesarla, para que la creación quedara mejor. Así que decidí manipular la imagen y sí, los resultados empezaron a parecerse más, pero aún notaba que la imagen de la artista era más clara.

Entonces decidí ver por qué no se podía ver mi imagen procesada como la creada con dados reales. Vi el video de Barbara y hallé la razón: usa dados negros que tienen puntos blancos muy grandes. Por ello, algunas partes de su cuadro parece que tienen dados blancos pero no es así, es que el dado  marcado con los seis puntos se ve muy claro. La siguiente imagen muestra un fragmento del video. Obsérvese que los dados tienen puntos muy grandes.



Entonces rehice mis dados virtuales e hice unos con puntos gordos.


Y volví a procesar la imagen de Jordan, ahora con mejores resultados. Igualmente, le agregué un marco a los dados para que se viera que estaban separados unos de otros, aunque fuese por muy poco, para dar la sensación de ser dados independientes. Esto mejoró el asunto. Así entonces, ahora mi software puede generar dados simples, con marco y con puntos "gordos". De hecho, esta el la opción que da mejores resultados.

Este es el resultado final:



Podemos compararlo contra la versión anterior (a la izquierda). Esta última versión es más clara y la razón es simple: los puntos de los dados son más grandes.


Todas las pruebas que hice, en su tamaño original, pueden descargarse de este enlace.

Finalmente, hice un último experimento, pero hora tomé una de las fotos de Instagram de Barbara Lynn Helman, y este fue el resultado (que puede descargarse en su tamaño final de este otro enlace).



Creo pues haber encontrado el problema por el cual mi software sí, hacía estas creaciones muy parecidas a las de Lynn Helman, pero que no quedaban tan bien como su trabajo. De nuevo, a quien le interese el software, puede pedírmelo a morsa@la-morsa.com y con gusto se lo mandaré de forma gratuita.

Voy a dejar un nuevo video con las mejoras del software. Puede verse aquí abajo.



Friday, May 22, 2020

Fotografías hechas con dados



Recientemente vi un video de Barbara Lynn Helman, en el cual muestra una imagen del basquetbolista Michael Jordan, hecho con 5300 dados de color negro con puntos blancos. La idea de hacer imágenes con objetos no es realmente muy novedosa y de hecho, en el curso de Proceso Digital de Imágenes que imparto en la Facultad de Ciencias de la UNAM, muestro algunas ideas al respecto.



La primera vez que vi algo al respecto fue en el 2006, en un documental sobre el matemático Martin Gardner, a quien Ken Knowlton le había hecho un cuadro con piezas de dominós (ver aquí). Así que la idea de Lynn Helman, usando dados no era necesariamente muy original. El mérito de la artista es que usó 5300 dados físicos para armar la imagen de Michael Jordan.


Martin Gardner y su cuadro hecho con fichas de dominó

Como para el curso de Proceso Digital de Imágenes ya había hecho algo parecido con fichas de dominó, decidí hacer lo mismo pero usando dados. Fue un trabajo de un par de horas, pues ya tenía realmente el software escrito. Sin embargo, cuando tuve la primera versión modificada, me di cuenta que mi resultado no encajaba con lo que había hecho Barbara Lynn Helman.

El asunto va de la siguiente manera:

  • Tenemos seis posibles dados, del 1 al 6. El 1 es el más oscuro y el 6 es el más claro. Desde luego que con tan pocos tonos de gris, por decirlo de alguna manera, el resultado siempre es complicado para que salga bien.

  • Por otra parte, quería usar la misma foto que usó la artista y después de una media hora, finalmente la hallé en Internet.

La foto original usada por Barbara Lynn Helman

  • La artista manipuló la imagen de Jordan, poniendo en negro todo el fondo. Esto ahora lo sé porque tengo la imagen que usó originalmente.

  • Curiosamente hay una foto donde está el escritorio con la imagen a medio formar con los dados y la foto que usa no tiene modificado el fondo.


Así que tomé la imagen de Jordan. La recorté lo necesario tratar de hacer una imagen del mismo tamaño que uso Lynn Helman. Me guié del video que mostró la artista en Instagram.

Y entonces procesé la iamgen y en menos de un minuto tenía ya el resultado final. Este es el resultado:


La diferencia es que yo usé 6 imágenes el decidir qué cantidad de puntos iban en cada posición lo hizo el software automáticamente. La teoría al respecto es muy sencilla:


  • Tómese una imagen a procesar
  • Cuadricúlese la imagen en pequeñas regiones cuadradas (porque los dados son cuadrados). Entonces vea la primera región y calcule su tono de gris. Este será de 0 a 255. Hay que poner el dado que se acerque más a ese tono. Como tenemos solamente seis caras de un  dado, cada una contempla unos 42 tonos de gris. del 0 al 41 usé el dado con un punto. de 42 a 81 usé el que tiene dos puntos y así sucesivamente. Haga este procedimiento para toda la cuadrícula definida.
Si comparamos ambos resultados, hallamos lo siguiente:



El resultado prácticamente es el mismo. La única diferencia es que yo no tuve que conseguir 5300 dados negros con puntos blancos.

En realidad la arrtista Lynn Helman usó la conocida teoría de los semitonos, la cual ya expliqué aquí.

A quien le interese el software, escríbame a morsa@la-morsa.com y se lo mando gratuitamente por correo electrónico. Dejo más abajo un video sobre los pasos a seguir con la aplicación escrita para crear este tipo de imágenes.