Sunday, November 20, 2011

Inteligencia artificial y sistemas expertos


La inteligencia artificial, término que acuñó John McCarthy me parece, se basa en la idea de hacer sistemas inteligentes, tan capaces como los que puede lograr el cerebro humano. Sin embargo, se halló, después de los primeros años frustrantes, que la inteligencia humano no sólo era complicada, sino mucho más complicada de lo que habíamos pensado. Por ello, hubo una división natural de tareas: visión por computadora; sistemas expertos; reconocimiento de patrones; entre otros.



Uno de los temas que por algunos años estuvieron en boga, pero que probablemente han caído en el desuso es el de los sistemas expertos, el cual se basa en escribir software que fuese tan bueno como un experto humano en un tema particular. En ese sentido por ejemplo, un programa de ajedrez como los actuales, que le ganan al 99.99% de los jugadores humanos,  es un sistema experto muy exitoso, pero las técnicas de programación para jugar tan bien están lejos de la teoría tradicional de los sistemas expertos. En este caso las cosas son así. Un sistema experto se basa en tres subtemas:

  • Interfaz con el usuario
  • Base de conocimientos (reglas de producción)
  • Motor de inferencias

En ese sentido, cuando se va a trabajar con un sistema experto hay que reconocer cómo se diseñará cada parte. En el caso de la interfaz del usuario, aunque hay muchas alternativas, la más común es responder "sí" o "no" a las preguntas que hace el sistema. esto -desde luego- no es tan poderoso como aquellos sistemas que además de responder a preguntas con "sí" o "no", también puedes darle un valor de confiabilidad a la respuesta. Por ejemplo,

Pregunta: "¿Te duele la cabeza"
Respuesta: "sí"
Pregunta: Del 1 al 10, ¿cuánto te duele? (donde 10 es el dolor más fuerte)

este tipo de sistemas usan probabilidad para decidir el margen de confiabilidad de las respuestas que entrega el sistema experto, basado en las confiabilidades que se dieron en las diferentes respuestas por parte del usuario. Para ello se usa el teorema de Bayes Sin embargo, para poner las cosas de la manera más simple, muchos sistemas expertos solamente permiten responder "sí" o "no".

Pues bien, una vez hecho esto, tenemos que describir la base de conocimientos, la cual es la que nos dará información sobre el tema que nos ocupa. Por ejemplo, en el programa muestra que te mando, la base de conocimientos es la información sobre los diferentes perros que existen. Así, un snauzer será un perro pequeño, con cola y orejas cortas, de buen talante, etc. En esta base se definen algunos perros y sus características. La idea del sistema experto es que el programa vaya pidiéndole información al usuario para que éste pueda concluir de qué perro se trata. Las bases de conocimiento están puestas en general como predicados "causa - efecto". Así, una regla en general podría ser: "si te duele la cabeza es que tienes gripe". La causa: el tener gripe; el efecto: el dolor de cabeza.

El motor de inferencias es quien pregunta al usuario basándose en esas cláusulas causa - efecto. Los sistemas expertos usan tres posibles motores de inferencia:

  • encadenamiento hacia atrás (backward chaining)
  • encadenamiento hacia adelante (forward chaining)
  • sistema de borrador (blackboard system)

El primer caso funciona así: Imagina que vas con el médico porque te sientes mal. Él te ve y te empieza a preguntar cosas sobre tus malestares. Sin embargo, antes de empezar las preguntas, las dirige asumiendo que tienes gripe, por ejemplo. Entonces te preguntará síntomas asociados de la gripe. Si le das más de una respuesta que no es presumiblemente de la gripe, se formulará mentalmente otra hipótesis y de nuevo empezará el interrogatorio.

El segundo caso es el encadenamiento hacia adelante. Siguiendo el ejemplo anterior, vas al médico y éste comienza a preguntarte qué te duele, pero no asume que tiene gripe o cualquier otra enfermedad. Lo que hace es acumular datos (respuestas) y entonces busca en su base de conocimientos qué es lo que más se parece a lo que puedes tener.

El sistema de borrador ya es obsoleto. Imagina un salón de clases lleno de expertos humanos en alguna materia. Entonces se plantea un problema y cada experto tiene un pedazo del borrador en la pared para poner su solución. Después de que todos hayan puesto su posible solución, un supervisor lee todas las respuestas y arma la respuesta final. Así funcionaba HearSay, un sistema de reconocimiento de voz de los años ochentas, actualmente en desuso.

Cabe señalar que los sistemas expertos deben estar construídos para no repetir hasta el hartazgo la misma pregunta. Por ejemplo, imagina que un sistema de encadenamiento hacia atrás te pregunta si te duele la cabeza y le contestas que no. Si es así, probablemente la primera hipótesis, la de tener gripe, no funcione. Entonces el sistema crea a través de la siguiente regla la nueva hipótesis. Si en esta nueva regla hay que preguntar de nuevo si te duele la cabeza, sería poco inteligente y serio de un sistema que te volviese a preguntar lo mismo. Así, el sistema experto (como el que te mando), guarda las respuestas del usuario y checa antes si ya respondiste a la pregunta para no volverla a preguntar.

Otra cuestión, que no está considerada en el sistema experto es la de explicar su funcionamiento. Es decir, ¿por qué el sistema experto llegó a las conclusiones y diagnósticos a los que llegó? Hay muchas maneras de hacer esto pero una de ellas es simplemente avisarle al programador, vía mensajes a la pantalla, en qué regla está trabajando. Otrso sistemas expertos pueden trazar la ruta de desarrollo. Por ejemplo, pueden decirte: "primero usé la regla 4, la cual me remitió a la regla 92 y por las respuestas del usuario tuve que probar las reglas 153 y 25", etc. Pero esto es mucho más sofisticado y difícil de programar.



/*      Program: Dog Expert        */
/* Purpose: To show the working of */
/* an expert system. It is a pro-  */
/* duction rule-based system.      */
/*                                 */
/* Remarks: This is a dog classi-  */
/* cation expert system. It uses a */
/* set of production rules for the */
/* purpose of inferring.           */

domains

database

   xpositive(symbol,symbol)
   xnegative(symbol,symbol)


predicates

   do_expert_job
   do_consulting
   ask(symbol,symbol)
   dog_is(symbol)
   it_is(symbol)
   positive(symbol,symbol)
   negative(symbol,symbol)
   remember(symbol,symbol,symbol)
   clear_facts

goal

   do_expert_job.


clauses

/*  User Interface System (UIS) */

do_expert_job :-
     makewindow(1,7,7,"An Expert System",1,16,22,58),
     nl, write(" ************************************"),
     nl, write("    Welcome to a Dog Expert System"),
     nl, write("                                 "),
     nl, write(" This is a dog identification system"),
     nl, write(" Please, respond by typing in 'yes'"),
     nl, write(" or 'no'.            Thank you.    "),
     nl,nl,
     do_consulting,
     write("Press space bar..."), nl,
     readchar(_),
     clearwindow,
     exit.

do_consulting :-
     dog_is(X), !,
     nl, write(" Your dog may be a(n) ",X,"."),
     clear_facts.

do_consulting :-
     nl, write("Sorry, unable to determine the dog."),nl,
     clear_facts.

ask(X,Y) :-
     write("   Question :- ",X," it, ",Y," ? "),
     readln(Reply),
     remember(X,Y,Reply).


/* Inference Engine (INE) */

positive(X,Y) :-
     xpositive(X,Y),!.

positive(X,Y) :-
     not(negative(X,Y)),!,
     ask(X,Y).

negative(X,Y) :-
     xnegative(X,Y),!.

remember(X,Y,yes) :-
     asserta(xpositive(X,Y)).

remember(X,Y,no) :-
     asserta(xnegative(X,Y)),
     fail.

clear_facts :-
     retract(xpositive(_,_)),
     fail.

clear_facts :-
     retract(xnegative(_,_)),
     fail.


/* Production Rules */


dog_is("English Bulldog") :-
     it_is("short-haired dog"),
     positive(has,"height under 22 inches"),
     positive(has,"low-set tail"),
     positive(has,"good natured personality"),!.

dog_is("Beagle") :-
     it_is("short-haired dog"),
     positive(has,"height under 22 inches"),
     positive(has,"long ears"),
     positive(has,"good natured personality"),!.

dog_is("Great Dane") :-
     it_is("short-haired dog"),
     positive(has,"low-set tail"),
     positive(has,"longer ears"),
     positive(has,"good natured personality"),
     positive(has,"weight over 100 lb"),!.

dog_is("American Foxhound") :-
     it_is("short-haired dog"),
     positive(has,"height under 30 inches"),
     positive(has,"longer ears"),
     positive(has,"good natured personality"),!.
    
dog_is("Cocker Spaniel") :-
     it_is("long-haired dog"),
     positive(has,"height under 22 inches"),
     positive(has,"low-set tail"),
     positive(has,"longer ears"),
     positive(has,"good natured personality"),!.

dog_is("Irish Setter") :-
     it_is("long-haired dog"),
     positive(has,"height under 30 inches"),
     positive(has,"low-set tail"),
     positive(has,"good natured personality"),!.

dog_is("Collie") :-
     it_is("long-haired dog"),
     positive(has,"height under 30 inches"),
     positive(has,"low-set tail"),
     positive(has,"good natured personality"),!.

dog_is("St. Bernard") :-
     it_is("long-haired dog"),
     positive(has,"low-set tail"),
     positive(has,"good natured personality"),
     positive(has,"weight over 100 lb"),!.
    
it_is("short-haired dog") :-
     positive(has,"short-haired"),!.
    
it_is("long-haired dog") :-         
     positive(has,"long-haired"),!.

Este sistema experto está escrito para turbo prolog, que funciona bajo MsDOS y está sacado del libro -si mal no recuerdo- Exploring Artificial Intelligence With Turbo PROLOG por Keith Weiskamp, el cual no sé dónde está. No lo halló más.

Friday, November 18, 2011

Caballerosidad deportiva mal entendida


En ajedrez a veces existe algo que se malinterpreta como caballerosidad deportiva, como jugar limpio, aunque en realidad es solamente una exageración a conductas deportivas que se interpretan de forma equivocada. Hace unas pocas semanas, Navara, el GM checoslovaco, jugaba con el GM Moiseenko, en la Copa Mundial 2011, cuando se presentó una situación anómala. Jugaba Navara y aparentemente tocó el rey y su alfil, prácticamente de forma simultánea. Su rival advirtió al juez y después de unos minutos de discusión parece que quedó claro para Moiseenko que Navara no había querido realmente tocar a su monarca y se le permitió hacer la jugada del alfil. En caso de que el juez hubiese decidido en contra de Navara, éste hubiese perdido la partida inmediatamente pues habría perdido una pieza. La partida continuó y Navara llegó a una posición ganadora. Mate en un par de jugadas... Pero no lo ejecutó. ¿Qué hizo? Ofreció el empate, porque se sentía mal por la situación y discusión anterior. ¿Hizo bien? ¿Hizo mal? Los árbitros le concedieron a Navara y a Moiseenko, unos días después, un premio especial por "fair play".

De acuerdo a las propias palabras de Navara: "no sé quién tenía la razón". Navara sintió que el match no debía decidirse por esta situación anómala o por una protesta sin suficiente evidencia. No quería además ser acusado de pasar a la siguiente ronda de forma ilegal y por ello ofreció el empate. A la postre el GM checoslovaco pasó a la siguiente ronda, eliminando a Moiseenko.


Pero este caso no es único. Malakhov, en el Campeonato Individual Europeo de hace unos pocos años, contra Azmazparashvilli, éste último cambió su jugada y esto le permitió coronarse campeón de Europa. Cabe decir que Azmazparashvilli se sintió mal con su proceder y en algún momento le ofreció tablas a su rival, el cual no acepto (de acuerdo a Geurt Gissen, el prestigiado árbitro internacional, en su columna de Chesscafe.com).

Pero Tim Krabbé, que lleva un registro de todo género de situaciones curiosas en ajedrez, lo cual daría a muchos libros del tema, y que tiene un sitio web, es de la opinión de que: "Apiadarse del rival es contra el espíritu deportivo", y para ello pone el siguiente ejemplo del torneo de Wijk aan Zee, de 1970:


Platonov- Cortlever
Wijk aan Zee, 1970
Juegan las blancas

En esta posición las blancas tienen la partida ganada después de 54 jugadas. Simplemente jugando 55.Td7 las negras podrían rendirse. Por ejemplo: 55. ... Db6 56. Td8+ Rh7 57.Dd3+ Tf5 58. g4 y se acabó. En lugar de eso, Platonov cometió un espantoso error y jugó: 55.Td8+?? con lo cual las negras podrían responder con 55. ... Te8+ a la descubierta, con lo cual se pierde la torre ya que a 56. Td6 Te6 gana. Cortlever jugó la torre para cubrir el jaque, pero inmediatamente ofreció el empate, el cual fue aceptado por Platonov.

Dice Krabbé entonces:
"Pensamos que la reacción deportiva de Cortlever merece respeto y admiración", escribió Barry Withius en el boletín del torneo. Pero, dice Krabbé "yo personalmente desprecio este tipo de caballerosidad", y agrega: "Está en el espíritu de todos los deportes sacar ventajas de las debilidades de su oponente si está dentro de las reglas. El deporte es duro, es cruel. El deporte es realmente sobre sacar ventajas de los errores, haciendo que el rival se vea patético -y no sobre excelencia moral. No veo porqué tiene que ser diferente en ajedrez." Y concluye: "Cortlever debió haber sido expulsado del torneo".

Así las cosas en este fascinante mundo del ajedrez. Pero usted, lector, lectora, ¿qué piensa?

Articulo de Florence Toussaint en Proceso sobre la Oveja Eléctrica

En la edición de la revista Proceso de esta semana, aparece una crítica de Florence Toussaint, que escribio sobre el programa "La Oveja Eléctrica", que se transmite por Canal 22 los martes a las 8:30 pm y con repetición los viernes a las 5 pm.

Ayer Pepe Gordon me mostró la revista y estaba contento porque la crítica por una parte es muy favorable y por otro lado, porque la "Oveja Eléctrica" es como uno de sus hijos predilectos. Entre él y Froylán López Lavín, hijo del escritor Froylán López Narváez, arman cada semana un programa de divulgación de la ciencia que ya tiene su propia fisonomía, su propio estilo. Me siento muy halagado de que me hayan invitado (ya hace seis temporadas), a participar en este proyecto. Un abrazo a todos.


Dar click en la imagen para agrandar

Wednesday, November 16, 2011

¿Cuántos vasos de 20 onzas caben en un VW Beetle?


Las tiendas de conveniencia Oxxo y Nescafé, cerraron ayer una promoción para premiar la fidelidad de sus clientes, y organizaron un concurso en donde se trata de acertar cuántos vaso de 20 onzas, con tapa, caben dentro de un VW Beetle 2012? El ganador será aquel que le atine o se acerque (sin pasarse), más al valor total de vasos que contenga el automóvil en cuestión.

Hay de hecho tres automóviles en juego, tabletas iPad, consolas de juegos XBox y reproductores de mp3. Aquí, a diferencia de otros concursos, la cantidad total de vasos que caben en el automóvil aún no se conoce, y se sabrá hasta hoy, día 16 de noviembre en que se hará frente a un notario, que dé fe del resultado. Esto en mi opinión hace más transparente el concurso en cuestión. Cuando alguien sabe a priori el número de vasos, bien podría comunicárselo a un tercero. Por ello, este concurso quizás me gustó más que otros.

Para poder concursar, sin embargo, había que comprar tres cafés en las tiendas Oxxo. El precio mínimo de cada café es de 15 pesos, por lo que estamos hablando que cada participación cuesta 45 pesos. Se puede participar tantas veces como se deseé (siempre y cuando hagan la compra correspondiente).


Un eventual amigo de Internet se comunicó conmigo para que le ayudara a calcular la cantidad de vasos que podrían caber en el automóvil Beetle. Hicimos los cálculos de forma independiente y llegamos finalmente a los números que parecen más razonables. Quedamos en dividir en dos cualquier premio que nos pudiésemos ganar. He aquí los cálculos que se hicieron:


Un vaso de 20 onzas, lo cual es equivalente en litros, según la página: http://www.convertunits.com/from/oz/to/litro a: 0.59147059375, es decir, poco más de medio litro. Si incluímos la tapa, hablamos de 5 cms3 más (esto lo medí con una taza graduada), entonces como hablamos de vasos CON TAPA, tenemos 596.47 cms3 por vaso. Después con una taza graduada hice la medición e nuevo sobre un vaso de café nescafé-oxxo y hallé que: 22 onzas son 650.62 cms3 medidos con mi taza graduada.

Ahora bien, de otros concursos, más o menos el espacio habitable del beetle concuerda con otros valores. Digamos que en los coches medianos, el espacio habitable es más o menos lo mismo. Por ejemplo: en el caso de la camioneta del concurso de cinemex, el volumen era de:

Espacio interior (volumen):

Interior volume: 125.4 ft3 (3,550,932 cms3)

Este es el TOTAL (incluye la parte de la cajuela o carga):

101.0 + 24.4 = 125.4
ft3

(ver: http://la-morsa.blogspot.com/2009/01/otro-concurso-ms-de-cinemex.html)

Cabe señalar que la camioneta tiene sin duda mucho más espacio que un beetle (que tiene 81 ft3 de espacio).
Así que creo que en términos de espacio, 81 ft3 suena razonable para el beetle.

En el concurso del corolla que hizo cinemex, eran vasos de 500 ml. el volumen del Corolla (que había que calcular), era de 2 550 000 (90 ft3). Por lo cual, si hacemos la división:

2 550 000 / 500 = 5,100

pero el resultado de la cantidad de vasos (que son conos truncados), fue de 2444 en total. Es decir, amontonados, se desperdició: 52.08% del espacio. Los vasos de cinemex y del concurso de oxxo son del mismo tamaño, nomás que los del oxxo hay que añadirles un poco más por la tapa.

Este es el nuevo cálculo:

Entonces 2,292,300 cm3 dividido por unidad de vaso (650.62 cm3) tendremos: 3523.25 vasos, pero a esto hay que dejarle sólo el 47% que cabe (de la experiencia del Corolla, el porcentaje que se pierde en el espacio es de 52%). Entonces:

3523.25 vasos * .48 = 1691.16 vasos.

A partir de ahí dividí con mi amigo las apuestas que había que hacer. No sé si hoy en la página de Nescafé salga el resultado de los vasos en total. Sino, a esperar al 28 de este mes para ver si nos ganamos el coche o algún otro bien. Esperemos haya suerte.

Tuesday, November 15, 2011

Libros interactivos de ajedrez


Hace unos años, mi hermano Pedro estaba trabajando en un manual técnico. Para ilustrarlo mejor, había tomado algunos videos y se enteró de alguna manera que estos podían colocarse dentro de un documento en formato PDF, de Adobe. Así, podía tener el texto explicando alguna cuestión específica y el lector podía entonces ver el video en donde se ilustraba el asunto.

Cuando vi lo que había hecho, pensé que debería haber algo parecido pero para el ajedrez. Es decir, uno lee un libro de ajedrez normalmente frente a un tablero físico, en donde se van reproduciendo las jugadas. Unos pocos jugadores no necesitan de tablero y pueden leer libros de ajedrez como si leyeran una novela, pero sin duda son los menos. Una alternativa a esto es usar por ejemplo, Chessbase, e ir reproduciendo las partidas del libro en el tablerito electrónico. De hecho, muchas monografías de aperturas de la empresa alemana (Chessbase), son como "libros electrónicos". Chessbase tiene además algo que se llama "ChessMedia", lo cual son videos de jugadores muy fuertes, entre ellos inclusive Kasparov, los cuales analizan en video las partidas que se muestran en el tablero electrónico del software. De alguna manera el video está enlazado al tablero y así lo que va diciendo el maestro se refleja en las jugadas que se ven en el tablero.

Hoy me entero de una idea interesante, que me parece ya la gente de Everyman Chess ya tenía en cierta medida avanzada: un sistema de libro electrónico en donde puede seguirse, en un tablero virtual, los análisis que se van dando página tras página. Lo idea es tener un iPad por el tamaño, pero el sistema se puede usar también en un iPod touch. De esta manera, ya el tablero físico puede pasar a la historia y estudiar ajedrez se hace ahora de la manera más fácil posible. Quizás habrá que esperar un tiempo a ver qué títulos nuevos aparecen, porque la oferta de libros de ajedrez con este sistema aún se ve pobre.

Cabe decir que la empresa de Stephen Wolfram, los que hacen el software Mathematica, desarrollaron un sistema de libros electrónicos interactivo (diseñado para matemáticas, desde luego), el cual permite una interacción fascinante, lo cual podría ser la nueva moda en lo que se refiere a libros electrónicos. Crear libros interactivos con Mathematica requiere de tener este sistema y cualquiera con ganas e interés puede crear sus propios documentos interactivos. Sin embargo, con la idea de los libros de ajedrez de eplubooks, hay que esperar que el fabricante decida incorporar nuevos títulos. Habrá que ver si esta idea pega en el público ajedrecísta y se vuelve a la larga un estándar. En el mientras, he aquí el video promocional de esta empresa:



El sitio de la empresa de este software es http://www.eplusbooks.com/.

Monday, November 14, 2011

Lapsus: anatomía de un corrector ortográfico VI

Un corrector ortográfico tiene otras dificultades a resolver. Una de ellas es si el programa será implementado como una aplicación independiente o si bien, interactuará con algún otro sistema. En la primera versión de Lapsus, la cual se escribió en Turbo Prolog 2.0, de Borland, el sistema contenía su propio editor de textos, es decir, quien usara el software estaba obligado a escribir sus documentos en el editor que yo proveía. Sin embargo, es claro que este enfoque tiene una oposición importante: es difícil que la gente cambie el editor de palabras que use por utilizar la herramienta de corrección ortográfica, aunque ésta suene muy poderosa.

Debido a esto, decidí entonces hacer que Lapsus corriera como una aplicación que se pegaba de alguna manera a MsWord, que es el procesador de palabras que la mayoría usa, pues la suite informática de Microsoft es muy popular. Entonces, habría que ver cómo enlazar ambas aplicaciones, por una parte MsWord y por otra Lapsus, para que ambas de platicaran y se intercambiaran información.

La idea básica era simple: Úsese Word y Lapsus -ya ejecutándose- estará al pendiente de cada palabra que se escriba, la cual será enviada al corrector para evaluar si está bien o mal escrita y si se encuentra algún error, mándese algún mensaje de error (desde Lapsus), que permita al usuario hacer la corrección correspondiente.

La idea es simple pero la implementación de la idea no lo fue. Por una parte, había que ver qué mecanismos permitían entablar un proceso de comunicación entre ambos programas. Hallé que Windows tiene un mecanismo llamado DDE - Data Dynamic Exchange, el cual permite intercambiar datos entre aplicaciones.

De acuerdo a la Wikipedia: Dynamic Data Exchange(DDE) es una tecnología de comunicación entre varias aplicaciones bajo Microsoft Windows y en OS/2. Aunque es apto para las últimas versiones de Windows, ha sido reemplazado por su mucho más poderoso sucesor Object Linking and Embedding, COM y OLE Automation. Sin embargo, todavía se usa en varios sitios dentro de Windows, por ejemplo en la asociación de archivos. En particular, DDE permite que una aplicación abra una sesión con otra, enviar comandos al servidor de aplicaciones y recibir respuestas. Sin embargo, este no permite incorporar una interfaz del servidor dentro de la aplicación cliente, tampoco soporta la incorporación de un servidor de datos dentro del archivo cliente (por ejemplo: almacenamiento estructurado); y para usar DDE se tienen que conocer los comandos de DDE que el servidor soporta, lo cual no ha sido generalmente estandarizado (si bien existieron algunos estándares, como la especificación spyglass para navegadores web), Así, para emplear toda la funcionalidad del DDE, se debe agregar código especial en cada aplicación cliente para cada servidor que este quiera controlar, o la aplicación cliente debe facilitar un lenguaje de script o macro. Un uso común de DDE fue para desarrollar aplicaciones personalizadas para controlar software disponible, ejemplo: un aplicación escrita en C o algún otro lenguaje debía usar DDE para abrir una hoja de cálculo Microsoft Excel y llenarla con datos, por medio de una conversación con Excel y el envío de comandos DDE. Sin embargo, hoy se usa el modelo de objeto de Excel con OLE Automation (automatización OLE) (esto es una parte de COM). Windows tiene la habilidad de llamar NetDDE, el cual posibilita que los mensajes DDE sean enviados entre aplicaciones que corren en máquinas diferentes. Su uso es raramente utilizado, pero todavía tiene soporte. El cuaderno de Microsoft (Microsoft Clipbook) y el juego de cartas Corazones (Microsoft Hearts) son algunas de las aplicaciones que usan NetDDE.

Cabe señalar que DDE además, resulta un monstruo difícil de enfrentar. La documentación: unos 60 megabytes, es oscura e impenetrable. Cuando hice mis primeras pruebas de Lapsus con DDE hallé que una vez no funcionaba bien y otra vez tampoco. Aparte de oscuro resultó francamente inestable. Así que después de unos meses de padecer a DDE me declaré incompetente (o lo declaré más bien incompetente) y decidí buscar otra opción.

Por suerte hallé que OLE automation es la solución a muchas de las dificultades. El protocolo de comunicación entre procesos es mucho más claro y además, para Office ya está implementado en muchísimas plataformas, inclusive Delphi. Curiosamente los ejemplos que hallé sobre cómo pasar una palabra desde Word a Lapsus y regresarla corregida son inexistentes. Hay muchos ejemplos de cómo hacer para que Word, a través de una aplicación en Delphi, abra el menú para leer un archivo, o para guardarlo, pero nada de la manipulación de las palabras.

Buscando en la red hallé que la revista Delphi Informant (septiembre y octubre del 2000), traía probablemente esa información. Y aunque la revista había desaparecido, estaba a la venta el CD con todos los artículos en PDF. Tuve dificultades con los que venden el CD (ya lo mencioné en algún artículo pasado), pero finalmente me hice de esos artículos y entonces Lapsus podía entonces cobrar vida, pues la parte medular había sido resuelta.

Ya hablaremos más adelante de los detalles al respecto.

Friday, November 11, 2011

Absurdos bancarios


Esta es mi carta de reclamo al banco, por el trato lamentable que da a sus clientes:

Hoy tuve que ir al banco Santander, que es donde tengo mi cuenta, a pagar mi tarjeta de crédito. Cuando llegué a la caja, la empleada que me atendió me dijo que había una tarjeta de crédito que esperaba que recogiera. Le di mi licencia de manejo y después de verificarla, hizo una llamada telefónica a alguien, quien le informó que esa identificación no me servía para recoger la tarjeta que me había llegado y que, a todo esto yo no había pedido. Le dije que ése no era mi problema. La licencia de conducir es un documento oficial que expide la policía de este país. Si el banco no cree en eso, ¿en quién creer entonces? Me dijo la empleada que necesitaba entonces un comprobante de domicilio. Llevaba el estado de cuenta que me manda el mismo banco Santander, pero he aquí que no se puede usar un comprobante de domicilio de un documento que el banco emite. ¿Cómo puede ser eso?

Así que pedí hablar con el gerente, al cual le expliqué lo mismo que le dije a la cajera. Coincidió en mis puntos de vista y me dijo que me daría el plástico y que me pedía que le mandara por correo electrónico una copia de mi pasaporte o IFE (lo cual hice cuando regresé del banco).El Gerente me dijo algo significativo: para abrir una cuenta sí vale la licencia de conducir, pero no para hacer transacciones, por la supuesta cantidad de fraudes. Curiosamente se acepta la credencial del IFE -la cual- es mucho más fácil de falsificar a todo esto.

Y ya que estaba en la sucursal y enfrente del gerente o director de la sucursal, le informé que en mi cuenta de cheques me habían hecho un cobro que yo jamás autoricé. Se trata de un cargo por 220 pesos por el uso de la membresía Premier. Le informé que eso de la membresía Premier me lo dieron como una cortesía por mi saldo y comportamiento en mi cuenta bancaria (pago siempre a tiempo, por ejemplo). Y que no costaba, que yo no lo pedí y que jamás se me informó que esto tenía un costo. Me dijo el director de la sucursal que el banco este año había decidido cobrar la membresía a los que no tienen saldo mayor a 500,000 pesos. Le dije que me parecía perfecto, pero que yo no les pedí ninguna membresía y que me parecía nefasto y fuera de lugar el cobro de ese dinero porque yo jamás solicité pertenecer al grupo Premier -o como le llamen.

Me dijo entonces que tenía que ir a mi sucursal (donde hice la apertura de mi cuenta), para presentar una aclaración para que se me hiciese la bonificación correspondiente. Le dije que eso implicaba ir a la sucursal y que eso llevaba tiempo. Le advertí que a mí no me pagan por el tiempo que no trabajo. Le pregunté si el banco me pagaría la hora que iba a perder arreglando un error que cometío el banco. Me dijo que por supuesto que no. Entonces me comentó que podía arreglarlo por teléfono. Le dije que lo arreglásemos desde ahí, desde la misma sucursal. Habló el gerente, el Sr. Alejandro Mauricio Villa Juárez, de la sucursal 7852 a la superlínea Santander. Ahí me pasó el teléfono con quien me atendió, porque tenían que verificar mis datos. Después de una espera considerable, el señor que me atendió, Francisco Jiménez, me dijo que tenía que ir a la sucursal que me correspondía y hablar con algún funcionario de la misma para pedir la aclaración y la bonificación de un cobro que el banco hace a la brava, sin preguntar antes, nomás por sus pistolas literalmente. Se me informó que a fines del mes de octubre, el Sr. David Nogerón, de la sucursal San Jerónimo, fue quien hizo el movimiento para cobrarme esa membresía Premier -que repito- ni pedí ni me interesa.

La cuestión es entonces muy simple: ¿Por qué tengo yo que ir a arreglar un cobro indebido, que el banco hizo sin mi consentimiento y aprobación? ¿Quién les autorizó a actuar así? Y ahora que han actuado de mala manera y con toda la mala fe, ¿por qué yo tengo que perder mi tiempo en ir a arreglar un problema que el banco generó? Así como el Sr. Nogerón me hizo el cargo, pues que me aplique la bonificación y listo. ¿O él -o el banco- me van a pagar las horas que pierdo en la institución bancaria? Porque ustedes, señores del banco, saben lo importante que es el dinero ¿verdad? Entonces, habría que actuar en consencuencia.

Por lo tanto, quiero ver que el banco Santander acepte sus errores y arregle el problema del cargo que generé en mi cuenta (sobre el uso de la membresía Premier), y me bonifique la cantidad que literalmente se agenció sin siquiera preguntarme nada. Literalmente eso califica de robo, por si no están enterados. Ahora bien, si tengo que ir a la sucursal que me toca, dénme por favor los datos para emitirles el recibo de honorarios por el tiempo que tengo que usar para arreglar el problema que ustedes generaron en mi cuenta, porque les repito, a mí me pagan por las horas que laboro, no por las que no lo hago.

A todo esto, y como detalle curioso, en los mensajes de correo del banco a mi persona aparece una leyenda:

****PRIVACIDAD DE ESTE MENSAJE****
Este mensaje esta dirigido exclusivamente a las personas que tienen las direcciones de correo electronico especificadas en los destinatarios dentro de su encabezado. Si por error usted ha recibido este mensaje, por ningun motivo debe revelar su contenido, copiarlo, distribuirlo o utilizarlo. Le solicitamos por favor comunique del error a la direccion de correo electronico remitente y elimine dicho mensaje junto con cualquier documento adjunto que pudiera contener.

[...]

Los acentos en la leyenda de confidencialidad se han suprimido para una mejor lectura

Obsérvese el párrafo final que vuelvo a transcribir: "Los acentos en la leyenda de confidencialidad se han suprimido para una mejor lectura". De nuevo me parece que quien escribió esto no entiende que los acentos no son  una afición malsana de nadie, sino que permiten precisamente, que la escritura de los mensajes sea más legible, se convierta en una mejor lectura. Así que eso de suprimir los acentos a estas alturas de la tecnología es un pretexto para demostrar una vez más una ignorancia lamentable, nada propia de una institución que se precia de seria.

Vamos a ver qué responde el "defensor del cliente Santander" a esto.

Wednesday, November 09, 2011

Respuesta pública al artículo de Víctor Gordoa

Hoy, en el periódico Excélsior, que repito, cada vez parece más una "inserción pagada" que un medio de información, apareció publicado el siguiente artículo, firmado por Víctor Gordoa:


¿Prohibir los toros?


Victor Gordoa

Caray, caray… otra vez la política populista sobre el derecho de muchos. El de hoy es un tema muy polémico, pero creo que lo que voy a decir lo domino pues llevo más de 50 años yendo a los toros y 17 trabajando con políticos, irónicamente una clase profesional que desde antaño está conformada por muchos grandes aficionados taurinos. Mi papá, quien fue gerente de la Plaza México, apoderado de algún torero y gran aficionado práctico, me llevaba a la plaza desde niño. Por si fuera poco, mi abuelo materno ya toreaba en la plaza de San Miguel de Allende desde hace más de un siglo y mi otro abuelo criaba reses bravas en San Luis Potosí. Soy poseedor de derechos de apartado en la México, amigo de muchos toreros (incluso he sido contratado por ellos y los empresarios para prestar mis servicios de consultoría en imagen pública) y finalmente he realizado el sueño de muchos aficionados taurinos: el que una figura del toreo te brinde un toro en la plaza más grande del mundo. Así las cosas, ya se imaginarán ustedes la fibra sensible que me tocan con el tema de prohibir la celebración de corridas de toros con el añejo y populista pretexto de que se trata de actos de barbarie.

El Ejemplo Catalán…

Este nuevo intento de imposición política lo único que pretende es ganar los votos de aquellos que, por la falta de conocimiento del tema, se verían honrados con lograr la prohibición de la lidia. La fiesta de los toros querrá prohibirse en la capital de México argumentando lo que los catalanes hicieron en Barcelona, sí, pero se les olvidará decir que los catalanes están enfrascados en una diatriba de identidad regional en la que afirman que ellos no son españoles sino catalanes, de ahí que también hayan impuesto el catalán como su lengua oficial, total, que lo que demagógicamente no se explicará a la gente en México será que lo que sucedió allá fue consecuencia de un acto político populista separatista que intentó demostrar al mundo y al resto de los españoles que los catalanes son capaces de rechazar a la fiesta símbolo de España.

Razones Suficientes…

Quien esgrima como argumento de prohibición de la fiesta brava la crueldad contra un ser vivo, tendría que considerar también solicitar la prohibición de la ingesta de carne de cualquier tipo y ya puestos en papel esotérico hasta de vegetales. También prohibir el uso de artículos de piel, zapatos, bolsas, cinturones y, claro, las chamarras tan gustadas por los políticos, o sea de todo aquello que necesite de la muerte de un animal para ser manufacturado, ya que, ¿sabe usted cómo lo mataron? Pues con un acto de absoluta indiferencia de quien lo hizo, lo que ya atañe crueldad suficiente. En la fiesta taurina se ha criado con todo esmero y cuidados a un animal, el Toro de Lidia, al que se da la oportunidad de defenderse, demostrar su casta y hasta lograr el perdón de su muerte, un ser vivo cuya raza ya hubiese desaparecido si desapareciera el fin con el que fue creada por la naturaleza: el de ser lidiado. Además la fiesta taurina es fuente de empleos y de derrama económica subyacente, miles de personas dependen de ella, así que prohibirla sería una medida populista atentatoria contra los principios ecologistas, así como contraria a las políticas del gobierno del empleo y, finalmente, ya puestos a prohibir, pues los mismos políticos también tendrían que eliminar las peleas de box, de gallos y hasta los partidos de fut en los que un puñado de hombres se hacen daño físico a patadas y en cuyos estadios ha habido muchos cientos de muertos. O todos coludos o todos rabones.

Pues he aquí mi respuesta abierta y pública a esta sarta de mentiras, de argumentos falaces:

Sr. Víctor Gordoa, 

Leí su artículo titulado "¿Prohibir los toros?  y me queda claro que lo único que logró es justificar la barbarie, tapar el sol con un dedo, justificarse a sí mismo. Más allá de las razones populistas, de ganar votos, de la situación electoral que parece que es un común denominador en nuestro país. Más allá de todo esto está en el sufrimiento fuera de toda proporción que se le inflinge a un animal que sólo tiene sus cuernos para defenderse de la cantidad de daño que se le hace con arpones, con espadas, con toda esa serie de artilugios cuya intención es además, restarle fuerza y tener menos elementos para defenderse. Se le desangra sistemáticamente, se le castiga brutalmente. 

De verdad, ¿dónde está el gran arte de torear? Es una carnicería que pretende envolverse en un halo de fiesta, de arte, de mostrar la virilidad del matador, de jugarse la vida estúpidamente ¿para demostrar qué? ¿su poderío ante un ser inferior? Vamos, que le ganan sus antecedentes, Sr. Gordoa, le gana la tradición que le inculcaron de niño y que no puede aceptar siquiera el sufrimiento del animal. ¿ha visto como brinca desesperado un toro cuando le clavan las banderillas en su lomo? ¿Y todavía aplaude ante esa hazaña de sadismo inusitado? Aplaudir por ello parece una enfermedad más que un arte.

En "la fiesta brava", como en un crimen, aparecen las cuatro agravantes de ley: premeditación, alevosía, ventaja y traición. ¿Dónde está el arte de usar todo género de arpones contra un animal que no tiene los mismos métodos de defensa que el hombre? ¿Se vale tanto sadismo? ¿Se vale luchar con tanta ventaja contra un animal que de entrada, es intelectualmente inferior a la capacidad del ser humano? A todo esto decir que el toro de lidia fue creado por la naturaleza para terminar en una plaza de toros es evidentemente una mentira. ¿Quién le dijo a usted, Sr. Gordoa, que sabemos los designios de la naturaleza? Lo suyo son meros pretextos para perpetuar esta barbarie.


Porque a diferencia del box, por ejemplo, ambos contendientes pelean en las condiciones de igualdad. En una cancha de futbol ocurren agresiones entre los jugadores y a veces entre aficionados y jugadores, pero eso no se busca en ese deporte. Eso es una consecuencia de fanatismo, que a todas luces está mal.

Y le diré algo más. Darwin decía que la naturaleza era cruel. Tenemos que matar a otras especies para sobrevivir, sí, pero... ¿tenemos que matarlas con esa saña? ¿con esa maldad? Hay ya procedimientos para que los animales que consumimos no sufran. No padezcan muertes violentas ni agresivas. Los animales sufren también. ¿Tiene acaso alguna mascota? ¿Alguna vez se le ha enfermado? ¿ha visto sufrir a su perro o gato? Los animales sufren. Punto. Eso no necesita demostración, pero si no me cree, pregúntele a cualquier veterinario.

En resumen, su artículo es un catálogo de justificaciones mentirosas, de argumentos por demás falsos para pretender justificar lo injustificable. Curiosamente usted es el rector de una...¿escuela de imagen pública? ¿Y ésa es la imagen que quiere mostrarnos? ¿la de un ser indolente al sufrimiento animal? No por nada este tipo de espectáculos está prohibido en los países del primer mundo. Aquí los mantenemos con todo un catálogo de pretexto para defender y justificar este espectáculo que más que una fiesta es una carnicería vergonzante.



Da pena ajena toda su argumentación. Con su manera de defender la fiesta brava sería mejor decirle: "no me ayudes, compadre". Penoso asunto.


Atentamente,
Manuel López Michelone

Tuesday, November 08, 2011

Las calaveritas de "La Oveja Eléctrica"

Edna Cardoso es parte de la producción del equipo del programa de Canal 22, la Oveja Eléctrica. Siempre feliz, siempre dispuesta a solucionar todos los problemas que ocurran en la grabación del programa, Edna es fundamental en el trabajo que hace en la Oveja. No me sabía de sus habilidades para hacer calaveritas, las cuales demostró mandándome algunas de ellas. Que las disfruten:

PEPE GORDON

ESTABA LA MUERTE UN DIA
SENTADITA EN SU BALCON
OYENDO COMO CRUJIAN
LOS HUESOS EN EL PANTEON.

ESTO ESTA MUY ABURRIDO
NECESITO A ALGUIEN CONMIGO
¡YA SE! ME TRAERE A PEPE...
PUEDE SER QUE NO PROTESTE.

PEPE GORDON NO ESTA AQUÍ,
SE FUE PARA EL CAMPOSANTO,
LA MUERTE LO JALO AHÍ
PARA QUE REPOSE UN RATO.

CON HABILIDAD COGNITIVA,
BUSCA CON CIERTA PREMURA
A EINSTEIN DESDE SU TUMBA
¡PUES YA QUIERE LA EXCLUSIVA¡

Y AQUÍ NACIO UNA LEYENDA,
PEPE GORDON EN EL PANTEON
TRANSMITE EN LA TRASTIENDA:
“CIENCIA DESDE EL CAJON“.


FROYLAN LOPEZ

LA MUERTE SE QUISO LLEVAR
A FROYLAN AL OTRO MUNDO
PERO CUANDO LO VIO LLEGAR
LO NOTO FLACO Y HUESUDO.

DIJO CON GRAN DESCONCIERTO:
PONDRE A FROY EN UN NICHO…
RESULTA QUE YA ESTA MUERTO
SOLO QUE NADIE LE HA DICHO.


ANGELES LUNA

POR AQUÍ ANDA RONDANDO
LA CATRINA PRESUMIDA,
ANGELES LA ANDABA BUSCANDO
PA´ QUITARLE LO ABURRIDA.

LA MUERTE HUYO PAVOROSA
NO ME LLEVO AUN A ANGELES
PORQUE SE HACE LA GRACIOSA
Y PEINA MIS CAIRELES.


MANUEL LOPEZ MICHELONE “LA MORSA“


MANUELITO SE QUEJABA
DE ESTA FUERTE BUROCRACIA,
LA MUERTE LLEGO CON GRACIA
A OFRECERLE UNA RESPUESTA.

PERO, YO ESTOY GRABANDO
¿COMO ME VOY A IR?
LA FLACA DIJO CANTANDO:
PARE, DEJE DE SUFRIR.

LA MORSA LLEGO DE CABEZA,
POR NO ENCONTRARLE LAS PATAS,
PERO CUAL SERIA SU SORPRESA
QUE JUSTO CUANDO PASABA

UN ESQUELETO RAIDO,
CON AIRE DE PRESUMIDO,
LE DIJO COMO SI NADA:
¿ME DA SU PASE DE ENTRADA?


RAUL MALDONADO

LA MUERTE PUSO EN SU LISTA
A RAUL COMO  PENDIENTE
PERO LO PERDIO DE VISTA
PORQUE EL SE QUITO LOS LENTES.

RAUL MORIR NO QUERIA,
NI CON LA FLACA PARTIR
¿TANTO CHAMBEAR, DECIA,
PARA VENIRSE A MORIR?

CUENTAN LOS QUE HAN VUELTO,
QUE ALLA DESDE SU FOSA,
RAUL EDUCA A LOS MUERTOS
CON SU PALABRA DICHOSA.

Aprovecho para poner aquí la cápsula "Imaginantes", en donde Pepe Gordon habla precisamente de Posadas:

Monday, November 07, 2011

El problema del aprendizaje en ajedrez


Llevo muchos años de ajedrez y he participado en un sinfín de torneos. He visto en ellos a muchos niños y jóvenes empezar sus pasos por tan difícil juego. A algunos el ajedrez los atrapa y entonces el juego ciencia se convierte más en una pasión, en una obsesión, que en un juego de mesa. Se vive alrededor del ajedrez, se revisan las partidas de los mejores jugadores, se estudian los trucos que hay en el tablero, se analizan las aperturas, el medio juego, los finales más frecuentes. Y para ello se requieren de muchos años de trabajo, de constancia, porque sin ella, el progreso francamente tiende a ser nulo.

Es costumbre pensar que cuando un niño/joven decide empezar a jugar ajedrez competitivamente, requiera de un maestro que pueda guíarlo en tan complicada tarea. Desafortunadamente en nuestro país al menos, no existen muchos entrenadores y profesores de ajedrez, y los que hay –muchas veces– lo que en realidad buscan es un modus vivendi para ir solventando esto del vivir. Esto en pocas palabras quiere decir que no existen planes para ayudar a los niños a progresar en ajedrez de manera coordinada, con método, de forma tal que pueda verse –si se siguen la disciplina– llegar a empezar a mejorar en el nivel de juego.

Por otra parte, resulta fuera de la realidad pensar que puede haber ahí fuera, una serie de jugadores que puedan entrenar a quienes empiezan a jugar. Debido a que por una parte, el ajedrez mexicano está francamente descoordinado, y por otra, que no hay suficientes entrenadores para la cantidad de niños que son involucrados en el juego ciencia, los pocos entrenadores que pudiese haber deberían aplicarse a ayudar a quienes ya han demostrado que tienen cierto talento y que les interesa progresar en este difícil arte. Pretender pensar que a cada niño –aunque no tenga el mínimo talento–  se le debe poner un entrenador o profesor, es absurdo y fuera de lugar. Yo pienso que “primero ser y luego la manera de ser”. Es decir, primero que demuestre cierto talento natural y disposición para el ajedrez y después entonces, veamos cómo se le puede apoyar.

Yo soy de la idea que el ajedrecista en general se hace sólo. Por supuesto que la situación ideal es que hubiese entrenadores para todos, pero no los hay y por ende, debemos usar este recurso, en caso de existir, con aquellos que prometen llegar a jugar bien y que como dije antes, muestran talento, disposición y ganas de trabajar en el tablero.

Quienes crean que los ajedrecistas de gran nivel se hicieron gracias a que tuvieron entrenadores todo el tiempo, debo decirles que se equivocan. Botvinnik, el excampeón del mundo y padre del ajedrez soviético, tenía una escuela en donde los mejores talentos, entre ellos Kramnik y Kasparov, por ejemplo, concurrían, pero ojo, iban diez días cada seis meses a reunirse con el viejo patriarca. Éste revisaba el nivel de cada uno de sus pupilos, veía sus partidas y hacía un diagnóstico sobre qué temas ponerlos a estudiar para erradicar fallos y vicios en su juego. Botvinnik era un maestro en diagnosticar a sus pupilos, pero estos se iban a sus casas a trabajar con un muy pesado material que tenían que absorber en esos seis meses antes de volver a ver al excampeón del mundo. Dicho de otra manera, Botvinnik no les daba clases cada semana, ni nada por el estilo. Confiaba en la disciplina de cada jugador joven para que éste se aplicara a trabajar en su ajedrez, con el material que Botvinnik había creado para él.

El GM Alejandro Ramírez, por ejemplo, siempre estudió solo. Pero de niño ya tenía cierto talento y su fuerte trabajo personal en el tablero dio sus frutos. Los jugadores de ajedrez tienen que estudiar solos. Los entrenadores –cuando los hay– sirven como guías para no salirse del camino del trabajo contínuo o para no cometer los pecados de todo ajedrecista, como el estudiar aperturas antes del final, por ejemplo.

Evidentemente hay contraejemplos: Kasparov contó con la ayuda de Botvinnik, pero el ogro de Bakú tenía una disciplina férrea y se embarcaba muchas horas por día a trabajar sobre el tablero. Tuvo además la posibilidad de tener un entrenador como Nikitin pero ojo, Kasparov era un súper talento, y Botvinnik apreciaba mucho a Garry, porque lo veía como lo que finalmente fue: el décimo tercer campeón del mundo.

Hay otros ejemplos: El primer lugar del rating mundial, Magnus Carlsen, trabajó con un gran maestro noruego cuando empezó a jugar al ajedrez, pero las sesiones de entrenamiento eran un par de horas por semana. Aún así, Carlsen demostró su genialidad y en un año subió 1000 puntos de rating, para colocarse como un jugador de primera fuerza. Cuatro años después, prácticamente sólo, sin la ayuda de entrenador alguno, se ubicó en el primer sitio del escalafón mundial. Ahí entonces Kasparov tomó como pupilo al noruego y lo llevó a ser el mejor del mundo, pero quizás chocaron en carácter y hoy en día –de nuevo– Carlsen trabaja solo.

En cualquier otra disciplina pasa lo mismo. Por ejemplo, en una carrera universitaria uno va a clases no a aprender necesariamente, sino a que el profesor lo guíe, le dé instrucciones de qué estudiar, en qué trabajar. Si el alumno se reduce a tomar clases y no trabajar por su lado, difícilmente terminará una carrea profesional con éxito. Exactamente eso pasa en el ajedrez, pero peor aún, porque por su misma naturaleza, hay que esforzarse mucho en el tablero para ir comprendiendo sus secretos. Ningún entrenador puede sustituir el trabajo personal.

Los jóvenes y niños que hace unos años fueron enviados por sus padres a festivales de ajedrez en el extranjero, muchos de ellos, sino es que todos, ya han abandonado el ajedrez. La razón es simple: estaban mal preparados y sus rivales –al contrario– se habían esforzado mucho más y su nivel era mucho mejor. Así, gracias a que la Federación Mexicana de Ajedrez avaló a esos jovencitos aunque no tenían el nivel y sus padres el dinero para mandarlos a Grecia, España o donde fuese el torneo en cuestión, esos ajedrecistas mal preparados hicieron un desastroso papel. Así que ni para fogueo contó esa experiencia. No puede haber fogueo cuando hay demasiada disparidad en niveles de ajedrez de los mexicanos contra sus eventuales rivales europeos. A la larga esto sólo causa decepción entre los ajedrecistas mexicanos que pensaban que tenían cierto nivel y que fueron superados rotundamente en estas competencias.

El asunto es simple: Primero, es necesario poner límites a estas absurdas participaciones internaciones de cuanto niño que juega al ajedrez cuando no se tiene un nivel competitivo. Las Olimpiadas que se hacen cada cuatro años, y no me refiero a las de ajedrez, exigen, vía el Comité Olímpico Internacional, que den ciertas marcas mínimas. Si los atletas no las cumplen simplemente no van. No tiene sentido mandar a nadie a competir cuando sus rivales son mucho muy superiores. Por ejemplo, el récord mexicano de nado libre, en 100 metros, es de 51.65 segundos… El récord mundial es de 46.91. Estamos a años, muchos, de competir en esta disciplina. Pasa lo mismo en ajedrez, donde el nivel se mide por el rating. No tiene sentido poner a jugadores de 1800, 1900 puntos de rating contra juveniles que juegan al menos 2200 puntos Elo. Estos avales no ayudan a nadie y son en el fondo un negocio de la federación mexicana.

Mi sugerencia es sencilla: que los jugadores se apliquen ellos mismos, que estudien por ellos mismos si es que el juego les interesa lo suficiente. Hay muchas bases de datos, muchos libros, mucha información en Internet y puede progresar sin necesidad de nadie si se toma el ajedrez en serio. Quien siga pensando que un entrenador hace a los jugadores o no sabe, o tiene una idea ingenua de cómo se progresa en ajedrez.

Tuesday, November 01, 2011

Lapsus: anatomía de un corrector ortográfico V


La búsqueda binaria

Una de las cosas que hacen inevitablemente los correctores ortográficos es buscar en un diccionario si la palabra que buscan existe. Es claro que hay diferentes técnicas para hacer estas búsquedas, pero sin duda la más eficiente es la llamada "búsqueda binaria".

Por ejemplo, supongamos que tenemos 1000 palabras. Asumamos que la lista está desordenada. ¿Cuántas búsquedas tengo que hacer? A lo más 1000, porque la palabra que buscamos pudiese ser la última de la lista. Ahora bien, supongamos que la misma lista está ordenada alfabéticamente, de la A a la Z. ¿Cuántas búsquedas tengo que hacer? 10, porque lo que hacemos es dividir y conquistar, algo así como el procedimiento común que usamos cuando queremos hallar una palabra en un diccionario físico, real: Lo abrimos a la mitad y vemos si ya nos pasamos (es decir, la palabra que buscamos tiene que estar antes), o bien, nos quedamos cortos. Si nos pasamos, tomamos la primera mitad y volvemos a dividir en dos. Vemos de nuevo si nos pasamos o no. Hacemos este procedimiento hasta ver si  está la palabra que buscamos. (La ilustración al inicio de este artículo muestra este procedimiento al tratar de ver si el número 3 está en una lista ordenada de números).

Tratar de encontrar una palabra usando una búsqueda binaria es lo más eficiente, pues a cada paso se van eliminando la mitad de los elementos por  analizar. Por ejemplo, para el caso de un diccionario con 50 millones de palabras, hay que hacer solamente 26 búsquedas. El orden del algoritmo de la búsqueda binaria es logarítmico, es decir, el numero máximo de elementos que consultas es 2 elevado a la n, donde n es el numero de elementos en total.

En una búsqueda elemento por elemento, el orden es N, porque en el peor de los casos, hay que recorrer todo el arreglo para encontrar el elemento (o para verificar que el elemento no existe). En cambio en la busqueda binaria, si se tienen N elementos, en la primera consulta se selecciona N/(2^1) elementos, en la segunda N/(2^2) elementos (queda entonces un cuarto del arreglo por buscar), en la tercera N/(2^3)... así hasta que N/(2^x) sea cero. En otras palabras 2^x > N. donde x es el numero de búsquedas que se realizaron, y vale aproximadamente log2(N+1), que es de orden logaritmico.

Para ilustrar el asunto, muchas veces le pregunto a mis alumnos ¿cuántas búsquedas tienen que hacer si el diccionario tiene 1000 palabras? Alguno responde bien: unas 10. ¿Y si tienen 2000 palabras? Ya algunos se confunden, pero la respuesta correcta son 11 búsquedas. ¿Y si tengo 4000 palabras? 12 búsquedas serán suficientes. Cada vez que duplico la cifra, tengo que aumentar una búsqueda. No creo que exista en este rubro algoritmo más eficiente, amén que encaja perfectamente para el problema de la corrección ortográfica.

Funciones de Hash

Otra alternativa son las funciones de hash. En este caso hablamos d eun  algoritmo o subrutina que mapea un conjunto grande de datos a uno más pequeño, llamado llaves. En el caso de un diccionario, podríamos tomar cada palabra y aplicarle una función que nos regresara un número entero. Así, podríamos usar ese número como un índice en un arreglo para ver si la palabra que está ahí es la que buscamos.

Veamos cómo funciona esto. Asumamos que nuestra función de hash es la suma de los caracteres de la palabra. Para hacerlo más fácil, asumamos que la A es 1, la B es 2, la C es 3, y así sucesivamente. Tomemos por ejemplo, la palabra ROMA. Aplicando la función de hash obtendremos:


R(18) + O(15) + M(13) + A(1) = 47

Ponemos entonces la palabra ROMA en el casillero 47. Así, si busco esa palabra, le aplico la función de hash y me voy al casillero 47 y listo, solamente hice un acceso al diccionario. 

El problema es cuando tenemos otra palabra como AMOR, anagrama de ROMA. En este caso, la función de hash de AMOR será:
A(1) + M(13)+ O(15) + R(18) = 47
 
de nuevo 47. Aquí tenemos lo que se llama una colisión (dos palabras quieren ocupar el mismo casillero). Cuando esto pasa con demasiada frecuencia, es decir, cuando hay muchas colisiones, es momento de buscar una mejor función de hash, aunque hasta donde entiendo, no hay una función que no tenga colisiones. El asunto es minimizar esto y manipular el problema de las colisiones con una lista ligada, por ejemplo. Modos de tratar las colisiones hay muchos, algunos más eficientes que otros, pero finalmente para resolver esto requerimos de tiempo de procesamiento.

Por ejemplo, para evitar las colisiones con nuestra función de hash original, podríamos agregarle peso a la posición de las letras, así multiplicamos por 1 al valor de la primera letra, 2 al valor de la segunda letra, etc. Y con ello resolveríamos el problema de los anagramas, que siempre dan la misma función de hash. En el caso de ROMA y AMOR tendríamos:

Para ROMA:
R(18)(1)+ O(15)(2) + M(13)(3) + A(1)(4) = 
 
R(18) + O(30) + M(39) + A(4) = 91

para AMOR:
A(1)(1) + M(13)(2)+ O(15)(3) + R(18)(4) = 
 
A(1) + M(26)+ O(45) + R(72) = 144

Así evitamos la colisión de ambos anagramas, pero es probable que nuestra función sea muy elemental igualmente y conlleve colisiones con otras palabras. Por ello mismo me inclino a no usar funciones de hash en este problema y mejor aplicar la búsqueda binaria.

Monday, October 31, 2011

Lapsus: anatomía de un corrector ortográfico IV


 Una de las ideas ya bosquejadas aquí, para crear un corrector ortográfico que saque ventaja de todas las posibilidades que ofrece el español, es el usar un diccionario que contenga los verbos conjugados. Sabemos que cualquier diccionario contiene los verbos, pero en infinitivo. Así, si en un texto un verbo está conjugado (cosa que fácilmente suele suceder), entonces no podremos checarlo usando el diccionario principal de palabras. Por ende, hay que crear un diccionario con cada verbo conjugado.

El español, de acuerdo al pequeño manual Larousse de la conjugación, contiene unos 10,000 verbos, pero muchos no son regulares, es decir, tienen excepciones en sus maneras de conjugarse. El manualito en cuestión pone todas las posibles conjugaciones para cada verbo regular e irregular. En total -según recuerdo- hay unas 101 diferentes formas de conjugar verbos, lo cual implica que los verbos regulares terminados en ar, er e ir y además 98 otras conjugaciones para los verbos irregulares.

 Dar click en la imagen para ampliarla

Hacer un diccionario con todos los verbos implica por el momento un trabajo manual de mucho tiempo, el cual no tengo. Así que decidí entrar a Internet y ver si había una lista de verbos regulares al menos. Hallé en http://es.wiktionary.org/wiki/Categor%C3%ADa:ES:Verbos_regulares una buena lista de verbos regulares, cuya cuenta es de 2159. Si cada verbo puede generar unas 51 conjugaciones diferentes, tendremos 110,109 nuevas palabras que son simplemente los verbos conjugados. Podemos añadir esto a las diferentes técnicas de búsqueda. Evidentemente, en el caso de tener todos los verbos, regulares e irregulares, alimentados en el diccionario, estaríamos hablando de 510,000 palabras extras para buscar.

Escribí un programa que precisamente genera las palabras conjugadas y permite guardar el diccionario ya ordenado. Cabe señalar que antes de guardar la información al diccionario de verbos conjugados, éste se ordena alfabéticamente para después hacer una búsqueda binaria sobre éste. Hablaremos de eso en la siguiente entrega.

Hay que reírse de uno mismo


Dar click para ver la imagen en grande

Javier Rivera, alias "el javo", me mandó la portada de una revista que halló, en donde salgo yo como el elemento fundamental debido a mi predisposición a discutir con todos en foros, blogs, redes sociales y comentarios de los sitios de Internet. Me parece una puntada muy simpática y lo dejo aquí para que vean que siempre es sano no tomarse demasiado en serio. Me queda claro que el buen Javo tiene demasiado tiempo libre. Gracias, Javier.

Del oficio de periodista


Yo pensaba que ser periodista significaba -entre otras cosas- informar con veracidad. Yo no sé si en las escuelas de periodismo se enseñe esto, pero lea cualquier periódico y verá que ya en este país el periodista no informa, sino que distorsiona la realidad, ya sea por la necesidad del efecto mediático (para vender la noticia), para que la gente lo lea, o porque le pagan para promover a alguien en particular.

Observen por ejemplo, los pasados juegos panamericanos. Bueno, el gobierno de Jalisco quiso hacer de esta justa deportiva algo lo más parecido a una Olimpiada, y habrá que ver a todo esto, cuánto le costo al país este chistecito. La ceremonia de clausura y de apertura de los juegos fue tan espectacular como en la mejor de las olimpiadas. En serio, ni idea de cuánto habrá costado, pero barato, lo que se dice barato, no fue. Pero independientemente de esto, los medios se volcaron día a día hablar de los triunfos de los mexicanos. Oro aquí y allá. Nuevas estrellas de la gimnasia, clavadistas excepcionales, etc. Y no dudo que en esta cantidad enorme de atletas que participaron, hayan surgido algunos con posibilidades de generar alguna medalla olímpica. Sin embargo, ¿alguien habló de los que realmente ganaron los juegos? ¿los norteamericanos? ¿Los medios cumplieron con informar? No. Pareciera consigna de hablar maravillas que cada triunfo mexicano, pero ignoran que los norteamericanos duplicaron en medallas de oro y plata a los mexicanos, a pesar de venir con un equipo C. Vaya, ninguna de sus grandes estrellas estuvo presente. Pero de eso no se dijo nada. Tampoco se dijo que el 40% de las medallas de oro (de México) se lograron en deportes que no son olímpicos. Consecuentemente, ¿cuál es la realidad del deporte en nuestro país cuando los medios no cumplen con su elemental obligación de informar, no de distorsionar la verdad? Amén de esto, me parece una falta de respeto a todos esos deportistas de otros países que ni un párrafo merecieron en los medios nacionales. No se necesita mucho para darse cuenta de lo sesgado de la información y de que nadie fue capaz en los medios de poner las cosas en su justa proporción.

Pero esto no es todo, El Doctor Miguel Ángel Mancera, Procurador general de Justicia del Distrito Federal sale todos los días, todos, en la sección dedicada a la ciudad de México, en el periódico Excélsior, que en realidad dejó de ser un periódico para convertirse en una inserción pagada. Obsérvese por ejemplo, en los días anteriores del Excélsior, hoy 31, el día 29 (el día 30 no estaba disponible) y el día 28 de octubre en la sección de "Comunidad", que es sobre el Distrito Federal, vemos lo siguiente:





El Sr. Mancera sale todos los días en esa sección, en la primera plana de esa sección. Digamos que ya esto no suena a casualidad. ¿Qué busca Mancera? ¿habrá pagado para que día a día salga en el Excélsior? ¿Querrá ser Jefe de Gobierno del DF ahora que haya elecciones? Ahi lo dejo a la reflexión.

Saturday, October 29, 2011

Guil Russek, prolífico autor

Guil Russek es Maestro Internacional de ajedrez. Ha participado en unas seis olimpiadas de ajedrez (un torneo por equipos mundial, que originalmente se llamaba "torneo de las naciones"), y aunque ahora juega menos en torneos que antes, sigue manteniendo un estupendo nivel de ajedrez. Russek -que lo conozco bien- devora información de ajedrez y de ahí salió la idea de que "Guil no juega al ajedrez, se acuerda".

En los últimos años ha enfocado parte de sus esfuerzos ajedrecísticos a la enseñanza y a escribir libros sobre el tema. Es un prolífico escritor y tiene obras para todos los niveles. Su conocimiento enciclopédico, su cultura ajedrecística, nos las hace ver en la posiciones que analiza en sus obras y nos muestra las partidas y combinaciones más significativas de todos los tiempos. La imagen muestra los libros que ha escrito. 11 libros en total, 8 en la Editorial Selector y 3 en la editorial Época.

Vale la pena hacerse de sus libros. Russek sabe explicar las dificultades tácticas y estratégicas de las posiciones. Como la elección de las mismas ha sido muy cuidado, a la larga el aficionado podrá hallar no sólo temas de ajedrez, sino de la belleza intrínseca de este difícil juego.

Lapsus: anatomía de un corrector ortográfico III


Escribir un corrector ortográfico es algo más que hacer una tabla de look up entre las palabras a analizar y un diccionario de las mismas. Los lenguajes humanos son muy sofisticados, con reglas, con excepciones, con un sinfín de recovecos que hacen de escribir un programa de esta naturaleza un interesante reto.

Consideremos a los usuarios que procesan textos con Windows. Suelen usar la mayoría la suite informática de Microsoft, Office, en muchas de sus versiones. Particularmente -desde luego- editan sus documentos usando Word para Windows.

Escribir un corrector ortográfico que contenga todo incluido, incluso un editor de textos no suena como la mejor idea, a menos de que funcionase y tuviese el mismo look & feel que Word para Windows. Escribir el procesador de palabras que funcione más o menos similar al de Microsoft puede ser una tarea muy ingrata. Mejor sacar ventaja de su uso incorporando el corrector ortográfico -Lapsus- como una aplicación que se liga a Word y que se comunica con éste, en donde Word manda las palabras a analizar a Lapsus y este último le responde precisamente con los mensajes de corrección ortográfica o bien, con una lista de palabras probables para la corrección.

Para que esto se pueda hacer, es necesario meterse en las entrañas de OLE, Object Linking and Embedded, que es el mecanismo de comunicación entre dos procesos que corren bajo Windows. Originalmente, cuado trabajé con la primera versión para Windows de Lapsus, usé la tecnología DDE (Data Dynamic Exchange), la cual tenía un manual de referencia por demás oscuro, nulos ejemplos, y que funcionaba una vez mal y otra también. Por ello, hasta que Microsoft no sacó OLE, el corrector Lapsus tenía muchísimas dificultades para correr ligado a Word y de hecho, se congelaba inesperadamente o bien, terminaba sin avisar, etc. Gracias a OLE, esos problemas desaparecieron.

Muchas herramientas de programación ya tienen incluido en sus bibliotecas de Windows, la que corresponde a OLE y Delphi no es la excepción. Como siempre pasa en estos casos, la referencia de Microsoft o es muy general o bien, muy específica a Visual BASIC o Visual C. Así, ejemplos de cómo echar a andar la biblioteca de funciones de OLE para Delphi parecía una labor complicada.


Hallé vía Google que en una revista que ya desapareció, Delphi Informant, tenía escritos un par de artículos de cómo ligar precisamente Delphi con otras aplicación a través de OLE. La única opción disponible era comprar el CD, con seis años de la revista en PDF (y una carpeta con todo el código fuente), por unos 40 dólares. El envío eran otros 20 dólares. Me animé pues el proyecto pensaba y sigo pensando, valía la pena. El susodicho CD no llegaba después de tres meses. Escribí a la revista y me dijeron que si no llegaba en esa semana me mandarían otro. Finalmente llegó, pero lo habían mandado por vía terrestre desde Sonora. ¿El costo del envío? Unos 3 pesos. Reclamé a la empresa que me vendió el disco indicándoles que el costo del envío era un robo, porque lo mandaban por vía terrestre y ya desde territorio mexicano. Me contestaron que ellos mandan los paquetes a su distribuidor en México y que se desentienden. Pedí el reembolso pero se negaron dármelo. Entonces les dije que repartiría el CD a todo aquel que lo quisiese (la oferta sigue en pie). Me dijeron que eso era ilegal. Les dije que el robo de lo que pagué por el envío era igual de ilegal. No me contestaron más. Así terminó esta fea historia, no sin antes aclarar que los artículos escritos en dicha revista sobre la conexión Delphi-OLE son magníficos y que valen la pena. Al término de estos artículos pondré disponible todo el material para quien se interese.

Pues bien, hallé que la comunicación de mi aplicación, Lapsus, con Word de Microsoft era muy simple usando OLE. A todo esto, muchos sitios en la red explican esto, pero en Delphi omiten partes por demás fundamentales que los artículos de Delphi Informant indican con precisión. Pienso que si se trabaja con Delphi, esta revista, lamentablemente ya desaparecida, tenía un buen caudal de información.

Con ello en mente, y ya habiendo probado que podía hacer "platicar"a Lapsus con Word, me di a la tarea de crear un primer menú con las opciones que el sistema debería tener. He aquí lo que esquematicé:

Dar click para ver en tamaño completo

En el siguiente artículo hablaremos de las opciones que el sistema tiene y ya nos adentraremos a analizar algunas partes del sistema que merecen más atención.