Showing posts with label velocidad al acceso de la información. Show all posts
Showing posts with label velocidad al acceso de la información. Show all posts

Friday, August 02, 2019

Un misterio sin resolver...



Crear software siempre parece ser una labor intrigante porque de hecho, si lo pensamos, las instrucciones que escribimos suponen que la computadora tendrá un comportamiento que esperamos. Cuando algo sale mal, entonces vemos nuestra lógica y notamos algún detalle que hace que ocurra un comportamiento inesperado, un resultado falso evidente, lo que nos hace "debugear", es decir depurar el código. Eventualmente obtendremos lo que queremos.

Pues bien, uno de los programas que estoy escribiendo para el doctorado, es el de tratar de "sacar una 'foto' a cada posición que se produce en una partida de ajedrez". Esta "foto" es una expresión Forsyth (o algo muy parecido), en donde se expresa en una cadena de letras la posición que estoy "fotografiando". Por ejemplo, la posición inicial sería:

tcadractpppppppp11111111111111111111111111111111PPPPPPPPTCADRACT

Esto se lee de izquierda a derecha, de 8 en 8 letras. Cuando se termina una secuencia de 8 letras, se pasa a la siguiente línea. Las piezas negras se representan con las minúsculas y las blancas con las iniciales mayúsculas. Esto podría entonces verse así:

tcadract
pppppppp
11111111
11111111
11111111
11111111
PPPPPPPP
TCADRACT

Que representa la posición inicial del tablero, leída desde la esquina superior izquierda hasta la esquina inferior derecha.

Mi software permite entonces leer una partida de ajedrez, en formato PGN, y tomar una instantánea de la posición, salvándola en un archivo. Aparte de la posición se dan detalles como si es posible el enroque y quién juega. Pero eso para el misterio que tengo no ti3ne importancia.

El software ya lo describí en este enlace. Mi programa funciona pero es muy lento. Una partida puede quizás procesarla en 10 a 15 segundos, quizás más. Y etso hace que requiera mucha "galleta" computacional o que pula mi código para que trabaje mejor.

Una primera aproximación fue la de quitar todos los "application.processmessages" de mi código cuando éste se encuentra procesando una posición. En Delphi se tiene este comportamiento: si se entra en un loop, en un ciclo, Delphi rabiosamente hará el ciclo sin interrupciones, a menos que se use, dentro del loop, una instrucción application.processmessages, que hace que el sistema vea las interrupciones y les haga caso cuando está ejecutando el loop.

Por ejemplo, si estamos procesando una imagen para pasarla de color a tonos de gris, y no le ponemos dentro del loop un application.processmessages, el sistema cambiará todos los pixeles a tonos de gris y de pronto, en un pantallazo final, desplegará el resultado. Pero si ponemos esta instrucción dentro del loop, hallaremos que el sisteam despliega cada pixel que va pasando a tonos de gris. Así, si le quitaba todos los processmessages a mi código, no tendría que ver cada cosa que va pasando en el tablero para ir viendo qué posición está fotografiando.

Hice los cambios, compilé el software y lo corrí en la máquina con Windows 7. El resultado de procesar una minibase de partidas fue rapidísimo... El video en este enlace. En cambio, en una máquina con Windows 10, el resultado fue lamentablemente lento. este es el enlace al video.

Cabe decir que es el mismo programa compilado con las "optimizaciones" mencionadas corriendo en las dos versiones diferentes del sistema operativo de Microsoft. La máquina Windows 10 es de hecho más poderosa que la Windows 7. He aquí lo que dice cada uno de los sistemas:

Windows 10: 

Windows 7:



¿Por qué uno es tan lento y el otro no? ¿Qué tiene Windows 10 que lo hace tan lento? ¿Por qué no funcionan las optimizaciones, que funcionaron en Windows 7, pero no en Windows 10? ¿Alguna idea?





Wednesday, February 19, 2014

Modas mediáticas


Hoy en día, la Internet está llena de artículos que empiezan con: "Las 27 películas que debes ver antes de morir", "Las 53 fotografías que no te debes perder", "Los 9 videos que tienes que compartir", etcétera. Y esto simplemente nos habla de este mundo de velocidad feroz, en donde ya no se puede leer un texto, sino que todo se debe resumir en estas listas de cosas por ver/hacer/escuchar, que alguien ha recopilado y que nosotros nos tragamos sin siquiera pensar. Y así como lo leemos, así lo olvidamos.

El ser humano parece funcionar muchas veces bajo el principio de "lo que hace la mano, hace la tras", y esto es evidente en lo que se refiere a modas. Si la artista de la televisión usa cierto tipo de calzado, o de falda, o de peinado, ya saldrán las imitadoras de esto. Si se trata de hombres no nos salvamos: se copian estilos, si todos ahora usan barba como de tres días de no rasurarse, o el corte de pelo X o Y, o unos anteojos de un estilo definido, etcétera, lo imitamos. Y nadie está a salvo de esto. Todos somos víctimas de la moda.

Y en cómputo también se ve. Sale Apple cambiando los iconos de su plataforma iOS y todos los iconos de sitios web, de muchas empresas, siguen la moda que implementó la manzanita. Y si no me creen, vean el diseño de Google, ahora es minimalista. Y a pesar de que se tengan interfaces gráficas con millones de colores, con posibilidad de hacer iconos que se vean más realistas, más 3D, nos conformamos con la vacilada que Apple diseñó y que por alguna razón inexplicable para mí, todos siguen.

Y como ya me parece idiota y enfermiza esta modita de las N cosas por hacer, voy a hacer una sola: no leeré artículo alguno que me quiera presentar una lista de cosas de ver/escuchar/hacer, etcétera. Lo juro.