Você está na página 1de 164

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
Í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
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
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:
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.
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
¿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.
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.
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
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.
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.
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.
¿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.
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.
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:
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.
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
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
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.
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.
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?
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.
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.
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
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.
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.
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.
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
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.
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.
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.
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
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
.
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)
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.
¿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)
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.
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
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
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.
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
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
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.
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.
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
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/
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@@@@@@@@@@@@@@@@@@JII@JJII............................................J.JJX@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).
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):
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):
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):
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
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.
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:

n m
Colordelaregion = ∑∑ ( RGB ( Rn , m , Gn , m , Bn , m )) / nm
1 1

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

D2 − D1
donde
D1
y
D2

son los valores del tono de gris en la región analizada contra la que se encuentra en la colección de imágenes
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:

∆ = ( R1 − R2 ) 2 + (G1 − G2 ) 2 + ( B1 − B2 ) 2

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:

r 255 − r
∆ = (2 + )( ∆R ) 2 + 4( ∆G ) 2 + ( 2 + )( ∆B ) 2
256 256
donde

R1 + R2
r=
2
∆R = R1 − R2
∆G = G1 − G2
∆B = B1 − B2

(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:


í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:

)umeroColor = ( R ⋅ 65536) + (G ⋅ 256) + ( B ⋅ 1)

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
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
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:

L = ( R ⋅ 65536) + (G ⋅ 256) + ( B ⋅ 1)

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).
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
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).
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.
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:
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).
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)
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 ).
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)
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):-
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).
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(_,”“,_).
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.
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 */
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.
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
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.
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
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.
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.
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.
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
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 |
+---+
/*************************************/
/* 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 */


/* 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.
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
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
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.
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:

|abc|
|bca|
|cab|

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.
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é:
/* 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.
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.
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
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.
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.
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).
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.
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.
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
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”


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

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.
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
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.
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.
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).
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.
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
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.
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:
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.
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
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.
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
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í:
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:
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
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
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).
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).
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.
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
)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”.
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.
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:
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,
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.
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).
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.
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
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.
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.
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
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...
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.
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.
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
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.
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.
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?”
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.
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


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

Você também pode gostar