Showing posts with label delphi 7. Show all posts
Showing posts with label delphi 7. Show all posts

Monday, July 20, 2026

El Método Woodpecker (versión La Morsa)


Hace unos días vi el video de alguien que decía que a los libros de Grau (cuatro tomos del Tratado General de Ajedrez), ya había que jubilarlos. La queja del influencer era simple: estos libros no tienen ejercicios y más parece una liturgia en donde habla el todopoderoso Grau que nos enseña a jugar, explicándonos todo, pero ignorando la parte de la práctica. Y realmente tiene algo de cierto en lo que dice, aunque hay que reconocer que muchos grandes ajedrecistas del continente americano se hicieron gracias a la obra de Roberto Grau. Más aún, Grau tenía una tesis: jugar bien al ajedrez no es tan difícil, pero se requiere de entender la lógica que está en el tablero.

Pero como en todo, el ajedrez es mucho más vasto que lo que puede decirse en 4 tomos. Además, el tiempo ha pasado y cada vez hay más ajedrecistas, los cuales -muchos de ellos- nos han enseñado a trabajar en diferentes aspectos del ajedrez: cálculo de variantes, ejercicios de cálculo, finales, aperturas, etcétera.  Y es evidente que hoy se enfocan muchos métodos de mejora en ajedrez en el practicar los diferentes tópicos hasta dominarlos.

No es para nadie un secreto que, para dominar la parte táctica del juego, hay que hacer muchos ejercicios de táctica, de esos que se ven en revistas y libros de "Juegan blancas y ganan", "Juegan las negras y empatan", etcétera. Y se sabe que quien dedique tiempo a este tipo de ejercicios verá eventualmente una mejora en su nivel de ajedrez. Este asunto práctico es tan importante y muchos maestros lo saben, que la literatura en este sentido es amplia. 

Uno de los primeros libros con ejercicios lo publicó el Maestro estadounidense Fred Reinfeld, quien literalmente abrió brecha para que el ajedrez empezara a popularizarse. Reinfeld, por ejemplo, recolectó pacientemente 1001 posiciones de sacrificios y combinaciones brillantes. Lo hizo sin computadora, sin bases de datos, sin Chessbase. Seguro le llevó años recolectar todo su material. Pero además hizo otro libro con 1001 combinaciones de mate. Igualmente, una labor sistemática para poner todas estas posiciones donde un jugador vence a su rival de forma espectacular. estos dos libros se convirtieron en obligatorios para todo aquel que tomase en serio el ajedrez.


Otros autores siguieron esta idea y Nunn sacó más de un libro de combinaciones brillantes. Zenón Franco tiene otro, Khenkin hizo otro más con ataques de mate, etcétera. Y no es casualidad. Es claro, para la mayoría de los maestros, que es importantísimo el hacer ejercicios de táctica cotidianamente, De hecho, plataformas como LiChess, Chess.com, ICC y Chessable, entre otras, tienen secciones de táctica para que sus suscriptores trabajen en esta parte fundamental del ajedrez. 

En el 2018, se publicó el Método del Pájaro Carpintero (The Woodpecker Method). el cual es un duro programa de entrenamiento de ajedrez. ideado por el GM Hans Tikkanen y el GM Axel Smith. Su principio central es resolver cientos de problemas de táctica (hasta 1128) en ciclos sucesivos, reduciendo drásticamente el tiempo permitido para resolverlos y logrando así reconocer patrones de forma automática y subconsciente. Esto se reduce a hacer estos 1128 ejercicios en 4 semanas y repetir dos semanas después, una semana, etcétera, hasta llegar a tener que resolver todos los ejercicios en un día. Los autores dicen que gracias a esta idea finalmente lograron las normas finales para convertirse en grandes maestros, aunque el MI Oscar Sánchez, que de ajedrez sabe cualquier cantidad, dice que el método quizás funcione, pero no les compra la idea de que esto sea la diferencia para convertirse en gran maestro.

Yo ya intenté hacer el método del pájaro carpintero, pero no pude. Se requiere de disciplina (y mucho más tiempo del esperado). Así, considerando que no estaría mal tener una visión propia del tema, decidí escribir un programa de computadora (software), que tomara los ejercicios de esta obra (que son posiciones de partidas famosas, y que pueden conseguirse en Internet en archivos PGN [Portable Game Notation] y que, cabe decirlo, no tienen derechos de autor), y me fuese presentando cada posición para así poderla resolver. Esto es mucho más ágil que hacerlo con el libro y anotando las jugadas para después revisar las soluciones. Esto puede ser la diferencia entre poder o no realizar la idea de Tikkanen y Smith.


Me tomé algunas libertades ´para poder crear una aplicación que fuese más ágil para el estudioso del ajedrez. Por ejemplo, decidí que solamente el sistema vería la variante principal y no la sub-variantes. Así, cada posición presentada muestra cómo se resuelve en la línea principal. Eso hace menos complicado trabajar sobre las posiciones y el estudiante tiende a perderse menos que cuando tiene una posición con muchas variantes. Recuérdese que se trata de repetir posiciones con motivos tácticos para que después de N repeticiones, el cerebro las aloje en su subconsciente y con ello hacer que el conocimiento sea ya del estudiante. Tampoco es novedad que la repetición en cualquier ámbito del conocimiento es fundamental para dominar un tema. Un ejemplo clásico: los músicos que tocan algún instrumento.

El software se ha hecho con mucho cuidado y me gusta el resultado. Hay otros libros de táctica que me parece vale la pena pasarlos a este sistema. Estoy en las modificaciones para generalizar su funcionamiento y así poder tener los 1001 problemas que Reinfeld puso en sus dos obras clásicas. Es más, encontré además una base de posiciones pública, de LiChess, con más de ¡6 millones de ejercicios de táctica!, para niveles de 0 hasta 3000 de Elo. Ya estoy trabajando para tener una versión que contenga todos los ejercicios y ahora sí, digamos que el tema estaría bastante completo. Cabe decir que la base de datos de ejercicios de LiChess salió de las partidas que se juegan en ese portal. Los autores de esta enorme base de posiciones se tomaron la molestia en calificar de forma automática el nivel de cada posición en términos del Elo, que mide la fuerza de un ajedrecista, por lo que, en principio, se puede hacer un software que solamente presente ejercicios del nivel que el estudiante quiera.


El plan es ahora recuperar la inversión del desarrollo del software. El costo de mi sistema es muy accesible y si me escriben a mi correo: morsa@la-morsa.com, les puedo mandar información sobre e costo de los diferentes programas. Pero créanme, es más costosa una salida al cine o a cenar.






Tuesday, March 07, 2023

La computadora que hace arte II

 


A mí me parece que la computadora moderna es francamente una revolución, como lo fue en su momento el teléfono o la televisión. Si a eso le añadimos el acceso a Internet, pues tenemos todos los ingredientes para hacer maravillas, sobre todo si pensamos que todos estos elementos están al alcance de las mayorías.


Si pensamos en las gráficas, la computadora ha avanzado considerablemente y de tener apenas 4 colores en su tarjeta gráfica (1981 en la IBM PC original), hoy podemos desplegar casi 17 millones de colores. De hecho, ya no hay que diseñar tarjetas más poderosas porque -aparentemente- el ojo humano ya no puede distinguir más tonalidades.


En lo que se refiere a proceso digital de imágenes (en 2 dimensiones), podemos escribir filtros que sirvan para segmentar imágenes, para cambiar el contraste y el brillo y hacer más visible alguna región que ha aparecido oscurecida, por ejemplo, lo que quizás podría ser útil en el proceso de imágenes médicas. Algunos filtros podrían incluso investigar -con inteligencia artificial- lo que los médicos suponen es un tumor o un elemento que no debería estar en un lugar específico del cuerpo.


Pero hay también filtros gráficos, como los que vimos en el artículo pasado. Pues bien, me quedé con las ganas de implementar un filtro como el de los círculos o rectángulos redondeados, pero en esta ocasión con la figura de una estrella. Puse manos a la obra y quizás en media hora pude implementar el procedimiento correspondiente.



Debo reconocer que esperaba un resultado "más espectacular", pero no fue así. Sin embargo, tampoco es despreciable el resultado. Para esta prueba usé una foto de Polina Tsarenkova (polina_tsarenkova en Instagram), quien creo es una modelo rusa y bueno, califíquenla ustedes. De nuevo, la técnica usada es similar a la que ya expliqué en el artículo pasado.


Quizás lo interesante es ver cómo vía un algoritmo sencillo, amén de tener acceso a sistemas de cómputo verdaderamente poderosos, pueden permitirnos crear filtros con visos artísticos sin necesidad de tener que hacerlos "a mano". 





(Click para hacer más grande la foto)


 

Friday, March 11, 2016

El esfuerzo cooperativo al escribir software



Llevo tiempo pensando en que debía hacer algún software que me permitiera corregir los textos que escribo de manera más rápida. Para ello -es claro- se necesita un buen diccionario en español y hasta donde sé, no hay muchos buenos diccionarios que sean gratuitos. Hay sin embargo algunas alternativas, por ejemplo, tratar de usar el diccionario en español que viene con MsWord a través de OLE (Object Linking & Embedded), que es en realidad un protocolo para compartir información entre aplicaciones.

El caso es que me puse a investigar qué debía hacer y empecé por buscar componentes para Delphi (Turbo Pascal para Windows), que ya hiciese esta labor de corrección de forma sencilla, sin tenerme que poner a diseñar la estructura de datos del diccionario. Hallé en www.torry.net, algunos componentes. O eran de demostración o bien, costaban sus buenos dólares. Así que seguí investigando y eventualmente dí con un sitio web, el cual contiene un par de componentes para hacer corrección ortográfica en Delphi: TSpellChecker y TSpellLanguageComboBox. TSpellerChecker es un componente no-visual diseñado para poder añadir la corrección ortográfica a cualquier aplicación. Para ello usa los diccionarios de ISpell, un corrector que nació en una PDP y que eventualmente se portó a otros sistemas. Lo interesante de ISpell es que usa un formato que otros sistemas han imitado. ISpell tiene además otra virtud, hay muchos diccionarios de muchísimos idiomas, entre ellos el español.

Partiendo de esto, este par de componentes parecen ser los idóneos para el trabajo que quiero hacer. Hallo que incluso estos componentes de Delphi pueden usar los diccionarios instalados en MsOffice 95 o 97. El autor de la página indica que no puede garantizar que funcione con versiones más avanzadas de Office. Una ventaja más de estos componentes es que incluyen el código fuente, por lo que en principio, pueden modificarse para las necesidades particulares de los programadores.

Considerando esto, bajé e instalé los componentes en mi Delphi 7, que me sigue pareciendo una de las versiones más estables a pesar de que han salido actualizaciones que sin duda deben ser más poderosas pero para este particular programa, me basta el poder que me da. Cabe señalar que el autor original de los componentes es Alexander Obukhov, de Minsk, Bielorrusia, quien los escribió para Delphi 3. Sin embargo, Luzius Schneider, un suizo, se aplicó para actualizarlos.

Escribí pues un programa sencillo, que hace la corrección ortográfica de manera muy eficiente. Debo decir que la ventana de corrección tiene aún los botones de acciones (cambiar, saltar, ignorar, etcétera), en inglés, lo cual suena ridículo que sigan en ese idioma si la corrección es para el idioma castellano. Tengo que sentarme a leer el código fuente de los componentes para hacer los cambios, pero en realidad "se me quemaban las habas" por ver si el sistema podría funcionar con el diccionario en español de ISpell.

Y sí, funciona y lo hace bastante bien. He empezado a jugar con este programa y lo estoy usando para escribir mis artículos de unocero, buscando que los errores de dedo se minimicen. Igualmente, en algunos artículos pongo referencias y entonces he definido una serie de opciones del menú -que podrían cambiar- para insertar automáticamente texto como el de "Referencias:" u otros que me sean comunes. Vamos a ver cómo evoluciona el software.

Lo más interesante de esta experiencia es que de alguna forma el trabajo en equipo, colectivo, de diversos programadores, da la posibilidad de hacer una aplicación que bien podría considerarse complicada de escribir en algo que me llevo unas pocas horas. Bendito Internet y toda la gente que colabora porque el generar código se vuelva una labor menos complicada.

El programa me lo pueden pedir a mi correo morsa@la-morsa.com, el cual les mandaré para que lo prueben, incluso con el código fuente, para que vean cómo en el cómputo moderno se pueden hacer programas sumamente complejos en tan pocas líneas.


Referencias:

LS Speller 

Saturday, September 05, 2015

Un truco para proteger el software


El 8 de agosto del 2013 publiqué un artículo sobre un programa que hace reconocimiento de caracteres visualmente (OCR), el cual usa una biblioteca de funciones de un tercero, que yo no escribí, sólo usé.

La biblioteca es gratuita pero estaba limitada en tiempo de uso, cosa que no sabía. El asunto es que de pronto mi programa dejó de funcionar. De alguna manera, pensé, la biblioteca tiene por ahí alguna función que sabe en qué momento se instaló el software y entonces calcula si está todavía en período de pruebas o no. Normalmente muchos programas en modo de prueba, que duran muchas veces no más de 30 días, permiten que el interesado pueda revisar, probar y usar el software sin ninguna limitación en ese tiempo. Después del mismo el software ya no se puede ejecutar.

Los esquemas para hacer software de prueba pueden funcionar de la siguiente manera: escribir en el disco duro del usuario, en alguna parte, un archivo escondido con la fecha de terminación del período de prueba. El software, antes de correr, va a buscar ese archivo y lo lee. Si la fecha del sistema ya es mayor a los 30 días, el software termina. Si por alguna eventualidad dicho archivo no existe, también el sistema termina la ejecución.

Hay otros esquemas más sofisticados que escriben en el REGISTRY, un archivo fundamental en la PC que si desaparece, mete en problemas al usuario de la máquina porque probablemente no pueda ver siquiera los programas que tiene en la máquina. Es un archivo muy sensible y ahí muchos fabricantes de software ponen sus claves de registro para conocer si se trata de software de prueba o no. No me voy a meter más con este archivo y recomiendo que si no saben cómo funciona, ni metan las manos ahí. Si lo hacen y cometen un error, es casi garantía que su computadora quedará inutilizada.

Pues bien, regresando al problema, me sorprendía que el ejecutable de mi programa de reconocimiento de caracteres supiera que ya no puede ejecutarse. Pensando un poco sobre esto, hallé que la única manera que podría saber eso era con al fecha de creación del programa escrito. Entonces decidí hacer una prueba: cambiar la fecha del ejecutable por la del día de hoy y probar. ¡Y sorpresa! Funcionó.

Para cambiar la fecha de creación de un programa se usa una utilería llamada touch, la cual cambia automáticamente la fecha del software. La sintaxis es:

touch nombre_del_archivo

Este programa no es de Windows, sino que se corre en modo consola. Como mucha gente no sabe cómo pasar a modo consola, escribí en un archivo batch dos instrucciones que hacen la tarea:

touch ocr01.exe
ocr01

Al darle doble click a este programa .bat, el sistema cambia la fecha al día de hoy y corre el software sin problemas. Así pues, asunto solucionado después del uso de un par de neuronas para entender el esquema de protección usado por el autor de la biblioteca de software.

Si alguien cree que hago mal, le sugiero entonces me compre la biblioteca comercial de dicho paquete de OCR y asunto moral solucionado.

Si le interesa este programa, escríbame a morsa@la-morsa.com y se lo mandaré a su correo.

Saturday, November 16, 2013

Una re-evaluación de Lazarus


Por motivos meramente académicos, decidí que mis alumnos aprendieran a usar una herramienta RAD. Muchos de ellos programan como hace años se hacía, usando un editor como VI o EMACS y llamando al compilador GCC. Cuando había un error, regresaban al editor y recompilaban hasta que, eventualmente el programa que estaban haciendo funcionaba.

Pero los sistemas RAD (Rapid Application Development) tienen un editor, compilador y depurador (debugger, pues), que hacen la vida del programador más fácil. Y en ese sentido Lazarus cumplía con las características de lo que andaba buscando. Amén de ser software de código abierto, la promesa de Lazarus es la de crear un entorno de programación que funcione igual en Mac OS X, Linux y Windows, y que es muy semejante a Delphi, que no es otra cosa que Turbo Pascal para Windows.

Mis alumnos usan dos plataformas en general: Mac y Linux. Uno que otro usa Windows. Como Lazarus se puede instalar en cualquiera de esos sistemas operativos, pensé que la vida iba a ser fácil y que de alguna manera se lograría la promesa de "write once, run everywhere", que no es otra cosa que "escríbase una vez y córrase en cuanta plataforma de cómputo exista". Pues bien, hallé que Lazarus tiene dificultades para instalarse en Mac OS X, por ejemplo, y que en Ubuntu (en red), es lento, insufriblemente lento. En mi Ultrabook -con Windows- no es un dichado de velocidad Lazarus, pero es aceptable su desempeño.

Pero ojalá hubiese sido sólo eso. Hallé que la biblioteca gráfica (aparentemente en Linux usa, por ejemplo GTK+), Lazarus presentaba resultados inconsistentes, dependiendo de si usaba Mac OS X, Linux o Windows. El más cercano de los resultados esperados se obtiene en Windows, pero en Mac OS X y Linux, la salida de ciertos filtros gráficos elementales resulta francamente inexplicable.

Quizás haya que decir que he comparado los resultados de Lazarus versus Delphi 7, el cual ya es una herramienta comercial muy bien pulida y que no padece las dificultades halladas al intentar utilizar Lazarus como una plataforma de desarrollo. En mi opinión, este sistema de código abierto es un ejemplo de un buen esfuerzo que aún no tiene un resultado lo suficientemente robusto y sólido para usarse en cualquier entorno de desarrolladores. Comparado contra el equivalente a este producto, en términos comerciales, Delphi 7 deja muy atrás a Lazarus.

Es evidente que los programas comerciales tienen un plus, que desde luego los hace más poderosos que los equivalentes de código abierto, pero obviamente hay que pagar un precio por ello -literalmente. Hay que decir, no obstante, que no todos los programas de código abierto tienen este comportamiento en donde finalmente la gente casi tiende a decidirse por la contraparte comercial. Pero en el caso de Lazarus he quedado insatisfecho y por qué no decirlo, decepcionado. Pensé que ya era una herramienta lo suficientemente trabajada. Me he equivocado, pero bueno, es un riesgo inevitable al usar software no comercial. Aún así, seguiré viendo los avances de Lazarus. Quizás la siguiente versión sea más púlida y corrija estos extraños errores. Ya veremos.

Thursday, August 08, 2013

OCR para todos

El reconocimiento óptico de caracteres (OCR por sus siglas en inglés), trata de reconocer letras y palabras a partir de imágenes, de manera que puedan pasar a un sistema que pueda ser manipulado. Por ejemplo, si tuviésemos una hoja de un documento que ha sido escrito a máquina y éste lo pasáramos por un escáner, usando la tecnología del OCR podríamos convertir la imagen del documento en cuestión en texto, el cual ya podríamos manipular fácilmente. Esto -desde luego- nos evitaría gastar tiempo, pues claramente un documento físico, si lo quisiésemos en la computadora como archivo de texto, tendríamos que transcribirlo a mano. Con el OCR esta dificultad desaparece.

El proceso básico del OCR es convertir el texto que aparece en una imagen a un archivo de texto, el cual podrá ser editado y usado como tal por cualquier otro programa, por ejemplo un procesador de palabras. Partimos pues de la imagen de un documento, la cual podría ser muy buena, digamos perfecta, con sólo dos niveles de gris, blanco y negro. Bajo esta premisa, el reconocimiento de caracteres se realiza comparándolos con patrones que contienen todos los posibles caracteres (en un idioma específico). Sin embargo, las imágenes reales que escaneamos con este propósito no son perfectas, por lo el OCR encuentra varias dificultades:

  • El dispositivo que obtiene la imagen puede introducir niveles de grises al fondo que no pertenecen a la imagen original.
  • La resolución de estos dispositivos puede introducir ruido en la imagen, afectando los píxeles que han de ser procesados.
  • La distancia que separa a unos símbolos (letras) de otros, al no ser siempre la misma, puede producir errores de reconocimiento.
  • La conexión de dos o más caracteres por píxeles comunes también puede producir errores.
El programa en funcionamiento 
(usando una imagen escaneada de una cuartilla de la Gaceta UNAM)

Hoy en día muchos de estos problemas han sido resueltos y ya existen componentes y bibliotecas de OCR para los lenguajes de programación más populares. De hecho, me interesé en el tema porque tenía un documento que necesitaba pasar a texto y me daba una pereza extraordinaria teclearlo en la computadora. Así que en lugar de hacer esto, me di a la tarea de ver si podía programar una aplicación que lograra esto. Así entonces, bastaría con escanear las cuartillas del documento en cuestión y entonces las procesaría con mi eventual programa.

Hallé que en Delphi hay varios componentes que pueden hacer esta tarea. Dos de ellos me llamaron la atención. El primero, de una empresa llamada WinSoft, el cual puede instalarse en Delphi 7 y proveer lo que necesito para procesar imágenes y convertirlas a texto y uno más, de una compañía llamada Nicomsoft, el cual se ve mucho mejor, pero es para versiones de Delphi que simplemente ya no tengo. Por ello, me quedé con el primero. Hice algunas pruebas y sorprendentemente el componente (de evaluación), lo hace bastante bien.

Una vez que vio que los resultados funcionaban, me di a la tarea de tratar de hacerlo mejor. Es claro que las imágenes perfectas, de dos tonos de gris, no siempre existen, por lo que decidí utilizar algunas ideas de procesamiento de imágenes para "limpiar" los documentos escaneados y hacer que el componente OCR hiciese la tarea de manera más simple y sencilla, y con mayor precisión.

Agregué así algunos filtros digitales para preprocesar las imágenes (que contienen las cuartillas escaneadas) para entonces después, usar el OCR y quedarme con el documento en modo texto que bueno, probablemente tenga que leer y corregir en algunos casos, pero que me habrá ahorrado mucho tiempo de transcripción es un hecho y bajo esa percepción, creo que es un programa que a más de uno le puede interesar.

A quien lo quiera, pídamelo a morsa@la-morsa.com y se lo enviaré de forma gratuita a su buzón digital a la brevedad.

Monday, May 27, 2013

Curso de programación lúdica


Se me ha ocurrido organizar un cursillo de programación lúdica, en donde quienes asistan podrán aprender algunos trucos e ideas que les pueden ser útiles no solamente para hacer programas simpáticos, sino como parte de sus actividades profesionales si es que se dedican a escribir código.

Son cuatro sábados (3 horas por sesión) (de 4:30 pm a 7:30 pm), empezando el 15 de junio del 2013, y quizás una quinta sesión si acaso es necesario ponerla. Nos reuniremos en un lugar que está muy cerca de lo que era el toreo de 4 caminos. Solamente cinco "alumnos" que sepan programar en algún lenguaje de alto nivel, de preferencia C, Java, Python, etcétera.  El costo por alumno es de 2000 pesos por todo el curso, pero el quinto alumno será becado, es decir, a quienes les interese, mándenme un correo a morsa@la-morsa.com y díganme los motivos por los cuales deberían ser becados. A quienes puedan pagar, les sugiero le den la chance de ser becado a otro.

Requisitos:
  1. Computadora portátil
  2. Windows 7, Vista, XP
  3. Ganas de aprender
  4. Asistir a todas las sesiones
  5. Los materiales de software los pongo yo

El plan de trabajo es aprender -desde Delphi- algunas ideas en programación. Pienso que puede ser interesante. Avísenme a quienes les interese.