programacion_ludica

164

Upload: mario-a-morales-solis

Post on 03-Jul-2015

2.605 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: programacion_ludica
Page 2: programacion_ludica

Prólogo Existen en la actualidad una inmensa cantidad de libros acerca de la programación. La cantidad de textos sobre cómputo se ha multiplicado de manera extraordinaria y no cabe duda que la razón de esto es la red Internet y el hecho evidente del uso de la computadora personal a todos los niveles, pero cada vez más cercana a la cotidianidad. En su mayoría, los libros de programación son finalmente libros de texto, para ser usados probablemente por profesores en sus respectivas cátedras universitarias. No obstante esto, no hay muchas obras de divulgación sobre la labor de programar. ¿Es fácil? ¿Es difícil? La mayoría de la gente no intentará programar computadoras debido a una proverbial idea de que es demasiado complicado y que “eso” se estudia solamente en las universidades o es únicamente para especialistas y “nerds”. . Cabe señalar que además de esto, los libros sobre la enseñanza de la programación son áridos y poco atractivos para el común de los mortales. Si uno hojea dichos tratados verá temas como: “Uso de listas ligadas y doblemente ligadas”, “Caso ejemplo: programa de costos unitarios”, “Estructuras de datos dinámicas”, etc. Es claro que este tipo de tópicos hacen que muchos programadores potenciales simplemente dejen el libro en donde lo hallaron. Sin embargo, la computación se ha hecho innecesariamente reverente y yo soy de la opinión que la diversión puede y debe estar presente cuando se programa una computadora. No todos son textos de solemnidad doctoral o software formal y serio de hojas de cálculo, procesadores de palabras o bases de datos. Afortunadamente la computación da para más que eso y en ese sentido este libro es la propuesta que bien puede ser para enseñar a programar en algún lenguaje popular o bien simplemente como una colección de ensayos sobre cómputo, ajedrez computarizado, Internet, la inteligencia artificial, etc., temas que finalmente nos son cotidianos por la relevancia que la cibernética ha cobrado en los últimos años. Con el empeño de que la programación es de esas pocas cosas divertidas que pueden hacerse con los pantalones puestos se encaran los temas dentro de este libro. A partir de artículos que originalmente se publicaron en periódicos virtuales y reales, pero reescritos para darles forma más completa (las ideas apoyándolas con argumentos técnicos), amén de no tener las limitaciones que imperan en un artículo de 5000 caracteres, este libro pretende que el lector se introduzca al mundo de la programación y que a la larga lo motive para crear sus propios sistemas. Algunos artículos son simples reflexiones filosóficas sobre ciertos temas de interés en el mundo de la informática, otros (la mayoría), son sistemas completos que pueden ser usados por los lectores de manera libre y que contienen ideas específicas de programación. Hoy día las mega-obras del software están hechas: hojas de cálculo, procesadores de palabras y bases de datos ya son comunes en las llamadas “suites”, paquetes completos para la productividad, impuesta por el modelo económico de occidente. Todos estos grandes esfuerzos se hicieron por enormes equipos de programación. Sin embargo, hay espacio para todo género de aplicaciones y programas menos ambiciosos pero que resuelven problemas cotidianos y que pueden ser escritos –los más complicados– en un par de semanas por una sola persona, si se trabaja lo suficiente en el problema a resolver. Puede verse así que aún hay margen para todos los programadores de fin de semana, por decirlo de manera coloquial. El libro contiene un disco compacto (CD) con todo el código fuente y programas de apoyo, así como algunas carpetas con componentes para ser usados por el lector interesado así como archivos adicionales. Así pues, no se necesita necesariamente meterse de lleno en el tema y aprender a programar a la fuerza para poder usar el contenido e información aquí descrita, aunque evidentemente no le caería nada mal hacerlo de esa manera.

Manuel López Michelone Enero 2011

Page 3: programacion_ludica

Índice Primeros pasos Reloj digital Anatomía de un metrónomo Reproductor MP3 La experiencia Bach Percepción extrasensorial en casa Niveles etílicos Para ganar en las encuestas Un mago por software Software irreverente Regalo de nuestros patrocinadores Los bytes privados Gráficas Imágenes y filtros Blending Fotos recursivas en color Sopa de letras Creador de iconos Fotos al óleo FotoMorsaicos Inteligencia Artificial Conjugación de verbos regulares Cuadrados mágicos Lapsus: un corrector ortográfico inteligente Corrector fonético Creación de crucigramas Engañando a la prueba de Turing Creación de sudokus Ajedrez Creador de diagramas de ajedrez Protector de pantalla en honor de Kasparov El Secreto de los grandes maestros Calculadora de rating Elo Ajedrez a la ciega Tarjetero electrónico de posiciones de ajedrez ¿Qué tan bueno es su ajedrez? Editor de partidas de ajedrez solitario (ver capítulo anterior) Patrones en ajedrez I Patrones en ajedrez II Internet ¿Está conectado a Internet? Contra los spammers Biométrica: No es lo que escribes, sino cómo lo escribes. Cuide a sus hijos Bloqueador del ms–messenger Proyectos varios Juegos de palabras en televisión Mensajes subliminales

Page 4: programacion_ludica

Programando la Palm ¿Es usted honrado? (parte I) ¿Es usted honrado? (parte II) Bosquejo de un curso de ruso Portafolio para modelos Sintetizando la voz ¿Son sus empleados productivos? Apéndices Apéndice I Entrevista con Robert Silvers Apéndice II Programa visualizador de los fotomorsaicos

Page 5: programacion_ludica

Primeros pasos Reloj digital Cuando empecé a programar en Delphi (realmente turbo Pascal para Windows), mi primer sistema fue un reloj digital. La razón de ello es que, aunque es un proyecto simple, requiere utilizar algunos componentes del sistema y entender cómo es que Delphi maneja algunas estructuras de datos usuales. A partir de ahí, escribir un programa que actúe como un reloj digital es francamente sencillo. Primero necesitamos saber que los diseñadores de Delphi han integrado un tipo de datos llamado TDateTime y TTime (la ‘T’ inicial es una convención muy usada para decir que se está hablando de algún Tipo de datos en particular). Así, TDateTime es del Tipo DateTime (fecha y hora, en este ejemplo). Además, el sistema nos da funciones para manejar ese tipo de datos fácilmente. Para el caso que nos ocupa (no estamos necesitando más que la hora sin necesidad de la fecha), usamos el tipo TTime, y entonces definimos una variable, llamada Hora, la cual es precisamente de ese tipo. Ahora entramos a las funciones de manipulación del tiempo. Si ponemos la instrucción

Hora := )ow; El sistema regresará en la variable hora la hora actual que tiene la computadora en ese momento. Si queremos hacer un reloj digital, que vaya desplegando segundo a segundo las horas, habrá que leer el reloj de la máquina una vez cada segundo (60 veces por minuto). Para hacer esto automáticamente, se utiliza un componente de la paleta de sistema llamado Timer, cuya función es disparar un evento cada cierta cantidad de milisegundos. De esta manera, si le decimos que dispare cada 1000 milisegundos (es decir, cada segundo), el timer disparará un evento cada segundo exactamente. Entonces, simplemente en el cuerpo del timer leemos la hora del reloj segundo a segundo y si la desplegamos, por ejemplo en una etiqueta, tendremos un reloj digital totalmente funcional (claro, cambiando el tipo TTime al tipo string, es decir, Delphi nos entrtega el formato de la hora de manera muy específica, pero a través de la función TimeToStr, podemos convertirlo en una cadena de caracteres y para desplegarlo, entonces usamos el componente etiqueta.

Imagen 1 Ejecutando el reloj digital

Hasta aquí podría decirse que el proyecto funciona. Pero en un afán de hacerlo más “bonito”, busqué en Internet si había algún componente que me desplegara los números de las horas, minutos y segundos en una especie de “display” de siete segmentos, como se ven en muchísimos instrumentos tecnológicos. Encontré un componente “freeware” (es decir, totalmente gratis). Lo instalé en la paleta de Delphi y simplemente lo usé sin mayores contemplaciones. En el display de 7 segmentos se puede poner cualquier número del 0 al 9. Una vez hecho esto, el pseudocódigo del timer vendría a ser algo como esto:

Page 6: programacion_ludica

Pseudocódigo del timer

Lee la hora Pásala a una variable Conviértela a una cadena de caracteres para que sea leíble por los seres humanos Toma el primer carácter de la cadena… ¿es 1? Eso quiere decir que son ya las 12 (ojo, usamos el formato de 12 horas) Si no es 1 entonces agrega a la cadena un cero para tener 0H:MM:SS AM/PM Revisa ahora cada carácter de Horas, minutos y segundos Ponlos en el display de siete segmentos correspondiente Revisa si el décimo carácter es ‘A’ o ‘P’ (AM o PM). De acuerdo a eso, pon en la etiqueta un ‘am’ o un ‘pm’.

Termina

Después de eso me di por satisfecho. Mi reloj digital funciona perfectamente y claro, podría aún agregarle funcionalidad, como por ejemplo, ponerle sonido (que haga tic tac), o bien, que tenga una alarma. Las posibilidades suelen ser infinitas, pero en este caso no haré más. Basta con esto para que el lector tenga con qué entretenerse. El código es muy sencillo de seguir. No tiene dificultad alguna.

Page 7: programacion_ludica

Primeros pasos Anatomía de un metrónomo Mi padre era guitarrista y desde que tengo uso de razón lo vi estudiar ayudado de un aparato mecánico conocido como metrónomo. Este aparatito da una pulsación cada cierto tiempo determinado. Así, mi padre, cuando estudiaba las escalas, por ejemplo, podía hacerlas a mayor o menor velocidad, de acuerdo a las necesidades interpretativas o de habilidad en los dedos, incluso, que esté practicando en ese momento. Un metrónomo es una especie de reloj que da un tic en instantes por demás precisos. Los metrónomos más conocidos tienen la forma de una pirámide y una barra que hace el equivalente de un péndulo de reloj, pero que a diferencia de este último, que da un tic cada segundo, el metrónomo puede ajustar esa barra con un contrapeso para que vaya más rápido o más lento. Los metrónomos tradicionales tienen mediciones que van de 40 a 208 pulsaciones (o golpes) por minuto. Obviamente, teniendo a un padre profesional de la música, he visto en casa más de un metrónomo. El que usaba normalmente era uno pequeñito, rojo, como diseñado para llevárselo de viaje. Sin embargo, me mostró también uno suizo, que es como un reloj de muñeca y dentro de la carátula del mismo está el péndulo que se mueve de un lado a otro, como si fuese una manecilla más. Por supuesto que hay también metrónomos digitales, los cuales presentan en un “display” la cantidad de golpes por minuto que el usuario quiere tener. La mayoría son de baterías aunque hay, desde luego, algunos que se conectan a la corriente eléctrica de la pared. Pero sin importar el modelo del metrónomo, éste tiene su costo. Posiblemente se puede hacer de uno por alrededor de 200 a mil pesos quizás. Debido a esto, y considerando que la vida está muy cara, decidí que era momento de hacer mi propio metrónomo computarizado de manera que, usando las bocinas de la computadora, me diera un golpe en intervalos muy precisos de tiempo. La tarea parecía muy simple. De hecho, antes de programar nada, decidí hallar sonidos típicos de metrónomos, es decir, del sonido que generan cuando dan un golpe. Encontré en la red más de un sonido wav y elegí el más parecido al que he escuchado siempre en los metrónomos que mi padre tiene. Una vez hecho esto, me metí a Delphi (la herramienta de desarrollo que uso) y le pedí que generara un golpe cada segundo, usando la programación orientada a objetos. Esto es, usando un componente que dispara un evento (como el tocar un sonido) en Windows cada cierta cantidad de milisegundos. Después añadí una barra de scroll, que permite desplazar un control de izquierda a derecha para incrementar o disminuir la cantidad de golpes por minuto. Hallé la fórmula que me dice cuántos milisegundos debo poner en el componente ‘timer’, es decir, en el que dispara un evento sonoro cada cierto definido tiempo precisamente en milisegundos, de acuerdo a la cantidad de golpes que quiero por minuto. Y una vez hecho todo esto, al correr mi aplicación, encontré que mi programa, a ritmos rápidos, no funcionaba.

Imagen 1 El programa del metrónomo

Page 8: programacion_ludica

¿Qué estaba pasando? ¿Por qué no suena? Después de algunas cavilaciones di con el misterio: el componente que hace sonar el tono audible del metrónomo no tiene suficiente tiempo para que el sistema lance el evento de tocar el tono, y volverlo a hacer en el tiempo requerido. Dicho en otras palabras, a la máquina le lleva más tiempo que el necesario el tocar el tono correspondiente y no le da tiempo a hacer el que le sigue porque cuando lo quiere hacer, aún está sonando el tono anterior. Y de repente, un programa que prácticamente estaba escrito en 10 minutos se convirtió en un reto complicado. ¿Cómo hacer para que suene en los tiempos precisos? Era claro que con tiempos largos, hasta 90 pulsaciones por minuto, el sistema hacía la tarea correctamente, pero más allá de eso el sistema no podía hacer sonar el tono del metrónomo. Un poco de investigación me llevó a encontrar la rutina

sndplaysound(‘sonido.wav’, snd_async); que hacía lo que yo quería y en los tiempos correctos. Quité entonces mi componente de audio multimedia (que evidentemente le mete una sobrecarga al sistema en cantidad de instrucciones a ejecutar), y lo sustituí por éste. Y entonces todo funcionó de maravilla. Procedí entonces a ‘vestir’ el programa poniéndole una buena foto de un metrónomo real, así como agregarle los detalles para que el software se viera más bonito. Y listo: metrónomo en software en un santiamén, aunque eso sí, sin sonido realista.

Page 9: programacion_ludica

Primeros pasos Reproductor MP3 Las máquinas que podemos encontrar hoy en las tiendas tienen cualquier cantidad de artilugios: fax/módem, monitor de super alta resolución (ultraVGA que le dicen), teclado ergonómico de Microsoft (que parece que se derritió al dejarlo al sol), disco duro de no sé cuántos gigabytes, CD-ROM de 24 velocidades (al menos), bocinas de audio, roedor, conexión directa a Internet de alta velocidad, etc. Por el precio que vemos consideramos que es una ganga (cuando hace un año un equipo menos avanzado quizás nos costó 25% más de lo que anuncian ahora). Sin embargo, todo lo que nos dan sirve para bien poco si no tenemos el software que permite manejarlo. De esta manera, la conexión a Internet, por ejemplo, sólo es posible porque se tienen todos los programas que inicializan el módem, dan automáticamente las instrucciones necesarias para conectarnos, etc. Uno de los más interesantes artefactos que poseé la computadora es el CD-ROM. Este permite leer discos con datos (que son idénticos en tamaño y color a los cedés de música), y en los que les cabe una barbaridad (alrededor de 700 megabytes). Mucha gente no ignora que su lector de CD-ROM puede tocar los cedés de música. Para esto, claro está, se necesita un software que haga precisamente esa tarea. En la red (http://www.shareware.com) encontrará montones de estos programitas para prácticamente todas las plataformas de hardware e incluso Windows ya trae de fábrica una versión para esa tarea particular. Sin embargo, a veces estos sistemas tienen montones de características que francamente quizás no queremos o necesitamos. Por ejemplo, no sólo estos programas leen discos con música, sino que también tocan archivos MIDI, WAV e incluso de video (AVI o MPG). En suma, hacen prácticamente todo lo referente a lo que llamamos una parte fundamental de la multimedia. Esto se parece un poco a cuando vamos al supermercado a comprar una batería para nuestro radio. Resulta que sólo las venden en paquetes de cuatro. Y no hay vuelta de hoja, hay que comprar el paquete completo, no se puede solamente pagar la pila necesitada.

Imagen 1 El mp3 minimalista

Por esto precisamente, porque los sistemas compartibles (shareware) y otros comerciales hacen más cosas de las que quiero, decidí escribir mi propio programa lector de cedés musicales. ¿Sería fácil? ¿Difícil? Ya sospechaba que esta labor no sería demasiado complicada si se tienen las herramientas de software adecuadas. Así entonces puse manos a la obra y en Delphi hallé‚ que esta tarea es sorprendentemente sencilla. Resulta que el sistema ya tiene incorporadas las llamadas al API para manejar no sólo cedés de música, sino archivos wav, mid, avi, dat, formato de videodisco, etc. Maravilloso porque simplifica la tarea. No necesito saber siquiera cómo se encuentra la información en el cedé de música. Una ayuda más la otorgan los componentes creados ex profeso para manipular audio y vídeo (como el TMediaPlayer). Con esto, prácticamente se puede escribir un reproductor de cedés casi sin escribir código.

Page 10: programacion_ludica

Primeros pasos La experiencia Bach J.S.Bach (1685 – 1750 ) quedó huérfano a los diez años. Convivió con su hermano mayor, organista en Ohrdruf y en secreto, a la luz de la luna, aprendió a escribir música copiando partituras que su hermano no le hubiera permitido estudiar. Al ser descubierto, le confiscaron las copias, las que fueron recuperadas hasta la muerte de su hermano en 1721. Aquellos años en Ohrdruf, dieron al joven Juan Sebastian una práctica del órgano y el conocimiento de las obras para este instrumento existentes en la escuela del sur de Alemania. En 1700, para ganarse la vida, se trasladó a Lüneburgo e ingresó al coro. Fue amigo del organista Georg Böhm y conoció a grandes maestros organistas de Alemania del Norte. Como dato curioso, Bach recorrió casi trescientos kilómetros a pie hasta Lübeck para oír a Buxtehude en “Los conciertos de la tarde” (Abendmusik) en los que tocaba sus obras y las de otros compositores, conviertiendo a esa ciudad el centro musical de la Alemania del Norte. De las 222 cantatas que escribió, siete son de autenticidad dudosa y hay cierto número de fragmentos de cantatas pedidas. Además, compuso música religiosa, instrumental, conciertos, música de cámara, obras para órgano, clavicémbalo etc. Es considerado “Padre de la música” título, por demás merecido. A su muerte, la música de Bach cayó en un relativo olvido. Fue hasta 1802 que Johann Nikolaus Forkel publicó “Vida , arte y obras de J.S.Bach” y logró atraer el interés de los musicólogos. En 1829, Mendelssohn hizo ejecutar la “Pasión según San Mateo” que produjo un verdadero acontecimiento nacional.

Imagen 1

La experiencia Bach

Por otra parte, la música de Bach contiene una estructura matemática inigualable. Douglas Hofstadter, en su Gödel, Escher, Bach; an Eternal Golden Braid (1979), conecta el trabajo del músico con las matemáticas de Kurt Gödel y los dibujos de M.C. Escher. Muchas de las obras de Bach contienen una estructura matemática compleja. La música de Bach frecuentemente demanda un nivel especial de compromiso emocional e intelectual, que muchas veces no todos podemos tener. Como vengo de familia de músicos, me siento obligado a tratar el tema, aunque sea desde el reducto del cómputo. En este caso, el software en esta ocasión es en honor a J.S. Bach. Se trata de una colección de algunas de sus obras en formato MIDI (Musical Instrument Digital Interfase), el cual puede escucharse si se tiene una tarjeta de sonido. Cabe señalar que la idea de este programa surgió de repente, cuando sin querer hallé en Internet una gran cantidad de sitios dedicados a J.S. Bach y su obra. Ahí encontré toda esta música MIDI y decidí que era buen momento para recopilarla en un solo programa. Igualmente, quienes estén interesados en el código fuente, notarán el uso de los ListBoxes, el cual es uno de los componentes más vistos

Page 11: programacion_ludica

en Windows. Aquí puede observarse cómo se usan en la práctica. Finalmente, termino con una frase, atribuída al mismísimo Bach: “)o hay nada especial en tocar un instrumento. Todo lo que hay que hacer es tocar las notas justas en el momento justo y el instrumento tocará por sí mismo”. Fácil decirlo, sobre todo cuando viene de un genio de esos tamaños.

Page 12: programacion_ludica

Primeros pasos Percepción extrasensorial en casa Todos alguna vez hemos tenido precogniciones. Hemos sentido –sin causas aparentes– que algo va a ocurrir y así sucede. En ocasiones –quizás– hemos dado como un hecho que sabíamos lo que nuestro interlocutor estaba pensando, o bien, nos encontramos en casa, meditando sobre cierta persona y en ese momento suena el teléfono y para sorpresa de propios y extraños, se trata de la persona a la que le dedicábamos nuestros pensamientos. Sin embargo, todos estos testimonios no son suficientes para poder demostrar que existe la telepatía, la telequinesis (mover objetos sin tocarlos) o la percepción extrasensorial (P.E.S.). Nadie dice que la gente que haya sentido algo que después ocurre esté mintiendo. Lo que queremos decir en este caso, es que no bastan los testimonios para dar como existente este tipo de fenómenos. Hace falta un estudio más científico y serio para discernir lo falso de lo auténtico. Si se piensa analizar los fenómenos relacionados con la P.E.S., la probabilidad y estadística son las herramientas más utilizadas y desempeñan un papel preponderante a la hora de determinar la existencia real de tales acontecimientos. En este caso, se establecen los objetivos del experimento (¿qué se desea medir?). Luego, se consiguen uno o ) sujetos que realizan un gran número de conjeturas, y después se analizan sus resultados para ver si se han producido desviaciones significativas de la casualidad. Durante muchos años, los registros de estos experimentos se solían registrar a mano, cuestión muy criticada de forma persistente. Sucede además, que la mayoría de los investigadores dedicados a la P.E.S. son firmes creyentes de la misma, por lo que muchas veces, los resultados carecen de la objetividad científica mínima y por supuesto, la comunidad interesada no tarda en criticarlos por su falta de controles, entre otras cosas.

Imagen 1 Las cartas Zener, típicas en el estudio de la P.E.S

Es evidente que todo experimento científico es sesgado de una u otra manera por los prejuicios de los investigadores. Consciente o inconscientemente, la creencia que nuestra hipótesis de trabajo ha quedado confirmada nos hace perder el rigor que la ciencia impone y tales errores tienden a favorecer una creencia. Por ejemplo, en pruebas de psicosinesis, donde los sujetos tratan de influir sobre la caída de los dados, la presencia de cámaras secretas ha demostrado que los registros manuales efectuados por los creyentes, presentan errores significativos en favor de dicho fenómeno, mientras que los escépticos muestran registros similares, pero en sentido opuesto a los primeros.

Page 13: programacion_ludica

Con la aparición de la electrónica y la tecnología de las computadoras, a muchos investigadores se les ocurrió que un modo muy sencillo de protegerse de los errores inconscientes de registro era automatizar el proceso en la medida de lo posible. Dejemos que la máquina, una vez que le hayamos incorporado un eficiente elemento de azar, seleccione los objetivos, y diseñemos a la máquina de manera tal que efectúe el registro permanente e inalterable, tanto de los ensayos de la conjetura. No obstante, es claro que tales máquinas no son a prueba de fraude; existen escandalosos casos en donde los investigadores manipularon los aparatos para mejorar los resultados. Sin embargo, dejando aparte estos casos de abierta trampa, un aparato electrónico representa una excelente manera de eliminar los sesgos inconcientes en las medidas. Hagamos un poco de historia: en la década de los 30, se empezaron a construir varios artilugios para contrastar la P.E.S. en determinadas ocasiones. Sin embargo, las primeras pruebas importantes con una máquina electrónica se realizaron hasta 1962, utilizando un sistema denominado VERITAC, que había sido diseñado y construido por un empleado de los laboratorios de investigación de la Fuerza Aérea en Cambridge. Este sistema selecciona al azar dígitos del 0 al 9. Imprime un registro del dígito elegido, la conjetura del sujeto acerca del dígito que se trata, el tiempo que dura cada ensayo y el intervalo de tiempo que transcurre entre la selección del objetivo y la conjetura. Los contadores de la consola de control proporcionan información instantánea de los resultados, pero estos contadores pueden desconectarse si así se desea. Tras cada ronda de ensayos, VERITAC se bloquea y permanece bloqueado hasta que un teletipo imprime los datos. En el experimento de 1962, cada uno de los 37 sujetos completó cinco rondas de 100 ensayos cada una para tres modos diferentes de P.E.S., realizando un total de 55,000 ensayos. Cuando se analizaron los resultados, empleando conocidas técnicas de significación estadísticas, no apareció desviación alguna del azar, ni a nivel de grupo ni a nivel individual. Tampoco había diferencias significativas entre las puntuaciones obtenidas por escépticos y creyentes. C. E. M. Hansel, en su libro: “ESP: a Cientific Evaluation”, dice en la última hoja: “Si doce meses de investigaciones sobre VERITAC pueden establecer la existencia de la P.E.S., toda la investigación del pasado no habrá sido en vano. De no establecerse la P.E.S., podrían ahorrarse muchos esfuerzos y muchos científicos jóvenes tendrían la posibilidad de enfocar su trabajo hacia investigaciones que merezcan más la pena”. Para 1972, el físico Russell Targ junto con el ingeniero David B. Hurt, diseñaron un mecanismo mucho más complejo que el VERITAC original. Targ fue contratado por el Laboratorio de Electrónica y Bioingeniería de Investigación Stanford (SRI por sus siglas en inglés) y en colaboración con Harold Puthorff, físico y cientólogo (sí, adepto a las creencias de Ron L. Hubbard), decidieron dedicarse a las investigaciones parapsicológicas. Estos dos hombres cobraron cierta relevancia gracias a su pobremente controlado estudio sobre las facultades paranormales de Uri Geller, el cual es en realidad un brillante mago israelí, disfrazado de otra cosa. Puthorff y Targ consiguieron una subvención de la NASA por 80,000 dólares para realizar sus experimentos de P.E.S. con su nueva máquina. El informe final, de 61 páginas (¡1311 dólares por página!) fue publicado por el SRI bajo el título: “Development of Techniques to Enhance Man/Machine Communications”. Pero pasemos a describir la máquina de Targ. Esta es una caja que presenta cuatro paneles cuadrados, y cada uno de ellos puede exhibir una transparencia en color. Sin embargo, antes de mostrar cualquier imagen, un elemento de azar de la máquina selecciona una de las cuatro imágenes como objetivo. El sujeto trata de adivinar éste, indicando su selección al presionar el botón cuadrado más próximo a ese panel. Tan pronto como el sujeto indica su elección, se enciende una luz tras la imagen objetivo correcta con el fin de aportar retroalimentación y refuerzo. Cuando el sujeto ha acertado, suena un timbre. Un contador situado a la derecha de los paneles indica el número de ensayo (1 a 25). Un segundo contador muestra el número de aciertos. Desafortunadamente, los resultados obtenidos por Targ y colaboradores no parecen haberse hecho en condiciones de control estricto. Los detractores oficiales, entre los que se encuentran Martin Gardner, han descrito las pobres condiciones de rigor científico impuestas en dichos experimentos, los cuales no dejan de catalogar a los experimentos de Targ como chapuceros y fraudulentos.

Page 14: programacion_ludica

¿Pero siempre tiene que ser así? ¿No habrá manera de crear un sistema que elimine los errores sistemáticos en el estudio de la P.E.S.? La respuesta fue entonces crear un programa que emule todas las características de la máquina de Targ y así, estudiar cada quien, bajo condiciones controladas la posibilidad de la existencia de la P.E.S. Tomemos en cuenta la época en la que fueron desarrollados los experimentos mencionados y el hardware utilizado. Hoy, con el avance en términos de cómputo, copiar vía software la máquina de Targ es un asunto de programación relativamente trivial. La idea entonces es ésa: Reproduzcamos las características del diseño original de Targ y podremos investigar la posibilidad de la existencia de la P.E.S. en la comodidad de su propia casa. Características Principales El programa AutoPES, simula todos los elementos de la máquina mencionada. Contiene dos ventanas en la pantalla, donde la de la izquierda aparece la carta seleccionada al azar por la computadora. La ventana de la derecha se encuentra la carta que va a sugerir el sujeto a experimentación, la cual será comparada contra la elegida por la máquina para saber si fue la misma o no. En la parte inferior de la pantalla pueden verse cinco botones, los cuales contienen las imágenes de las posibles cartas que el programa puede elegir al azar. Tales imágenes representan un símbolo elemental de reconocer: Unas rayas onduladas, una cruz, una estrella, un cuadrado y un círculo. A la derecha de la pantalla existen dos contadores. Uno muestra la cantidad de aciertos obtenidos y la. otra corresponde a la cantidad de fallos realizados. Existe una imagen más, que muestra un foco, el cual se pone de color rojo si la carta elegida por el sujeto experimental no correspondió a la elegida por la computadora, o bien, se pone de un color verde, si la carta elegida por el sujeto coincide con la que la máquina escogió. Esto sugiere el refuerzo y retroalimentación que implementó Targ en su máquina original.

Imagen 2 Auto-Percepción extrasensorial. La pantalla principal

Aparte de esto, AutoPES permite guardar toda la sesión realizada con el sujeto experimental, en un archivo en disco, en donde se muestra la carta elegida por la máquina, la carta sugerida por el sujeto en experimentación y el tiempo desde que se generó la carta al azar y el que se llevó el usuario en hacer su elección.

Page 15: programacion_ludica

Comentarios y dudas razonables Ahora bien, todo investigador serio debe hacerse algunas preguntas para saber si el programa AutoPES puede ser un aliado en la investigación de la percepción extrasensorial, o bien, se trata de solamente un pasatiempo irrelevante. Yo creo en realidad que el programa tiene puntos débiles, los cuales pueden ser severamente criticados. Para empezar, y es donde creo que, tanto la máquina de Targ como el programa AutoPES, pueden contener la peor crítica, es que ambos adolecen de una función que no genera al azar una carta entre cinco posibles (para el software o cuatro en el caso de la mencionada máquina). Las funciones azarosas interconstruidas en las computadoras modernas son funciones determinísticas siempre, por lo cual, no es posible más que generar una secuencia pseudo-aleatoria, que para usos prácticos, siempre parece gobernada por el azar mismo, aunque en el fondo sepamos que se repite cada cierto tiempo. No sé para el caso de la máquina de Targ, qué método habrá usado para elegir la secuencia aleatoria, pero por las indicaciones que da Martin Gardner en su libro, todo parece concluir que siguen una fórmula pseudo-aleatoria también. Este cuestionamiento puede echar por tierra cualquier experimento de alentadores resultados de la P.E.S. Se sabe por ejemplo, que las ruletas en los casinos se nivelan perfectamente, puesto que un desnivel en el mecanismo de giro, provoca que se repitan unos números más que otros. Los casinos buscan hacer la menor trampa posible porque de entrada, ya tienen todas las de ganar desde que empieza uno a jugar. Es decir, que las posibilidades reales en la ruleta siempre están ligeramente a favor de la casa y no de apostador. Así, si el método de elección puede ser discurrido de alguna forma por el sujeto con el que experimentamos, notaremos que la cantidad de veces que dicho sujeto adivina la carta puede sugerir un resultado muy favorable a la existencia de la P.E.S., cuando en realidad se trata de un truco o la demostración de una habilidad del sujeto. Curiosamente, Gardner en su libro jamás se pregunta sobre el estado de la función azarosa gobernando la máquina P.E.S. de Targ. No obstante lo burdo del error, hay que reconocer que las cosas han cambiado mucho en 20 años. La culpa no es totalmente del buen escéptico de Martin Gardner, sino de los avances tecnológicos, que sobrepasan la velocidad de aprendizaje de las personas.

Page 16: programacion_ludica

Primeros pasos *iveles etílicos Las bebidas alcohólicas, en cantidades razonables, son un goce para el ser humano. En la mayoría de las fiestas el alcohol es invitado por omisión y en general eso hace que las reuniones sean siempre más divertidas. Por algún motivo, el alcohol está ligado, de manera indisoluble, con nuestras sociedades. Sin embargo, es claro que el exceso en la ingestión de bebidas alcohólicas puede traer consecuencias nefastas. La gente que conduce un auto en calidad de ebrio, por ejemplo, no sólo arriesga su vida sino la de los demás. Porque el alcohol hace que nuestros reflejos sean más lentos y el conducir un automóvil requiere precisamente de lo contrario a los efectos que producen estas bebidas etílicas. La ciencia ya se ha encargado de estudiar los efectos del alcohol en las personas y ha encontrado una serie de medidas que pueden considerarse bastante fiables para saber si alguien está alcoholizado o bien se encuentra en condiciones de hacer todas las labores y actos que las personas en sus cinco sentidos pueden realizar. Una de estas medidas es el nivel de alcohol en la sangre (BAL – Blood Alcohol Level, por sus siglas en inglés), la cual se mide en miligramos de alcohol por cada 100 mililitros de sangre o porcentaje en miligramos. Por ejemplo, un BAL de .10 significa 1/10 del 1 por ciento (1/1000) del total de sangre cuyo contenido es alcohol. Cuando se beben bebidas etílicas, el alcohol va directamente del estómago al torrente sanguíneo. Es por ello que uno siente los efectos del beber alcohol con relativa rapidez, especialmente si uno tiene el estómago vacío. El Bal depende de

• La cantidad de sangre (la cual se incrementa con el peso) • La cantidad de alcohol que se consume en un tiempo determinado (mientras más rápido se beba, en

esa misma medida se incrementa el BAL, ya que el hígado puede, en condiciones normales, procesar un trago por hora. El resto va directamente al torrente de sangre).

El entender los efectos de un incremento en el BAL puede ser usado para controlar la manera de beber. He aquí una lista de efectos de acuerdo a la medición del BAL:

• .02: Menos inhibición, sentimientos de calidez. • .05: relajación notable, se está menos alerta, comienza a notarse dificultades de coordinación motora. • .08: Límite para manejar un automóvil y dificultades evidentes en la coordinación y juicio. • .15: Dificultades para mantener el balance y el movimiento. Claramente borracho. • .30: Pérdida temporal de la conciencia. • .40: Pérdida grave de la conciencia. Posible muerte. • .50: Se detiene la respiración. Muchos mueren por ello.

Puede verse que los efectos más placenteros del alcohol ocurren cuando el BAL se encuentra entre .03 y .05. Los investigadores han descubierto que bajos niveles de alcohol tienen un efecto específico en el discurrir mientras que un incremento en estos niveles genera una reducción en un “auto–monitoreo”. Esto quiere decir que poco alcohol genera un estado de pocas preocupaciones y de nuestra conciencia como persona. No hay que sorprenderse, este efecto reduce la tensión y mejora la relajación del cuerpo. Algunas personas encuentran este efecto tan agradable que continúan bebiendo. Desafortunadamente este efecto relajante comienza a tener resultados negativos cuando el nivel sobrepasa .05 en donde comienza entonces a notarse falta de control emocional y definitivamente pérdida en la coordinación motora con los consecuentes resultados como “cruda” y comportamiento impropio frente a los demás. Evidentemente no hay dos personas en el mundo que reaccionen a las bebidas alcohólicas de la misma manera. Recuérdese que hay diferentes factores que determinan cómo la manera de beber lo afectará. Entre los más importantes destacan:

Page 17: programacion_ludica

i. Peso/masa corporal. En general, mientras menos masa corporal se tenga, los efectos serán más notables. Para personas del mismo peso, la cantidad de grasa es más determinante en los efectos del alcohol que en gente con músculos más desarrollados o menos cantidad de grasa

ii. Medicamentos. Si quien bebe está tomando medicinas es probable que en algunos casos esto incremente los efectos del alcohol. Consulte a su médico

iii. Fatiga. Mientras más cansado, más evidentes son los efectos al beber iv. Comida. Mientras menos coma, mayor será el efecto del alcohol v. Tiempo bebiendo. Mientras más tiempo tarde en tomarse su copa, el efecto del alcohol

obviamente será menor. Si se le da tiempo al hígado de procesar el alcohol las posibilidades de emborracharse disminuirán

vi. Contenido de alcohol en las bebidas. No importa cuántos tragos tome, lo que importa es cuánto alcohol consume

Imagen 1 Probando el software

Este somero análisis dio pauta para que me decidiera a hacer un programa de computadora que analizara el nivel de alcohol en la sangre. Verá que si está alcoholizado los efectos se verán directamente en cómo interactúa frente a su monitor. Haga la prueba.

Page 18: programacion_ludica

Primeros pasos Para ganar en las encuestas A inicios del 2006 se inició la carrera por la silla presidencial y los candidatos arrancaron como caballos de carreras en el Derby de Kentucky. Salieron a paso veloz por el triunfo y desde el día uno tuvieron montones de actividades. En esa misma semana se publicaron también las encuestas iniciales de quién era el candidato con más posibilidades de voto y de acuerdo a los números publicados por las diferentes encuestas, López Obrador iba en primer puesto, seguido unos puntos atrás por Felipe Calderón y debajo de éste, en tercer sitio, Roberto Madrazo. Los demás candidatos realmente no pintaban en la intención de voto. Al publicarse las encuestas en cuestión, algún candidato, como Madrazo, por ejemplo, dijo respetar mucho las encuestas y mencionó que su segundo lugar (¿habrá leído mal? Si todas las empresas encuestadoras lo ponen en tercer sitio) lo iba a revertir con el paso del tiempo. Llama la atención que Madrazo hable del respeto a las encuestas pero que a la malagueña se coloque sin más en un segundo puesto. Sus contradicciones son el pan de cada día. Y ni hablar de las declaraciones patrimoniales, las cuales –al menos a mí– me parecen una auténtica bofetada de burla a toda la nación mexicana. Calderón dijo tener un patrimonio de sólo unos 5 millones de pesos, mientras que Madrazo habló de un patrimonio de 29 millones de pesos. No supe de la declaración patrimonial del ‘Peje’, Andrés Manuel López Obrador, pero para como él canta las rancheras, habrá salido como el más humilde de los súper candidatos a la presidencia. Obviamente en esas fechas estábamos empezando y habría veintitantas semanas de actividad política febril. Las descalificaciones, los insultos, el descubrimiento de propiedades no declaradas, de canonjías o prebendas de uno u otro candidato se irían sabiendo en los medios y todo eso con el propósito de cambiar la intención de voto de los ciudadanos, los cuales –como nunca antes– tendrían información puntual de cada contendiente por la silla presidencial, y en donde los medios se cuidarían de no hacer evidentes sus preferencias particulares de algún candidato, so pena de ser ventilados como paleros públicamente. Pero en mi percepción de los acontecimientos, pensaba que le darían una importancia fundamental a las encuestas, sobre todo hacia el final de las campañas. Si los números reflejaban un avance notable en alguno de los candidatos, es claro que esto perjudicaría la intención de voto de los que van abajo y mejorando los resultados del que fuese lidereando en ese momento. Por ello, pensaba que Madrazo, en particular, buscaría que las encuestas lo pusiesen de líder de alguna manera y, conociendo sus antecedentes priístas, creía que el hombre era (y sigue siendo), capaz de cualquier truco, incluso los más sucios. Para ayudarlo a evitar los dimes y diretes, se me ocurrió hacer un programa que le preguntase a la gente su intención de voto. Los resultados se mandarían automáticamente por Internet a un sitio y así el candidato priísta podría saber la realidad de las encuestas. Debe saberse que los procedimientos electorales en México durante muchos años fueron, por decir lo menos, muy poco transparentes. El partido en el poder, por más de 70 años, el PRI (partido revolucionario institucional. ¿No hay contradicción entre los términos revolucionario e institucional?), inventó todo género de trampas para ganar las elecciones. Desde pagarles a los votantes por su sufragio a obligar a grupos enteros de trabajadores a votar por un candidato en particular –típico de los sindicatos mexicanos, o bien el efecto de urnas “embarazadas”, es decir el rellenar con votos ficticios a favor de alguno de los candidatos, o el carrusel, que consistía en votar tantas veces como se pudiera en una casilla, etc. Las trampas eran innumerables. De esta manera, en este mundo de tanta computadora y conteo cibernético, mi programa de encuestas lo que hace es poner tres botones para que el usuario elija uno de ellos (sobre el candidato de su preferencia). Si se vota por el PRI, dueño y señor de tantas trampas, el sistema simula que se conecta por módem a una central y descarga el voto emitido para la encuesta. En el caso de los otros dos candidatos, simplemente al querer oprimir sobre cualquiera de esos botones (pensé en “votones”, por aquello del voto), el sistema no permite oprimirlos, sino que simplemente los mueve de lugar. Dicho de otra manera, sólo puede emitirse la encuesta a

Page 19: programacion_ludica

favor del candidato de PRI, en el mejor estilo de sus trampas electorales que hemos vivido durante tantos años.

Imagen 1 Encuestas políticas amañadas

Page 20: programacion_ludica

Primeros pasos Un mago por software Una de los grandes entretenimientos del hombre ha sido el de la magia. Quizás su origen se remonte a la intención de engañar (con fines aviesos), a terceros. Sin embargo, el asunto es que hoy por hoy la magia resulta una de las grandes artes y que gracias al ingenio de los creadores de ilusiones, podemos disfrutar de actos que deberíamos considerar sorprendentes en todo sentido. La magia es pues el arte de entretener mediante trucos que aparentemente suponen una violación de las leyes de la naturaleza. Los magos basan sus prácticas en principios psicológicos y en la actualización de métodos manipulativos y mecánicos. Estos principios son la distracción, la sugestión, la imitación y el ocultamiento. Los espectadores no ven todo lo que ocurre y creen ver cosas que en realidad no suceden. Esta percepción engañosa conduce a falsas creencias, a una lógica falaz y, en definitiva, a la convicción de que el ejecutante consigue hacer cosas imposibles. Esta es la definición que da la Enciclopedia Encarta de Microsoft al respecto de la Magia Blanca. Más claro ni el agua. La intención de este artículo es intentar hacer ilusionismo utilizando la computadora. ¿Cómo hacer para que la computadora pueda realizar algún truco de esta naturaleza. La duda estaba sembrada y más pronto que tarde hallé en Internet cualquier cantidad de información al respecto de la magia, de la enorme y vasta colección de trucos, artificios y situaciones que pueden hacer creer al más inteligente las cosas más absurdas. De hecho, David Copperfield, uno de los magos más exitosos de los últimos tiempos puede hacer ilusiones verdaderamente inconcebibles: desaparecer la Estatua de la Libertad, ser cortado por una sierra eléctrica en dos partes, etc. Por supuesto que nada de esto en verdad ocurre. La Estatua de la Libertad no se ha movido de su lugar para que Copperfield logre el efecto de desaparecerla, desde luego. Cuando Copperfield vuela alrededor de un escenario, es obvio que algún truco está realizando, porque es imposible que pueda violar a la gravedad, ley a todo esto más respetada que cualquier otra en el universo. En todos los casos, lo que finalmente hace a un mago de un gran éxito es no revelar jamás el truco. ¿Cómo es que Copperfield logra ilusiones como volar alrededor de un escenario sin que se hagan evidentes poleas, cables y arneses? Sólo él y su equipo de trabajo lo saben. Por supuesto que estos trucos son conocidos por unos pocos y quien quiera hacerse de los secretos atrás de ellos es probable que tenga que desembolsar grandes cantidades de dinero. Para precisamente este artículo, el programa presentado logra un gran truco de mentalismo. El sistema le pide al usuario que elija una carta determinada (presentada en la pantalla) y la memorice. Una vez hecho esto, se le pide al mago computarizado que adivine la carta elegida por dicho usuario. El Mago, indefectiblemente, leerá el pensamiento de quien ha hecho la selección y adivinará, sin el mínimo margen de error, la carta que el usuario seleccionó. En este caso, no diré cómo es el truco porque como buen mago nunca hay que decir el secreto del funcionamiento del mismo. Sin embargo, es probable que pueda sorprender a propios y extraños con este pequeño artificio de software.

Page 21: programacion_ludica

Imagen 1 El software del Mago corriendo

Sin embargo, más temprano que tarde hallarán cómo es que funciona el programa y entonces habrá que llegar a las conclusiones de rigor. La que destaca en este caso es la de la naturaleza de la observación humana. Noten como gracias a esa peculiaridad de la manera en como prestamos atención a hechos, eventos y en nuestro caso, cartas de una baraja, podemos realizar un truco por demás sorprendente a primera vista. Como siempre, el programa podría haberse escrito de manera mucho más complicada precisamente para que costase más trabajo hallar las razones por las cuales funciona el truco. Pero la verdad esta tarea se la dejo a alguno de mis cinco lectores que sé que asumirán el reto de inmediato. Por lo que se refiere a este software, espero le divierta, pues finalmente ésa fue la intención al escribirlo.

Page 22: programacion_ludica

Primeros pasos Software irreverente Alguna vez se me ocurrió que los seres humanos hemos llegado a acuerdos tácitos en muchas situaciones. Por ejemplo, a muchos nos educan de manera que decimos muchas veces “gracias” de manera automática. Digamos que ya no lo pensamos. Son como comportamientos aprendidos y, obviamente, tienen su bondad: no tenemos que pensar para hacerlos. Nos salen como naturales. Debe haber, desde luego, comportamientos aprendidos que no son tan aceptables, pero en las sociedades se impone un esquema de conducta que, en principio, al menos, nos debiera beneficiar a todos o, en el peor de los casos, a las mayorías. Hace tiempo vi el reloj de pared que tenía un viejo amigo en la Universidad Iberoamericana. Ese reloj, en particular, lo que lo hace diferente a los esquemas conocidos, es que camina al revés, como si viésemos el reloj del otro lado del espejo. Guillermo Mallén me enseñó a hacer un reloj de esta naturaleza y ahora lo tengo en la pared del cuarto en donde normalmente trabajo. Este reloj, “del otro lado del espejo”, es un buen ejemplo de un comportamiento inesperado, rebelde, por decirlo de alguna manera. Porque, ¿quién dijo que todos los relojes deben correr con las manecillas de una manera y no en sentido opuesto? Aunque hace ya mucho tiempo de esto, se me ocurrió que, en el cómputo, la gama de cursores tradicionalmente disponibles a los usuarios, no eran suficientes. ¿Por qué no hacerse de un cursor no tradicional, rebelde en todos los sentidos? Mi plan era hacer un cursor al mejor estilo de la “Britney–señal”. Entonces, me senté a programarlo. No fue difícil, porque en Delphi estas labores resultan relativamente sencillas. Hube de hurgar un poco en la red Internet y en una hora, quizás menos, ya tenía mi proyecto funcionando. La razón de proyectos de este estilo, más allá de hacer algo irreverente o fuera de lugar, es la posibilidad de aprender algo más de cómo una computadora funciona. A mí muchas veces me sorprende ver ideas realizadas en programas que me hacen pensar cómo es que no se me ocurrió antes. Hay un vastísimo campo para la creatividad en la programación y quizá es una de las razones por las cuales haya una verdadera cantidad enorme de programadores alrededor del mundo, que día a día encuentran nuevas y mejores maneras de hacer muchas cosas, usando la computadora.

Imagen 1 ¿Qué tipo de cursor le agrada más?

Page 23: programacion_ludica

Creo firmemente en que la gente que usa una computadora debe tener cierta preparación en programación, porque muchas veces necesitamos un programita muy específico, que sería muy fácil de hacer probablemente, pero como no sabemos hacerlo, entonces tenemos que decirle a alguien, o bien, peor aún, usar programas muy sofisticados para realiza tareas por demás sencillas, algo así como matar moscas a cañonazos. Por ello, al igual que lo que pasa en un coche, que no estaría mal saber un poquito de mecánica elemental, en cómputo podría sernos útil saber programar lo indispensable. La virtud de esto es que nos daríamos cuenta de lo terriblemente difícil que es hacer ahora sistemas tan complejos, como Word o Excel, y por otro lado, tendríamos una perspectiva más certera de lo que realmente se puede o no hacer con una computadora. Igualmente, hay un tercer beneficio: no tendríamos que depender siempre de alguien que se dedique a estas labores profesionalmente, porque probablemente muchísimas tareas triviales, los mismos usuarios podrían resolverlas fácilmente. Cabe señalar que el cursor rebelde funciona por el tiempo que uno quiera. Vaya, no se “instala” permanente o indefinidamente en la computadora.

Page 24: programacion_ludica

Primeros pasos Regalo de nuestros patrocinadores El mundo moderno es sin duda vertiginoso. Aparentemente las prisas son ya parte cotidiana de la vida de todo aquel que ha decidido radicar en alguna populosa ciudad. Los medios de información supuestamente informan los acontecimientos más relevantes segundo a segundo. Si algo de suma importancia pasa en Timbuctú, lo sabemos prácticamente a los minutos de haber ocurrido. La información se desplaza por cuanto medio ha inventado el ser humano para estar en contacto con otros de su misma especie. Obviamente con los medios de información aparecieron los comerciales. La televisión gratuita está llena de ellos y lo que las empresas pagan para promover sus productos y bienes depende muchas veces de las horas en las que se desea salir “al aire”. Hay horarios triple AAA que son los que, de acuerdo a las televisoras, hay el mayor auditorio. Es claro para todos que no es lo mismo que aparezca un anuncio comercial a las tres de la mañana que a las nueve de la noche. Pero con los comerciales ha llegado toda clase de promociones fantásticas. Con la intención malévola (de parte de los genios de la mercadotecnia), de convertirnos en consumidores de todo cuanto se anuncia en la TV, se han ideado cualquier cantidad de artimañas. En algunas hay que destapar los envases de mayonesa para ver si nos hicimos de un coche. En otras promociones, de galletas saladas, por ejemplo, se trata de hallar el pase de abordar para ir a un vuelo a algún lugar paradisiaco o ya de perdis la obsoleta Disneylandia. Por supuesto que alguien ganará esos premios, pero la verdad es que casi siempre los premiados son un par de personas y los demás estamos condenados, seguramente, a comer mayonesa por el resto de la eternidad sin premio alguno que nos consuele.

Imagen 1 Regalo para el lector

Otras promociones pretenden mantener entretenido al consumidor dándole los premios a cuentagotas y por meses. Por ejemplo, la posibilidad de hacerse de una vajilla completa, incluyendo vasos, con el logotipo de alguna marca refresquera es algo por demás común y corriente. Los pepsilindros, las estampitas de quizás La Guerra de las Galaxias o Tarzán, desde luego coleccionables se pueden localizar en los centros de canje oficiales por un par de pesitos y un poco de suerte. En general los chamaquitos, que son quienes caen más frecuentemente en estas promociones, se llenan de estampas repetidas porque hay un par que son prácticamente imposibles de obtener. En realidad, independientemente de que las empresas hagan negocio con estas colecciones infinitas de estampas, vajillas, cilindros de agua, etc., lo que se observa es que tales productos promocionales terminan por invadir nuestras alacenas y cuartos. Pues bien, siguiendo con esta tónica, y considerando que los lectores merecen ser recompensados por haber sido fieles (hasta ahora) a la lectura de mis artículos, La_Morsa Software Co., en conjunto con gigantesca refresquera, hemos decidido regalar un lindo portavasos, que sin duda será la delicia de muchos. Espero les guste.

Page 25: programacion_ludica

Primeros pasos Los bytes privados Hace unos diez años, Javier Matuk, uno de los pioneros de Internet en nuestro país, me sugirió escribir un programita que sirviera como diario personal. Obviamente, por ser un asunto privado, debía contemplar la posibilidad de que no pudiese ser leído por terceras personas, sino por sólo aquel quien tuviese la contraseña correspondiente. Javier Matuk había diseñado las pantallas que debía tener el programa. Su enfoque era minimalista y evidentemente no se trataba de hacer grandes aspavientos. La esencia del programa es que debía ser sumamente simple, sin excesiva cantidad de opciones, etc. Puse manos a la obra y escribí una primera versión en turbo Pascal, con las limitaciones de su momento. El software corría en MsDOS. En ese entonces, escribir un programa de esta naturaleza representaba cierto reto. Había que tener rutinas que encriptaran los textos del autor de diario de forma tal que sólo él podría tener acceso a los mismos. Aunque la teoría ya estaba más que analizada, la implantación de un procedimiento que hiciese esto solía ser complicado. Igualmente, las interfaces gráficas no eran lo que hoy conocemos. Y al llegar a la estructura de datos que había que crear para guardar el diario privado, los días en que había sido escrito, así como la manera de acceder a los datos alimentados, pues había que proceder con cuidado, pues el formato de la base de datos del diario sería crítica para que el desarrollo pudiese hacer fácil o complicado. De hecho, muchas veces había que hacer las cosas “a mano”, es decir, paso a paso, sin ayuda, sin bibliotecas de rutinas de terceros que bien podrían resolvernos las dificultades más elementales. Vaya, que todo llevaba su buena ración de esfuerzo. Años después se me ocurrió, como un mero ejercicio de programación en Delphi, hacer la versión para Windows. Como todavía tenía el archivo con las pantallas diseñadas por Javier (en un respaldo de mis antiguos discos duros), copié hasta donde se pudo el diseño original, y así surgió la versión de Los Bytes Privados... para Windows. Obviamente la labor fue por mucho más sencilla que en su versión de MsDOS. Aquí saqué ventaja del BDE (Borland Database Engine), que es el mecanismo por el cual se pueden crear bases de datos en todos los formatos populares: Oracle, Interbase, Paradox, DBase, FoxPro, etc., de tal forma, que cuando uno tiene que acceder a los datos, el BDE nos provee de una serie de rutinas ya genéricas que hace el trabajo limpio y sin complicaciones. Cuando todo funcionó correctamente en lo que se refiere a la base de datos, la sustituí por un componente de terceros, llamado Absolute Database (http://www.componentace.com/bde_replacement_database_delphi_absolute_database.htm), el cual además, encripta la base de datos y solamente con la contraseña correspondiente puede ser leída. Aparte, no es necesario cargar con el BDE en el proceso de instalación, ya que todo esto se compila en el ejecutable de Delphi. En suma, una maravilla este componente, además porque para uso personal es gratuito.

Imagen 1 Bytes Privados… Un diario personalísimo

Page 26: programacion_ludica

Al finalizar el software, entonces procedí a crear el sistema de instalación. Usé para ello Inno SetUp (http://www.jrsoftware.org/isinfo.php), un programa para crear sistemas de instalación de software, escrito además en Delphi y con disponibilidad del código fuente. El software es totalmente gratuito y genera un archivo ejecutable que puede contener todo lo que necesitemos en nuestra instalación: tipos de letra, archivos especiales, imágenes, etc. Otra maravilla del software gratuito. Una vez realizado esto, tengo ya un paquetito completo, que debido a la fortaleza de las herramientas modernas, se escribió en menos de una semana y contempla características de encripción y seguridad informática que hace apenas unos años nos hubiese parecido casi mágico.

Page 27: programacion_ludica

Gráficas Imágenes y filtros gráficos La computación es una ciencia que nos permite, en muchos casos, regresar a esa capacidad de sorprendernos de nuestro derredor. Cuando vemos algunas de las cosas que actualmente pueden hacer los programas, llegamos a la conclusión que estos juguetes son maravillosos, pero más fantásticos aún parecen ser algunos programadores que realizan en ocasiones verdaderos actos de prestidigitación. Nos parece elemental ahora tener un procesador de palabras como Word, con diversos tipos de letras, que permite la edición e impresión de documentos de maneras hace unos pocos años inconcebibles. Pasamos a la hoja de cálculo y en verdad hay que admirarse de la cantidad de poder de manipulación de datos que tiene semejante herramienta financiera. Ni qué decir de los programas de gráficas actuales, tienen cualquier cantidad de artilugios por software que permiten modificar las fotos escaneadas, las imágenes multicolores, de cientos de maneras a través de filtros gráficos. Un filtro gráfico es un subprograma dentro de alguna aplicación, que permite modificar una imagen de alguna manera en particular. Es una transformación de un conjunto de puntos a otro (muchas veces irreversible). Ejemplos de filtros gráficos son: convertir una imagen de color a blanco y negro; cambiar brillantez o contraste, realzar bordes de la imagen, tomar el inverso o negativo de la misma, etc. Hay tantos filtros como la imaginación de cada quien. Existen compañías de software en los EEUU que se dedican a crear filtros gráficos para populares programas de manipulación como Photoshop. Cuando uno ve lo que se puede hacer con estas herramientas de software, uno se pregunta qué tan fácil o difícil debe ser el escribir este tipo de filtros. Picada mi curiosidad me puse a investigar y hallé respuestas interesantes. Empecemos por un poco de teoría. Las imágenes escaneadas, por ejemplo, son en realidad un conjunto de puntos en la pantalla (pixeles), con ciertos colores muy específicos. Nuestro ojo hace una labor interpretativa contínuamente, de ahí que un conjunto de pixeles lo veamos como una sombra mientras que otro subconjunto de puntos forman lo que parece ser es una mano, por decir algo. En las computadoras personales (así como en la TV y en otros inventos del hombre blanco) cada pixel o punto en la imagen tiene un color definido por sus tres componentes primarias: rojo, verde y azul (RGB, por las siglas en inglés de dichos colores), de tal manera que si tenemos todo el rojo, todo el verde y todo el azul en un punto de manera simultánea, tendremos el color blanco (cosa que pasa siempre, como Sir Isaac Newton demostró hace siglos, en sus estudios de la luz). Igualmente, si tenemos el componente rojo en su máximo pero las componentes azul y verde en cero, tendremos un punto colorado, etc. En las tarjetas gráficas actuales se pueden tener hasta 16 millones de colores ya que cada componente de la tripleta RGB permite 256 valores diferentes. Esto significa 256 a la tercera potencia, para un total de 16,777,216 colores en total. Ahora bien, además de los colores que se pueden generar, existe algo que se denomina la “paleta de colores”, que en manera análoga con la paleta de un pintor, tiene ya la serie de colores definidos. El hardware de la PC soporta 256 tripletas RGB en su paleta de colores y por ello, en algunas tarjetas de vídeo con poca memoria si ponemos simultáneamente en la pantalla dos imágenes con dos paletas de colores diferentes, una de las mismas (en la ventana no activa) se verá con colores que no corresponden a su paleta. Cuando hacemos esa imagen activa, entonces la imagen anterior se pone con la paleta de colores correspondiente a la segunda.

Page 28: programacion_ludica

Imagen 1 Programa de filtros (la foto muestra la famosa foto de la mujer afgana (de )ational Geographic), aplicando

el filtro mosaico Una vez sabiendo esto, manipular una imagen es mucho más sencillo. Por ejemplo, un filtro elemental es el cambiar la paleta de colores por la correspondiente blanco y negro (y sus respectivos tonos de gris). Eso se hace igualando los tres componentes RGB para cada registro. Así, si la paleta de colores tiene 256 registros, tendremos que el registro cero tendrá RBG (0,0,0), el registro uno RGB(1,1,1), el dos un RGB(2,2,2), hasta llegar al registro 255 con un RGB(255,255,255). Si queremos, por ejemplo, hacer un filtro que cambie la brillantez de una imagen, simplemente le sumamos una constante a los tres componentes de color. Si queremos más brillo, hacemos que el RGB de cada punto en la pantalla sea

RGB(Valor+Constante, Valor+Constante, Valor+Constante) El contraste de una imagen requiere de otra técnica, que tiene que ver con una matriz de transformación y siempre es más complicado de comprender. De hecho, a mí no me queda claro por qué los números de la matriz son esos y no otros. En vista de todo esto, decidí que había que investigar en vivo y en directo cómo se hacen los filtros. El programa incluido es un estudio bastante informal de algunos filtros gráficos que pueden ser aplicados a las imágenes en formato BMP y JPG. Cabe señalar que todo el código fuente está escrito en Delphi (Pascal para Windows, pues) y la intención primordial era hacerlo instructivo más que eficiente. Porque miren ustedes, cuando uno observa la velocidad con la que los filtros de Photoshop hacen su tarea, me siento como Aquiles y la tortuga en una desigual carrera, en donde claro, mi código es definitivamente tortugoso. Esto simplemente quiere decir que los programadores responsables de los filtros gráficos en los programas comerciales que usamos sí se aplicaron para generar el código más rápido del oeste. Al final de día, sin embargo, los resultados de cada filtro son los mismos en donde la única ventaja del código escrito por un servidor es que al menos se entiende cómo es que funciona.

Page 29: programacion_ludica

Gráficas Blending Los efectos visuales que hoy día se pueden hacer usando una computadora son simplemente el resultado del procesamiento digital de imágenes. Para la computadora una fotografía no es más que una colección de puntos de diversos colores, que finalmente en las entrañas de la máquina no son más que valores que van de 0 a 16 millones, aproximadamente. La razón de esto es que la computadora, a través de su hardware, ve el color como una combinación de tres números que van de 0 a 255. Esos tres números representan el azul, el rojo y el verde. Esto es lo que se llama el modelo RGB (por aquello de Red, Green, Blue, por sus siglas en inglés) y es uno de los más usados a nivel mundial. Por ello mismo, cuando se hace una transformación de una imagen, ésta siempre se basa en la manipulación de los puntos de color (los pixeles), que son un reflejo de los valores internos de sus respectivas coordenadas rojo, verde y azul. Uno de los efectos más interesantes es el del blending (término inglés que significa licuar), pero que en realidad podría considerarse como el de fusionar, en algún porcentaje, una imagen con otra. Imaginemos, por ejemplo, que tenemos una fotografía A, pero queremos sobreponerla, en un 40% (como si fuese una transparencia a un 40% del total del color), sobre otra imagen. ¿Cómo se verá el resultado de esto? ¿qué tan difícil resulta programar dicho efecto? La teoría atrás del blending es muy simple. Se trata de tomar cada punto de ambas imágenes y decirle al sistema que ponga un porcentaje que le correspondería al punto en la primera imagen y el resto (del 100%) sería para el punto de la segunda imagen. Para que esto funcione, lo mejor es separar cada punto de las imágenes en sus respectivas coordenadas RGB de manera que tengamos algo como esto:

blendpixelR := (R1 * alpha) + (R2 * (1.0 – alpha)); blendpixelG := (G1 * alpha) + (G2 * (1.0 – alpha)); blendpixelB := (B1 * alpha) + (B2 * (1.0 – alpha));

Donde blendpixelR, blendpixelG y blendpixelB son el resultado de fusionar las coordenadas roja, verde y azul del punto en la primera imagen (R1), con las coordenadas roja, verde y azul del punto en la segunda imagen (R2), respectivamente y alpha es el porcentaje que se desea fusionar la imagen A con la B. ¿Demasiado sencillo para ser cierto? El hacer esto, pensaba ¿no me hará una especie de batidero de ambos pixeles? Me di entonces a la tarea de escribir un programita que hiciese esto para ver si esto funcionaba correctamente.

Imagen 1 Blending de Aruna (la esposa del campeón mundial de ajedrez Anand) con la imagen de la conferencia de

prensa entre Anand y Aronian

Page 30: programacion_ludica

Puede verse que el efecto funciona perfectamente. Por qué funciona el programa? La respuesta es simple: estamos hablando de pixeles de color, que en la pantalla de la computadora son haces de luz de una frecuencia determinada. Por ello mismo, al combinarlos de acuerdo a la fórmula del blending, notaremos que ambas imágenes se fusionan. Cabe señalar que este comportamiento no se da en la pintura al óleo, por ejemplo, o con pinturas físicas, porque aquí la combinación de rojo, verde y azul en iguales proporciones nos daría negro, no blanco.

Page 31: programacion_ludica

Gráficas Fotos Recursivas en color Las fotografías, como ya hemos dicho antes, están hechas de puntos. Estos puntos, en diferentes tonalidades o colores representan al final de cuentas una imagen que el cerebro analiza y decide si n muestra algo reconocible o no. A partir de esta idea comencé a jugar con la suposición de poner imágenes en lugar donde había puntos. ¿Qué tal poner, por ejemplo, en lugar de puntos, la misma imagen que quiero procesar, con diferentes tonos o colores? A esto le llamé imágenes recursivas. La teoría de la creación de imágenes recursivas, es decir, imágenes que se recurren a sí mismas, (o dicho en otras palabras, imágenes creadas con otras imágenes), es verdaderamente simple. En el caso particular de imágenes creadas con la misma imagen (en tonos de gris), la teoría al respecto puede describirse de la siguiente manera:

• Tomar una imagen a procesar (la que llamaremos imagen fuente) • Pasarla a tonos de gris • Copiar esa misma imagen 20 veces pero con diferentes tonos de gris, en un gradiente que va de muy

claro a muy oscuro • Hacer una rejilla en la foto original. Tomar cada pequeña región (una sección de la rejilla), y calcular

el tono de gris de la misma. • Sustituir el tono de gris encontrado por la foto con el tono de gris más próximo.

Queda claro que hacer imágenes recursivas con la misma imagen fuente requiere de generar las imágenes que sustituirán regiones de puntos. Para el caso del blanco y negro es relativamente fácil, porque la paleta de tonos de grises no es mayor que 256 tonos de gris. Los componentes en gris para el negro, en RGB son R=0, G=0, B=0. Para un negro menos oscuro, por decirlo de alguna manera será: R=1, G=1, B=1, y así sucesivamente hasta llegar al blanco, el cual tendrá como componentes RGB las siguientes: R=255, G=255, B=255. En la decisión del diseño del software de fotos recursivas en tonos de gris, la ocurrencia más simplista fue usar 20 fotos con tonos de gris diferentes. Para el efecto deseado fueron suficientes. Sin embargo, si quisiera hacer lo mismo con fotos a color ¿qué habría que hacer? Problema de la recursión a color Básicamente la dificultad reside en que la gama de tonos que hay que tener presentes crece muy rápido en color que en blanco y negro. Mencionamos antes que 256 tonos de gris son más que suficientes para pintar una imagen blanco y negro. Sin embargo, en color, las cosas son muy diferentes. Si se quisiera tener una gama completa de imágenes (la misma imagen) con diferentes colores, ¿cuántos colores necesitaríamos usar? Una computadora personal puede desplegar actualmente millones de colores. Desde luego, no vamos a poner esa cantidad de imágenes. Quizás un cálculo conservador podría ser 256 para el Rojo, 256 para el verde y 256 para el azul. Eso hace que la cantidad de imágenes a crear sea de 768 mínimo, considerando que dejaríamos muchos colores fuera del espectro de trabajo, las cuales puede ser costoso en tiempo y espacio en disco. ¿qué otra posible solución existe? La solución es verdaderamente simple: usar una paleta de colores disminuída. Afortunadamente Netscape creó semejante paleta, con la intención que quien ve en una computadora un color, en otra, de otra marca, vea exactamente los mismos colores. Así, la gente de Netscape generó la llamada paleta websafe, que consta de 216 colores y esto da un buen margen para una gama reducida, pero razonablemente completa de los siete colores del arco iris. Desde luego que la paleta de colores websafe ya no es necesaria considerando que las tarjetas de vídeo manejan millones de colores y así, dicha paleta resulta inútil en términos generales, pero para esta aplicación, resulta formidablemente buena.

Page 32: programacion_ludica

El procedimiento es entonces parecido al de crear imágenes recursivas en blanco y negro (cuando decimos blanco y negro, hablamos de tonos de grises). Dicho procedimiento va como sigue:

• Tomar una imagen a procesar (la que llamaremos imagen fuente) • Copiar esa misma imagen 216 veces pero filtrando cada imagen con un color websafe diferente. Este

filtro es equivalente a poner una mica de un color específico sobre la imagen original. • Hacer una rejilla en la foto original. Tomar cada pequeña región (una sección de la rejilla), y calcular

el color promedio de la misma. • Sustituir la región analizada por la foto con el color más próximo.

Imagen 1 Ángeles hecha de Ángeles

Aunque el procedimiento suena bastante simplista, hay que entender cómo es que la computadora puede “ver” los colores de la región analizada y los de cada foto. En realidad todo se basa en algo que puede definirse como la distancia entre dos colores. A eso le denominamos una métrica. Para entender esto, considérese que ponemos en los ejes X, Y y Z los colores R, G y B respectivamente. Así, tenemos un sistema de coordenadas, en donde cada color de la paletta websafe es un punto en el espacio tridimensional. Si ahora, tomamos una región de la imagen a procesar y la colocamos en nuestro sistema de coordenadas, ocupará un punto en ese espacio. De ahí podemos concluir que el punto de ese color en particular podrá ser sustituido por el punto más cercano geométricamente hablando. Es decir, lo que tenemos que hacer es calcular la distancia de un punto a otro. Por suerte, la geometría analítica tiene una ecuación elemental para encontrar la distancia entre dos puntos:

Distancia(x,y) = raíz cuadrada ((Rx-Ry)^2 + (Gx-Gy)^2 + (Bx-By)^2) donde Rx, Gx, Bx, Ry, Gy, By son las componentes RGB de X y Y, respectivamente. Así, tenemos entonces una manera fácil de encontrar la distancia entre dos puntos, o mejor dicho, entre dos colores. A esto le llamamos una métrica y en este caso la denominamos “métrica euclidiana”. Lo que hacemos es, entonces, calcular el RGB de la región de la imagen fuente contra el RGB de cada una de las fotos en la biblioteca y poner la que tenga la distancia mínima.

Page 33: programacion_ludica

La opción “Estilo Post-it” Hallé en una página de Internet a alguien que con los populares post-it (esas hojas de 3x3 pulgadas), generó una imagen completa, un mosaico sencillo hecho con este elemento. Se me ocurrió entonces que podía usarse el programa de imágenes recursivas para generar mosaicos al mejor estilo Post-it. Si nos vamos a la raíz del problema, un mosaico Post-It es simplemente un mosaico de cuadros de colores sólidos (en lugar de usar la misma fotografía, como en las imágenes recursivas).

Imagen 2 Los post-it virtuales

Como el programa de las imágenes recursivas ya calcula el color promedio de cada región a procesar y la compara contra la paleta web de colores, se me ocurrió que se podían tener imágenes de Post-It virtuales, los cuales generaría de diferente color (los 216 colores de la paleta web). Para que los Post-It se vieran más reales, se me ocurrió que debían ser procesados con algún programa de imágenes o de animaciones que le dieran cierto valor de imagen fotorrealista. Gabriel Martínez Valois me ayudó generando siete imágenes de Post-It virtuales, las cuales añadí a mi programa. Si Ud. en lugar de crear una imagen recursiva, decide que quiere un mosaico Post-It, encienda la opción “estilo Post-It” y listo. El sistema usará la colección de Post-it virtuales en lugar de usar la imagen original para generar el mosaico final.

Imagen 2 Marga, en el primer resultado con post-it

Page 34: programacion_ludica

Problemas detectados El software usa la paleta websafe, la cual contiene muchos tonos pastel. El efecto final es interesante, pero sin duda muy pastel. La creación de las 216 imágenes se hace espectacularmente rápido. Se hizo hincapié en el desarrollo de este software en la necesidad de que esta parte de creación de imágenes fuese muy, pero muy rápida. Imágenes de más de los 3 megas en total no pueden ser creadas. Más allá de ello el sistema de generación de mosaicos recursivos generará un error y no podrá guardar a disco la imagen generada. Esto, repetimos, es un problema de la librería de manejo de imágenes JPG de Delphi y no puede ser, por el momento, solucionado por el autor del software. De hecho, imágenes mayores de 16 megas es un problema enorme para el sistema operativo Windows. Es posible crear fotos recursivas usando una imagen fuente y otra biblioteca distinta de imágenes. Para ello, primero procese la colección de imágenes que desea. Una vez hecho esto, cargue la nueva imagen y procese. El sistema usará la biblioteca generada, aunque sea de otra foto fuente. Es un efecto final también interesante .

Page 35: programacion_ludica

Gráficas Sopa de letras Alguna vez, cuando de niño me daban sopa de letras, se me ocurrió que se podía jugar a hacer frases con las letras de pasta que flotaban por todo el plato sopero. Pero esto es meramente un recuerdo de la infancia. Más adelante, cuando entré a la Universidad, mi primer curso de programación fue en Fortran, en la facultad de Contaduría y Administración. No recuerdo cómo fui a parar allá considerando que yo estudiaba en la facultad de Ciencias y que todo lo demás era por definición “chafa” frente a lo que nos podían enseñar en mi escuela. El caso es que no aprendí Fortran, porque el profesor de dicha asignatura se la pasó mostrándonos carteles que imprimía en las enormes impresoras de las máquinas grandes de la UNAM. Cabe recordar que el mundo no es como lo conocemos ahora. En mis tiempos de estudiante en Ciencias, no tan lejanos a todo esto, las impresoras solamente existían en grandes tamaños y nadie en su casa podía soñar con tener una. Es más, dichos artefactos eran de tambor, lo cual imprimían caracteres como de máquina de escribir a gran velocidad. Pero regresando al asunto, el maestro en cuestión mostraba carteles hechos a partir de símbolos de impresión, que a lo lejos mostraban a la Monalisa, a una despampanante mujer desnuda en la playa, etc. Sin duda este arte por computadora era meritorio, aunque yo siempre sospeché que el profesor estaba usando algún programa de la IBM, porque todo parecía diseñado para esas impresoras. La técnica usada era muy simple: tomaba una región de una foto escaneada (asunto que no hay que olvidar tampoco, era prácticamente imposible de hacer, pues los scanners eran muy costosos), calculaba el tono de gris de dicha región y al imprimir sobre-encimaba letras para dar la cantidad de gris necesaria. Mientras más letras eran encimadas en la misma posición en el papel, más oscura era esa parte. Visto de cerca se podían reconocer ciertas letras a veces. Vista de lejos, la impresión mostraba una imagen fantástica. Sopa de Letras es un programa para generar imágenes a partir de letras, pero considerando que las limitaciones del pasado ya han sido superadas. Las primeras impresoras, por ejemplo, no podían imprimir imágenes como hoy estamos acostumbrados. Así, la única opción en ese momento era traducir, por decirlo de alguna manera, esas imágenes a letras las cuales al imprimirse se veían desde lejos, desde luego, como la imagen original. La idea es sugestiva y desde hace muchos años se ha dejado sistemáticamente esta tarea a generaciones de programadores. IBM fue quizás de los primeros en crear este tipo de imágenes usando sus enormes computadoras e impresoras, las cuales hoy día parecen gigantescos dinosaurios a punto de extinguirse.

Imagen 1 Logotipo de Sopa de Letras (cortesía de Juan López)

Page 36: programacion_ludica

Teoría de operación Para crear este tipo de imágenes, lo que básicamente debe hacer el software es:

• crear una rejilla sobre la imagen a procesar • tomar cada región de la rejilla y ver su tono de gris • sustituir el tono de gris por la letra más adecuada • continuar así hasta terminar con a imagen

Si se están considerando imágenes en color, primero se saca el color promedio de la región y se pasa a gris. El tamaño de la rejilla es importante. Si las regiones son muy grandes, las letras que sustituyan a las regiones de color no podrán mostrar una imagen muy bien definida. Si las regiones son muy pequeñas, la imagen con caracteres resultará mucho mejor definidas.

Imagen 2 Ventana principal de Sopa de Letras

Ventajas de la modernidad Debido a que la vida moderna nos permite tener imágenes escaneadas fácilmente hoy día, al igual que modernos sistemas de programación, incluyendo el lenguaje de descripción HTML para páginas web, podemos hacer mejoras incluso sobre la idea original. Por ejemplo, en HTML están permitidas las letras de color. El enfoque de los creadores de HTML fue dotar a cada letra en la pantalla de un color determinado dentro de los 16 millones disponibles en la paleta RGB. Esto permite una inmensa gama de colores. Si se tiene una imagen de múltiples colores, ésta puede pasarse no sólo a tonos de gris, sino que a letras de colores sustituyendo la región. Los resultados finales de esta idea son verdaderamente agradables y sorprendentes. Por ello, la salida (los resultados) de procesar una imagen, se presentan como una página HTML que puede verse con Internet Explorer o Netscape Navigator, Mozilla Firefox, etc.

Page 37: programacion_ludica

¿Qué tipo de imágenes puede hacer Sopa de letras? El procesamiento de las imágenes puede ser en una de las siguientes modalidades:

• Colores SI* letras. Aquí se calcula el color de la región y se imprime una ‘M’ sobre cada color para que se vean todos los tonos. El resultado es una página HTML (guárdese con extensión .HTML para ver la imagen en su navegador de Internet)

• Tonos de gris. Aquí se calcula el tono de gris de la región (si hay color se pasa primero a tono de gris) y se imprime una ‘M’ sobre cada tono hallado. El resultado es una página HTML (guárdese con extensión .HTML para ver la imagen en su navegador de Internet)

• Letras blanco y negro. Aquí se imprime sin la propiedad de las letras en HTML. Sirve particularmente cuando la impresora solamente puede imprimir letras blanco y negro. Usado normalmente en las viejas impresoras de matriz de puntos. El resultado es una página de texto (TXT) (guárdese con extensión .txt y use Word para ver la imagen)

• Colores + letras tonos de gris. Aquí cada caracter tendrá el color de la imagen y la letra correspondiente al tono de gris asociado. El resultado es una página HTML (guárdese con extensión .HTML para ver la imagen en su navegador de Internet)

• Tonos de gris + letras tonos de gris. Aquí cada caracter tendrá el tono de gris de la imagen y la letra correspondiente al tono de gris asociado. El resultado es una página HTML (guárdese con extensión .HTML para ver la imagen en su navegador de Internet)

• Colores con texto. Aquí cada caracter tiene el color de la imagen pero las letras impresas salen de una cadena de caracteres que el usuario alimenta (máximo 255 caracteres). El resultado es una página HTML (guárdese con extensión .HTML para ver la imagen en su navegador de Internet)

• *aipes. Aquí el programa sustituye cada región analizada por una carta de la baraja. Se necesita tener instalado el tipo de letra truetype en la máquina. Si ud. instaló el programa con el software de instalación entonces la instalación de fonts será automática. El resultado es una página de texto (TXT) (guárdese con extensión .txt y use Word para ver la imagen)

• Fichas de Dominó blancas (con puntos negros). Aquí el programa sustituye cada región analizada por una ficha del dominó. Se necesita tener instalado el tipo de letra truetype en la máquina. Si ud. instaló el programa con el software de instalación entonces la instalación de fonts será automática. El resultado es una página de texto (TXT) (guárdese con extensión .txt y use Word para ver la imagen)

• Fichas de Dominó negras (con puntos blancos). Aquí el programa sustituye cada región analizada por una ficha del dominó. Se necesita tener instalado el tipo de letra truetype en la máquina. Si ud. instaló el programa con el software de instalación entonces la instalación de fonts será automática. El resultado es una página de texto (TXT) (guárdese con extensión .txt y use Word para ver la imagen)

Page 38: programacion_ludica

Imagen 3

Ilse construida con la letra ‘M’ en colores Otras Opciones

• Se puede apagar/prender (normalmente aparece apagado), si se quiere ver cómo el software va procesando la imagen. Esto aparece en la opción ‘Seguir proceso’.

• Se puede cambiar el tamaño de la letra para la salida en HTML. Los tamaños van de 1 a 9. • Se puede cambiar el tamaño de X y Y en la región a procesar.

)otas importantes Las opciones que usan tipos de letra como cartas, o fichas de dominó, tienen que procesarse con Word. Así, se procesa la imagen y el archivo se carga a Word directamente como un archivo de texto. Una vez cargado, sustituya las letras que se ven en el texto por el tipo de letra (font) que desea, puede ser el de cartas, dominó de fichas blancas con puntos negros y el de fichas negras con puntos blancos. Al sustituir Word el tipo de letra, verá su imagen. Cabe destacar que si su imagen es muy ancha, probablemente no quepa la imagen en Word (que es en realidad un texto). Intente cambiar el formato a landscape (apaisado) o reduzca el tamaño de la letra si es que aún así no puede ver la imagen. Recuerde que Word cuando no le cabe, pasa la línea abajo. Para Word su imagen no es más que un texto. No lo olvide.

Page 39: programacion_ludica

Gráficas Creador de Iconos Un icono o ícono, es –de acuerdo al diccionario– una representación religiosa pintada o en relieve característica del arte bizantino. Así decimos, por ejemplo: “Volvió de Rusia cargada de iconos”. También es un símbolo que mantiene una relación de semejanza con el objeto que representa, como en este ejemplo: “para entrar al diccionario, haz doble clic en el icono.” En computación, en el diseño gráfico tal vez, un icono es una imagen gráfica, que suele ser pequeña, que representa un acceso directo, un programa, un archivo, un enlace, o cualquier otro recurso. El ícono suele ser una buena forma de identificación para lo representado. En este caso vemos que los iconos han invadido las computadoras y los dispositivos móviles. Así, los teléfonos “inteligentes”, los celulares modernos, tienen pantallitas a color con iconos que representan un sinnúmero de programas. De hecho, pienso que para los diseñadores de estos iconos es cada vez más difícil mantener la relación de semejanza entre el dibujo y lo que representa. Por ejemplo, el icono de CorelDraw es en realidad el dibujo de un globo aerostático. Y sí, quien lo diseñó probablemente pensó en posicionar el logo y la marca, pero es claro que el icono de CorelDraw no tiene nada que ver con las funciones que hace el programa. Encontré en el estupendo libro “Beyond Photography, The Digital Darkroom”, por Gerard J. Holzmann (http://www.spinroot.com/pico/a4.pdf), lo siguiente al respecto de este tema: Por ahí de 1983, en los Laboratorios Bell, ahora AT&T, un grupo de unos 50 investigadores empezaron a trabajar con un nuevo tipo de terminal de computadora. Inmediatamente pusieron manos a la obra para sacar provecho de sus capacidades gráficas. Luca Cardelli (que al momento de escribir esto, había cambiado de trabajo, ahora para DEC Systems Research Center, en Palo, Alto), había pensado en una manera de convertir fotos manualmente en pequeños iconos en blanco y negro. (Cabe aclarar que en 1983 no había cámaras digitales, ni scanners caseros, ni todos estos dispositivos que ahora son comunes en muchísimas casas y oficinas). Pues bien, Cardello halló una víctima, la foto de Edsger W. Dijkstra, con la que decidió trabajar. El proceso fue así:

• Reducir la fotografía con una copiadora Xerox, para que quedara al tamaño de una foto pequeña, de 4x4 cms, y en alto contraste.

• Dibujar una rejilla (matriz) de 12x12 puntos y hace4r entonces un patrón colocando puntos negros o blancos, de acuerdo al porcentaje en que en alguna región de la foto había más blanco o más negro.

El resultado de este proceso dio lo siguiente:

Imagen 1 Dijkstra como icono

Page 40: programacion_ludica

Luca hizo una demostración de su programa poniendo el icono de Dijkstra como si fuese una pelota rebotando en la pantalla. Los científicos se emocionaron con la idea y digitalizaron más imágenes manualmente, pero pronto se aburrieron del proceso.

A alguien entonces se le ocurrió usar esta idea en el nuevo servidor de correo, que podría anunciar la llegada de mensajes a las terminales mostrando el icono de quien lo enviaba. Luca Cardelli entonces escribió una primera versión que llamó vismon (con cierto humor considerando que existía un programa que se llamaba sysmon).

Rob Pike habló con los investigadores y les tomó fotografías de 4x5 pulgadas con su cámara Polaroid. Y aunque nadie sabía para qué Pike quería estas fotos, todos colaboraron, desde la secretaria hasta el director ejecutivo. Las imágenes fueron entonces digitalizadas usando un scanner que se pidió prestado a los colegas del departamento de procesamiento de imágenes.

En un par de días, se tuvieron cerca de 100 fotografías que fueron la fuente principal para los experimentos de procesamiento de imágenes. El siguiente paso en esta secuencia ocurrió cuando Rob Pike y Dave Presotto desarrollaron el software para una base de datos centralizada de fotografías iconizadas. Ellos le llamaron a esto el servidor de rostros.

El programa vismon se reescribió para usarse con el servidor de rostros. Desde entonces, vismon ha sido uno de los programas más populares en las computadoras de Bell Labs. en ese tiempo. El servidor de rostros se usó por el programa de correo para anunciar la llegada de mensajes electrónicos y por el manejador de la impresora laser, para identificar al propietario de quienes mandaban trabajos para impresión.

Imagen 2 Cómo se veía vismon corriendo

La imagen anterior muestra los iconos de quienes mandaron correo a un usuario. La barra de la izquierda viene del programa original sysmon, que muestra la carga del sistema en ese momento. Incluir las fotos de los nuevos colegas fue algo que se hizo en la base de datos del servidor de rostros, como algo de rutina.

La foto se digitaliza en 512x512 puntos, se sacan semitonos y se convierte en un icono de 48x48 puntos, con un programa llamado Mugs, escrito por Tom Duff. El icono entonces se incluye en la base de datos mantenida por el servidor de rostros.

Pues bien, la idea me pareció interesante y además, es actualmente mucho más simple y fácil de implantar, considerando los avances, tanto en hardware como software. Decidí entonces mi estrategia: Tomaría una imagen, a la cual le aplicaría algún proceso (ver más adelante), para acomodar el resultado en una rejilla que fuese de 16x16, 24x24, 32,32, 48x48 o 64x64 pixeles, que son más o menos las resoluciones que se usan actualmente en la iconografía de los sistemas operativos actuales.

.

Imagen 3

Page 41: programacion_ludica

Pantalla de inicio del creador de iconos

En lugar de tomar la imagen y reducirla, lo cual en algunos casos pierde la imagen cierta precisión por los algoritmos que se usan para hacerla más chica, se me ocurrió aplicar el filtro mosaico a la imagen, con precisamente las diferentes resoluciones: 16x16, 24x24, 32,32, 48x48 o 64x64. De esta manera, tomaría un punto de cada región dentro del mosaico y la pintaría en una imagen nueva. Desde luego que este proceso, como el de reducir una imagen, tiende a perder información, pero en mi opinión, para este problema en particular, esta técnica parece ser más conveniente que usar los algoritmos para reducir una imagen.

.

Imagen 4 El programa ya habiendo procesado una imagen

Una vez teniendo la imagen procesada, usando el API correspondiente en Windows (recuérdese que usé Delphi bajo el sistema operativo de Microsoft), salvé la imagen en el formato .ico, que es el que usa precisamente Windows.

El software es muy sencillo de usar. Los pasos a seguir son:

• Se lee la imagen que se desea iconizar, valga el término. • Se usa la opción de menú (Procesar), la cual permite -si se desea- pasar antes la imagen a tonos de

gris por si no se desea que se procese en color. • Al término del proceso aparecerá una ventana que simplemente pide al usuario con qué nombre se

quiere salvar la imagen procesada, en formato .ico.

Page 42: programacion_ludica

Gráficas Fotos al óleo Una característica de las imágenes en la computadora es que son digitales, es decir, hechas de dígitos, de números, pues. Cada dígito representa un punto en la pantalla, y normalmente el valor que vemos corresponde al color que ese punto tiene en la imagen. De esta manera, las fotografías digitales (ya sean escaneadas o tomadas con alguna cámara digital), son en realidad una matriz cuadrada de pixeles (puntos en la pantalla), que bien puede ser en color o en blanco y negro. En la medida en que la tecnología ha progresado, hemos pasado de imágenes de 256 colores a las que nos pueden mostrar alrededor 16 millones de colores. Actualmente, cualquier tarjeta de video que se precie de serlo muestra los tres componentes de color R(ed - rojo), G(reen - verde) y B(lue - azul) en cada pixel (o punto), el cual puede ser un valor entre 0 y 255. De esta manera, 256 x 256 x 256 nos da 16,777,216 posibles colores. Cabe señalar que el ojo humano no puede ver semejante espectro de colores, pero es un hecho que la computadora puede desplegarlos. Ahora bien, cada fotografía digital es en realidad una aproximación sobre lo que se fotografía tomando una cámara analógica, es decir, una que tenga filme. Por ello mismo, “el grano” de la cámara digital es la precisión con la cual puede distinguir los detalles. Por ello vemos que hay cámaras digitales de 4, 8, 10 o más megapixeles (estas últimas son para los profesionales probablemente). De hecho, tampoco ya el ojo humano no distingue entre, digamos, 8 y 10 megapixeles. De esta manera, la resolución de las imágenes ha crecido y con ello la necesidad de usar cada vez más bytes en los archivos y memorias donde se guarda. Con el advenimiento de la tecnología digital de imágenes y su gran aceptación en el mercado, estamos viendo desaparecer las cámaras analógicas y los filmes. Se acabó el revelado y los costos asociados a esto. Además, con la generación de imágenes digitales, también nació la posibilidad de post procesarlas para generar efectos en ellas. Photoshop, por ejemplo, es uno de los programas más populares para manipulación digital de imágenes. Filtros Digitales La manipulación de una imagen digital se denomina genéricamente como un “filtro”, el cual convierte una imagen en alguna otra cosa. Existen filtros que son reversibles, mientras que también los hay aquellos que no lo son. De acuerdo a las necesidades, se pueden tener diversos filtros o transformaciones que pueden aplicarse a una imagen incluso ya filtrada. Los resultados suelen ser sorprendentes. Muchos filtros gráficos, sino es que todos, se consideran transformaciones gráficas basadas en una matriz llamada también “convolución” (no se asuste por la palabra, es sólo un término que da precisión a todo esto). Estas convoluciones es el procesar segmentos de la imagen a partir de una submatriz (que puede ser de 3x3, 4x4, 5x5, etc.) de pixeles, que va recorriendo la imagen completa. El resultado final convierte la imagen original en alguna otra cosa. Existen filtros para reconocer bordes, para quitar ruido, para meter ruido, para hacer más precisa una imagen, para hacerla menos precisa, para deformarla, etc. Las aplicaciones son infinitas. El filtro Oleo Digital (en tonos de grises) En el libro Beyond Photography (The Digital Darkroom), de Gerard J. Holzmann, que trabajó algunos anos en los Laboratorios Bell1, el autor nos habla de cómo alterar imágenes. Ahí presenta la fotografía de Dennis Ritchie (uno de los inventores del lenguaje C), y al procesarla la convierte en la misma imagen, pero como si fuese pintada al óleo. De acuerdo al autor, lo que hace es esto: “Para cada punto en la imagen, un programa calcula el histograma de los 36 bordes del derredor [del punto de interés] y se asigna el valor [al propio punto de interés] el valor que contenga la mayor frecuencia. El resultado es casi una pintura al óleo”.

1 http://www.spinroot.com/pico/a4.pdf

Page 43: programacion_ludica

Al poner manos a la obra y diseñar mi primer programa que ejecuta este tipo de filtro, cometí el error de pintar la imagen filtradas sobre la imagen original y el resultado simplemente era muy pobre, por lo cual me di cuenta que había que desplegar el resultado en una segunda imagen. De pronto entendí el error y es un instante se solucionaron los problemas que iba teniendo. Decidí, sin embargo, no usar 36 puntos, sino 49, para que así mi matriz de convolución tenga un punto central en [4,4]. Con una convolución par no se puede tener un punto central.

Imagen 1 La imagen de la izquierda es la de Dennis Ritchie (el creador del lenguaje C), como aparece en el libro de

Holzmann. A la derecha aparece mi propia versión del algoritmo descrito. ¿Cuál le gusta más a usted?

Este programa funcionaba originalmente sólo con imágenes en blanco y negro (tonos de grises), pues en imágenes de tonos de gris hay nada más 256 tonos y además, las componentes RGB de cada pixel tienen el mismo valor, es decir, R=B=G, lo cual hace sencillo el encontrar el histograma de frecuencias de color.

Imagen 2 Marianna al óleo en tonos de gris

Page 44: programacion_ludica

El filtro Oleo Digital (en color) Para poder generar imágenes al mejor estilo óleo, en color, se necesita hacer una modificación que parece trivial, pero que no lo es. La dificultad es que al querer pasar a color, tenemos que las imágenes pueden contener poco más de 16 millones de colores. Esto, obviamente hace el problema un poco más difícil, pues no podemos generar un arreglo de 16 millones de colores (para seguir con la técnica usada en la parte en tonos de gris), pues es totalmente ineficiente y absurdo. Así, aquí hay que contar y crear el histograma de frecuencias de manera más sencilla. Después de dos semanas de darle la vuelta al problema, finalmente hallé una solución simple. La implementé y de pronto ya tenía mi programa que generaba el óleo digital en color. Al poder hacer el histograma y hallar cuál es el valor de mayor frecuencia, simplemente lo pinto para cada punto en la pantalla. No obstante, encontré un par de problemas: Uno fue el hecho de que en color, el filtro a veces mete ruido cuando hay puntos blancos y entonces aunque en la región haya pocos puntos blancos, como que los amplifica, dando un resultado poco aceptable. Así, decidí que necesitaba usar el filtro “blur” para quitarle ese ruido. El resultado final es ahora mucho más aceptable. El segundo problema fue el tener que aplicar el “blur” en cuatro ocasiones para que el ruido no deseado desapareciera. Es claro que el filtro hace una imagen que pierde precisión contra una fotografía real, pero se asemeja, sin duda, a un cuadro hecho al óleo. Cómo se usa el programa El sistema permite cargar imágenes JPEG y BMP. En el menú de Archivo podrá leer la imagen que quiere procesar. Al cargarla a memoria, ésta debe desplegarse en ambas imágenes del programa. Use entonces la opción de Procesar y observará ante sus ojos el trabajo del filtro. Se puede elegir entre color y tonos de grises. El proceso es totalmente automático. Una vez terminado esto, puede guardar la imagen procesada (como JPG o JPEG). Y eso es todo. Cabe señalar que la resolución de la matriz puede cambiar el resultado del procesamiento. Hay tres opciones: matriz de 3x3, de 5x5 y de 7x7. Elija alguna de las opciones (por omisión es 7x7) y procese la imagen. Guárdela y procese de nuevo la imagen (cargándola de nuevo), con las otras dos matrices. Compare y decida qué resultado le gusta más. Dependiendo de la imagen en particular a procesar, a veces una matriz de 5x5 es la adecuada, otras veces es preferible la de 3x3 o la de 7x7. No hay un parámetro que establezca la mejor opción.

Imagen 3 )adia procesada con el filtro óleo en color (16 millones de colores) y con “blur” añadido.

Page 45: programacion_ludica

El filtro Blur Este tipo de filtro permite limpiar de ruido una imagen. Se usa para quitarle detalle a las imágenes y en el caso del filtro óleo, en ocasiones es necesario utilizar previamente el filtro blur y después procesar. Por ejemplo, se encontró que usando cuatro veces el blur antes de procesar con el filtro óleo la imagen en color, los resultados mejoraban. Sin embargo, aquí se deja como una opción del menú para que el usuario utilice este filtro para ver si el resultado final le complace o no. Se recomienda usar blur cuando se vaya a procesar una imagen en color.

Page 46: programacion_ludica

Gráficas FotoMorsaicos

El 22 de diciembre de 1997 la revista Newsweek presentó la imagen de la Princesa Diana creada con una miríada de pequeñas fotografías de flores (ver figura 1). El autor de semejante idea era Robert Silvers, estudiante graduado del M.I.T. que actualmente tiene una empresa que se dedica precisamente a estas labores. Silvers creó los Fotomosaicos, los cuales son mosaicos hechos de fotografías (en lugar de hacerlos de colores sólidos). Todas las pequeñas imágenes, cuando se ven en conjunto forman la fotografía original. A partir de ello Silvers saltó a la fama y en poco tiempo se empezaron a ver más de estas imágenes en diferentes portadas de revistas como Wired, IBM System Journal, Life Magazine e incluso Playboy.

Figura 1 Silvers ha creado una empresa llamada Runaway Technology (http://www.photomosaic.com), la cual se dedica a hacer fotomosaicos a pedido específico. Tales pedidos personalizados pueden costar entre 10,000 a 80,000 dólares. Entre sus trabajos Silvers ha hecho fotomosaicos de algunos personajes de la Guerra de las Galaxias y de Disney, entre otros. Sus trabajos se venden por alrededor de 20 dólares en afiches (posters) en diferentes tiendas, incluso dentro de la red Internet. Obviamente la pregunta es ¿cómo los hace? Desafortunadamente Silvers no ha hecho públicos sus algoritmos. La justificación para ello es que el autor no pretende crear una compañía que venda software (lo cual sería un éxito seguramente por un tiempo), sino que intenta hacer arte, por lo cual mantiene en secreto los algoritmos usados. Se sabe sin embargo que usa una computadora Silicon Graphics con 30 gigabytes en disco y 256 megabytes de RAM. Tiene alrededor de 100,000 fotografías ya digitalizadas y durante el proceso de selección se consideran, de acuerdo al mismo autor, cientos de aspectos para sustituir un pedazo de la imagen original por una fotografía. Sin embargo, él mismo declara que parte del proceso en la creación de los fotomosaicos es manual, es decir, no se hace automáticamente todo por el software que él mismo ha escrito (ver Apéndice I). Fuera de la mera curiosidad de cómo se pueden generar fotomosaicos de esta naturaleza, hay un interés académico, porque independientemente de las aplicaciones obvias dentro del arte y el entretenimiento, los fotomosaicos pueden servir para proteger los derechos intelectuales de las obras pictóricas, por ejemplo mostrando un fotomosaico con imágenes plenamente identificadas por el autor del mismo. Esto podría dar suficiente información sobre cierta imagen y aún así no poderse usar para otros propósitos. Otra aplicación potencial es la de un método de organizar información (bases de datos) o incluso en esquemas de criptografía

Page 47: programacion_ludica

y compresión de imágenes. Los fotomosaicos son un buen ejemplo de técnicas de diagonalización en la teoría de la complejidad y bien pudiese tener aplicaciones en este campo también. El estudio de la creación de buenos fotomosaicos no ha sido analizado de manera formal. Hay varias razones para ello: Una es que el área de trabajo es relativamente nueva (Runaway Technology se creó apenas en 1996); otra es que existe relativamente poco software que hace esta tarea y además los algoritmos de Robert Silvers (el máximo exponente sin duda), son propietarios y por ende desconocidos para cualquier otro excepto el autor. Otra razón es que la calidad de los fotomosaicos depende en parte de las propiedades del sistema visual humano y hay muy pocos estudios al respecto y los que hay parecen ser muy empíricos. Por ejemplo, ¿Cómo decidir qué imagen debo sustituir por una región o pedazo de la fotografía que estoy procesando? esto es, ¿cómo definir una distancia gráfica que defina qué tan cerca está un color de otro? ¿Qué tan grande puede ser cada mosaico antes de que se pierdan los detalles de la imagen original? ¿Cuántos mosaicos debe tener la biblioteca de imágenes? ¿Cuántas veces se puede usar un mosaico antes de que se convierta en monótono? Los resultados que obtendremos aquí quizás puedan dar nueva luz sobre este tema y he aquí la importancia del mismo. De igual manera, en la medida que haya más gente que sepa cómo se hace un buen fotomosaico tendremos más competencia y no solamente habrá que atenerse a las técnicas de Runaway Technology y Silvers, generando así más posibilidades y artistas que puedan usar esta tecnología. Un poco de historia

La creación de fotomorsaicos no es novedosa en realidad. Hay una larga historia atrás de ello. Un primer intento es el usar las letras del alfabeto para crear imágenes. Por ejemplo, he aquí a la famosa Gioconda de Leonardo Da Vinci, sacada de una página personal en Internet http://personales.alcavia.net/~jmoreno/jose/

Page 48: programacion_ludica

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII@@@@@@@@@@@@@MXXIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJ@@@@@@@@@@@@@@@@@@@@@@@@@@@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJM@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII@@@@@@@@@@@Z@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII .III.III.III.III.III.III.III.II@@@@@@@@@@@@ZZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LI.III.III.III.III.III.III.III.I I.III.III.III.III.III.III.IIIJ@@@@@@@@@@@@MZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@III.III.III.III.III.III.III.II .II.II.II.II.II.II.III.III.I@@@@@@@@@@@MMMXIIIIMMM$$$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LII.II.II.II.II.II.II.II.II.I I.II.I.I.I.II.II....II.II.IJ@@@@@$MMIIIII..........IIIIIXMMM$@@@@@@@@@@@@@@@@@@@@@@@@@L.II.I.I..II.I..I.II.I..II.I .I.I.I.I.I.I.I..I..II..I..J@@@@$MI..............IIIXXXXXXMMMM$@@@@@@@@@@@@@@@@@@@@@@@@@L.I..I..I.I.I.I.IIIII..I.I. .I..I...I..I..I..I.I..I..J@@@@$$XXXII...................IXMMM$$@@@@@@@@@@@@@@@@@@@@@@@@@L.I..I..I..I..I...I..I..I. I...I...I...I...I..II....@@@@MXI.........................IXXXMM$@@@@@@@@@@@@@@@@@@@@@@@@@LI...I...I...I..I...I..I. I.....I..¥..I....I....I.@@@@@MXII.........................IXXXMM$@@@@@@@@@@@@@@@@@@@@@@@@@L...I....I....I....I.... .I.......I........I....@@@@@MXII...........................IIXMMMMM@@@@@@@@@@@@@@@@@@@@@@@@...I.....I......I...... ......................$@@@@@MMXIII........................IIIXXXXMM$@@@@@@@@@@@@@@@@@@@@@@@L...................... ....................IZ$@@@@MMXI.........................IIIIIIXXXXMM$$@@@@@@@@@@@@@@@@@@@@@@LIX.I................. ...................IZZ@@@@@$$XII............IIIIIIIXXXXX$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@MIIXIX.........I...... ..................IZZ@@@@@@MXXIII...........IIIIIIIIXXXXXM$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IIIIX.......IIII...II ..................IZZ@@@@@$MXIIII...........................IIIIIXXX@$$@@@@@@@@@@@@@@@@@@@@@@LIIIX...IIIIIIIIIIIIX ................MZZM@@@@@@MXXIII.................................IIIXM$@@@@@@@@@@@@@@@@@@@@@@MIIXIX.IIIIIIIIIIIIXI ................IZZM@@@@@@MXII..................................IIIXXM@@@@@@@@@@@@@@@@@@@@@@@@IIIXXIIIIIIIIIIIIIXI ................ZZZM@@@@@$XIIIII........IIIIIII.....IIIIXXX$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LXXXXX.IIIIIIIIIIXII ...............IZZZ$@@@@@$$XIIIIIIXXXII..........XXMMMMMXXXXXXXXXXXXM$$@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXIIIIIIIIIXXII ...............ZZZZ$@@@@@@$$$XXMM$$@@@@MI......$$@@@@@@@@@MMMXXMMM$$$$$@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXIXIIXXXXX ...............MZZM@@@@@@@@@@@@@@$FXXM$@@I....IX$@@@@$XXIXX$$$@@@@@@@$M$@@@@@@@@@@@@@@@@@@@@@@LXXXXXXXXXXIXIXXXIXX ...............MZZM@@@@@@@@@@@@$$$@@@@MI@@...IX@@@@@$$$$$@@@@$$$@@@@$MXM$@@@@@@@@@@@@@@@@@@@@@@XXXIXXXXXXXXXXXMMXX .....MXXX.X....LZ@@@@@@@@@MIM@@$MIM@@@@@MX...I$@@@$$$MX.I@@@@@@@@$MMXIXM$@@@@@@@@@@@@@@@@@@@@@@XXXMXXMXXMXXMXXMXMM ....XXXMXIMJ...@@@@@@@@@@@IIIIXIII.IFFFFIX...I$$MMXXI....FFFFFMMIIIIIIXX$@@@@@@@@@@@@@@@@@@@@@@XXMXXXMMMMMMMXXXMMM ..CXMMMMMXMJ..C@@@@@@@@@@MXIIIIIIXXXXMXII....IMMXXXIIIIIXXXXXMMM.....IXMM@@@@@@@@@@@@@@@@@@@@@@XMMXMMXXMXMXXMXMMMM IXMMMMMMMMMJ..@$$@@@@@@@@$XI......IIIII......IMMXXII..IIXIIIII.....IIIX$$@@@@@@@@@@@@@@@@@@@@@@JMMMMMMMXXXXMXXMMMM IMMMMMXXXMMMM$$$$@@@@@@@@$XI.................IMMXII................IIXX$$@@@@@@@@@@@@@@@@@@@@@@MMMMXMXMXMXMXMMMMXM X$$MMMXMMM$$M@$$M@@@@@@@@$XII................IXXXII...............IIIXM$$@@@@@@@@@@@@@@@@@@@@@@NNNNNXMXMXNXMXNXHXM XMMM$$MMMMMMM@MMM@@@@@@@@@II.................IIIIII...............IIXX$$M@@@@@@@@@@@@@@@@@@@@@@MXXIIMMAIIIIIII..II $$MMMMMMXMMXM@$$$@@@@@@@@@$XI................XXXXII..............IIIXX$$@@@@@@@@@@@@@@@@@@@@@@@@XXIIMMAIIIIIII..II $$$$$$$MNM@@$$$@@@@@@@@@@@@XII..............IIIIXXI..............IIIXM$@@@@@@@@@@@@@@@@@@@@@@@@@ZHXHXHXMAXNXMCXMNC MMMM$MMNMMMM$MM@@@@@@@@@@@@$YII......II.....IIXIWLI.............IIIXX$$@@@@@@@@@@@@@@@@@@@@@@@@@IJXHMXHMMXHWHEMNXN MNM$MNNMMMM@@@@@@@@@@@@@@@@$$$XII......XX...Z$@@@$$$...........IIIXXX$$@@@@@@@@@@@@@@@@@@@@@@@@@XIHXMXMNXNEMWNXMEX NMXNXMNMNMMX@@@@@@@@@@@@@@@@@$XII........@$@@@@@@@$MI.........IIIXXX$$$@@@@@@@@@@@@@@@@@@@@@@@@@JHMMNKXWWXMMXXXMWH XNMMXXMXMMNMM@@@@@@@@@@@@@@@@$XXII.........@@@@@@MXI.........IIIIXXXX$$@@@@@@@@@@@@@@@@@@@@@@@@@@MMXNMMXMXNMZXNXMM MNMXEXXXAMMMM@@@@@@@@@@@@@@@@$$XXII.........IXXXXXIIIIIIII...IIIXXX$$$$@@@@@@@@@@@@@@@@@@@@@@@@@@XXNIXXMXMXNXZXNXZ MXMMXMXMMMAMM@@@@@@@@@@@@@@@@@@XXIIIIX$X.II.IIXXXMMM$@@$MI....IXXX$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XNMZHNMXXMNXMZXMZ NAMXMAXMXMMIM@@@@@@@@@@@@@@@@$XII....$$@@$L.MM$@@@@@@$II......IXXMM$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@MXMXMMMJJMXXMXHZX MXMMMXMXMMMIM@@@@@@@@@@@@@@@@@@I..............IXXXMIIII.......IXX$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XNMMMMMMJMIIIXXI XMZHXIXMMXMXX@@@@@@@@@@@@@@@@@@@$I........MM$$XXXXXXXXI......IIXX$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XMMXMXJIJMHZXXXM MXMXNMXMXMMI@@@@@@@@@@@@@@@@@@@@@M$XI....IIIIXXII.IIXXX......IXX$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@NXMXMXMMXXHXNXZW XXMIMIMIMIMIX@@@@@@@@@@@@@@@@@@@@@@$I...................IIXXX$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXINXIXHXXMXHIX MXMMXMMMXMMMM@@@@@@@@@@@@@@@@@@@@@@@@$I.............IXXXXX$$$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XNXIXIXXHXZMXIX XMXXMMXMXMMXX@@@@@@@@@@@@@@@@@@@@@@@@@$I..........IIIXXXXX$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXNMNMXXXHXXIXX IIIIIIIIIIIIII@@@@@@@@@@@@@@@@@@@@@@@@@@$I.....IIXXX$$$$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXIIIXMXXXIXMM MMMXIIXIIIIIIIM@@@@@@@@@@@@@@@@@@@@@@@@@@@@@W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LXNXMXZMMIIIIIX XXMMMMMXXXXIIII@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXNXMXZXXXXXIX XIIIIIIIIIIIIII@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$$MMMM$$@@@@@@@@@@@@@@@@@@@@@@@@@XXZXZXMCMXMXZX XIIIIIIIIIIIIIII@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IXMMM$$@@@@@@@@@@@@$$$$MMMMM$@@@@@@@@@@@@@@@@@@@@@@@@@@IXZHNXMXNZMXNX IIIIIIIIIIIIIIIIII@@@@@@@@@@@@@@@@@@@@@@@@@@@IIXXX$$M$$@@@@@@@@$$$MMMMMMMM$@@@@@@@@@@@@@@@@@@@@@@@@@L22XMEHMEZMXXX IIIIIIIIIIIIIIIIII@@@@@@@@@@@@@@@@@@@@@@@@@@@IIIIXXXXMM$$$$$$$$$MMMMMXXXMMMM$@@@@@@@@@@@@@@@@@@@@@@@LXXZOCOXXBBSXX IIIIIXXXXXXXXXXIII@@@@@@@@@@@@@@@@@@@@@@@@@@@XI...IIXXXXXMMMMMMMMMMMXXIIXXXM$$$@@@@@@@@@@@@@@@@@@@@@@MXMXJOSEX.XXX IIIIIIIIIIIIIXIIII@@@@@@@@@@@@@@@@@@@@@@@@@@@XI...IIIXXXXMMMMMMMXXXXXIIIIIXXM$$$@@@@@@@@@@@@@@@@@@@@@@MXMXMILIXXMX XXMXIIIIIIIIXXXIII@@@@@@@@@@@@@@@@@@@@@@@@@@@@XIIIIIIIIXXXXMXXXXXXXXII.IIIXXX$$@@@@@@@@@@@@@@@@@@@@@@@IXXMXXHXXIXX XXXXIIIMMMMXXXXXI@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XIII....IIXXXXXXXXXIII......IIXM$@$@@@@@@@@@@@@@@@@@@@@@@XMXXAXXAIXX MXMMXMMXXMMMMXXXX@@@@@@@@@@@@@@@@@@@@@@@@@MFXXIIII.....IIIXXXXXII.........IIXXM$X@$@@@@@@@@@@@@@@@@@@@@@XXXIXXIXMI XCXRMMMIIXXXXXIX@@@@@@@@@@@@@@@@@@@@@@@$$$XXIIII........IIIIIXI...........IIIXXMM$@M@@@X@X@@@@@@@@@@@@@@@IXIXMMXIX XXXXMMXIIIXXIIXJ@@@@@@@@@@@@@@@@@@@@@XIII.................IIIII............IIXXM$M@@@M@@@@@@@@@@@@@@@@@@@@XXIXMWWX XXIXMMXIIIXXXXI@@@@@@@@@@@@@@@@@@@@LXXI.....................III............IJJJI@@@@M@$X@X@@I@@@@@@@@@@@@@@LXXMXII XNXCXMMXIIXXXX@@@@@@@@@@@@@@@@@@@I........................................IJJIXJM@@@@@@X@M@MIM@@@@@@@@@@@@@@LXXEXB IXNMXXXIXXXXI@@@@@@@@@@@@@@@@@@LII........................................IJIJL@@M@@@M@M@X@X@M@@@@@@@@@@@@@@@LXSSB INMNMXMXXXXX@@@@@@@@@@@@@@@@@@J.I..........................................JIJJ@M@@@@@M$$M@X@@@@@@@@@@@@@@@@@@MXIX XXMXMXXXXXI@@@@@@@@@@@@@@@@@@JIX...........................................I.X@@MX@@MM@$$M@@@@@@@@@@@@@@@@@@@@@MMX IXMIXMXXXI@@@@@@@@@@@@@@@@@@@MXXM..........................................I.I@D@@Z@@@X@@M@@@@@@@@@@@@@@@@@@@@@@XX IXIXIXIII@@@@@@@@@@@@@@@@@@JMXXJ..........................................IJXI.@@M@@@M@@@X@@@@@@@@@@@@@@@@@@@@@@@L XXMXMXMM@@@@@@@@@@@@@@@@@@JXIIII..........................................JJII@@@M@@@M@@IMMMMMM@@@@@@@@M@@@@MMM@@@ MMMXXXX@@@@@@@@@@@@@@@@@@@XJJII...........................................JJI$@@M@Z@@M@@IX@@@@MM@JJX@@XXMMMMMM@@@@ XXMMXX@@@@@@@@@@@@@@@@@JI@@JJJ.I.........................................IJI.JI@8@XM@M@$XM@@@MMXXIXMMMMMI@@@@XXXMM XMX@@@@@@@@@@@@@@@@@@[email protected]@X@M@M@M@XXM@MJJJFFFM@@@@MIIIXMM@@@@ X#####@@@@@@@@@@@@@@@XI$IJJ..............................................JI.JX@JXMMMMMMMFFIIII####MXXIIIMMMM####M# #####@M@@@@@M@MM@@@XII$$ILI.............................................IJ.IXJ@JX@X@XIJIXXMMMMMMIIIXX###MMM####MM# #####@@@@@@@@@@@@@@IJIIIXJJ............................................IJ.JJX@IXJJJJJJXMMMXMXXIIXMXXX####MM######M #####@@@@@@@@@@@@@$I.....I..................................................JJJJIIXMMMMMXXIIXM##########M#####M### ######@@@@@@@@@@@##L....J.................................................J.I.I.ZMMMMMMIIIMZZ####################M ######@@@@@@@@@@@###L.....................................................II.XMMMMMI.IXX###M#####################M ######@@@@@@@@@M##M##...............I.....................................IMMMMMIIMM###########MM######M###M###### ######@@@@@@@@N##MM#####L..........II..................................MMMMMIIXM#######M##M#############M######### #####@@@@@@@@W##+#W##M######LI.IIIIIII..............................IJMMMMMIXM#########M######M################### #####@@@@@@@WN+W+X+++ZMMM#######M$IXIII............................IMMMMM.IXX#M##############M############+####### #####@@@@@@##M+I+#W#+I+IW#W#############LX......................I.XMMMMMMMM###########MM#########X#####W########## #####@@@@@###N#WII+X##M#M+XM#W#W###############MX+YYYYYYYYYYIXXMMMMMFI.J########+++#####WM##M###M##M############## #####@@@##W#N#WW#X++#M##X+##M##N#X##M###X#M############PM####MMMMM.IXMMMMXXM###########XIXM##W##II++F#P#M##M###### MN#WM@@@W##M+##W#X#M##MII+MWM#++I###WM###MWN##WM#WM##########MMMFII####MI++############+##+F8++#M###W#######MM#### W+W###@###+M###X#M#N#+I+##M#M+IIW###MX###W#X##MM#XX#######Z##*XIXMMM****MX*********W**********I*M**M*M********MW** *************M*MM***M****M**MM***X*IW*W*IW*M**W**IIX****W**MXMMNNN*****MMM**N******N*****X***X*M***WW*******NMXXXM ********M*M*M**M****MW*******X*M**MMIMMI##WWX*MW*WW*M*MI*X*XXIIX************M***M***M***XXMM***XM*M*M***M***X*XXXX ***WM****W***M***M***W****MMWX***WWIMMWM***WM*M**X**XW*MI***I**MM***************W*@*W*M**M**MM**W*****MW*MMX*XXXXX M*W*M***I Jose Moreno Fernandez Atalaska BBS IW**MMMM****************W****W****WM*M*M*MWM*I*XZZI*IIIIXXMMM *W*W*M*******************NW****NMI**N***WMN****MMM*************************M*W*W***M*******8****M***MMMMMXX*MMMMMM

Figura 2

Como un primer esfuerzo es pasable. Incluso, hacer un programa que transfiera una imagen a las letras del alfabeto es una tarea simpática y los resultados aunque interesantes, aunque ciertamente pobres frente a lo que los fotomosaicos pueden mostrar. En noviembre de 1973 se publicó un articulo en Scientific American (cuyo autor es Leon Harmon de Bell Labs.), titulado “The Recognition of Faces” Aquí aparece la siguiente imagen (véase figura 3).

Page 49: programacion_ludica

Figura 3 Harmon escribió un programa llamado MagnaDott, el cual genera este tipo de imágenes. De hecho, el programador de marras no se considera un “artista”, sino que se hace llamar a sí mismo un “cibertista”. En el artículo se presentan otras imágenes, algunas más reconocibles que otras. Lo importante aquí es el exceso y redundancia en la información visual existente de tal manera que pocos bloques de diferentes densidades de color nos pueden dar la información estereotípica de Abraham Lincoln. Sin embargo, los esfuerzos de Harmon se ven magnificados por Salvador Dalí, al presentar la siguiente obra (Figura 4):

“Gala Mirando al Mar” (Salvador Dalí, 1976)

Figura 4 A 20 metros el cuadro de Dalí se convierte en el retrato de Abraham Lincoln. Alguien llamó a esto Lincoln en Dalivisión. Al escribir esto me entra la duda de si la imagen de Lincoln no es un caso excepcional. Más tarde, Chuck Close trabajó sobre esta concepción y he aquí un fragmento de su idea (figura 5):

Page 50: programacion_ludica

Figura 5

En algún momento Close se dio cuenta que podía llenar una malla cuadriculada con sus pinceles de aire, dándole diferentes densidades al color para así crear lo que él llamó “faux fractals” (fractales falsos). Esto es, tomar un dato repetitivo en escalas cada vez más decrecientes y reemplazarlos para lo que Roy Lichtenstein llamó pinturas diminutas. Y semejantes pequeñas pinturas pueden ser cualquier cosa y de cualquier textura. Pero esta idea no es muy novedosa (la de los fractales falsos), porque en 1918, el fotógrafo Arthur Mole, de 29 años, creó la siguiente imagen con 21,000 reclutas del Campo Sherman, la cual representa al presidente Woodrow Wilson. No se sabe cuánto tomó hacer esta foto, pero se tiene conocimiento de que más de un soldado se desmayó en el proceso. Esta fue una de muchas fotos que este personaje hizo (figura 6).

Presidente Woodrow Wilson

Figura 6

Beth Clemens, muchos años después, llegó a una idea muy interesante. Ella es músico, no una artista plástica o pintora. La siguiente imagen muestra el concepto fractal (figura 7):

Page 51: programacion_ludica

Fractal Beth Figura 7

Si nos acercamos a la imagen de Beth, veremos esto (figura 8):

Acercamiento de la imagen de Beth Figura 8

Puede verse que la imagen de Beth es absolutamente fractal, considerando el concepto elemental inventado (¿descubierto?) por Mandelbrot hace ya unos años. Esta noción se llevó aún más lejos. Aunque el efecto de Clemens es estéticamente muy agradable (y quizás podamos achacar esto a la idea de que el universo es fractal), se han hecho modificaciones al respecto. Por ejemplo, Eric Haines, que trabaja/estudia en el departamento de gráficas por computadora de la Universidad de Cornell, EEUU, hizo el siguiente mosaico de su jefe, Don Greenberg (figura 9):

Page 52: programacion_ludica

Figura 9 (fotomosaico hecho de las fotografías de sus estudiantes)

A partir de estos datos nació esta investigación inicial, que dio pie a un proyecto para una primera aproximación. En este proyecto los fotomorsaicos generados se hicieron con fichas de dominó y naipes. Los resultados de este particular software pueden verse en las siguientes imágenes (Figura 10 y 11).

Figura 10

Page 53: programacion_ludica

Figura 11

Con estos antecedentes e historia se decidió entonces el desarrollar un sistema para la generación de fotomosaicos con imágenes a color, a la manera de Robert Silvers. Pasos iniciales en la creación de fotomorsaicos La creación de fotomorsaicos puede dividirse en los siguientes pasos:

1. Se requiere de una imagen a convertir en su equivalente en mosaicos (imagen fuente). 2. Se necesita una colección de imágenes (los mosaicos), también llamada base de datos o biblioteca de

imágenes. 3. Un programa de computadora que cuadricule la imagen fuente, tome cada una de las subregiones de

dicha cuadrícula y las compare una a una contra la colección de imágenes (tomando ciertos criterios de similitud entre la región analizada y cada imagen en la colección). Finalmente, sustituya por la más adecuada de acuerdo a los criterios establecidos.

Evidentemente los dos primeros pasos son sencillos de realizar. Existen una serie de colecciones de imágenes que pueden ser adquiridas por un costo específico o incluso gratuitamente a través de la red Internet (aunque esto último puede llevar muchas horas de conexión). La imagen a procesar se obtiene generalmente a partir del escaneo de una fotografía particular. Ésta puede ser de gente famosa o incluso de familiares o amigos. Obviamente las técnicas para hacer fotomorsaicos no involucran necesariamente fotos de rostros humanos. Bien podría tratarse de animales u objetos. El paso 3 es sin embargo más complejo de realizar. Para decidir qué mosaico (imagen de la biblioteca de fotografías) es el que se acerca más a la región que estamos analizando dentro de la cuadrícula, necesitamos considerar el concepto de “distancia” entre ambas imágenes, es decir, qué tan cercanas en color es una imagen contra el color promedio de la región analizada. A esto le llamaremos una métrica. No es obvio que podamos definir una métrica de manera muy sencilla y para comprender la idea sobre cómo encontrada, hay que hablar a detalle de cómo la computadora manipula los colores y gráficos.

Page 54: programacion_ludica

El modelo de color RGB Un monitor de computadora (incluso una TV) usan el modelo de color RGB (Red Green Blue) para representar los colores. En la computadora la tripleta de enteros RGB permite ver un color específico. Cuando se usan 8 bits por color, si entendemos este modelo, entonces estamos hablando de colores de 24 bits. Cada 8 bits puede guardar un valor que va de 0 a 255. Así, si la tripleta es (0,0,0), entonces hablamos del negro. En cambio, si la tripleta es (255,255,255) hablamos del blanco. El rojo puro podrá estar representado por (255,0,0), por ejemplo. Este es el esquema RGB y es muy popular en las computadoras actuales. RGB permite 16 millones de colores, muchos más que los que puede discriminar el ojo humano. Criterios para la selección de imágenes, o definición de una métrica Considerando el modelo RGB, el núcleo del programa de fotomorsaicos debe poder hallar algún criterio para seleccionar el mosaico a sustituir por la subregión dada. Para esto, el siguiente esquema es el que se ha puesto en práctica: considérese cada subregión de la imagen fuente como de un solo color. Para esto, el software lo que hace es calcular simplemente el promedio de color sumando las tripletas RGB de cada pixel dentro de la subregión de la imagen y dividiendo cada componente de color en el número de pixeles procesados. Esto es:

Donde n y m son los el largo y ancho de la subregión de la imagen a procesar. Eso da un color promedio de toda la región que estamos analizando. Tómese ahora una colección de imágenes a las cuales se les ha realizado el mismo proceso de color promedio, pero en este caso no solamente a una región de cada imagen de la colección, sino a toda la imagen. De esta manera lo que tenemos es una colección de imágenes de colores sólidos (promedio de cada imagen original). Esto da un solo valor de color promedio para toda la imagen. La métrica entonces es simplemente la búsqueda de la distancia mínima entre la región analizada y cada una de las imágenes de la colección usada para la creación del fotomorsaico. Distancia lineal Cabe señalar que si un solo número fuese atribuido a cada color, por ejemplo como lo que pasa cuando se consideran las escalas de grises, tendríamos que la distancia entre dos imágenes sería simplemente la distancia lineal de un tono de gris a otro, es decir, la métrica sería

donde

y

son los valores del tono de gris en la región analizada contra la que se encuentra en la colección de imágenes

∑∑=n

mnmnmn

m

nmBGRRGBegionColordelar1

,,,1

/)),,((

12 DD −

1D

2D

Page 55: programacion_ludica

Distancia Euclidiana Sin embargo, si tomamos las tripletas RGB el problema no resulta trivial. Podemos considerar entonces la distancia euclidiana si tomamos al modelo RGB como un espacio tridimensional en donde cada color (R, G y B), son cada uno un eje coordenado. Así, la distancia de la imagen que tenemos a la que estamos analizando se puede dar como:

Esta manera de crear una métrica, aunque simple, puede considerarse muy importante y útil. De hecho dicha métrica se implantó en el software (ver más adelante) y se analizará posteriormente. Distancia Riemersma Sin embargo, la manera en como los humanos percibimos el color no parece ser la distancia euclidiana. Así, hallamos una posibilidad más, la cual fue analizada por Thiadmer Riemersma, de Holanda, en donde halló evidencia empírica sobre cómo los seres humanos distinguen las diferencias de color. El resultado es lo que hemos llamado distancia Riemersma y se basa en la siguiente mejora o corrección a la distancia euclidiana:

donde

(Para una discusión al respecto de cómo se llegó a esta fórmula, consúltense la bibliografía). Esta es la mejor aproximación de métrica considerando los resultados obtenidos (que se analizan más adelante)). La colección de imágenes Para poder utilizar la métrica (sea cual sea ésta), se necesita que la colección de imágenes sea preprocesada con antelación, en un afán por que el programa sea más rápido y menos costoso en recursos de máquina. Así, se tomó una colección de imágenes (todas en formato jpeg) sin distinción en tamaño pero que todas cumpliesen con ser de 24 bits de resolución y se hizo un pequeño programa que preprocesara dichas imágenes de manera que sacara el promedio de color total sobre toda la imagen. Cada imagen (de un total de 5544), de 960x1200 pixeles, de 24 bits de color se procesó en alrededor de 2.5 segundos. Se generó entonces un archivo al que se le llamó “imagen.idx”, conteniendo los siguientes datos por línea:

Rojo Verde Azul NumeroColor NombreImagen

He aquí un fragmento de dicho archivo:

221

221

221 )()()( BBGGRR −+−+−=∆

222 ))(256

2552()(4))(

2562( B

rGR

r∆

−++∆+∆+=∆

221 RR

r+

=

21 RRR −=∆

21 GGG −=∆

21 BBB −=∆

Page 56: programacion_ludica

índice de imagenes 121 117 131 7959939 Im00001.jpg 67 77 70 4410694 Im00002.jpg 116 121 157 7633309 Im00003.jpg 78 57 59 5126459 Im00004.jpg 86 101 76 5662028 Im00005.jpg 190 193 181 12501429 Im00006.jpg 66 78 83 4345427 Im00007.jpg 117 133 132 7701892 Im00008.jpg 109 127 122 7176058 Im00009.jpg 109 127 122 7176058 Im00009.jpg 102 122 121 6716025 Im00011.jpg 87 102 108 5727852 Im00012.jpg

(en realidad en el archivo están separados por un espacio cada valor. Aquí simplemente se agregaron espacios para una mayor claridad). Rojo, Verde y Azul son los valores de la tripleta RGB (valores que van de 0 a 255). )úmeroColor es el color asignado de acuerdo a la siguiente ecuación:

Así, )umeroColor identifica cada imagen dentro de la colección con un solo color. Finalmente, )ombreImagen es el nombre de la imagen procesada dentro del disco duro. Cabe señalar que las imágenes no tienen que estar numeradas como se ve en el fragmento del archivo de índice. Algoritmo de búsqueda y selección Una vez teniendo las imágenes de la colección procesadas, el algoritmo que usa el fotomorsaico es verdaderamente sencillo:

1. Define una métrica. Se puede tomar alguna de las tres consideradas (Lineal, Euclidiana, Riemersma) pero una sola a la vez.

2. Se cuadricula la imagen fuente en subregiones de tamaño constante. El tamaño de cada región puede ser definido por el usuario previamente.

3. Se lee cada subregión. Se calcula su valor (color) promedio y se busca en el archivo de índice (imagen.idx) la imagen que tenga la menor diferencia de color. Dependiendo de la cantidad de imágenes que hay en la colección este proceso puede ser más o menos lento.

4. Se elige la imagen de menor diferencia y se coloca en la subregión analizada. 5. Se repite este proceso hasta terminar con la imagen fuente.

Obtención de resultados La imagen resultado, el fotomorsaico en sí mismo, es la colección de imágenes seleccionadas por el algoritmo correspondiente. El resultado, para ser visto inmediatamente, se generó originalmente como una página HTML en donde se encuentra la lista de todas las imágenes seleccionadas y su ubicación dentro del fotomorsaico. La virtud de este enfoque es que los resultados del procesamiento pueden ser vistos y analizados de manera inmediata. De igual manera, se pueden imprimir los fotomorsaicos resultantes sin necesidad de escribir las rutinas correspondientes bajo la interfaz gráfica de Windows, haciendo uso del comando de impresión del navegador usado para ver los resultados finales del fotomorsaico ()etscape, FireFox o Internet Explorer), aunque no necesariamente ésta es la mejor solución porque no se tiene mucho

)1()256()65536( ⋅+⋅+⋅= BGRr)umeroColo

Page 57: programacion_ludica

control sobre los parámetros de la impresión en sí misma. Por otra parte, el usuario puede cambiar fácilmente el tamaño de los mosaicos para hacer más grande o chica la imagen (esto se hace cuando el fotomorsaico se genera, pero en el archivo HTML se puede cambiar con un Search&Replace global dentro de cualquier procesador de textos. Igualmente, el crear una página HTML con la imagen resultante permite que ésta pueda ser fácilmente reproducible en cualquier otra parte en donde se tenga la colección de imágenes usadas. Un fragmento del archivo de resultados como página en HTML puede verse a continuación: <table border=“0” cellspacing=“0” cellpadding=“0”> <tr><td><nobr>img src=“Im01419.jpg” width=“10” height=“10”><img src=“Im04133.jpg” width=“10” height=“10”><img src=“Im01419.jpg” width=“10” height=“10”><img src=“Im04133.jpg” width=“10” height=“10”><img src=“Im01826.jpg” width=“10” height=“10”><img src=“Im01876.jpg” width=“10” height=“10”><img src=“Im01826.jpg” width=“10” height=“10”><img src=“Im03895.jpg” width=“10”

[…] height=“10”><img src=“Im01798.jpg” width=“10” height=“10”><img src=“Im02251.jpg” width=“10” height=“10”><img src=“Im02784.jpg” width=“10” height=“10”><img src=“Im02251.jpg” width=“10” height=“10”><img src=“Im01798.jpg” width=“10” height=“10”><img src=“Im01419.jpg” width=“10” height=“10”>nobr></td></tr> </table>

Sin embargo, un segundo enfoque se implantó. En este caso se generó un programa visualizador para los fotomorsaicos. En este caso, el archivo de salida (los resultados, el fotomorsaico por sí mismo), es un archivo de texto que contiene el siguiente formato y que el programa visualizador usa para mostrar la imagen final:

Línea 1 Cantidad de mosaicos en X Línea 2 Cantidad de mosaicos en Y Linea 3 Tamaño de cada subregión en X Linea 4 Tamaño de cada subregión en Y Línea 5 Tamaño de cada mosaico en X Linea 6 Tamaño de cada mosaico en Y Línea 7 en adelante Nombre de las imágenes a colocar o el

comando <br> que indica que hay que pasarse a la siguiente línea.

De esta manera el fotomorsaico puede ser visto de inmediato y además, puede guardarse como una imagen JPEG directamente al disco. Aunque la aproximación dio buenos resultados, hay limitaciones que Windows impone, y es en lo referente a los tamaños finales de los mapas de bits (bitmaps). Una imagen de 4000x4000 pixeles, a 24 bits de resolución en color simplemente no se puede acomodar en una máquina incluso con 1 gigabyte de RAM. Así, si se desea utilizar el visualizador de fotomorsaicos en una imagen demasiado grande, la única solución pertinente es cortarla y procesarla en pedazos. Esto sugiere dos situaciones:

• Las máquinas personales aún tienen serias limitaciones cuando hablamos de software que requiere demasiados recursos gráficos;

• La necesidad de equipo más sofisticado, quizás una estación de trabajo Silicon Graphics y/o • Quizás las rutinas gráficas para el manejo de jpg por parte de Delphi no contempla la creación de

imágenes tan grandes, por lo que puede ser una dificultad de la librería gráfica usada. No obstante, estos argumentos son intuitivos y habría que elaborarlos a detalle. Lo que sí es un hecho es que aplicaciones gráficas como la que nos ocupa esta discusión parecen requerir de mayor y mejor hardware.

Cabe señalar que para crear el fotomorsaico, ya sea usando el archivo HTML o procesando la información a través del visualizador exige que las imágenes se encuentren en el mismo directorio que el archivo a procesar. Esto se hizo como un esfuerzo para minimizar la información redundante (las trayectorias de los archivos

Page 58: programacion_ludica

dentro del disco duro). Algo importante de señalar, además, es que las imágenes de la colección se utilizan únicamente cuando se quiere ver el resultado final. El procesamiento de las mismas por el algoritmo que crea el fotomorsaico (con la métrica definida), no requiere más que el archivo de índice, el cual contiene la información sobre cada imagen de la colección. En el apéndice II puede encontrarse más información sobre el visualizador. Discusión sobre las métricas y del por qué funcionan o no Las métricas definidas parten de una concepción muy simple pero que de alguna manera son lo suficientemente aceptables para funcionar. Para entender por qué ciertas métricas son adecuadas y otras no, considérese la figura 4 (ver más arriba). Aquí se plantea con toda claridad la definición de un rostro a través de grandes rectángulos de colores sólidos. Si observamos con detenimiento esta imagen, veremos que los rectángulos de colores sólidos, vistos a la lejanía muestran la imagen de Abraham Lincoln. Esto es la clave que define la métrica. Si consideramos que una subregión (un rectángulo en el cuadro de Dalí), puede ser tratado como un mosaico de un color sólido, basta con hallar, dentro de la colección de imágenes, uno que se acerque a ese color, porque a la distancia el ojo humano no podrá discernir si se trata de un color sólido o una imagen particular cuyo promedio de color se parece o es casi igual a la región observada. Curiosamente las métricas, tanto la euclidiana como la de Riemersma permiten esta comparación minimizando la distancia definida entre la subregión analizada de la imagen fuente contra todas y cada una de las imágenes en la colección preprocesada. A pesar de su simpleza funcionan bastante bien, porque en ambos casos se toman los valores RGB de cada imagen, aunque sea el promedio final de color. Tómese, en cambio, la distancia lineal. En su mejor posibilidad hallamos que solamente da un contorno de la imagen analizada. ¿Por qué? Lo que pasa es lo siguiente: si tomamos los componentes R, G y B y usamos la ecuación:

Encontramos que más de una tripleta puede dar valores muy cercanos. Por ejemplo, la tripleta RGB (255,0,1) y la tripleta RGB(255,1,0) difieren por la unidad pero son dos colores diferentes sin duda. Esto hace que esta métrica sea muy deficiente porque no puede reconocer estas diferencias, que aunque minúsculas son notables. De ahí que las métricas euclidiana y Riemersmana sean las más favorables pues consideran los pesos específicos de los valores RGB. Software de depuración incluido Uno de los primeros problemas enfrentados en la generación de fotomorsaicos fue seguir al software para saber cómo estaba seleccionando los mosaicos de acuerdo a la región analizada. Se incluyó en el programa de generación original una serie de rutinas que permiten ver el trabajo que está ejecutando el sistema aunque para ello haya tenido que reducirse la velocidad de procesamiento. Indudablemente esta ayuda permite analizar por simple inspección visual si el mosaico seleccionado tiene sentido o no. La depuración puede encenderse o apagarse incluso a la mitad de la generación de un fotomorsaico. Descripción completa de la solución Para poder comparar los resultados obtenidos debemos definir diferentes parámetros visuales, los cuales son, a saber: 1. Cuánto se acerca el fotomorsaico creado a la imagen real cuando la primera se ve a cierta distancia 2. Cuánto se acerca el fotomorsaico creado contra el equivalente realizado por Silvers. (para esto último hay

que procesar imágenes que Silvers ya haya procesado).

)1()256()65536( ⋅+⋅+⋅= BGRL

Page 59: programacion_ludica

Resultados obtenidos Utilizando el primer criterio, es decir, cuánto se acerca el fotomorsaico creado a la imagen real cuando la primera se ve a cierta distancia. En este ejemplo se tomaron subregiones de 10x10 pixeles, con 5544 imágenes en la colección y permitiendo la repetición de los mosaicos (véase más adelante la discusión sobre el permitir o no la repetición de mosaicos en la misma imagen). La generación de cada fotoMORSAico llevó alrededor de 2 minutos. Cada fotomorsaico resultado se procesó con estos mismos parámetros y solamente cambiando la métrica. La figura 12A muestra la fotografía fuente (la imagen a procesar). La imagen 12B muestra el procesamiento del fotomorsaico usando la métrica lineal. La imagen 12C muestra el procesamiento del fotomorsaico usando la métrica euclidiana. Finalmente la imagen 12D enseña el procesamiento de la imagen usando la métrica Riemersma.

Figura 12 A Figura 12 B (lineal)

Figura 12 C (Euclidiana) Figura 12 D (Riemersma) Nótese como las figuras 12C y 12D son las que más se acercan a la original. Evidentemente la transformación lineal es muy pobre. Los resultados obtenidos utilizando el segundo criterio, es decir, procesando una imagen conocida para compararla contra los que genera Silvers no es un proceso justo porque Silvers hace “blending”, es decir, fusiona la imagen original contra el fotomosaico en un porcentaje que puede ir de 5% a 50% entre ambas imágenes. Así entonces, en el blending cambia el color original de las imágenes en la colección o les agrega

Page 60: programacion_ludica

sombra a la que quiere que corresponda. Por eso sus resultados se ven tan sorprendentes. En cierta medida “hace trampa” para decirlo de alguna manera. Por ejemplo, la siguiente imagen muestra uno de los fotomorsaicos de Silvers (figura 13). Nótese en el acercamiento del sombrero cómo el autor mejoró la sombra para que el contorno quedara mejor delimitado. Esto no es casual. Robert Silvers entiende que el fotomorsaico así queda aún mejor a la vista aunque es un procedimiento mañoso y no exento de dificultades técnicas. El blending es un algoritmo muy simple de diseñar (el cual puede verse en otro de los capítulos dedicados a ;las gráficas).

Figura 13

(detalle del sombrero de la figura 13)

Figura 14

Otra imagen que muestra esta técnica de Silvers es la imagen que hizo de Bill Gates para su cumpleaños número 40. La foto está armada con imágenes de billetes de diferentes países. Un acercamiento a la boca (labio superior) muestra como Silvers manipula los mosaicos a conveniencia (tales billetes aparecen marcados en el recuadro azul).

Page 61: programacion_ludica

Figura 15

Indudablemente el truco es interesante pero le quita cierto “purismo” al fotomorsaico. Como en todo, hay corrientes a favor y en contra. Sin embargo éste es un tema que se sale de la discusión original aunque se volverá a abordar más adelante. Así entonces, en principio la solución completa implica realizar un trabajo de blending sobre las imágenes de los fotomorsaicos tomando como base cada subregión original y aplicando la sombra o el contraste adecuado y combinarlo con el mosaico seleccionado. Cantidad y calidad de la colección de imágenes Escribir un software para generar fotomorsaicos no necesariamente es una labor difícil. Sin embargo, una parte medular en el desarrollo de software de esta naturaleza es la colección (o base de datos) de imágenes que se tienen para generar los fotomorsaicos. Una colección debe contener, si es que no se va a hacer uso de blending, de alrededor de 5500 imágenes, las cuales se deben, en la medida de lo posible, cubrir en promedio de manera pareja todo el espectro de colores. De esta manera se garantiza que siempre habrá un mosaico que sustituya convenientemente alguna región sin importar el color. Igualmente, el sistema puede trabajar creando un archivo que indique los mosaicos que se ponen y las diferencias de color halladas entre la región analizada y el mosaico seleccionado. Esta es otra rutina que permite quizás en una versión mejorada de la que hoy se tiene, la posibilidad de manejar el fotomorsaico generado, tal y como hace Silvers (ver la entrevista a Silvers en los apéndices). En resumen, es tan importante el programa generador de mosaicos y las métricas usadas como la cantidad de posibles imágenes y los colores que éstas pueden estar representando. Estadísticas de la colección de imágenes Para que un fotomorsaico tenga un resultado aceptable se necesita que la colección de imágenes contenga la mayoría de los colores necesarios. Si estamos hablando de que el modelo RGB permite 16 millones de colores, al menos se requerirían 16 millones de imágenes (una por cada color), para llenar el espectro completo. Sin embargo, como mantener una base de millones de imágenes es algo irrealizable en las computadoras personales actuales, hay que conformarse con la colección de fotos que se disponga. La pregunta es entonces ¿cómo saber si mi base de datos, mi colección de imágenes, es adecuada? Para esto se escribió un pequeño programa que lee el archivo de índice y genera una gráfica con las regiones de color definidas a grosso modo, es decir, dando solamente un espectro genérico de 16 colores. Este elemental programa estadístico permite ver qué tipo de imágenes necesitamos en lo que se refiere a color.

Page 62: programacion_ludica

Montaje óptimo Dada una colección de imágenes y una imagen fuente se tiene la siguiente información: La colección consiste de t imágenes, las cuales se colocarán en las posiciones m de la imagen fuente. Es obvio que existe al menos una solución a este problema que es mejor o igual de buena que las demás soluciones. Puede incluso haber más de una solución. Sin considerar restricciones extras podemos pensar en que el mosaico correcto a seleccionar es aquel que tiene la menor distancia con respecto al área seleccionada en lo que se refiere a colores RGB. El mejor fotomorsaico será aquel que tenga en suma la mínima distancia con respecto a las subregiones originales. Sin embargo, la dificultad aquí se reduce a entender cuál es la mejor métrica a considerar, problema abierto por el momento. Interfaz con la WWW Una interesante propuesta es generar una interfaz de los fotoMorsaicos para la World Wide Web de Internet (WWW). Para esto, se necesita lo siguiente:

• Un ISP (Internet Service Provider) que dé hosting al sistema de fotoMorsaicos • Un dominio específico para mantener las páginas WWW que se requieran • Una interfaz CGI (Common Gateway Interface) para ligar el software fotoMorsaico con la red • Resultados que el usuario pueda, a través de la página, ver directamente (y en todo caso, salvar en su

computadora) Para esto se consiguieron los servicios de InterComputers, quien cual nos proveé gratuitamente del hosting de las páginas web y el servicio de contratación del dominio, en este caso www.la-morsa.com La interfaz CGI fue creada por Mauricio Fragoso, el cual permite generar vía Internet fotoMorsaicos de prueba de manera que los visitantes puedan “subir” las imágenes y ejecutar el software que entrega como salida una imagen “jpeg” que puede verse directamente e incluso “bajarse” a la máquina del usuario. Se escribieron entonces los mismos programas de los que ya se ha hecho referencia pero los cuales reciben parámetros de entrada y salida. De esta manera, el proceso es automático y además, debido a que no se requiere de ninguna interacción con el usuario, los resultados se generan de manera muy rápida. Típicamente una imagen que en el programa original de fotoMorsaicos lleva un minuto y medio se reduce a 30 segundos aproximadamente. Los fotoMorsaicos generados bajo la página web es una muestra del resultado que puede obtenerse con el programa original. Debido a las limitaciones de la WWW, en particular el ancho de banda, resulta poco práctico generar un fotoMorsaico de gran tamaño (típicamente entre 3 y 16 megabytes). Simplemente el tiempo para bajar dicha imagen resultante puede ser enorme. Consecuentemente, se tomó la decisión de generar fotoMorsaicos con imágenes reducidas, que al ser ampliadas pierden resolución, pero que en términos de muestra es suficiente para evaluar la posibilidad de este sistema. Así entonces, las imágenes de la biblioteca son las mismas que se usaron para generar los morsaicos ya descritos, pero reducidas a 50x50 pixeles. El tiempo de carga de cada imagen, para la creación de la imagen final jpeg es de esta manera mucho más rápida. Casos de prueba El generador de fotomorsaicos se ha aplicado a diversas imágenes prueba. Los resultados con la imagen de Ilse Olivo(imagen 12) muestran las tres métricas usadas. No obstante, es importante analizar los posibles resultados con otras imágenes. He aquí una prueba con una imagen de la modelo Sofía Vergara usando también las tres métricas. Otro ejemplo de prueba con la imagen de Paulina López Noriega que amablemente se prestó a colaborar en este desarrollo:

Page 63: programacion_ludica

En todos los casos se generó un fotomorsaico con mosaicos de regiones de 10x10 pixeles y con una base de imágenes de 5544. Todas las imágenes de la colección están en formato JPEG y la mayoría son de 960x1200 pixeles, aunque hay de otras escalas. Tamaños de las imágenes procesadas:

1. Ilse Olivo 458 x 588 (Figura 12) 2. Sofía Vergara 460 x 554 (Figura 16)

Al igual que los resultados de la imagen (1), pondremos aquí los resultados faltantes como casos prueba: (2) Sofía Vergara

Imagen original Métrica lineal

Métrica euclidiana Métrica Riemersma

Figura 16 Nótese que en todos los casos hay una pérdida de precisión con respecto a la imagen original. Esto por supuesto es natural considerando que en los términos matemáticos más simples, estamos hablando de una función no biyectiva (es decir, no es uno a uno y no hay manera de reconstruir la imagen original a partir de la imagen procesada).

Page 64: programacion_ludica

Blending El truco para mejorar las imágenes procesadas como fotomorsaico es el agregar lo que se denomina “blending”. Este método consiste en agregar a cada región del fotomorsaico creado parte de los colores originales de la región que estamos procesando. Algo así como superponer la imagen original sobre la imagen procesada. Un ejemplo de ello lo tenemos en la siguiente imagen de Ilse:

Figura 17

El efecto final es mucho más preciso, pero no deja de perder cierto purismo con respecto a la idea original del fotomorsaico. Sin embargo, existe otra alternativa, la cual consiste en pre-procesar la imagen de manera que se pueda manipular el brillo y contraste de la misma (usando photoshop o retriever, por ejemplo), evitando así la necesidad de hacer blending sobre la imagen. El siguiente ejemplo muestra una foto preprocesada y su respectivo fotomorsaico.

Figura 19

(Métrica Riemersma sin repetición contínua)

Page 65: programacion_ludica

Puede verse las mejoras en el fotomorsaico resultante. Conclusiones La generación de fotomorsaicos a color es un ejercicio de programación muy interesante pues se involucran diferentes factores que todo programador debe tener en mente: espacio en disco y velocidad de proceso. Igualmente, el hallar las ecuaciones mínimas para comprender el uso de métricas y la relación de las mismas con el sistema visual humano son de interés teórico y académico de cierta relevancia. Por otra parte, es claro que la generación de fotomorsaicos debe poderse comparar contra otros programas comerciales e incluso, ver las posibilidades de precisamente comercializar esta idea. En particular se observa que la mayoría de los sistemas comerciales para PC son pobres y muchos de ellos simplemente usan blending como parte fundamental de sus algoritmos, sin importarles mucho el criterio de selección (caso típico en Lview Poster cuyo autor es Leonardo Loureiro (comercializado por MMedia Research Corp., http://www.lview.com ). Es claro que el preprocesamiento de las imágenes a usar para mejorar el contraste y brillo de las imágenes es importante y puede dar una mejora significativa a los fotomorsaicos sin necesidad de utilizar técnicas como la de blending, que le quita cierto mérito purista. Por lo que respecta a las cuestiones de interés meramente académico puede decirse que los algoritmos para este tipo de sistemas son relativamente sencillos pero que si se desea un proceso de selección mucho más preciso se requiere de hacer análisis mucho más detallado, como por ejemplo un estudio más fino sobre procesamiento digital, síntesis de textura, segmentación, y discriminación de imágenes (ver )ovel Statistical Multiresolution Techniques for Image Synthesis, Discrimination, and Recognition (1997); J.S. De Bonet; o también, A )on-parametric Multi-Scale Statistical Model for )atural Images (1997), J. S. De Bonet and P. Viola; Advances in Neural Information Processing 1997, y Structure Driven Image Database Retrieval, de los mismos autores y la misma publicación. Quizás este último trabajo sea el que lleve la línea directriz en el algoritmo de búsqueda y selección. Ver http://www.ai.mit.edu/~jsd/Research/Publications ). Referencias/bibliografía (1) Recognition of Faces; Leon Harmon, Scientific American, )ovember 1973. (2) Generating Photomosaics: An Empirical Study; )icolas Tran, ACM Communications 1998. (3) Linux Image Montage Project (LIMP); Jordan Husney, http://linux.remotepoint.com (4) Juggle, a JAVA Photomontage program; Michael Troebs, October 1999, http://www.stud.uni-

hannover.de/~michael/juggle (5) Colour Metric; Triadmer Riemersma, ITB CompuPhases, 1997-1999, The )etherlands,

http://www.compuphase.com.cmetric.htm (6) Fast Multiresolution Image Querying; Michael; Castelle,

http://www.cs.washington.edu/research/projects/grail2/www/projects/query (7) 0ovel Statistical Multiresolution Techniques for Image Synthesis, Discrimination, and Recognition; A

0on-parametric Multi-Scale Statistical Model for 0atural Images (1997), Structure Driven Image

Database Retrieval, J. S. De Bonet y P. Viola; http://www.ai.mit.edu/~jsd/Research/Publications ).

Page 66: programacion_ludica

Inteligencia artificial Conjugación de verbos regulares El término “inteligencia artificial” me parece un término muy mal elegido (acuñado por Marvin Misnky, a todo esto), porque se da a malas interpretaciones. Para empezar, ¿qué es la inteligencia? ¿Cómo medirla realmente? Vaya, ¿se puede medir eso que es tan elusivo y que en principio nos diferencia de los demás animales? Es claro que hay eventos que revelan la inteligencia de los seres humanos. Conducir un auto, jugar al ajedrez, resolver incluso sudokus implica cierto nivel de inteligencia. Y sí, podemos describir lo que consideramos inteligente, pero es más difícil decidir la medida de dicha inteligencia. Por ejemplo, el lenguaje de los seres humanos describe en cierta medida una capacidad que resulta considerarse inteligente. El cerebro genera –a través de ideas– que se representan por sonidos específicos, expresamos lo que pensamos. Es más, pensamos con un lenguaje. Dentro de la cabeza de las personas los razonamientos se hacen en palabras, en la mente, en silencio, pero con un lenguaje, sin lugar a dudas. Por ello, el análisis de los lenguajes humanos es tan importante, pues ahí está mucho de lo que somos y hacemos. El lenguaje tiene una estructura muy bien definida, aparentemente, pero de pronto nos encontramos con excepciones a las reglas conocidas o bien, ambigüedades que nos permiten decir, en una misma frase dos cosas diferentes. Por ejemplo: “veo a esa mujer con un telescopio”. ¿Qué estoy diciendo? ¿Qué yo veo a una mujer a través de un telescopio o bien, que veo a una mujer que tiene un telescopio? La ambigüedad está presente y con esa simple oración no podemos llegar a ninguna conclusión sobre quién tiene el telescopio, yo o la mujer en cuestión. El lenguaje habla entonces de lo sofisticado que puede ser el cerebro humano, que a través de éste compone las más extraordinarias ideas. Pensemos, por ejemplo, en las matemáticas o en la física. Hay conceptos que incluso es difícil de expresar con palabras, pero que su representación matemática es poco menos que exacta. En ese sentido los lenguajes son un medio fascinante para entender más qué nos hace inteligentes, amén de que gracias al lenguaje, particularmente el escrito, el hombre ha podido describir y registrar su historia a lo largo de la historia. Así pues, pensando en estas cosas, pensé si sería complicado escribir un programa que pudiese conjugar los verbos en español. Por supuesto que tenemos verbos irregulares, lo cual complica la situación. Decidí entonces tomar solamente los regulares y hacer un programa en prolog que pueda generar sus posibles conjugaciones. La intención de esto era entonces generar la cantidad de diferentes palabras (las conjugaciones), para cada verbo e incorporarlas a un diccionario de verbos conjugados, todo ello para mi proyecto del corrector ortográfico inteligente. Encontré que hay 51 diferentes conjugaciones de los verbos regulares (con terminaciones ‘ar’, ‘er’, e ‘ir’). El programa en prolog salió entonces en una media hora, lo que demuestra que con la herramienta adecuada, la programación se vuelve incluso más sencilla”: /* conjugación de los verbos regulares */ domains lista = string * predicates pide_verbo member(symbol, lista) encuentra_sufijo(string, string, integer) encuentra_prefijo(integer, string, string) toma_elemento(lista,string)

Page 67: programacion_ludica

conjuga(symbol, string, string) goal clearwindow,pide_verbo. clauses toma_elemento([],_):- nl,!. toma_elemento([Head|Tail],Prefijo):- write(Prefijo,Head),nl, toma_elemento(Tail,Prefijo). pide_verbo:- write(“Dame un verbo regular: “), readln(Verbo), str_len(Verbo,LongVerbo), encuentra_sufijo(Verbo,Sufijo2,2), NumPref=LongVerbo-2, encuentra_prefijo(NumPref,Verbo,Prefijo), conjuga(presente,Prefijo,Sufijo2), readchar(_), conjuga(preterito,Prefijo,Sufijo2), readchar(_), conjuga(futuro,Prefijo,Sufijo2), readchar(_), conjuga(copreterito,Prefijo,Sufijo2), readchar(_), conjuga(pospreterito,Prefijo,Sufijo2), readchar(_), conjuga(gerundio,Prefijo,Sufijo2), readchar(_), conjuga(participio,Prefijo,Sufijo2), readchar(_), conjuga(otras,Prefijo,Sufijo2), readchar(_), !, clearwindow, pide_verbo. pide_verbo. encuentra_prefijo(Numero,Palabra,Prefijo):- frontstr(Numero,Palabra,Prefijo,_). encuentra_prefijo(_,_,”“). conjuga(presente,Prefijo,ar):- toma_elemento([o,as,a,amos,ais,an],Prefijo). conjuga(preterito,Prefijo,ar):- toma_elemento([é‚astes,ó,amos,asteis,aron],Prefijo). conjuga(futuro,Prefijo,ar):- toma_elemento([aré,arás,ará,aremos,areis,arán],Prefijo). conjuga(copreterito,Prefijo,ar):- toma_elemento([aba,abas,aba,ábamos,abais,aban],Prefijo). conjuga(pospreterito,Prefijo,ar):-

Page 68: programacion_ludica

toma_elemento([aría,arías,aría,aríamos,aríais,arían],Prefijo). conjuga(gerundio,Prefijo,ar):- toma_elemento([ando],Prefijo). conjuga(participio,Prefijo,ar):- toma_elemento([ado],Prefijo). conjuga(otras,Prefijo,ar):- toma_elemento([e,es,e,emos,éis,en,ara,aras,ara,áramos,arais,aran, ase,ases,ase,ásemos,aseis,asen],Prefijo). conjuga(presente,Prefijo,er):- toma_elemento([o,es,e,emos,éis,en],Prefijo). conjuga(preterito,Prefijo,er):- toma_elemento([í,iste,ió,imos,isteis,ieron],Prefijo). conjuga(futuro,Prefijo,er):- toma_elemento([eré,erás,erá,eremos,er‚is,erán],Prefijo). conjuga(copreterito,Prefijo,er):- toma_elemento([ía,ías,ía,íamos,íais,ían],Prefijo). conjuga(pospreterito,Prefijo,er):- toma_elemento([ería,erías,ería,eríamos,eríais,erían],Prefijo). conjuga(gerundio,Prefijo,er):- toma_elemento([iendo],Prefijo). conjuga(participio,Prefijo,er):- toma_elemento([ido],Prefijo). conjuga(otras,Prefijo,er):- toma_elemento([a,as,a,amos, as,an,iera,ieras,iera,i‚ramos,ierais,ieran, iese,ieses,iese,iésemos,ieseis,iesen],Prefijo). conjuga(presente,Prefijo,ir):- toma_elemento([o,es,e,imos,ís,en],Prefijo). conjuga(preterito,Prefijo,ir):- toma_elemento([í,iste,ió,imos,isteis,ieron],Prefijo). conjuga(futuro,Prefijo,ir):- toma_elemento([iré,irás,irá,iremos,iréis,irán],Prefijo). conjuga(copreterito,Prefijo,ir):- toma_elemento([ía,ías,ía,íamos,íais,ían],Prefijo). conjuga(pospreterito,Prefijo,ir):- toma_elemento([iría,irías,iría,iríamos,iríais,irían],Prefijo). conjuga(gerundio,Prefijo,ir):- toma_elemento([iendo],Prefijo).

Page 69: programacion_ludica

conjuga(participio,Prefijo,ir):- toma_elemento([ido],Prefijo). conjuga(otras,Prefijo,ir):- toma_elemento([a,as,a,amos,áis,an,iera,ieras,iera,i‚ramos,ierais, ieran,iese,ieses,iese,i‚semos,ieseis,iesen],Prefijo). member(X,[X|_]). member(X,[_|Y]):- member(X,Y). /* busca la terminación de una palabra: */ /* encuentra_sufijo(PalabraABuscar,SufijoAEncontrar, CuantasLetrasEnElSufijo) */ encuentra_sufijo(Palabra, Sufijo, Cuantos):- str_len(Palabra,Longitud), Longitud >= (Cuantos+1), PosInicial = Longitud-Cuantos, frontstr(PosInicial, Palabra, _, Sufijo). encuentra_sufijo(_,”“,_).

Page 70: programacion_ludica

Inteligencia artificial Cuadrados mágicos Existen todo género de herramientas de programación en este mundo del cómputo personal. En Windows es donde quizás hemos visto las mejores aplicaciones en este sentido. Las herramientas visuales son francamente excepcionales y hay que ser objetivos: Linux aún no cuenta con herramientas de un poder parecido. Sin embargo, no todo está perdido. La empresa Borland, creadora de Delphi, C++Builder y Jbuilder ha sacado Kylix (Delphi para Linux), el cual pretende incorporar esta estupenda herramienta en el mundo Linux. Desafortunadamente, por el momento, la versión 3 de Kylix es menos poderosa que Delphi 3 para Windows, pero esperemos que esto cambie en el futuro. Pero claro está, las mejores herramientas de programación tienen sentido sólo si existen programadores que puedan sacar jugo de las mismas. Para eso se necesita entrenar y capacitar a las siguientes generaciones que finalmente, son quienes seguirán escribiendo los programas que en el futuro se necesiten. Y es claro algo: hay que capacitar en la ciencia de la computación y no meramente en la herramienta de programación de moda. Lo importante es que los principios fundamentales de la programación (comunes a todos los lenguajes), se conozcan y se difundan. Así, cuando el programador necesite aplicarse en algún lenguaje particular, aunque le parezca desconocido, a la larga notará estos elementos comunes y en un par de semanas podrá escribir todo género de aplicaciones. Curiosamente, ciertos lenguajes de programación han pasado desapercibidos hoy día. Tenemos a Prolog, que en su momento fue la gran promesa del proyecto quinta generación de los japoneses (actualmente cancelado), el cual suponía que el software moderno tendría los elementos más importantes de la llamada inteligencia artificial. Los japoneses intentaron crear toda una generación de computadoras basadas en Prolog para que las aplicaciones que corrieran tuviesen mucho más “inteligencia” que las que actualmente conocemos. El problema de Prolog, inventado en 1972 por Colmeraur, es que –a pesar de sus grandes ventajas para cierto tipo de aplicaciones– es muy ineficiente para una buena cantidad de tareas que hacemos normalmente en la computadora. Y no es que no pueda escribirse un buen editor de textos o una estupenda hoja de cálculo en Prolog, sino que no es el lenguaje más indicado para ello. Prolog se basa en inferencias lógicas. A manera de ejemplo, si me presentan a alguien que se llama Jorge Flores y yo encuentro un parecido con un amigo mío llamado Luis Flores, quizás mi cerebro haga automáticamente una inferencia y me nazca preguntarle a Jorge: “¿no tienes un hermano llamado Luis?”. Ese tipo de inferencias las puede hacer Prolog. La herramienta, a diferencia de los lenguajes imperativos (Pascal, C++), prefiere describir el problema a programar el algoritmo (la receta de cocina, pues), que resuelva la dificultad. Prolog resuelve todo a través de un motor de inferencias, también reconocido como algoritmo de Robinson (en honor al autor, que publicó por primera vez el mecanismo en 1968). De esta manera y abreviando el asunto (quizás demasiado), en Prolog describimos el problema y el lenguaje nos da las soluciones a través de dos mecanismos: la recursión y el backtrack. La recursión es simplemente llamarse a sí mismo. En términos de programación significa que una rutina se llame a sí misma hasta que cierta condición impida que se cicle eternamente. El backtrack es, para decirlo en palabras simples, el regresar sobre nuestros pasos si resulta que la solución hallada no cumple con nuestras expectativas. Un ejemplo simple de backtrack puede verse en el recorrer un laberinto. Caminamos dentro de éste hasta que topamos con pared. Si esto ocurre, entonces retrocedemos sobre nuestros pasos hasta encontrar la primera bifurcación posible. Seguimos este procedimiento hasta hallar la salida. Como ejemplo consideremos la creación de un cuadrado mágico de orden 3 (impar). Un cuadrado mágico es una malla cuadriculada en donde la suma de las líneas verticales, horizontales y diagonales mayores suman todas las misma cantidad. Hay cuadrados mágicos de orden par y de orden impar. Crear cuadrados mágicos de orden impar es muy fácil siguiendo un algoritmo muy conocido. Sin embargo, aquí intentaremos –en lugar de describir este algoritmo– de escribir un programa en Prolog que resuelva el problema y encuentre todas las soluciones (en caso de haberlas). El código que soluciona el problema de un cuadrado de 3x3.

Page 71: programacion_ludica

Todo consiste en describir las condiciones iniciales y las de frontera. Luego entonces, le decimos a Prolog que nos dé las soluciones a través de probar todas las posibilidades exhaustivamente. Otro detalle notable es que el programa en Prolog ocupa muy poco espacio. Intente hacer esto en otro lenguaje y notará cómo crece su código. He aquí la versión en Turbo Prolog 2.0 de Borland: /* Este programa hace un cuadrado mágico de 3x3 */ /* Utilizando como característica principal el */ /* backtrack que viene integrado en Prolog. */ /* */ /* Dicho de otra manera, el programa no usa el */ /* algoritmo conocido para hallar los cuadrados */ /* mágicos de orden impar. En su lugar, describe */ /* las condiciones iniciales y de frontera que */ /* deben cubrirse en este tipo de cuadrados y */ /* entonces Prolog descubre todas las soluciones */ /* */ /* Programó: La_Morsa */ /* Octubre 2000 */ predicates numero(integer) /* los números que pueden usarse */ ecuacion(integer,integer,integer,integer) /* descripción de cada suma */ cuadrado_magico /* meta a resolver */ clauses /* condiciones iniciales */

numero(1). numero(2). numero(3). numero(4). numero(5). numero(6). numero(7). numero(8). numero(9). ecuacion(X,Y,Z,R) :- R = X + Y + Z. /* la suma siempre debe dar R */ cuadrado_magico :- numero(A), numero(B), numero(C), numero(D), numero(E), numero(F), numero(G), numero(H), numero(I), /* vienen las condiciones para los números: */

/* no debe haber números repetidos... */

/* condiciones de frontera, pues */

A<>B,A<>C,A<>D,A<>E,A<>F,A<>G,A<>H,A<>I, B<>C,B<>D,B<>E,B<>F,B<>G,B<>H,B<>I, C<>D,C<>E,C<>F,C<>G,C<>H,C<>I, D<>E,D<>F,D<>G,D<>H,D<>I, E<>F,E<>G,E<>H,E<>I, F<>G,F<>H,F<>I, G<>H,G<>I, H<>I, /* escribe en pantalla la combinación de números a probar */

Page 72: programacion_ludica

write(A,” “,B,” “,C,” “,D,” “,E,” “,F,” “,G,” “,H,” “,I),nl, /* condiciones necesarias para que sea cuadrado mágico */

ecuacion(A,B,C,R), ecuacion(D,E,F,R), ecuacion(G,H,I,R), ecuacion(A,D,G,R), ecuacion(B,E,H,R), ecuacion(C,F,I,R), ecuacion(A,E,I,R), ecuacion(G,E,C,R), nl,write(“Solución”),nl, write(A,” “,B,” “,C),nl, write(D,” “,E,” “,F),nl, write(G,” “,H,” “,I),nl, write(“Presiona cualquier tecla para continuar...”), readchar(_), /* presiona una tecla para continuar */ fail. /* dame todas las soluciones */ goal cuadrado_magico. /*meta a resolver */

Si le incomoda o francamente le da flojera entender cómo es que el programa funciona, no se preocupe, corra el ejecutable. Si está en Windows 9x en adelante encontrará que todo acontece en una ventana de DOS. Es increíble que tan pocas líneas de código generen tanto procesamiento.

Page 73: programacion_ludica

Inteligencia artíficial Corrector fonético Todos los que usamos la computadora para escribir textos, utilizamos comúnmente algún tipo de procesador de palabras. Este mercado, sin duda fundamental en el cómputo personal, se ha desarrollado de manera impresionante, a tal grado que algunas empresas venden sistemas completos que contienen todo lo que el usuario puede necesitar: hoja de cálculo, programa para presentación de conferencias, procesador de textos, bases de datos, etc. A esto se le ha denominado una “suite” de aplicaciones y las prestaciones de cada una de ellas ha logrado su propio nicho de clientes. Sin embargo, es claro que la campaña mediática de algunas compañías de software, o bien, el hecho de traer “preinstalado” en las computadoras en venta esas suites, hace que muchos usuarios se conviertan en una especie de clientes cautivos. Ése es quizás el caso de la Suite Office, de Microsoft, que sin duda es líder del mercado en este nicho particular de aplicaciones y además de las razones ya expuestas, es evidente que la calidad de sus productos lo hacen ciertamente uno de los favoritos. Es decir, hay que reconocer que amén de la publicidad que la empresa de las ventanas pueda hacer, es claro que sus productos realizan con bastante versatilidad las tareas encomendadas. Como sea, lo importante de un procesador de palabras no es nada más que permita la escritura de documentos, sino que además, corrija los errores que los usuarios cometemos al escribir algún texto. MsWord, por poner el programa más popular en el mercado, tiene sus propias dificultades. Por ejemplo, hace unos años se descubrió una cantidad de pifias bastante graves en el tesaurus de MsWord. Definiciones como la de “flojo”, si mal no recuerdo, que aludían a los de ciertos pueblos latinoamericanos, solamente podían explicarse por la xenofobia del creador de dicho archivo de definiciones. Microsoft contestó a las críticas indicando que un nuevo equipo de lingüistas y gente profesional de la palabra, haría una revisión exhaustiva de estos problemas para que no volvieran a ocurrir. Hasta donde sé, las correcciones se habrán hecho, pues nadie más ha encontrado este tipo de errores después de que fueron señalados.

Imagen 1 La pantalla principal del verificador fonético

Sin embargo, a veces los correctores integrados al procesador de palabras no funcionan correctamente. Ilustremos el caso: uno escribe la palabra “etsa”, por decir algo, y el sistema no lo cambia por “esta”, ni se da cuenta del error de dedo. ¿Cómo lidiar con este tipo de errores? ¿qué tipo de software podría atrapar estos

Page 74: programacion_ludica

problemillas, simples “errores de dedo”? Pues bien, hace unos años, para ser precisos, en 1988, Enricco Wizard, un buen colega y mejor amigo, que murió hace un par de años, discutía conmigo acerca de esta dificultad. Después de un par de horas de someter al ring de las ideas los diferentes aspectos del problema, Enricco dio con una solución simpática: se le ocurrió hallar todas las parejas de letras posibles en las palabras en español y entonces comparar contra esa lista de dos letras contra cada palabra y así ver si había errores de dedo. Así, se escribió una primera versión de lo que Wizard llamó el “turbo verificador” (pues estaba escrito en Turbo Pascal 5.5). El programa trabajaba realmente bien y era muy, pero muy rápido. Hoy, casi 20 años después, decidí pasar este esfuerzo a Windows. Tomé el código fuente que Enricco escribió, lo modifiqué de acuerdo a la herramienta que uso actualmente (Delphi) y de nuevo, note que el sistema corre rápido y que además, hace la tarea fenomenalmente bien. Desde luego que el mérito principal de este esfuerzo de software es de Enricco Wizard, que ya no está entre nosotros, pero que ha dejado en el tintero algunas ideas que han sobrepasado, sin duda, la prueba del tiempo.

Page 75: programacion_ludica

Inteligencia artificial Lapsus: un corrector ortográfico inteligente Una de las principales tareas que las computadoras personales realizan a diario es la edición e impresión de textos, cartas, memoranda y en general, material escrito. Debido a esto, se han desarrollado múltiples editores y procesadores de palabras. Sin embargo, todo el material escrito que se alimenta a una computadora debe ser en muchos casos revisado y corregido antes de ser impreso. En términos generales, la corrección de los textos se realiza de manera manual, esto es, mediante la inspección visual del texto y en algunos casos, con ayuda de diccionarios. El problema de revisar y corregir textos mediante programas de computadora es un problema ya añejo. En la actualidad existen muchos correctores de ortografía para el habla inglesa, sin embargo, para el idioma castellano existen muy pocos, además de que su costo es alto. Lapsus es un sistema para verificar la ortografía de un texto escrito en español. Trabaja –a diferencia de los correctores tradicionales que funcionan mediante gigantescos diccionarios– bajo las reglas de la ortografía castellana, además de tener la alternativa de usar diccionarios específicos, pues muchas palabras son excepciones a las reglas gramaticales conocidas. Evidentemente este proceso no es tan sencillo como parece. El idioma español contiene más de 400,000 vocablos distintos (sin tomar en cuenta las conjugaciones de los verbos), lo cual hace que este procedimiento sea, en algunos casos, sumamente complejo. La intención de Lapsus es permitir al usuario del sistema verificar sus textos automáticamente con la computadora, señalar los posibles errores que surjan en el momento de la verificación de estos y tomar las acciones correctivas que sean pertinentes. Por otra parte, debe tomarse en cuenta que Lapsus no entiende el español, no puede comprender el significado de las frases de un texto. Simplemente es un corrector de ortografía, no de estilo. Este tipo de programas y sistemas aún están lejos de ser una realidad casera. Sin embargo, es posible que todo aquel que usa un procesador de palabras pueda sacar provecho de la existencia de Lapsus. La verificación de la ortografía de un texto es en algunos casos una labor pesada y tediosa. Lapsus permite hacer este proceso mucho más eficiente y rápido para los seres humanos. Lapsus –en suma– es un corrector de ortografía que consta de reglas gramaticales y uso de diccionarios específicos. Debido a esto, es posible que en un texto se encuentren palabras que no estén incluidas en el diccionario del usuario o se encuentren bajo las normas de las reglas gramaticales.

Imagen 1 El menú principal de Lapsus

Lapsus puede crear varios archivos de acuerdo a los intereses del usuario: (1) Archivo de Diagnóstico, (2) Archivo de palabras no encontradas al revisar el texto en cuestión y (3) un diccionario auxiliar, creado por el usuario. Este último archivo puede ir creciendo cada vez que se verifica un texto o bien, cuando el usuario así lo requiera, ya que dicho archivo no contiene ningún formato especial. Lapsus funciona concurrentemente con Word para Windows. Esto quiere decir que el usuario puede pedir que se haga la corrección de documentos SI0 necesidad de salir de Word para poder usar Lapsus. Esto, dicho en

Page 76: programacion_ludica

otras palabras, significa que Word y Lapsus funcionan comunicándose el primero con el segundo, para que éste último, a su vez, haga las correcciones y entonces las comunique al documento en Word. De esta manera, Lapsus puede considerarse, en cierta medida, un “plug-in” (un añadido) para Word. El programa permite verificar un documento en Word de diversas maneras, habilitando o deshabilitando opciones para la corrección. Uso de reglas ortográficas A diferencia de otros correctores del español, que utilizan reglas ortográficas para su funcionamiento. El español, como todo lenguaje humano es cambiante. Palabras, expresiones y reglas que se usaban en el pasado son obsoletas ahora y en vista de esta situación, se decidió mantener las reglas ortográficas en un archivo especial, el cual es consultado cada vez que el sistema se ejecuta. Este archivo se denomina Reglas.DB, y contiene alrededor de 260 reglas ortográficas de uso común en el castellano. Las reglas pueden ser editadas con cualquier procesador de palabras (o editor de textos) que utilice el formato ASCII sin caracteres de control o símbolos especiales. Por ejemplo, WordStar en su modo non-document, PC-Write, )otepad o incluso el editor auxiliar de Lapsus pueden servir para tal fin.

Imagen 2 El menú para crear/modificar/eliminar reglas ortográficas

Cada una de las reglas ocupa un renglón en el archivo Reglas.Db. Así entonces, escribir una regla nueva significa finalmente, agregar una línea más al archivo ya mencionado. Las reglas ortográficas, para que puedan ser entendidas por Lapsus, requieren de estar en un formato específico para poder ser leídas por el sistema. Así entonces, puede ser que en un principio, el archivo Reglas.DB le parezca al usuario final difícil de entender. No obstante la aparente complejidad del mismo, sus elementos esenciales son muy fáciles de comprender y usar. A continuación se describe el formato completo de las reglas, indicando la sintaxis que las reglas necesitan y que -en rigor- deben ser escritas correctamente para que Lapsus pueda trabajar con las mismas: Las reglas ortográficas tienen tres posibles alternativas, las cuales pueden aplicar a:

• prefijo (p) de la palabra analizada (parte inicial de la palabra en cuestión) • sufijo (s) de la palabra analizada (parte final de la palabra en cuestión) • subcadena (sb) de la palabra analizada (en cualquier subparte de la palabra en cuestión)

Las letras “p”, “s”, y “sb” corresponden respectivamente a prefijo, sufijo y subcadena, y estas letras serán usadas para informarle a Lapsus en qué parte de la palabra se aplica la regla ortográfica.

Page 77: programacion_ludica

La regla entonces sigue el siguiente formato: Pasemos al análisis de esta estructura. En primer término aparece la palabra seguido de paréntesis que abre. Esto debe aparecer en minúscula estrictamente. Acto seguido, pueden verse cuatro parámetros, a saber:

• letra Indica la letra a la cual se aplica la regla. Por ejemplo, si la regla ortográfica es sobre el uso de la v, éste es el parámetro que se utiliza. (Véanse los ejemplos más adelante).

• palabra Indica la palabra que no cumple precisamente con la regla que está siendo definida, es decir,

muestra el ejemplo de la contraposición a la regla ortográfica misma.

• clave es exactamente lo que indica el alcance de aplicación de la regla (prefijo, sufijo o subcadena). Utilícese solamente las siguientes palabras claves (entre doble comillas: p, s, sb).

• lista Se refiere a la lista de palabras que son la excepción a la regla en cuestión. Tales

palabras deben aparecer separadas por espacios entre sí.

Algunos ejemplos pueden ser realmente ilustrativos. Considérese la siguiente regla:

Las palabras que empiezan con env se escriben siempre con v. La regla en el archivo Reglas.DB se escribirá entonces así:

v enb p Lapsus reconoce la regla de la siguiente manera: Las excepciones a las palabras que empiezan con env nada más pueden ser aquellas que comienzan con enb, que en este caso no hay tales excepciones a la regla y el rango de aplicación de la misma es con todos los prefijos de las palabras. La regla descrita se refiere a palabras en donde el rango de aplicación corresponde al prefijo de las misma. Ahora considérese la siguiente regla:

Todas las palabras que terminan con ave se escriben con v. Esta regla puede expresarse en el lenguaje descrito de la siguiente forma:

v abe s árabe jarabe La cual puede ser descrita de la siguiente manera: Las excepciones a las palabras que terminan en ave nada más pueden ser aquellas que terminan con abe, las cuales son, árabe y jarabe (y nada más), y el rango de aplicación de la regla son los sufijos de las palabras. Por último, un ejemplo de una regla que se refiera a subcadenas puede ser la siguiente: Las palabras que tienen dentro de ellas (en cualquier parte de la misma) las letras ilv se escriben siempre con v. La cual se traduce en el archivo de reglas de la siguiente forma:

v ilb sb bilbao Y se interpreta de la siguiente manera: Las excepciones a las palabras que tienen como subpalabra ilv se escriben siempre con v, excepto la palabra bilbao.

Page 78: programacion_ludica

Sobre Lapsus Lapsus es el primer programa de corrección del lenguaje castellano que utiliza técnicas de la Inteligencia Artificial (IA) para la verificación ortográfica. La primera versión (circa 1992) fue escrita totalmente en prolog (turbo prolog versión 2.0) y además de utilizar un diccionario con más de 60,000 términos (en donde están consideradas las palabras más usadas del español), se incluía un análisis de verificación por reglas ortográficas. La versión actual funciona a través de la comunicación entre procesos llamada OLE (Object Linking and Embedded) y fue escrita usando Delphi 5.0 de Borland. Para que Lapsus llegue a sus manos, han pasado más de diez años de investigación en temas como análisis automático de textos, verificación y corrección a través de computadoras, discusiones interminables sobre cómo debe hacerse un programa de esta naturaleza, además de una maestría en bases de datos inteligentes, en la Universidad de Essex, Inglaterra, en el año de 1988.

Page 79: programacion_ludica

Inteligencia artificial Creador de crucigramas Una amiga –que editaba una revista de negocios– me pidió que hiciese una sección de crucigramas, siempre y cuando ésta presentara nombres y términos dedicados a las finanzas y al mundo de los negocios. Yo le dije que lo haría sin dudarlo, pues a priori pensaba que ya en Internet más de una persona habría encarado la creación de crucigramas a través de la computadora. Para mi sorpresa, encontré que el problema realmente no había sido analizado cuidadosamente. Por un momento pensé que debería haber ya muchos programas que me permitieran crear la malla cuadriculada en donde se pondrán las palabras, así como poner las casillas vetadas (las marcas negras), que separan las palabras. Una vez hecho esto, imaginaba que le podía dar una lista de palabras y el sistema intentaría acomodarlas al mejor estilo de un crucigrama. Pues bien, nada de eso existe estrictamente. ¿Por qué? Había que investigar el fenómeno. La razón de esto es que la creación de crucigramas necesita de diversos pasos, unos que son labores triviales de la programación, pero que en última instancia los pasos finales son prácticamente difíciles de cumplir adecuadamente. Crear un programa que dibuje la cuadrícula y me permita poner los cuadros negros es algo sencillo, pero la generación del crucigrama representa la gran dificultad. Imaginemos que tenemos las palabras que queremos poner en el crucigrama. Es más supongamos que tenemos palabras de más, para que si una no se puede poner en donde debe ponerse, podamos poner otra de la misma cantidad de letras, por ejemplo. Imaginemos el siguiente crucigrama elemental. Nótese que no es ni siquiera una cuadrícula con cierta simetría. Nada de eso, pero para efectos ilustrativos es muy interesante. Tenemos cuatro palabras que debemos acomodar en ese crucigrama. La palabra 1 es de 5 letras, la 2 es de 6 letras, la tercera es de 5 letras y la cuarta es de 7 letras. Ahora supongamos que tenemos las siguientes palabras, las cuales podemos usar para crear el crucigrama: 2 +---+ | | +---+---+---+---+---+ 1 | | | | | | 3 +---+---+---+---+---+---+ | | | | +---+ +---+ | | | | +---+---+---+---+---+---+---+ 4 | | | | | | | | +---+---+---+---+---+---+---+ | | | | +---+ +---+ | | +---+ Las palabras que puedo poner son estas: market, trees, monkey, simple, wise, vague, sea, yacht, ocean, foggy, artista, realice, brave y quite. Estas pocas palabras son suficientes para trabajar en el programa demostrativo. ¿Cómo resolveremos el problema? Necesitamos poner lo siguiente: Una palabra de cinco letras con otra de seis letras, en donde se intersecten en la tercera letra de la primera palabra con la segunda letra de la segunda palabra; además, requerimos una tercera palabra de siete letra y una cuarta de cinco letras, en donde la intersección de la segunda con la tercera palabra sea en la posición cinco de la segunda palabra

Page 80: programacion_ludica

con la tercera posición de la tercera palabra; finalmente necesitamos que la intersección entre la tercera y la cuarta palabra se dé en la posición 5 de la tercera palabra con la posición 3 de la cuarta palabra. Esto significa que hablamos de restricciones entre las propias palabras y posiciones específicas en donde deben coincidir las letras de ambas palabras en conflicto. ¿Cómo es que prolog resuelve el problema? Para resolverlo con prolog, apelamos al backtrack, el cual significa regresar sobre sus propios pasos cuando el sistema se encuentra en un callejón sin salida. El sistema funciona así: primero resuelve en la meta la primera instrucción: hallar una palabra de 5 letras (M1). Una vez hecho esto, busca una palabra con 6 letras (M2). Ahora intenta ver si la intersección de M1 con M2 en la posición 3 de M1 con la posición 2 de M2 coinciden en la letra que va ahí, si eso pasa, entonces busca la siguiente meta a resolver, pero si esto falla, el sistema regresa (hacia atrás, es decir hace backtrack), y busca una nueva palabra de seis letras e intenta de nuevo satisfacer la intersección de M1 con M2. Si falla, busca una nueva palabra de seis letras… Y si ninguna de las palabras que tiene de seis letras funciona, sorprendentemente para algunos, el sistema no dice: no se puede resolver el crucigrama, sino que hace backtrack de nuevo y entonces busca una nueva palabra de cinco letras y re-empieza todo el proceso descrito antes con la de seis letras. Dicho en otras palabras, prolog hace un verdadero esfuerzo de procesamiento, que incluso para resolver este simplísimo crucigrama, lleva cientos de miles de iteracciones a través del backtrack. Ahora bien, extrapolemos esto a un crucigrama de 10x10 casilleros, en donde la cuadrícula tiene un dibujo incluso simétrico (esto es clásico de los crucigramas profesionales). Imaginemos entonces que no tenemos una decena de palabras, sino unas miles. Si definimos todas las restricciones, ¿cuánto tiempo le llevará al sistema hallar una solución si es que la hay? No lo sabemos. El sistema es no decidible, es decir, no podemos saber si hay una solución o no al crucigrama que acabamos de dibujar para que el sistema nos ponga las palabras adecuadas. La única manera de saberlo es intentar generar todos los posibles crucigramas con esas palabras (y con las restricciones definidas), para ver si existe semejante crucigrama o no. El tema da para más. ¿Podrá escribirse un programa que genere un crucigrama dadas ciertas palabras? ¿qué otras restricciones habría que poner para que por lo menos, un programa de esta naturaleza ayudase a los creadores humanos en esta labor? Quizás éste es uno de esos programas que parecen simples pero que en el fondo contienen un sinfín de problemas no del todo resolubles incluso a través del cómputo. Por cierto, ésta es la solución que entrega el sistema: 2 +---+ | M | +---+---+---+---+---+ 1 | B | R | A | V | E | 3 +---+---+---+---+---+---+ | R | | Q | +---+ +---+ | K | | U | +---+---+---+---+---+---+---+ 4 | R | E | A | L | I | Z | E | +---+---+---+---+---+---+---+ | T | | T | +---+ +---+ | E | +---+

Page 81: programacion_ludica

/*************************************/ /* Crucigramas */ /* Por: La_Morsa */ /* Versión: 1.0 beta */ /* Fecha: Nov 4, 1995 */ /* */ /* */ /* programa basado en el que aparece */ /* en el libro: An Introduction to */ /* programming in Prolog, de Patrick */ /* Saint-Dizier, ed Springer-Verlag */ /* */ /*************************************/ domains wordlist = char* predicates word(wordlist) num_lets(integer,wordlist) long(integer,wordlist) intersect(wordlist,wordlist,integer,integer) extract(wordlist,integer,char) crisscross(wordlist,wordlist,wordlist,wordlist) clauses word(['m','a','r','k','e','t']). word(['t','r','e','e','s']). word(['m','o','n','k','e','y']). word(['s','i','m','p','l','e']). word(['w','i','s','e']). word(['v','a','g','u','e']). word(['s','e','a']). word(['y','a','c','h','t']). word(['o','c','e','a','n']). word(['f','o','g','g','y']). word(['a','r','t','i','s','t']). word(['r','e','a','l','i','z','e']). word(['b','r','a','v','e']). word(['q','u','i','t','e']). /* predicate num_lets(T,X1) is true if T */ /* is the number of letters in the word X1 */ num_lets(0,[]). /* el total de letras que tiene la palabra [] es 0 */ num_lets(T,[M1|M2]) :- num_lets(T1,M2), T = T1 + 1. /* predicate long(T,M) is true if M has lenght T */ long(T,M) :- word(M), num_lets(T,M). /* predicate intersect(C1,C2,N1,N2) extracts */

Page 82: programacion_ludica

/* the letters in position N1 from the list C1 */ /* and the one in position N2 from the list C2. */ /* It then ask whether the two extracted */ /* letters are the same. This is expressed */ /* through the ocurrence of the same variable */ /* R in both calls to extract. */ intersect(C1,C2,N1,N2) :- extract(C1,N1,R), extract(C2,N2,R). /* predicate extract(C,N,R) is true if R is the */ /* Nth letter in the list C of letter... */ extract([C1|C2],1,C1). extract([C1|C2],N,R) :- M=N-1, extract(C2,M,R). /* predicate crisscross is the main call. It */ /* selects words of the appropiate lenght for */ /* a given grid. The lenght of the words here */ /* is, respectively, 5, 6, 7, and 5. It places */ /* constrains on the words through predicate */ /* intersect... */ crisscross(M1,M2,M3,M4) :- long(5,M1), long(6,M2), intersect(M1,M2,3,2), long(7,M3), intersect(M2,M3,5,2), long(5,M4), intersect(M3,M4,5,3). goal crisscross(M1,M2,M3,M4), write(M1),nl, write(M2),nl, write(M3),nl, write(M4),nl.

Page 83: programacion_ludica

Inteligencia Artificial Engañando a la prueba de Turing De acuerdo a la Wikipedia, se llama Prueba o Test de Turing al procedimiento desarrollado por Alan Turing para corroborar la existencia de inteligencia en una máquina. Fue expuesto en 1950 en un artículo (Computing machinery and intelligence) para la revista Mind, y sigue siendo uno de los mejores métodos para los defensores de la Inteligencia Artificial. Se fundamenta en la hipótesis positivista de que, si una máquina se comporta en todos los aspectos como inteligente, entonces debe ser inteligente. La prueba consiste en un desafío. Se supone un juez situado en una habitación, y una máquina y un ser humano en otras. El juez debe descubrir cuál es el ser humano y cuál es la máquina, estándoles a los dos permitidos mentir al contestar por escrito las preguntas que el juez les hiciera. La tesis de Turing es que si ambos jugadores eran suficientemente hábiles, el juez no podría distinguir quién era el ser humano y quién la máquina. El límite temporal que Turing puso para que una máquina consiga superar el test engañando durante bastante tiempo a un buen interrogador, y no dejándole aclarar si se está dirigiendo a un ser humano o a una máquina. Todavía ninguna máquina puede pasar este examen en una experiencia con método científico. Existen, desde luego, muchas versiones de esta prueba pero el afán es siempre el mismo. Si las respuestas de un programa de computadora es indiscernible de las respuestas que daría un ser humano, entonces estamos ante –al menos– un ente inteligente. ¿Será posible engañar a la prueba de Turing? Enricco Wizard, extraordinario programador, fallecido hace unos pocos años, escribió un programa que hace precisamente esto. Imagine pues un programa verdaderamente inteligente, uno que pueda responder a cualquier pregunta en español, en el lenguaje que naturalmente hablamos los seres humanos en nuestro país. Alguno de mis cinco lectores me dirá que ningún programa realmente puede responder cualquier pregunta, porque para esto necesitaría de una amplia concepción del mundo (y sería algo inteligente ¿no?). Vaya, que simplemente reconocer las preguntas en lenguaje natural sería ya un mérito más que suficiente. Pero no hay que cerrarse ante la posibilidad de imaginar un programa de estas características. Simplemente imagine que existe. Ahora, hagamos una pregunta cualquiera: ¿Quién es divina? por ejemplo. Si la respuesta es: “Ilse”, a lo mejor puedo suponer que a sabiendas que el programa iba a interactuar conmigo, podrían haber programado esta respuesta. Qué tal preguntarle: “¿Cuánto vale mi computadora?” Si el sistema me responde con: “Muchos pesos”, entonces podré suponer que es una respuesta genérica. Pero sigamos. Tomemos un lápiz y preguntémosle a nuestro hipotético programa: “¿Qué tengo en la mano?” Si la respuesta es: “un lápiz”, seguramente me quedaré sorprendido, porque no encontraré en primera instancia forma alguna para explicar dicha respuesta. Wizard –a partir de esto– elaboró su programa y el autor del mismo se demostró como un verdadero observador de la conducta humana. Enricco creó el programa IQ, que posteriormente llamaron lisa, liza, ouija electrónica, devil 666, entre otros nombres, el cual supuestamente es un sistema que, efectivamente, responde cualquier pregunta, tal y como hemos explicado antes. El sistema trabaja considerando que hay un personaje, denominado Liza, quien es la encargada de responder a las preguntas. Cada vez que se quiere preguntar al sistema algo, hay que darle a Liza, de buenas maneras, por supuesto, la pregunta. Esto se hace escribiendo: “Liza, favor de responder a la siguiente pregunta:” (al escribir los dos puntos, el sistema pasa a la siguiente línea en la pantalla). Ahora hacemos la pregunta que nos interese del tema que queramos, por ejemplo: “¿Ganarán los Pumas en esta ocasión?” (Termine con signo de interrogación). Después de una breve pausa, el sistema dirá algo así: “De acuerdo con mis estimaciones, los Pumas ganarán de nuevo”. Por supuesto que todo es un truco, un acto de magia, como el que ejecutan los profesionales de la ilusión y que nos sorprenden, pues desafían todas las leyes conocidas. ¿Cómo trabaja? Muy fácil. Considere a su posible víctima y dígale que tiene un programa fascinante e increíblemente inteligente. Insista que el sistema puede responder prácticamente cualquier pregunta que se le haga. Ejecute el programa IQ y dígale a su interlocutor que piense en alguna pregunta. Supongamos que dicha pregunta es: “¿Quién es el Presidente de México?”. Entonces escriba usted: “.Calderón” (empiece con un punto). Note que cada vez que presiona alguna letra de lo que está realmente escribiendo, no aparece en

Page 84: programacion_ludica

pantalla lo que uno debería ver, sino parte del mensaje: “Liza, favor de responder...” etc. Es decir, el programa no hace “eco” en pantalla de lo que teclea uno, sino que siempre pone la frase: “Liza, favor de...” etc. Obviamente el sistema está capturando la respuesta que el programa dará al usuario. Cuando termine de escribir la respuesta elegida, escriba punto de nuevo (“.”), el cual es el terminador de la misma y entonces, ahora sí, complete la oración que hay que poner cada vez que se le hace una pregunta a Liza (termine con dos puntos (“:”)), y ahora, en la siguiente línea, escriba la pregunta correspondiente. Después de algunos segundos Liza responderá: “Sin considerar más datos, se trata de: Calderón”. Puede con esto impresionar a más de uno, incluso a aquellos que son unos verdaderos expertos en las artes de la programación (me consta). Ahora bien, preguntémonos por qué el truco funciona. La verdad es que cuando tecleamos, nadie observa qué teclas en particular estamos oprimiendo realmente. Otra cuestión es la velocidad del tecleo, que hace aún más difícil detectar el engaño (¿alguien ha tratado de ver la clave de un usuario mirando el teclado cuando éste escribe su contraseña?). Finalmente, es claro que la posible víctima está atenta a lo que aparece en pantalla y eso distrae la posibilidad de atender a lo que se escribe en el teclado.

Imagen 1 Liza para Windows

Tan fue un revuelo el programa de Enricco, que el dizque investigador de ovnis y fenómenos paranormales, Jaime Maussán, fue engañando por un adolescente que había modificado la versión original de Lisa y le había puesto frases satánicas para así crear un efecto más dramático. Maussán se la creyó originalmente, hasta que alguien le explicó el truco de cómo funcionaba. Eso revela un dato por demás ya conocido: quien quiere creer en algo seguramente lo creerá sin considerar ninguna prueba en contra de lo que cree. Al televisivo investigador le pasa eso contínuamente y por eso prácticamente todas sus “investigaciones” son finalmente sesgadas por sus propias creencias. Es algo endémico, tanto a favor o en contra de cualquier hipótesis que se planteé la gente. Cabe señalar que después de la creación de este programa, y a sabiendas que más de una persona lo modificó –editándolo con algún programa que manejaba el código como texto (un editor hexadecimal, por ejemplo)– Enricco se dio a la tarea de hacer una versión para Windows y encriptó todos los mensajes para que fuese difícil cambiarlos. De esta manera pretendía mantener sin alteraciones el software original. Sólo me resta una advertencia. Demuestre el programa por un corto tiempo, no se trata de hacer una sesión de dos horas porque entonces sí, tarde o temprano hallarán el truco usado. Limítese a hacer no más de diez preguntas y nunca deje el programa en la máquina en donde está haciendo la demostración. Para añadir un efecto más dramático, haga que el programa responda de pronto de manera errónea o muy vagamente (si contesta siempre con certeza absoluta es más difícil que le crean). Cuando le pidan una copia del sistema, diga

Page 85: programacion_ludica

que no se lo puede pasar a nadie por las cuestiones del pirateo de software, que la BSA lo va a perseguir o alguna excusa de esa naturaleza... Ah, algo más, y esto es lo más importante. Haga como los verdaderos magos: nunca revele el truco usado.

Page 86: programacion_ludica

Inteligencia Artificial Creación de sudokus Hace tiempo una amiga me mostró un libro con cientos de problemas de Sudokus. Le dije que ya había visto ese tipo de “acertijos” pero que no entendía realmente por qué se estaban poniendo tan de moda. Así, ella tomó el libro, lo abrió en alguna de las páginas y me enseñó cómo se resolvían dichos problemas. Fue claro que se trataba de un juego de lógica, en donde hay que asumir que en algunas casillas hay ciertos números, lo cual en ocasiones no resulta cierto, y entonces hay que asumir otros. Un error en una casilla puede llevar a tener que cambiar todo lo que hemos asumido, y que parecía correcto, para tener que empezar de nuevo. Analizando con cuidado empecé a entender que el pasatiempo involucraba mucha lógica más que habilidad matemática. Poco a poco descubrí que los Sudokus pueden ser, sin duda, muy adictivos. El objetivo de este juego es rellenar una cuadrícula de 9×9 celdas (81 casillas) dividida en subcuadrículas de 3×3 (también llamadas “cajas” o “regiones”) con las cifras del 1 al 9 partiendo de algunos números ya dispuestos en algunas de las celdas. Lo que importa es que sean nueve elementos diferenciados. En este pasatiempo no se debe repetir ninguna cifra en una misma fila, columna o subcuadrícula. Un Sudoku está bien planteado si la solución es única. Realmente no es estrictamente necesario utilizar números, sino que se pueden usar letras, formas o colores sin alterar las reglas, pero se utilizan números por comodidad, porque es más fácil recordarlos. La cuadrícula más común es de 9x9 con regiones de 3×3, pero también se utilizan otros tamaños. Además, las regiones no tienen por qué ser cuadradas, aunque generalmente lo son. Historia Este rompecabezas numérico pudo haberse originado en Nueva York en 1979. Entonces, la empresa Dell Magazines publicó este juego, ideado por Howard Garns, bajo el nombre de Number Place (el lugar de los números). Es muy probable que el Sudoku se crease a partir de los trabajos de Leonhard Euler, famoso matemático suizo del siglo XVIII. Dicho matemático no creó el juego en sí, sino que utilizó el sistema llamado del cuadrado latino para realizar sus trabajos en la teoría del cálculo de probabilidades. Cabe señalar que el nombre de Cuadrados Latinos se debe a que fue el propio Euler quién utilizó caracteres latinos como símbolos Una solución de un Sudoku correcta genera un cuadrado latino, el cual es una matriz de n×n elementos, en la que cada casilla está ocupada por uno de los n símbolos de tal modo que cada uno de ellos aparece exactamente una vez en cada columna y en cada fila. Por ejemplo:

| a b c | | b c a | | c a b |

Un cuadrado latino se dice que está reducido (o normalizado o de forma estandarizada) si la primera fila y la primera columna están en orden natural. Por ejemplo, el primer cuadrado está reducido, porque la primera fila y la primera columna son a, b, c. Evidentemente, es posible hacer un cuadrado latino permutando (reordenando) las filas y las columnas. Posteriormente, la editorial Nikoli lo exportó a Japón, publicándolo en el periódico Monthly Nikolist en abril de 1984 bajo el título “Sūji wa dokushin ni kagiru”, que se puede traducir como “los números deben estar solos”. Fue Kaji Maki, presidente de Nikoli, quien le puso el nombre. Posteriormente, el nombre se abrevió a Sūdoku (sū = número, doku = solo); ya que es práctica común en japonés tomar el primer kanji de palabras compuestas para abreviarlas.

Page 87: programacion_ludica

En 1986, Nikoli introdujo dos innovaciones que garantizarían la popularidad del rompecabezas: el número de cifras que venían dadas estaría restringida a un máximo de 30 y sería “simétrico” (es decir, las celdas con cifras dadas estarían dispuestas de forma rotacionalmente simétrica). Esto no siempre se cumple en los Sudokus actuales. En 1997 Wayne Gould preparó algunos Sudokus para el diario The Times, que los publicó bastante más tarde, en diciembre de 2004. Tres días después, The Daily Mail publicó sus Sudokus con el nombre codenumber. En 2005 muchos otros periódicos de todo el mundo empezaron a incluir Sudoku a diario en sus páginas. En el año 2005 ven la luz pública los primeros libros sobre Sudoku en español, por ejemplo, “Los mejores Sudokus”, con 200 Sudokus agrupados en 4 niveles de dificultad, con una extensa descripción de la historia de este pasatiempo así como de sus reglas y un ejemplo que lleva de la mano, paso a paso, a la resolución de los mismos. A este primero le siguieron 3 volúmenes más, así como un libro sobre Kakuros, otro sobre Cuadrados mágicos, y uno más sobre el Cuboku, en donde algunos de estos son simples variaciones del pasatiempo original. En el año 1997, el juez jubilado de Hong-Kong Wayne Gould, de 59 años de edad, un neozelandés, vio un rompecabezas parcialmente completado en una librería japonesa. Durante unos 6 años desarrolló un programa de computadora para producir rompecabezas rápidamente. Sabiendo que los periódicos del Reino Unido tienen una larga tradición en cuanto a la publicación de crucigramas y otros rompecabezas, promovió el Sudoku en The Times en Gran Bretaña, publicándolo el 12 de noviembre de 2004 (llamándolo Su Doku). Los rompecabezas de Pappocom, empresa de software de Gould, se han impreso diariamente en el Times desde entonces. Nationwide News Pty Ltd comenzó a publicar el rompecabezas en The Daily Telegraph de Sydney el 20 de mayo de 2005; se imprimieron cinco rompecabezas con soluciones ese día. La gran popularidad alcanzada por el Sudoku en los periódicos británicos y más adelante, en otras publicaciones internacionales ha hecho que lo apodaran en los medios de comunicación mundiales en 2005 como el “rompecabezas con un crecimiento más rápido en el mundo”, quizás comparable solamente con el cubo de Rubik, que tuviese una aceptación mundial vertiginosa en los años ochentas y que generó no solamente ventas millonarias de dicho juguete, sino que además alcanzó notoriedad por el enfoque científico (particularmente en las matemáticas), para poder hallar métodos para solucionarlo de manera eficiente y satisfactoria. Sin duda el sudoku es un buen ejercicio de programación. La pregunta es simplemente ¿cómo se pueden generar este tipo de acertijos usando la computadora? ¿qué programa hay que escribir? Aparentemente la tarea no es sencilla, pero cuando pensé en Prolog, el lenguaje de programación diseñado para la inteligencia artificial, llegué a la conclusión que el programa podía escribirse en pocas líneas. He aquí el código que generé:

Page 88: programacion_ludica

/* Generador de Sudokus */ /* Por La_Morsa */ /* Marzo 2010 */ /* Versión 1.0 */ delete(X, [X|T], T). delete(X, [H|T], [H|S]):- delete(X, T, S). resultados(A,B,C,D,E,F,G,H,I) :- write(A,B,C,D,E,F,G,H,I),nl. /*permutaciones */ perm([], []). perm([H|T], R):- perm(T, X), delete(H, R, X). suma(A,B,C,D,E,F,G,H,I,R) :- A+B+C+D+E+F+G+H+I = R. escribe(A,B,C,D,E,F,G,H,I) :- write(A), write(B), write(C), write(D), write(E), write(F), write(G), write(H), write(I), nl.

Page 89: programacion_ludica

sudoku :- /* hallamos primero las permutaciones de los nueve renglones */ perm([1,2,3,4,5,6,7,8,9],[A1, A2, A3, A4, A5, A6, A7, A8, A9]), perm([1,2,3,4,5,6,7,8,9],[B1, B2, B3, B4, B5, B6, B7, B8, B9]), perm([1,2,3,4,5,6,7,8,9],[C1, C2, C3, C4, C5, C6, C7, C8, C9]), perm([1,2,3,4,5,6,7,8,9],[D1, D2, D3, D4, D5, D6, D7, D8, D9]), perm([1,2,3,4,5,6,7,8,9],[E1, E2, E3, E4, E5, E6, E7, E8, E9]), perm([1,2,3,4,5,6,7,8,9],[F1, F2, F3, F4, F5, F6, F7, F8, F9]), perm([1,2,3,4,5,6,7,8,9],[G1, G2, G3, G4, G5, G6, G7, G8, G9]), perm([1,2,3,4,5,6,7,8,9],[H1, H2, H3, H4, H5, H6, H7, H8, H9]), perm([1,2,3,4,5,6,7,8,9],[I1, I2, I3, I4, I5, I6, I7, I8, I9]), /* ahora damos la restricción: la suma de cada columna debe dar 45 */ suma(A1,B1,C1,D1,E1,F1,G1,H1,I1, 45), suma(A2,B2,C2,D2,E2,F2,G2,H2,I2, 45), suma(A3,B3,C3,D3,E3,F3,G3,H3,I3, 45), suma(A4,B4,C4,D4,E4,F4,G4,H4,I4, 45), suma(A5,B5,C5,D5,E5,F5,G5,H5,I5, 45), suma(A6,B6,C6,D6,E6,F6,G6,H6,I6, 45), suma(A7,B7,C7,D7,E7,F7,G7,H7,I7, 45), suma(A8,B8,C8,D8,E8,F8,G8,H8,I8, 45), suma(A9,B9,C9,D9,E9,F9,G9,H9,I9, 45), /* ponemos ahora la restricción de las cajas: cada caja debe sumar 45 */ suma(A1,A2,A3,B1,B2,B3,C1,C2,C3, 45), suma(A4,A5,A6,B4,B5,B6,C4,C5,C6, 45), suma(A7,A8,A9,B7,B8,B9,C7,C8,C9, 45), suma(D1,D2,D3,E1,E2,E3,F1,F2,F3, 45), suma(D4,D5,D6,E4,E5,E6,F4,F5,F6, 45), suma(D7,D8,D9,E7,E8,E9,F7,F8,F9, 45), suma(G1,G2,G3,H1,H2,H3,I1,I2,I3, 45), suma(G4,G5,G6,H4,H5,H6,I4,I5,I6, 45), suma(G7,G8,G9,H7,H8,H9,I7,I8,I9, 45), nl,nl,nl, /* escribe los resultados */ escribe(A1,B1,C1,D1,E1,F1,G1,H1,I1), escribe(A2,B2,C2,D2,E2,F2,G2,H2,I2), escribe(A3,B3,C3,D3,E3,F3,G3,H3,I3), escribe(A4,B4,C4,D4,E4,F4,G4,H4,I4), escribe(A5,B5,C5,D5,E5,F5,G5,H5,I5), escribe(A6,B6,C6,D6,E6,F6,G6,H6,I6), escribe(A7,B7,C7,D7,E7,F7,G7,H7,I7), escribe(A8,B8,C8,D8,E8,F8,G8,H8,I8), escribe(A9,B9,C9,D9,E9,F9,G9,H9,I9), nl,nl,nl. La teoría del código es ésta: Para crear un sudoku tengo que poner, en una cuadrícula de 9x9, en cada línea, 9 números diferentes (del 1 al 9, para ser preciso). Para ello, utilizo el procedimiento perm (las permutaciones, hallado ya escrito en Internet), y genero una permutación de los 9 elementos. Actúo de igual manera para el renglón 2, 3, hasta el 9, de la cuadrícula del sudoku. Es claro que para cada renglón, la suma de sus elementos siempre dará 45.

Page 90: programacion_ludica

Ahora bien, ahora debo exigirle al software que los números que ponga en cada renglón, en la suma de sus columnas, dé también 45. Con ello bastaría -pensaba- para que el sistema buscara todas las soluciones sin problemas. No obstante, podría haber combinaciones de números, no necesariamente todos diferentes, que dieran 45, por lo cual agregué la restricción de que cada caja de 3x3 tuviese también que sumar 45. Intenté ejecutar este programa en turbo prolog (agregando las secciones de domains, predicates, clauses y goal), pero el sistema me marcó un error parecido a: “too many structures in a predicate error”, lo cual obviamente no tiene solución. Intenté entonces en SwiProlog, pero el sistema se quedó “pensando” y después de un largo rato me harté y cancelé la ejecución del mismo. ¿Qué está pasando? La realidad es que Prolog en teoría podría resolverlo en un tiempo finito, pero la cantidad de cálculos que tiene que hacer parece que sobrepasa todas las expectativas. Por ejemplo, permutar 9 objetos diferentes implica 9!, lo cual es 362880. Cuando el programa corre, pone la primera permutación de 9! para cada renglón, la cual da:

123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789

Obviamente, al pasar a hacer la primera suma, la de cada columna,

suma(A1,B1,C1,D1,E1,F1,G1,H1,I1, 45) fallará e intentará vía backtrack, la siguiente permutación de la última línea, lo cual podría darle algo así como esto:

123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 213456789

como puede verse, la primera suma de nuevo no podrá hacerse, por lo que el sistema buscará todas las permutaciones, pero ninguna dará el resultado necesario. Así, hará backtrack sobre la permutación de la octava línea, con resultados parecidos, y así hacia atrás sucesivamente. Eventualmente encontrará permutaciones que cumplan con eso, pero tendrá que verificar también la suma de las cajas de 3x3. Cuando eso falle, hará de nuevo backtrack y así estará por un buen rato. de nuevo, en algún momento, esperaría, el sistema podría hallar la solución adecuada, pero para ello el programa habrá tenido que hacer un sinnúmero de permutaciones inválidas hasta hallar alguna adecuada. Mis cálculos estiman que el sistema tendría que hacer, en total, para resolver el problema completamente, con todas las posibles soluciones, alrededor de

1.09 x 10^50

Page 91: programacion_ludica

iteraciones, lo cual resulta una cantidad inmanejable para la computadora casera. Estrictamente hablando, el programa presentado crea todos los posibles sudokus que pueden generarse. De acuerdo a un artículo de Tom Davis2, no se sabe aún cuál es la cantidad mínima de números dados para que el sudoku tenga solución, aunque hay ejemplos que parecen indicar que 17 números es el mínimo indispensable. Hallo además que un par de matemáticos del Reino Unido y Alemania3, indican que han revisado la cantidad de posibles sudokus:

5,472,730,538

¡El número de posibles sudokus es verdaderamente inmenso! (más de cinco mil millones). El código que escribí en Prolog es sin duda la aproximación más purista en este lenguaje para resolver el problema de generar pasatiempos como el sudoku. Desafortunadamente las computadoras caseras no pueden resolverlo por falta de recursos, probablemente en particular en lo que se refiere a memoria y a implementación del lenguaje usado4.

2 http://www.geometer.org/mathcircles/sudoku.pdf 3 http://www.afjarvis.staff.shef.ac.uk/sudoku/ 4 Una version de 4x4 la resuelve de manera fácil cualquier implementación de Prolog. La razón es que con 4 números tenemos solamente 4!, es decir, 24 permutaciones y esto es manejable sin duda por los intérpretes y compiladores de Prolog actuales.

Page 92: programacion_ludica

Ajedrez Creador de diagramas de ajedrez Cuando tuve en mis manos un primer libro de ajedrez quedé fascinado. Por una parte me sorprendía que alguien escribiera de este tema. Mi sorpresa fue en aumento cuando descubrí muchos más libros desde los más elementales a los más específicos de una variante de apertura. Con el tiempo la bibliografía ajedrecística que llegaba a mis manos empezó a llenar todo estante disponible, así como los gases llenan completamente el envase que los contiene. No tardaron en caerme revistas especializadas y obviamente éstas se encontraban llenas de información fresca. Una vez más los resquicios de los estantes se llenaron entonces de cuanta publicación aparecía sobre el juego ciencia. Con el tiempo más de una vez quise escribir algún articulillo de ajedrez y así empecé a hacerlo en el boletín “El Caballo )egro”, que el Maestro Internacional (MI) Willy de Winter editaba en el desaparecido Club Pomona de la ciudad de México. Estamos hablando de ya algunos años, cuando no había computadoras, Internet o estos artilugios que en definitiva han cambiado para siempre la manera de ver, estudiar y gozar de este fantástico juego de mesa. Mis artículos para el club local estaban escritos con una poderosa máquina de escribir eléctrica y para distinguir los análisis de las jugadas (en las partidas que comentaba de vez en cuando), seguí la idea que se utilizaba en una revista de ajedrez por correspondencia: las jugadas de la partida en cuestión en mayúsculas. Los análisis en minúsculas (recuérdese que en ese entonces la notación descriptiva era de uso común). Pero entonces enfrenté un problema común a todos los que escribimos alguna vez de ajedrez: no podíamos poner diagramas de las posiciones más interesantes porque simplemente no existían las herramientas para precisamente hacer esto. Además, y por si fuera poco, el boletín del Pomona eran un par de cuartillas impreso en mimeógrafo. Con el tiempo aparecieron algunas posibilidades. Por ejemplo, la federación norteamericana vendía una serie de sellos con los figurines acostumbrados en los diagramas y los vendía, con sus correspondientes hojas impresas con diagramas vacíos para así uno poder poner las posiciones que uno quería inmortalizar en un diagrama. Claro está que la calidad era muy pobre, pero era una alternativa. Más adelante salieron planillas de el equivalente al letraset (pequeñas calcomanías con las figuritas de las piezas), las cuales se colocaban simplemente desprendiéndolas de la hoja de acetato en las que venían. Eso daba mayor calidad pero sin duda era un trabajo un poco ingrato pero era la mejor solución. Al aparecer las computadoras la tipografía computarizada, no sólo la de ajedrez, se convirtió en algo común y corriente. Actualmente cualquier equipo de cómputo puede hacer tanto o más que ciertas imprentas viejas. La calidad de salida, ahora con las verdaderamente económicas impresoras láser, convirtieron en casi a cualquier escritor en su propio editor. Los paquetes como PageMaker o incluso el mismo Word para Windows se convirtieron en algo cotidiano. Pasaron algunos años y con la llegada de Windows 3.x y la tecnología truetype, se crearon finalmente tipos de letra que eran precisamente los figurines usados en los diagramas de ajedrez. Ahora solamente había que hacer la sustitución de cada pieza en cada casilla por su equivalente en el tipo de letra que usáramos. Esto, sin embargo, siempre puede ser una labor tediosa.

Page 93: programacion_ludica

Imagen 1 La ventana principal de WinZug para Windows

Así, se me ocurrió escribir un programa que generara diagramas para poder entonces hacer publicaciones de buena calidad. En primera instancia los diagramas se salvaban como imágenes PCX (un formato que ha caído en desuso con la llegada de la tecnología JPEG), y el software funcionaba (y aún corre) en MsDOS. Programar para Windows siempre estaba vetado a todo aquel que no quisiese usar el API (Application Program Interface), que Microsoft daba a los programadores. Pero llega Borland con una herramienta formidable: Delphi, la cual hace de la programación en Windows un paseo por el campo. Se pueden generar aplicaciones poderosas, sólidas, en tiempos récord. Cuando tuve dicha herramienta visual decidí entonces transportar mi software a Windows. Aunque la tarea no fue tan simple como pensaba (el manejo de gráficos cambia en la interfaz Windows), en unos días tuve una primera versión funcionando. El sistema ahora guardaba las imágenes como BMP. Con el tiempo y gracias a las necesidades del MI Guil Russek, se incorporó al software la generación de diagramas usando los tipos de letra truetype específicos para ajedrez, como los que pueden encontrarse en ChessBase, Chess Assistant, etc. y más adelante se le dio soporte a los del Sr. Marroquín, un estupendo diseñador de este tipo de letras que tenemos en nuestro país. Pero como todo programa terminado se vuelve obsoleto, hace unos días intenté hacer una revisión del software. Hallé que la parte de salvar a BMP no funcionaba correctamente y la cambié. Igualmente, debido a que mucha gente tiene páginas dentro de Internet, le agregué la posibilidad de crear diagramas para la WWW, usando las imágenes GIF que existen en ChessBase (de dominio público, se aclara). Por supuesto que hay detalles que agregar y mejorar. Por ejemplo, yo trabajo en 1024x768 pixeles de resolución. Otras resoluciones de vídeo hacen que no se vea correctamente las ventanas o que éstas haya que cambiarles el tamaño. Esto no tiene compostura inmediata pero se trabaja en ello. Igualmente Russek sugirió salvar en formato JPEG (y ya en esta versión esto se ha implantado).

Page 94: programacion_ludica

Ajedrez Protector de pantalla en honor de Kasparov El retiro del mejor jugador del mundo, Kasparov, en marzo del 2005, me ha dejado –como a muchos– ciertamente consternado. La razón es que en alguna medida Garry, al despedirse del escenario competitivo, nos ha privado de futuras actuaciones y de otras magníficas producciones en el tablero que ya no veremos. Sin duda la decisión del azerbayano debe haberla meditado profundamente y como las jugadas de ajedrez, tiene su consecuencia. Kasparov se mantuvo como el mejor del rating mundial los 20 años pasados. Su carrera ajedrecística fue notable en todos sentidos. Como campeón del mundo fue un jugador activo, que compitió y ganó prácticamente las justas más importantes en el mundo (y además, más de una vez, como por ejemplo en Linares, en donde se coronó campeón nueve veces). Su estilo violento y su profundo trabajo de análisis teórico, ayudado por Fritz, Shredder, Junior, todos estos ingenios cibernéticos, le dio dividendos y demostró un nivel de profundidad extraordinario. Sin duda que Kasparov es ejemplo de tenacidad, lucha, trabajo constante, amor incondicional y obsesión por el ajedrez, y aunque se retira de las competencias, no parece que se retira del ajedrez mismo. Yo sé que veremos más libros de él, más DVDs con sus clases, más ajedrez, aunque ya no desde la trinchera de los torneos, sino desde un ambiente más pacífico pero igual de importante.

Imagen 1

Garry Kasparov, quizás el mejor jugador del planeta Me queda claro que independientemente de si juega o no, Kaspárov es uno de esos héroes del tablero, un icono mundial que tendrá siempre admiradores. Y yo, como admirador de su gran nivel de juego, de sus hazañas ante el tablero, se me ocurrió que era un buen momento para hacerle un pequeño homenaje. Así, escribí un protector de pantalla, un screensaver, que reproduce algunas de las partidas más notables del ruso. De esta manera, cuando Ud. deje de usar la computadora por un tiempo razonable, en lugar de que se ejecute alguna simpática animación, ahora podrá ver cuatro partidas de Garry Kaspárov, con el Cannon de Pachelbel de fondo. Para hacerlo más interesante aún, hallé en la red algunas fotos de nuestro héroe y las incorporé. Cada cinco movimientos aparece una foto (de 25) al azar.

Page 95: programacion_ludica

Imagen 2 Kasparov con “el patriarca”, el excampeón mundial Mijail Botvinnik

Cambiando el archivo ‘game.txt’ es posible incorporar otras partidas. De hecho, este protector de pantalla podría servir incluso para estudiar. Puede –quien así esté interesado– en alimentar dicho archivo con partidas de su variante favorita y verlas reproducirse en su pantalla. Quizás el hecho de observarlas cotidianamente le ayude a memorizarlas o tal vez, en algún momento recuerde esa posición en alguna partida suya y pueda aplicar esos conocimientos que su computadora le mostraba al reproducir las partidas de Kasparov. Nótese que este archivo contiene unos comandos muy simples que permiten mover las piezas en el tablero, desplegar los nombres de los jugadores y el resultado final del encuentro. El sistema se instala en el directorio ‘system’ de Windows, que es donde residen los protectores de pantalla y lo único que tiene que hacer el usuario es dar de alta el protector de pantalla de Kaspárov para que pueda usarlo.

Page 96: programacion_ludica

Ajedrez El Secreto de los Grandes Maestros

Recientemente me llegó un correo electrónico que decía lo siguiente: Sgeún un eiudsto de una uinsrvdiead iglensa, no iomtpra el odern en el que las lerats eátsn ectasirs, la úcina csoa inrmptoate es que la prirmea y úlimta lreta eétsn esracits en la poóicisn ccrertoa. El resto peduen eastr ttmeatolne mal y aún párdos lelreo sin poamblers. Etso es pruoqe no leeoms cdaa ltrea por sí mmsia, snio la pbarlaa cmoo un tdoo. Peonmrestalne me pacere ilnírebce. Aunque probablemente la mayoría de los lectores puedan entender el párrafo en cuestión, he aquí la “traducción” al español perfectamente correcto: Según un estudio de una universidad inglesa, no importa el orden en el que las letras están escritas, la única cosa importante es que la primera y última letra estén escritas en la posición correcta. El resto pueden estar totalmente mal y aún podrás leerlo sin problemas. Esto es porque no leemos cada letra por sí misma, sino la palabra como un todo. Personalmente me parece increíble.

Imagen 1 El software en acción

Así, si creíamos que leemos letra por letra un texto, pues nos hemos equivocado. Aparentemente nuestros cerebros han asimilado una serie de patrones, los cuales no son otras cosas que las palabras, las cuales se codifican y se guardan de manera misteriosa, pero sin duda, de forma muy eficiente, de manera que al ver una palabra, en lugar de leerla y armarla letra por letra, lo que estamos haciendo es simplemente buscar en nuestro acervo de palabras para ver si está y la reconocemos. De ser cierta esta idea, lo cual parece serlo, encontraríamos una explicación a ese misterioso fenómeno de los errores en un texto que escribimos, y que solamente encontramos después de haberlo impreso. Es decir, no importa las veces que lo revisemos en la pantalla de la computadora. Es regla general que cuando se imprima el documento encontremos errores que nunca vimos. Lo simpático del asunto es que tiene la clave para jugar mejor al ajedrez y que en cierta medida revela lo que los grandes maestros hacen al jugar. La curiosa frase recibida en mi buzón da un dato fundamental: el cerebro es una máquina de procesamiento de patrones. Así entonces, en muchos sentidos, los jugadores fuertes saben

Page 97: programacion_ludica

qué jugada hacer prácticamente desde el momento que ven una posición. Cuando se les pregunta cómo es que encontraron prácticamente a vuelo de pájaro la mejor jugada, responden con un mohín moviendo la nariz en señal de es una especie de olfato. Pero bajo el esquema de lo que estamos considerando, es mucho más probable que este “olfato” no sea más que una colección de patrones ajedrecísticos, de posiciones típicas, y no sólo de estructuras de mate, sino de otros géneros de posiciones, incluso en las aperturas. Por eso, me parece, es importantísimo estudiar ajedrez. De esta manera el cerebro va adquiriendo estos patrones arquetípicos que muestran cómo se deben manejar cierto tipo de posiciones. Quienes no estudian y creen que pueden resolver todo en la partida viva, pues se equivocan, si no totalmente al menos en parte. Es cierto que sí, un jugador talentoso encontrará quizás las jugadas correctas analizando meticulosamente la posición. Sin embargo, podría ahorrarse un valiosísimo tiempo de reflexión si conociera de antemano ciertos patrones, producto probable de estudiar sistemáticamente nuestro juego. Desde luego que no todo son patrones. Sin duda el jugador fuerte, el gran maestro, tiene una certeza sobre la manera de evaluar correctamente una posición. Eso se adquiere a través de varias actividades:

(i) ver muchas posiciones parecidas, analizando lo que otros han jugado en esa posición (por eso las bases de partidas son fundamentales para todo aquel que quiera mejorar su juego);

(ii) conocer los elementos básicos, como por ejemplo, los finales más comunes, desde los de peones hasta los de torres;

(iii) conocimiento de las partidas modelo más importantes de la historia del ajedrez, aquí hay cientos de encuentros memorables, que todo jugador debe entender para tener una visión histórica y práctica de cómo se atacan cierto tipo particular de posiciones y, desde luego,

(iv) un trabajo constante en el desarrollo de la habilidad táctica, la cual se traduce en precisamente en analizar patrones de combinaciones típicas, que nos darán una ventaja enorme sobre aquel que no haya hecho este trabajo.

Si usted hace eso (lo cual requiere tiempo, dedicación, disciplina y trabajo constante), entonces no habrá quien lo detenga en el camino a la maestría ajedrecística. Postscriptum

Hace ya relativamente cierto tiempo escribí sobre esto. A partir de esta idea me di a la tarea de escribir un programa que hiciese este intercambio de letras. Al principio, por cuestiones de simplicidad, utilicé un intercambio simple de letras, la segunda con la tercera, la cuarta con la quinta, etc. Más adelante puse un algoritmo más sofisticado que hace este intercambio de letras (recuérdese siempre dejar la primera y última letra de cada palabra igual), y lo incorporé al programa. Y así lo dejé, el ejercicio de programación funcionaba bien. Pero he aquí que en un curso de reconocimiento de patrones, pensé que la labor inversa debía ser interesante de programar. Es decir, dado un texto escrito con esta técnica de poner al azar las letras de cada palabra (a excepción de la primera y última letra, repito), ¿se podrá hacer un programa que lo pase a un formato legible? Ahí encontré, entre otras cosas, que el hecho de que podamos leer textos así escritos no significa simplemente que el cerebro reconoce la palabra que creemos que es, sino que tiene un acervo de palabras, el cual es enorme, y además, gracias al contexto, puede reconocer lo que está escrito. Para ser más claro, imaginemos que encontramos la siguiente palabra: “Sirhdcogeenr” Probablemente no pueda usted saber de qué palabra se trata, puesto que no hay contexto. Pero ahora veamos esta frase completa: “Sirhdcogeenr fue uno de los más eairrtoarxnoids fiocíss de la mcáienca cnáituca”

Page 98: programacion_ludica

probablemente nos cueste trabajo si jamás nos hemos ocupado de la física y mecánica cuántica. Para cualquier físico será relativamente fácil y podrá leer: “Schroedinger fue uno de los más extraordinarios físicos de la mecánica cuántica” Dicho en otras palabras, el mecanismo que usa el cerebro para entender un texto desarticulado con la técnica mencionada se puede volver a su sentido original si se cumplen dos factores:

• el lector tiene un buen conocimiento del lenguaje • el lector tiene un conocimiento del mundo exterior o de temas particulares que le facilitan el

entendimiento de pasajes así escritos. Esto en el fondo es un tema de la inteligencia artificial. ¿Se podrá hacer una rutina que lea un texto mal formado y lo ponga correctamente?

Imagen 2 El programa con la opción de reconocimiento “inteligente”

Para que esto sea posible, tenemos que alimentar al programa con una base de datos de palabras (nuestro conocimiento del lenguaje), para que así, al ver una palabra, el sistema pueda buscar en dicho archivo y hallar la que corresponde. Curiosamente la búsqueda no es en ningún sentido algo común, como lo que se hace frecuentemente. Aquí tenemos que buscar con los siguientes criterios:

1. La palabra a buscar debe ser mayor de tres letras (no hay cambio en “uno”, “las”, “si”, “no”, “y”, por ejemplo)

Page 99: programacion_ludica

2. la primera y última letra de la palabra a buscra debe coincidir con la primera y última letra, además de la longitud en caracteres de la misma.

3. La palabra a buscar debe contener las mismas letras que la palabra original. En el punto 3 surge un problema. Supongamos que buscamos la siguiente palabra: “dnrtmvaescutiete” (destructivamente) De cada palabra que debo buscar en mi diccionario, debo saber que están todas las palabras de la palabra original sobre la que busco, en este caso el subconjunto 'nrtmvaescutiet'. Al principio, pensé que lo más fácil sería sacar todas las permutaciones de estas letras y ver si se cumplían dentro de la palabra elegida en cada búsqueda, pero encontré que es una mala idea, porque si tengo 7 letras, hay que calcular 7! permutaciones. En el caso del ejemplo, hay que calcular 14!... Obviamente hay que buscar otra solución. Al final de cuentas lo que se me ocurrió es crear una tabla de frecuencias para la palabra que busco y las opciones que tengo. Así me aseguro que ambas palabras (la que elegí como candidata y la original), tengan las mismas letras dentro de la primera y última que no cambian. El algoritmo lo agregué al programa original y podría decir que de alguna manera busca tener un sistema con visos de inteligencia. Cuando se le pide al programa que convierta un texto mal formado a uno correctamente escrito, hallé que:

• Tuve que poner todas las palabras en minúsculas, pues mi diccionario de palabras está todo en minúsculas

• El diccionario consta de casi 500,000 palabras, pero no tienen acentos y eñes. La razón de esto es que en el formato original del mismo los autores (para un proyecto de corrección ortográfica en Linux), pusieron caracteres especiales para señalar acentos, derivaciones de las palabras, etc. Como eso complicaba la búsqueda de las palabras en mi aplicación se los quité en esta primera versión.

• El programa tarda en relativamente en procesar el texto mal formado. La razón es que tiene que analizar prácticamente las casi 500 mil palabras, pues una búsqueda binaria simplemente en este caso no se puede hacer.

• Cuando el programa no encuentra una palabra, la marco en MAYÚSCULAS para que se vea el cambio de manera notable.

Page 100: programacion_ludica

Ajedrez Calculadora de rating Elo La Federación Internacional de Ajedrez (FIDE), clasifica a sus jugadores de acuerdo a su fuerza ajedrecística. Dicha fuerza se representa por un número que va desde los 1000 puntos (muy débil) hasta no más de 3000 aproximadamente (extraordinariamente fuerte, de hecho, nadie ha llegado a esta cifra nunca). Los jugadores de ajedrez toman muy en cuenta este número, su rating, porque para los profesionales, ser uno de los jugadores más fuertes del planeta implica ser invitado a participar en torneos magistrales, en donde hay jugosos premios y, muchas veces, dinero a los jugadores por el simple hecho de participar. Así, todos se preocupan por mantenerse e incluso, si es posible, subir su rating cada vez más. La FIDE publica cada tres meses la lista de rating oficial, la cual rige para los torneos en todo el mundo. Pero ¿cómo se calcula el rating? ¿a quién se le ocurrió una fórmula que pueda representar en un número la habilidad ajedrecística de un jugador? Arpad Elo, un matemático húngaro, nacido en 1903 y emigrado a los EEUU a la edad de 10 años. Fue profesor de física y astronomía de 1935 a 1965 en la Universidad Marquette. De 1935 a 1937 fungió Elo como administrador de la Federación Americana de Ajedrez, la cual se convertiría más tarde en la USCF (United States Chess Federation). Elo fue nueve veces campeón o co-campeón de Wisconsin. En 1959 Elo decidió trabajar sobre un sistema de clasificación de los jugadores, el cual la USCF adoptó en 1960 y hasta 1970 por la FIDE. Elo pasó al salón de la fama del ajedrez norteamericano en 1988 y murió en 1992. Para quienes jueguen al ajedrez, el nombre Arpad Elo les será familiar. Siendo matemático, Elo desarrolló una serie de fórmulas para calcular lo bien que un jugador se desarrolla en las competiciones ajedrecísticas. Tan buena fue su idea que al incorporar el rating, la Federación Internacional de Ajedrez logró un esquema que permitía validar los resultados de los jugadores para así otorgarles los títulos de maestro FIDE (MF) maestro internacional (MI) y gran maestro (GM). La primera lista oficial de rating fue publicada por la FIDE (Federación Internacional de Ajedrez, por sus siglas en francés), en 1970, a partir de los resultados de 210 jugadores de alto calibre ajedrecístico en partidas disputadas en los años 1968 y 1969. Tiene tanto éxito este sistema, que los nuevos resultados en los torneos son calculados a partir del 70 y en 1972 se establece también el rating femenino, en donde solamente hay 112 jugadoras. En ese entonces, las dos mejores de lo que ahora es la ExUnión Soviética, Nona Gaprindashvili, que ya para ese entonces era la campeona mundial y a la postre lograría la obtención del título de GM pero entre los hombres. La otra mujer mejor clasificada era All Kouchnir. Esta dupla se mantuvo como primero y segundo sitio mundial por alrededor de diez años. El ajedrez ha crecido desde el año 1970 de manera notable. Por ejemplo, la lista de rating de la FIDE de 1980 contenía a 3103 jugadores pero en 1990 la lista ya era de 9186 ajedrecistas. En 1997 dicho listado contemplaba a 18555 ajedrecistas activos. Un incremento que cualquiera observará como notable. Desde luego que el aumento de participantes en los torneos no se debió exclusivamente a la existencia de una lista de rating internacional, sino a que además, muchos torneos pudieron significar las aspiraciones de títulos deportivos a los jugadores que lograran los primeros lugares. Eso sin duda motivó la participación de muchos jugadores. Cabe recordar que los primeros cinco grandes maestros de la historia nacieron en el torneo de Petrogrado, en donde el Zar concedió el título máximo (sin contar el título de campeón mundial), a Emmanuel Lásker, José Raúl Capablanca, Alexander Alekhine, Siegbert Tarrasch y Frank J. Marshall. Pero regresando al asunto del rating, se sabe en los círculos ajedrecistas que el empate entre dos jugadores no significa la nulidad. En términos de rating puede significar más puntos para el jugador más débil y esa misma cantidad de puntos menos para el jugador más fuerte. Es decir, el más débil consigue un buen resultado si arranca unas tablas , mientras que el más fuerte, por el hecho de no imponerse, cosecha un mal resultado. La diferencia de clasificación Elo (o rating) sirve para establecer los méritos de cada uno de ellos. Arpad Elo estableció, basándose en la estadística elemental (ley normal de Poisson), una tabla de probabilidad de victoria en función de la diferencia de puntos Elo entre los jugadores. Pongamos un par de ejemplos: si la diferencia de ratings entre dos jugadores es de cero a 3 puntos, cada jugador tiene un 50% de ganar la partida.

Page 101: programacion_ludica

En cambio, si la diferencia es de 99 a 106 puntos, el jugador más fuerte tiene 64% de obtener la victoria contra un 36% del jugador débil de alzarse con el triunfo. Una diferencia de 268 a 278 hace que el jugador fuerte tenga a su favor un 83% de ganar, contra 17% de que su rival le gane. Dicho de otra manera, cuando la diferencia es de más de 267 puntos, el jugador fuerte debiese ganar al menos 8 partidas de 10 jugadas. Establecidos estos valores (compilados en una tabla de probabilidad que confeccionó Elo mismo), el cálculo de los jugadores se hacía a través de unas fórmulas por demás simples. Hoy día hay manera de otorgar un rating provisional a un jugador (a partir de una fórmula modificada de las originales del Profesor Elo), el cual a partir de esta primera clasificación, empezará a moverlo (hacia arriba o hacia abajo), de acuerdo con sus restantes actuaciones. Pero obviamente aquí no pretendemos dar un curso de álgebra para poder usar estas ecuaciones y encontrar el rating de un jugador. En lugar de esto, el software a escribir en esta ocasión es una calculadora Elo, que permite al ajedrecista calcular cuánto sube o baja su puntuación después de jugar un torneo en particular (conociendo, desde luego, los ratings de sus adversarios). El sistema de rating puede parecer misterioso, pero se basa en una teoría puramente estadística. Obviamente, dos jugadores que tienen el mismo rating tienen la misma oportunidad de ganar una partida de ajedrez (50%). Menos obvio es, sin embargo, que la misma diferencia de rating entre dos jugadores implica la misma chance de triunfo, es decir, un jugador de 2400 puntos Elo que juega contra un jugador de 2200 puntos tiene la misma chance de ganar que un jugador de 1400 puntos que enfrenta a uno de 1200 puntos. La diferencia es en ambos casos de 200 puntos. Elo así describió una tabla que muestra la probabilidad de un jugador de ganar una partida, de acuerdo a esta diferencia de rating entre los jugadores. Esto puede extenderse, desde luego, al rating promedio de un torneo. De la tabla de diferencia de ratings (copiada de http://chess.about.com/library/weekly/aa03a25.htm)

Tabla 1 Tabla de esperanza contra diferencias de rating

Podemos ver que un jugador que le saque 253 puntos a su contrario equivale a que tiene un 82% de posibilidades de triunfo. Así, si el jugador de menor nivel gana, le quitará a su rival una cantidad de puntos,

Page 102: programacion_ludica

basada en una constante K, 25 si es su primer cálculo de rating hasta completar 30 partidas; 15 mientras el jugador no llegue a 2400 puntos Elo; 10 para jugadores con más de 2400 puntos Elo. Este valor entonces ya no se modifica más. La tabla de Elo es curiosa:

Gráfica 1 Puede verse que no es una función estrictamente lineal, aunque en gran parte de la misma se mantiene como si así lo fuera. Da la impresión que Elo quiso darle peso a las grandes diferencias de rating de manera que no sea tan brusco el cambio de puntuación en esta situación. No me meteré mucho en este punto porque creo que el matemático Jeff Sonas sabe mucho más de esto y está mejor calificado para discutir estos aspectos de la fórmula de Elo (ver chessmetrics.com). Así, de acuerdo a la fórmula Elo, si gana el jugador más débil en este hipotético caso, ganará 12.5 puntos. En cambio, si gana el favorito, le quitará al perdedor solamente 2.8 puntos.

Imagen 1 Calculadora Elo

Page 103: programacion_ludica

Una vez entendida la tabla y los fundamentos de la fórmula del rating, me senté un par de días y como mero ejercicio académico, me hice mi propia calculadora de rating para la PC y además le agregué el cálculo del desempeño.

Page 104: programacion_ludica

Ajedrez Ajedrez a la ciega Existen muchas modalidades de ajedrez. Algunas son más recreativas que el ajedrez competitivo, donde los jugadores buscan, por todos los medios, vencer al rival. Por ejemplo, las simultáneas de ajedrez, donde un avezado jugador (normalmente un maestro), juega al mismo tiempo contra 10, 20, 30 ó 40 competidores. Aquí, los aficionados intentan vencer al maestro de ajedrez, y en ocasiones un par de jugadores lo logran aunque, en general, los maestros –gracias a su experiencia en el tablero– logran la mayoría de los triunfos. También existen modalidades artísticas. Por ejemplo, concursos de problemas y estudios en ajedrez, donde las ideas más sorprendentes, más sutiles, cobran vida en el tablero. Es tan interesante esta forma de ajedrez que incluso hay grandes maestros de la composición ajedrecística. Kasparián o Kubbel, por ejemplo, son dos de los compositores de problemas de ajedrez más importantes que haya tenido jamás el juego ciencia. Hay, sin embargo, otra modalidad de ajedrez, de la que se habla poco y quizá con razón. Se trata de jugar el ajedrez a la ciega; es decir, sin tener a la vista un tablero con sus piezas. Hay que considerar que si el tablero de ajedrez contiene 32 piezas y 64 casillas, quien juega “de memoria”, sin ver el tablero, debe acordarse dónde están las piezas propias y rivales en cada momento. Esto, dicen los psicólogos, se hace en la memoria de corto plazo, pues una partida de ajedrez es un evento dinámico que dura unas cuantas horas. Si consideramos que hay estudios que indican que las personas comunes y corrientes pueden recordar hasta siete datos de una sola vez (es por ello que no es fácil recordar a la primera oportunidad un número de teléfono), entonces el jugar ajedrez apelando solamente a la imaginación de dónde están las piezas, puede considerarse una labor muy compleja, por decir lo menos. Por ello, cuando se hace una demostración pública de alguien jugando una partida de ajedrez con los ojos vendados, no nos resta más que admirarlo. Esta es la pregunta que surge: ¿es posible aprender a jugar a la ciega? Y si esto es así, ¿qué beneficios/perjuicios se pueden tener por esta actividad?

Imagen 1 Pantalla inicial del software de entrenamiento de ajedrez a la ciega

Para quienes jueguen competitivamente al ajedrez, es evidente que el poder jugar a la ciega, al menos limitadamente, nos permite “mover” las piezas en la cabeza sin moverlas en el tablero, porque bien sabemos que pieza tocada es pieza jugada, y esa regla es absoluta y sin excepciones. Así, si tuviéramos la capacidad de ver cómo quedará el tablero sin mover las piezas en el mismo, tendríamos una ventaja sobre muchos de

Page 105: programacion_ludica

nuestros adversarios. Esta práctica de visualizar el tablero se hace frecuente en la medida que uno compite en torneos. Poco a poco, con práctica, trabajo constante, estudio de muchas posiciones sin mover las piezas, los ajedrecistas dedicados logran empezar a ser eficientes en este cálculo mental de jugadas. Obviamente, la mayoría no logra poder calcular todas las posibles posiciones que pueden darse en una partida de ajedrez, pero sí profundizar a un nivel en donde se puede tomar la decisión si una jugada es correcta o no.

Imagen 2 El software en su ventana principal

La habilidad del cálculo a la ciega es algo que todo jugador debe saber realizar. Como una habilidad más, puede aprenderse, sin lugar a dudas, aunque para ello se requiere de paciencia y trabajo cotidiano. Aquí no se trata de simular esas hazañas como la del “viejo” Najdorf, el gran maestro polaco-argentino, quien pudo jugar hasta 45 partidas a la ciega, simultáneamente, perdiendo dos, ganando 39 y empatando 4. Una hazaña que le llevó más de 20 horas y, que después de ello, el ajedrecista no durmió las siguientes 48 horas, pues su cerebro mostraba cada partida como una película en cámara lenta. Najdorf aseveraría más adelante que “una locura como esa no la vuelvo a repetir”. De hecho, los jugadores de la escuela rusa prohíben el espectáculo de las partidas a la ciega por considerarlo dañino a la salud, aunque no sé de muchas experiencias que demuestren esto (aunque acabo de recibir un correo electrónico de Javier González Solabarría, que me dice: “soy un jugador de categoría preferente y desde hace años practico simultáneas de ajedrez a la ciega. Mi récord es de hace dos años donde jugué con nueve oponentes de diversas categorías. Hace tres años, al finalizar unas simultáneas con ocho adversarios, me puse malo y conseguí a duras penas llegar a casa”). El software en esta ocasión permite practicar el juego a la ciega, pero no con afán de hacer ningún espectáculo de circo. Úselo para desarrollar su capacidad de análisis en ajedrez. Verá con el tiempo diferencias al respecto de cuán lejos podía ver en unas variantes antes de trabajar con el software y después.

Page 106: programacion_ludica

Ajedrez Tarjetero electrónico de posiciones de ajedrez Leo un artículo del MI Raúl Ocampo, sobre la informática aplicada al ajedrez, en donde dice lo siguiente: “Uno de los métodos de estudio más preconizados por la escuela soviética de ajedrez era el uso de ‘tarjeteros’. La idea es poner en una tarjeta una porción de conocimiento, como puede ser una posición básica (de las míticas 300 posiciones), una posición fundamental de una variante o sistema de apertura, o de alguna posición con una idea especial. Teniéndolas en tarjetas, el jugador puede prepararse revisando una y otra vez las diferentes tarjetas del tarjetero, como una manera de aprenderlas al “dedillo” literalmente. De la misma manera que un tarjetero con temas de cualquier disciplina académica. Un método muy recomendado por pedagogos de cualquier área. En los años anteriores a la informática, como fueron la gran mayoría de los de la existencia de la URSS, los entrenadores soviéticos laboriosamente elaboraban para sus pupilos estos tarjeteros. Utilizaban unos sellos para imprimir diagramas y piezas para poner una posición en una tarjeta y ya sea a mano como con máquina de escribir se hacían las anotaciones correspondientes. Ejemplos de esta manera de trabajar nos lo relata la GM Kira Zvorkyna al comentar el apoyo que como entrenador le dio en los años 1950s, el GM Piotr Arsenievich Romanovsky; uno de los mejores entrenadores soviéticos, en un artículo publicado por la revista rusa “64” en su número 7 de 2003. El más afamado entrenador ruso, el MI Mark Dvoretsky, en muchos artículos menciona su famoso tarjetero con su colección de posiciones interesantes. El uso de tarjeteros o cuadernos para recolectar posiciones y variantes era un estándar entre los entrenadores del siglo XX. Personalmente en los años 1980 a 1990 escribí varios artículos al respecto, recomendando el uso de las famosas “libretas de tres argollas” que es común utilizar en las escuelas. La idea es poder intercalar hojas cuando es necesario” . El GM Aaron Nimzovich en su libro de “Cómo llegue a ser Gran Maestro5 “ escrito en la década de 1920, refiere que mando a un encuadernador insertar una hoja en blanco entre cada hoja impresa de un libro sobre un torneo de maestros para poner sus propios comentarios a cada partida. Pero el caso del tarjetero es para facilitar el repasar una y otra vez las mismas posiciones, como revisando un paquete de naipes, incluso para alterar el orden a placer. Repetición una y otra vez era el lema de los entrenadores soviéticos, hasta aprender esas posiciones básicas y las ideas contenidas, perfectamente. Memorizarlas, o incluso más de ello, vivirlas, sentirlas. Para luego aplicar esas ideas y esquemas en posiciones similares pero nuevas. Pasar de la noción, caso aislado, a un concepto, agrupación de casos que están unidos por un patrón, para luego pasar de nuevo al caso concreto. De lo particular a lo general y luego de nuevo a lo particular. De la noción al razonamiento conceptual y luego a la aplicación a una situación específica y única.

5 Hasta donde sé, no es un libro, sino un largo artículo del viejo maestro danés, que aparece transcrito en el libro de Raymond Keene: “Aron *imzowitsch, a repraissal”, Ed. Batsford.

Page 107: programacion_ludica

Imagen 1 El logotipo del programa

A partir esta idea, llegué a la conclusión que no hay software en el mercado especializado que haga precisamente esto, es decir, que permita a los ajedrecistas hacer estos famosos tarjeteros. Más de uno podrá decir que realmente ya no es necesario, pues con Chessbase6, por ejemplo, se pueden tener este tipo de “tarjetas” electrónicas. En alguna medida es cierto, aunque es claro que lo que hace el software alemán no es estrictamente esto. Así, ¿por qué no tener un software especializado para hacer este tipo de tarjetas ajedrecísticas?, como menciona Ocampo en su artículo. Dada entonces esta motivación, me di a la tarea de escribir mi propia versión del tarjetero ajedrecístico. Me llevó todo el sistema unos cinco días, pues hubo que definir la base de datos, es decir, cuál es la información mínima que el sistema debe manejar. El programa debería no sólo poner texto, sino que además, incluir un diagrama en cada tarjeta. Igualmente, debería poder imprimir las tarjetas y desde luego, hacer búsquedas sobre los temas definidos en las mismas. De esta manera tendríamos esta vieja herramienta modernizada en las computadoras de hoy.

6 www.chessbase.com

Page 108: programacion_ludica

Imagen 2 Ventana principal de Chesscards

Aprovechando que actualmente existen muchos tipos de letra que despliegan “ figurines”, es decir, las piezas de ajedrez, pude crear en “modo texto” los diagramas, de manera que no ocupan tanto espacio en la base de datos con respecto a lo que usarían en caso de usar imágenes bmp o jpg. Poco a poco el software fue tomando forma y en el momento de escribir esto, ya tengo una versión beta, la cual denomine ChessCards. Y sí, ya sé, ¿por qué en inglés? De acuerdo a la teoría de mi hermano Pedro, al mexicano le encanta ser malinchista. Vaya, si el manual de algún dispositivo viene en coreano, entonces estará encantado.

Page 109: programacion_ludica

Ajedrez ¿Qué tan bueno es su ajedrez? Jugar bien al ajedrez no es solamente cosa de tener facultades para el juego. Es claro que la mayoría de los jugadores tienen cierta capacidad, la cual quizás se vislumbró en la mayoría de los casos a tierna edad. Sin embargo, es evidente que el estudio puede hacer maravillas y sustituir en cierta medida lo que la naturaleza se negó a darnos. Así, es claro que el jugador de ajedrez que lo desee puede subir de nivel si su constancia en el estudio es la adecuada y si puede jugar una serie de torneos para ir probando lo que, precisamente, va aprendiendo con el estudio sistemático. Hoy día, gracias a la computadora, el ajedrez ha cobrado cierta relevancia, la cual se traduce en bases de datos con millones de partidas, sistemas que juegan al ajedrez con un promedio de 2600 de rating (que compiten ya al tú por tú con los campeones del mundo), programas específicos de análisis de alguna variante en particular, etc. Hay de todo y para todos y quien saque provecho de todas estas nuevas herramientas seguramente podrá progresar incluso más rápido que hace apenas unos 10 años. La información está a la orden del día. Desafortunadamente esto tiene un costo: los programas más poderosos de ajedrez no son gratuitos. Los discos compactos con software especializado para estudiar líneas específicas de apertura o resolver ejercicios de diferente dificultad cuestan sus buenos pesos (traducidos, claro está, a dólares). En vista de eso, se me ocurrió que algo debía hacerse… Así pues, decidí que era hora de escribir mi propio software de entrenamiento…

Entrenamiento Táctico es una herramienta para estudiar ajedrez. Indudablemente son muchos los factores para llegar a jugar bien, empezando por un dominio de lo que se llama táctica, de la posibilidad de calcular largas variantes con precisión. Para ello, no basta con ver jugadas, hay que encontrar las mejores, las que causan más problemas al adversario, las que encierran amenazas más poderosas. Es claro entonces que el aprender el arte de las combinaciones se basa en realizar muchos estudios al respecto. Tenemos algunas decenas de libros con ejercicios de combinación, en donde se repiten los patrones de las piezas en ubicación y poder. Una vez que hayamos resuelto cientos de estos ejercicios empezaremos a acumular estos patrones de ubicación de piezas además de las ideas tácticas como pueden ser la clavada, el ataque doble, el ataque descubierto, etc. Todo jugador, si quiere llegar a jugar medianamente bien, tendrá que hacer muchos ejercicios de esta naturaleza. De eso ni hay duda alguna. Pero aún falta el elemento competitivo… ¿Cómo entrenar cuando uno participa en torneos? En este caso el Ajedrez solitario puede darnos la respuesta. El estudio de cualquier tema exige que quien quiere aprender se involucre, que tenga un interés genuino por comprender lo que se está estudiando. Ir a la escuela, por ejemplo, no es garantía de aprendizaje y el hecho de saber que existe un alto porcentaje de deserción escolar en la enseñanza media superior, simplemente indica que no hay la suficiente motivación para que esa gente siga en la universidad. En el estudio del ajedrez muchas veces pasa lo mismo, con el agravante de que en la mayoría de los casos, la instrucción es autodidacta, lo cual hace de todo este asunto del aprendizaje algo más difícil y complejo. Los ajedrecistas leemos muchos libros de ajedrez, consultamos bases de datos, hacemos ejercicios de táctica, estudiamos incesantemente las aperturas y, además, participamos en torneos. Mucho de este trabajo lo hacemos solos, sin ayuda de terceros. Frecuentemente nuestros esfuerzos en el estudio no parecen reflejarse en los resultados de las competencias. Esto pasa por muchas razones, aunque quizás la principal sea que enfocamos incorrectamente el trabajo casero de aprendizaje. En repetidas ocasiones he visto a compañeros ajedrecistas sentarse frente al computador para ver partidas de una variante específica. Ponen la partida y la reproducen en el tablero electrónico en breves minutos, pasan a la siguiente partida y hacen lo mismo. Al final se fastidian y se observa que sólo tratan de recordar algunas de las ideas que pudieron percibir en esa veintena de partidas vistas con celeridad. A la larga, este trabajo es una pérdida de tiempo.

Page 110: programacion_ludica

Es fácil darse cuenta que una partida efectuada en cuatro horas no se puede comprender en todos sus aspectos si uno le dedica unos cuantos minutos. Desde luego, podría pensarse que no vamos a estar cuatro horas analizando una sola partida, pues pareciera que eso es también perder el tiempo. Sin embargo, no necesariamente tiene que serlo así. De hecho estoy convencido que es preferible analizar una sola partida

usando un par de horas, que viendo dos decenas a velocidad constante. Ahora bien, es evidente que no todas las partidas merecen un análisis exhaustivo por parte del estudiante. Hay sin embargo muchos modelos de estrategia que vale la pena estudiar con detalle. Es claro que hablamos de las partidas de los grandes maestros del tablero, tanto los clásicos como los modernos. Siempre, desde luego, parece preferible voltear hacia los viejos maestros como Alekhine, Lasker y Capablanca, por ejemplo, porque sus partidas han sido analizadas hasta el hartazgo por muchos jugadores, y ya sabemos que las partidas con buenos comentarios siempre serán mejor que cientos de partidas en bloque sin ninguna nota. Considérese también que cuando uno participa en un torneo, esas partidas que uno juega, gana, empata o pierda, se conservan mucho más tiempo en nuestra memoria. La razón es que dichos encuentros fueron analizados por uno mismo a profundidad, sin contar, desde luego, con la parte emocional. Por ejemplo, cuando uno ve la posibilidad de un remate brillante y el corazón empieza a palpitar más fuerte. En otras palabras, el recuerdo permanece porque nos involucramos en el problema, en intentar ganar y así resolver la partida de ajedrez a nuestro favor. Y a partir de estas reflexiones surge la pregunta: ¿cómo poder hacer, en buena medida, de una partida de estudio algo propio, algo tan personal como cuando jugamos un encuentro nosotros mismos y que ponemos todo el interés en dicho momento? Imaginemos que estudio un juego de alguien como, por ejemplo, el excampeón mundial Boris Spassky y quiero que esa experiencia ajena a mí entre dicho personaje y otro gran maestro pase a mi acervo de manera tal que se quede en mi memoria como si fuese una partida que yo hubiese jugado. ¿Qué debo hacer? ¿Se puede experimentar en cabeza ajena? Podrá sorprender al lector, pero la respuesta es afirmativa y el mecanismo se llama ajedrez solitario. Este esquema de estudio no es nuevo y, de hecho, es común en las revistas especializadas. Curiosamente no parece haberse comprendido el gran valor didáctico que puede ofrecer al estudiante dicho esquema. La idea consiste, primero, en seleccionar una buena colección de partidas. Una vez hecho esto, el método consiste en que el estudiante se imagine jugando hombro con hombro con el maestro que ganó la partida, e intente entonces acertar a las jugadas que en dicho encuentro se produjeron. Si en algún momento no se predice la jugada correcta, se hace la que hizo el maestro así como la respuesta del adversario y de nuevo estamos en el camino de buscar la siguiente jugada que hizo el ganador de la partida. Existen algunos libros que siguen esta idea7 pero con un elemento que refuerza la enseñanza: el calificar cada

jugada que hace el maestro. Muchas veces en una partida de ajedrez hay más de una buena jugada. Así, si uno estudia un encuentro vía esta técnica del ajedrez solitario, es posible que el autor de los comentarios de dicho encuentro otorgue puntos por más de una jugada y no solamente por la jugada que hizo el maestro. La retroalimentación que significa una calificación positiva en las jugadas que uno hace resultan en un afán más serio, por parte del estudiante, para hallar la jugada que sigue. Al final del encuentro, normalmente el autor del ejercicio califica el desempeño del estudiante. Al principio, probablemente, las jugadas que uno hace estén alejadas de las que el maestro ha realizado. Sin embargo, con práctica y un intenso esfuerzo por comprender lo que está ocurriendo en las partidas con este formato, nos puede hacer mejorar notablemente en nuestro ajedrez. Es claro que este tipo de ejercicios deben hacerse simulando las condiciones de juego estrictamente, es decir, con el tablero enfrente e incluso, poniéndose un tiempo razonable para el análisis personal. Digamos entre una hora y noventa minutos para el estudio de una sola partida.

7 Libros como How Good Is Your Chess?, Daniel King, Ed. Cadogan; How Good Is Your Chess? Leonard Barden, Ed. Dover; (los dos libros son diferentes, aunque el título es exactamente el mismo); Solitaire Chess, I.A. Horowitz, Ed. CornerStone Books o incluso revistas como Chess Life (EEUU) o Jaque (España), Chess (Reino Unido).

Page 111: programacion_ludica

Kotov describe en su famoso libro8 la manera de entrenarse: “Seleccioné de libros de torneos las partidas en las que habían tenido lugar grandes complicaciones. Luego las veía sobre el tablero, pero cuando se llegaba al punto crucial donde se encontraban dichas combinaciones y el mayor número de variantes posibles, dejaba de leer los comentarios. Colocaba a un lado el libro o cubría la página con una hoja de papel y me ponía la tarea de pensar larga y profundamente, con el fin de analizar todas las posibles variantes. Al mismo tiempo intentaba ponerme en el estado de ánimo que tenía cuando estaba sentado ante el tablero en la sala del torneo”. Y continúa: “cuando había pasado entre media y una hora en este trabajo, algunas veces (especialmente en posiciones muy complejas), escribía las variantes que había examinado, y entonces las comparaba con las del comentarista. Al principio había una gran discrepancia a favor de este último, pero luego aprendí cómo ampliar mi campo y a describir cada variante con considerable exactitud. )aturalmente, analizaba sin mover las piezas para hacerlo igual que en una partida de torneo”. La descripción del gran maestro ruso es notable, porque precisamente estos ejercicios de ajedrez solitario proveen todo esto que buscó Kotov en su momento para analizar y disciplinar su estudio.

Imagen 1 Ventana principal del programa de entrenamiento táctico

Por eso, además de servir Entrenamiento Táctico para, precisamente, el estudiar posiciones de táctica, es factible crear sus propios “libros” electrónicos con posiciones específicas. El sistema se ha diseñado mediante un lenguaje de comandos los cuales se escriben en un archivo de texto (sin caracteres de control o tipos de letras especiales). De esta forma cualquiera que así lo desee puede generar sus propios libros de ejercicios, a los cuales puede incluso dotarlos de una calificación (de acuerdo a la dificultad del ejercicio, por ejemplo), y eso puede servir para ver cuánto progresa quien ejecuta los ejercicios en cuestión. Como ejemplo de lo que puede hacerse con este software, el cual está en su primerísima versión (le faltarán cosas importantes, como suele pasar con los programas de computadora), se transcribió el primer capítulo del librillo de táctica del MI Guil Russek (Para Ganar en Ajedrez, Ed. Selector).

8 Op. cit. pág 16.

Page 112: programacion_ludica

Ajedrez Editor de partidas de ajedrez solitario En el capítulo anterior hablamos de un programa que permite jugar una partida de Ajedrez Solitario. La idea es entrenarse para la batalla, intentando encontrar las jugadas correctas de uno de los jugadores de una partida magistral (normalmente quien ganó), y además, recibiendo puntos por jugada acertada, de manera que en alguna medida el ejercicio no sólo nos muestra una partida magistral, sino que además nos da el estímulo de retroalimentación positiva cuando acertamos las jugadas. El programa del capítulo pasado sirve entonces para reproducir la partida de ajedrez solitario, la cual está codificada en un sencillo lenguaje de script, es decir, como un guión que se ejecuta línea por línea y así entonces, se va reproduciendo el encuentro en el tablero electrónico. El sistema tiene instrucciones que permiten añadir puntos al ‘score’ de quien está haciendo la prueba de ajedrez solitario, entre otras cuestiones. Evidentemente el codificar la partida para que quede en el formato que el programa necesita se hace en un editor de textos como notepad, pues es un texto sin formato que contiene las instrucciones que el programa desplegador simplemente interpreta. Así entonces, lo que tenemos es un intérprete de comandos de un sistema basado en guiones, el cual es muy sencillo de programar, con la ventaja de poder añadir nuevas instrucciones cuando éstas se necesitan. Sin embargo, por simplicidad y porque el sistema de ajedrez de esta naturaleza no lo necesita, no hay ciclos iteractivos, es decir, es un archivo de instrucciones lineal, que se lleva a cabo paso por paso, línea por línea. Después de haber codificado cuatro o cinco partidas, empecé a fastidiarme en lo repetitivo del asunto y me pregunté si no habría una manera más simple de hacer esto. Y más pronto que tarde me di cuenta que necesitaba un programa para editar las partidas, para que así, por una parte se minimizaran los errores de dedo y por otro lado, la tediosa labor de transcripción fuese más sencilla.

Imagen 1 Generador de scripts para ajedrez solitario

Page 113: programacion_ludica

El sistema generador de partidas de ajedrez solitario es un editor de textos que contiene todas las instrucciones que el sistema necesita y además, permite jugar en un tablerito electrónico la partida que se quiere codificar, de manera que hace fácil y sencilla la labor de codificación de este tipo de partidas. Cabe señalar que las instrucciones del sistema tienen una sintaxis muy simple y en la medida de lo posible el programa generador automatiza cada una de ellas, indicándole al usuario qué debe poner en un momento dado. Las instrucciones del sistema empiezan con punto y se escriben en la primera columna de cada línea. Hay instrucciones para mover las piezas, para regresarlas, para asignar puntuaciones, para hacer preguntas al ajedrecista (que está haciendo la prueba) en tiempo real, de manera que se le puedan añadir más puntos si sus respuestas son correctas. El generador simplemente entra en un “loop” (ciclo iteractivo) y lo termina cuando encuentra la instrucción ‘.end’. Cabe destacar que todas las instrucciones del lenguaje de script están en inglés. La razón es que el trabajo se hizo para una página de ajedrez en Inglaterra (www.improveyourchess.com), y por ende, la codificación de las partidas debía ponérselas de manera fácil a los maestros que en Europa iban a codificar las partidas para el sitio en cuestión. Pero independientemente, la tradición obliga a que los lenguajes de programación, incluso los de scripts, se programen en inglés, pues eso es el estándar y así los que entiendan o tengan bases de programación podrán siempre minimizar la curva de aprendizaje.

Page 114: programacion_ludica

Ajedrez Patrones en Ajedrez Se dice que un maestro fuerte de ajedrez tiene en su cabeza alrededor de 50,000 patrones típicos que se dan en el juego. Esto podría explicar por qué un jugador débil no ve con la misma facilidad una buena jugada que su contraparte magistral. Es claro que en muchos sentidos las posiciones tienen características familiares y el hecho de conocer los detalles típicos nos dan la pauta para encontrar la jugada correcta en una partida. Quienes estudien profundamente la táctica ajedrecística notará que ya muchos autores han hecho la tarea por uno, es decir, han catalogado por temas las posiciones: sacrificios en h7, clavada, combinaciones de empate por ahogo, doble ataque, ataque al descubierto, etc. Los temas son muchos pero finitos y en muchos casos las combinaciones, la táctica en ajedrez, se basa en detalles que describen finalmente una posición y que por ende, no hay ni que analizar qué jugada hacer: puestos todos los elementos en su lugar, la combinación nace por sí misma, casi automáticamente. Por eso la recomendación de estudiar táctica no hay que echarla en saco roto. Pues bien, a fines de diciembre, casi para empezar el año 2002, me atacó el virus gripal. Me tiró en cama tres días con sus respectivas noches. Quien haya estado con gripa sabrá lo inútil de dicha enfermedad. Pareciera que su único afán es mantenernos en cama por algún tiempo, aburriéndonos con la tele encendida prácticamente todo el día y sonándonos las narices hasta el hartazgo. Pues bien, en esas condiciones deplorables, cuando me hartaba de la TV me ponía a hojear algunos de los libros de ajedrez que tengo a mi alrededor. Dentro de uno de ellos, hallé una partida que le gané al FM Isidro Díaz Lombardo hace algunos años. Ahí ejecuté una bonita combinación con la que obligué a mi rival a rendirse de inmediato. He aquí la mencionada posición crítica:

XIIIIIIIIY 8-+-+-trk+0 7zp-+-wQ-vlp0 6-zp-+-+p+0 5+-tr-+-+-0 4-+-+P+-+0 3zP-+-+-+-0 2-zP-wq-zPPzP0 1tR-+-+RmK-0 xabcdefghy

Díaz Lombardo, I – López, Manuel

México 1993 Juegan las negras

1. … Dxf2!! Y las blancas abandonan, ya que después de 2.Txf2 Tc1+ y mate a la siguiente. Dejé la papeleta para caer dormido durante algún tiempo. Cuando desperté tomé otro libro. Se trataba de The Inner Game of Chess, de A. Soltis. Lo abrí en cualquier página y me encontré con la siguiente posición:

Page 115: programacion_ludica

XIIIIIIIIY 8-+r+-trk+0 7zpR+-vlpzpp0 6q+-+p+-+0 5+-+-zP-+-0 4-+-zP-+-+0 3+-sN-+Q+-0 2P+-+-+PzP0 1+-+-+R+K0 xabcdefghy

Lee-Sakharov

Campeonato Mundial Juvenil 1963 Juegan las blancas

De pronto caí en la cuenta que era el mismo tema que mi partida contra Díaz Lombardo. Después de 1.Txe7 las negras confiaban en 1…. Txc3 especulando con que la dama blanca está defendiendo la torre de f1, pero las blancas dieron una sorpresa: 2. Dxf7!! Y las negras abandonaron inmediatamente por el inminente mate. Me pareció curioso encontrar una posición similar casi por azar. Pero eso no fue todo: Más tarde hojeaba la revista holandesa )ew in Chess 98/2. Encuentro la partida siguiente en donde, no lo podía creer, se repite la combinación de la que estamos hablando:

XIIIIIIIIY 8-+-+-trk+0 7+Q+-+pzpp0 6p+-zp-+-+0 5+-+Pvl-+-0 4P+-+-+-+0 3+-+-+-+-0 2q+r+-+PzP0 1+R+-+RvLK0 xabcdefghy

Barua-Maherramzade

Ubeda (op) 1998 Juegan las negras

El blanco está perdido. Aquí, sin embargo, el conductor de las negras comete un grave error: 1. … Txg2?? Y Barua, ni lerdo ni perezoso contestó: 2. … Dxf7!! Y las negras se rindieron.

Page 116: programacion_ludica

Este parecía en final de la historia. Pero unos días después de levantarme finalmente de la cama, hallé en el libro del MI Kopec (Mastering Chess), el siguiente diagrama:

XIIIIIIIIY 8-+-+-trk+0 7+-+l+pzpp0 6-+-+-+-+0 5+-zPp+-wq-0 4-+-zPn+-+0 3+-+-+-+-0 2-tr-+-wQPzP0 1tRN+-+RmK-0 xabcdefghy

Mc*ab-Mullen

Juegan las blancas

Después de 1.Dxf7!! las negras tienen que rendirse.

Curiosamente, hace poco aquí en la página de noticias de ajedrez www.Chessbase.com, Frederic Friedel publicó una serie de combinaciones que se dieron en un fuerte torneo en Turquía. Aquí hallé la misma combinación pero con un nuevo atuendo, es decir, en una posición totalmente diferente a las ya vistas:

XIIIIIIIIY 8-+q+ktr-+0 7+-+l+p+-0 6-+nzPpwQr+0 5+-+-+-+-0 4-+-+-+-+0 3+N+-+-+R0 2-zPP+-+PzP0 1+-mK-+R+-0 xabcdefghy

Atakisi, U – Ruck, R

4th IECC Estanbul, Turquía 2003 Juegan las blancas

Page 117: programacion_ludica

Las negras aquí se equivocaron, pues su última jugada fue 30. ... Tg4-g6 en lugar de la requerida, 30. ... Tg4-g8. Y aquí las blancas sorprendieron sin duda a su rival brillantemente: 31. Df7!! Tf7 32. Th8 Tf8 33. T8f8 mate. Notará el atento lector que el tema se repite. El patrón es el mismo incluso cuando la posición no lo parece. Si uno ve decenas de situaciones parecidas, si se le presentan en la práctica, es seguro que hallará la combinación ganadora. En muchos sentidos el ajedrez es búsqueda de patrones conocidos. Para conocerlos entonces hay que ejercitarlos. Es decir, en otras palabras, a trabajar esa visión combinatoria. La pregunta que surge de todo esto es: ¿se puede programar una computadora para que encuentre los patrones típicos? (como los mostrados en este artículo). Sin duda se necesita de un lenguaje que describa el tablero en las patrones que definan las posiciones ganadoras, y cómo actuar en esos momentos. En ese trabajo me he involucrado y ya he comenzado con la codificación de un software específico que defina patrones y jugadas.

Page 118: programacion_ludica

Ajedrez Patrones en ajedrez II Veo en http://npr.etri.re.kr/ un programa de computadora que “pinta al óleo” una fotografía.

Esto en realidad no algo nuevo para nosotros. En este mismo libro puede hallarse mi propia versión de dicho filtro para óleo digital. Sin embargo, la gracia del software en cuestión es que pinta de manera imperfecta. Los investigadores a cargo de este trabajo se han preguntado ¿Cómo es que ser humano hace una pintura? Y a partir de esto se entra en el fascinante mundo del “non-photorealistic rendering”, lo cual quiere decir, generación de imágenes no fotorrealístas. Las imágenes generadas con este programa nunca se repiten, no son exactamente iguales, cambian porque el software está diseñado a pintar con errores, como los seres humanos. Fantástico ¿no? De la misma manera me he preguntado muchas veces ¿cómo es que los jugadores juegan al ajedrez? Ya sabemos que ningún jugador de carne y huesos usa los algoritmos que las computadoras utilizan en general para poder jugar. Muchos investigadores de este fenómeno han encontrado que los jugadores de ajedrez no perciben una posición como una entidad estática, sino como una colección de acciones potenciales. Así, entonces, esto puede verse como que un jugador humano busca seguir las jugadas más prometedoras sin considerar todas las alternativas que existen. Para que esto pueda suceder, el jugador de ajedrez tiene que evaluar las posibles jugadas y en muchos casos tiene motivos para desechar muchas jugadas, pues no son las mejores, o al menos no lo parecen. Entonces ¿qué hace? Aparentemente busca esquemas conocidos, patrones muy específicos, en donde las jugadas correctas son claramente identificadas porque hay una continuación que gana o que adquiere una ventaja muy evidente. A partir de esto se me ocurrió que ¿por qué no incorporar estos patrones a los programas de computadora? Si esto pudiese hacerse, entonces en lugar de que la máquina analizara todas las posibilidades, podrían bien ahorrarse análisis que no lleva a ningún lado. El problema entonces es ¿cómo generar estos patrones de manera que una máquina pueda buscar en ellos y llegar a la conclusión de que hay un patrón específico aplicable? Después de muchos meses meditando sobre el asunto, encontré que se requiere de un lenguaje gráfico, que no sólo defina el patrón, la posición en el tablero, sino también la existencia de este análisis dinámico de qué pieza ataca a qué pieza/peón, para así llegar a configurar un lenguaje de patrones, que defina de la manera más humana posible, cómo es que pensamos en cada posición de ajedrez. Me tardé mucho en llegar a esta conclusión, porque en mi fuero interno estoy seguro que bien debe haber un lenguaje simbólico, algo parecido al que tiene la geometría analítica, que a través de ecuaciones puede manipular hipérbolas, parábolas y elipses. Así, para quienes sean avezados en estos temas, les debe quedar claro que y = x² habla de una

Page 119: programacion_ludica

parábola, con centro en (0,0). Mientras se me ocurría cómo generar dicho lenguaje simbólico, me puse a trabajar sobre esta idea de los patrones de ajedrez y del cómo podría ser útil para poder hacer un programa que jugara al ajedrez y buscara las jugadas más prometedoras, en primera instancia, buscando patrones existentes en las posiciones que se están jugando. Por ejemplo, considérese el siguiente patrón:

XIIIIIIIIY 8-+r+-+k+0 7zp-+-+p+p0 6-zp-+p+-wQ0 5+-+-+-+-0 4-+q+-+-+0 3+-+-zP-+P0 2P+L+-zPP+0 1+-+-+-mK-0 xabcdefghy

Juegan las blancas

Aquí el patrón es claro: hay mate en cuatro jugadas (empezando por 1.Axh7+). Nótese que en este caso, la situación de algunas piezas parece irrelevante (por ejemplo, los peones blancos y el rey blanco). Desde luego que en algunos casos habrá necesidad de observar si es necesario tomar en cuenta otras figuras en el tablero. Y aunque la idea sería crear un sistema en donde todas estas cuestiones las decidiera el propio software, aún se requiere elaborar mucho más. No obstante esto, si consideramos que los jugadores de ajedrez humanos, al analizar esta posición, bien nos dirán algo así como esto: “mira, el Alfil de c2 amenaza peligrosamente h7, que en realidad está indefenso, pues sólo el rey negro lo protege y en cambio las blancas, además del alfil, tienen su poderosa dama ubicada en h6 con doble ataque a dicho peón. Por otra parte, el peón de f7 no está defendido por nadie, por lo que la combinación de mate 1.Axh7+ Rh8 2.Ag6+ Rg8 3.Dh7+ Rf8 4.Df7# es posible”. El patrón entonces será: la amenaza del Alfil blanco a h7. La misma amenaza, pero ahora con la dama blanca que está en h6, y además, hacer notar que el peón de negro no sólo no está defendido más que por el rey, sino que además, impide el escape del monarca negro del inevitable mate. Esto en mi programa se ve en el diagrama así:

Page 120: programacion_ludica

Nótese que las flechas azules describen las piezas blancas interactuando unas con otras, es decir, cómo se defienden entre ellas. Las flechas rojas, en cambio, muestran las piezas negras que están siendo atacadas por las respectivas piezas blancas. Si quitamos todo lo que sobra, es decir, lo que no interactúa con el patrón que buscamos tendremos el siguiente diagrama definido:

XIIIIIIIIY 8-+-+-+k+0 7+-+-+p+p0 6-+-+-+-wQ0 5+-+-+-+-0 4-+-+-+-+0 3+-+-+-+-0 2-+L+-+-+0 1+-+-+-+-0 xabcdefghy

Y su patrón:

Page 121: programacion_ludica

Una vez con esta información, bien podemos poner la secuencia de mate u orientar al software para que entonces sólo analice esta posición específica, lo cual quitaría de tajo todos los análisis inútiles que la computadora hace cada vez que valora las jugadas en una posición dada (aunque lo haga muy velozmente, que conste). Si se tiene una colección de patrones, el problema se reduce a hacer una búsqueda en la base de datos de patrones y si se encuentra alguno, ya se sabe qué hacer, cómo jugar, cómo actuar en el tablero. El software en acción Aunque mi programa es aún experimental y no está terminado (no estoy aún muy convencido si necesito una simbología más rica, por ejemplo, una “pieza” en el tablero que sirva simplemente para identificar que una figura blanca ataca una casilla determinada porque en este caso sería parte de un patrón específico y totalmente claro). Igualmente, aunque desde luego que tengo muchos libros e información ajedrecística acumulada en tantos años, quizás ya alguien ha hecho una especie de catálogo de patrones de posiciones de ajedrez. Probablemente los haya para la táctica, pero ¿para la estrategia? ¿No podría generalizarse algo de esta naturaleza para este tema siempre más complejo que el cálculo de jugadas? Me parece que esta idea tiene sus virtudes y hay que explorarla más a fondo.

Imagen 2 El software de análisis de patrones

Page 122: programacion_ludica

Internet ¿Está conectado a Internet? Hace quizás ya unos pocos años, cuando empezó la conexión de banda ancha a Internet, contraté con la empresa Cablevisión su servicio. Éste, comparado con su mayor competencia, Infinitum de Telmex, era mucho más barato… pero como dicen por ahí: lo barato sale caro. Y sí, porque un par de meses después de que tenía mi brillante servicio de banda ancha, éste comenzó a fallar. Si se iba la señal televisiva de Cablevisión, fallaba también la de Internet. Poco después, sin importar si la señal de tv por cable funcionaba, simplemente Internet no se conectaba a ninguna velocidad. La experiencia fue de mal en peor, porque en ese tiempo (no sé ahora, porque después de esta experiencia no quiero saber más de ellos), el soporte técnico de Cablevisión era poco menos que pésimo. No solucionaban nada, lo dejaban a uno en la línea de “atención a clientes” por tiempo indefinido y cada problema llevaba al menos una semana intentar resolverlo. De hecho, en alguna ocasión, que reclamé porque no tenía Internet por horas, quien me atendió en esa empresa me dijo que anotara cada vez que el cablemódem me desconectara de la red. Obviamente su petición era un poco absurda, porque no iba a estar “monitoreando” la red, minuto a minuto para ver si seguía conectado o no. Así, me cambié a Infinitum. Pensé en ese entonces, y no me equivoqué, que finalmente hay que irse con el gigante en el mercado. Telmex, nos guste o no, es una megaempresa y su servicio de Internet de banda ancha es muy sólido, funcional prácticamente todo el tiempo y con un área de soporte que ninguna otra compañía que dé servicios de Internet puede tener. La realidad es que el servicio de Teléfonos de México lo hace muy bien y no tengo quejas… Pero he aquí que un amigo mío me dice que hace un par de días que su conexión a Infinitum parece estarlo desconectando contínuamente. Le dije que hablara con el proveedor y que le platicara su problema y entonces añadí: “si el problema no se ha arreglado aún, puedes usar un programa que escribí para monitorear la conexión a Internet, allá por los tiempos en que estaba conectado a Cablevisión”. Porque sí, cuando tenía mis dificultades con el servicio mencionado, escribí un programa que verificaba –minuto a minuto– la conexión con la red de redes. El sistema creaba una bitácora (un archivo de texto), que me indicaba, al final de la jornada, si hubo desconexión y cuánto tiempo efectivo no se tuvo acceso a Internet. Prometí enviarle a mi amigo el software y así lo hice. No obstante que el programa es aún funcional, decidí darle una “manita de gato” al código fuente, corregir un par de situaciones que no me terminaban de gustar y así, en unas pocas horas he salido con un programa renovado, actualizado, que sigue teniendo la funcionalidad del original, pero ahora luce una interfaz más moderna.

Imagen 1 El monitor de Internet midiendo si uno está conectado a la red

Page 123: programacion_ludica

Para quienes estén interesados en la parte técnica, he de decir que saber si uno está conectado a Internet es un problema que puede resolverse de muchas maneras. La más fácil, a mi entender, es intentar saber si algún sitio –que comúnmente está funcionando en la red de redes– está activo o no. Si no lo está, es bastante probable que lo que esté pasando es que estamos desconectados nosotros. Un ejemplo es usar yahoo (www.yahoo.com) o google (www.google.com), pues ambos sitios siempre están funcionando. Una vez elegido el sitio, utilizamos un comando llamado “ping”, que precisamente me dice si el sitio web está activo. Para ello, el “ping” manda una serie de bytes al sitio y éste responde con otra secuencia en milisegundos. Con ello podemos asegurarnos que estamos o no conectados. Curiosamente, el comando ping, el cual es un programa originalmente en Unix, no es el acrónimo de “Packet InterNet Grouper”, sino que, de acuerdo al autor, le puso “ping” porque pensaba que hacía el mismo ruido que lo que hace un sonar cuando encuentra un punto de interés en la pantalla del mismo. (La historia completa en http://ftp.arl.mil/~mike/ping.html).

Page 124: programacion_ludica

Internet Mi solución contra el correo chatarra Hace unos días empecé a recibir una centena de correos en donde se me indicaba que mis mensajes estaban rebotando, es decir, no llegaban a su destinatario. Se me hizo raro, porque no suelo mandar cientos de mensajes de correo por día. Lo que descubrí entonces fue que un spammer usaba –para mandar su propaganda de medicinas contra la impotencia– mi dirección de correo como remitente. Cuando algún destinatario no existía o rebotaba por la razón que fuere, yo, y no el spammer, recibía los mensajes de error. Llevo así una semana con cientos de mensajes por día de correos no recibidos o fallidos. Lo peor es que en algunos sitios ya me bloquearon pues mi dirección es de spam. Vaya, que estoy como “boletinado” por spammer, aunque claro está, no es mi culpa. Lo peor del asunto es que no se puede hacer nada para evitar que alguien use una dirección de correo específica para usarla como remitente. Esto ocurre porque el protocolo de correo (SMTP - Simple Mail Transfer Protocol, por sus siglas en inglés), no fue diseñado para autentificar al remitente. Y de hecho, Microsoft está apelando por una iniciativa para cambiar el protocolo de correo y así hacerlo más robusto, minimizando el problema del spam. El spam ha sido considerado ya un problema serio en la red. Para empezar, como el envío de correo electrónico es gratuito, entonces hay quien se sirve de inmediato con la cuchara grande. Para un usuario de Internet, mandar mil mensajes o uno solamente es igual, no tiene costo. Cuando la mercadotecnia se dio cuenta de las posibilidades que esto ofrecía para promover sus bienes y servicios, entonces nos inundaron nuestros buzones virtuales con cuanta basura, desde proponer hacerse rico poniendo una granja de avestruces, hasta el comprar una estrella y bautizarla como mejor queramos (aunque esto es un fraude porque no se pueden comprar los nombres de las estrellas). La realidad es que mucho del spam existente bien podría eliminarse si quienes proveen los servicios de Internet limitaran la cantidad de correos que sus usuarios pueden mandar. ¿Cuántos correos por día mandará una persona “normal” en Internet? ¿cincuenta? ¿cien? ¿mil? Yo creo que mil por día ya es excesivo, pero asumamos que los proveedores del servicio de Internet limitaran a 1000 mensajes diarios por usuario. Sin duda mucho spam desaparecería, porque estamos hablando que los spammers mandan miles de mensajes diariamente. Como el asunto del spam no parece tener una solución trivial, se han buscado muchas alternativas. Una de ellas, que se me ocurrió a mí (aunque no soy el único), es la de atacar el fuego con fuego. Si reconozco a un spammer, le mando 1000 correos idénticos, reclamándole su actitud. Obviamente eso sólo puede hacerse con un programa, el cual escribí en el 2004 con las herramientas que en ese entonces tenía. Hoy, usando actualizaciones del software que uso para programar (Delphi), hacer un programa que mande ) correos idénticos a una dirección de email es un asunto casi trivial. Así que le di una manita de gato al que escribí en el 2004 y lo actualicé. Usando Indy, unos componentes específicos para Internet (que vienen en Delphi), los cuales están más trabajados que en versiones anteriores, ya no he encontrado errores de sockets ni de sincronía al hacer la conexión a la red de redes, asunto cotidiano con la versión del 2004 (y el cual no sabía cómo resolver).

Page 125: programacion_ludica

Imagen 1 Contra el correo chatarra

Sé que más de uno dirá que con mi solución sólo doy pie a que exista más spam aún. Yo creo que tenemos el derecho a atacar con las mismas armas a quienes nos atacan, sino pues estamos en desventaja. Pienso que mi software no será la solución final y que quien decida usarlo lo haga de manera responsable y no a todo aquel que piense que lo spamea, valga la expresión.

Page 126: programacion_ludica

Internet

Biométrica: 0o es lo que escribes, sino cómo lo escribes.

Los sistemas de cómputo están en todos lados. Son parte de nuestra vida cotidiana y no se concibe el mundo moderno sin computadoras, cajeros automáticos, teléfonos celulares, la red internet, etc. Para que dichos sistemas sean efectivos, deben de ser seguros, de tal manera que la información que posean solamente esté disponible para los usuarios autorizados. La seguridad de los sistemas de cómputo modernos se basa usualmente en mecanismos de autentificación a través de nombres (login) y contraseñas (passwords). Algunas instituciones con información muy sensible o importante requieren del uso de tarjetas de identificación personalizadas o bien, de terminales especiales. El mecanismo tradicional de nombres de usuario/contraseña ya no es –quizás– suficientemente seguro debido a los ataques constantes de terceros por hacerse de esta información para ingresar a sistemas de cómputo de manera ilegal. Debido a esto, aquí exploramos la posibilidad de incorporar la dinámica del teclado, como una expresión medible de un usuario de forma tal que ahora no solamente se puede acceder a un sistema con el nombre y la contraseña correcta, sino además, midiendo si el usuario escribe su contraseña como acostumbra hacerlo. Se sabe, desde hace mucho, que el ritmo al escribir en un teclado es específico para cada usuario9. Este ritmo depende, desde luego, de las costumbres y prácticas que tenga la persona con el teclado. Quienes usan frecuentemente máquinas de escribir o teclados de computadora incluso, escriben correctamente sin necesidad de mirar las teclas. Quienes tienen menos experiencia son más lentos en su escritura. De esta forma, es factible pensar que la manera de escribir es una medida biométrica y que es susceptible de ser analizada e incorporarla en esquemas de nombre/contraseña, para así autentificar de manera más sólida al usuario que pretende ingresar en un sistema de cómputo. El método aquí estudiado tiene que ver con los tiempos que el usuario tarda en oprimir cada tecla de su contraseña, lo cual forma un perfil biométrico digital, el cual puede ser analizado y comparado para saber si se trata del usuario con permisos para ingresar al sistema. Está en tus manos, en tu cara, en tus ojos La biométrica es la medida de las características físicas y de comportamiento que nos hace a cada ser humano único. A diferencia de los nombres/contraseñas de los sistemas de cómputo, ciertas medidas biométricas no se pierden, no pueden ser duplicadas o robadas. Pertenecen a cada ser humano en particular. Esto da la posibilidad de sistemas que sean imposibles de ser violados por terceros de manera ilegal, puesto que la información biométrica de los usuarios es única e irrepetible. Las características fisiológicas como pueden ser las huellas digitales, son buenas candidatas para la identificación de personas, ya que son únicas para cada ser humano, incluso si se trata de gemelos idénticos. Más aún, son difíciles de copiar sin causar daño severo a la persona. De esta forma, la biométrica está ganando popularidad, porque cuando es usada en conjunto con métodos como contraseñas o incluso tarjetas de identificación electrónicas, proveen un nivel extra de seguridad. Algunos de los sistemas biométricos usados para identificación humana se basan en la geometría de las manos, patrones térmicos en el rostro, las venas en la retina, voz y firmas manuscritas. Hoy en día hay algunos dispositivos de reconocimiento biométrico en el mercado. Sin embargo, algunas técnicas usadas por estos mecanismos son fáciles de burlar o bien, son generalmente costosas e invasivas.

9 Benjamin Miller. Vital Signs of Identity. IEEE Spectrum, pp 22-30, 1994

Page 127: programacion_ludica

)o es lo que escribes, sino cómo lo escribes La forma en que un usuario escribe en el teclado de la computadora tiene más de medición del comportamiento humano que de características fisiológicas. Esto sin embargo, no lo hace más pobre que una medida biométrica tradicional y tiene una gran ventaja: es prácticamente gratuita, pues no se requieren de dispositivos extras. El único hardware requerido es el teclado. La intención en este caso, se basa en medir los tiempos de retardo que cada usuario en particular tiene al escribir su contraseña. Una vez realizado esto, se define un “perfil” digital de cada usuario. Así, cuando el usuario alimenta su contraseña, ésta pasa por dos filtros: (a) ver si se trata de la contraseña correcta y (b) si se cumple con el perfil digital, el cual funciona similarmente a la firma manuscrita que la gente tiene. La medida de su parecido es la que decide si se da acceso al sistema al usuario en cuestión. Debido a factores que se explican más adelante, debe existir un factor de tolerancia para intentar discernir si la contraseña alimentada al sistema y su perfil, se parecen lo suficiente como para dar acceso a ese usuario particular al sistema. Características del sistema Un perfil digital del teclado se obtiene midiendo los tiempos que el usuario tarda en escribir una tecla y la siguiente. Algunos autores le denominan a esto tiempos de latencia o retardo. Bajo esta concepción, lo que se necesita es un programa que mida primero dichos tiempos de retardo y los guarde, para posteriormente ser analizados. El hardware actual de las computadoras permite medir tiempos hasta de milisegundos. Debido a esta resolución, es factible entonces medir –con relativa precisión– los tiempos de retardo entre tecla y tecla oprimida. En algunos casos es factible incluso medir los ciclos de reloj a través de instrucciones de bajo nivel o de ensamblador. De hecho, no importa qué medida se tome, siempre y cuando sea lo suficientemente precisa. De esta manera, es lo mismo, para efectos prácticos, medir ciclos de reloj de la máquina que milisegundos. En este caso, se decidió utilizar ciclos de reloj para generar el perfil del usuario. Los perfiles. ¿Cómo son? Un perfil digital del teclado se define como el tiempo que tarda un usuario en escribir su clave o contraseña, permitiéndole al sistema medir los tiempos de retardo entre tecla y tecla oprimida. Los datos obtenidos pueden ser analizados a través de una gráfica cartesiana, donde el eje x contiene el número de teclas orpimidas y el eje y los tiempos de retardo de una tecla oprimida a la siguiente. La imagen 1 muestra el perfil del usuario cuya contraseña es “la_morsita”.

Imagen 1 Perfil de un usuario cuya contraseña es “la_morsita”.

Page 128: programacion_ludica

Todos los perfiles tienen finalmente una forma de “diente de sierra”, por la naturaleza discreta de los eventos dentro del teclado. La magnitud de cada diente de sierra será mayor en la medida que el usuario tarde más al pasar de oprimir una tecla a la siguiente. Evidentemente los usuarios no escriben de la misma manera, y tardándose estrictamente lo mismo, su contraseña. Sin embargo, la forma del perfil se mantiene constante. Pruebas empíricas demuestran que al escribir repetidamente una palabra (contraseña), un mismo usuario mantendrá constante un mismo perfil. Análisis de los perfiles Existen muchas ideas al respecto de cómo analizar un perfil digital del teclado para así saber si el usuario es el correcto y no un impostor. Los métodos van desde la estadística descriptiva (usando la t de student para comparar la muestra de un usuario contra la hipótesis (el perfil))10 hasta aquellos que utilizan redes neurales, intentando discernir si el tipo de perfil pertenece al que el usuario ha introducido. Sin embargo, lo que parece evidente es que, considerando el perfil gráfico mostrado en la imagen 1, el análisis debe hacerse directamente, en una primera aproximación, sobre las pendientes que dicho perfil tiene. De esta manera se pretende identificar a un usuario legal de un impostor considerando la analogía del perfil contra una firma manuscrita. Dicho de otra manera, en un cheque, por ejemplo, el cajero tiene que hacer una validación de la firma mostrada en le documento contra la que él tiene en sus registros computarizados. Si la firma le parece que no coincide visualmente, por lo menos en un buen porcentaje, el cajero rechaza el cheque y no lo paga (o bien, pide al cobrador más pruebas de su identidad). De la misma manera puede analizarse el perfil digital de una contraseña para saber si es lo mismo que el usuario escribió al digitar su contraseña. La comparación se basa más en la forma de la gráfica que en otros datos. Así entonces, el análisis de perfil es un arreglo que muestra las pendientes de la curva diente de sierra del perfil y compara, pendiente de una tecla a la siguiente, contra la alimentación de la contraseña por parte del usuario. En esta primera aproximación, no estamos siquiera considerando el valor de la pendiente, solamente si es positiva o negativa. En este sentido, lo interesante es hacer un primer análisis y descubrir si es lo suficientemente adecuado para los fines de seguridad que se persiguen. De esta forma, el perfil digital se convierte en una lista de valores que definen si la pendiente es positiva o negativa (la pendiente, debido a la naturaleza de la gráfica, jamás puede ser infinita, es decir, una línea vertical). El perfil de la imagen 1 se convierte entonces en: positivo negativo positivo negativo positivo negativo positivo negativo positivo. Desde luego, si un usuario impostor conoce el método que se está usando para medir el perfil digital, podría hacer las pausas adecuadas para así acertar al perfil registrado. Sin embargo, la idea es que el sistema mantiene en secreto la manera de validar un perfil. Sin esta información parece más difícil que un impostor acceda a un sistema a través del robo de alguna contraseña. Factor de Tolerancia Si le pedimos a un usuario que haga su firma manuscrita un par de veces, observaremos que ambas firmas no son estrictamente iguales. Sin embargo, hay ciertos elementos que la identifican como escrita por la misma persona. Ciertas curvas en las letras, cierta fuerza y presión en algunos de los rasgos escritos identifican de manera general a un usuario verdadero de uno falso. Con el mismo criterio, aquí necesitamos un factor sobre la comparación de los perfiles digitales contra los que el usuario escribe. A este factor le llamamos Tolerancia y lo tomamos como una medida porcentual sobre la cantidad de pendientes donde se es igual el perfil registrado a la contraseña alimentada. Así, este factor va de

10 Fabian Monrose, Michael K. Reiter, Susanne Wetzel. Password Hardening Based on Keystroke Dynamics. Proceedings of the 6th ACM Conference on Computers and Comunications Security, November 1999, pp. 73-82.

Page 129: programacion_ludica

0% a 100%. Si nuestro factor de tolerancia es de 80% le estamos diciendo que mientras el sistema no identifique el 80% de las pendientes correctamente, no se le dará acceso al usuario. La imagen 2 presenta el intento de un impostor de duplicar el perfil del usuario cuya contraseña es “la_morsita”.

Imagen 2 Contraseña alimentada por un impostor (en azul) contra el perfil de la contraseña “la_morsita”. El

porcentaje de coincidencias es de 39%. El acceso es rechazado. Aquí el sistema da un porcentaje de acierto de 39%. De esta manera, si el factor de tolerancia es, por ejemplo, 65% (aún así bajo), el sistema rechazará a este usuario. La imagen 3, en cambio, muestra al usuario correcto escribiendo su contraseña. Aquí las coincidencias son del 79% por lo que el usuario tiene acceso al sistema.

Imagen 3 Contraseña alimentada (en azul) por el usuario legal contra el perfil de la contraseña “la_morsita”. El

porcentaje de coincidencia es de 79% y el acceso es permitido. Software de demostración Todos los análisis se llevaron a cabo en un programa de demostración para entender en la práctica la validez de los perfiles digitales biométricos del teclado. El sistema está escrito para Windows 98 en adelante en el lenguaje Delphi 5 (de Borland). La imagen 4 muestra la ventana principal del programa de demostración:

Page 130: programacion_ludica

Imagen 4 Ventana principal del software de demostración

El sistema contiene una serie de botones que permiten las diferentes acciones de procesamiento y análisis. A continuación la descripción de los mismos: Botón Inicializa valores: Limpia el campo de alimentación de la contraseña y la última gráfica (y perfil) alimentado. Botón Añade password/perfil: permite –una vez alimentada una contraseña– guardarla en el archivo de contraseñas (‘passwords.txt’), el cual contiene la contraseña alimentada y los números que describen el perfil de quien alimentó ese dato. Botón Lee perfil: permite graficar cualquiera de los perfiles que se encuentran en el archivo de contraseñas. De esta manera se pueden comparar los valores alimentados contra un perfil determinado. Botón Ver/esconder gráfica: permite al usuario desplegar solamente las gráficas que le interesen. Botón Verificar contraseña: Aquí el sistema comparará la contraseña alimentada contra el perfil que dicha contraseña tenga. Se miden dos factores, (a) que la contraseña sea la misma y (b) el porcentaje de similitud de las pendientes del perfil registrado contra el perfil alimentado. Botón Acerca de...: despliega información sobre el autor de este software. Botón Ayuda: despliega una nueva ventana con la ayuda sobre los botones y comandos del sistema. Botón Salir: termina la ejecución de este programa. Barra deslizable de tolerancia: Permite al usuario definir cuánta tolerancia (entre la contraseña de un perfil y la alimentada por el usuario) debe haber para aceptarla o rechazarla. Por ejemplo, 90% de tolerancia significa que el usuario debe escribir su contraseña con un mínimo de certeza del 90%, porque de ser menor, el sistema rechazará esa contraseña por inválida. Algunas conclusiones preliminares Para probar que este esquema de perfiles digitales biométricos basados en el retardo entre teclas puede validar a usuarios legales de impostores, se necesitan pruebas estadísticas considerando todo género de usuarios. Obviamente, ante la falta de perfiles las conclusiones sobre la bondad de esta idea aún están en tela de juicio. Sin embargo, podemos concluir que el esquema del análisis de las pendientes, considerando solamente si son positivas o negativas da un buen acercamiento a la validez de la idea. Desde luego que es posible generar más parámetros de comparación, así como una incertidumbre de tolerancia, en donde una pendiente, por ejemplo,

Page 131: programacion_ludica

comparada contra la del perfil, sea igual en ±10%, por ejemplo. De esta manera, se estaría incorporando más precisión a la comparación, evitando así que un impostor pudiese, incluso sabiendo el método de verificación usado, duplicarlo. Es evidente que si un usuario legal en un sistema no viene en las condiciones adecuadas para usarlo (enfermo, drogado, etc.), el sistema podría así evitar que se introdujera al mismo. Esto puede ser interesante en sistemas de cómputo con información muy sensible. Cabe señalar que las pruebas se hicieron con un teclado estándar de computadora, pero es obvio que el perfil de un usuario y su contraseña puede ser muy diferente si se usa un teclado de laptop o computadora portátil. A la fecha no tenemos ninguna respuesta a esta problemática. Esto quiere decir que el perfil de un usuario a través de la dinámica del teclado es susceptible del tipo de teclado que se está usando. Quizás en este caso la única manera de soslayar esta dificultad sea subir el nivel de tolerancia sobre el perfil alimentado contra el que pueda dar el usuario al alimentar la contraseña. Es nuestra opinión que un sistema basado en contraseñas y perfiles dinámicos del teclado pueden incrementar la seguridad de los sistemas de cómputo. Sin embargo, entendemos que se necesita muchas más experiencias prácticas para validar los beneficios de esta idea.

Page 132: programacion_ludica

Internet Cuide a sus hijos Internet puede ser una herramienta estupenda, pero claramente, como todo lo que hace el ser humano, puede ser llevada a los extremos. La naturaleza humana parece estar dispuesta a estirar todas las reglas al límite. Cuando éstas se rompen entonces vienen las consecuencias. Por ejemplo, es claro que la facilidad para encontrar información en Internet, la red de redes, es uno de los inventos más notables de nuestra época. No obstante, debido a la naturaleza pública y sin censura de la red, muchas veces hay contenidos para adultos en un sinfín de páginas. Por ello mismo, si hay pequeños en casa, o preadolescentes, es necesario llevar un control sobre los sitios que visitan y a qué páginas acceden. Debido a que muchas veces no es posible estar al pendiente de los menores, y considerando los peligros que ciertos contenidos pueden ser malinterpretados por los pequeños, La Morsa Software Co. decidió poner manos a la obra, generando )annyWare como una posible solución al problema de control de contenidos en la red. NannyWare es un programa que bloquea los sitios que un adulto no quiere que sean vistos por menores u otras personas. La tecnología de NannyWare captura las direcciones que se escriben en el navegador Internet Explorer, sin importar que haya más de una instancia del mismo, y bloquea –cerrando la ventana del navegador ofensor– automáticamente. El sistema analiza cada 15 segundos los programas que están ejecutándose en la PC y así, si encuentra algún contenido ofensivo (o declarado así por el usuario), cerrará dichas ventanas de cada navegador en donde aparezca esa parte de la palabra dentro de la dirección www de internet. Es posible bloquear direcciones específicas así como aquellas que contengan secciones de palabras. Por ejemplo, si queremos bloquear las direcciones en donde aparezca la palabra ‘sex’, basta con escribir esa palabra en los URLs a bloquear. El sistema revisará que cuando Internet Explorer se encuentre en un sitio en donde ‘sex’ aparece en alguna parte, bloqueé la ventana cerrándola para no poder ser accedida. Por ejemplo, supongamos que queremos, por los motivos que sean, bloquear el acceso a www.chesscafe.com, www,chessbase.com e www.inforchess.com. Como ejemplo ilustrativo, abramos tres instancias de Internet Explorer. En cada una póngase una de las direcciones web mencionadas. Córrase NannyWare y dígasele que se quiere bloquear todas las direcciones que tengan la palabra ‘chess’. En 15 segundos a más tardar, esas tres páginas se cerrarán automáticamente. El sistema, una vez ejecutado, no puede ser eliminado de la memoria, es decir, no se puede cerrar. El usuario podrá notar que no funciona el botón ‘X’ para cerrar la aplicación o bien, desde el menú de la ventana principal. No quiere decir que el sistema funcione mal. Se han deshabilitado estas opciones. Se sugiere que el sistema se cargue siempre desde el arranque de Windows. Esto puede hacerse copiando el programa al directorio o carpeta: C:\WINDOWS\Menú Inicio\Programas\Inicio (considerando que usa Windows 98. Vea su manual del usuario para hacer este cambio en Windows 2000, XP o Vista).

Page 133: programacion_ludica

Imagen 1 )annyware, para proteger a los menores

El sistema cuenta con un programa que genera una clave o contraseña para que solamente un usuario autorizado pueda dar de alta/baja/cambios ligas de Internet (URLs). Dicha clave se guarda en el directorio en donde fue instalado nannyware y se llama password.txt. El archivo no se puede ver normalmente porque el propio generador lo pone de modo invisible en la carpeta o directorio en donde se instaló, de forma tal que sea difícil saber cuál es la contraseña y así dar de baja el programa y evitar su funcionamiento. Cabe señalar que en términos generales, cualquier persona con ciertos conocimientos de cómputo y particularmente, del sistema operativo, podría cancelar este programa y con ello su posible efectividad. Sin embargo, considerando que el nivel promedio de los usuarios de la computadora personal carece de conocimientos al respecto, nannyware puede ser una estupenda herramienta para proteger de contenidos ofensivos o indeseables en un momento dado. NannyWare funciona en esta versión sólo con navegadores de Microsoft (Internet Explorer). Se está trabajando para poderlo usar con navegadores como Netscape, Mozilla, Avant Browser y otros.

Page 134: programacion_ludica

Internet Bloqueador del ms–messenger Uno de los problemas que se están convirtiendo en “endémicos” en el cómputo actual es el uso y abuso del mensajero instantáneo, en particular el MSN Messenger. Lo he visto instalado en oficinas de gobierno, en las universidades, en todas partes, pues. Sin duda que día a día millones de mensajes “instantáneos” pasan entre máquinas y eso, evidentemente, es un extraordinario avance de la comunicación, ya que los mensajes y pláticas se dan incluso de continente a continente. Sin embargo, en las oficinas no está aún valorada la cantidad de tiempo que se pierde (horas de trabajo, me refiero), porque la gente está platicando vía este programa. En algunas ocasiones, la ayuda de este tipo de programas para comunicarse incluso en un negocio, es importante, y entiendo que en muchos casos, no es posible bloquear en una oficina el uso de este programa pues quienes primero brincarán son los que lo usan para el trabajo mismo. Por supuesto, a quienes que habría que bloquear son a aquellos que de alguna manera abusan, lo cual en mi opinión, son la mayoría. Una manera de enfrentar el problema es hablar en la oficina con quienes consideramos abusan de este privilegio del mensajero instantáneo. Probablemente la reprimenda caiga mal en quienes la reciben y ante la eventual amenaza de un despido, se midan más en el uso del Messenger. Sin embargo, con el tiempo, tales regaños tienen poca efectividad y a la larga no queda más remedio que tomar acciones más severas.

Imagen 1 Logotipo del bloqueador de mensajeros instantáneos (cortesía de Juan López)

Obviamente los administradores de las redes locales cuentan con herramientas para bloquear cualquier programa, pero cuando esto se hace el efecto es general, es decir, todos los usuarios de la red están imposibilitados de usar el programa prohibido. Así pues, esta solución no es la mejor. Por ende, se me ocurrió escribir un programa bloqueador de MSN Messenger. El sistema debe instalarse en la máquina del usuario que usa este programa (es decir, el software trabaja de manera local), de tal forma que cuando quiere entrar a platicar en línea, mi programa se da cuenta y cierra inmediatamente la aplicación. El monitoreo se hace cada dos segundos y tiene algunas características que lo hacen difícil de detectar en la computadora, de tal manera, que si el usuario no es muy avezado en cómputo (incluso algunos con cierta pericia técnica), lo único que

Page 135: programacion_ludica

notará es que el messenger se ha estropeado e incluso, reinstalándolo, no le permite reiniciar su antigua práctica de platicar mientras está trabajando11. Desafortunadamente, de acuerdo a mi experiencia, al ser humano muchas veces no se le puede tratar con la razón, explicándoles el abuso en el que incurren, pues simplemente no hacen caso. Si nos fijamos en el mundo moderno, las reglas de convivencia casi exigen siempre un castigo o multa a los eventuales infractores a una regla del sentido común, que nos beneficia a todos, pero que desde luego, no falta quien quiere sacar ventaja de ello o se siente más inteligente que los demás porque hay personas que creen que las reglas son para los tontos nada más. Hay otros mensajeros instantáneos en el mercado, con su nicho de usuarios muy bien establecido. Por ejemplo, los que consideran que Google es una maravilla, usan con alegría Google Talk, y más aún, sus cuentas de correo están, desde luego, en GMail. También está Yahoo! Messenger, AOL Instant Messenger e incluso Skype. Todos ellos son sistemas de chateo, y éste último incluso vía voz. La realidad es que la idea de la comunicación instantánea vía Internet es muy buena, pero el abuso es el que le da al traste completamente. De esta manera, después de entender cómo bloquear al MSN Messenger, desarrollé todo un sistema bloqueador de mensajeros instantáneos. A la fecha bloquea los mensajeros ya mencionados.

11 Cabe señalar que un usuario más o menos avezado en cómputo podría hallar la manera de desbloquear el Messenger. De hecho, se ha intentado esconderlo lo suficiente para que sea difícil de deshabilitar. Este esquema se llama “seguridad por oscuridad”, es decir, esconder una aplicación dentro del sistema y no indicar cómo está escondida para hacerle difícil de detectar. No es, sin duda, el mejor método, pero para el problema que nos ocupa resulta bastante acertado el enfoque.

Page 136: programacion_ludica

Proyectos varios Juego de palabras Veo en la televisión un concurso, en donde se trata de formar palabras. Dichas palabras pueden ser de una cantidad de letras variables, inicialmente, pero una vez que ya se puso la primera palabra, la longitud de las siguientes palabras queda fija. El concurso trata de encontrar palabras que empiecen con la primera letra de la primera inicial, tenga la misma longitud que la palabra original, pero que no se repitan ninguna de las letras en el orden que están en la primera palabra. Por ejemplo, imaginemos jugamos nosotros (por teléfono es el concurso), y que la primera palabra (la que se da inicialmente en la televisión) es PELOTA

Ahora sabemos que tenemos que formar palabras que empiezan con ‘P’, que deben de ser de seis letras, y que además, con las siguientes restricciones: ya no puede ponerse en la nueva palabra una ‘E’ en la segunda letra, una ‘L’ en la tercera, una ‘O’ en la cuarta, una ‘T’ en la quinta y una ‘A’ en la última letra. ¿Qué palabra podemos poner? A mi se me ocurre PASTAS

Entonces si esa es la palabra elegida por el concursante tendremos PELOTA PASTAS Aquí entonces empiezan más problemas. Ahora la tercera palabra no debe tener ni una ‘A’ ni una ‘E’ en la segunda letra, ni ‘S’ ni ‘L’ en la tercera posición, ni ‘O’ ni ‘T’ en la cuarta posición, ni ‘A’, ni ‘T’en la quinta posición y tampoco ‘A ‘ni ‘S’ en la sexta posición. Las restricciones crecen palabra a palabra. Pensemos en alguna otra... Por ejemplo ‘PIEDRA’, pero no sirve, porque termina en ‘A’ y ya está en la sexta posición (en ‘PELOTA’) esa ‘A’. Pensemos en alguna otra... ‘PUDRIR’. Parece que ésta sí se puede poner... Veamos PELOTA PASTAS PUDRIR Y así sucesivamente. El juego –como puede verse– tiene cada vez más restricciones y cada vez resulta más difícil poner una palabra. Debe llegar el momento en el que ya no se puede poner ninguna. Por cada palabra puesta, se gana dinero, creo que se va duplicando, así que se puede llegar a un monto interesante. El software Hasta aquí el juego. Cuando lo vi pensé que sería muy fácil hacer un programa que buscara en un diccionario las palabras y dadas las restricciones, me fuera diciendo qué palabras sería posible poner. No debe ser un programa difícil de hacer. pero la cuestión era, ¿de dónde sacaría yo un diccionario con muchos términos para ser usado? Casualmente ese día, mientras pensaba cómo hacer, me reuní con el “Gemelo” (Jesús Ortega, también conocido como Yixus), que ha sido (o es) el campeón nacional de Scrabble. La tesis del gemelo fue precisamente sobre un programa para jugar scrabble y él, por ende, tenía un amplio diccionario, el cual, al platicarle mi idea, compartió para que este programa pudiese hacerse. Al llegar a mi casa encontré que Jesús ya me había mandado el archivo con 449,305 palabras, casi medio millón. Nada despreciable... Así, puse manos a la obra y en un par de horas hallé cómo hacer las búsquedas, incrementando las restricciones obligadas por el juego.

Page 137: programacion_ludica

Desde luego ahora había que programar las búsquedas lo cual es un interesante ejercicio de programación, pues con la selección de cada palabra se va limitando el número de posibles palabras que pueden ser elegibles. Tal vez ésta fue la parte más difícil de programar.

Imagen 1 El software en acción

¿Cómo se usa el software? Instale el programa corriendo el ejecutable. Este procedimiento es todo automático y al final tendrá un icono que al darle doble click, ejecuta el software. Encontrará entonces un menú muy simple: ‘Juego’ y ‘Ayuda’. Normalmente puede empezar el juego o bien pedirle que haga un juego nuevo. Coloque la primera palabra en el casillero que dice Palabra del concurso Ésta es la palabra inicial. Ahora puede decirle al programa, dando click sobre el botón ‘Buscar’, que le dé una palabra diferente a la primera, considerando las restricciones que inicialmente se ponen. Consideremos el ejemplo original, en donde la palabra inicial es PELOTA

Si le damos buscar, nos dará un montón de palabras... De aquí elegí, por ejemplo, ‘PANZON’. Así, el juego queda así: PELOTA PANZON

Page 138: programacion_ludica

Podemos escribir la palabra en la caja de ‘palabra del juego’ o bien, marcar la palabra con el ratón y dar doble click. la palabra pasará a la ventana del juego. Puede verse que el programa encontró 796 palabras que pueden ponerse ahí. Ahora intentemos una segunda búsqueda, que por ende, será más restrictiva que la anterior y nos dará, definitivamente, cada vez menos palabras... Nos da 371 palabras. Elegí PICADO y la puse como la tercera palabra: PELOTA PANZON PICADO

Sigamos. Una nueva búsqueda y tenemos...170 palabras que puedo poner... Elegí PLACAS... PELOTA PANZON PICADO PLACAS

Una búsqueda más y obtenemos ahora sólo 36 palabras... Elegimos PORQUE y la pongo en el juego. PELOTA PANZON PICADO PLACAS PORQUE Hacemos una búsqueda más y sólo hallamos 9 palabras... Elijo PRIMER y la coloco en el juego PELOTA PANZON PICADO PLACAS PORQUE PRIMER Hagamos una búsqueda más... ¡Genial! el programa encontró dos... Pongo PUERIL... PELOTA PANZON PICADO PLACAS PORQUE PRIMER PUERIL Una búsqueda más no da más palabras... Pero el sistema nos dio siete palabras y no tuvimos ni que pensar...

Page 139: programacion_ludica

Proyectos varios Mensajes subliminales Ya en los escritos de Demócrito (400 a.C.) se podía leer: “mucho de lo perceptible no es percibido por nosotros”. Platón habló de esta noción en su escrito Timeo. Aristóteles explicó de modo más detallado los umbrales de la conciencia subliminal en su Perva )aturalia hace casi dos mil años, y parece se el primero en sugerir que los estímulos no percibidos de modo consciente bien podrían afectar los sueños. Hace 2.250 años Aristóteles explicó en su teoría del Sueño: “Si los impulsos que tienen lugar durante el día no son demasiado fuertes y poderosos pasan inadvertidos debido a impulsos altamente despiertos. Pero mientras dormimos tiene lugar lo contrario, entonces los pequeños impulsos parecen grandes. Esto aclara lo que pasa en el sueño. Cuando sólo hay ecos débiles en sus oídos los hombres creen que se trata de algo relampagueante y extraordinario”. Así pues, se denomina percepción subliminal a la captación de un estímulo que, por diversas circunstancias, como baja intensidad, falta de atención o breve duración del mismo, no alcanza la representación consciente y, sin embargo, determina la conducta de la persona al margen de su voluntad consciente. En 1957, James Vicary, investigador del mercado norteamericano, demostró el taquistoscopio, máquina que sirve para proyectar en una pantalla mensajes invisibles que pueden ser captados por el subconsciente. Durante la proyección de una película aparecía un fotograma (En el cine se muestran 24 por segundo) con el siguiente mensaje: “Tienes hambre, come palomitas. Tienes sed, bebe coca-cola”. El resultado fue asombroso: La venta de palomitas se disparó un 57.5%, mientras que la de la bebida tan sólo un 18%. En 1958, después de publicarse el libro de Vance Packard “The Hidden Persuaders”, los investigadores de la motivación Ernest Dichter y Louis Cheskin fueron amonestados públicamente debido a sus contribuciones científicas que habían sostenido los intentos de los publicistas por manipular a las personas. Hay muchos ejemplos de mensajes subliminales en el cine y la televisión: Uno de ellos es “El Exorcista”. El director Friedkin ha empleado técnicas subliminales visuales y auditivas para reforzar los efectos emocionales. Por ejemplo, entre los efectos de la banda sonora se incluye el zumbido de un enjambre de abejas enfurecidas, así como gruñidos de cerdos al ser degollados, rugidos de león y maullidos de gatos. Entre los sub-estímulos visuales, cabe destacar una máscara de la muerte, proyectada en numerosas ocasiones durante el filme, que ocupaba toda la pantalla. Incluso en películas de Walt Disney podemos encontrar imágenes subliminales. De hecho, la American Life League, de Virginia (EE.UU.) ha denunciado a la Disney por el empleo de sexo subliminal. Un ejemplo de estimulación subliminal lo podemos encontrar en El rey león. La escena transcurre en plena noche, Simba, ya mayor, se encuentra en lo alto de una montaña con el firmamento repleto de estrellas al fondo. Éstas se van moviendo hasta que finalmente construyen la palabra “sex”. La intención de esta manipulación sigue siendo una incógnita. Independientemente de que sea cierto que es posible influir en el comportamiento y hábitos de las personas a través de mensajes subliminales, es evidente que se hace uso de estas técnicas desde hace muchos años. No se necesita ser un genio para darse cuenta que, por ejemplo, en la televisión, los actores y actrices influyen en la moda cotidiana. Si ciertas estrellas de la farándula usan algunos accesorios, o fuman, o se visten de una peculiar manera, sin duda alguna su influencia alcanzará a un nicho (pequeño o grande) de la población expuesta a estos estímulos. ¿Es posible usar la computadora para generar mensajes subliminales? Sin lugar a dudas. Algunos piensan que mediante la computadora personal es posible ayudar –mediante mensajes subliminales– a dejar de fumar, por ejemplo, enviando letreros alusivos al respecto a la pantalla por muy poco tiempo, tan poco como para que el consciente no pueda advertirlo. De esta manera se han diseñado multitud de programas que precisamente hacen esto: enviar mensajes muy específicos a la pantalla, por tan poco tiempo que los usuarios simplemente no lo notan, pero que de ser cierta la teoría subliminal, podrían estar influyendo en el comportamiento y hábitos de las personas.

Page 140: programacion_ludica

Imagen 1 Pantalla principal del software subliminal

Así entonces, se ha decidido investigar si es posible que los mensajes subliminales afecten realmente a los usuarios en sus comportamientos, modos de ser, hábitos de compra, etc. El sistema permite mandar mensajes (definidos por el usuario del software) por un tiempo muy pequeño y sin importar en la aplicación que se encuentre activa. Para evitar el mal uso de este programa, quizás enviando mensajes no constructivos o poco benéficos, se decidió que el sistema no pudiese esconderse o minimizarse sin que el usuario lo note. Quien use este programa debe estar consciente de que se le están aplicando técnicas subliminales y debe estar de acuerdo. De no estarlo, simplemente puede cerrar la aplicación, deshabilitando los mensajes programados.

Page 141: programacion_ludica

Proyectos varios Programando la Palm Los asistentes personales (PDA, por sus siglas en inglés) son verdaderas computadoras, con un poder de cómputo francamente espectacular, considerando su pequeño tamaño. Caben en la palma de la mano y tienen una capacidad de memoria y poder de procesamiento mucho mayor que las computadoras a bordo del módulo lunar de la nave espacial Apolo. Por ejemplo, una maquinita Palm Zire 71, cuyo costo no es de más de mil pesos, tiene dos megas de RAM y corre a más de 200 Mhz. Es decir, supera en velocidad doscientas veces a una Apple IIe y tiene veintitantas veces más memoria que la computadora personal mencionada. Y, que conste, estoy hablando del modelo barato de Palm. Otros modelos tienen más de 32 megas de memoria RAM y corren a 400 Mhz, amén de una pantallita de vivos colores y una colección de programas fantásticos para todo tipo de actividades. Si usted quiere hacerse de una de estas maquinitas, la recomendación es irse con el fabricante líder del mercado. En este caso olvídese de los asistentes personales que no sean compatibles con Palm o con Windows CE. La realidad es que estas dos plataformas contienen muchísimos programas, cientos de ellos en la modalidad compartible (shareware) y los hay también de dominio público o freeware. Cualquier otra plataforma no compatible limitará mucho su radio de acción por, precisamente, la falta de software. Pues bien, después de experimentar un año completo con la Zire 71, me hice de una Palm Tungsten E, la cual contiene 32 megas, tarjeta de expansión de memoria, pantalla de color, pilas recargables, además del clásico software de respaldo y sincronización con la PC. El paquete venía con un disco de regalo, el cual traía seis juegos, entre los que destacan un juego de tenis en tres dimensiones, un futbol sóccer de las mismas características y un fascinante juego de carreras de coches que sorprende por su realismo.

Imagen 1 El emulador de la Palm, indispensable cuando se programa este dispositivo

Todo esto en una computadorcita que cabe en la palma de la mano. La verdad sea dicha, compré semejante artilugio porque vi un programa de ajedrez llamado PocketChess Deluxe, el cual, además de jugar contra el contrario humano, tiene integrada una base de datos de partidas de ajedrez en formato PGN (portable game notation). Éste es el estándar que describe la notación de una partida de ajedrez. Además, PocketChess Deluxe contiene el PocketChess Companion for Windows, el cual permite integrar nuevas bases de datos de partidas a la Palm, de acuerdo a las preferencias del usuario. Así, como obsesivo y apasionado del ajedrez, encontré que este programita, que cuesta 20 dólares, me permite llevar a los torneos mis bases de datos de aperturas más usadas sin necesidad de tener que cargar con computadora personal, más cara y costosa que

Page 142: programacion_ludica

estos PDA. Pero lo mejor aún estaba por venir. Me sumergí en la red buscando herramientas para programar la Palm, porque finalmente debe haber manera de crear aplicaciones para este juguete, ya que, de hecho, hay miles en el mercado. Hallé algunos sistemas comerciales y otros shareware y freeware. Encontré que PocketStudio es la mejor opción si sus antecedentes como programador (como son en mi caso) es Delphi. PocketStudio es Delphi para Palm. Lo malo es que cuesta alrededor de 150 dólares, aunque hay una versión de prueba por 30 días. Igualmente, encontré PDAToolbox, el cual permite crear aplicaciones de bases de datos en pocos minutos. Es como una versión superrecortada de un sistema de desarrollo más completo pero hace muy bien la tarea. El sistema shareware tiene un par de limitaciones poco importantes. Antes de decidir comprarlo bien puede echarle un vistazo. Pues bien, usando PDAToolbox diseñé una demostración de una base de datos telefónica. Me llevó un par de horas entender la mecánica de desarrollo y hoy, en 20 minutos escasos, generé toda mi aplicación. El código fuente en este caso requiere de PDAToolbox, el ambiente de desarrollo, el cual puede ser bajado de www.pdatoolbox.com.

Page 143: programacion_ludica

Proyectos varios ¿Es usted honrado? (parte I) (A diferencia de los otros artículos de este libro, aquí se narra tal y como se publicó en un medio de circulación nacional) El mundo de la tecnología casi siempre va de la mano con el de la mercadotecnia. Alguien inventa un dispositivo X, que resuelve una dificultad Y, y en menos de lo que imaginamos, ya hay un tercero que está viendo la manera de comercializarlo. Esto se da incluso cuando hablamos de software, que curiosamente, es algo intangible. Uno compra un programa que nos permite realizar alguna tarea en la computadora. Nos dan un medio físico en el cual el programa está almacenado. Lo instalamos y el código al final de cuentas son ceros y unos en la memoria de la computadora. Pero incluso esto también se vende. Pues bien, con el avance de la electrónica y las telecomunicaciones, ya no es de extrañarse ver casi a cualquiera con un teléfono celular o un biper (supongo que se llama así porque hace “bip”). En un inicio, hacerse, por ejemplo, de un teléfono móvil, significaba tener un contrato por un tiempo determinado, firmar de aceptado, etc., es decir, el clásico protocolo que aceptan dos partes en cualquier negocio. Eso, en lo que respecta a la telefonía celular, se ha acabado. Ahora hay el “plan amigo” (y todos esos nombres agradables y bonitos para cobrarnos), en donde los usuarios de algún servicio de telefonía móvil compra tarjetas con tiempo-aire, de manera tal, que uno solamente tiene acceso a usar el teléfono por el tiempo contratado. Cuando éste se agota, hay que ir a la tienda más cercana y comprar una nueva tarjeta, la cual nos dará más tiempo telefónico.

Imagen 1 El programa generador de )IP para telcel

Las tarjetas telefónicas no son más que un pedazo de papel –tamaño tarjeta de crédito– que tiene un código que se alimenta al teléfono y entonces nos da tiempo aire. Si el código alimentado no es correcto, pues simplemente no hay manera de usar el teléfono. Para evitar que cualquiera copie el código de la tarjeta de tiempo-aire, éste viene cubierto por una tinta que protege todo el largo número. El comprador entonces usa una moneda para raspar y retirar la tinta y descubrir el código impreso. La idea es genial, sin duda. De esta manera, todo el control del tiempo-aire de cada teléfono celular se lleva a través de un software que valida, en la central telefónica, cada código de cada tarjeta y entonces el negocio es redondo.

Page 144: programacion_ludica

Sin embargo, una cadena es tan fuerte como su eslabón más débil, y el software en este caso es probablemente, la parte más susceptible de ser atacada por los bandidos cibernéticos. Imaginen entonces que alguien encuentra la manera en como se generan los códigos que otorgan tiempo aire y crea un programita que le da al usuario del mismo, el código legal –sin pagar desde luego por éste. Más de uno dirá que esto es ilegal, pero ¿no es ilegal copiar música de discos compactos y pasarla a los reproductores de mp3 como el iPod? ¿O no es ilegal copiar películas en DVD? todo el mundo lo hace, ¿o no? O vayamos más lejos: ¿No es el costo del teléfono celular carísimo en nuestro país? Nomás compare lo que paga cualquiera en Estados Unidos por ese mismo servicio, quien se horrorizará de saber lo que pagamos aquí. Pero bueno, si le pregunto a usted, lector, lectora, si es honrado, ¿qué me contestaría? Invariablemente que sí, ¿o me equivoco? Pues bien, me encontré hurgando en la red Internet un programa que da tiempo aire gratis, sí, ¡gratis! ¿Lo quiere? ¿le gustaría tener tiempo aire sin pagar por él? Mándeme un correo si quiere el programa y le daré instrucciones de cómo hacerse de él, sin pagar un solo centavo. Finalmente, como alguien me dijo cuado vio el programa: “bueno, es un crimen sin víctimas, ¿verdad?”

Page 145: programacion_ludica

Proyectos varios Es usted honrado? (parte II) Hace unos días (ver artículo anterior), escribí sobre un programa de computadora que generaba las secuencias necesarias para obtener códigos, que al ser alimentados en el celular, daban tiempo aire gratis. El software funcionaba tanto para teléfonos móviles de la compañía Telcel y Pegaso. Hubo gente que me lo pidió de inmediato. Al momento de escribir esto he recibido alrededor de 30 mensajes de gente que no pudo aguantarse a tan jugosa oferta de hacerse de tiempo para hablar desde su celular sin pagar por ello. Hoy día, todos aquellos que me pidieron (y que recibieron) el software en cuestión, habrán caído en la cuenta de que dichos programas son un fraude, porque efectivamente, no pueden generar esos códigos que las compañías celulares usan para activar más tiempo a los usuarios de los teléfonos móviles. Lo único que hace el programa es un bonito espectáculo con visos científicos (por los letreros que manda cuando éste se ejecuta), en donde aparentemente está generando la clave correspondiente para abonar, en breves segundos, 200 pesos de tiempo aire a la cuenta de dicho celular. La intención original era mostrar finalmente, que los seres humanos somos capaces de querer obtener beneficios, sin pagarlos, desde luego, si se nos da la oportunidad. Cuantimás, si podemos hacer que todo esto sea anónimo. Dicho en otras palabras: más de uno habrá pensado alguna vez en si hay forma de hacerse de dinero, quizás de mucho dinero, sin comprometerse. Los Bejaranos e Imaz que rondaron hace un par de años por el gobierno capitalino así lo creyeron pero se les pasó por alto que los estaban videograbando. Ahumada, personaje que me sorprendió por sus múltiples negocios en todos los ámbitos existentes en este país, y que además, ahora parece ser que lo conocen todos los políticos de México, los hizo caer en este espectacular gambito, con las consecuencias conocidas en los video-escándalos.

Imagen 1 Un clásico teléfono celular

Cuando comentaba con una alumna de la Ibero sobre este programa de claves telefónicas para tiempo aire me dijo: “yo lo quiero, pásamelo, ¿si?” Pero cuando le dije que eso era hacer trampa, que era literalmente robar, me contestó: “es que es muy caro tener teléfono celular, aunque es una necesidad”. Le dije que no era una necesidad, tan es así es que yo no uso teléfono móvil. Por supuesto que entendía perfectamente su argumentación, pero yo solamente me estaba poniendo pesado para hacerle ver lo mal que actuaba insistiendo en que le pasara semejante software. Al final le aclaré el truco para que no se fuese con la idea de que no quería ayudarla en su economía.

Page 146: programacion_ludica

Hubo gente que me escribió diciéndome que no tenía ningún remordimiento en usar este programa, pues Slim es el tercer hombre más rico del mundo y unos pesos más o menos no le afectarán (argumento falso. Si un millón de usuarios usa una sola vez este supuesto programa de tiempo-aire gratis, Telmex perdería 200 millones de pesos en un momento), así que no son “unos pesos más o menos”. Otro más, con argumentaciones similares, no bajo de “cerdo” a Slim. No se a cuenta de qué esa necesidad de insultarlo, pero en fin, tendrá sus razones. Sin embargo, entre los que me pidieron el software, hubo un par que me preguntaron si era truco o verdad. Les confesé por correo privado mi estudio “estadístico”, mi sondeo sobre el tema y mi intención de mostrar que todos (me incluyo), podríamos ser capaz de estas actitudes totalmente fuera de la ley (calificadas al menos como robo, en este caso a la compañía celular). Evidentemente no es mi idea moralizar ni decirle a nadie si hace bien o mal. Cada quien sabrá cómo actúa y se responsabilizará de sus actos. Cabe destacar que como el software no funciona, pues no hay crimen que perseguir y eso nos libera de una carga innecesaria a todos. Pero lo mejor del asunto fue el mensaje que me envió el Sr. Miguel A. Soto Rivera, de Villahermosa Tabasco. Lo transcribo tal y como me lo mandó: “He leído su artículo y quiero decirle que tiene razón al hablar que estamos tan acostumbrados a la corrupción, que no nos asombra ya casi nada; es algo que esta enquistado ya en nuestra esencia nacional, siempre lo hemos sabido. Pero la diferencia es que ahora salen a la luz los videos que prueban lo que ya sabíamos, y, ¿quién sabe?, a lo mejor mañana salen videos tricolores o blanquiazules. [...] Pero el punto al que quiero llegar, es que yo soy usuario de teléfono celular y creo que es perfectamente posible crear un software para robar tiempo aire a las compañías telefónicas, pero no me interesa. Tal vez sea también un ser corrupto. Algunas veces le he entrado a la mordida por algún motociclista salvaje con mirada de perro, no lo negaré, pero sí creo que podemos empezar a dar la batalla a la corrupción desde uno mismo, dándole yo mismo el ejemplo a mis hijos que apenas son unos niños, negándome a pagar mordidas y si cometo alguna falta y es justo, entonces pagar multas exigiendo mi recibo de la tesorería. Le agradezco su oferta del programa para robar tiempo aire, pero declino en nombre mío y de mis hijos. Quedo a sus apreciables órdenes”. Ojalá todos actuáramos como el Sr. Soto, al cual felicito por esa contundente negativa a ser cómplice de un fraude, de un acto más de corrupción finalmente. Debo agradecer enormemente a Enricco Wizard (quien ha fallecido hace un par de años), creador del software mencionado. Postscriptum

Cierto tiempo después de haber publicado el artículo sobre tiempo aire gratis, recibí un correo que decía esto: Hola morsa: Nuevamente me pongo en contacto contigo, no pude nisiquiera ingresar a la liga que anotaste, sin embargo creo que es mejor así, porque no es correcto llevar a cabo lo que haces, no por algo no das la cara, de cualquier forma espero que como usuario de Telcel y empledo del mismo, porque yo trabajo en la programación de los mismos y estoy en busqueda de jakers que intentan encontrar la forma de hacer fraude, te recomiendo que retires tu publicidad si no quieres tener legales con el dueño de mi empresa (Ing. Slim), ya que para esto me pagan. Quedo a tus ordenes para cualquier duda. Te estoy rastreando. Atentamente Ing. Sergio Luna

Page 147: programacion_ludica

Este señor, el ingeniero Sergio Luna, sólo leyó la primera parte del artículo o quizás nunca entendió las explicaciones del mismo. Esta fue mi contestación: Hola, Sergio, a ver, no entiendo el problema. El programa que menciono es meramente una broma. No puede generar ningún código ni de telcel, ni de pegaso, ni de ninguna otra compañía. Te sugiero que leas lo que escribí después de que hablé del supuesto programa que daba tiempo-aire gratis. Entra a la liga en mi blog: http://la-morsa.blogspot.com/2007/03/tiempo-aire-gratis-para-celulares-las.html para que veas que todo fue un estudio, un sondeo para saber qué tan honrada es la gente. Ahora bien, es extraña tu percepción porque siempre he dado la cara. Mi blog tiene mi foto, está mi correo y con gusto te doy mi teléfono, xxxxxxx, por si quieres hablarme y discutimos lo que quieras. Si tu trabajo es buscar hackers (con h, no j), pues lo celebro, pero yo no tengo nada que hacer en ese rubro. Soy desde hace muchos años un profesional del cómputo (físico por la UNAM y maestría en inteligencia artificial, por la Universidad de Essex), y no tengo ni ganas ni tiempo para buscar hacer trampas o hallar maneras de defraudar a nadie. Así que tu percepción sobre mi persona está fuera de lugar. Pero para que veas lo absurdo de todo el asunto, supongamos -en beneficio de la discusión- que tuviese un programa que me diera tiempo aire gratis. ¿de verdad crees que lo andaría repartiendo gratuitamente y de forma pública? Como sea, me parece lamentable tu amenaza o pseudo amenaza de que me estás rastreando. De una vez te aviso que no quitaré nada de mi blog, porque no hago nada ilegal, porque tus amenazas legales están, de nuevo, fuera de lugar. Quiero saber como de qué me piensas acusar. En fin, dudo que el ingeniero Slim sea tan tonto como para perder dinero y tiempo demandándome -no sé exactamente cómo- por un mero estudio estadístico sobre la honradez de los que me leen. Te reitero que estoy en la mejor disposición de aclarar tu percepción sobre este asunto, que estoy convencido has sacado de proporción. saludos Manuel López Michelone Finalmente me comuniqué con el ingeniero en cuestión y resolvimos la dificultad cuando terminó por entender que no tenía un programa como el creía.

Page 148: programacion_ludica

Proyectos varios Bosquejo de un curso de ruso Cuando era estudiante de la Facultad de Ciencias, en algún momento decidí ir al Centro de Enseñanza de Lenguas Extranjeras (CELE), en la UNAM, para aprender ruso. Mi plan tenía como objetivo poder leer quizás la literatura rusa de ajedrez. No obstante esto, encontré que el lenguaje ruso por sí mismo es fascinante. Estuve seis semestres con el mismo grupo y la misma maestra, la cual sin duda le ponía pasión y empeño a su trabajo. La maestra Svetlana Dougar-Jabon es sin duda un pilar en el departamento del ruso en el CELE y me alegró saber que aún está trabajando ahí. La cuestión es que muchos años después de estos estudios, decidí que tenía que re-empezar, puesto que sin práctica estas cosas suelen olvidarse. Así, en algún momento se me ocurrió tomar mi manual de ruso y estudiar por mi cuenta. Sin embargo, después se me ocurrió que mejor sería regresar al CELE para hacer este estudio de manera formal.

Imagen 1 Pantalla inicial del software

Me apena un poco regresar y decirle a la maestra Svetlana que necesito prácticamente empezar de cero. Así que decidí ir al CELE a buscarla con un pretexto: un bosquejo de curso, hecho en la computadora, para el aprendizaje del idioma ruso. Me basé en lo que el manual que tengo dice, obviamente quitando algunas partes que en mi opinión, ya salen sobrando, y salió este programita. Es apenas la lección primera y desde luego, no está completa. De hecho, he notado que necesito un sistema para poner las partes de gramática, por ejemplo, de manera que sea fácil de alimentar, porque como bien sabemos, el ruso usa el alfabeto cirílico, y eso, al tener que escribir las notas en español y ruso, se complica enormemente, o mejor dicho, quita mucho tiempo de la programación. Para la cuestión de pronunciación le pedía a Marianna *echytalo, exalumna mía en Sistemas Computacionales, de Ucrania (que a todo esto habla perfectamente español y ruso), que me ayudara con las frases que quiero alimentar al sistema. Para el inicio del software puse la imagen que pueden ver en este artículo y le agregué una introducción musical muy rusa (¿y qué mejor que el tema del inicio del juego del tetris?).

Page 149: programacion_ludica

Imagen 2 Parte de la primera lección

Tengo otras ideas para incorporar: no sólo poner el audio de cómo se pronuncia, sino también vídeos de Marianna, mostrando cómo se pronuncian las palabras, así como la entonación. La verdad es que es un trabajo monumental, porque el manual de ruso tiene muchas lecciones, y eso hace complicado el pasarlas todas a un programa. No obstante, el esfuerzo puede valer la pena, porque incluso uno aprende mucha más gramática cuando tiene que armar cada lección. En fin, esto es apenas un bosquejo, pero podría progresar en un curso completo (porque no califica como un programa de enseñanza de ruso aún por sí mismo.

Page 150: programacion_ludica

Proyectos varios Portafolio para modelos Todos los nichos de mercado parece que pueden ser atacados desde el mundo del software. Por ejemplo, tengo una amiga, Isabelle, que es actriz. Ha hecho algunos comerciales y alguna película por ahí. Sé que no se ha aplicado lo suficiente para desarrollarse en ese campo porque tiene otras actividades y además, ahora ya es madre de un niño. Sin embargo, en algunas ocasiones la llaman para que vaya a hacer el casting para un comercial, por ejemplo. Ahí es donde se eligen a los actores y actrices que participarán en el comercial de marras y muchas veces los productores tienen que hacerle pruebas a muchos de los aspirantes para que después, comparando notas, decidan a quién le dan el trabajo. Prácticamente todos los artistas llevan a estos procesos de casting sus fotos o videos, para que los productores puedan registrarlos adecuadamente y ya con las imágenes puedan acordarse mejor de quienes aspiran a conseguir el trabajo en un anuncio publicitario, película, corto, o lo que sea. A partir de esto se me ocurrió que por qué no llevar el portafolio a los productores en disco compacto, de manera que solamente el productor tendría que poner el cedé en su computadora y de inmediato un sistema automatizado le desplegaría toda la información del actor o actriz, incluyendo fotos, teléfonos, curriculum vitae, etc. Le platiqué esto a Isabelle y ella entonces me dio un disco con una sesión de fotos que le hicieron hace algún tiempo. Son más de una centena de fotografías en buena resolución y entonces me puse en campaña. Obviamente existen algunas soluciones simples, por ejemplo, poner en powerpoint cada imagen con algún efecto de transición de una imagen a la que sigue. Sin embargo esto implica que el usuario, es decir, quien va a ver este portafolio de fotografías tenga instalado el powerpoint. Por ello mismo, pensé que la solución era crear un archivo ejecutable que hiciese todo. Se podrían leer las fotografías del disco y el sistema daría la opción de hacerlo automático o manual. También decidí incluir música de fondo ad hoc para que la presentación del portafolios fuese más atractiva a los sentidos.

Imagen 1 El portafolios de Isabelle

Page 151: programacion_ludica

Un problema a resolver era el de las transiciones entre imagen e imagen. Para ello decidí que no tenía sentido romperme la cabeza programando las transiciones visuales, sino que podría ver si en Internet ya alguien había programado algo por el estilo. Y no me equivoqué: encontré un componente para Delphi que me hace las transiciones de una fotografía a la siguiente. El componente es muy versátil pues tiene muchos efectos que pueden usarse de manera muy simple. Con todos estos elementos a la mano en un par de horas tuve una versión funcional. Limpié los detalles que no me gustaban. Copié todo a un disco compacto (del tamaño de una tarjeta de crédito para que así sea además, más fácil de llevar) y le di la primera versión a Isabelle de su portafolio de modelo. La virtud de mi enfoque es que cambiando las fotografías y un par de archivos de control, es posible modificar el comportamiento del programa para hacer otros portafolios, para actores y actrices que andan buscando trabajo.

Page 152: programacion_ludica

Proyectos varios Sintetizando la voz La tecnología casera ofrece muchas posibilidades, algunas inimaginables para la mayoría de los usuarios. Esto ocurre porque i. la ciencia y los avances tecnológicos son cada vez más rápidos y ii. el poder actual de los equipos de cómputo caseros sobrepasa muchas veces las alternativas que se tenían hace apenas un par de años. Así, si observamos cualquier computadora casera, hallaremos probablemente la multimedia, la cual se representa a partir de tarjeta de sonido de alta resolución (mínimo 16 bits en estéreo en canales A/D), lector de DVD, de 24 velocidades, tarjeta de vídeo con 24 millones de colores, etc. Esto representa muchísima más tecnología que lo que se podía conseguir a nivel laboratorio de cualquier prestigiada universidad hace no más de diez años. Los avances son increíbles, sin lugar a dudas. Las computadoras actuales para la casa contienen muchas una tarjeta de sonido SoundBlaster o compatible, es decir, uno de los pretendidos estándar en esta industria. Sin embargo, en los últimos años las computadoras ya incluyen todos los dispositivos más populares dentro de la misma tarjeta madre (motherboard). Así, prácticamente cualquier computadora actual contiene una tarjeta de vídeo y otra de audio compatible con el estándar más reconocido en su momento. Hacer un programa que -por ejemplo- lea un texto en viva voz podría depender de si la tarjeta tiene algún subsistema o interfaz para hacer síntesis de voz. Afortunadamente actualmente la mayoría de las tarjetas de audio tienen esa posibilidad. A partir de esto se me ocurrió qué tan difícil sería hacer un programa que leyera un texto con voz. Puse pues manos a la obra. Lo primero que pensé es que quizás cada fabricante tenía su propio “driver” (manejador) para hacer síntesis de voz. Si así fuese, evidentemente eso limitaría las posibilidades de cualquier software. La idea es tener compatibilidad con todas las posibles tarjetas de audio, en la medida de lo posible. Encontré la solución: usar una biblioteca que sea compatible con Windows y que además, nos permita acceso a la tarjeta de audio particular que el usuario tenga disponible. Por ello, se tomó la decisión de usar SAPI 5.3, el cual es Speech

Application Program Interface, el cual contiene toda la información relevante y necesaria para hacer que la computadora hable. Dicho de otra manera, gracias a esta biblioteca (que Microsoft incluye en su Windows), podemos hacer que la computadora “lea” (por decirlo de alguna manera), a través de ésta, un texto en español. Desafortunadamente, el SAPI 5.3 que Microsoft pone a disposición de los desarrolladores, el cual es el manejador del sintetizador de voz, está pensado para el idioma inglés y no para el castellano. Si nosotros usamos este paquete para pedirle al sistema que lea un texto en formato ASCII, encontraremos que lo dice como si fuese un gringo leyendo algo en español. Con todo respeto, francamente patético. En cierto sentido el SAPI 5.3 se convierte en una puntada, en una curiosidad que no usamos mucho. No obstante, debido a la manera en que está construido este sintetizador, es posible modificarlo (vía software), para que hable en español. Microsoft y otras empresas venden sintetizadores con fonemas para otros lenguajes, incluyendo el español mexicano. Desafortunadamente, hay que adquirlos por separado, es decir, no vienen gratuitamente como el SAPI 5.3 en inglés. Habiendo decidido esto, comencé a trabajar sobre un programa que permitiera leer un texto en español usando el sintetizador de voz de la tarjeta de sonido, modificándolo de manera que use los fonemas ingleses en su modo más españolizado posible, o bien, usando simplemente el sintetizador que SAPI 5.3 otorga. Esto es un sistema de demostración que pretende mostrar cómo se hace la interfaz del usuario, cómo se liga el programa con el sintetizador de voz y gracias a que se entrega con todo el código fuente, el usuario interesado puede revisarlo y modificarlo a su antojo. Para que este software funcione, lo que se hizo fue hacer que los fonemas del inglés se comportaran —en la medida de lo posible— como si estuviesen en castellano. Esta tarea fue realizada por Michael Covington y la explica en su artículo: El Hablador, que apareció en PC Techniques, de feb/mar 1995.

Page 153: programacion_ludica

Es importante destacar que la discusión que sigue a continuación no necesita ser seguida por nadie que quiera usar el programa. Es de utilidad como una referencia elemental sobre el sintetizador y el cómo se han manipulado los fonemas. Que sirva como introducción al tema apasionante de la síntesis de voz. La pronunciación de las palabras en español es muy fácil de deducir a partir de la manera en que se escriben y eso hace la tarea mucho más sencilla. El proceso a seguir contempla los siguientes pasos:

• Separar las palabras de la oración. • Analizar cada palabra y acentuarla adecuadamente (ver la función acentua). • Fonetizar la palabra (traducir a fonemas) (ver función fonemizas). • Pasar a sonidos que dirá el manejador del sintetizador (ver función fonetics).

Dada la oración a decir, primero hay que separar las palabras de la oración. Esto se hace a partir de la función ExtractWords de la unit StrngTTT. Teniendo cada palabra, el siguiente paso es acentuar adecuadamente cada palabra. Esta acentuación es artificial, porque las palabras graves no se deben acentuar si terminan en n, s o vocal. Sin embargo, para que el programa hable lo más correctamente español, hay que acentuar ortográficamente las palabras correspondientes. Por ejemplo, considérese la palabra ‘pelota’. No necesita originalmente acento ortográfico. Así entonces, la palabra pasa a la siguiente etapa del procesamiento como ‘pelóta’. Una vez realizado este paso, el siguiente es el de pasar a fonemas las palabras. Esto quiere decir, transformar la palabra a los fonemas que la representan. Mucho ojo, esto no son los sonidos que el sintetizador debe decir, sino que son los símbolos que representan estos sonidos. Por ejemplo, la palabra ‘astillero’ Al acentuarla para procesarla adecuadamente, es decir, para que el Monologue la diga de manera correcta, pasa a ser: ‘astilléro’. Una vez hecho esto, la función fonemiza la convierte en los fonemas correspondientes. Esto quedaría así: ‘astiyéro’. Habiendo hecho uso de esta función, resta entonces traducir a los sonidos que el SAPI tendrá que decir. Estos tienen una representación, la cual le dice a SAPI 5.1 qué decir, así como los silencios o aspiraciones que debe tomar. En este sentido, la palabra ‘astillero’ se termina por convertir en AasstIYyEHEHDXOW que es precisamente lo que dice el SAPI. La función que hace esto es fonetics. La siguiente Tabla I (resumida) es la de los fonemas en español:

Símbolo Ejemplo Símbolo Ejemplo

P

peso

y

yo, buey, llamar T tabla w lingüista, aureola K kilómetro, cosa, quince C chico B burro, vaca m mal D desde n tener G gato, guerra N niño F favor l lado S ser, cinco, zorro r pero J junta R perro

Tabla 1

Los fonemas en español Para una descripción más completa de la transformación de los fonemas ingleses al español, es necesario consultar la revista mencionada anteriormente, particularmente en el artículo escrito por Covington.

Page 154: programacion_ludica

¿Cómo se usa el software?

Nos Hablamos (así se llama el programa), requiere de una serie de archivos de Windows, los cuales vienen en SAPI 5.3. Debido a que éste programa es meramente experimental, Nos Hablamos asume que existe instalado el SAPI 5.3 para poder hacer uso del sintetizador de voz. Cabe señalar que SAPI hace más que síntesis de voz. También puede reconocer palabras, permitir que el usuario dicte por voz a un procesador de palabras, por ejemplo, o que dé instrucciones habladas. Es un sistema que al menos ocupa 150 megas al bajarlo del sitio de Microsoft. Sin embargo, también es posible solamente instalar los manejadores mínimos para que el sistema funcione. Para ello, ejecute spchapi.exe, el cual viene incluido en este sistema para que Windows pueda usar la parte de audio y voz (sin necesidad de instalar todo el SDK). Hay que decir que en Windows Vista el sistema no funciona. No sé las razones pero ya estoy investigando al respecto. ¿Cómo se Ejecuta 0os Hablamos?

Una vez habiéndose asegurado que SAPI 5.1 está instalado, simplemente córrase Nos Hablamos. Si todo sale bien, aparecerá la siguiente imagen (ventana):

Imagen 1 El software ejecutándose

El sistema permite leer un texto completo. Cargue cualquier archivo (modo txt o rtf) y escuche cómo el sistema lee completo el texto. El sistema tiene parámetros que pueden ser cambiados, como son si la voz que habla es de hombre o mujer, así como la velocidad y el volumen de audio de la misma.

Page 155: programacion_ludica

¿Por qué )os Hablamos? La historia tiene algunos años. En cierto momento, en la vida del autor de este software, esta frase significaba mucho pues cierta mujer divina me lo decía al despedirnos. “)os hablamos”... me decía... y permitía seguir la liga de la relación más adelante. Puede para muchos ser el equivalente al “hasta luego”, en lugar del “adiós” pero en mi caso iba más allá. Este software va dedicado precisamente a ella.

Page 156: programacion_ludica

Proyectos varios ¿Son sus empleados productivos? Si meditamos un poco, veremos que la computadora se ha adueñado de muchísimos espacios cotidianos. Se les encuentra en las casas particulares, en el cuarto de los hijos, en las oficinas, tanto privadas como gubernamentales. En muchos sentidos la pantalla (el monitor) y el CPU (la computadora), ya son tan comunes como el teléfono. Se les ve en todas partes. Igualmente, si nos adentramos más en este fenómeno, veremos que la mayoría de los equipos de cómputo casero hacen las labores clásicas de editar textos, consultar bases de datos, hacer cálculos por demás complejos usando una hoja electrónica (como Excel) o bien, realizando presentaciones multimedia, a través de los múltiples paquetes que para esto existen. Sin embargo, hay un programa más que cada vez se hace más presente en todos los ámbitos: el mensajero electrónico instantáneo, es decir, el programa que permite comunicarnos con otros usuarios de computadoras a través de Internet y que, sin nos descuidamos, nos puede quitar muchas horas laborables en simpáticas pláticas. Y no es que tenga algo de malo comunicarse con otros usuarios a través de la gran red, sino que el problema es que muchas veces nos quitan tiempo valioso para nuestras labores académicas o de trabajo. Es cierto que hay equipos de personas que tienen que comunicarse entre ellos por diferentes razones laborables y el mensajero es una estupenda solución. La dificultad comienza cuando se exagera el uso de esta herramienta y entonces nuestra jornada de trabajo, aunque sigue siendo de 8 horas, se reduce, gracias a las pláticas por la red, en 6 o menos. Debido a esta problemática, un buen amigo me sugirió escribir un programa para llevar el control de este fenómeno. Sonaba realmente como reto interesante y puse manos a la obra. Hallé que Windows tiene una gran biblioteca de funciones (llamada API por aquello de Application Programming Interface), la cual permite tener acceso a un buen número de funciones que normalmente los programadores de aplicaciones comunes y corrientes no necesitan. Encontré entonces que gracias al API, y usando Delphi como herramienta de programación, se puede escribir una rutina que revise qué aplicaciones están siendo ejecutadas y además, cuál es la aplicación activa. De esta manera, el primer paso estaba realizado. Yo ya podía saber cuando alguien entraba a platicar en el mensajero instantáneo de Microsoft (msn Messenger). Acto seguido, le incorporé unos cronómetros internos para medir el tiempo que el sistema pasa en cada aplicación activa. En los sistemas multitareas como Windows, se pueden tener varias aplicaciones (programas) abiertos, aunque uno solo es el que está activo en la máquina. Así, escribí el código necesario para que cuando un usuario entre a platicar con alguno de sus contactos, entonces el cronómetro empiece a marcar el tiempo. Si el usuario se sale de esa plática y se pone a usar otra aplicación como Excel, Word, Powerpoint o Photoshop, entonces el sistema medirá el tiempo que utiliza cada una de esas aplicaciones. Si regresa a una plática, el software entonces regresa al cronómetro del Messenger y sigue sumando segundos. Al final del día, a una hora determinada, el propio programa puede mandar un correo al administrador de la red, o al jefe, a quien se desee, que indique cuánto tiempo el usuario pasó en cada aplicación.

Page 157: programacion_ludica

Sí, sé que es un programa espantosamente fascista, pero el reto técnico me animó a hacerlo, además de pretender con esto minimizar el tiempo perdido con todas estas pláticas inútiles pero divertidas. Pensemos que actualmente nadie en una oficina podría hablar por horas en su tiempo laboral, para platicar con sus amigos y familiares. Con la red es posible regresar a esta práctica y la verdad es que los empleadores, en algún momento, tendrán razón para amonestar a quienes abusen de la mensajería instantánea por Internet.

Page 158: programacion_ludica

Apéndices Apéndice I Entrevista con Robert Silvers (sin traducción por aquello de ¡Traductor traidor!). A 1996 Interview with Silvers: Q - Was Photomosaics an MIT project or your own project? A - I created Photomosaics as a class project while a student at the MIT Media Lab. When I graduated, I turned the idea into a company, called Runaway Technology, designed to create and license them. Q - What are your computer needs? A - I use computers such as Silicon Graphics workstations with over 30 GB of disk space and 256MB of RAM. Q - I see that the individual pieces of the Photomosaic are related in content to the larger subject. Do you have a “giant-archive” of images or did you make an agreement with a stock agency ? A - I prefer to work with clients that have their own collection of images. When the Library of Congress wanted me to make a poster for them, they told me that most of the images in their National Digital Archive were from the American Civil War. So we looked at those images and decided to make a Photomosaic of Abraham Lincoln. It often works that way -- I see what I have images of and then select an appropriate subject. When I created the cover of the Stock Market Photo Agency’s catalog (American Mosaic), they provided me with images from their collection of Americans and I made the Statue of Liberty. Likewise, when I did an ad for Mastercard made from thousands of credit cards, they sent me over 5,000 pieces of plastic to scan! Q - How does the software choose the images? Is it only about color and density or do you use a trick that allows a tile to be better than a “pixel.” A - Each tile in a Photomosaic is much more than a pixel. Details in a Photomosaic may be smaller than a tile and regions within one tile may add to the overall design. A mountain range in one tile, for example, may end up as an eyebrow on the main subject. It is not simply the color of the tile, or the brightness, but also the shapes of objects within the tiles. Also, I do not blend an image of the subject with the mosaic. The Photomosaic forms the subject on its own. My software considers hundreds of aspects of each photograph during the selection process. The first step is to decide what subject to make, and what types of images to make it from. I then use a photograph of the main overall subject as a reference, and limit my image database to tiles of the desired subject. I need far more tiles to consider during the selection process than end up in the mosaic. This is because I eliminate many that do not have the right qualities. 2,000 is a good start but I prefer much more. Then, for each grid spot on the mosaic, my software compares all of the available photographs with that area of the overall subject image. The software tries to pick the tile that is the most visually similar to that area. Q - Is it all automatic? A - There is also a lot of hand work involved. During development, I look at the mosaic up close and remove tiles where I do not like the content or subject matter. I then view the mosaic from a distance and decide to remove tiles that visually draw attention to themselves. The Photomosaic is not done until it passes several iterations of this. Q - Do you think that this technology could be sold like a “normal” software? A - Yes, but for now I prefer to keep my custom tools for myself. I do not want to market software products because I do not want to create a computer company. I just want to make artwork and I build tools to help do this. Q - What do you think is the correct relationship between the dimension of the “pieces” and the distance of the viewer?

Page 159: programacion_ludica

A - I design a Photomosaic to be viewed from various distances depending on the media in which it will be reproduced. The more tiles in a Photomosaic the easier it is to see the overall subject up close. If I have very few tiles you may have to be very far away to see what the subject is. I also must be careful to allow each tile to be visible. For example, if the Photomosaic were to be used on a postcard I could not use as many tiles as if it were going to be a poster because if I did each would be too small to see. I like to keep them at least 1cm wide. A Photomosaic is an image on multiple scales. When viewed from up close one should only see the individual tiles. When viewed from afar one should only see the main image. Somewhere in between, these views cross over, so I have to estimate the viewing distance to help decide where this cross over point should be. Q - Can you produce the same image with lots of resolutions, or do you produce only one version of the image and later resize it with a program like Photoshop? A - After I compute a Photomosaic (decide the location of tiles), I generate the bitmapped file. Over 100,000 images are stored on my Silicon Graphics workstation at various resolutions that allows me to generate the bitmapped file at different sizes. I try to generate a file the size that I need, or a little larger, then use Photoshop to fine-tune the size. Q - Have Photomosaics won any awards? A - Hewlett Packard won an award using a Photomosaic that I created for them. The mosaic was of an image of Italy. It won Best of Category for digital printing out of 5,200 entries in the 1997 Premier Print Awards given by the Printing Industries of America. Q - Do you have plans for merchandise? A - There are several lines of Photomosaics merchandise coming out, including a collection of jigsaw puzzles from Buffalo Games and a series of 10 posters available from Portal Publications. The Library of Congress is already selling a poster that I made of Abraham Lincoln composed of Civil War photographs from the Library’s National Digital Archive. Neil Schwartzen of the LOC (202/707-5112) says it is the best selling poster the Library’s gift store has ever carried. Q - Does Photomosaics use proprietary technology? A - Yes. Runaway Technology has applied for a trademark on the word “Photomosaics” and the whole process is based on patent-pending technology. Q - What is your association with the magicians Penn & Teller? A - When I was still a student at MIT, Penn and Teller came to visit the Media Lab and as soon as I showed them a sample of output from my newly-developed Photomosaic project, they each had to have one. Penn was the first person to commission me – he wanted me to make an image of a subject too controversial to even mention here - and wrote me a check on the spot (so I would not use school funding to do something as trouble-attracting as making the image he requested). Q - I heard you were commissioned to do a portrait of Bill Gates . How did this happen? A - After I did the cover for Wired, one of Bill Gates’ friends approached me to make a portrait of Bill as a 40th birthday gift. Q - What about Vice President Gore? A - Al Gore came to visit the Media Lab and I showed him my work. He wanted to know in detail how the process worked and we brainstormed for about 15 minutes over various ideas before we decided that I would do one of him. Q - Finally, tell me more about the ad you did for Mastercard. A - For Mastercard I made a Photomosaic of George Washington’s face from 5000 Mastercards. 21 million copies of the ad were printed, and it was shown on TV 425 times.

Page 160: programacion_ludica

Apéndices Apéndice II Programa visualizador de los fotomorsaicos

Otra aplicación de soporte para el software de los fotomorsaicos es un programa desplegador de los mismos, el cual contempla no sólo ver el fotomorsaico creado, sino guardar la imagen creada en un archivo en formato JPEG. La siguiente imagen muestra el software visualizador corriendo sobre un archivo de prueba (cuya terminación es txt y del cual ya se habló de su estructura en la discusión de la obtención de los resultados. Para generar la imagen JPEG el software pide el nombre del archivo de texto creado y entonces lo procesa directamente en pantalla. Cabe señalar que para poder crear el fotomorsaico el archivo TXT a procesar debe estar en el mismo directorio donde residan las imágenes ya que éstas se leen del disco duro en el momento del procesamiento de la información.

Fragmento de la imagen armada con el visualizador Figura 23

Una vez generada la imagen, se puede usar la opción “Guardar a disco”. Se recomienda usar la extensión JPEG en las imágenes creadas para evitar confusiones con las de la biblioteca de imágenes (que son todas JPG). Notas técnicas: Desarrollado en Delphi 5, en una máquina Pentium III, con 128 megas de RAM y 6 gigabytes en disco duro en resolución de 800x600 pixeles a 16 millones de colores.

Page 161: programacion_ludica

Lupa por software También es posible utilizar un lente magnificador (lupa) escrito por software. El programa toma una imagen JPEG y se puede magnificar la región que se desee, de manera tal que puedan analizarse los detalles de cada fotomorsaico realizado. El sistema tiene las opciones como iconos. He aquí la función de cada icono:

Carga la imagen JPEG de alguna unidad del disco duro

Permite amplificar la imagen (zoom in) poco a poco

Permite alejarse de la imagen (zoom out) poco a poco

Permite incluir/quitar barras de scroll sobre la imagen para moverse a lo largo y ancho de la misma.

Termina la ejecución del software La siguiente imagen muestra este software corriendo.

Figura 24

Lupa por software

Page 162: programacion_ludica

Notas técnicas: Desarrollado en Delphi 5, en una máquina Pentium III, con 128 megas de RAM y 6 gigabytes en disco duro en resolución de 800x600 pixeles a 16 millones de colores. Apéndice III Los programas El sistema generador de fotoMORSAicos se basa en varios subsistemas, los cuales son:

• Generador de fotomorsaicos (versiones para Windows9x y para la interfaz www) • Procesador de la colección de imágenes • Programas de estadística y monitoreo del software • Programas de despliegue de resultados

• Programa visualizador de fotomorsaicos • Lupa por software • Bonus (presentaciones animadas)

Generador de fotomorsaicos

Este programa genera el fotomorsaico considerando que ya existe una colección de imágenes preprocesadas de acuerdo con el Procesador de la colección de imágenes (véase más adelante). El generador de fotomorsaicos toma una fotografía escaneada (cualquier imagen), la cual puede ser BMP o JPG y se elige una colección específica de imágenes (los mosaicos), ya que el software permite más de una colección. Una vez seleccionado esto, se elige un nombre para el resultado (archivo de salida), el cual se da como un archivo HTML (para ser visto de inmediato en el navegador de Internet de su preferencia) o bien TXT, para ser procesado con el software generador de imágenes. Para llamar al programa úsese la consola de comandos. El sistema tiene opciones que le pedirán:

1. El nombre de la imagen a procesar 2. El directorio en donde reside la colección (biblioteca) de imágenes 3. El nombre de archivo de salida. Este último no requiere de extensión porque el generador crea dos

archivos, uno con extensión ‘txt’ y otro con extensión ‘html’. Una vez generado el archivo de salida se puede crear una imagen usando el programa de despliegue y creación de imágenes JPEG o bien, usar el navegador de html de us elección para ver el resultado final. Notas técnicas: Desarrollado en Delphi 5, en una máquina Pentium III, con 128 megas de RAM y 6 gigabytes en disco duro en resolución de 800x600 pixeles a 16 millones de colores. El generador necesita de la lectura del archivo imagen.idx, el cual se debe guardar (estrictamente necesario) en el mismo directorio en donde se encuentra la colección de imágenes. Una vez teniendo toda la información necesaria el sistema genera un archivo HTML y otro TXT con el fotomorsaico particular. Nótese que el tiempo necesario para la creación del fotomorsaico depende de varios factores. A saber:

• Velocidad del procesador central (CPU) • Modo de depuración apagado (no mostrar avance en el desarrollo de la generación del sistema)

Page 163: programacion_ludica

Este modo de depuración se puede habilitar o inhibir en la medida de las posibilidades. He aquí la imagen del programa cuando éste es ejecutado (vea siguiente figura)

Figura 20

Procesador de la colección de imágenes

Este programa permite generar un archivo que indexa las imágenes a través de sus colores promedio, considerando a la imagen toda como si fuese un mosaico de un solo color sólido. El Procesador de la colección de imágenes simplemente toma cada imagen JPEG que encuentra en el directorio deseado, la procesa aplicando un filtro mosaico y entregando el color promedio en tripletas RGB(R,G,B). Guarda además el número de color de acuerdo a como Windows maneja las tarjetas de vídeo de 24 bits y por último, guarda el nombre del archivo de la imagen. El Procesador de la colección de imágenes genera entonces un archivo de texto llamado “imagen.idx”, cuya estructura ha sido analizada antes. Este archivo es necesario para que el generador pueda trabajar. Una imagen que muestra dicho software se presenta a continuación:

Figura 21

Page 164: programacion_ludica

Notas técnicas: Desarrollado en Delphi 5, en una máquina Pentium III, con 128 megas de RAM y 6 gigabytes en disco duro en resolución de 800x600 pixeles a 16 millones de colores. Programa de estadística y monitoreo del software

Este programa básicamente mide la cantidad de colores disponibles en la colección de imágenes. Es un sistema muy elemental y solamente fue escrito para encontrar cuáles colores son los que faltan y cuáles son los que se tienen en exceso. El sistema generador de mosaicos puede trabajar sin necesidad de este subsistema. Es sólo una ayuda al programador (y por ende no se incluye en la consola de comandos). Este programa hace uso del archivo imagen.idx para analizar los colores, los cuales están dados en 16 rangos (un millón de colores por rango, aproximadamente). La siguiente figura muestra una imagen del mismo:

Figura 22

Así se puede entender por qué el generador no encuentra un determinado color o bien la selección resulta a todas luces ridícula.