Tuesday, August 13, 2019

Sobre el nuevo gobierno, el Peje y la 4T


En unos pocos meses se cumplirá un año del nuevo gobierno, de la cacareada cuarta transformación y del supuesto nuevo comienzo de este país. En este estilo tan personal de gobernar, Andrés Manuel López Obrador, "el Peje", ha empezado con el pie izquierdo. Por ejemplo, decidió cancelar el nuevo aeropuerto y las razones no están claras. Incluso Jiménez Espriú dijo que no había pruebas de corrupción. Simplemente se canceló por el capricho del nuevo presidente. Mal inicio.

Y a partir de ahí se desataron toda clase de noticias alarmantes: que no había dinero para los hospitales, para un sinfín de servicios, que la ciencia era despreciada por el Peje, que Conacyt cancelaba no sé cuantos programas, etcétera. Y así un número indeterminado de "fake news", como por ejemplo, la del comedor "gourmet" en las instalaciones de Conacyt, cosa absolutamente falsa. Así que no está muy claro cuánta gente ha sido despedida del gobierno ni cuantos programas se han cancelado. No es fácil saberlo porque las protestas de los afectados como que no salen a la luz pública o quizás los medios de comunicación no les interesa esto. No lo sé.

Lo que sí sé es que López Obrador sale cada mañana a decir un número indeterminado de dislates, de estupideces, en donde parece que sigue hablando el eterno candidato y no la cabeza del nuevo gobierno. Y sigue hablando de sus enemigos políticos. Y sigue contestan do incoherencias una y otra vez. Le hacen una pregunta para que se luzca y contesta con una soberana tontería, que ni siquiera tiene que ver: "lo que diga mi dedito" (haciendo un gesto de "no" con el mismo).

Y hay noticias que rayan en la improvisación por demás absurda. Por ejemplo, le quitaron más de la mitad del apoyo a los deportistas de alto rendimiento.  Pero estos sacaron la casta y tuvieron un papel relevante en los juegos panamericanos en Perú. Y hay que ser francos, tampoco hicieron maravillas considerando que los estadounidenses, por ejemplo, llevaron a su tercer equipo en la mayoría de las pruebas. Pero como sea, el peje indicó que daría más de 200 mil pesos de apoyo a cada deportista de estos juegos cuando se vendiese la casa del chino al que le encontraron hace unos años unos 200 millones de dólares en efectivo. La casa se vendió en 105 millones de pesos. Y ahora, con ese dinero, va a recompensar a los atletas.

Y de nuevo, más allá de la medida, pareciera que el Peje no tiene la más pálida idea de lo que es hacer un  presupuesto. Es como si yo quiero ir al cine y para ello sólo iré si se venden las quesadillas que acabo de hacer. resulta absurdo. Normalmente las dependencias tienen un presupuesto y entonces se hace un plan de cómo y en qué se va a gastar. Vamos, no se improvisa de esta manera.

Pero miren, me gusta que el Peje haya abierto los Pinos, que se haya ido en contra de Rosario Robles y que la hayan metido presa de forma cautelar, no se les vaya a escapar. Me da gusto que en algunas cosas se disminuya la corrupción, pero de ahí a tener una política económica seria, como que el Peje y su gobierno están lejos, muy lejos de ello.

¿Pero qué pasará en el futuro cercano? Mi opinión es que un país como México no se puede gobernar a base de frases queriendo ser graciosas o de escuchar letanías que no dicen nada. Por ejemplo, el Peje acaba de decir que para gobernar este país se necesita 99% de honestidad y 1% de capacidad. Y si esto es grave, también dijo que no se les puede dejar la economía a los economistas, porque es como dejarle la paz a los militares. Vamos, que López Obrador tiene una facilidad absoluta para hacerse de enemigos.

Pero de nuevo, sin importar estas frases que suelta sin el menor reparo el presidente de México, hay que reconocer que la economía no se anda con medias tintas. Vamos, que se puede estar gestando un problema económico que podría ser como una bomba que cuando explote, entonces tendremos una devaluación feroz, una economía agarrada con alfileres, con la subsecuente crisis que acompaña las malas decisiones económicas de los gobiernos.

Yo quisiera pensar que esto no ocurrirá, pero cada día que pasa, cada día de conferencia "mañanera" en donde el Peje parece que cada vez le cuesta más trabajo articular con sensatez sus ideas, me hace sospechar que quizás López Obrador tiene razón cuando dice que no se le puede dejar la economía a los economistas, pero yo pienso algo más, que no se le puede dejar la economía de este país a un ignorante. Quizás pronto despertemos de la 4T y nos demos cuenta de la verdadera cara de López Obrados, al que se le calificó de "estadista" después del primer discurso cuando ganó la presidencia y que ahora parece que estamos ante un personaje ignorante y tonto absolutamente.

Monday, August 12, 2019

Sobre el reto 8/2(2+2)



Los retos aritméticos en Internet, muchas veces a través de las redes sociales, suelen llevar trampa, para que el lector se equivoque y cuando le dicen la razón, entienda el truco. He aquí el más polémico de los que se han publicado.

Hay un nuevo reto aritmético en Internet que pregunta el resultado de la operación 8/2(2+2). Realmente parece fácil pero tiene cierto truco, o al menos eso es lo que pretende que parezca. Veamos cómo resolverlo. En primera instancia, hay unos paréntesis, lo cual significa que debemos hacer la operación dentro del paréntesis primero. En este caso, tenemos (2+2). Fácil, la respuesta es 4. Entonces, lo que tendremos es la expresión 8/2(4). Lo que causa confusión ocurre aquí. ¿Qué debemos hacer primero, 2(4), es decir, multiplicar 2 por 4 o bien, 8/2, es decir, la división de 8 entre 2.

Antes de responder a esto, hay que aclarar que la expresión es ambigua y los lenguajes de programación por ejemplo, definen algo que llaman "precedencia de operadores", de manera que indican cómo la máquina, en el lenguaje de aplicación particular, va a realizar las operaciones. Normalmente primero se hacen multiplicaciones y divisiones y después sumas y retas. Si -como en este caso- las operaciones tienen la misma precedencia, se hacen de izquierda a derecha. Tomando en cuenta eso, entonces tendríamos que hacer 8/2 = 4 y entonces después multiplicar por el 4 que está en el paréntesis, lo que daría como resultado final de 16. Por ejemplo, si ponemos esta operación a Google, sí, el buscador, que tiene integrado una calculadora, éste dará este resultado y además, mostrará la expresión como (8/2) * (2+2).

Pero hay quien dice que hay que hacer primero 2(4), que es 2 por 4, lo cual da 8. Entonces, finalizamos la operación con 8/8 que da como resultado final 1. Y si consideramos la precedencia de operadores, este resultado estaría equivocado pero... ¿lo está? Veamos:

La precedencia de operadores es un invento de los lenguajes de programación, porque en matemáticas podemos cambiar esta precedencia usando paréntesis. Si queremos que una expresión no sea ambigua, como en el caso que nos ocupa, entonces pondremos (8/2) * (2+2) (como precisamente pone Google) o bien, 8 / (2*(2+2)), dependiendo qué queremos expresar. Curiosamente, en matemáticas muchas veces tenemos expresiones como ésta: 8/2c, donde c=4. Y aquí cualquier matemático podría decir: "sustituyo la c por el 4 y multiplico por 2 y entonces hago la división. Y por ende, el resultado final es 1". Y es que si pongo 2c, es claro que es equivalente a 2 por c (que se escribe en lenguaje de las computadoras "2 * c", donde el "*" es el símbolo de multiplicación (para evitar confundirlo con la letra "x"). Entonces, la precedencia "la cambiamos" porque asumimos que 2c es multiplicar "2 * c" primero y luego hacer la división.

El resultado que entrega Google


Cabe decir que en matemáticas no existe la precedencia de operadores y desde que empecé a estudiar aritmética y matemáticas, desde que fui a la escuela, nadie me enseñó qué operación hay que hacer primero. Esto, repito, se inventó para poder definir con precisión las operaciones matemáticas y su orden cuando se escriben expresiones en un lenguaje de programación y sin embargo, en este caso, podrían existir lenguajes de programación que decidieran otra jerarquía o precedencia de operadores por las razones de diseño que consideren. ¿Qué queremos decir con todo esto? Que el lector puede dar la respuesta que quiera, 16 o 1. Ambas son correctas porque la expresión es simplemente ambigua.

Desde luego que esta ambigüedad es lo que provoca la discusión de qué resultado es el correcto. La realidad en matemáticas es que si queremos saber el resultado correcto, hay que poner los paréntesis adecuados para saber en qué orden hay que hacer las operaciones.

Friday, August 09, 2019

El nuevo libro de mi asesor del doctorado



Los jueves se han convertido en estos últimos años en algo así como "jueves de regaño", pues es el día que veo a mi asesor del doctorado, el Dr. Jorge Luis Ortega Arjona, quien revisa mis avances en mi trabajo de tesis, los dislates, los fallos y en ocasiones, hasta los aciertos.Se dice fácil, pero hay que estar cada jueves revisando las barbaridades que a uno se le ocurren. El doctorado no tiene desperdicio.

Debo reconocer que el doctorado me ha dado una visión mucho más estricta de lo que se hace en ciencia. Aquí no hay mucho margen para la especulación y hay que demostrar contínuamente lo que uno está afirmando. Es claro que hay un rigor que no se ve en la licenciatura ni en la maestría. Así pues, este estudio me ha dado muchas satisfacciones y creo que se me ha ampliado el espectro del análisis en mi trabajo académico. Realmente esto me tiene contento.

Pues bien, el Dr. Ortega finalizó su año sabático publicando un nuevo libro titulado "Temas Selectos de Computación", el cual desde luego, tiene el rigor académico pero no por eso es complicado de leer. Trata un buen número de temas: Diseño de computadoras y sistemas digitales, análisis de algoritmos, estructuras de datos, autómatas, criptología, complejidad, hasta Inteligencia artificial, entre otros temas. En mi opinión los capítulos y secciones dan una muy buena idea de los temas más importantes hoy día en lo que se refiere a cómputo y que pueden servir como inspiración para que los alumnos desarrollen muchos de estos temas.

La Facultad de Ciencias es la editora de esta obra y sin duda es una buena adición al acervo bibliográfico en donde el autor es un académico de la propia facultad. La semana del 12 al 16 de agosto del 2019, al menos, será la Feria de Libros en la Facultad de Ciencias. Una muy buena oportunidad para hacerse de este libro.

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?